[GH-ISSUE #8577] test(ghidra): correct regex failure guidance verifier #6657

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

Originally created by @morluto on GitHub (Nov 1, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/8577

Before submitting

  • I searched open and closed issues for related reports.
  • This report contains no private target data or credentials.

Area

Tests or verification.

Observed behavior

The real Ghidra verifier expects the regex-stack failure's details.reason to contain session-retention guidance. The actual reason contains the producer's failure description; the continuing-session guidance is in the projected message. The verifier stops even though it received resource_constraint for the intended operation.

Reproduction

On macOS arm64, Node 24.22.1, Ghidra 12.1.4 and JDK 21, run npm run verify:ghidra on PR #8379 head 0212145b0 in a disposable checkout with the verifier fixes from #8541, #8381 and #8536 applied. Those fixes get past earlier independent verifier failures. The lane reaches verifyGhidraBoundaries and fails at its assertion that details.reason matches /exhausted its stack.*session and annotations remain available/.

Expected behavior

Check the producer's typed error and failure reason separately from the continuing-session guidance, using the owning guidance value. Retain the later real-provider checks that the annotated function and search remain available, and CLI/MCP comparison. Do not infer session survival from prose alone.

Impact and scope

This is test-contract drift in a combined integration checkout, not a demonstrated Ghidra runtime failure. The unmodified full lane stops earlier at #8172, so this particular failure was not observed on a clean run. The source fixture was owned and not executed.

REA version

PR #8379 head 0212145b0, with verifier-only changes from #8541 2bf92eb9, #8381 64e42396, and #8536 78b6c662.

Runtime and platform

macOS arm64, Node 24.22.1, Ghidra 12.1.4, JDK 21.

Target and artifact context

Self-built real-Ghidra verifier fixture; exact digest NOT_ENOUGH_INFO because the failing lane did not emit its final report.

Interface

MCP and verifier script.

Earliest failure stage

Tests or verification.

Relevant output or evidence

resource_constraint, operation search_strings, resource memory; actual reason: Ghidra's Java regex engine exhausted its stack while matching pattern ^(a|aa)*b$. The test expected session guidance in that reason. Source inspection shows the continuing caller receives GHIDRA_ANNOTATIONS_RETAINED in the projected message, while one-shot callers do not inherit the session.

Typed outcome or recovery expected

Preserve the structured error and observable surviving session; make verification match the owning contract.

Analysis or suspected cause

The verifier predates the split between failure reason and caller-lifetime guidance. Later in the same verifier it already checks the annotated dossier, capability and edited-name search after regex failures.

Additional context

Related #8172, #8380 and #8534 cover earlier independent verifier obstacles. No claim of a clean full lane pass yet.

cc @gensokyo-dev @kaoru0822-kitauji @N0zoM1z0

Combined real-provider verification on 2026-11-02

On macOS arm64 with Ghidra 12.1.4 and JDK 21, npm run verify:ghidra passed in a temporary checkout of #8379 0212145b0 with verifier-only changes from #8541 2bf92eb9, #8381 64e42396, #8536 78b6c662 and #8578 dd281594 applied. The report recorded 439 successful and 52 rejected boundary calls, regex recovery, legacy snapshot rejection, mutation snapshot lifecycle, distinct project identity refusals, complete cleanup, verified process lineage and no descendants. This is a combined run, not a clean pass of this issue’s PR or main.

Originally created by @morluto on GitHub (Nov 1, 2026). Original GitHub issue: https://github.com/morluto/rea/issues/8577 ### Before submitting - [x] I searched open and closed issues for related reports. - [x] This report contains no private target data or credentials. ### Area Tests or verification. ### Observed behavior The real Ghidra verifier expects the regex-stack failure's `details.reason` to contain session-retention guidance. The actual reason contains the producer's failure description; the continuing-session guidance is in the projected message. The verifier stops even though it received `resource_constraint` for the intended operation. ### Reproduction On macOS arm64, Node 24.22.1, Ghidra 12.1.4 and JDK 21, run `npm run verify:ghidra` on PR #8379 head `0212145b0` in a disposable checkout with the verifier fixes from #8541, #8381 and #8536 applied. Those fixes get past earlier independent verifier failures. The lane reaches `verifyGhidraBoundaries` and fails at its assertion that `details.reason` matches `/exhausted its stack.*session and annotations remain available/`. ### Expected behavior Check the producer's typed error and failure reason separately from the continuing-session guidance, using the owning guidance value. Retain the later real-provider checks that the annotated function and search remain available, and CLI/MCP comparison. Do not infer session survival from prose alone. ### Impact and scope This is test-contract drift in a combined integration checkout, not a demonstrated Ghidra runtime failure. The unmodified full lane stops earlier at #8172, so this particular failure was not observed on a clean run. The source fixture was owned and not executed. ### REA version PR #8379 head `0212145b0`, with verifier-only changes from #8541 `2bf92eb9`, #8381 `64e42396`, and #8536 `78b6c662`. ### Runtime and platform macOS arm64, Node 24.22.1, Ghidra 12.1.4, JDK 21. ### Target and artifact context Self-built real-Ghidra verifier fixture; exact digest NOT_ENOUGH_INFO because the failing lane did not emit its final report. ### Interface MCP and verifier script. ### Earliest failure stage Tests or verification. ### Relevant output or evidence `resource_constraint`, operation `search_strings`, resource `memory`; actual reason: `Ghidra's Java regex engine exhausted its stack while matching pattern ^(a|aa)*b$.` The test expected session guidance in that reason. Source inspection shows the continuing caller receives `GHIDRA_ANNOTATIONS_RETAINED` in the projected message, while one-shot callers do not inherit the session. ### Typed outcome or recovery expected Preserve the structured error and observable surviving session; make verification match the owning contract. ### Analysis or suspected cause The verifier predates the split between failure reason and caller-lifetime guidance. Later in the same verifier it already checks the annotated dossier, capability and edited-name search after regex failures. ### Additional context Related #8172, #8380 and #8534 cover earlier independent verifier obstacles. No claim of a clean full lane pass yet. cc @gensokyo-dev @kaoru0822-kitauji @N0zoM1z0 ### Combined real-provider verification on 2026-11-02 On macOS arm64 with Ghidra 12.1.4 and JDK 21, `npm run verify:ghidra` passed in a temporary checkout of #8379 `0212145b0` with verifier-only changes from #8541 `2bf92eb9`, #8381 `64e42396`, #8536 `78b6c662` and #8578 `dd281594` applied. The report recorded 439 successful and 52 rejected boundary calls, regex recovery, legacy snapshot rejection, mutation snapshot lifecycle, distinct project identity refusals, complete cleanup, verified process lineage and no descendants. This is a combined run, not a clean pass of this issue’s PR or main.
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#6657
No description provided.