mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 07:47:29 +00:00
[GH-ISSUE #4683] [Bug] Late SIGINT discards completed EVM interface Evidence during successful cleanup #2442
Closed
opened 2026-10-17 21:04:42 +00:00 by bsakaguchi
·
4 comments
No Branch/Tag specified
main
release-please--branches--main--components--rea-agents
release-please--branches--main--components--rea-agents--release-notes
codex/procedure-reference-stacked
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#2442
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/4683
Before submitting
Area
Evidence, artifacts, or reconstruction
Observed behavior
inspect-evm-interfacediscards its completed interface result when SIGINT arrives during awaited private-root cleanup. On both tested builds, three out of three deliberately timed interruptions returnedcancelledwithcleanup: completeand captured output, but nodetails.partial_observation. Each build's noninterrupted control and subsequent retry returned complete Evidence for the same selected bytes. Every case removed its runtime root.This is a Linux x64 public-dispatcher reproduction with the real bundled EVMole worker. A preload hook controls only the timing of root removal: it sends a real SIGINT when the EVM root's removal is requested, waits 50 ms to let the signal handler run, then performs the original filesystem removal. No worker reply, provider result, abort signal, or error payload is fabricated. These counts describe this controlled timing seam; natural occurrence frequency was not measured.
Reproduction
Prepare the main source checkout using its pinned toolchain,
npm ci, andnpm run build:cached. For the published package comparison, install withnpm install --prefix ./release rea-agents@6.5.0and userelease/node_modules/rea-agentsas the package root. Run on Linux x64 with executable util-linuxprlimiton PATH. SetREA_ROOTto the absolute package root andNODEto the absolute path of the supported Node executable before entering a disposable working directory.Create the authored fixture and this
cleanup-hook.mjs:The runner invoked the command below in a new home and temporary directory for each case, using
INTERRUPT_CLEANUP=0for the control and retry and1for each of three interrupted attempts. The following shell loop expresses those same invocations; the measured run used a Python subprocess runner with captured stdout/stderr and a 60-second timeout per invocation.Repeat in a separate disposable directory for the other package root. All stderr files contained
cleanup-enterfollowed bycleanup-removed. The four successful responses retainednormalized_result.bytecode.hex: "60006000f3", byte count 5, SHA-25610a958938acc6e15066f1e3d64f4871b196412a67d59ab1664f5d38f406206b6, metadata statusunavailable, empty inferred functions, and raw producer output. The six interrupted responses omitted partial Evidence entirely.Expected behavior
Retain the validated completed interface facts as partial Evidence under typed cancellation, while still reporting actual cleanup status. The current lifecycle contract requires carrying cancellation through awaited cleanup and retaining collected observations; its regression guidance specifically covers cancellation during temporary-root removal. The release changelog also promises retention of completed Evidence and partial observations when analysis or cleanup fails.
Impact and scope
The interrupted response loses already-computed bytecode identity, metadata, inferred function candidates and raw producer output. The failure window begins after successful result validation and ends before provider return. The authored fixture has no function candidates; larger contract inputs and MCP cancellation delivery were not runtime-tested. Input bytes are not modified, and successful retries recovered complete Evidence.
REA version
Published npm package
rea-agents@6.5.0; main source build at1e36e707b1f991fde826947bab04d436e64b7f97. A later main freshness check at556504edcbb0f8cd9eaf81a91b18ff891b8f5457found no changes to the provider, service, root cleanup, CLI command/finalizer, or cited lifecycle documentation; that later revision was not separately built.Runtime and platform
Node v24.18.0, npm 11.16.0; Debian GNU/Linux 13 (trixie), Linux 6.12.94+, x86_64; util-linux prlimit 2.41.5. Main used locked dependencies; the package used its published bundled runtime. Each invocation used an isolated HOME and TMPDIR and an environment containing only those paths, PATH and the timing-hook switch.
Target and artifact context
Authored flat ASCII hex carrier containing
0x60006000f3followed by LF. Offline interface inference only; the target bytecode is not executed, and no chain query or transaction is involved.Interface
CLI
Earliest failure stage
Cleanup, cancellation, or lifecycle
Relevant output or evidence
docs/tool-design.md:93-100requires retained observations under typed cancellation;docs/testing.md:214-237names cancellation during root removal and independent provider/shared-workflow checks.CHANGELOG.md:12states the release's completed-Evidence retention guarantee.src/evm/EvmoleInterfaceProvider.ts:447-455assigns the validated successful execution;:556-584awaits root cleanup and replaces that execution with a cancellation error containing captured output only.src/application/evm/EvmInterfaceService.ts:57-58returns that provider error before Evidence assembly.Each interrupted run exited 130 with these relevant fields:
partial_observationis absent. The cleanup hook independently checkedENOENTafter real removal, and the runner found no remaining entries in each case's temporary directory. Source comparison with the release tag found the same final provider guard; main's only provider change since that release concerns an earlier error branch.Typed outcome or recovery expected
The same timed interruption should still exit as cancelled and report complete cleanup, while retaining completed Evidence under
details.partial_observation, includingnormalized_result, carrier/decoded-byte identity, function candidates, metadata,raw_result, provenance and original limitations. The identical noninterrupted control must remain successful. Existing primary failures and cleanup failures must keep their classifications. Verify actual root removal; merely suppressing cancellation or returning ordinary success would not restore this contract.Analysis or suspected cause
Source-derived: the provider's final guard duplicates late-cancellation classification but constructs a thinner error before the service can build Evidence. Its cleanup-failure path already constructs partial Evidence from the same successful execution at
src/evm/EvmoleInterfaceProvider.ts:120-147; the successful-cleanup cancellation path does not. The asynchronous root-removal wait permits the signal handler to run after validation and assignment of the successful result.Additional context
Issue #4261 expanded to EvmInterfaceService and repaired successful provider returns at the service boundary. Its fix, commit
3b698645a, changed the service and its controlled-provider tests, without changing this provider guard. The production provider instead returns an error before that repaired path can retain its facts. This report concerns the remaining provider boundary.Issue #4254 fixes WASM completion and retains its Evidence after final cleanup. Issue #4640 concerns Flutter success after interruption during a later cleanup retry. Neither describes this EVM provider's cancellation-without-completed-Evidence outcome. No delivery to an already-cancelled MCP client is claimed.
@morluto commented on GitHub (Oct 17, 2026):
Source repair published in
d694aef227on main.The provider's successful-cleanup cancellation guard now retains full completed Evidence and the exact caller reason. Success, cleanup failure and late cancellation use one shared Evidence assembler, preserving selected carrier identity/encoding, decoded bytes, raw producer output, locations, inference confidence and limitations. Provider/service admission also preserve opaque cancellation reasons.
Executed on Darwin arm64: 26 service, official MCP and host-refusal checks passed, with 30 Linux x64 provider checks explicitly skipped. Expanded Linux root-removal controls cover success, late cancellation, cleanup failure and cancellation plus cleanup failure; they retain captured warnings, assert partial Evidence and reason identity, verify real root removal and check service forwarding. Those Linux controls were not executed here. Cached Linux images were arm64, so no host substitution or package installation was used.
check:fast,docs:checkincluding five README checks, and normal commit/pre-push hooks passed.The real Linux x64 EVMole worker and the report's public SIGINT timing reproduction remain unverified. No natural occurrence rate, performance, token or peak-memory measurements are claimed. The issue remains open for that supported-host qualification. Separate adjacent command-reason loss was confirmed at the compiled failure boundary and filed as #4686; repaired separately in
0ec4826633.@XinwangTao commented on GitHub (Oct 18, 2026):
Confirmed the same class of issue I hit in the snapshot cleanup path (#4734): a cancellation signal that arrives while awaited private-root cleanup is in flight ends up swallowing the already-completed EVM interface Evidence. The result is especially confusing because the return is
cancelled with cleanup: complete and captured outputyet the partial_observation is missing, so consumers see a mixed signal that neither says "cancelled before work" nor "work done". Since your controlled repro shows 3/3 interruptions reproduce it with the real EVMole worker, I'd suggest that the cancellation handling distinguish between "cleanup hasn't started" and "cleanup in progress over completed output" — the latter should preserve the completed Evidence and surface the interruption only as an auxiliary signal, mirroring how you retain ownership through cleanup elsewhere. A regression test asserting that a SIGINT during root removal still returns complete Evidence with details.partial_observation would lock this in.@CassieFox23 commented on GitHub (Oct 18, 2026):
Checked on Linux: this is fixed on main by
d694aef22. The commit's message says "Refs #4683", which is why GitHub left this issue open.src/application/evm/EvmInterfaceService.test.tsandtests/boundary/evm/evmoleInterfaceProvider.test.tspass on main36d156ff0on Node 22.23.1, 24.18.0 and 26.11.1 (43 tests, 2 skipped).Thanks, coygeek, for the clear report.
If nothing else is open here, this can be closed.
🤖 Generated with Claude Code (Sonnet 5.5, verified by Opus 5.5) 🦊
@coygeek commented on GitHub (Oct 18, 2026):
Closing as fixed by d694aef, included in rea-agents 6.7.0.
Thanks @morluto for the repair and @CassieFox23 for the Linux regression verification: 43 tests passed, 2 skipped, and 4 failures when the fix was reverted. Closing based on the released repair and those reported regression results.