[PR #7233] [CLOSED] fix(javascript): report effective piped stdio for exec and execFile #7735

Closed
opened 2026-11-03 13:39:59 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/morluto/rea/pull/7233
Author: @BeqaKs
Created: 10/26/2026
Status: ❌ Closed

Base: main ← Head: fix/exec-stdio-effective-mode


📝 Commits (3)

  • 96a2764 fix(javascript): report effective piped stdio for exec and execFile
  • 380bd69 style: format child-process stdio CLI acceptance test
  • a37d90b chore: merge upstream/main into fix/exec-stdio-effective-mode

📊 Changes

3 files changed (+66 additions, -29 deletions)

View changed files

📝 src/domain/javascript/childProcessOptionsRegression.test.ts (+47 -7)
📝 src/domain/javascript/javascriptSemanticChildProcesses.ts (+3 -2)
📝 tests/acceptance/applications/javascriptChildProcessStdioCli.test.ts (+16 -20)

📄 Description

Summary

  • Narrowed after #7087: for async exec / execFile, always report stdio_mode: "pipe" (effective callback capture).
  • Do not distinguish “missing stdio → default” vs “present ignored stdio → pipe”; runtime I/O is the same either way.
  • Leave spawn/fork projection unchanged (default remains method-native unset there).

Problem and expected behavior

#7217 (closed) covered wrongly reporting declared ignore/inherit for async exec/execFile. #7087 fixed that by ignoring unused declarations and returning default.

What remains is a representation choice. Callers reading stdio_mode / the projected stdio node ask whether streams are captured vs inherited. For async exec/execFile, Node always pipes stdout/stderr for the callback API and never forwards options.stdio. Reporting default understates that always-piped effective I/O; pipe matches how projection already treats resolved effective mode (default = method unset for spawn/fork). Presence of a useless stdio property must not change the answer.

Change and scope

Ordinary semantic representation adjustment inside the existing child-process owner; maintainer scope decision not applicable. Replaces #7087’s always-default with always-pipe for these two methods only.

Contract and boundary impact

  • Semantic owner: javascriptSemanticChildProcesses / stdioMode
  • CLI and MCP: stdio_mode on child-process graph nodes / connected stdio nodes
  • Generated metadata: none

Expected effects:

  • Read existing files or captured data.

Evidence and regression coverage

  • Tests: childProcessOptionsRegression.test.ts, javascriptChildProcessStdioCli.test.ts (no “when declaration present” framing)

Validation performed

  • npm run test:local -- src/domain/javascript/childProcessOptionsRegression.test.ts — 5 passed
  • npm run test:focused -- tests/acceptance/applications/javascriptChildProcessStdioCli.test.ts — 2 passed
  • npm run check:fast — passed

Author readiness

Human owner: @BeqaKs

  • I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work.
  • I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps.
  • I declare this PR ready for initial maintainer review.

Before merge

  • This PR addresses a concrete problem or an agreed enhancement.
  • Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff.

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/morluto/rea/pull/7233 **Author:** [@BeqaKs](https://github.com/BeqaKs) **Created:** 10/26/2026 **Status:** ❌ Closed **Base:** `main` ← **Head:** `fix/exec-stdio-effective-mode` --- ### 📝 Commits (3) - [`96a2764`](https://github.com/morluto/rea/commit/96a2764c76fa7759e90388e12a4bb7ee87cfa32c) fix(javascript): report effective piped stdio for exec and execFile - [`380bd69`](https://github.com/morluto/rea/commit/380bd69f2a85fb6c2b02aa9e9d3224f39e923ee8) style: format child-process stdio CLI acceptance test - [`a37d90b`](https://github.com/morluto/rea/commit/a37d90b548e0d947289739ad2d574db1d9ed206d) chore: merge upstream/main into fix/exec-stdio-effective-mode ### 📊 Changes **3 files changed** (+66 additions, -29 deletions) <details> <summary>View changed files</summary> 📝 `src/domain/javascript/childProcessOptionsRegression.test.ts` (+47 -7) 📝 `src/domain/javascript/javascriptSemanticChildProcesses.ts` (+3 -2) 📝 `tests/acceptance/applications/javascriptChildProcessStdioCli.test.ts` (+16 -20) </details> ### 📄 Description ## Summary - Narrowed after #7087: for async `exec` / `execFile`, always report `stdio_mode: "pipe"` (effective callback capture). - Do **not** distinguish “missing stdio → default” vs “present ignored stdio → pipe”; runtime I/O is the same either way. - Leave spawn/fork projection unchanged (`default` remains method-native unset there). ## Problem and expected behavior #7217 (closed) covered wrongly reporting declared `ignore`/`inherit` for async `exec`/`execFile`. #7087 fixed that by ignoring unused declarations and returning `default`. What remains is a representation choice. Callers reading `stdio_mode` / the projected `stdio` node ask whether streams are captured vs inherited. For async `exec`/`execFile`, Node always pipes stdout/stderr for the callback API and never forwards `options.stdio`. Reporting `default` understates that always-piped effective I/O; `pipe` matches how projection already treats resolved effective mode (`default` = method unset for spawn/fork). Presence of a useless `stdio` property must not change the answer. ## Change and scope Ordinary semantic representation adjustment inside the existing child-process owner; maintainer scope decision not applicable. Replaces #7087’s always-`default` with always-`pipe` for these two methods only. ## Contract and boundary impact - Semantic owner: `javascriptSemanticChildProcesses` / `stdioMode` - CLI and MCP: `stdio_mode` on child-process graph nodes / connected `stdio` nodes - Generated metadata: none Expected effects: - [x] Read existing files or captured data. ## Evidence and regression coverage - Tests: `childProcessOptionsRegression.test.ts`, `javascriptChildProcessStdioCli.test.ts` (no “when declaration present” framing) ## Validation performed - `npm run test:local -- src/domain/javascript/childProcessOptionsRegression.test.ts` — 5 passed - `npm run test:focused -- tests/acceptance/applications/javascriptChildProcessStdioCli.test.ts` — 2 passed - `npm run check:fast` — passed ## Author readiness Human owner: @BeqaKs - [x] I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work. - [x] I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps. - [x] I declare this PR ready for initial maintainer review. ## Before merge - [x] This PR addresses a concrete problem or an agreed enhancement. - [x] Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-11-03 13:39:59 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
morluto/rea#7735
No description provided.