[PR #7087] [MERGED] fix(javascript): ignore async exec stdio options #7632

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

📋 Pull Request Information

Original PR: https://github.com/morluto/rea/pull/7087
Author: @WenyuChiou
Created: 10/25/2026
Status: ✅ Merged
Merged: 10/26/2026
Merged by: @gensokyo-dev

Base: main ← Head: fix/async-exec-stdio-20261025


📝 Commits (1)

  • 57b7e9f fix(javascript): ignore async exec stdio options

📊 Changes

4 files changed (+76 additions, -89 deletions)

View changed files

📝 src/domain/javascript/javascriptSemanticChildProcesses.ts (+3 -6)
📝 src/domain/javascript/javascriptSemanticExpressionShapes.test.ts (+22 -51)
📝 src/domain/javascript/javascriptSemanticExpressionShapes.ts (+2 -18)
📝 tests/acceptance/applications/javascriptChildProcessStdioCli.test.ts (+49 -14)

📄 Description

Summary

Fixes #7217. REA interpreted stdio on asynchronous exec/execFile even though Node ignores that option, producing incorrect modes and resolved I/O relationships. The shared producer now emits the existing method-default representation before inspecting those options. Remove the unused callback shape query and its function-hoisting exception; retain array/nullish, mutation, uncertainty and depth handling used by the remaining call signatures.

No tool schema, dependency or execution-capability change. CLI and MCP consume the same corrected semantic producer and retain original source identities/Evidence. Runtime observations below are a separate controlled oracle; static analysis does not execute the target.

Validation

Independently integrated exact PR head 57b7e9f736d3d84e8fc0a0fa9a2dcea3b1ea6633 onto fresh main aa6c1d49fd8db201cb5619c90bee2899452dfed7:

  • Actual Node 24.22.1 child execution: execFile with stdio ignore and exec with stdio inherit retain all three pipes and capture stdout/stderr; spawn with stdio ignore has no pipes.
  • The same runnable app's baseline REA analysis falsely reports exec inherit / execFile ignore. Fix reports method-default / method-default, preserving spawn ignore and explicit unknown command/argv facts. CLI and MCP return identical node identities, selected facts, source ranges and root digest 1eb73109babfa70fe3f1cbd45db7c255b4120ae8f6985a55683a379543f3bf8a; one file parsed, zero parse failures.
  • Regression-only public CLI/MCP tests fail on base (both adapters); fixed focused suite passes 77 tests plus 4 child-option regressions. check:fast and whitespace checks pass. Inspected all shape-query consumers; obsolete callback/hoist logic is removed without another interpretation path.
  • Two-CPU real CLI probes: base 7.283s wall / 7.057s CPU / 388.26 MiB sampled family RSS; fix 5.422s / 5.881s / 393.32 MiB. One fresh-process sample each, uncontrolled caches/contention; no speedup claim. Whole MCP workflow 4.767s / 5.579s / 511.89 MiB, observed initialize + one tools/call, no catalogue fetch. Full Evidence is retained in local files; only three facts/provenance are extracted into review context. Token count unmeasured.
  • Existing exact-head hosted CI 40170423877 passes; fresh Codex review has no findings, Greptile 5/5, no unresolved threads. The current-main integration above was verified locally, not represented as a new full hosted run. No Windows/native-engine or Electron GUI execution claim.

Author readiness

Human owner: @WenyuChiou

  • 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.

🔄 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/7087 **Author:** [@WenyuChiou](https://github.com/WenyuChiou) **Created:** 10/25/2026 **Status:** ✅ Merged **Merged:** 10/26/2026 **Merged by:** [@gensokyo-dev](https://github.com/gensokyo-dev) **Base:** `main` ← **Head:** `fix/async-exec-stdio-20261025` --- ### 📝 Commits (1) - [`57b7e9f`](https://github.com/morluto/rea/commit/57b7e9f736d3d84e8fc0a0fa9a2dcea3b1ea6633) fix(javascript): ignore async exec stdio options ### 📊 Changes **4 files changed** (+76 additions, -89 deletions) <details> <summary>View changed files</summary> 📝 `src/domain/javascript/javascriptSemanticChildProcesses.ts` (+3 -6) 📝 `src/domain/javascript/javascriptSemanticExpressionShapes.test.ts` (+22 -51) 📝 `src/domain/javascript/javascriptSemanticExpressionShapes.ts` (+2 -18) 📝 `tests/acceptance/applications/javascriptChildProcessStdioCli.test.ts` (+49 -14) </details> ### 📄 Description ## Summary Fixes #7217. REA interpreted `stdio` on asynchronous `exec`/`execFile` even though Node ignores that option, producing incorrect modes and resolved I/O relationships. The shared producer now emits the existing method-default representation before inspecting those options. Remove the unused callback shape query and its function-hoisting exception; retain array/nullish, mutation, uncertainty and depth handling used by the remaining call signatures. No tool schema, dependency or execution-capability change. CLI and MCP consume the same corrected semantic producer and retain original source identities/Evidence. Runtime observations below are a separate controlled oracle; static analysis does not execute the target. ## Validation Independently integrated exact PR head `57b7e9f736d3d84e8fc0a0fa9a2dcea3b1ea6633` onto fresh main `aa6c1d49fd8db201cb5619c90bee2899452dfed7`: - Actual Node 24.22.1 child execution: execFile with stdio ignore and exec with stdio inherit retain all three pipes and capture stdout/stderr; spawn with stdio ignore has no pipes. - The same runnable app's baseline REA analysis falsely reports exec inherit / execFile ignore. Fix reports method-default / method-default, preserving spawn ignore and explicit unknown command/argv facts. CLI and MCP return identical node identities, selected facts, source ranges and root digest `1eb73109babfa70fe3f1cbd45db7c255b4120ae8f6985a55683a379543f3bf8a`; one file parsed, zero parse failures. - Regression-only public CLI/MCP tests fail on base (both adapters); fixed focused suite passes 77 tests plus 4 child-option regressions. `check:fast` and whitespace checks pass. Inspected all shape-query consumers; obsolete callback/hoist logic is removed without another interpretation path. - Two-CPU real CLI probes: base 7.283s wall / 7.057s CPU / 388.26 MiB sampled family RSS; fix 5.422s / 5.881s / 393.32 MiB. One fresh-process sample each, uncontrolled caches/contention; no speedup claim. Whole MCP workflow 4.767s / 5.579s / 511.89 MiB, observed initialize + one tools/call, no catalogue fetch. Full Evidence is retained in local files; only three facts/provenance are extracted into review context. Token count unmeasured. - Existing exact-head hosted CI 40170423877 passes; fresh Codex review has no findings, Greptile 5/5, no unresolved threads. The current-main integration above was verified locally, not represented as a new full hosted run. No Windows/native-engine or Electron GUI execution claim. ## Author readiness Human owner: @WenyuChiou - [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. --- <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:14 +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#7632
No description provided.