mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[GH-ISSUE #4630] [Bug] Array-element setter writes leave stale exported return literals #2410
Closed
opened 2026-10-17 21:04:17 +00:00 by bsakaguchi
·
2 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#2410
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?
Originally created by @coygeek on GitHub (Oct 17, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/4630
Before submitting
Area
Evidence, artifacts, or reconstruction
Observed behavior
analyze-javascript-applicationreports the exact return literal1after an assignment invokes an own setter on an array element and that setter changes the sibling property subsequently returned. Independently executing the supplied benign fixture returns2. This reproduces on both tested builds. The CLI exits successfully and retains the stale literal in the exported return projection.Reproduction
Create the following complete ES module in a readable directory and analyze it with the public CLI. For the published-package run, the package was installed locally with
npm install --prefix <scratch>/release --ignore-scripts --no-audit --no-fund rea-agents@6.5.0and itsscripts/rea.mjslauncher was run with Node. For the source run,npm ciandnpm run build:cachedprepared the checkout, then itsscripts/rea.mjslauncher was used. Both builds and every analysis ran under a scratch HOME with client configuration overrides cleared; the Node directory was placed first on PATH. No native provider was required.From the prepared source checkout, run the following commands. To use the local package installation instead, set
rea_clito that installation'snode_modules/rea-agents/scripts/rea.mjslauncher.The primary fixture was analyzed twice per build. A second array receiver form,
const arr = [{ value: 1, set update(next) { this.value = next; } }]; arr[0].update = 2; return { value: arr[0].value };, also retained the stale/valueliteral in both attempts per build and independently returned{"value":2}.Three controls were each analyzed twice per build: replacing the primary setter with the ordinary data property
update: 0; omitting the primary assignment; and replacingstate.list[0]withstate.nested, initialized as{ nested: { value: 1, set update(next) { this.value = next; } } }. Results are below. REA analyzed source statically; the separate Node import executed only these supplied benign fixtures.Expected behavior
An assignment that can invoke a local setter must not leave an earlier sibling literal exact when that setter can change it. Conservative unknown is sufficient; REA does not need to execute the setter or infer the new value
2. Existing local and nested-setter regression tests require this uncertainty, and the workflow documentation describes conservative accessor uncertainty. The ordinary-property and no-write controls should remain precise.Impact and scope
The observed failure is a wrong exact literal in exported static Evidence for an own setter on an array-element receiver, including an array nested in an object. Each of the two array forms failed in both attempts on both builds. No export comparison was run, and no severe downstream incident or security boundary crossing was established. Other accessor forms were not assessed.
REA version
Published npm package
rea-agents@6.5.0(registrylatest); currentmainsource commit8451d283920e86936576fdf67615807d1b4ca4a9. Both launchers report6.5.0.Runtime and platform
Node.js v24.18.0; npm 11.16.0; macOS 27.0.1 arm64. The source build used the repository's pinned Node.js and npm versions.
Target and artifact context
Readable directories containing the supplied JavaScript ES modules. No external application or native provider was used.
Interface
CLI
Earliest failure stage
Native analysis or reconstruction
Relevant output or evidence
src/domain/javascript/javascriptSemanticAnalysis.accessor_writes.test.ts:11-67requires unknown after local and nested setter writes while preserving ordinary-property siblings;docs/javascript-application-workflows.md:341-354describes conservative mutation and accessor uncertainty in the source build.normalized_result.graph.nodes[].observations[].propertieswheresemantic_roleisexport-return-shapesandexported_nameisobserve.All twenty analysis invocations exited
0. The meaningful return fields and independent runtime results were:Each return projection reported the following fields. These describe projection completeness; they do not establish complete semantic knowledge.
The source build's existing focused regression command
npm run test:local -- src/domain/javascript/javascriptSemanticAnalysis.accessor_writes.test.tspassed: one file, five tests, exit0. That file covers object-property receiver paths, but not this array-element receiver form.Typed outcome or recovery expected
Reanalyze the primary and direct-array fixtures. Their exported post-setter return fields must stop publishing the stale literal
1; retain unknown unless the post-write value can be justified. Keep the nested-object setter control unknown on the source build, and retain literal1for the ordinary-property and no-write controls. Check the exported CLI return projection as well as the local semantic result.Analysis or suspected cause
Source-derived reasoning:
localSetterReceiverinsrc/domain/javascript/javascriptSemanticMemberMutations.ts:96-129traverses object-literal properties and stops at an array literal, so it does not recognize the element's own setter for receiver-wide invalidation. The public output establishes the stale literal independently of this explanation; untested accessor forms may behave differently.Additional context
Closed #3312 and its merged fix #3831 cover directly declared and nested object-property setter receivers. The nested-object control is now unknown on the source build, while the array receiver forms remain stale. The published package's stale nested-object result overlaps that existing report and is not presented as a separate new defect. Closed #2654 concerns writes through references returned by getters, rather than assignment invoking an own setter. Open and closed issue and pull-request searches found no report demonstrating this residual array-element setter case. No last known good revision was established.
@xu91102 commented on GitHub (Oct 17, 2026):
Independently reproduced on current main
150e996a86f2bec4982ba87f37bf502a8d5e8214with Node 24.18.0 on macOS arm64, before changing source.I ran the supplied benign array-setter fixture through the actual compiled package CLI and through
analyze_javascript_applicationover a real SDK stdio MCP connection. Both publish the stale exact return literal1; independently importing and executing only that supplied fixture with Node returns2.The same four-case matrix ran through both adapters:
state.list[0], then assignment21(incorrect)11112Each CLI invocation exited 0. All four MCP calls completed without tool errors on one connection. These are small constructed inputs; no production application, native provider, or frequency claim is involved. REA analyzed the source statically; the separate Node control executed only the explicitly supplied benign function.
I also read the actual related PR file patches, including #3831 and #2041: the remaining
localSetterReceivertraversal still does not descend an array-element receiver. The other selected mutation/lookup patches (#2891, #4331, #4336, #4363, #4364, #2702, #3836 and #4355) do not supply that traversal. The original object-setter fix remains useful and should be preserved.I am preparing a focused owner-level fix and public CLI/MCP regressions, keeping ordinary/no-write controls precise and representing the setter result conservatively as unknown. No new upstream PR or CI run exists yet.
Prepared fork fix (2026-10-17)
The owner-level fix is available as normal fork commit 01aa4094. It reuses the existing array-reference selection and setter definition-order owners, preserving ordinary/no-write/delete/replaced-accessor and unrelated-element precision. A fresh compiled CLI replay on main
cc2e18a265198492dff1587a343bfb802d8c591bstill reproduced the original stale literal with the controls correct.Final frozen code passed a fresh34-file/967-test run, including an actual compiled CLI and official SDK stdio regression. Separate immutable four-case CLI/SDK replay, final check/guards, docs plus5README checks, discovery of all1,461 files and independent Standards/Spec review passed. Review found and resolved a candidate enqueue argument-capacity regression; the original failure and its meaningful RED/GREEN case are preserved. This was a source-analysis API capacity defect; the smaller compiled CLI control did not fail. No Windows/Linux host, native or external IDE claim is made.
This remains a prepared fork branch: there is no new upstream PR or upstream CI yet. Ordinary upstream creation is still denied for an unknown policy; no unchanged retry or bypass was attempted.
@coygeek commented on GitHub (Oct 24, 2026):
Checked the reported fix on
mainatd87e73f2db.localAccessorMethods now descends array elements through semanticArrayPropertyReferences, and setter writes invalidate the receiver. The exact reported state.list[0] fixture now returns unknown rather than stale literal 1; ordinary-data-property control still returns literal 1. Existing accessor_writes tests cover related object/nested setter semantics but no exact array-setter CLI/MCP regression was located.
Implementation: javascriptSemanticMemberMutations.ts, javascriptSemanticMemberMutations.ts.
The relevant regression checks in javascriptSemanticAnalysis.accessor_writes.test.ts passed in the focused test run on this revision. This closure is based on the current source and those checks; provider fixtures do not establish a real-engine run. Closing as completed on main.