mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[GH-ISSUE #3935] [Bug] Provider CLI cleanup failures discard completed results and primary diagnostics #1544
Closed
opened 2026-10-16 21:06:55 +00:00 by bsakaguchi
·
5 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#1544
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 15, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/3935
Before submitting
Area
CLI
Observed behavior
decode-android-resourcesandinspect-wasm-artifactdiscard completed analysis Evidence or original failure diagnostics when workspace cleanup fails and the provider close retry also fails. The executable CLI returns a genericUNKNOWNcleanup response. The WABT primary service error already contains completed Evidence, which the final CLI response loses. These observations used fixture launchers through unmodified production adapters and real filesystem permission failures, not real Apktool or WABT engines.Reproduction
Use a non-root POSIX account and the built checkout. These are the executed fixture protocols, not real format-validation claims. Give every subprocess an isolated home and temporary directory inside a disposable fixture directory. Set
case_rootto that directory's absolute path. Restore mode0700on retained workspace directories after recording each result, then remove the disposable fixtures.WABT executable CLI reproduction
homeandtoolsdirectories under the fixture directory. Createselected.wasmcontaining exactly 76 bytes with value0x01. Read the complete repository fixturetests/fixtures/wasm/objdump.txtas the objdump response.wasm-validate,wasm-objdump, andwasm2watundertools. Every launcher must answer--versionwith1.0.42and a newline, then exit 0. For other calls, the validator exits 0, objdump prints the exact fixture bytes, and wasm2wat prints(module (@custom "test" "payload"))followed by a newline and exits 0.FAIL_VALIDATE=1, the validator printsmodule.wasm: primary-validation-failure-markerand a newline to stderr and exits 1. IfBLOCK_CLEANUP=1, wasm2wat changes the mode of its current working directory to0500before returning its normal response. In validation-failure mode, the validator makes that same mode change before exiting instead. These tool children run in REA's disposable private runtime root. Do not change permissions on any other directory.FAIL_VALIDATEandBLOCK_CLEANUPcombinations,0/0,0/1,1/0, and1/1, with a freshruntimedirectory for each run:0500permits reading the retained snapshot but prevents deletion of its children, so both real cleanup attempts fail.Apktool executable CLI reproduction
This protocol was executed once for every mode combination.
homeandruntimedirectories under a disposable fixture directory. Createfixture.apkcontaining exactlyapk-bytes-for-apktoolwithout a newline. Create an executable shell launcher namedapktoolthere.--versionwith2.7.0-dirtyand a newline, then exits 0. For decode, the first argument isdand the fifth argument is the existing output directory. Normally writeapktool.ymlthere with aversionInfomapping containingversionCode: '7'andversionName: 1.2.3. WriteAndroidManifest.xmlcontaining<manifest package="org.example.completed"><application/></manifest>andres/values/strings.xmlcontaining<resources><string name="marker">completed-observation-marker</string></resources>. End each document with a newline. PrintI: completed decodeand a newline, then exit 0.FAIL_DECODE=1, skip document creation, printException in thread "main" brut.androlib.AndrolibException: primary-decode-failure-markerand a newline to stderr, and exit 1. WhenBLOCK_CLEANUP=1, change the mode of the parent of the fifth argument to0500before either decode exit. This is the provider-owned workspace root inside the isolated temporary directory.FAIL_DECODEandBLOCK_CLEANUPcombinations,0/0,0/1,1/0, and1/1, with fresh home and runtime directories. Record stdout, stderr and exit status, then restore permissions:Other handler groups listed below are source-derived, rather than runtime reproductions.
Expected behavior
Cleanup failure must preserve completed observations, available partial facts, and meaningful primary failure reasons. The CLI should report structured cleanup failure with retained resources while keeping the completed Evidence or original diagnostics. An initial cleanup error that already carries an observation must retain that observation when close fails again. Existing one-shot command finalization implements this preservation contract.
docs/tool-design.md:81requires observations to survive cleanup failure.src/cli/finishAnalysisCommand.ts:13,57-65already preserves successful output as partial observation or combines primary and cleanup failures.Impact and scope
Repeated secondary cleanup failure removes useful analysis results and recovery diagnostics. The trigger is bounded to failed workspace cleanup; normal controls succeed. No caller input data loss was observed. Restoring workspace permissions and rerunning may produce a new result, but recovery of the discarded original result is unverified.
Observed handler groups: Apktool and WASM. Source-proved related groups: firmware, web module trace, web source location, EVM and JavaScript recovery. ADB, Android, JEB and Flutter handlers have the same result-replacing close branch by inspection, but their production cleanup triggers were not independently established.
REA version
rea 6.5.0 at source commit
4692bb3330; freshness checked by source at origin/main22ec8bdb2fRuntime and platform
Node 24.18.0; macOS arm64; fake Apktool launcher version 2.7.0-dirty and WABT fixture launcher versions 1.0.42.
Target and artifact context
Disposable synthetic APK and WASM inputs. Only provider-owned disposable workspace permissions were changed, then restored.
Interface
CLI
Earliest failure stage
Cleanup, cancellation, or lifecycle
Relevant output or evidence
The WABT four-case matrix ran twice with fresh workspaces per invocation:
{"code":"UNKNOWN","message":"Provider wabt-artifact adapter failed during inspect_wasm_artifact"}; root retainedinvalid_request, primary marker, captured stderr and partial Evidence; no retained rootAll eight WABT CLI stderr streams were empty. The four Apktool cases similarly preserved results with permitted cleanup and returned only
{"code":"UNKNOWN","message":"Apktool workspace cleanup failed"}with blocked cleanup. The failed-decode control otherwise returnedunsupported_targetand the original stderr marker.A full source CLI test observed WABT's primary
cleanup_incompleteresult containingdetails.partial_observation, two failed cleanup attempts, and the final UNKNOWN response without that observation. Passing the same primary result and rejecting close tofinishAnalysisCommandretained the observation, selected artifact identity, primary projection and cleanup projection.Baseline locators:
src/cli/apktoolCommands.ts:30-38,src/apktool/ApktoolProvider.ts:497-525,src/cli/wasmCommands.ts:58-81, andsrc/wasm/WabtArtifactProvider.ts:56,445. Registrations are atsrc/cli.ts:104,114.Current main still has the identical Apktool CLI result-replacing branch and workspace-cleanup AggregateError. Commit
089ef732echanges version-probe/process ownership cleanup, not workspace result preservation. WABT and the other cited CLI handlers remain unchanged.Typed outcome or recovery expected
Keep cleanup as a failure with retained-resource paths, while preserving completed Evidence, original errors and captured stderr. Cover success plus close failure, primary failure plus close failure, and an initial cleanup error carrying partial Evidence plus a second close failure. Preserve permitted-cleanup and signal controls.
Analysis or suspected cause
Source-derived: Apktool returns the saved operation result only after close, so a close rejection replaces it. WASM returns its primary projection inside a try whose finally awaits close, which likewise replaces the return. The same finalization contract applies across the related handler groups.
finishAnalysisCommanddemonstrates an existing preservation policy.Additional context
Related closed #1501 addressed firmware provider-level retention; the remaining CLI close retry can still replace that retained outcome. Open PR #3492 modifies web module and source-location cleanup/finalization only. It does not address the reproduced Apktool/WABT commands or the other lifecycle groups. PR #2406 adds component decoding and does not restore this repeated WABT workspace-cleanup case.
@XinwangTao commented on GitHub (Oct 15, 2026):
Confirmed: cleanup failure must not erase the outcome — the WABT case already holds completed Evidence in the primary service error, and the final CLI response downgrading it to a generic UNKNOWN cleanup error hides real diagnostic value from the caller. Cleanup errors should be reported alongside (or as a distinct field) while preserving the completed result and original diagnostics.
@yankikucuk commented on GitHub (Oct 15, 2026):
Working on this. Reproduced with your WABT launcher matrix: with blocked cleanup the CLI returned only the generic UNKNOWN response.
decode-android-resourcesandinspect-wasm-artifactnow finish through the sharedfinishAnalysisCommandfinalizer the Go, capture and signal commands already use, so completed Evidence is retained as the cleanup error's partial observation, a primary failure keeps its diagnostics beside the cleanup failure, and the retained workspace stays listed. The other handler groups you listed by inspection are left for follow-ups. Draft PR follows shortly.@morluto commented on GitHub (Oct 15, 2026):
Reproduced through public
inspect-wasm-artifactwith controlled WABT executables and a real filesystem permission denial during owned scratch cleanup. The base CLI discarded the completed result and returned only genericUNKNOWN. The successful control returned Evidence and removed its scratch root. These launchers are controlled seams, not real WABT.Thirteen one-shot command families now reuse the existing
finishAnalysisCommand: ADB, Android/JADX, Apktool, EVM, firmware, Flutter, JavaScript recovery, JEB, PCAP, SQLite, WASM, web-module trace and web-source location. Duplicated close/finally handling is removed. The shared finalizer retains a completed observation or combines primary and cleanup diagnostics while awaiting close.The public CLI regression uses a valid 76-byte WASM module, independently compiled by Node before the probe. A cleanup denial now returns canonical
cleanup_incompletewith the valid completed observation retained; validation failure plus cleanup denial preserves both diagnostics. Permissions are restored on the disposable fixture during teardown. The mode-denial test is explicitly unavailable on Windows/root; it passed on this non-root macOS host.Related CLI/acceptance suites passed (55 tests, one existing skip in a 12-file run). The local patch is uncommitted/unreleased. No real Android device or unavailable external engine was exercised.
@morluto commented on GitHub (Oct 16, 2026):
Fixed on
mainin 0e1f0bf2d. The affected one-shot CLI workflows use the shared finalizer to retain completed Evidence and primary diagnostics when provider cleanup also fails.WABT/Apktool CLI controls use fixture executables and real filesystem cleanup denial; native engine behavior is not claimed.
Hosted main CI is still pending; this closure is based on the implemented fix and scoped regression evidence.
@XinwangTao commented on GitHub (Oct 16, 2026):
Fix confirmed on main — routing the one-shot CLI families through the shared finishAnalysisCommand finalizer is the right call: it keeps completed Evidence as a partial observation when cleanup fails and pairs primary diagnostics with the cleanup error instead of replacing them. Closing as completed is reasonable; the follow-up #4240 for the remaining cleanup-resource diagnostics gap is worth keeping an eye on.