mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[GH-ISSUE #4227] [Design] Audit lifecycle contracts across REA tools: readiness, cancellation, ownership, cleanup, and recovery #1659
Open
opened 2026-10-16 21:08:34 +00:00 by bsakaguchi
·
18 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#1659
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 @morluto on GitHub (Oct 15, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/4227
Decision needed
Audit the remaining REA tools and providers for lifecycle design gaps around readiness, cancellation, resource ownership, cleanup, and recovery. Establish evidence-backed invariants at the producing boundaries, then file and fix focused defects. This is a behavioral audit, separate from the source-organization roadmap in #740.
Context and evidence
A recent real macOS Hopper investigation exposed this failure family:
These observations and repairs were exercised locally: real stdio MCP cancellation after native handoff recovered in the same connection; an abandoned first listener released the native Python thread after its connection grace period; late-handshake exit recovery and foreign-identity rejection passed controlled tests. The original producer failed the new first-listener regression. The local patch has not been released.
Unknown: whether similar defects exist in the other families. Do not infer cross-provider bugs or coverage from the Hopper results.
Expected interaction with targets
Read source and captured data; run controlled CLI/MCP probes using disposable fixtures; launch or attach only where the existing provider contract permits it. Some existing tools run scripts, mutate process state, write files, or contact selected services; preserve their declared effects and target selection. This audit does not expand those authorities.
Audit scope and ownership
Inventory every tool, group operations by their actual resource-owning implementation, and audit each distinct lifecycle. Include:
Keep engine protocols in provider adapters, format semantics in artifact readers, process identity/supervision in shared process primitives, and provider-neutral composition in the application layer. Reuse existing contracts before proposing new lifecycle tools or abstractions.
Proposed investigation
Verification and completion criteria
No repository-wide rewrite or new reset/permission workflow is assumed. Scope implementation from the findings and keep unknown ownership retained until it is positively resolved.
Verification available so far
Observed results and a local prototype for one native bridge family; proposed audit for the remaining tools. NOT_ENOUGH_INFO for cross-provider runtime conclusions until that audit is performed.
References
src/application/binary/,src/process/, provider session/client managers, cleanup owners, andsrc/domain/analysisErrorCleanup.ts.@morluto commented on GitHub (Oct 15, 2026):
Audit pass at
bde139c5d(REA 6.5.0, Node 24.18.0, macOS 26.3 arm64), using four Luna agents in isolated provider worktrees and public CLI/MCP probes with disposable fixtures.Maintainer follow-up: @morluto — confirmed findings, local repairs and remaining verification gaps are below.
The canonical catalog contains 207 tools in 17 adapter kinds. All canonical advertised schemas were checked after SDK conversion. Runtime coverage is grouped by actual resource owner; it is not a claim that every tool or every platform was exercised.
Focused findings:
finishAnalysisCommand; no second cleanup framework was introduced.Context7 and DeepWiki were consulted and checked against installed source and live behavior. Relevant upstream references are the MCP SDK v2.3.1 cancellation contract, Playwright 1.58.2 browser close implementation, CDP Target definitions, and LLDB SBProcess API. Indexed guidance is not runtime evidence: request cancellation does not itself prove external work stopped; object validity does not prove liveness; attach transport cleanup does not grant target ownership.
Local patches are uncommitted and unreleased. Platform gaps remain open. No full cold/warm, CPU, memory or token benchmark was measured; representative process control/interrupted workflows took approximately 1.739s/1.842s in one warm run, not a before/after performance comparison.
Final combined validation: 114 tests passed across 14 lifecycle/schema files, 55 passed / one existing skip across 12 CLI/acceptance files, and 13 Python bridge tests passed.
npm run check,npm run docs:check(including five README tests), andgit diff --checkpassed. Whole-catalog advertised input/output schemas validate after the installed MCP SDK conversion. The real native-call verifier was rerun on the combined patch and passed. Real Ghidra/browser/Inspector/native UI results above are scoped provider runs, not a claim of exhaustive tool or platform coverage.@morluto commented on GitHub (Oct 15, 2026):
Follow-up probes on PR #4238 head
6e64a09a3confirmed four remaining cases. These are controlled production-boundary observations; no real JADX, firmware engine, Android device or Ghidra engine was used. No source changes were added to the PR by this probe pass.AndroidAnalysisService.execute(inspect_android_package)returnsok:trueEvidence after its provider aborts the request signal before returning.ok:trueafter late provider cancellation.cancelled.GhidraClientand real private snapshot/runtime cleanup, gated launcher without an engine. Secondary settlement was checked after 100 ms while the startup gate remained closed; no latency guarantee or maximum wait was measured. Every allocated runtime root was verified absent after close.runDirectAnalysis, BinarySession and provider routing with controlled errors; successful close preserves the primary resource. No physical resource leak was exercised.The standalone compiled-runtime probe recorded ten observations, including success/cleanup controls. Input cleanup completed; the checkout remains clean. These are follow-ups beyond the cases fixed in #4238, not additional fixes claimed by that PR.
@morluto commented on GitHub (Oct 15, 2026):
Review follow-up on PR #4238:
328e6500bfixes the review finding where pending cleanup retained a client but lost its run ID and lineage projection. Client, route and run identity now travel together through retirement, failed startup and restoration; public MCP close/retry/status verifies retention until successful cleanup.3bd6c99cefixes #4240: the original CLI cleanup diagnostics keep their resource names, while the subsequent close assessment remains separately incleanup_error. Fault/control regressions preserve captured output without duplication; neither assessment is inferred to establish the other's resource lifetime.Validation: 89 focused tests across seven files, full static checks, docs checks (including five README tests), and pre-push checks pass. New assertions reproduced both defects before repair. These follow-up tests use controlled provider boundaries; no new real-engine run is claimed.
#3927, #3923 and #3983 remain separate open follow-ups. They are not claimed fixed in this PR.
@morluto commented on GitHub (Oct 15, 2026):
Two further PR #4238 review findings are repaired:
9d6aca2f8retains completed native trace facts when late cancellation or runtime-directory cleanup fails. The completed result projection/schema is reused; journal-only interruptions still omit unreported exit, launch and breakpoint facts.b3f328f9dreports retained Flutter/web cleanup paths at their resource owners and preserves child diagnostics and recovery actions through web service composition. Regressions exercise the actual provider/service/CLI finalizer and successful cleanup retries.Validation: 158 focused tests across 15 native/provider/CLI/MCP/schema files passed, alongside the earlier 89-test review suite. Full static, docs and pre-push checks passed. A fresh real LLDB control lane passed CLI and stdio MCP with six events, exit/event-limit/duration-elapsed, and hardened-runtime denial/get-task-allow controls. Late-cancellation and cleanup fault timing remain controlled regressions.
The remaining Android/firmware/Ghidra audit cases (#3927, #3923, #3983) are still open and are not claimed fixed here.
@morluto commented on GitHub (Oct 15, 2026):
Audit implementation and coverage update: draft #4274 contains eleven semantic commits, through
5c6005b88. @morluto, the reviewable fixes and verification limits are collected there.Final source suite: 549 files, 8,420 passed/13 skipped. Full MCP lane: 142 files passed/2 skipped, 799 tests passed/5 skipped. Fresh owned stdio exercise validated 207 tools and 414 schemas, typed-error recovery, exact SQLite signed bounds/blobs/column order, ZIP retained Evidence, plist artifact routing, and clean shutdown. Discovery assigns all 1,384 tests exactly once. Final combined ownership/provider/verifier selection passed: 29 files, 333 tests passed and 21 native-Linux cases skipped, including the corrected JavaScript verifier callers.
This is an area-by-area lifecycle audit, not a claim of every-line review or every-host/engine execution. Source reads, inventory/searches, controlled ports, and real providers have different evidentiary depth. The separately registered global MCP has a different path and null build commit; source alignment remains unknown and it was not replaced. Comprehensive cold/warm agent-token, CPU and process-family memory costs were not measured.
Keep this umbrella open for the explicitly unverified platform/engine lanes and later findings. Confirmed defects were filed or linked rather than inferred across providers.
@morluto commented on GitHub (Oct 15, 2026):
Final MCP exercise and delivery update: #4274 now contains 13 semantic commits through
90846dc7d. The latest live probe found #4277, where session status omitted retained snapshot staging without an active provider; fixed with a failing-before/passing-after filesystem regression. #4276 records a separate design question about recovery of raw partial observations after SDK cancellation; current behavior is now documented, with no implicit retention expansion.Final-head Node 24.18.0 validation: static checks, build, docs, 26 snapshot/session tests, 29 MCP lifecycle/session/identity tests, and fresh stdio exercise passed. The live catalog had 207 unique tools and 414 valid schemas; typed-error recovery, signed 64-bit SQLite values/blob bytes, archive Evidence lookup, plist routing, session close, ping, and transport shutdown passed. The previously reported 8,420 source tests, 799 MCP tests, 333 ownership tests, and real Chrome/Inspector runs passed before the final status/docs change; these are not claims that every engine or platform was exercised.
The PR remains draft for human readiness and required CI/platform checks. Native Windows/Linux and unexercised engine/device workflows remain coverage gaps tracked by this audit; no claim of codebase-wide absence of defects.
@N0zoM1z0 commented on GitHub (Oct 16, 2026):
Linux audit checkpoint at pinned main
2c7583599b9ac1c847bd77b1940930fd8d4594c7(executed results, not a claim that the entire audit is complete):execution_failure: unreadable_outputreproduced through actual stdio MCPTwo paired Electron captures per revision also checked completed actions/effects and the unrelated control. Medians base/fix: 8.28/7.99 s elapsed, 7.75/7.34 s CPU, 1.24/1.26 GiB sampled family RSS; input + full MCP result proxy 8,257/8,273
o200k_basetokens. No speedup claim from two samples. Fresh processes/profiles, Node compile cache disabled, OS cache uncontrolled/warm; actual agent billing and initialization traffic unmeasured. Xvfb/container baseline excluded from that inner family sample; container capped at 4 GiB/two CPUs.Deduplication: #4346 already owns #4322; #3544 owns custom XAUTHORITY forwarding (#3414). This audit does not duplicate either or claim those fixes verified. #4276's retained-partial recovery design remains unresolved; no implicit retention expansion. Proprietary engines, devices, and other OSes remain unverified. The 207-tool inventory is not itself proof of every resource owner’s lifecycle. Full local logs and responses retained under
/tmp/rea-4227-lifecycle-20261016/and/tmp/rea-4403-browser-cleanup-20261016/; additional owner lanes are in progress.@N0zoM1z0 commented on GitHub (Oct 16, 2026):
Linux audit update: #4403 was fixed and normally merged in #4406 (
5a77acfbc), after current-head CI and both automated re-reviews passed. The stale colocated test expectations found in review were reproduced, corrected and consolidated with the existing owner tests. No ownership guard was weakened.Additional executed lanes since the earlier checkpoint:
d72d856f5, and was closed with evidence of the existing format-aware parser fix.Full English recap, immutable revisions and per-lane wall/CPU/RSS measurements are retained locally at
/tmp/rea-4227-lifecycle-20261016/English-recap.mdandcompleted-lanes.json. Heavy tasks used two CPU cores and bounded heaps; the owned Ubuntu container is stopped. RSS sampling may double-count shared pages; actual model billing remains unmeasured. No speedup or cross-platform certification claim.Still open: #4282 live Electron marker visibility; #4346 already owns #4322 and #3544 owns custom XAUTHORITY (#3414). Missing engines/devices and unselected lifecycle fault cases are unverified, not silently marked passed. The 207-tool / 48-provider declaration map is not a substitute for tracing actual resource owners. Next: real reproduction of existing #4011's optional recorded-crash Python→GDB exec ownership mismatch, using matching cached free tools. This umbrella remains open.
@N0zoM1z0 commented on GitHub (Oct 16, 2026):
Linux lifecycle follow-up: #4011 is fixed and merged in #4435 (
781d5751a, verified head1f5ca5ade; identical trees). All final-head CI passed, including real recorded-crash and binary-layout lanes; Codex had no findings and Greptile scored 5/5 after the foreign-token evidence oracle was strengthened.Real GNU GDB13.1/pwndbg2026.09.15 reproduced the stale Python command pin after exec. The shared decoder now uses exec-aware ownership consistently across stages, while retaining parent/group/token checks and explicit pins. Controlled native-handoff cancellation stops GDB before returning, retains decoded facts/diagnostics, preserves an unrelated control, and permits same-provider reuse. Foreign-token refusal still retains ownership/files for retry. The normal unmodified public CLI/MCP verifier passed all42 cases twice per revision. Other OSes and SDK raw-partial recovery remain unverified.
Same-core completed CLI + first/repeated MCP task: base/final-head8.11/8.27s wall,9.31/9.45s CPU,1.060/1.061GiB sampled family RSS. Per MCP request+full-reply o200k proxy was32,465 tokens on both; schemas/control traffic/CLI output/billing excluded. Full-verifier base82.0/81.4s vsfix149.0/78.0s are all retained; the slow first fixed sample has no established cause. No speedup is claimed.
Owner inventory now associates all207 tool identities with37 contract families and source ownership paths, with no omissions/duplicates. This is source-derived mapping, not proof of every leaf owner or lifecycle phase. Distinct roots include server-owned provider shutdown, BinarySession/lazy/composite routing, process-capture session resources, artifact scopes, descriptor owners, and process identity/supervision. Dynamic selections and untested phases remain unknown rather than inferred from catalog membership. Earlier real-engine coverage and unavailable-platform limitations still apply.
Next existing reports: #4379 reproduced on Linux at fresh main781d5751a (final real stat settles after abort, but bytes are returned; descriptor does close), with its isolated fix underway. #4381 is queued for Linux reproduction after that merge; no matching PR was found for either. The umbrella remains open.
Local evidence:
/tmp/rea-4011-pwndbg-exec-20261016/,/tmp/rea-4379-file-finalization-20261016/; owner matrix and English recap under/tmp/rea-4227-lifecycle-20261016/. Only selected fixture environments were persisted; heavy runs remained serial and bounded.@N0zoM1z0 commented on GitHub (Oct 16, 2026):
Linux checkpoint: #4379 is fixed and #4443 merged normally as
c884864876c2568d8567235737b32e3f5893751d. Final owner/consumer tests (570), real filesystem/Evidence probes, paired public tasks and exact-head reviews passed. Successful file finalization now observes cancellation while preserving completed physical facts, primary failures and exact cleanup ownership. Production sources and our four changed test files match reviewed head025fd7df; five unrelated upstream test files landed during CI.Next, #4381 reproduced on that latest main in Linux (3/3 original real-stream trials). Ready PR #4446 adopts @xu91102's public patch with original authorship preserved and independently adds opaque cancellation-reason hardening. Final head
d6fa191epassed 484 tests /28 files, static/docs checks, seven real retained-provider cancellation/denied-close/reuse cases on an unchanged official Microsoft .NET assembly, and two paired actual CLI/stdio MCP runs per revision. Public tasks preserve summaries, paged facts, provenance and complete Evidence; they are one-shot provider calls, so cached-hash cancellation is established separately at the real retained provider/file boundary. CI/reviews are running.Completed public-task base/fix medians: 7.22/7.21 s wall, 9.07/9.05 s CPU, 0.673/0.669 GiB sampled process-family RSS (two cores; OS cache uncontrolled). Forty warm retained-provider queries: 602/604 ms. No speedup claim. Exact source/package identities, failures and full measurements are retained locally. This checkpoint does not establish a physical descriptor leak, public SDK cancellation coverage for managed cached hashing, or additional native-engine/device coverage; earlier explicit unknowns remain open.
@N0zoM1z0 commented on GitHub (Oct 16, 2026):
#4381 is now fixed: #4446 merged normally as
fe2a398dd9ab290ba6cb3411403d319cec8d07a2after all required CI passed. Codex reported no findings and Greptile scored5/5 on exact headd6fa191e. The squash tree exactly matches that tested/reviewed head. The original patch author's contribution is preserved; the two previously withdrawn co-author identities were not added.Final Linux verification:484 tests/28files, static/docs checks, seven actual retained-provider cancellation/close-denial/finalization/reuse scenarios on an unchanged official Microsoft .NET assembly, and two paired normal public CLI/MCP tasks per revision. Exact opaque caller reasons survive normalization; genuine close failures retain their owner and block admission until verified cleanup. No physical descriptor leak or public cached-provider cancellation was inferred.
Continuing from a new worktree pinned to latest main
fe2a398dd: real offline ELF-layout and historical web-capture workflows, with two CPU cores and bounded memory. The detailed source-owner inventory still marks unexecuted phases unknown; catalog coverage alone is not lifecycle verification.@N0zoM1z0 commented on GitHub (Oct 16, 2026):
Additional Linux verification at pinned main
fe2a398ddcompleted without a new product defect in these lanes:Apktool public SDK cancellation after actual Java decode handoff also passed: observed native exit
91ms and workspace removal93ms, subsequent decode succeeded in the same stdio connection, and an unrelatedjava-named control survived. The APK remained unchanged; verified final lineage was empty. Run6.0s/0.80GiB. Native exit and owner cleanup were checked as separate facts. Analysed APKs and ELF fixtures were not executed except the explicitly controlled native debugger fixture in the next lane; the Rust compiler wrapper and finite source-owned JS test oracles were executed for fixture preparation/validation.Limits: Flutter exact engine/string-count expectations and complete string-pool coverage remain unverified. Rust retains typed cancellation and cleanup but does not retain the custom reason in its cause chain. The optional large-index ELF MCP profile was not requested. A separate stable-artifact helper probe passed3/3 real-stream cancellation/retry/close controls; #4381 was not generalized to it. Initial harness-assumption failures are retained and were not filed as REA defects. CPU, cold/warm/token proxies where measured, source digests and full local logs are recorded; no speedup claim.
Next existing finding: #4015 reproduces on latest main in the registered MCP path (2failing interrupted cases,1framed control). Real official Linux Rizin0.9.1 also supplies genuine bytes before NUL, and a production-manager run with a shortened500ms deadline reproduced the missing tail. The native fixture completed and its IO inventory was empty before fault injection. Existing cleanup uncertainty was retained; this is not an automatic-recovery claim. Its focused fix is under verification in a separate latest-main worktree/branch.
@N0zoM1z0 commented on GitHub (Oct 16, 2026):
#4015 is fixed: #4459 merged normally as
1ff705473ae79275ab0b410e6f25af6da60ea18f. Its tree exactly matches tested/reviewed head0e480fb83. Required CI is green, Codex reports no findings on that head, Greptile5/5, and all review threads are resolved.The Rizin receiver and collector now preserve received complete/unfinished bytes with bounded UTF-8 capture. A tagged Result keeps facts independent of cancellation/protocol/cleanup precedence; byte-queue drops are recorded at their source, and active stdin failures preserve partial frames. Unknown completion, exact launch provenance, current-target uncertainty and ambiguous marker prefixes remain explicit. This does not relax cleanup authority.
Executed Linux evidence: 353 tests/15files (one existing skip); full static/docs gates; focused snapshot mutation sweep4killed/2TypeScript-rejected/0survivors. Genuine official Rizin0.9.1 probes retain the native diagnostic after deadline/exit and after owned-process exit followed by cancellation during output drainage. Those native fault probes retain existing inferior-disposition cleanup uncertainty; they do not establish automatic recovery or real stdio SDK cancellation.
Two final completed public CLI/stdio MCP runs each cover1CLI+11MCP requests, three target lifecycles, explicit close/reopen and connection shutdown. Borrowed TTY and unrelated rizin-named control survive; source ELF is unchanged and final lineage is verified empty. Base/final medians:6.62/6.75s wall,7.02/7.42s CPU,0.717/0.717GiB sampled RSS. Whole-wire discovery is also measured; catalogs are identical. Tokenizer proxies are not model billing; no speedup is attributed to this fix.
The inventory remains207 tools/37 source contract families. Scoped Rizin owner phases now distinguish verified normal recovery, boundary-only queue/cancellation cases, native fault uncertainty and unverified platforms. Other previously recorded unknowns remain open. The extra first-call validator cost is already tracked by #1065/T5; no duplicate issue is needed. Next Linux candidate: existing #3946, subject to fresh-main reproduction.
@N0zoM1z0 commented on GitHub (Oct 16, 2026):
Checkpoint 8 — #3946 is fixed and merged via #4499 (
a6c6a76d37c729e17cccf2dd20fe8e8177d98b14). The squash tree exactly matches reviewed/testedc68e401153528cc50e25e3bf772e0664d0cf874c; final CI passed, Codex had no findings, Greptile 5/5, and all review threads are resolved.close. Late cancellation preserves confirmed-complete output as partial Evidence. Actual CLI SIGINT during receipt acknowledgement returns exit 130,cancelled, and the completed output. 66 focused tests, full static gates and docs passed.180ba03bfchecks: real Chromium 156 runtime attribution passed (18.77 s, 2.15 GiB); compiler-backed source-map capture/export/original-point and nested-map workflows passed (49.31 s, 1.84 GiB, isolated esbuild 0.25.10). Both final process lineages were verified empty.Remaining Cutter gaps: actual UI-command cancellation, cancellation during descriptor filesystem reads, arbitrary foreign document switching, and failure export/import. Descriptor FIFO admission remains with external #4471/#4486. Qt6 rejected Cutter's own sample plugin too, matching upstream rizinorg/cutter#3659. Other OS and unavailable commercial engines remain unverified; this does not complete the parent audit.
Local evidence:
/tmp/rea-3946-cutter-discovery-20261016/and/tmp/rea-4227-lifecycle-20261016/cutter-owner-phases.json; essential observations are inline above.@N0zoM1z0 commented on GitHub (Oct 16, 2026):
Checkpoint 9 — two independently reproduced native Cutter metadata defects are now fixed and normally merged:
2c1dee16d): ordinary loaded files now come fromCutterCore.getConfig("file.path"). A property-only candidate failed real Cutter; the actual member is a debugging backup, not a maintained current-file getter. Official Qt5 CLI/MCP and Evidence preserve a Unicode/#?ELF path. Eleven Python tests and66relevant tests passed. Touched source matches the reviewed head; two unrelated upstream PE-resource files advanced during CI.9a82046b0): host provenance now uses Qt application version, not Rizin's multiline backend report. Thirteen Python tests and66relevant tests passed. Official Qt5 discovery and both Evidence version fields agree withcutter --version(2.5.0-HEAD-a6f6ad7). The complete squash tree matches reviewedddaacb55f. Both PRs passed final-head CI/Portable tests, Codex and Greptile5/5; no outstanding review threads or co-author trailers.For the version task, one completed native workflow/revision (2CLI/3MCPcalls) measured base/fix9.64/8.75s wall,11.85/10.75s CPU,1.047/1.049GiB sampled family RSS. Shared host and uncontrolled caches/load: no speedup claim. Named two-tool definitions+calls+CLI
o200k_baseserialization proxy8,767→6,912 (~21% less); whole wire+CLI835,460→833,605, including identical829,341-token catalogs. These are transport serialization proxies, not model input or billing. Actual model tokens are unmeasured.Additional real managed composition checks on fresh main
9a82046b0passed using Microsoft.Extensions.Primitives8 metadata: five CLI/four MCP calls, byte-identical assembly copies (303full-member CLI matches;62selected-member MCP matches), a66-node/65-edge graph with exact source Evidence links, inference-only exact-build reconstruction import (executed:false,canonical_observation:false), and same-connection reuse. Source bytes remained unchanged; final owned lineage was verified empty. Wall18.63s, CPU23.20s, sampled peak0.816GiB. This covers three managed composition workflows; native-boundary verification is still unqualified, and no target execution/replay claim is made.The coverage index also records the earlier real managed
inspect_analysis_viewjourney: retained Evidence pages at offsets0/5, limit5, with export/source provenance retained. Existing engine runs keep their own pinned revisions; they are not relabeled as latest-main tests.Remaining Cutter gaps include actual UI-command cancellation, actual GUI document switching and same-path reload identity. The optional native-switch fixture did not establish a switch (
loadFilereturnedfalse); no REA defect or successful transition is inferred. Qt6 remains upstream rizinorg/cutter#3659; ADB device/server phases, native interop verification, real IDA/JEB/Kuna and other OS remain unqualified. The parent stays open.Local evidence roots:
/tmp/rea-4497-cutter-document-20261016/,/tmp/rea-4498-cutter-host-version-20261016/,/tmp/rea-4227-lifecycle-20261016/. Essential observations are above; the next index enumerates all207tool IDs and distinguishes source routes from runtime proof.@N0zoM1z0 commented on GitHub (Oct 16, 2026):
Linux audit source-route inventory and coverage index.
This enumerates 207 tool IDs across37contract families against source
9a82046b07244e62df22076b64ded05ff9abc5db; the current captured catalog has the same IDs. Families are an index, not a claim of37canonical resource owners. Entry routes are source-derived; dynamically selected leaf owners and every unnamed lifecycle phase remain unknown. Executed lanes retain their individual pinned revisions; earlier engine runs are not relabeled as latest-main tests.Complete stable tool-ID inventory, grouped by the linked source contracts
inspect_adb_client,list_adb_devices,inspect_adb_device,list_adb_packages,pull_adb_package,read_adb_logcat,inspect_adb_package,pull_adb_file,push_adb_file,capture_adb_screen,list_adb_processes,list_adb_directory,list_adb_features,list_adb_services,inspect_adb_display,inspect_adb_window,read_adb_setting,collect_adb_bugreport,resolve_adb_packages,install_adb_package,uninstall_adb_package,start_adb_app,start_adb_activity,stop_adb_appinspect_analysis_viewinspect_android_package,search_android_classes,inspect_android_class,inspect_android_method,trace_android_referencesinspect_apktool_client,decode_android_resourcestrace_application_feature,trace_javascript_semantics,compare_application_versions,compare_source_to_bundle,compare_javascript_export_shapes,build_reconstruction_obligation_ledger,evaluate_reconstruction_coverage,project_android_application_graph,project_apple_application_graph,project_harmony_application_graphinspect_artifact,extract_artifact,decode_interface_builder,inspect_keyed_archive,inspect_asset_catalog,trace_dylib_resolutioninspect_pe_resources,inspect_binary_layout,inspect_recorded_crashlist_browser_targets,inspect_web_page,analyze_web_bundle,observe_web_session,discover_webmcp_tools,compare_web_captures,capture_web_screenshot,compare_web_screenshotscapture_browser_scenarioinspect_packet_fields,inspect_packet_capturelist_cutter_sessions,cutter_commandlist_electron_targets,inspect_electron_page,analyze_javascript_application,reconcile_javascript_runtime,capture_electron_scenario,inspect_electron_fusesinspect_native_dispatch_metadata,get_objc_classes,get_objc_protocols,batch_decompile,get_call_graph,analyze_swift_types,find_xrefs_to_name,binary_overview,analyze_function,inspect_native_api,trace_feature,trace_call_path,trace_native_ui_action,trace_native_valuesinspect_evm_interfaceinspect_firmware_regions,extract_firmwareidentify_flutter_build,inspect_dart_aotlist_frida_devices,list_frida_processes,start_frida_session,load_frida_script,resume_frida_session,unload_frida_script,frida_session_status,close_frida_session,instrument_with_fridastart_gdb_session,gdb_console,gdb_session_status,close_gdb_sessioninspect_go_binaryrecover_javascript_sourceslist_javascript_runtime_targets,observe_javascript_runtimeinspect_jeb_client,open_jeb_project,list_jeb_units,decompile_jeb_iteminspect_managed_artifact,inspect_managed_members,inspect_managed_native_boundariescompare_managed_members,verify_managed_native_boundaries,import_managed_reconstruction,project_managed_application_graphobserve_native_ui,capture_native_ui_scenario,observe_native_calls,inspect_macho,inspect_signature,inspect_plist,list_architectures,demangle_swiftannotate_native_function,inspect_native_load_image,inspect_native_data_type,inspect_native_instruction,resolve_native_call_targets,address_name,comment,current_address,current_procedure,current_document,goto_address,inline_comment,list_bookmarks,list_documents,list_names,list_procedures,list_segments,list_strings,next_address,prev_address,procedure_address,procedure_assembly,procedure_callees,procedure_callers,procedure_info,read_function_instructions,search_bytes,read_bytes,address_to_file_offset,procedure_references,procedure_pseudo_code,resolve_containing_procedure,search_procedures,search_strings,set_address_name,set_addresses_names,set_bookmark,set_comment,set_inline_comment,unset_bookmark,xrefsinspect_pcap_client,inspect_pcap_captureinspect_with_objdump,execute_rizin_commandstart_rizin_debug_session,rizin_debug_command,rizin_debug_session_status,close_rizin_debug_sessioninspect_rust_binaryopen_binary,close_binary,binary_session,export_evidence_bundle,import_evidence_bundle,capture_process_scenario,compare_process_captures,compare_artifacts,compare_functions,compare_bundles,find_changed_behavior,build_call_path,correlate_static_and_runtime,verify_reconstruction,list_unknowns,record_unknown,update_unknown,verify_unknown_resolution,get_evidence_bundle,get_navigation_context,inspect_address_contextinspect_signal_decoders,decode_signal_recordinginspect_sqlite_databaseinspect_wasm_artifact,compare_wasm_interfacesinspect_web_network_captureobserve_web_execution,inspect_web_event_listenerstrace_web_source_location,trace_web_module_imports,export_web_scriptsRemaining ownership/lifecycle work: source entry routes are incomplete proof of dynamic leaf selection. Other native UI cancellation variants and Cutter GUI switching, arbitrary foreign targets, permanent cleanup denial/PID-reuse variants for every family, managed native-boundary verification, ADB device/server lanes, real IDA/JEB/Kuna and other operating systems remain unqualified unless a linked lane explicitly proves them. Native readiness, operation completion and positive cleanup proof remain separate facts. Do not turn these unknowns into absent targets, successful cleanup or universal support.
One-shot readers still have subprocess, file/snapshot and publication cleanup; they are not automatically lifecycle-inapplicable. The macOS-only backend declaration is a scoped unsupported-host fact.
Related existing Cutter capacity defect3330 is already owned by external PR3776; no duplicate implementation was started. Electron4282 remains open at this checkpoint.
Selected completed-task wall/CPU/process-family-memory measurements are recorded in the linked checkpoints. Native Qt5 version work has a full-wire+CLI serialization token proxy including its catalog; actual model token use and stable cold-OS-cache costs were not measured. Model billing is not inferred from byte counts or serialization proxies.
The parent audit remains open; this is a coverage ledger and a list of remaining work, not a completion declaration.
@N0zoM1z0 commented on GitHub (Oct 16, 2026):
Checkpoint 10 — real native Cutter cancellation/recovery is now exercised on pinned main
9a82046b07244e62df22076b64ded05ff9abc5dbwith the unchanged shipped REA bridge and official Linux Cutter2.5.0 Qt5.The public stdio MCP
cutter_commandruns! <owned-fixture-script>through real Rizin. The script writes an independent start marker, then waits for a fixture-owned release file (also self-bounded). After observing the marker, the SDK request is cancelled:The native command is still running100ms after caller cancellation; the GUI remains alive. Releasing the fixture allows authenticated completion recovery and a successful
ijon the same connection. The execution counter remains1: no command replay.export_evidence_bundlecontains the cancelled command's partial Evidence withexecution_state:"unknown",error:"transport-response-missing"and the correct host version. The earlier uncertainty remains an immutable observation even after recovery.MCP shutdown preserves the attached GUI; the fixture later stops its own GUI. Source ELF bytes remain unchanged and final owned process lineage is verified empty. This tests caller cancellation and safe receipt recovery; it does not claim that cancellation forcibly stops arbitrary native work or closes a caller's application.
Whole task:2CLI/6MCPcalls plus catalog,9.47s wall,11.29s CPU,1.034GiB sampled process-family peak (two CPU cores, shared host). A first fixture attempt was rejected by Rizin command parsing before handoff; its refusal and verified cleanup were retained and are not counted as a cancellation reproduction. Detailed local evidence is in
/tmp/rea-4227-lifecycle-20261016/cutter-native-cancel/.Remaining Cutter gaps include actual GUI document switching, same-path reload identity, and other failure/cancellation variants. The published coverage index will be updated with this scoped native result. No additional product defect was found in this lane.
@gensokyo-dev commented on GitHub (Oct 19, 2026):
Observed during the real Rizin UTF-8 history audit, independently of #5246: main
2dd5effe2a641e354ad273138d0906a759fab9c3, official Rizin 0.9.1 static Linux x86-64 (ab5614cf137608cffc5a3f4f471a91c995cfa7c0c35465bfb73876e5b95561ba), actual stdio MCP. Started a caller-selected durable PTY and/usr/bin/true(SHA-256c79bf44242829108e323378531f4ac839513ca1fba45efd6583643526e1e9fd2), collected four complete/untruncated command observations, thenclose_rizin_debug_sessionreturnedcleanup_incomplete:Owned Rizin debugger inferior detach could not be verified: ENOENT: no such file or directory, open /proc/1726589/stat. An immediate explicit close retry succeeded withtarget_state: unknown; final owned process-family cleanup was verified, OOM kills 0. This one attempt is not counted as a successful completed-task benchmark.Hypothesis, not a completed diagnosis: this very short-lived inferior can exit between detach and the post-detach identity/descriptor check. The history bug already reproduced through the real engine (CJK 49,176 B retained, malformed emoji boundary, decoded invalid UTF-8 18,000 B retained), so I am keeping this lifecycle observation separate and using a source-controlled short sleep/exit target to finish that audit. No cleanup code change or claim that this race is fixed.