mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[PR #5288] [CLOSED] fix(server): refuse unretained layout and JavaScript summaries before analysis #6859
Closed
opened 2026-11-01 21:43:35 +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#6859
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/5288
Author: @Y0UW1SH
Created: 10/19/2026
Status: ❌ Closed
Base:
main← Head:fix/binary-electron-summary-retention-preflight📝 Commits (8)
20cbc88fix(server): refuse unretained layout and JavaScript summaries before analysisc3ed010fix(server): validate layout paths before the summary retention preflighta296285refactor(server): inspect validated layout input without reparsing itf060f2dfix(server): keep cancellation ahead of raw layout input validationd34c928Merge remote-tracking branch 'upstream/main' into fix/binary-electron-summary-retention-preflightc0a211cMerge remote-tracking branch 'upstream/main' into fix/binary-electron-summary-retention-preflight1b2b8f9Merge remote-tracking branch 'origin/main' into codex/blockers-528874aa4f8Merge remote-tracking branch 'upstream/main' into fix/binary-electron-summary-retention-preflight📊 Changes
3 files changed (+166 additions, -9 deletions)
View changed files
📝
docs/javascript-artifact-reconstruction.md(+2 -1)📝
src/application/binaryDiagnostics/BinaryLayoutService.test.ts(+30 -0)📝
tests/boundary/mcp/analysisSummaryDetailMcp.test.ts(+134 -8)📄 Description
Summary
inspect_binary_layoutandanalyze_javascript_applicationwithdetail: "summary"ran the complete layout inspection or application analysis before checking whether the server can retain Evidence. On a fixed MCP server without session retention (the embedder/test seamcreateServer({ kind: "fixed", ... })), a successful analysis was followed bycapability_unavailable, and a failing analysis replaced that diagnostic with its own error, so the caller never learned that selectingdetail: "complete"is the fix. Both handlers now check retention before any analysis work, as the EVM, pcap, network-capture and (with #5274) WASM handlers do. Refs #5100.No separate issue is linked: #5100 reports this ordering for
inspect_wasm_artifact, and its fix #5274 deliberately left these two sibling handlers for a follow-up to keep one outcome per PR. This PR is that follow-up; the defect, trigger and expected contract are the ones described in #5100, applied to the two remainingdetail-bearing handlers that call their analysis directly.Problem and expected behavior
Trigger: a server created without a session (no
recordEvidence/evidenceById), theninspect_binary_layoutoranalyze_javascript_applicationwithdetail: "summary".Observed on
main(1c2c2f1e7):inspect_binary_layout: the layout provider was invoked once per summary request before the refusal (expect(inspect).not.toHaveBeenCalled()fails with one call carrying the requested path).analyze_javascript_application: the application analysis started before the refusal. When the analysis itself failed (on the Windows host used here it fails without the packaged native controls artifact), the summary response was that analysis error (capability_unavailable, categoryunsupported_provider, "This analysis is unavailable for the current target…") instead of the retention diagnostic.Expected:
requireAnalysisViewRetentiondocuments itself as "Fail before analysis when selected delivery cannot keep its complete source",docs/mcp-contracts.mddescribes one shareddetailcontract for all six tools, andregisterEvmTools,registerPcapTools,registerWebNetworkCaptureTooland the sharedretainedSummaryDelivery.preflightall refuse before analysis. Both handlers should refuse with the samecapability_unavailablediagnostic and no analysis work, and complete delivery (omitted or explicitdetail: "complete") should keep working on the same server.Change and scope
src/server/registerBinaryDiagnosticsTools.ts: inside the logged operation, the handler first callsservice.validate(request)so malformed paths keep their field-specificinvalid_request; then adetail: "summary"request runsrequireAnalysisViewRetention(contract.name, retention)and returns its error when the server retains no Evidence; only then doesservice.inspectValidatedrun with the already-validated input. The summary projection after a successful inspection reuses the sameretentionobject.src/application/binaryDiagnostics/BinaryLayoutService.ts: the schema parse and absolute-path check move into a publicvalidate(); the raw entry pointsinspect()andinspectAndClose()validate once and delegate, and the newinspectValidated()runs the inspection for input thatvalidate()already admitted, so the rules stay in one place and the handler never reparses; the raw entry points still check cancellation before validating, as the pre-change service did (follow-up commitsc3ed010fb,a29628592andf060f2d1f, matching the review outcome on #5274).src/server/registerElectronTools.ts: theanalyze_javascript_applicationcallback runs the same preflight with the registration'srecordEvidence/evidenceByIdbeforeanalyzeJavaScriptApplicationValidated. No validate step is needed there: the analysis resolvesinput_pathrather than rejecting it, so the preflight pre-empts no field diagnostic.docs/javascript-artifact-reconstruction.md: the "Read the analysis" paragraph now says the refusal happens before any analysis starts.docs/binary-diagnostics.mddoes not describe the refusal and is unchanged; the shareddetailparagraph indocs/mcp-contracts.mdis not touched here to avoid a conflicting hunk with #5274, which narrows its before-analysis claim to the tools that enforce it; once both land, a follow-up extends that sentence toinspect_binary_layoutandanalyze_javascript_application.tests/boundary/mcp/analysisSummaryDetailMcp.test.ts: the fixed-server refusal test is replaced by two tests, one per tool (see below).Intentionally not included: no shared helper for the four handlers that repeat this three-line preflight (
registerEvmTools,registerWasmTools, and the two here);createEvidenceToolHandlerandrunElectronToolhave different execution shapes, and folding the preflight into them would widen this fix beyond one outcome.Maintainer scope decision: not applicable (ordinary fix within existing offline inspection and static analysis; no new provider, execution, injection or mutation).
Contract and boundary impact
docs/public/product-catalog.json), package, or installation impact: none (metadata:checkpassed insidenpm run check).Expected effects (check known effects; use documentation-only on its own).
Unchecked items do not establish absence; leave uncertainties visible.
Evidence and regression coverage
Tests added or updated:
tests/boundary/mcp/analysisSummaryDetailMcp.test.ts, andsrc/application/binaryDiagnostics/BinaryLayoutService.test.tsgains "gives cancellation precedence over malformed raw input on every entry point" (aborted signal pluspath: "relative.elf"oninspect()andinspectAndClose()returnsAnalysisCancelledErrorwith no provider call, whilevalidate()alone returnsAnalysisInputError; it failed ona29628592).vi.fnlayout provider it asserts that summary returnscapability_unavailablecontaining "does not retain Evidence" with the provider never called; a summary request withpath: "relative.elf"returnsinvalid_requestwith thepathissue, still with no provider call; omitted and explicitdetail: "complete"both return the complete layout Evidence (two provider calls); after switching the provider to return anAnalysisInputError, a further summary request still returnscapability_unavailablewith "Select detail complete" and the call count stays at two.docs/testing.mdkeeps module mocks out of the shared-graph MCP boundary project, so the test observes the analysis through the request's MCP progress notifications: the first analysis phase reports progress before any artifact is read. It asserts that summary returnscapability_unavailablecontaining "does not retain Evidence" with no progress notification; omitted and explicitdetail: "complete"both return completeanalyze_javascript_applicationEvidence for the caller-selectedinput_path, with the first progress message naming theanalyze_javascript_applicationphase; a complete request for an ASAR file with an invalid header returnsartifact_operation_failed(reason: "format", the same failurejavascriptSourceSelection.test.tsalready asserts); and a summary request for that same failing input still returnscapability_unavailablewith "Select detail complete" and adds no progress notification.Base reproduction or other evidence: executed. On
main(1c2c2f1e7) the file fails at the first provider assertion for the layout test:and at the first assertion of the JavaScript test, where the summary response carried the analysis failure instead of the retention diagnostic:
With the fix, the layout test passes, and the JavaScript test passes its refusal assertions (typed diagnostic, zero progress notifications) and reaches the complete-delivery assertion; see the validation gap below. The malformed-path assertion added in
c3ed010fbwas run against20cbc8878and failed with the summary refusal (capability_unavailable) in place of the expectedinvalid_request; it passes onc3ed010fb.User-visible CLI/MCP output: unchanged text. A fixed server now answers a summary request with the existing typed error before any analysis work:
code: "capability_unavailable", message "This server does not retain Evidence. Select detail complete to receive the complete analysis inline." Complete delivery on the same server returns the complete Evidence as before.Remaining proof gaps: the complete-delivery, invalid-ASAR and final-refusal assertions of the JavaScript test could not be executed on the Windows host used here, because the source checkout has no
native/windows/build/artifact andanalyze_javascript_applicationtherefore fails before analysis for every input (the pre-existing test "returns the summary of complete Evidence retained for later views" fails identically on unmodifiedmainon this host). Those assertions rest onJavaScriptApplicationEvidence.parameters, the firstprogress.reportinanalyzeJavaScriptApplicationValidated, and the existing invalid-ASAR assertion injavascriptSourceSelection.test.ts; CI on Linux/macOS, and on Windows with the built artifact, executes them. Mocked layout provider only; no real pwntools run (the change does not touch provider code).For evidence-bearing changes:
Validation performed
Windows 11 x64, Node 24, locked dependencies (
npm ci), basemainat1c2c2f1e7, source checkout withoutnative/windows/build/.node node_modules/vitest/vitest.mjs run --project mcp-boundary tests/boundary/mcp/analysisSummaryDetailMcp.test.tsbefore the fix — 3 failed (the two new tests at the assertions quoted above, plus the pre-existing complete-delivery test, which fails on this host for the native-controls reason), 1 passed.capability_unavailableerror, not at any retention assertion).c3ed010fb): the same file — 2 passed (both layout tests), 2 failed (the JavaScript tests, same native-controls reason); the new malformed-path assertion against20cbc8878— failed as described above;node node_modules/vitest/vitest.mjs run src/application/binaryDiagnostics/BinaryLayoutService.test.ts— 10 passed;node node_modules/vitest/vitest.mjs run --project mcp-boundary tests/boundary/mcp/binaryDiagnosticsMcp.test.ts tests/boundary/mcp/analysisViewMcp.test.ts— 21 passed;npm run check:fast— passed;npx oxfmt --checkon the three changed files — formatted.a29628592, no reparse): the same three MCP files — 23 passed, 2 failed (the JavaScript tests, same native-controls reason);BinaryLayoutService.test.ts— 10 passed;npm run check:fast— passed;npx oxfmt— formatted.f060f2d1f, cancellation precedence):BinaryLayoutService.test.ts— 11 passed (the new test failed against thea29628592service withAnalysisInputError);npm run check:fast— passed;npx oxfmt— formatted.npm run check(typecheck, lint:built, format:check, knip, metadata:check, architecture guards) — passed.npx oxfmt --checkon the four changed files — formatted.REA_PWNTOOLS_PYTHON),node scripts/check-doc-facts.mjs(needs a build),npm run check:pr.Compatibility, safety, and release
detail: "complete"on a fixed server are unaffected; callers that selectedsummarythere receive the same error, earlier and regardless of analysis outcome.Author readiness
Human owner: @Y0UW1SH
Before merge
type(scope): outcome.🤖 Generated with Claude Code
Maintainer blocker verification
Merged main
3dbe314ada9f6dcc994ca4655dc0faf082503847without conflicts. On the resulting head, Node 24.18.0/npm 11.16.0, the focused BinaryLayoutService, analysisSummaryDetailMcp, binaryDiagnosticsMcp and analysisViewMcp suites passed 38/38; check:fast and docs:check passed. Cases cover cancellation and malformed-path precedence, zero analysis work after retention refusal, and complete delivery. Hosted new-head checks were still queued/running after push.🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.