mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[GH-ISSUE #1173] [Bug] Cancelled macOS ownership helper compilation leaves Swift object files #415
Closed
opened 2026-10-15 18:24:53 +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#415
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 9, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/1173
Before submitting
Area
Process capture or runtime observation
Observed behavior
Cancelling macOS REA process-ownership helper preparation leaves Swift compiler object files after the CLI reports complete cleanup. The behavior is independently reproducible without Ghidra on the release and main. It also occurs when the real reader is closed directly during compilation. The defect is bounded leftover helper compilation storage, not a surviving process or a Ghidra project leak.
The CLI cancellation attempt left two helper object files on each tested build, 2/2 cancellation attempts per build, including a second run of the exact reproduction script below. All four invocations exited 143 and returned
cancelledwithdetails.operation: trace_web_source_locationanddetails.cleanup: complete. Each fresh TMPDIR retainedTemporaryDirectory.<suffix>/.keep-directory,ProcessRunTokenReader-1.oat 174,592 bytes, andProcessRunTokenReaderMain-1.oat 50,584 bytes. REA's own helper root was absent, and no sampled descendant PID survived after the invocation exited.An additional direct real-reader check on each build called
reader.close()after the first compiler object appeared. Both close calls resolved, preparation rejected withAbortError, and the same temporary object directory remained. This corroborates the documented close contract directly; it is an internal-boundary check, not a separate user-facing defect.The uncancelled CLI control succeeded on each build, 1/1 attempts per build, returned the expected original source-map content, and left its supplied TMPDIR empty. The supplied earlier Ghidra observations saw residue at 600/700/800 ms deadlines and after MCP cancellation, but two 1000 ms controls were clean. Cancellation timing matters; these sample counts are not a population frequency estimate.
Reproduction
Use a fresh scratch directory, Node 24 on PATH, Python 3, and Apple Swift via
xcrun. No Ghidra, JDK, browser, or native target is required. SetREA_CHECKOUTto a scratch clone of the tested main revision afternpm ci && npm run build:cached. Save the following as$SCRATCH/repro.pyand runpython3 "$SCRATCH/repro.py" main cancelandpython3 "$SCRATCH/repro.py" release cancel. Use a fresh$SCRATCHfor each repetition because the script creates new per-run directories.main successandrelease successrun the same fixture without cancellation.The script starts the real CLI, waits for a helper object file rather than guessing a deadline, and sends SIGTERM to the actual REA entry point. It records the result, post-exit files, and observed surviving child PIDs. The source-map input is an inert authored fixture with exact script digest and contents.
These are real cancellation cases. A short Ghidra startup deadline is a supplied earlier variant, not a Ghidra rerun in this investigation.
Expected behavior
ProcessOwnershipHost.close()is documented insrc/process/ProcessOwnership.ts:89to "Release owned native inspection helpers and their temporary files." The remaining object files contain only REA's packaged helper compilation output and are attributable to its owned preparation operation. Closing or cancelling that preparation should release these transient files as well as the tracked helper root. If an owned transient cannot be removed, the cleanup outcome should preserve that failure rather than claim complete cleanup.The public Ghidra guarantee is narrower:
docs/provider-evaluation.md:68-81promises removal of the Ghidra runtime root, and that root was removed in the supplied report.docs/process-capture.md:33-38likewise names the helper's private directory. This report relies on the shared process-host's broader helper-temporary-files contract; it does not claim that either directory-specific promise alone covers arbitrary compiler storage.docs/mcp-contracts.md:83-84definescleanup_incompleteonce an owned cleanup failure is established.Impact and scope
The observed residue totals 225,176 bytes of object files per cancelled CLI attempt. It recurs across fresh macOS processes when cancellation intersects compilation. No surviving owned process, Ghidra runtime-root residue, corrupted source-map result, or core workflow blockage was observed. Linux and Windows are not covered by these Darwin-specific probes. A dedicated per-run TMPDIR permits safe manual removal after all processes exit; shared temporary directories must not be glob-cleaned.
REA version
Latest npm release
rea-agents@6.1.0; mainb34bdcdb2877be394c59c9cbf70269dc1841ff78, built withnpm ci && npm run build:cached. The release CLI ran throughnpx -y rea-agents@6.1.0; main ran throughnode scripts/rea.mjs.Runtime and platform
Node.js v24.21.0; macOS 27.0.1, build 26A434; arm64; Apple Swift 6.4, swiftlang-6.4.0.34.1 clang-2100.3.34.1; swift-driver 1.168.6. Ghidra and Java were not used in the new reproduction.
Target and artifact context
Authored inert source-map fixture, generated script text
generated, original contentoriginal, and mappingsAAAA. No private target, application execution, browser, Ghidra project, or native binary is required.Interface
CLI
Earliest failure stage
Cleanup, cancellation, or lifecycle
Relevant output or evidence
src/process/ProcessOwnership.ts:89, the shared native-inspection helper close contract; narrower public root guarantees are distinguished under Expected behavior.The earlier Ghidra deadline/cancellation observations are supplied evidence; the provider-free CLI and direct-close observations are new local execution evidence.
The excerpt omits the unchanged message/remediation fields. The process returned exit 143, not a successful analysis result.
Typed outcome or recovery expected
Release owned helper compilation transients when preparation is cancelled or closed. If owned transient cleanup cannot complete, preserve that failure in the cleanup outcome. The requested restoration is:
Repeat the real CLI cancellation at the first object-file boundary and the direct reader-close check under a dedicated empty TMPDIR. Passing cleanup leaves no helper-specific
TemporaryDirectory.*object files, or reports incomplete owned cleanup instead of complete cleanup if removal fails. Keep the uncancelled source-map control successful with the same original content and digest. Preserve unrelated files and Swift's intended reusable module cache. A larger timeout alone does not test restoration because it can avoid the cancellation boundary.Analysis or suspected cause
Source-derived explanation:
src/process/DarwinProcessRunTokenReader.ts:146-164creates a trackedrea-process-token-*root and sends a copied environment, including TMPDIR, toxcrun swiftc. Abort, close, and exit cleanup remove that tracked root at lines 131-140, 182-186, and 340-354. The leftover directories are siblings under TMPDIR rather than children of that root. These facts explain the tracking gap without prescribing a fix.The final executable is reused within one reader and REA process; concurrent preparation shares compilation and the last cancelling waiter aborts it. Fresh CLI invocations compile again. Swift's reusable module cache is intentionally retained and is outside this report. The
.otransients are not that cache.The supported public path is CLI
trace-web-source-location, throughsrc/javascript/sourceMaps/SourceMapCommand.ts:59intoprepareProcessOwnershipInspection()and the system Darwin reader. The same shared prerequisite is reached by Ghidra startup throughsrc/process/ProviderProcess.ts:144.The strongest competing interpretation is that "their temporary files" means only files explicitly tracked inside REA's private helper directory. That is consistent with the narrower public directory wording. The observed files are nevertheless specific to REA's owned helper compilation, and a direct close leaves them behind. Please treat this as one bounded helper-cleanup report, not a claim that REA must delete arbitrary ambient TMPDIR files.
Additional context
Open and closed issues and pull requests were searched for
ProcessRunTokenReader,TemporaryDirectory,Swift cleanup, andswiftc temp. No report of this residue was found. The nearest issue is #1137; its merged PR #1139 addresses cold module-cache cost and ownership-preparation deadline placement, not these post-cancellation object files. The current main still reproduces after that change.No additional REA defect was discovered in this bounded investigation. No security impact is claimed.
Triage assessment