[PR #4200] feat(ida): verify headless caller relationships with call graphs #6123

Open
opened 2026-10-31 01:12:02 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/morluto/rea/pull/4200
Author: @Anroshka
Created: 10/15/2026
Status: 🔄 Open

Base: main ← Head: feat/ida-headless-callers


📝 Commits (10+)

  • 71b52d8 feat(ida): verify headless caller relationships with call graphs
  • e632214 docs(ida): clarify caller support across MCP profiles
  • 4b63b43 fix(ida): batch caller reads and verify independent caller oracles
  • 4a4295b test(ida): expect verified headless caller availability
  • 1710d72 chore(ida): merge main and preserve headless caller readiness
  • 10c534b chore: preserve upstream code after merge hook autofixes
  • 41a0d02 fix(ida): reflect connected caller capability availability
  • fe7370c Merge origin/main into feat/ida-headless-callers
  • 11eeffd test(ida): assert caller coverage facts
  • f7b4a31 merge main into feat/ida-headless-callers

📊 Changes

33 files changed (+836 additions, -102 deletions)

View changed files

📝 docs/ida-provider.md (+22 -2)
📝 scripts/verify-real-ida.mjs (+46 -2)
📝 src/application/AnalysisProvider.ts (+8 -0)
📝 src/application/WebSourceLocationPorts.ts (+4 -2)
📝 src/application/binary/BinarySession.ts (+8 -1)
📝 src/application/binary/BinarySessionExecution.ts (+4 -1)
📝 src/application/binary/CompositeProvider.ts (+4 -0)
📝 src/application/binary/SessionProviderRouter.ts (+31 -0)
📝 src/application/javascript/JavaScriptSemanticGraphConstruction.ts (+2 -2)
📝 src/domain/javascript/javascriptRuntimeReconciliationSchemas.ts (+1 -2)
📝 src/ida/IdaCallGraph.ts (+75 -13)
➕ src/ida/IdaCallerRelationships.test.ts (+312 -0)
➕ src/ida/IdaCallers.ts (+78 -0)
📝 src/ida/IdaOperationRunner.ts (+30 -3)
📝 src/ida/IdaProtocolValues.ts (+25 -25)
📝 src/ida/IdaProviderCapabilities.test.ts (+1 -1)
📝 src/ida/IdaProviderCapabilities.ts (+2 -4)
📝 src/ida/IdaSessionClient.test.ts (+2 -3)
📝 src/ida/IdaSessionClient.ts (+20 -2)
📝 src/native/AppleDispatchCoverage.ts (+4 -2)

...and 13 more files

📄 Description

Summary

Enable verified direct callers in the modern headless IDA profile. Previously procedure_callers returned capability_unavailable even when upstream exposed the call graph needed to confirm incoming calls.

No dedicated existing issue was found after searching open/closed issues and PRs. Related context: mrexodia/ida-pro-mcp#549 and #2322; neither implements this caller query.

Problem and expected behavior

Incoming xrefs_to labels distinguish code from data, but do not distinguish calls from jumps. The adapter should return callers only when an independent call edge confirms the relationship, preserving uncertainty about unexamined references.

Observed on Windows x64, IDA Pro 9.4.260713, upstream c133c385:

Before: procedure_callers(rea_add) -> capability_unavailable
After:  procedure_callers(rea_add) -> ["0x1400016e7"]  # rea_check
        relationship_coverage.status = "partial"

The authored fixture's rea_check calls rea_add(x, 3); independent objdump output confirms the call at 0x14000170b to 0x1400016d0.

Change and scope

Use incoming entry-point code references as candidates, deduplicate their owning functions, and confirm each candidate through a depth-zero callgraph. Separate root-edge parsing from optional callee display-name resolution so verification does not request unrelated names. Extend the real-provider verifier to check callers when the dossier advertises that facet.

Entry-only discovery remains partial: calls into function interiors and unresolved indirect calls remain unknown. Capped/unassigned candidates add limitations; a truncated candidate graph can prove a present edge but cannot exclude an omitted one. Missing tools, producer faults, and cancellation remain explicit. Legacy GUI and native attached behavior are preserved.

Contract and boundary impact

  • Semantic owner: IDA adapter, upstream relationship interpretation.
  • Contribution scope: read-only analysis within the existing provider. Advance maintainer approval for new execution/mutation capabilities is not applicable; no such authority is added.
  • CLI/MCP: existing operation and schemas; modern headless availability is enabled. No new tool or input.
  • Compatibility: requires the optional modern callgraph; native attached callers remain unavailable.
  • Evidence: retain upstream observations, verified edges, and partial coverage through direct queries and function dossiers.
  • Target/cleanup: existing digest-bound private database and close-without-save lifecycle; target executable is never run.
  • Generated metadata/package/install: no tracked generated files, binaries, or installation changes.

Expected effects:

  • Read existing files or captured data.
  • Launch or attach to a process: existing headless IDA analysis worker.
  • Contact network services: existing local MCP/RPC transport.

Existing temporary database/workspace writes remain part of that worker lifecycle. No target-memory, executable-byte, or user-configuration writes are added.

Evidence and regression coverage

  • Regressions cover confirmed versus jump-only/data candidates, deduplication, recursion, incomplete candidate/graph coverage, missing graph support, wrong-root replies, and cancellation.
  • Real production CLI/MCP lane passed on the authored x64 PE fixture, including caller parity, two distinct pseudocode results, independent string/xref oracles, database release, workspace removal, and unchanged input bytes.
  • Real ARM64, legacy GUI, and native attached lanes were not rerun; simulated adapter checks passed.

Validation performed

  • npm run build:cached and npm run check — passed.
  • npx --no-install vitest run src/ida tests/conformance/ida tests/boundary/providers/ida — 414 passed, 7 platform-specific skips.
  • Real-verifier boundary tests — 11 passed; caller tests — 14 passed.
  • npm run verify:test-discovery — all 1352 test files discovered once.
  • scripts/verify-real-ida.mjs against real IDA 9.4 with two procedures and expected string/xref oracles — passed, no unverified checks within that lane.
  • Original implementation verified on Node 26.3.1/npm 11.16.0 with the matching published 6.5.0 Windows native artifact. The refreshed branch was additionally verified on pinned Node 24.18.0/npm 11.16.0 with the matching published 6.7.0 native artifact; binaries are not committed.

Compatibility, safety, and release

No migration or breaking schema changes. One xref read plus bounded root-only graph batches (up to 32 candidates per request); no whole-program function scan or unrelated name lookups. Agent token, CPU, and process-family peak-memory costs were not measured. No Hopper/Ghidra, runtime target execution, or protection-recovery changes.

Review follow-up

Addressed the Codex performance and oracle findings in 4b63b43:

  • Batch roots in groups of 32; validate one row per requested root, including reordered, missing, duplicate, unexpected, and failed rows. The 1000-candidate regression now makes 32 graph requests. Raw producer graphs remain retained; batching reduces protocol round trips rather than claiming reduced total graph content.
  • Add --expected-caller 0xFUNCTION, independently checked in CLI/MCP dossiers and the direct MCP caller query. Without it, caller correctness is reported as unverified. The production lane passed with the compiler/objdump-derived rea_check address; a deliberately wrong caller was rejected by the CLI oracle.
  • Real IDA 9.4 high-fan-in check: all 65 independently enumerated compiler-symbol callers were returned in three batches (32/32/1); end-to-end CLI wall time 21.9 seconds, Evidence JSON 45,473 bytes. No before/after wall-time, CPU, peak-memory, or agent-token comparison is claimed.
  • One additional real-provider attempt under concurrent test load reported an inactive registry entry during the existing cleanup verification and retained its diagnostic workspace. A subsequent upstream inventory was empty; the isolated negative-oracle run then failed for the intended wrong-caller assertion. This observed lifecycle-check limitation is not hidden by the successful oracle run.

Composition follow-up (4a4295b): reproduced the stale headless capability assertion (1 failed / 3 passed), updated it to expect verified caller availability, and reran the IDA composition file (4 passed). Production code is unchanged by this follow-up.

Main synchronization — 21 October 2026

Merged main d8a9673f and resolved the composition conflict by retaining main's inspectReadinessSnapshot() API and the enabled headless caller expectation. No caller behavior or authority expansion was added. Restored two unrelated upstream lines changed by the merge pre-commit autofixer, leaving the final diff scoped to IDA.

  • Pinned Node 24.18.0/npm 11.16.0: focused IDA adapter, conformance, composition, and boundary tests — 443 passed, 7 platform skips across 28 files.
  • npm run check and npm run docs:check — passed; README consistency tests — 5 passed.
  • Real IDA 9.4 production CLI/MCP verification — passed with independent caller 0x1400016e7, expected string/xref, two procedures, containing-procedure and feature-trace checks, unchanged input, released databases, and removed private workspaces. No unverified checks within this lane. ARM64 and real attached profiles were not rerun.
  • Earlier high-fan-in and negative-oracle results above belong to the pre-sync revision; those real-provider scenarios were not rerun for this synchronization. CI and automated review for the pushed head must complete again.

Connected capability follow-up (41a0d025)

Addressed Codex finding 4339123231: the connected IDA client now publishes its observed missing callgraph capability through the composite client. Session status and execution admission use the same provider-matched availability projection; declared operations, effects, identity, and lifecycle authority are preserved. Discovery remains free of provider startup. Closing/reopening observes the new session's catalog.

  • Two production-composition regressions fail with the pre-fix IDA client and pass after the fix. Both catalog orders (missing/present and present/missing) verify status before the first caller query, no upstream dispatch for known-unavailable callers, and continued pseudocode support.
  • Node 24.18.0/npm 11.16.0: 524 related IDA/session tests passed across 30 files; 8 skipped. Seven are platform skips; one existing external-mutation test was explicitly excluded after Windows rejected its symlink with EPERM (before the test could exercise the session). The initial unfiltered run recorded that environmental failure. Final IDA composition rerun: 11 passed.
  • npm run check and npm run docs:check passed; README consistency: 5 passed.
  • Real Windows IDA 9.4 CLI/MCP lane passed again with the independent caller/string/xref oracles, two procedures, database/workspace cleanup, and unchanged input. No unverified checks within this lane. The missing-tool case uses the protocol fixture; no real older upstream was installed. Real ARM64/attached profiles, high-fan-in, and comparative resource measurements were not rerun.

Latest main synchronization — 27 October 2026

Merged origin/main at 570abe95. The three overlapping IDA sections now keep modern headless callers enabled when the upstream server exposes callgraph, preserve native caller unavailability, and retain batched graph reply validation. The session capability snapshot still reports a connected modern server's missing callgraph before callers are queried.

  • npm run check:fast — passed; full npm run check passed typecheck, lint, formatting, metadata, and compile tasks, then stopped at Knip for four unused exports/types in latest main (staticFileUrlPath, AndroidJniRelocationSource, AndroidManifestComponentInventory, and ObjcClassImportBindingCoverage).
  • Focused IDA/session/conformance/composition/boundary tests — 189 passed, 2 skipped across 7 files.
  • Real IDA CLI/MCP verification — passed with independent caller, string, and xref oracles, database/workspace cleanup, and unchanged input; no checks in that lane were unverified.

Automated review follow-up (11eeffdf)

Addressed Greptile finding 4388555418. Caller tests now assert the structured relationship coverage facts through relationshipCoverageLimitations() instead of copying explanatory text. The focused file passed all 14 tests; a harmless source wording change still passed, while suppressing the incomplete-graph coverage fact caused the relevant test to fail as expected. Pre-push npm run check:fast passed.

Main synchronization — 31 October 2026

Merged origin/main at 23de10bb and resolved the four overlapping files, retaining the IDA caller coverage guidance and both the upstream verifier checks and independent caller oracle.

  • Pinned Node 24.22.1/npm 11.16.0: npm run check:fast and full npm run check passed.
  • npm run docs:check passed; README consistency tests — 9 passed.
  • Caller, IDA composition, and real-verifier boundary tests — 32 passed.
  • Real Windows IDA 9.4 production CLI/MCP verification passed all ten checks with independent caller 0x1400016e7, xref 0x14000170b, and string oracles; two-function pseudocode switching, database/workspace cleanup, and unchanged input also passed. No unverified checks within this lane. High-fan-in and comparative resource measurements were not rerun.
  • Merge commit f7b4a31f synchronized this branch with main. The following review fix is on the current head.

Greptile conformance follow-up (a96a61ed)

Addressed Greptile finding 4432125728: the UI-effects conformance test no longer expects headless procedure_callers to fail after the fixture's call graph confirms a caller. The test now verifies UI effects from the actual successful execution; no production code changed.

  • npm run test:local -- tests/conformance/ida/providerContracts.test.ts — 52 passed.
  • npm run check:fast and pre-push checks — passed.
  • Current PR readiness validation passed (run). CI and the latest PR-title workflow remain blocked pending maintainer approval; no hosted jobs have started (CI run, latest title check).

Author readiness

Human owner: @Anroshka

  • 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

  • Human owner completes the readiness declarations and requests review.
  • Required CI and maintainer review are complete.

🔄 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/4200 **Author:** [@Anroshka](https://github.com/Anroshka) **Created:** 10/15/2026 **Status:** 🔄 Open **Base:** `main` ← **Head:** `feat/ida-headless-callers` --- ### 📝 Commits (10+) - [`71b52d8`](https://github.com/morluto/rea/commit/71b52d80a8fda35f312317318f39f608160198ca) feat(ida): verify headless caller relationships with call graphs - [`e632214`](https://github.com/morluto/rea/commit/e6322140f163ca36807b68d6a2c64cf13ac620c1) docs(ida): clarify caller support across MCP profiles - [`4b63b43`](https://github.com/morluto/rea/commit/4b63b438559cfbbef7eec3fd02031fcb1d70b2cc) fix(ida): batch caller reads and verify independent caller oracles - [`4a4295b`](https://github.com/morluto/rea/commit/4a4295b430008b7cae687e0bf76bd543de03f04c) test(ida): expect verified headless caller availability - [`1710d72`](https://github.com/morluto/rea/commit/1710d721636bda7d533c0c1a78af5b78a01a1e8a) chore(ida): merge main and preserve headless caller readiness - [`10c534b`](https://github.com/morluto/rea/commit/10c534b7d975bc865c883bfaa36ea4e5475147e8) chore: preserve upstream code after merge hook autofixes - [`41a0d02`](https://github.com/morluto/rea/commit/41a0d0255b92fb58aa30e78f02eb192fffdff6e9) fix(ida): reflect connected caller capability availability - [`fe7370c`](https://github.com/morluto/rea/commit/fe7370c3bf87cd23e3c0632552df05601ac62a61) Merge origin/main into feat/ida-headless-callers - [`11eeffd`](https://github.com/morluto/rea/commit/11eeffdff1046a2e7ff9b7b1621850cda1c91e09) test(ida): assert caller coverage facts - [`f7b4a31`](https://github.com/morluto/rea/commit/f7b4a31fa57c056cff4916843fbd9f3254c0330a) merge main into feat/ida-headless-callers ### 📊 Changes **33 files changed** (+836 additions, -102 deletions) <details> <summary>View changed files</summary> 📝 `docs/ida-provider.md` (+22 -2) 📝 `scripts/verify-real-ida.mjs` (+46 -2) 📝 `src/application/AnalysisProvider.ts` (+8 -0) 📝 `src/application/WebSourceLocationPorts.ts` (+4 -2) 📝 `src/application/binary/BinarySession.ts` (+8 -1) 📝 `src/application/binary/BinarySessionExecution.ts` (+4 -1) 📝 `src/application/binary/CompositeProvider.ts` (+4 -0) 📝 `src/application/binary/SessionProviderRouter.ts` (+31 -0) 📝 `src/application/javascript/JavaScriptSemanticGraphConstruction.ts` (+2 -2) 📝 `src/domain/javascript/javascriptRuntimeReconciliationSchemas.ts` (+1 -2) 📝 `src/ida/IdaCallGraph.ts` (+75 -13) ➕ `src/ida/IdaCallerRelationships.test.ts` (+312 -0) ➕ `src/ida/IdaCallers.ts` (+78 -0) 📝 `src/ida/IdaOperationRunner.ts` (+30 -3) 📝 `src/ida/IdaProtocolValues.ts` (+25 -25) 📝 `src/ida/IdaProviderCapabilities.test.ts` (+1 -1) 📝 `src/ida/IdaProviderCapabilities.ts` (+2 -4) 📝 `src/ida/IdaSessionClient.test.ts` (+2 -3) 📝 `src/ida/IdaSessionClient.ts` (+20 -2) 📝 `src/native/AppleDispatchCoverage.ts` (+4 -2) _...and 13 more files_ </details> ### 📄 Description ## Summary Enable verified direct callers in the modern headless IDA profile. Previously `procedure_callers` returned `capability_unavailable` even when upstream exposed the call graph needed to confirm incoming calls. No dedicated existing issue was found after searching open/closed issues and PRs. Related context: mrexodia/ida-pro-mcp#549 and #2322; neither implements this caller query. ## Problem and expected behavior Incoming `xrefs_to` labels distinguish code from data, but do not distinguish calls from jumps. The adapter should return callers only when an independent call edge confirms the relationship, preserving uncertainty about unexamined references. Observed on Windows x64, IDA Pro 9.4.260713, upstream c133c385: ```text Before: procedure_callers(rea_add) -> capability_unavailable After: procedure_callers(rea_add) -> ["0x1400016e7"] # rea_check relationship_coverage.status = "partial" ``` The authored fixture's `rea_check` calls `rea_add(x, 3)`; independent objdump output confirms the call at `0x14000170b` to `0x1400016d0`. ## Change and scope Use incoming entry-point code references as candidates, deduplicate their owning functions, and confirm each candidate through a depth-zero `callgraph`. Separate root-edge parsing from optional callee display-name resolution so verification does not request unrelated names. Extend the real-provider verifier to check callers when the dossier advertises that facet. Entry-only discovery remains partial: calls into function interiors and unresolved indirect calls remain unknown. Capped/unassigned candidates add limitations; a truncated candidate graph can prove a present edge but cannot exclude an omitted one. Missing tools, producer faults, and cancellation remain explicit. Legacy GUI and native attached behavior are preserved. ## Contract and boundary impact - Semantic owner: IDA adapter, upstream relationship interpretation. - Contribution scope: read-only analysis within the existing provider. Advance maintainer approval for new execution/mutation capabilities is not applicable; no such authority is added. - CLI/MCP: existing operation and schemas; modern headless availability is enabled. No new tool or input. - Compatibility: requires the optional modern `callgraph`; native attached callers remain unavailable. - Evidence: retain upstream observations, verified edges, and partial coverage through direct queries and function dossiers. - Target/cleanup: existing digest-bound private database and close-without-save lifecycle; target executable is never run. - Generated metadata/package/install: no tracked generated files, binaries, or installation changes. Expected effects: - [x] Read existing files or captured data. - [x] Launch or attach to a process: existing headless IDA analysis worker. - [x] Contact network services: existing local MCP/RPC transport. Existing temporary database/workspace writes remain part of that worker lifecycle. No target-memory, executable-byte, or user-configuration writes are added. ## Evidence and regression coverage - Regressions cover confirmed versus jump-only/data candidates, deduplication, recursion, incomplete candidate/graph coverage, missing graph support, wrong-root replies, and cancellation. - Real production CLI/MCP lane passed on the authored x64 PE fixture, including caller parity, two distinct pseudocode results, independent string/xref oracles, database release, workspace removal, and unchanged input bytes. - Real ARM64, legacy GUI, and native attached lanes were not rerun; simulated adapter checks passed. ## Validation performed - `npm run build:cached` and `npm run check` — passed. - `npx --no-install vitest run src/ida tests/conformance/ida tests/boundary/providers/ida` — 414 passed, 7 platform-specific skips. - Real-verifier boundary tests — 11 passed; caller tests — 14 passed. - `npm run verify:test-discovery` — all 1352 test files discovered once. - `scripts/verify-real-ida.mjs` against real IDA 9.4 with two procedures and expected string/xref oracles — passed, no unverified checks within that lane. - Original implementation verified on Node 26.3.1/npm 11.16.0 with the matching published 6.5.0 Windows native artifact. The refreshed branch was additionally verified on pinned Node 24.18.0/npm 11.16.0 with the matching published 6.7.0 native artifact; binaries are not committed. ## Compatibility, safety, and release No migration or breaking schema changes. One xref read plus bounded root-only graph batches (up to 32 candidates per request); no whole-program function scan or unrelated name lookups. Agent token, CPU, and process-family peak-memory costs were not measured. No Hopper/Ghidra, runtime target execution, or protection-recovery changes. ## Review follow-up Addressed the Codex performance and oracle findings in `4b63b43`: - Batch roots in groups of 32; validate one row per requested root, including reordered, missing, duplicate, unexpected, and failed rows. The 1000-candidate regression now makes 32 graph requests. Raw producer graphs remain retained; batching reduces protocol round trips rather than claiming reduced total graph content. - Add `--expected-caller 0xFUNCTION`, independently checked in CLI/MCP dossiers and the direct MCP caller query. Without it, caller correctness is reported as unverified. The production lane passed with the compiler/objdump-derived `rea_check` address; a deliberately wrong caller was rejected by the CLI oracle. - Real IDA 9.4 high-fan-in check: all 65 independently enumerated compiler-symbol callers were returned in three batches (32/32/1); end-to-end CLI wall time 21.9 seconds, Evidence JSON 45,473 bytes. No before/after wall-time, CPU, peak-memory, or agent-token comparison is claimed. - One additional real-provider attempt under concurrent test load reported an inactive registry entry during the existing cleanup verification and retained its diagnostic workspace. A subsequent upstream inventory was empty; the isolated negative-oracle run then failed for the intended wrong-caller assertion. This observed lifecycle-check limitation is not hidden by the successful oracle run. Composition follow-up (`4a4295b`): reproduced the stale headless capability assertion (1 failed / 3 passed), updated it to expect verified caller availability, and reran the IDA composition file (4 passed). Production code is unchanged by this follow-up. ## Main synchronization — 21 October 2026 Merged main `d8a9673f` and resolved the composition conflict by retaining main's `inspectReadinessSnapshot()` API and the enabled headless caller expectation. No caller behavior or authority expansion was added. Restored two unrelated upstream lines changed by the merge pre-commit autofixer, leaving the final diff scoped to IDA. - Pinned Node 24.18.0/npm 11.16.0: focused IDA adapter, conformance, composition, and boundary tests — 443 passed, 7 platform skips across 28 files. - `npm run check` and `npm run docs:check` — passed; README consistency tests — 5 passed. - Real IDA 9.4 production CLI/MCP verification — passed with independent caller `0x1400016e7`, expected string/xref, two procedures, containing-procedure and feature-trace checks, unchanged input, released databases, and removed private workspaces. No unverified checks within this lane. ARM64 and real attached profiles were not rerun. - Earlier high-fan-in and negative-oracle results above belong to the pre-sync revision; those real-provider scenarios were not rerun for this synchronization. CI and automated review for the pushed head must complete again. ## Connected capability follow-up (`41a0d025`) Addressed Codex finding 4339123231: the connected IDA client now publishes its observed missing `callgraph` capability through the composite client. Session status and execution admission use the same provider-matched availability projection; declared operations, effects, identity, and lifecycle authority are preserved. Discovery remains free of provider startup. Closing/reopening observes the new session's catalog. - Two production-composition regressions fail with the pre-fix IDA client and pass after the fix. Both catalog orders (missing/present and present/missing) verify status before the first caller query, no upstream dispatch for known-unavailable callers, and continued pseudocode support. - Node 24.18.0/npm 11.16.0: 524 related IDA/session tests passed across 30 files; 8 skipped. Seven are platform skips; one existing external-mutation test was explicitly excluded after Windows rejected its symlink with EPERM (before the test could exercise the session). The initial unfiltered run recorded that environmental failure. Final IDA composition rerun: 11 passed. - `npm run check` and `npm run docs:check` passed; README consistency: 5 passed. - Real Windows IDA 9.4 CLI/MCP lane passed again with the independent caller/string/xref oracles, two procedures, database/workspace cleanup, and unchanged input. No unverified checks within this lane. The missing-tool case uses the protocol fixture; no real older upstream was installed. Real ARM64/attached profiles, high-fan-in, and comparative resource measurements were not rerun. ## Latest main synchronization — 27 October 2026 Merged `origin/main` at `570abe95`. The three overlapping IDA sections now keep modern headless callers enabled when the upstream server exposes `callgraph`, preserve native caller unavailability, and retain batched graph reply validation. The session capability snapshot still reports a connected modern server's missing `callgraph` before callers are queried. - `npm run check:fast` — passed; full `npm run check` passed typecheck, lint, formatting, metadata, and compile tasks, then stopped at Knip for four unused exports/types in latest main (`staticFileUrlPath`, `AndroidJniRelocationSource`, `AndroidManifestComponentInventory`, and `ObjcClassImportBindingCoverage`). - Focused IDA/session/conformance/composition/boundary tests — 189 passed, 2 skipped across 7 files. - Real IDA CLI/MCP verification — passed with independent caller, string, and xref oracles, database/workspace cleanup, and unchanged input; no checks in that lane were unverified. ### Automated review follow-up (`11eeffdf`) Addressed Greptile finding 4388555418. Caller tests now assert the structured relationship coverage facts through `relationshipCoverageLimitations()` instead of copying explanatory text. The focused file passed all 14 tests; a harmless source wording change still passed, while suppressing the incomplete-graph coverage fact caused the relevant test to fail as expected. Pre-push `npm run check:fast` passed. ## Main synchronization — 31 October 2026 Merged `origin/main` at `23de10bb` and resolved the four overlapping files, retaining the IDA caller coverage guidance and both the upstream verifier checks and independent caller oracle. - Pinned Node 24.22.1/npm 11.16.0: `npm run check:fast` and full `npm run check` passed. - `npm run docs:check` passed; README consistency tests — 9 passed. - Caller, IDA composition, and real-verifier boundary tests — 32 passed. - Real Windows IDA 9.4 production CLI/MCP verification passed all ten checks with independent caller `0x1400016e7`, xref `0x14000170b`, and string oracles; two-function pseudocode switching, database/workspace cleanup, and unchanged input also passed. No unverified checks within this lane. High-fan-in and comparative resource measurements were not rerun. - Merge commit `f7b4a31f` synchronized this branch with main. The following review fix is on the current head. ### Greptile conformance follow-up (`a96a61ed`) Addressed Greptile finding 4432125728: the UI-effects conformance test no longer expects headless `procedure_callers` to fail after the fixture's call graph confirms a caller. The test now verifies UI effects from the actual successful execution; no production code changed. - `npm run test:local -- tests/conformance/ida/providerContracts.test.ts` — 52 passed. - `npm run check:fast` and pre-push checks — passed. - Current PR readiness validation passed ([run](https://github.com/morluto/rea/actions/runs/41239472906)). CI and the latest PR-title workflow remain blocked pending maintainer approval; no hosted jobs have started ([CI run](https://github.com/morluto/rea/actions/runs/41239440160), [latest title check](https://github.com/morluto/rea/actions/runs/41239526974)). ## Author readiness Human owner: @Anroshka - [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] Human owner completes the readiness declarations and requests review. - [ ] Required CI and maintainer review are complete. --- <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#6123
No description provided.