[PR #6924] [MERGED] fix(ghidra): admit newer 12.x releases as compatible builds #7452

Closed
opened 2026-11-01 21:47:57 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/morluto/rea/pull/6924
Author: @sx4im
Created: 10/23/2026
Status: ✅ Merged
Merged: 10/26/2026
Merged by: @gensokyo-dev

Base: main ← Head: fix/6921-ghidra-12.2-version-gate


📝 Commits (10+)

  • 5938581 fix(async): own completion across test and provider boundaries
  • 627c085 chore(lint): enforce reviewed promise and fallback contracts
  • bb17e90 chore: integrate concurrent lint and async fixes
  • ab720b4 test(evaluation): preserve partial coverage in the Notes oracle
  • f3ed165 feat(mcp): support runtime analysis limit recovery (#7049)
  • e97f47b fix(lifecycle): retain IDA cleanup owners and drain JEB fixture work
  • d23dc5d fix(browser): admit JSON shape expansion against shared retention
  • cb26e8c fix(contracts): share ADB limits and preserve Rosetta register facts
  • c8269ca fix(ci): own mock isolation and normalize Git patch directories
  • f62a2ba refactor(javascript): own coverage facts and reuse block prefixes

📊 Changes

2868 files changed (+334160 additions, -83894 deletions)

View changed files

📝 .agents/skills/rea-analysis-optimization/SKILL.md (+5 -0)
📝 .agents/skills/rea-changelog-update/SKILL.md (+4 -3)
📝 .agents/skills/reverse-engineer-anything/SKILL.md (+66 -13)
📝 .agents/skills/reverse-engineer-anything/references/android-applications.md (+5 -2)
📝 .agents/skills/reverse-engineer-anything/references/connection-and-recovery.md (+13 -2)
➕ .agents/skills/reverse-engineer-anything/references/environments.md (+216 -0)
📝 .agents/skills/reverse-engineer-anything/references/evidence-workflows.md (+10 -1)
📝 .agents/skills/reverse-engineer-anything/references/javascript-applications.md (+20 -6)
📝 .agents/skills/reverse-engineer-anything/references/native-and-artifacts.md (+140 -22)
📝 .agents/skills/reverse-engineer-anything/references/runtime-observation.md (+2 -0)
📝 .github/pull_request_template.md (+7 -0)
📝 .github/workflows/ci.yml (+3 -1)
➕ .github/workflows/real-android-metadata.yml (+55 -0)
📝 .github/workflows/real-binary-layout.yml (+6 -0)
📝 .github/workflows/real-browser.yml (+2 -1)
📝 .github/workflows/real-web-runtime.yml (+2 -1)
📝 .github/workflows/real-web-source-map.yml (+5 -1)
📝 .github/workflows/release.yml (+71 -17)
📝 .github/workflows/sqlite-runtime.yml (+3 -3)
📝 .oxlintrc.json (+95 -3)

...and 80 more files

📄 Description

Summary

Fixes #6921. A valid Ghidra 12.2 installation was rejected before analysis because admission accepted only 12.1.x. The shared release policy now admits the verified major from its verified minor onward and reports the observed build through the existing unverified-build limitation. The verified baseline stays 12.1.4; other majors, older minors and unresolved versions retain their existing refusal semantics. NativeAOT and complete conformance verification pins stay unchanged.

Java admission still uses the installation’s declared bounds. Tests now use the actual 12.2 metadata (application.java.min=25): JDK 21 fails, JDK 25 passes. Installation guidance names that requirement. No tool schema or analysis implementation changes are needed.

Base d4c511ae6 is integrated; tested head 6327d6d80beb52a8068cdf5db340c9249f756e01.

Validation

  • Five policy regressions fail on current main before the fix. Actual main rea doctor --json rejects official 12.2 with unsupported_version while Java 25 and the native decompiler pass. Fixed doctor reports available, observed version 12.2 and verified baseline 12.1.4. A real JDK 21 control still fails the Java 25 requirement.
  • 367 Ghidra/boundary/docs tests pass, one pre-existing skip. An additional 137 JavaScript post-merge smoke tests pass. Typecheck/lint, formatting, docs and diff checks pass.
  • The shipped bridge verifier compiles all 10 Java sources against 201 official Ghidra 12.2 jars with javac 25.0.5.
  • Actual packaged CLI and stdio MCP analyze /usr/bin/true with Ghidra 12.2 / Temurin 25.0.5+8 on Linux x64. CLI observes 163 procedures, 143 strings and 33 segments. MCP retains the 163-row inventory, selects an internal non-thunk function, decompiles and disassembles _DT_INIT, repeats the inventory query, exports complete Evidence, closes and checks session state. The observed provider version and unverified-build limitation survive both adapters.
  • Target SHA-256 c79bf44242829108e323378531f4ac839513ca1fba45efd6583643526e1e9fd2 remains unchanged. Recorded owned Java identities exit after close; no temporary .gpr/.rep projects remain. The target executable is not run.
  • The two MCP workflows retain the identical complete inventory parent ev_21b924273886316bb842ed0e922f9e22f0e194e320164d30f9f070885d87bbe2. Pages preserve source indices, addresses and procedure metadata. The final sample is explicitly 64/163 rows with a next offset; discovery coverage remains unknown.

Resource evidence and coverage limits

Isolated verification distributions, two-CPU affinity, Java heap 768 MiB. Fresh private homes and analysis sessions, warm runtime builds; OS caches are uncontrolled. Completed-task single samples:

Workflow Tool calls / reply bytes Wall / CPU seconds Sampled family peak MiB
CLI overview — / 8612 40.724 / 35.752 1061.14
MCP with six small pages 14 / 127237 28.280 / 42.339 858.73
MCP with one existing 64-row batch 9 / 92288 24.006 / 39.703 855.83

The batch uses existing projection contracts and exports the same full parent; no new cache or limit is introduced. Cold first inventory reads take 23.665s / 19.353s; repeated same-session reads take 40ms / 49ms. This is not an established end-to-end speed improvement. Reply bytes exclude initialization/requests; total runtime includes startup, compile/import, queries, persistence and cleanup. Agent/schema tokens were not measured; RSS sampling may double-count shared pages or miss short peaks.

Own real-provider verification covers Linux x64 ELF read operations only. Native macOS/Windows, other architectures/formats, extensions, annotations and mutations were not run here. The issue’s macOS report is separate reporter evidence. The release remains compatible/unverified rather than a new complete verified baseline. Final-head CI 40387188709 passes static/docs/build, packaged Ghidra bridge compilation, Apple/Windows/native package lanes and the completed real-provider workflows. Source CI has one setup-prewarm marker failure and shard 8 has two SAZ partial-observation assertions; all three reproduce identically on exact CI main base dd7a2da5b in isolated controls, without this PR. Four other shards were canceled by fail-fast. The remaining binary-layout lane was stopped after over 15 minutes in its unchanged apt cross-toolchain installation step, before project verification. Those five lanes remain unverified; they are not reported as passes. Codex has no major findings, Greptile adds zero comments and the old range thread is resolved. Merge uses the user-authorized bypass for these unrelated failures/infrastructure blockers.

Author readiness

Human owner: @sx4im

  • 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/6924 **Author:** [@sx4im](https://github.com/sx4im) **Created:** 10/23/2026 **Status:** ✅ Merged **Merged:** 10/26/2026 **Merged by:** [@gensokyo-dev](https://github.com/gensokyo-dev) **Base:** `main` ← **Head:** `fix/6921-ghidra-12.2-version-gate` --- ### 📝 Commits (10+) - [`5938581`](https://github.com/morluto/rea/commit/5938581b3733e955d8efc21d38b36be5ba08e15d) fix(async): own completion across test and provider boundaries - [`627c085`](https://github.com/morluto/rea/commit/627c085cee3da8893252c49262726478c2a92a77) chore(lint): enforce reviewed promise and fallback contracts - [`bb17e90`](https://github.com/morluto/rea/commit/bb17e90f27dc8908c1c91c05055679678768c266) chore: integrate concurrent lint and async fixes - [`ab720b4`](https://github.com/morluto/rea/commit/ab720b42163e33cba519518dedc67c7e11346b71) test(evaluation): preserve partial coverage in the Notes oracle - [`f3ed165`](https://github.com/morluto/rea/commit/f3ed1657f82188fb90914f745a08849537342a23) feat(mcp): support runtime analysis limit recovery (#7049) - [`e97f47b`](https://github.com/morluto/rea/commit/e97f47b0b734e14c17b4d706eaa2f143a99acb6f) fix(lifecycle): retain IDA cleanup owners and drain JEB fixture work - [`d23dc5d`](https://github.com/morluto/rea/commit/d23dc5d188748004d1b83d94dbe07e9fdd7d33e2) fix(browser): admit JSON shape expansion against shared retention - [`cb26e8c`](https://github.com/morluto/rea/commit/cb26e8ca638ab5b64f4c475d727274d91ba1595f) fix(contracts): share ADB limits and preserve Rosetta register facts - [`c8269ca`](https://github.com/morluto/rea/commit/c8269ca49722859de040c1263b43e95d631dc363) fix(ci): own mock isolation and normalize Git patch directories - [`f62a2ba`](https://github.com/morluto/rea/commit/f62a2baad83270f4d9de48911bd77a90ce67d26f) refactor(javascript): own coverage facts and reuse block prefixes ### 📊 Changes **2868 files changed** (+334160 additions, -83894 deletions) <details> <summary>View changed files</summary> 📝 `.agents/skills/rea-analysis-optimization/SKILL.md` (+5 -0) 📝 `.agents/skills/rea-changelog-update/SKILL.md` (+4 -3) 📝 `.agents/skills/reverse-engineer-anything/SKILL.md` (+66 -13) 📝 `.agents/skills/reverse-engineer-anything/references/android-applications.md` (+5 -2) 📝 `.agents/skills/reverse-engineer-anything/references/connection-and-recovery.md` (+13 -2) ➕ `.agents/skills/reverse-engineer-anything/references/environments.md` (+216 -0) 📝 `.agents/skills/reverse-engineer-anything/references/evidence-workflows.md` (+10 -1) 📝 `.agents/skills/reverse-engineer-anything/references/javascript-applications.md` (+20 -6) 📝 `.agents/skills/reverse-engineer-anything/references/native-and-artifacts.md` (+140 -22) 📝 `.agents/skills/reverse-engineer-anything/references/runtime-observation.md` (+2 -0) 📝 `.github/pull_request_template.md` (+7 -0) 📝 `.github/workflows/ci.yml` (+3 -1) ➕ `.github/workflows/real-android-metadata.yml` (+55 -0) 📝 `.github/workflows/real-binary-layout.yml` (+6 -0) 📝 `.github/workflows/real-browser.yml` (+2 -1) 📝 `.github/workflows/real-web-runtime.yml` (+2 -1) 📝 `.github/workflows/real-web-source-map.yml` (+5 -1) 📝 `.github/workflows/release.yml` (+71 -17) 📝 `.github/workflows/sqlite-runtime.yml` (+3 -3) 📝 `.oxlintrc.json` (+95 -3) _...and 80 more files_ </details> ### 📄 Description ## Summary Fixes #6921. A valid Ghidra 12.2 installation was rejected before analysis because admission accepted only 12.1.x. The shared release policy now admits the verified major from its verified minor onward and reports the observed build through the existing unverified-build limitation. The verified baseline stays 12.1.4; other majors, older minors and unresolved versions retain their existing refusal semantics. NativeAOT and complete conformance verification pins stay unchanged. Java admission still uses the installation’s declared bounds. Tests now use the actual 12.2 metadata (`application.java.min=25`): JDK 21 fails, JDK 25 passes. Installation guidance names that requirement. No tool schema or analysis implementation changes are needed. Base `d4c511ae6` is integrated; tested head `6327d6d80beb52a8068cdf5db340c9249f756e01`. ## Validation - Five policy regressions fail on current main before the fix. Actual main `rea doctor --json` rejects official 12.2 with `unsupported_version` while Java 25 and the native decompiler pass. Fixed doctor reports available, observed version 12.2 and verified baseline 12.1.4. A real JDK 21 control still fails the Java 25 requirement. - **367 Ghidra/boundary/docs tests pass**, one pre-existing skip. An additional 137 JavaScript post-merge smoke tests pass. Typecheck/lint, formatting, docs and diff checks pass. - The shipped bridge verifier compiles all 10 Java sources against 201 official Ghidra 12.2 jars with `javac 25.0.5`. - Actual packaged CLI and stdio MCP analyze `/usr/bin/true` with Ghidra 12.2 / Temurin 25.0.5+8 on Linux x64. CLI observes 163 procedures, 143 strings and 33 segments. MCP retains the 163-row inventory, selects an internal non-thunk function, decompiles and disassembles `_DT_INIT`, repeats the inventory query, exports complete Evidence, closes and checks session state. The observed provider version and unverified-build limitation survive both adapters. - Target SHA-256 `c79bf44242829108e323378531f4ac839513ca1fba45efd6583643526e1e9fd2` remains unchanged. Recorded owned Java identities exit after close; no temporary `.gpr`/`.rep` projects remain. The target executable is not run. - The two MCP workflows retain the identical complete inventory parent `ev_21b924273886316bb842ed0e922f9e22f0e194e320164d30f9f070885d87bbe2`. Pages preserve source indices, addresses and procedure metadata. The final sample is explicitly 64/163 rows with a next offset; discovery coverage remains unknown. ## Resource evidence and coverage limits Isolated verification distributions, two-CPU affinity, Java heap 768 MiB. Fresh private homes and analysis sessions, warm runtime builds; OS caches are uncontrolled. Completed-task single samples: | Workflow | Tool calls / reply bytes | Wall / CPU seconds | Sampled family peak MiB | |---|---:|---:|---:| | CLI overview | — / 8612 | 40.724 / 35.752 | 1061.14 | | MCP with six small pages | 14 / 127237 | 28.280 / 42.339 | 858.73 | | MCP with one existing 64-row batch | 9 / 92288 | 24.006 / 39.703 | 855.83 | The batch uses existing projection contracts and exports the same full parent; no new cache or limit is introduced. Cold first inventory reads take 23.665s / 19.353s; repeated same-session reads take 40ms / 49ms. This is not an established end-to-end speed improvement. Reply bytes exclude initialization/requests; total runtime includes startup, compile/import, queries, persistence and cleanup. Agent/schema tokens were not measured; RSS sampling may double-count shared pages or miss short peaks. Own real-provider verification covers Linux x64 ELF read operations only. Native macOS/Windows, other architectures/formats, extensions, annotations and mutations were not run here. The issue’s macOS report is separate reporter evidence. The release remains compatible/unverified rather than a new complete verified baseline. Final-head CI `40387188709` passes static/docs/build, packaged Ghidra bridge compilation, Apple/Windows/native package lanes and the completed real-provider workflows. Source CI has one setup-prewarm marker failure and shard 8 has two SAZ partial-observation assertions; all three reproduce identically on exact CI main base `dd7a2da5b` in isolated controls, without this PR. Four other shards were canceled by fail-fast. The remaining binary-layout lane was stopped after over 15 minutes in its unchanged apt cross-toolchain installation step, before project verification. Those five lanes remain unverified; they are not reported as passes. Codex has no major findings, Greptile adds zero comments and the old range thread is resolved. Merge uses the user-authorized bypass for these unrelated failures/infrastructure blockers. ## Author readiness Human owner: @sx4im - [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 - [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>
bsakaguchi 2026-11-01 21:47:57 +00:00
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#7452
No description provided.