[PR #6177] fix(ghidra): name procedure-listing commands when name resolution fails #7187

Open
opened 2026-11-01 21:45:59 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/morluto/rea/pull/6177
Author: @KaronLabs
Created: 10/21/2026
Status: 🔄 Open

Base: main ← Head: fix/ghidra-procedure-name-remediation


📝 Commits (4)

  • 9ef83c2 test(ghidra): require procedure-listing guidance on unknown-name failures
  • 6eb219c fix(ghidra): name procedure-listing commands when name resolution fails
  • f2cb8b5 fix(ghidra): preserve procedure guidance and integrate upstream
  • bb0ccc7 fix(ghidra): reconcile procedure guidance with current upstream

📊 Changes

5 files changed (+184 additions, -4 deletions)

View changed files

📝 src/domain/analysisErrorProjection.test.ts (+25 -0)
📝 src/domain/explicitSensitiveFailure.test.ts (+74 -0)
📝 src/domain/explicitSensitiveFailure.ts (+9 -1)
📝 src/ghidra/GhidraProvider.behavior.test.ts (+64 -0)
📝 src/ghidra/GhidraProviderClient.ts (+12 -3)

📄 Description

Summary

When Ghidra rejects an unknown procedure name, tell CLI and MCP callers how to list the procedures admitted by the current session. Preserve producer-specific input-error guidance when explicit sensitive values are redacted.

Follow-up to CassieFox23's review. No separate issue: the concrete reproduction and review are recorded here.

Problem and expected behavior

Smallest trigger: rea decompile <path> transform_b --provider ghidra --format json against a binary with no procedure named transform_b.

Before: the invalid_request remediation only said to read the input schema. After: it names the CLI search and MCP listing commands below. Error code, category, issue message and structured recovery remain unchanged.

A second failure was reproduced after updating from main: redactExplicitFailure rebuilt AnalysisInputError without its optional remediationAction or userMessage. The replacement must preserve both while redacting explicitly excluded values.

Change and scope

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.

  • Add the listing guidance only for remoteCode === "not_found" plus the existing Unknown Ghidra procedure name or address prefix.
  • Preserve and redact both optional input-error presentation fields; keep omitted fields omitted and existing generic fallback behavior.
  • Cover both halves of the remote-error predicate and retain the existing structured recovery contract.
  • Merge upstream 6e2404b8690f6faa75227d895c937be5b77ef238 into the existing branch without rewriting its history. At capture the previous head f2cb8b5b4 was 812 commits behind / 3 ahead; the original two fix commits and earlier integration commit are retained. Preserve upstream's isGhidraInputFailureCode and issueProjection owners while keeping this PR's existing guidance and redaction behavior.
  • Relocate the two existing procedure/input-guidance test groups byte-for-byte to the ends of their current files. Their competing insertion positions caused sibling conflicts; their assertions and runtime behavior are unchanged. Against the integrated main, this remains a five-file procedure-guidance/error-preservation fix.
  • Out of scope: new bridge error codes, nearest-name suggestions, other providers, or new recovery discriminators. The bridge-message coupling remains: a future wording change must update this mapping.

The listing sentence is shared with the bridge's file-offset resolution guidance (ReaGhidraBridge.java, resolveDecompileProcedure), not claimed to be the identical sentence used by the separate address-without-function path.

Contract and boundary impact

  • Semantic owner and earliest changed stage: Ghidra remote-failure mapping produces the input error; shared domain redaction preserves its typed presentation fields, and error projection serves CLI/MCP. Upstream owns the input-error class/presenter; redundant merged presentation logic was removed.
  • Contribution scope fit and linked maintainer decision: not applicable; ordinary usability/error-preservation fix within existing boundaries.
  • CLI and MCP/tool-catalog contract: no schema, tool, error code or recovery-union changes. remediation.action carries producer-specific guidance. Keep recovery.kind = "inspect_input_contract": analysisErrorRecoverySchema is a strict two-variant union also embedded in the published error schema. Adding a discovery variant requires a separate contract change; clients reading only recovery still receive the general hint.
  • Provider, bridge, target-format, or platform compatibility: Ghidra-only mapping; shared redaction preserves existing optional input-error fields for all producers. No bridge protocol changes.
  • Evidence, artifact, provenance, or reconstruction contract: unchanged; preserve existing diagnostics, issue details, cleanup ownership and partial observations.
  • Target selection, authority, upstream behavior, and cleanup details (if applicable): no new target interaction or resource lifecycle. Existing cleanup regression coverage is retained.
  • Generated metadata (docs/public/product-catalog.json), package, or installation impact (CI generates and validates ignored catalogs and skills/; edit authored instructions in .agents/skills/reverse-engineer-anything/ and never commit build outputs): none; no generated output or dependency changes in the PR diff against the integrated main.

Expected effects (check known effects; use documentation-only on its own).
Unchecked items do not establish absence; leave uncertainties visible.

  • Read existing files or captured data.
  • Launch or attach to a process.
  • Inject instrumentation or run scripts/code.
  • Change process memory, registers, files, or configuration.
  • Contact network services.
  • Recover protected code or work around protections.
  • Documentation or usability only; no target interaction.
  • Not sure yet; investigation or maintainer guidance needed.

Evidence and regression coverage

  • Tests added or updated: GhidraProvider.behavior.test.ts covers the intended match, not_found with a different message, and invalid_request with both different and matching-prefix messages. analysisErrorProjection.test.ts pins the custom remediation with unchanged, schema-valid recovery. explicitSensitiveFailure.test.ts covers excluded text, optional/empty/absent internal presentation fields and generic fallback; existing cleanup tests remain included. Empty-string cases check internal preservation, not public schema validity.
  • Base reproduction or other evidence: on the integrated upstream, the new redaction tests failed with both fields undefined (2 failures, 262 passes in the initial three-file run). After the preservation fix, all selected tests pass; see exact commands below. The earlier real Windows before/after comparison is independent evidence at its recorded commits, not a rerun of this revision.
  • User-visible CLI/MCP output (if applicable): the previous schema-reading remediation becomes Choose an observed procedure with CLI rea search <path> . --kind procedures --mode regex --provider ghidra --json or MCP list_procedures. Both retain invalid_request; structured recovery remains { "kind": "inspect_input_contract", "operation": "procedure_pseudo_code" } (or the requested operation).
  • Remaining proof gaps: no real Ghidra execution on this updated revision; no real-provider Linux/macOS lane. Current Linux tests inject a Ghidra session and establish mapping/projection/redaction semantics, not real-engine operation. The complete repository-wide type-aware lint was not repeated after the earlier resource-heavy interruption; the five changed TypeScript files were checked with type-aware lint. Formal upstream CI must run after maintainer approval.

For boundary fixes, identify the applicable boundary regressions
and lifecycle regressions
covered by the evidence above, and explain relevant gaps.

For evidence-bearing changes:

  • Observed, derived, and inferred claims remain distinguishable.
  • Artifact identity, source provenance, and failed attempts remain preserved.
  • Unsupported, incomplete, unavailable, or uncertain outcomes remain visible.

Applicable boundary regressions: raw identity/redaction, missing/empty/unknown optional fields, and public error delivery. Lifecycle behavior is unchanged; analysisErrorCleanup.test.ts checks the existing ownership/projection path.

Independent real-provider evidence: pablodiazjorge, 2026-10-24, Windows 11 Pro x64 build 26300, Node 24.22.1, Ghidra 12.1.4, Temurin 21, native addon 6.7.0. Compared 6eb219c61 with 4a4bbab3c using stripped x64 rea-lab/challenges/c01-compare (-O2) and nonexistent transform_b. CLI decompile, MCP procedure_pseudo_code, and MCP analyze_function all showed the new remediation. The suggested CLI search exited 0 and returned 88 procedures; MCP list_procedures succeeded in the same session. The two cited Vitest files passed 195 tests on that head. Those results are attributed to the contributor and do not attest this updated tree.

Validation performed

Current source head: bb0ccc74ea77095ca4e5aba0ee0e1b2812fb4ff8; tree 80e2904bc7b8fcc690539191a0d0ddd218ee78e7. Linux x64, Node 24.22.1 / Vitest 5.0.3. Reused the existing locked dependency installation; node scripts/check-dependency-install.mjs passed and the package/lockfile are unchanged from the prior installation. Initial baseline on the previous head passed 280 selected tests; that baseline used the available dependencies and is not a separate old-lock installation.

  • npm run test:focused -- src/ghidra/GhidraProvider.behavior.test.ts src/domain/analysisErrorProjection.test.ts src/domain/analysisErrorCleanup.test.ts src/domain/explicitSensitiveFailure.test.ts — 4 files, 292 tests passed on the updated tree; the same command was rerun on the exact published head and again passed all 292.
  • npm run check:fast — passed (full-source typecheck and ordinary lint; no errors). npm exec --yes --package=npm@11.16.0 -- npm run check:fast also passed with both task results restored from the same-source cache.
  • npm run verify:test-discovery — passed; 2,883 test files discovered exactly once.
  • npm run verify:module-boundaries — passed across 3,446 source files.
  • node_modules/.bin/oxfmt --check over the five changed TypeScript files and git diff --check — passed.
  • timeout 75s node scripts/ci/static-check-report.mjs typed-lint src/domain/explicitSensitiveFailure.ts src/domain/explicitSensitiveFailure.test.ts src/domain/analysisErrorProjection.test.ts src/ghidra/GhidraProviderClient.ts src/ghidra/GhidraProvider.behavior.test.ts — 5 files, 0 errors, 12 advisory warnings.
  • A complete npm run check / repository-wide type-aware lint / full repository test suite is not claimed for this revision. Earlier full checks were interrupted after sustained high CPU and memory use; the current repair uses focused regressions, full-source typecheck/ordinary lint and bounded changed-file typed lint.

Sibling compatibility with #6142, pinned at ec84ea2ff4177979042fd3c3008f9dd6000d3e62:

  • Before this update, git merge-tree --write-tree reproduced four content conflicts.
  • After reconciliation, git merge-tree --write-tree HEAD <6142-head> and the reverse order both exit 0 without manual resolution and return identical tree 1326fb1af46fa0c1d9fb2c099b2553cb9884874a.
  • A disposable worktree of that automatic result ran npm run test:focused -- src/domain/explicitSensitiveFailure.test.ts src/domain/analysisErrorProjection.test.ts src/domain/analysisErrorCleanup.test.ts src/process/ProviderDeadline.test.ts src/ghidra/GhidraProvider.behavior.test.ts src/ghidra/GhidraSessionError.test.ts src/ghidra/GhidraSocketConnection.test.ts src/config.test.ts — 8 files, 413 tests passed. These jointly cover both features, timeout capture/cleanup and the absence of startup-only fields on bridge request timeouts.
  • The sibling timeout implementation is not part of this PR's standalone diff. The previous four-conflict rehearsal is superseded by this actual automatic merge result.

Independent read-only review of the identical tree reported no Critical, Important or Minor findings. It does not establish real-engine or official-CI coverage.

Official CI is separate: on current head bb0ccc74e, CI run 41173198761 and PR-title run 41173198699 are both action_required, requiring maintainer approval. PR readiness run 41173196755 was queued at the post-push read. Local test and metadata/readiness results do not approve or replace the upstream CI workflows. Historical Windows evidence above remains attributed to its original contributor and commit; it was not rerun here.

Compatibility, safety, and release

  • Breaking changes or migration steps: none; preserve the strict recovery contract and existing generic error behavior.
  • Real Hopper/Ghidra, browser, or OS coverage: independent Windows results above are for old head 6eb219c61; this revision has Linux source-level tests only.
  • Package or release metadata impact: no authored metadata changes; existing conventional PR title supplies release notes.
  • Security, privacy, process, or containment review: no new target I/O or execution authority. Explicitly excluded strings are removed from preserved presentation fields; diagnostics and cleanup behavior retain the existing rules.

Author readiness

Human owner: @KaronLabs

  • I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work.
  • I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps.
  • I declare this PR ready for initial maintainer review.

Before merge

  • This PR addresses a concrete problem or an agreed enhancement.
  • Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff.
  • The PR has one focused outcome and the title follows type(scope): outcome.
  • Related issue is linked, or the reason for not linking one is stated above.
  • Tests cover changed observable behavior and meaningful failure paths.
  • Owning docs, contracts, and generated metadata are updated where needed.
  • User-visible CLI/MCP changes include representative output.
  • I checked the final diff for secrets, unrelated cleanup, and unsupported claims.

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/morluto/rea/pull/6177 **Author:** [@KaronLabs](https://github.com/KaronLabs) **Created:** 10/21/2026 **Status:** 🔄 Open **Base:** `main` ← **Head:** `fix/ghidra-procedure-name-remediation` --- ### 📝 Commits (4) - [`9ef83c2`](https://github.com/morluto/rea/commit/9ef83c256befbe15630ae2dde9b4059489aede19) test(ghidra): require procedure-listing guidance on unknown-name failures - [`6eb219c`](https://github.com/morluto/rea/commit/6eb219c61264b3986592ff17c8ea60e8492c881b) fix(ghidra): name procedure-listing commands when name resolution fails - [`f2cb8b5`](https://github.com/morluto/rea/commit/f2cb8b5b44f1378e6804577d6f6492cd2373a812) fix(ghidra): preserve procedure guidance and integrate upstream - [`bb0ccc7`](https://github.com/morluto/rea/commit/bb0ccc74ea77095ca4e5aba0ee0e1b2812fb4ff8) fix(ghidra): reconcile procedure guidance with current upstream ### 📊 Changes **5 files changed** (+184 additions, -4 deletions) <details> <summary>View changed files</summary> 📝 `src/domain/analysisErrorProjection.test.ts` (+25 -0) 📝 `src/domain/explicitSensitiveFailure.test.ts` (+74 -0) 📝 `src/domain/explicitSensitiveFailure.ts` (+9 -1) 📝 `src/ghidra/GhidraProvider.behavior.test.ts` (+64 -0) 📝 `src/ghidra/GhidraProviderClient.ts` (+12 -3) </details> ### 📄 Description <!-- PR title: type(optional-scope): imperative outcome The title becomes the squash-merge commit subject and generated changelog entry. --> ## Summary <!-- What user, agent, or maintainer problem does this solve? Link the issue with "Fixes #123" when applicable. Keep the prior behavior, expected contract, and new behavior understandable without private context. --> When Ghidra rejects an unknown procedure name, tell CLI and MCP callers how to list the procedures admitted by the current session. Preserve producer-specific input-error guidance when explicit sensitive values are redacted. Follow-up to [CassieFox23's review](https://github.com/morluto/rea/pull/6177#pullrequestreview-5634110787). No separate issue: the concrete reproduction and review are recorded here. ## Problem and expected behavior <!-- For fixes, give the smallest trigger and violated invariant. For features, describe the use case and observable outcome. --> Smallest trigger: `rea decompile <path> transform_b --provider ghidra --format json` against a binary with no procedure named `transform_b`. Before: the `invalid_request` remediation only said to read the input schema. After: it names the CLI search and MCP listing commands below. Error code, category, issue message and structured recovery remain unchanged. A second failure was reproduced after updating from main: `redactExplicitFailure` rebuilt `AnalysisInputError` without its optional `remediationAction` or `userMessage`. The replacement must preserve both while redacting explicitly excluded values. ## Change and scope <!-- Explain the chosen approach, why it fits REA's architecture, and what is intentionally not included. If adding complexity for a speculative or vanishingly unlikely race or security edge case, record the concrete failure mode, likelihood, complexity cost, and the user's buy-in obtained before implementation. Do not silently expand scope for theoretical robustness. --> Follow the [contribution scope](https://github.com/morluto/rea/blob/main/CONTRIBUTING.md#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. - Add the listing guidance only for `remoteCode === "not_found"` plus the existing `Unknown Ghidra procedure name or address` prefix. - Preserve and redact both optional input-error presentation fields; keep omitted fields omitted and existing generic fallback behavior. - Cover both halves of the remote-error predicate and retain the existing structured recovery contract. - Merge upstream `6e2404b8690f6faa75227d895c937be5b77ef238` into the existing branch without rewriting its history. At capture the previous head `f2cb8b5b4` was 812 commits behind / 3 ahead; the original two fix commits and earlier integration commit are retained. Preserve upstream's `isGhidraInputFailureCode` and `issueProjection` owners while keeping this PR's existing guidance and redaction behavior. - Relocate the two existing procedure/input-guidance test groups byte-for-byte to the ends of their current files. Their competing insertion positions caused sibling conflicts; their assertions and runtime behavior are unchanged. Against the integrated main, this remains a five-file procedure-guidance/error-preservation fix. - Out of scope: new bridge error codes, nearest-name suggestions, other providers, or new recovery discriminators. The bridge-message coupling remains: a future wording change must update this mapping. The listing sentence is shared with the bridge's file-offset resolution guidance (`ReaGhidraBridge.java`, `resolveDecompileProcedure`), not claimed to be the identical sentence used by the separate address-without-function path. ## Contract and boundary impact <!-- Short answers are welcome. Complete applicable lines; mark unresolved facts as "unknown". Use "none" or "not applicable" only when established. --> - Semantic owner and earliest changed stage: Ghidra remote-failure mapping produces the input error; shared domain redaction preserves its typed presentation fields, and error projection serves CLI/MCP. Upstream owns the input-error class/presenter; redundant merged presentation logic was removed. <!-- Name the producer of parsed facts or resources and its affected consumers. Summarize superseded paths removed and any distinct policy, lifecycle, lazy-loading, or compatibility responsibility retained. --> - Contribution scope fit and linked maintainer decision: not applicable; ordinary usability/error-preservation fix within existing boundaries. - CLI and MCP/tool-catalog contract: no schema, tool, error code or recovery-union changes. `remediation.action` carries producer-specific guidance. Keep `recovery.kind = "inspect_input_contract"`: `analysisErrorRecoverySchema` is a strict two-variant union also embedded in the published error schema. Adding a discovery variant requires a separate contract change; clients reading only `recovery` still receive the general hint. - Provider, bridge, target-format, or platform compatibility: Ghidra-only mapping; shared redaction preserves existing optional input-error fields for all producers. No bridge protocol changes. - Evidence, artifact, provenance, or reconstruction contract: unchanged; preserve existing diagnostics, issue details, cleanup ownership and partial observations. - Target selection, authority, upstream behavior, and cleanup details (if applicable): no new target interaction or resource lifecycle. Existing cleanup regression coverage is retained. - Generated metadata (`docs/public/product-catalog.json`), package, or installation impact (CI generates and validates ignored catalogs and `skills/`; edit authored instructions in `.agents/skills/reverse-engineer-anything/` and never commit build outputs): none; no generated output or dependency changes in the PR diff against the integrated main. Expected effects (check known effects; use documentation-only on its own). Unchecked items do not establish absence; leave uncertainties visible. - [ ] Read existing files or captured data. - [ ] Launch or attach to a process. - [ ] Inject instrumentation or run scripts/code. - [ ] Change process memory, registers, files, or configuration. - [ ] Contact network services. - [ ] Recover protected code or work around protections. - [x] Documentation or usability only; no target interaction. - [ ] Not sure yet; investigation or maintainer guidance needed. ## Evidence and regression coverage <!-- State whether evidence is executed, source-derived, or proposed. For fixes, show the original failure and explain how the regression would fail on the affected base revision when practical. Include the most useful proof inline; link long logs or artifacts, or put them in optional details. Documentation-only changes can use source, link, or rendered-document checks. --> - Tests added or updated: `GhidraProvider.behavior.test.ts` covers the intended match, `not_found` with a different message, and `invalid_request` with both different and matching-prefix messages. `analysisErrorProjection.test.ts` pins the custom remediation with unchanged, schema-valid recovery. `explicitSensitiveFailure.test.ts` covers excluded text, optional/empty/absent internal presentation fields and generic fallback; existing cleanup tests remain included. Empty-string cases check internal preservation, not public schema validity. - Base reproduction or other evidence: on the integrated upstream, the new redaction tests failed with both fields `undefined` (2 failures, 262 passes in the initial three-file run). After the preservation fix, all selected tests pass; see exact commands below. The earlier real Windows before/after comparison is independent evidence at its recorded commits, not a rerun of this revision. - User-visible CLI/MCP output (if applicable): the previous schema-reading remediation becomes `Choose an observed procedure with CLI rea search <path> . --kind procedures --mode regex --provider ghidra --json or MCP list_procedures.` Both retain `invalid_request`; structured recovery remains `{ "kind": "inspect_input_contract", "operation": "procedure_pseudo_code" }` (or the requested operation). - Remaining proof gaps: no real Ghidra execution on this updated revision; no real-provider Linux/macOS lane. Current Linux tests inject a Ghidra session and establish mapping/projection/redaction semantics, not real-engine operation. The complete repository-wide type-aware lint was not repeated after the earlier resource-heavy interruption; the five changed TypeScript files were checked with type-aware lint. Formal upstream CI must run after maintainer approval. For boundary fixes, identify the applicable [boundary regressions](https://github.com/morluto/rea/blob/main/docs/testing.md#boundary-regressions) and [lifecycle regressions](https://github.com/morluto/rea/blob/main/docs/testing.md#lifecycle-regressions) covered by the evidence above, and explain relevant gaps. For evidence-bearing changes: - [x] Observed, derived, and inferred claims remain distinguishable. - [x] Artifact identity, source provenance, and failed attempts remain preserved. - [x] Unsupported, incomplete, unavailable, or uncertain outcomes remain visible. Applicable boundary regressions: raw identity/redaction, missing/empty/unknown optional fields, and public error delivery. Lifecycle behavior is unchanged; `analysisErrorCleanup.test.ts` checks the existing ownership/projection path. Independent real-provider evidence: [pablodiazjorge, 2026-10-24](https://github.com/morluto/rea/pull/6177#issuecomment-6382148658), Windows 11 Pro x64 build 26300, Node 24.22.1, Ghidra 12.1.4, Temurin 21, native addon 6.7.0. Compared `6eb219c61` with `4a4bbab3c` using stripped x64 `rea-lab/challenges/c01-compare` (`-O2`) and nonexistent `transform_b`. CLI `decompile`, MCP `procedure_pseudo_code`, and MCP `analyze_function` all showed the new remediation. The suggested CLI search exited 0 and returned 88 procedures; MCP `list_procedures` succeeded in the same session. The two cited Vitest files passed 195 tests on that head. Those results are attributed to the contributor and do not attest this updated tree. ## Validation performed <!-- List only commands that actually ran, with observed results. Include the relevant real-provider or platform workflow, or explain why it was unavailable. Keep these results current after changes; a command without its result is incomplete. --> Current source head: `bb0ccc74ea77095ca4e5aba0ee0e1b2812fb4ff8`; tree `80e2904bc7b8fcc690539191a0d0ddd218ee78e7`. Linux x64, Node 24.22.1 / Vitest 5.0.3. Reused the existing locked dependency installation; `node scripts/check-dependency-install.mjs` passed and the package/lockfile are unchanged from the prior installation. Initial baseline on the previous head passed 280 selected tests; that baseline used the available dependencies and is not a separate old-lock installation. - `npm run test:focused -- src/ghidra/GhidraProvider.behavior.test.ts src/domain/analysisErrorProjection.test.ts src/domain/analysisErrorCleanup.test.ts src/domain/explicitSensitiveFailure.test.ts` — 4 files, 292 tests passed on the updated tree; the same command was rerun on the exact published head and again passed all 292. - `npm run check:fast` — passed (full-source typecheck and ordinary lint; no errors). `npm exec --yes --package=npm@11.16.0 -- npm run check:fast` also passed with both task results restored from the same-source cache. - `npm run verify:test-discovery` — passed; 2,883 test files discovered exactly once. - `npm run verify:module-boundaries` — passed across 3,446 source files. - `node_modules/.bin/oxfmt --check` over the five changed TypeScript files and `git diff --check` — passed. - `timeout 75s node scripts/ci/static-check-report.mjs typed-lint src/domain/explicitSensitiveFailure.ts src/domain/explicitSensitiveFailure.test.ts src/domain/analysisErrorProjection.test.ts src/ghidra/GhidraProviderClient.ts src/ghidra/GhidraProvider.behavior.test.ts` — 5 files, 0 errors, 12 advisory warnings. - A complete `npm run check` / repository-wide type-aware lint / full repository test suite is not claimed for this revision. Earlier full checks were interrupted after sustained high CPU and memory use; the current repair uses focused regressions, full-source typecheck/ordinary lint and bounded changed-file typed lint. Sibling compatibility with [#6142](https://github.com/morluto/rea/pull/6142), pinned at `ec84ea2ff4177979042fd3c3008f9dd6000d3e62`: - Before this update, `git merge-tree --write-tree` reproduced four content conflicts. - After reconciliation, `git merge-tree --write-tree HEAD <6142-head>` and the reverse order both exit 0 without manual resolution and return identical tree `1326fb1af46fa0c1d9fb2c099b2553cb9884874a`. - A disposable worktree of that automatic result ran `npm run test:focused -- src/domain/explicitSensitiveFailure.test.ts src/domain/analysisErrorProjection.test.ts src/domain/analysisErrorCleanup.test.ts src/process/ProviderDeadline.test.ts src/ghidra/GhidraProvider.behavior.test.ts src/ghidra/GhidraSessionError.test.ts src/ghidra/GhidraSocketConnection.test.ts src/config.test.ts` — 8 files, 413 tests passed. These jointly cover both features, timeout capture/cleanup and the absence of startup-only fields on bridge request timeouts. - The sibling timeout implementation is not part of this PR's standalone diff. The previous four-conflict rehearsal is superseded by this actual automatic merge result. Independent read-only review of the identical tree reported no Critical, Important or Minor findings. It does not establish real-engine or official-CI coverage. Official CI is separate: on current head `bb0ccc74e`, [CI run 41173198761](https://github.com/morluto/rea/actions/runs/41173198761) and [PR-title run 41173198699](https://github.com/morluto/rea/actions/runs/41173198699) are both `action_required`, requiring maintainer approval. [PR readiness run 41173196755](https://github.com/morluto/rea/actions/runs/41173196755) was queued at the post-push read. Local test and metadata/readiness results do not approve or replace the upstream CI workflows. Historical Windows evidence above remains attributed to its original contributor and commit; it was not rerun here. ## Compatibility, safety, and release <!-- Call out breaking changes, migrations, package effects, platform/provider limits, security/privacy/containment implications, and meaningful proof gaps. --> - Breaking changes or migration steps: none; preserve the strict recovery contract and existing generic error behavior. <!-- For ! / BREAKING CHANGE: show a previously valid call/configuration, its new behavior and migration, and why compatibility/deprecation cannot preserve it. Every release increments minor, including breaking changes; keep breaking markers and migration notes so callers can assess compatibility. See docs/releasing.md. --> - Real Hopper/Ghidra, browser, or OS coverage: independent Windows results above are for old head `6eb219c61`; this revision has Linux source-level tests only. - Package or release metadata impact: no authored metadata changes; existing conventional PR title supplies release notes. - Security, privacy, process, or containment review: no new target I/O or execution authority. Explicitly excluded strings are removed from preserved presentation fields; diagnostics and cleanup behavior retain the existing rules. ## Author readiness <!-- The human owner completes these declarations before requesting review. The PR author is the owner by default. A different owner must explicitly accept ownership on this PR. AI agents must leave these declarations to a human to dictate to them or there could be catastrophic consequences for many users of REA. Draft PRs may leave them unchecked. These declarations record initial readiness when opening the PR for review; later pushes do not require a new human sign-off. Keep the description and validation evidence current as the work changes. See CONTRIBUTING.md#pull-request-ownership-and-readiness. --> Human owner: @KaronLabs - [x] I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work. - [x] I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps. - [x] I declare this PR ready for initial maintainer review. ## Before merge <!-- Draft PRs may leave pending items unchecked. Resolve material scope and authority questions before integration. --> - [ ] This PR addresses a concrete problem or an agreed enhancement. - [ ] Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff. - [ ] The PR has one focused outcome and the title follows `type(scope): outcome`. - [ ] Related issue is linked, or the reason for not linking one is stated above. - [ ] Tests cover changed observable behavior and meaningful failure paths. - [ ] Owning docs, contracts, and generated metadata are updated where needed. - [ ] User-visible CLI/MCP changes include representative output. - [ ] I checked the final diff for secrets, unrelated cleanup, and unsupported claims. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
Sign in to join this conversation.
No milestone
No project
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#7187
No description provided.