mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[PR #1577] [MERGED] fix(javascript): retain runtime scope in bundled module relationships #2984
Closed
opened 2026-10-17 21:12:32 +00:00 by bsakaguchi
·
0 comments
No Branch/Tag specified
main
codex/procedure-reference-stacked
release-please--branches--main--components--rea-agents
release-please--branches--main--components--rea-agents--release-notes
codex/kuna-independent-retry
codex/byte-search-overlay-coverage
codex/open-failure-target-receipt
codex/kuna-xref-evidence
codex/ghidra-ambiguous-procedure-recovery
codex/function-source-bundle
codex/trace-function-integration-prototype
codex/snapshot-source-closure
codex/recorded-evidence-array-pages
codex/evidence-recovery-redesign
codex/trace-feature-address-scope
codex/call-discovery-scope
codex/ghidra-literal-candidate-evidence
codex/decompile-directory-independent-retry
codex/retry-provenance-base
codex/value-flow-capability-experiment
codex/ghidra-containing-instruction
cursor/readme-discord-button-ef9f
dependabot/github_actions/actions/setup-node-7.1.0
dependabot/github_actions/actions/upload-artifact-7.0.2
dependabot/npm_and_yarn/npm-minor-and-patch-d8d97ce6df
codex/kuna-1989
fix/8559-native-ui-fixture-ownership
fix/8555-go-verifier-mcp-ownership
codex/provider-capability-recovery
fix/8642-rizin-target-stdin
codex/ghidra-memory-effect-scope
codex/ghidra-annotation-entry-selector
codex/ghidra-readonly-recovery
codex/ghidra-regex-verifier-recovery
codex/evidence-discovery-view-guidance
fix/8545-bulk-append-overflow
fix/8428-navigation-refusal-alternatives
codex/address-context-recovery
codex/matching-member-limitations
codex/unknown-scope-contract
codex/evidence-view-guidance
feat/8373-native-trace-views
codex/ghidra-snapshot-verifier-binding
codex/elf-export-visibility
codex/evidence-view-recovery
codex/native-reference-cli-help
codex/provider-candidate-observation-scope
codex/kuna-session-verification
codex/ghidra-switch-lifetime-guidance
codex/pseudocode-paging-discovery
codex/clarify-evidence-view-support
codex/kuna-xrefs-selector-recovery
codex/context-capacity-recovery
codex/evidence-closure-large-links
codex/same-function-evidence-identity
codex/ghidra-verifier-inspected-jdk
codex/audit-guided-workflows
codex/crash-prompt-retained-dossiers
codex/analysis-view-error-recovery
codex/kuna-verifier-target-selection
codex/ghidra-selected-project-call-coverage
codex/docs-native-analysis-scope
codex/ghidra-java-socket-boundary
codex/ghidra-retained-snapshot-verifier
codex/ghidra-search-inventory-facts
fix/8284-zero-argument-parameter-bindings
fix/8198-ui-action-handler-offset
fix/8257-elf-entry-label-identity
fix/8304-deferred-output-schema-projection
fix/8277-call-path-computed-target-uncertainty
fix/pr-8089-conflicts
fix/ci-static-duplicate-export
dependabot/npm_and_yarn/lint-staged-17.6.0
dependabot/github_actions/actions/download-artifact-8.0.2
dependabot/npm_and_yarn/write-file-atomic-8.0.0
dependabot/npm_and_yarn/canonicalize-5.1.0
dependabot/github_actions/actions/cache/restore-6.1.0
dependabot/npm_and_yarn/toon-format/toon-4.4.0
dependabot/github_actions/actions/deploy-pages-5.0.1
codex/review-fixes-pr-2403
codex/review-fixes-pr-2400
codex/process-terminal-width
codex/test-brittleness-cleanup
verify/7167-browser-connect-macos
fix/7167-browser-connect
feat/native-matching-allowance-setting
feat/browser-scenario-dry-run
test/managed-caller-parameters-20261024
codex/parser-fortythird-boundaries
fix/6926-pinvoke-platform-decorations-20261023
fix/6889-har-body-encoding-20261023
fix/6888-sqlite-schema-budget-20261023
fix/dependency-security-gates-6708
cursor/evidence-overwrite-rebase-b4ac
feat/4057-verify-native-exports
fix/windows-acl-observer-overhead-20261022
cursor/erlang-beam-restack-4476
cursor/pe-certificate-review-bf32
fix/6116-javascript-application-fs-errors
fix/6061-unmapped-runtime-script-unknown
feat/browser-scenario-summary
fix/pe-certificates
codex/verify-3407
cursor/rebase-5699
cursor/rebase-5352
cursor/rebase-5600
cursor/fix-cli-schema-omission-10a8
codex/audit-hopper-shutdown-reasons-20261021
fix/demangle-swift-omitted-record
fix/nib-boolean-value-types
cursor/cancellation-partial-observation-a5ac
fix/ib-object-limit-reasons
fix/electron-fuse-limit-advice
fix/kuna-doctor-dangling-cache
fix/fixed-budget-refusal-advice
fix/js-ipc-listener-dedup
fix/js-return-member-provenance
fix/dmg-integrity-retry-advice
fix/ida-doctor-readiness
fix/kuna-version-probe-output-drain
fix/legacy-swift-runtime-name-matching
fix/dylib-lazy-load-commands
fix/browser-scenario-startup-cancel
fix/swift-nested-punycode-classification
fix/compare-unselected-scopes
fix/objc-method-budget-coverage
fix/dmg-mounted-root-observations
audit/ci-tests-20261019-round2
release/6.7.0
fix/wabt-cleanup-retry-resolution
fix/electron-fuse-elf-pe-architecture
fix/native-plist-descriptor-ownership
fix/kuna-caller-cleanup-ownership
experiment/atomic-codemode-20261016
review/first-contributor-3776
fix/call-resolution-full-read-cycles
fix/member-mutation-selection-repeat
experiment/atomic-re-tools-20261015
perf/member-mutation-lazy-origins
perf/static-network-mutation-index
fix/hopper-startup-lifecycle
audit/3050-windows-proof-20261015
feat/windows-window-capture-2183
audit/3049-windows-proof-20261015
audit/3735-macos-fixtures-20261015
fix/batch-decompile-null-pseudocode
fix/kuna-inventory-honors-jobs
experiment/browser-codemode-tool-design-20261015
fix/hopper-clean-runtime-argv
codex/review-2049-27f1b367
review-fixes/pr-2787-routing
fix/3360-scoped-this-emitters
fix/3367-replaced-global-effects
fix/3838-compact-any-value-items
test/hopper-download-probe-20261015
codex/windows-runtime-creation-red-green-20261015
codex/windows-readonly-root-red-green-20261015
codex/windows-root-share-red-green-20261015
codex/exp-1685-win-mcp-startup
codex/bug-sweep-20261015
investigate/2190-windows-package-phases
investigate/3543-macos-cli-deadline
perf/3281-reverse-tools-feedback-quality
fix/3406-hopper-doctor-fixture
fix/3341-wrapper-require-test-context
fix/3301-owned-uninstall-fixtures
fix/3164-compiler-input-ownership
fix/pcap-cleanup-stdout-newline-20261014
perf/interface-builder-summary
codex/review-fixes-pr-1977
fix/ghidra-effective-jvm-platform
fix/docs-turkish-rust-link-20261013
fix/main-maintenance-ci-20261010
fix/recover-binary-session-process-effects
codex/review-fixes-pr-2457
codex/ci-required-cancellation-gate
fix/main-format-baseline-20261013
fix/setup-preserve-entry-fields
cursor/restore-main-checks-1ffc
fix/ghidra-bridge-hashmap-import
codex/shared-ci-jadx-json-default-20261013
codex/shared-ci-ghidra-test-groups-20261013
codex/shared-ci-java-fixture-format-20261013
codex/fix-intrinsic-invocation-boundaries
test/release-preflight-reusable-jobs
test/js-parameter-provenance-expectation
fix/linux-hopper-verification-current
test/2419-ghidra-elf-probe-size
followup/pr-1544-native-ida
codex/fold-pr-2230-contribution
docs/readme-responsible-use
fix/issue-2064
fix/issue-2050
fix/issue-2053
fix/issue-1968
fix/issue-1945
experiment/codemode-bridge-20261011
fix/tool-effects-negative-wording-1904-20261012
fix/1842-electron-interop-provenance
feat/recover-javascript-multi-input
refactor/website-i18n-prep
fix/nativeaot-pe-virtual-extent
fix/browser-verifier-ci-hang
fix/pe-resources-input-selection
docs/beginner-friendly-guides
docs/beginner-setup-guide
fix/javascript-analysis-worker-1563
fix/1649-ghidra-duplicate-names
fix/javascript-export-keys-integration-1369
test/maintenance-boundary-contracts-20261011
review/javascript-export-keys-1369
review/process-live-progress-1483
test/javascript-1495-growth-ratio
fix/ci-escape-timing
docs/normalized-terminal-geometry-1450
release/6.3.0
archive/release-6.3.0-pr1381
release/6.2.0
fix/electron-preload-dynamic-override
fix/javascript-self-referential-bundler-edges
release/6.1.0
cursor/grok-client-cherry-pick-0b56
feat/signature-posture
feat/dyld-shared-cache
feat/artifact-integrity-policy
feat/pkg-inventory
release/6.0.0
chore/sync-release-5.0.0
release/5.0.0
cursor/cloud-agent-node-787e
fix/javascript-xhr-open-endpoints
review/pr-711-realpath-fallback-wording
cleanup/replay-confinement
codex/test-suite-performance
codex/issue-foundations
codex/address-open-issues-2026-07-20
agent/javascript-vite-rollup-esbuild-adapters
agent/process-cleanup
agent/triage-integration
agent/unknown-commands-registry
feat/mcp-identity-metadata
morlvps/issue_cleanup
codex/installer-redesign
morl/roadmap-investigation-core
morl/roadmap-investigation-docs
release-please--branches--main--components--rea
rea-agents-6.8.0
rea-agents-6.7.0
rea-agents-6.6.0
experiment/atomic-codemode-wait-runtime-20261016
rea-agents-6.5.0
rea-agents-6.4.0
rea-agents-6.3.0
rea-agents-6.2.0
rea-agents-6.1.0
rea-agents-6.0.0
rea-agents-5.0.0
rea-agents-4.1.0
rea-agents-4.0.1
rea-agents-4.0.0
rea-agents-3.2.1
rea-agents-3.2.0
rea-agents-3.1.0
rea-agents-3.0.0
rea-agents-2.7.0
rea-agents-2.6.0
rea-agents-2.5.1
rea-agents-2.5.0
rea-agents-2.4.0
rea-agents-2.3.0
rea-agents-2.2.0
rea-agents-2.1.0
rea-agents-2.0.0
rea-agents-1.7.0
rea-agents-1.6.0
rea-agents-1.5.0
rea-agents-1.4.0
rea-agents-1.3.0
rea-agents-1.2.0
rea-agents-1.1.0
rea-agents-1.0.0
rea-agents-0.5.0
rea-agents-0.4.0
rea-agents-0.3.0
rea-0.2.1
rea-0.2.0
Labels
Clear labels
area: bridge
area: bridge
area: build
area: build
area: build
area: cli
area: domain
area: evidence
area: mcp
area: native
area: providers
area: runtime
area: server
area: setup
area: tests
bug
design
documentation
enhancement
enhancement
enhancement
experiment
help wanted
i18n
invalid
P0: critical
P1: high
P2: medium
P2: medium
P2: medium
P3: low
performance
provider-request
pull-request
Mirrored from GitHub Pull Request
question
roadmap
triage
No labels
area: bridge
area: bridge
area: build
area: build
area: build
area: cli
area: domain
area: evidence
area: mcp
area: native
area: providers
area: runtime
area: server
area: setup
area: tests
bug
design
documentation
enhancement
enhancement
enhancement
experiment
help wanted
i18n
invalid
P0: critical
P1: high
P2: medium
P2: medium
P2: medium
P3: low
performance
provider-request
pull-request
question
roadmap
triage
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
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#2984
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/morluto/rea/pull/1577
Author: @dakjdakd
Created: 10/10/2026
Status: ✅ Merged
Merged: 10/10/2026
Merged by: @N0zoM1z0
Base:
main← Head:fix/webpack-runtime-scope📝 Commits (1)
294426dfix(javascript): retain runtime scope in bundled module relationships📊 Changes
14 files changed (+396 additions, -43 deletions)
View changed files
📝
src/application/javascript/ElectronBoundaryGraphContext.ts(+6 -4)📝
src/application/javascript/ElectronBoundaryGraphIpc.ts(+2 -0)📝
src/application/javascript/ElectronBoundaryGraphNative.ts(+6 -1)📝
src/application/javascript/ElectronBoundaryGraphWindows.ts(+18 -3)📝
src/application/javascript/JavaScriptArtifactGraphBundlers.ts(+2 -2)📝
src/application/javascript/JavaScriptArtifactGraphContext.ts(+11 -4)📝
src/application/javascript/JavaScriptArtifactGraphFindings.ts(+35 -15)📝
src/domain/javascript/electronStaticAnalysisTypes.ts(+12 -0)📝
src/domain/javascript/javascriptStaticAnalysisBundler.ts(+13 -4)📝
src/domain/javascript/javascriptStaticAnalysisFindings.ts(+8 -4)📝
src/domain/javascript/javascriptStaticAnalysisModuleIndex.test.ts(+33 -6)📝
src/domain/javascript/javascriptStaticAnalysisState.ts(+1 -0)📝
src/domain/javascript/javascriptStaticAnalysisTypes.ts(+8 -0)➕
tests/boundary/cli/javascriptBundlerRuntimeScopes.test.ts(+241 -0)📄 Description
Summary
Fixes #1576.
Preserve a recovered factory's runtime from static parsing through application graph projection. Previously, two Webpack/Rspack runtimes in the same asset could reuse module IDs and cause one runtime's entrypoint, dependencies and behavior to attach to the other's factories. This change makes module ownership resolve through
(asset path, runtime, module ID)and uses collision-free tuple encoding for module and chunk lookups.The public graph already distinguishes module identities by runtime namespace. This PR makes lookup and finding ownership consistent with those identities, while retaining shared module resolution across chunks of the same runtime.
Problem and expected behavior
Consider two registrations in
bundle.js, one namedwebpackChunkAppAand another namedwebpackChunkAppB. Both define module1, which requires module2and calls a different endpoint. The graph creates four distinct module nodes, but the lookup used to connect them previously stored only the asset path and module ID. Registering AppB overwrote AppA's entries.The observable contradiction was an AppA entry edge with
runtime: "webpackChunkAppA"andresolution_status: "resolved"pointing at a node with namespacewebpackChunkAppB:module. The call to/aretained its AppA source range but originated at AppB module1. Both require operations could resolve through AppB's1and2factories. Successful graph construction andcompletecoverage did not disclose this incorrect attribution.The expected invariant is straightforward: every bundled finding belongs to its recovered factory's runtime, and a runtime's entry or require lookup may select only that runtime's modules. Registrations in different chunks of the same runtime still share their module namespace. Registration order must not change this meaning.
The identity tuple also needs an unambiguous encoding. A runtime string ending in
\0xand a module string beginning withx\0can collide if variable-length fields are joined with NUL. The added regression includes those strings and analogous chunk keys, so runtime separation covers the actual source-string domain rather than only conventional identifier spellings.Change and scope
The change starts at the producer instead of recovering ownership from graph labels later, following the existing architecture ownership rules and behavioral testing guidance.
javascriptStaticAnalysisState.tsadds runtime toJavaScriptModuleRange.javascriptStaticAnalysisBundler.tspasses the registration's runtime into factory recovery, including the existing esbuild wrapper runtime names. Each indexed factory range now contains the identity context needed to attribute expressions encountered during the shared traversal.javascriptStaticAnalysisFindings.tsattachesmodule_runtimewhen finalizing a finding inside a recovered factory. Findings outside factories retain their previous shape.javascriptStaticAnalysisTypes.tsandelectronStaticAnalysisTypes.tsdeclare the field as optional, allowing existing internal finding values to remain representable without claiming a runtime they do not contain. The existing range index and its overlap precedence are unchanged.The application projection consumes that same ownership in every affected path:
JavaScriptArtifactGraphContext.tsencodes module and chunk lookup tuples with the existingcompositeKeyutility.sourceNodeForrequires runtime when selecting a recovered bundled module.JavaScriptArtifactGraphBundlers.tsregisters and resolves modules using the registration runtime, including runtime entry loads.JavaScriptArtifactGraphFindings.tscarries runtime into reference, endpoint, storage and discovered-role ownership. Require targets use the source finding's runtime; asynchronous chunk candidate selection also filters by that runtime before using the chunk lookup.ElectronBoundaryGraphContext.tsshares the same source lookup.ElectronBoundaryGraphWindows.ts,ElectronBoundaryGraphIpc.tsandElectronBoundaryGraphNative.tspass runtime for windows, bridge APIs, utility processes, IPC operations, sender validations and native-addon findings.The remaining two files provide the behavioral regression and strengthen the existing producer coverage. These 14 files implement one ownership correction across the producer and its consumers; there is no new service, dependency or alternate graph-building path.
This does not add cross-file runtime reconstruction or change ordinary source-module resolution. If an older internal finding lacks runtime, it cannot select a bundled module by ID alone. Existing unresolved-reference projection remains available, rather than confidently choosing another runtime's factory.
Contract and boundary impact
analyze-javascript-applicationoutput has corrected relationship ownership.module_runtimeis intermediate static-analysis data and is not added to the public normalized result schema.docs/public/product-catalog.json), package, or installation impact: None. No dependency, package version, installation logic, authored skill or tracked generated contract changes. Generated-document checks passed, and build outputs are excluded from the commit.Evidence and regression coverage
tests/boundary/cli/javascriptBundlerRuntimeScopes.test.tsadds seven compiled CLI scenarios.src/domain/javascript/javascriptStaticAnalysisModuleIndex.test.tsnow checks runtime as well as module key for recovered references across its existing factory-range fixture./aowner are now AppA module1; its require target is AppA module2. The corresponding AppB relationships stay in AppB. Storage,BrowserWindowand factory-level async-chunk relationships are checked in the same returned graph.The seven CLI scenarios cover reused numeric IDs, reversed registrations, one runtime, disjoint IDs, mixed Webpack/Rspack runtimes, multiple chunks sharing one runtime, and delimiter-containing runtime/module/chunk strings. The existing self-reference CLI tests also run alongside them to preserve the graph's self-edge omission behavior. Existing esbuild/Vite and Electron composition tests verify the affected consumer families without introducing another fixture framework.
For evidence-bearing changes:
Validation performed
Validation used Node.js 24.18.0 and npm 11.16.0, as pinned by the repository. The branch was rebased onto main revision
c19e15a2b3f09b3f693d7eab5263d83f4d2d1cd4; the CLI, source, full static and generated-document checks below were rerun on that baseline. The branch contains one focused fix commit,294426d5.npm run test:focused -- tests/boundary/cli/javascriptBundlerRuntimeScopes.test.ts tests/boundary/cli/javascriptBundlerSelfReferences.test.ts— 10 tests passed across two files: seven runtime-scope cases and three existing self-reference cases. This also built the runtime required by the compiled CLI boundary.npm run test:local -- src/domain/javascript/javascriptStaticAnalysisModuleIndex.test.ts tests/composition/javascript-applications/javascriptBundlerAdapters.test.ts tests/composition/javascript-applications/electronApplicationAnalysis.test.ts— 13 tests passed across three files. The strengthened module-index assertions were also rerun successfully.npm run check— passed, including typecheck, lint, resolved module boundaries, repository formatting, knip, metadata and architecture guards.npm run docs:check— passed against the final implementation, including the generated catalog, skill, evidence and error-schema freshness checks.npm run verify:test-discovery— passed; all 736 test files were discovered exactly once.npm run verify:architecture-guards— passed across 1,025 source files.git diff --check— passed. The pre-commit formatting and lint checks also passed.Compatibility, safety, and release
Review checklist
type(scope): outcome.🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.