[PR #6142] fix(ghidra): add structured startup-timeout diagnostics #7156

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

📋 Pull Request Information

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

Base: main ← Head: fix/ghidra-startup-timeout-diagnostics


📝 Commits (6)

  • 6e6f1d2 test(ghidra): require structured startup-timeout diagnostics fields
  • 444e79e fix(ghidra): report elapsed, target size, and setting in startup-timeout details
  • 1de7b13 test(config): reject leading-zero and leading-space startup deadline values
  • fe3e06c docs(ghidra): note structured startup-timeout diagnostics fields
  • 4eb44d9 test(ghidra): assert elapsed capture through real startup failure paths
  • ec84ea2 fix(ghidra): integrate upstream and retain startup diagnostics

📊 Changes

15 files changed (+351 additions, -41 deletions)

View changed files

📝 docs/installation.md (+7 -0)
📝 src/domain/analysisErrorCore.ts (+12 -0)
📝 src/domain/analysisErrorProjection.ts (+7 -0)
📝 src/domain/explicitSensitiveFailure.test.ts (+53 -0)
📝 src/domain/explicitSensitiveFailure.ts (+5 -0)
📝 src/ghidra/GhidraClient.ts (+4 -0)
📝 src/ghidra/GhidraClientStartup.ts (+1 -0)
📝 src/ghidra/GhidraProvider.behavior.test.ts (+98 -39)
📝 src/ghidra/GhidraProviderClient.ts (+30 -0)
📝 src/ghidra/GhidraSessionError.test.ts (+22 -0)
📝 src/ghidra/GhidraSessionError.ts (+9 -1)
➕ src/ghidra/GhidraSocketConnection.test.ts (+47 -0)
📝 src/ghidra/GhidraSocketConnection.ts (+2 -0)
📝 src/process/ProviderDeadline.test.ts (+36 -0)
📝 src/process/ProviderDeadline.ts (+18 -1)

📄 Description

Summary

Add optional env_name, elapsed_ms, and Windows-only admitted target_bytes to Ghidra startup-timeout details. Preserve these diagnostics through explicit-value redaction and retain upstream's current existing-project/runtime-setting guidance.

No open issue is claimed: #4590 and #5356 are historical merged PRs, and #5910 is closed. This fixes the concrete machine-readable diagnostic gap demonstrated below and addresses CassieFox23's review.

Problem and expected behavior

Trigger: exhaust REA_GHIDRA_STARTUP_TIMEOUT_MS during the first Ghidra-backed query. Previously the setting was named only in prose and the details contained timeout_ms. Consumers should receive optional structured facts without parsing that prose.

Source-derived example of the projected fields (illustrative values, not a new real-engine capture):

{"operation":"list_documents","timeout_ms":250,"elapsed_ms":251,"env_name":"REA_GHIDRA_STARTUP_TIMEOUT_MS","target_bytes":4096}

target_bytes is emitted only on Windows when a retained admission supplies a nonnegative safe integer. It is omitted on Linux/macOS and when admission size is absent. elapsed_ms measures the shared startup attempt: snapshot copying, import/analysis or existing-project copying/opening, bridge connection, and health readiness; it is not an analysis-only timer. Capturing/cleanup can finish after the budget expires.

Change and scope

  • Keep the single monotonic ProviderStartupDeadline; capture elapsed time at all four startup-timeout construction sites and preserve it through session refresh/cleanup copies.
  • Add optional timeout fields to the domain error and public projection. Keep non-startup bridge request timeouts free of startup-only fields.
  • Fix the verified redaction gap: reconstructing AnalysisTimeoutError discarded its new fields. Preserve numeric facts, zero values and omission, and sanitize envName through the same explicit-value policy as other presentation strings.
  • Merge upstream d48e472fa6a664cacbb400560e673533005795ce without rewriting the original five commits. At capture the old head was 2,114 commits behind / 5 ahead. Resolve three conflicts while preserving current startup-mode, runtime-settings, resource and cleanup behavior.
  • Remove the unrelated "010"/" 100" config-test additions from this PR's diff; configuration semantics stay unchanged. Retain the already-resolved elapsed-capture tests. Move the timeout test helper outside its describe callback to satisfy upstream's function-length gate.
  • Out of scope: size-based deadline scaling, a new recovery variant, extra provider capabilities, and non-Windows admission support.

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

  • Semantic owner and earliest changed stage: Ghidra startup deadline → session error → provider mapping → shared domain redaction/projection. Reuse upstream's single deadline and lifecycle owners; no alternate timer or cleanup owner.
  • Contribution scope fit and linked maintainer decision: not applicable; ordinary additive error-diagnostic fix within existing boundaries.
  • CLI and MCP/tool-catalog contract: additive optional provider_timeout.details fields; no tool, schema discriminator, error-code, recovery-union or input contract changes.
  • Provider, bridge, target-format, or platform compatibility: Ghidra-only producers; Windows-only optional target size. Shared timeout redaction preserves these fields for all producers. No bridge protocol change.
  • Evidence, artifact, provenance, or reconstruction contract: preserve diagnostics, partial observations, cleanup authority and explicit unknown/absent values.
  • Target selection, authority, upstream behavior, and cleanup details (if applicable): unchanged; existing shared startup budget, target admission and cleanup ownership are 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): authored installation guidance only; no dependency, package or generated-file diff.

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: existing deadline floor/rounding, real socket elapsed capture, refresh/cleanup copies, startup projection and bridge-timeout negative tests remain. New explicitSensitiveFailure.test.ts cases cover populated/zero/absent diagnostic fields and an explicitly excluded setting name.
  • Base reproduction or other evidence: on the integrated tree before the redaction fix, the new cases produced 3 failures / 23 passes: the reconstructed timeout lost the fields. After the fix they pass. The selected eight-file final suite passes 405 tests on Linux with the locked dependencies.
  • User-visible CLI/MCP output (if applicable): the source-derived JSON above shows the additive details; current unit/provider-boundary tests assert the projected public response. No real-engine output was captured on this updated revision.
  • Remaining proof gaps: no Ghidra installation is configured on this Linux host, so no real-Ghidra Linux/macOS/Windows lane ran here. No new real CLI/MCP engine execution is claimed. The complete CI suite remains an upstream responsibility.

Applicable boundary coverage: optional/zero/absent values, redaction and public projection. Existing lifecycle coverage verifies real socket expiry and diagnostics/cleanup copy preservation. Resource authority is unchanged.

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.

Validation performed

Current revision: ec84ea2ff4177979042fd3c3008f9dd6000d3e62 (tree dc94f48a7de3e05ca12965619e125a2db72afa97), Node v24.22.1 on Linux; installed from the current lock with npm 11.16.0 and --ignore-scripts.

  • 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 — 405 passed across 8 files.
  • npm run check:fast — pass (typecheck and ordinary lint; no errors).
  • npm run check — not completed. The six initial cached/static/build tasks passed, as did architecture guards; production reachability reported 30 advisory candidates. Full-repository type-aware lint was stopped after over three minutes of sustained CPU and observed aggregate process-family RSS above 6 GiB. This is not a passing full check. A bounded separate node scripts/ci/static-check-report.mjs typed-lint run over all 14 changed TypeScript files completed: 0 errors, 25 advisory warnings.
  • npm run verify:test-discovery — 2,884 test files discovered exactly once.
  • npm run verify:module-boundaries — 3,447 source files checked.
  • npm run docs:check — pass, including 9 README consistency tests. An initial concurrent invocation was blocked by the artifacts lock; the subsequent serial invocation completed.
  • Sibling compatibility with current #6177 head bb0ccc74ea77095ca4e5aba0ee0e1b2812fb4ff8: the four content conflicts previously reproduced with old head f2cb8b5b4 are now resolved in #6177. That branch integrates main 6e2404b86, retains upstream's issueProjection / isGhidraInputFailureCode, preserves the procedure guidance, and relocates its unchanged test groups away from sibling insertion positions. git merge-tree --write-tree in both orders now exits 0 without manual resolution and returns identical tree 1326fb1af46fa0c1d9fb2c099b2553cb9884874a. The automatically combined tree passes the same eight-file suite: 413 tests. This supersedes the earlier manual-resolution rehearsal. Each PR retains its own standalone feature scope; the sibling implementation is not copied into #6142.

Official CI is separate: the previous head 4eb44d923 has upstream CI run 39721584408 and title run 39721584451, both action_required; these are not successful tests. On current head ec84ea2ff, official CI run 41115801456 and PR-title run 41115882140 are action_required, requiring maintainer approval; they have not established a passing test/title result. Initial readiness run 41115796657 passed, the description-update readiness run 41115882980 is in progress, and Greptile review is in progress. These metadata/review results are separate from actual CI tests.

Historical, author-reported Windows evidence, not rerun here: the original PR recorded Ghidra 12.1.4 / JDK 25.0.1 Windows x64 verification (ok:true, 26 operations), and a 1,536-byte fixture timeout with elapsed_ms:1014. The resolved elapsed-capture tests remain in ancestor 4eb44d923ad50d3e039e650a73ea7691dca550ce.

Independent code review of the identical tested tree reported no Critical, Important or Minor findings. It does not attest official CI or real-provider execution.

Compatibility, safety, and release

  • Breaking changes or migration steps: none; optional fields are omitted when unavailable and existing recovery contracts remain unchanged.
  • Real Hopper/Ghidra, browser, or OS coverage: current executed evidence is Linux source/provider-boundary tests with an injected session plus a real socket failure path. Historical Windows evidence is described separately below.
  • Package or release metadata impact: none beyond the eventual PR-title changelog entry.
  • Security, privacy, process, or containment review: no new target interaction, network operation, file read or mutation authority; target size comes from retained admission. Explicitly excluded setting text is redacted.

Author readiness

Human owner: @KaronLabs

Existing initial human readiness declarations are preserved; this update does not attest a new human review.

  • 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/6142 **Author:** [@KaronLabs](https://github.com/KaronLabs) **Created:** 10/21/2026 **Status:** 🔄 Open **Base:** `main` ← **Head:** `fix/ghidra-startup-timeout-diagnostics` --- ### 📝 Commits (6) - [`6e6f1d2`](https://github.com/morluto/rea/commit/6e6f1d21bdf368da37ca26939e9e6f34f69c82d7) test(ghidra): require structured startup-timeout diagnostics fields - [`444e79e`](https://github.com/morluto/rea/commit/444e79ecf0f5153745657eba0d9bf97d4d7fdf96) fix(ghidra): report elapsed, target size, and setting in startup-timeout details - [`1de7b13`](https://github.com/morluto/rea/commit/1de7b13fbd07fb0f2497e8b0d4af7ac30b2318c3) test(config): reject leading-zero and leading-space startup deadline values - [`fe3e06c`](https://github.com/morluto/rea/commit/fe3e06cb7e56f45d7603ca1c4c81cf8ec2cef0e8) docs(ghidra): note structured startup-timeout diagnostics fields - [`4eb44d9`](https://github.com/morluto/rea/commit/4eb44d923ad50d3e039e650a73ea7691dca550ce) test(ghidra): assert elapsed capture through real startup failure paths - [`ec84ea2`](https://github.com/morluto/rea/commit/ec84ea2ff4177979042fd3c3008f9dd6000d3e62) fix(ghidra): integrate upstream and retain startup diagnostics ### 📊 Changes **15 files changed** (+351 additions, -41 deletions) <details> <summary>View changed files</summary> 📝 `docs/installation.md` (+7 -0) 📝 `src/domain/analysisErrorCore.ts` (+12 -0) 📝 `src/domain/analysisErrorProjection.ts` (+7 -0) 📝 `src/domain/explicitSensitiveFailure.test.ts` (+53 -0) 📝 `src/domain/explicitSensitiveFailure.ts` (+5 -0) 📝 `src/ghidra/GhidraClient.ts` (+4 -0) 📝 `src/ghidra/GhidraClientStartup.ts` (+1 -0) 📝 `src/ghidra/GhidraProvider.behavior.test.ts` (+98 -39) 📝 `src/ghidra/GhidraProviderClient.ts` (+30 -0) 📝 `src/ghidra/GhidraSessionError.test.ts` (+22 -0) 📝 `src/ghidra/GhidraSessionError.ts` (+9 -1) ➕ `src/ghidra/GhidraSocketConnection.test.ts` (+47 -0) 📝 `src/ghidra/GhidraSocketConnection.ts` (+2 -0) 📝 `src/process/ProviderDeadline.test.ts` (+36 -0) 📝 `src/process/ProviderDeadline.ts` (+18 -1) </details> ### 📄 Description <!-- PR title: type(optional-scope): imperative outcome The title becomes the squash-merge commit subject and generated changelog entry. --> ## Summary Add optional `env_name`, `elapsed_ms`, and Windows-only admitted `target_bytes` to Ghidra startup-timeout details. Preserve these diagnostics through explicit-value redaction and retain upstream's current existing-project/runtime-setting guidance. No open issue is claimed: #4590 and #5356 are historical merged PRs, and #5910 is closed. This fixes the concrete machine-readable diagnostic gap demonstrated below and addresses [CassieFox23's review](https://github.com/morluto/rea/pull/6142#pullrequestreview-5632849341). <!-- 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. --> ## Problem and expected behavior Trigger: exhaust `REA_GHIDRA_STARTUP_TIMEOUT_MS` during the first Ghidra-backed query. Previously the setting was named only in prose and the details contained `timeout_ms`. Consumers should receive optional structured facts without parsing that prose. Source-derived example of the projected fields (illustrative values, not a new real-engine capture): ```json {"operation":"list_documents","timeout_ms":250,"elapsed_ms":251,"env_name":"REA_GHIDRA_STARTUP_TIMEOUT_MS","target_bytes":4096} ``` `target_bytes` is emitted only on Windows when a retained admission supplies a nonnegative safe integer. It is omitted on Linux/macOS and when admission size is absent. `elapsed_ms` measures the shared startup attempt: snapshot copying, import/analysis or existing-project copying/opening, bridge connection, and health readiness; it is not an analysis-only timer. Capturing/cleanup can finish after the budget expires. <!-- For fixes, give the smallest trigger and violated invariant. For features, describe the use case and observable outcome. --> ## Change and scope - Keep the single monotonic `ProviderStartupDeadline`; capture elapsed time at all four startup-timeout construction sites and preserve it through session refresh/cleanup copies. - Add optional timeout fields to the domain error and public projection. Keep non-startup bridge request timeouts free of startup-only fields. - Fix the verified redaction gap: reconstructing `AnalysisTimeoutError` discarded its new fields. Preserve numeric facts, zero values and omission, and sanitize `envName` through the same explicit-value policy as other presentation strings. - Merge upstream `d48e472fa6a664cacbb400560e673533005795ce` without rewriting the original five commits. At capture the old head was 2,114 commits behind / 5 ahead. Resolve three conflicts while preserving current startup-mode, runtime-settings, resource and cleanup behavior. - Remove the unrelated `"010"`/`" 100"` config-test additions from this PR's diff; configuration semantics stay unchanged. Retain the already-resolved elapsed-capture tests. Move the timeout test helper outside its describe callback to satisfy upstream's function-length gate. - Out of scope: size-based deadline scaling, a new recovery variant, extra provider capabilities, and non-Windows admission support. <!-- 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. ## 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 startup deadline → session error → provider mapping → shared domain redaction/projection. Reuse upstream's single deadline and lifecycle owners; no alternate timer or cleanup owner. <!-- 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 additive error-diagnostic fix within existing boundaries. - CLI and MCP/tool-catalog contract: additive optional `provider_timeout.details` fields; no tool, schema discriminator, error-code, recovery-union or input contract changes. - Provider, bridge, target-format, or platform compatibility: Ghidra-only producers; Windows-only optional target size. Shared timeout redaction preserves these fields for all producers. No bridge protocol change. - Evidence, artifact, provenance, or reconstruction contract: preserve diagnostics, partial observations, cleanup authority and explicit unknown/absent values. - Target selection, authority, upstream behavior, and cleanup details (if applicable): unchanged; existing shared startup budget, target admission and cleanup ownership are 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): authored installation guidance only; no dependency, package or generated-file diff. 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: existing deadline floor/rounding, real socket elapsed capture, refresh/cleanup copies, startup projection and bridge-timeout negative tests remain. New `explicitSensitiveFailure.test.ts` cases cover populated/zero/absent diagnostic fields and an explicitly excluded setting name. - Base reproduction or other evidence: on the integrated tree before the redaction fix, the new cases produced 3 failures / 23 passes: the reconstructed timeout lost the fields. After the fix they pass. The selected eight-file final suite passes 405 tests on Linux with the locked dependencies. - User-visible CLI/MCP output (if applicable): the source-derived JSON above shows the additive details; current unit/provider-boundary tests assert the projected public response. No real-engine output was captured on this updated revision. - Remaining proof gaps: no Ghidra installation is configured on this Linux host, so no real-Ghidra Linux/macOS/Windows lane ran here. No new real CLI/MCP engine execution is claimed. The complete CI suite remains an upstream responsibility. Applicable boundary coverage: optional/zero/absent values, redaction and public projection. Existing lifecycle coverage verifies real socket expiry and diagnostics/cleanup copy preservation. Resource authority is unchanged. 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. ## Validation performed Current revision: `ec84ea2ff4177979042fd3c3008f9dd6000d3e62` (tree `dc94f48a7de3e05ca12965619e125a2db72afa97`), Node v24.22.1 on Linux; installed from the current lock with npm 11.16.0 and `--ignore-scripts`. - `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` — 405 passed across 8 files. - `npm run check:fast` — pass (typecheck and ordinary lint; no errors). - `npm run check` — not completed. The six initial cached/static/build tasks passed, as did architecture guards; production reachability reported 30 advisory candidates. Full-repository type-aware lint was stopped after over three minutes of sustained CPU and observed aggregate process-family RSS above 6 GiB. This is not a passing full `check`. A bounded separate `node scripts/ci/static-check-report.mjs typed-lint` run over all 14 changed TypeScript files completed: 0 errors, 25 advisory warnings. - `npm run verify:test-discovery` — 2,884 test files discovered exactly once. - `npm run verify:module-boundaries` — 3,447 source files checked. - `npm run docs:check` — pass, including 9 README consistency tests. An initial concurrent invocation was blocked by the artifacts lock; the subsequent serial invocation completed. - Sibling compatibility with current #6177 head `bb0ccc74ea77095ca4e5aba0ee0e1b2812fb4ff8`: the four content conflicts previously reproduced with old head `f2cb8b5b4` are now resolved in #6177. That branch integrates main `6e2404b86`, retains upstream's `issueProjection` / `isGhidraInputFailureCode`, preserves the procedure guidance, and relocates its unchanged test groups away from sibling insertion positions. `git merge-tree --write-tree` in both orders now exits 0 without manual resolution and returns identical tree `1326fb1af46fa0c1d9fb2c099b2553cb9884874a`. The automatically combined tree passes the same eight-file suite: 413 tests. This supersedes the earlier manual-resolution rehearsal. Each PR retains its own standalone feature scope; the sibling implementation is not copied into #6142. Official CI is separate: the previous head `4eb44d923` has upstream CI run [39721584408](https://github.com/morluto/rea/actions/runs/39721584408) and title run [39721584451](https://github.com/morluto/rea/actions/runs/39721584451), both `action_required`; these are not successful tests. On current head `ec84ea2ff`, official [CI run 41115801456](https://github.com/morluto/rea/actions/runs/41115801456) and [PR-title run 41115882140](https://github.com/morluto/rea/actions/runs/41115882140) are `action_required`, requiring maintainer approval; they have not established a passing test/title result. [Initial readiness run 41115796657](https://github.com/morluto/rea/actions/runs/41115796657) passed, the description-update readiness run 41115882980 is in progress, and Greptile review is in progress. These metadata/review results are separate from actual CI tests. Historical, author-reported Windows evidence, not rerun here: the original PR recorded Ghidra 12.1.4 / JDK 25.0.1 Windows x64 verification (`ok:true`, 26 operations), and a 1,536-byte fixture timeout with `elapsed_ms:1014`. The resolved elapsed-capture tests remain in ancestor `4eb44d923ad50d3e039e650a73ea7691dca550ce`. <!-- 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. --> Independent code review of the identical tested tree reported no Critical, Important or Minor findings. It does not attest official CI or real-provider execution. ## 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; optional fields are omitted when unavailable and existing recovery contracts remain unchanged. <!-- 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: current executed evidence is Linux source/provider-boundary tests with an injected session plus a real socket failure path. Historical Windows evidence is described separately below. - Package or release metadata impact: none beyond the eventual PR-title changelog entry. - Security, privacy, process, or containment review: no new target interaction, network operation, file read or mutation authority; target size comes from retained admission. Explicitly excluded setting text is redacted. ## 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 Existing initial human readiness declarations are preserved; this update does not attest a new human review. - [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. --> - [x] This PR addresses a concrete problem or an agreed enhancement. - [x] Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff. - [x] The PR has one focused outcome and the title follows `type(scope): outcome`. - [x] Related issue is linked, or the reason for not linking one is stated above. - [x] Tests cover changed observable behavior and meaningful failure paths. - [x] Owning docs, contracts, and generated metadata are updated where needed. - [x] User-visible CLI/MCP changes include representative output. - [x] 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#7156
No description provided.