mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
Closed
opened 2026-11-01 21:47:38 +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#7405
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/morluto/rea/pull/6748
Author: @akshatgg
Created: 10/23/2026
Status: ✅ Merged
Merged: 10/23/2026
Merged by: @morluto
Base:
main← Head:fix/ghidra-sigkill-oom-kill📝 Commits (2)
0899f08fix(ghidra): report kernel OOM kills as a memory constraintcbefe13fix(ghidra): scope OOM-kill attribution to what the cgroup proves📊 Changes
14 files changed (+781 additions, -9 deletions)
View changed files
📝
docs/binary-diagnostics.md(+25 -0)📝
src/ghidra/GhidraClient.ts(+49 -7)📝
src/ghidra/GhidraClientTypes.ts(+3 -0)📝
src/ghidra/GhidraDiagnostics.test.ts(+27 -0)📝
src/ghidra/GhidraDiagnostics.ts(+3 -0)📝
src/ghidra/GhidraProvider.behavior.test.ts(+108 -0)📝
src/ghidra/GhidraProviderClient.ts(+73 -0)➕
src/process/LinuxCgroupMemory.test.ts(+146 -0)➕
src/process/LinuxCgroupMemory.ts(+198 -0)📝
src/process/ProviderProcess.ts(+8 -0)📝
src/process/ProviderProcessOutput.test.ts(+40 -0)📝
tests/boundary/providers/ghidra/ghidraClient.fixture.ts(+2 -0)📝
tests/boundary/providers/ghidra/ghidraOomRetention.test.ts(+89 -2)📝
tests/fixtures/fakeGhidra.mjs(+10 -0)📄 Description
Summary
Fixes #5859. When the kernel or a container OOM killer ends Ghidra with
SIGKILL, Ghidra prints nojava.lang.OutOfMemoryError, so REA fell through to the genericexecution_failure("Runrea doctor… repeating the unchanged request is not expected to succeed"). Doctor finds nothing, and the obvious next knob (GHIDRA_HEADLESS_MAXMEM) does not help, because the limit also covers Ghidra's native decompiler processes.Problem and expected behavior
exit_signal: "SIGKILL"before REA began stopping it, with no OOME line in the operation's output.execution_failurewithrea doctoradvice, although the diagnostics already heldexit_signal: "SIGKILL".oom_killcount of REA's cgroup rose during the run →resource_constraint,resource: "memory",reported_limits.cgroup_memory_max(REA's groupmemory.max: bytes,"max", ornullwhen unread) plusconfigured_jvm_max_heap. The message says the kernel OOM killer ended a process in REA's cgroup or one of its child groups; the advice covers the whole process tree instead of a larger Java heap.execution_failure, but the message names the SIGKILL as a possible out-of-memory kill and says how to check, instead of pointing atrea doctor.Change and scope
src/process/ProviderProcess.ts: the supervisor recordsstopRequestedwhenstop()begins, before any signal it sends (including group cleanup), and exposes it insnapshot(). Ghidra diagnostics carry it asstop_requested: true. A SIGKILL with that flag came from REA and is never projected as an outside kill.src/process/LinuxCgroupMemory.ts(new): parsers for/proc/self/cgroup(the0::row), cgroup2 rows of/proc/self/mountinfo,memory.events(oom_kill) andmemory.max. The group directory is joined from the root of the cgroup2 mount that covers it, so subtree mounts resolve correctly. Kernel files are read to EOF within fixed budgets (16 KiB; 4 MiB for mountinfo). Returnsundefinedoff Linux, under cgroup v1, or when files are unreadable.GhidraClient: reads REA's own cgroup once before launch; after a process/protocol failure (after the output drain) or a startup failure, ifexit_signalisSIGKILLand no stop was requested, reads again and attachesmemory_cgroup: { path, oom_kill_before, oom_kill_after, memory_max }. The reader is injectable throughGhidraClientOptions.readMemoryCgroupfor tests.GhidraProviderClient:projectExternalSigkillruns after the existing OOME projection (an observed OOME stays primary). Onlyprocessandprotocolfailures qualify;start(launcher) failures can include REA's own rollback, and timeouts, cancellation and remote failures are unchanged. It composes the existingexitedProviderMessagereopen guidance and, for the unattributed case, the existing incomplete-output sentence.oom_killis hierarchical by cgroup (the kernel charges the victim's memcg and every ancestor), so a rise proves an OOM kill in REA's cgroup or a child group, not in REA's process tree. If REA shares its cgroup with unrelated processes, a coincident kill of one of them plus an unrelated SIGKILL of Ghidra would still be reported as a memory constraint. Whether a rise in a shared group should stay a confirmedresource_constraintis a maintainer decision; this PR keeps it and words it exactly.Follow the contribution scope.
Unresolved scope, authority, side effects, or required verification block
integration. Link the required maintainer scope decision for new providers or
capabilities involving target execution, injection, mutation, or protection
recovery; ordinary fixes within existing boundaries may state "not applicable".
Draft PRs may leave the scope decision pending and the readiness and merge checklists
unchecked. Maintainers can help resolve open questions.
Contract and boundary impact
ProviderProcessSupervisor.snapshot().stopRequested), then Ghidra diagnostics (GhidraClient/GhidraDiagnostics), then Ghidra failure projection (GhidraProviderClient).execution_failureto the existingresource_constraintonly when the cgroup count rose; new optionaldiagnostics.memory_cgroup,diagnostics.stop_requestedandreported_limits.cgroup_memory_maxvalues./proc/self/cgroup,/proc/self/mountinfo, andmemory.eventsandmemory.maxof REA's own group; no writes. Cleanup is unchanged; the supervisor only records that a stop began.docs/public/product-catalog.json), package, or installation impact (CI generates and validates ignored catalogs andskills/; edit authored instructions in.agents/skills/reverse-engineer-anything/and never commit build outputs): none.Expected effects (check known effects; use documentation-only on its own).
Unchecked items do not establish absence; leave uncertainties visible.
Evidence and regression coverage
Tests added or updated:
src/process/LinuxCgroupMemory.test.ts: parsers (v1 rows ignored, duplicate/unsafe values rejected,oom/oom_group_killnot confused withoom_kill, escaped mountinfo paths), directory resolution for full and subtree mounts, and the reader against fixture trees (subtree mount,"max"vs unreadable limit, uncovered path, v1, non-Linux).src/process/ProviderProcessOutput.test.ts: an external SIGKILL has nostopRequested; the owner's stop sets it before its cleanup sends SIGKILL.src/ghidra/GhidraDiagnostics.test.ts:stop_requestedis carried into exit diagnostics only when set.src/ghidra/GhidraProvider.behavior.test.ts→ "Ghidra SIGKILL projection": process/protocol OOM kill →resource_constraintwith cgroup wording;"max"andnulllimits reported as observed; no cgroup evidence or unchanged count →execution_failurenaming SIGKILL;stop_requested→ not attributed; observed OOME stays primary; timeout/cancelled/remote unchanged.tests/boundary/providers/ghidra/ghidraOomRetention.test.tswith newsigkill_toolsandsigkill_after_first_toolfixture modes: realGhidraClient, process supervision and projection with a fake JVM that SIGKILLs itself, on a first call and on an established session (reopen guidance kept).Base reproduction or other evidence:
On the base revision the new projection tests and the first-call boundary tests fail with the issue's exact message (
Analysis could not complete. Run \rea doctor` …`).Real kernel check of the reader at
cbefe13(Docker on Colima, cgroup v2, a child allocating until killed): under--memory 256m→{"before":{"path":"/","oomKills":0,"memoryMax":268435456},"exit":{"code":null,"signal":"SIGKILL"},"after":{"path":"/","oomKills":1,"memoryMax":268435456}}; with no container limit (VM-wide OOM) →memoryMax: "max",oomKills0 → 1. The container's cgroup2 mountinfo row:… / /sys/fs/cgroup ro,nosuid,nodev,noexec,relatime - cgroup2 cgroup rw,nsdelegate,memory_recursiveprot.End-to-end with real Ghidra on the issue's public target (
cargo-auditable.exev0.7.7, sha256fc35804634fc76ddec6bd2d7dde2bdd2c0b18e7fe2e7bc96d223751f6a72cefc): Colima (4 CPUs, cgroup v2), Ubuntu 24.04, Temurin 21, Node 24.22.1, Ghidra 12.1.4 with natives built bysupport/gradle/gradlew buildNativesfor linux_arm_64. Container--memory 1500m --memory-swap 1500m,GHIDRA_HEADLESS_MAXMEM=1G,rea analyze /targets/cargo-auditable.exe --format json --full-output, usingnpm packtarballs of the base revision and of this branch:oom_killbefore → after3c5c887)execution_failure, "Run `rea doctor` …",exit_signal: "SIGKILL", failure kindprocess("Ghidra exited before bridge startup")cbefe13)resource_constraint,resource: "memory",reported_limits: {cgroup_memory_max: 1572864000, configured_jvm_max_heap: "1G"}, nostop_requestedIn one earlier run of the first commit (
0899f08), the kernel chose REA's own Node process as the victim (exit 137), so no REA result was produced; victim selection is the kernel's and outside this change. The run atcbefe13killed Ghidra on the first attempt.Control at
0899f08(same image, no memory limit):rea analyzecompletes (exit 0, Evidence for sha256fc358046…, 433 s).User-visible CLI/MCP output (if applicable): from the end-to-end run at
cbefe13(trimmed):Remaining proof gaps: not run on Windows or on cgroup v1 hosts (attribution is unavailable there by design and the SIGKILL message still applies); macOS jetsam kills only get the unattributed message. A real subtree cgroup2 mount was not exercised (fixture-tested only). The concurrent close/cancel race that motivated
stop_requestedis covered by supervisor and projection tests, not reproduced with real Ghidra. The "fewer CPUs with a longer startup deadline" advice follows the issue's runs E and F and was not measured here. The no-limit control was not repeated atcbefe13.For evidence-bearing changes:
Validation performed
All at head
cbefe13unless noted, Node 24.22.1:npx vitest run src/ghidra src/process tests/boundary/providers/ghidra(afternpm run build) — 91 files passed; 1681 tests passed, 8 skipped.npm run typecheck— passed.npm run lint— 0 errors; warning count unchanged from base (2327).npm run format:check— passed.npm run docs:check— passed.npm run verify:test-discovery— passed (2131 test files).npm run verify:module-boundariesandnpm run verify:architecture-guards— passed.npm run metadata:check— passed.npm run knip(at0899f08) — only the two#…-analysis-workerunresolved imports that also appear on an unmodified checkout.Compatibility, safety, and release
execution_failurefor this case seeresource_constraintonly when the cgroup count rose.Author readiness
Human owner: @akshatgg
Before merge
type(scope): outcome.🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.