[GH-ISSUE #5855] [Bug] Retained Interface Builder pages repeatedly validate the complete graph #3549

Closed
opened 2026-10-31 00:41:44 +00:00 by bsakaguchi · 0 comments
Owner

Originally created by @gensokyo-dev on GitHub (Oct 21, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/5855

Before submitting

  • Searched open and closed issues, including historical NIB delivery PRs #1460 and #1477.
  • No credentials or private target data included; artifacts are public releases.

Area

Evidence, artifacts, or reconstruction

Observed behavior

On f801b2fbfd28f4e3713adefddc7bd73db44c284c, a real XLD 20250302 bundle decodes through the Linux CLI and stdio MCP resource-only session. The default admitted graph contains 64 documents, 6,528 nodes and 1,378 edges; omitted documents and unsupported hierarchy facts remain partial.

After decode_interface_builder({detail:"summary"}), reading the AAC settings document's three node pages and one edge page, then repeating those four pages on the same retained parent, took 0.59–1.53 seconds per RPC in the initial diagnostic. This is an observed per-call cost, not a completed-task speed claim. The first harness attempt subsequently failed because its oracle expected action-source edges to use the outlet contains relation; production correctly uses target_action. The receipt is retained and the harness is corrected.

Source-derived cause: parseInterfaceBuilderReport runs the owning schema over the entire normalized graph on every summary/page. Filtering also materializes every matching document row before slicing a page. The existing immutable Evidence lifetime can support successful validation reuse without introducing a live-file cache, new public tools or different facts.

Reproduction

  1. Obtain the official XLD 20250302 DMG, SHA-256 0032a5470ea4e32a11a35b8077ebf4986102891f8eb82743094f2c6621ad8aeb; extract without executing it.
  2. open_bundle_resources({path:"<XLD.app>"}); decode_interface_builder({detail:"summary"}).
  3. Use the returned parent Evidence ID with inspect_analysis_view, kind interface-builder, collection nodes then edges, document Contents/PlugIns/XLDAacOutput.bundle/Contents/Resources/English.lproj/XLDAacOutput.nib, limit 32; exhaust pages and repeat.
  4. Export the complete parent for provenance and equivalence checks. The corrected complete-task benchmark is in progress.

Expected behavior

Reuse successful owning-schema interpretation only for the exact authenticated immutable normalized-result identity. Recheck current parent subject binding on every projection; mutable/merely frozen imports must revalidate. Preserve row ordering, evidence, coverage, unknowns, all complete parent facts and unchanged CLI/MCP contracts. Avoid allocating the full matched collection merely to return one page.

Impact and scope

Repeated graph pages pay for facts outside the selected document. No token reduction is claimed: the current public summaries/pages are already available. This issue concerns retained-query CPU/latency/allocation; cold decoding and startup may dominate whole-task costs. Existing decoder issues, including #5720 and #5721, are not closed by an optimization.

REA version / runtime

f801b2fbfd28f4e3713adefddc7bd73db44c284c; Node 24.18.0, Linux x86_64. Static archive parsing, no Hopper/IDA/Ghidra, ibtool or app execution. One CPU, 4 GiB hard memory/3 GiB early stop for experiments.

Verification plan

Independent Python plistlib reads the selected raw archive (SHA-256 4fdbfba451ee64b1d333c96a4f3d1a0c4b543a36b9b3686e1151b51e4dd14c72): five named outlets and one VBR action with exact archive source/destination UIDs. Compare equivalent completed CLI/MCP tasks, full retained Evidence, cold/fresh sessions and warm pages; include a one-document control. Report tokenizer estimates, wall/CPU time, process-family peak memory, failed attempts and unverified scope.

Originally created by @gensokyo-dev on GitHub (Oct 21, 2026). Original GitHub issue: https://github.com/morluto/rea/issues/5855 ### Before submitting - [x] Searched open and closed issues, including historical NIB delivery PRs #1460 and #1477. - [x] No credentials or private target data included; artifacts are public releases. ### Area Evidence, artifacts, or reconstruction ### Observed behavior On `f801b2fbfd28f4e3713adefddc7bd73db44c284c`, a real XLD 20250302 bundle decodes through the Linux CLI and stdio MCP resource-only session. The default admitted graph contains 64 documents, 6,528 nodes and 1,378 edges; omitted documents and unsupported hierarchy facts remain partial. After `decode_interface_builder({detail:"summary"})`, reading the AAC settings document's three node pages and one edge page, then repeating those four pages on the same retained parent, took 0.59–1.53 seconds per RPC in the initial diagnostic. This is an observed per-call cost, not a completed-task speed claim. The first harness attempt subsequently failed because its oracle expected action-source edges to use the outlet `contains` relation; production correctly uses `target_action`. The receipt is retained and the harness is corrected. Source-derived cause: `parseInterfaceBuilderReport` runs the owning schema over the entire normalized graph on every summary/page. Filtering also materializes every matching document row before slicing a page. The existing immutable Evidence lifetime can support successful validation reuse without introducing a live-file cache, new public tools or different facts. ### Reproduction 1. Obtain [the official XLD 20250302 DMG](https://tmkk.undo.jp/xld/xld-20250302.dmg), SHA-256 `0032a5470ea4e32a11a35b8077ebf4986102891f8eb82743094f2c6621ad8aeb`; extract without executing it. 2. `open_bundle_resources({path:"<XLD.app>"})`; `decode_interface_builder({detail:"summary"})`. 3. Use the returned parent Evidence ID with `inspect_analysis_view`, kind `interface-builder`, collection `nodes` then `edges`, document `Contents/PlugIns/XLDAacOutput.bundle/Contents/Resources/English.lproj/XLDAacOutput.nib`, limit 32; exhaust pages and repeat. 4. Export the complete parent for provenance and equivalence checks. The corrected complete-task benchmark is in progress. ### Expected behavior Reuse successful owning-schema interpretation only for the exact authenticated immutable normalized-result identity. Recheck current parent subject binding on every projection; mutable/merely frozen imports must revalidate. Preserve row ordering, evidence, coverage, unknowns, all complete parent facts and unchanged CLI/MCP contracts. Avoid allocating the full matched collection merely to return one page. ### Impact and scope Repeated graph pages pay for facts outside the selected document. No token reduction is claimed: the current public summaries/pages are already available. This issue concerns retained-query CPU/latency/allocation; cold decoding and startup may dominate whole-task costs. Existing decoder issues, including #5720 and #5721, are not closed by an optimization. ### REA version / runtime `f801b2fbfd28f4e3713adefddc7bd73db44c284c`; Node 24.18.0, Linux x86_64. Static archive parsing, no Hopper/IDA/Ghidra, ibtool or app execution. One CPU, 4 GiB hard memory/3 GiB early stop for experiments. ### Verification plan Independent Python `plistlib` reads the selected raw archive (SHA-256 `4fdbfba451ee64b1d333c96a4f3d1a0c4b543a36b9b3686e1151b51e4dd14c72`): five named outlets and one VBR action with exact archive source/destination UIDs. Compare equivalent completed CLI/MCP tasks, full retained Evidence, cold/fresh sessions and warm pages; include a one-document control. Report tokenizer estimates, wall/CPU time, process-family peak memory, failed attempts and unverified scope.
bsakaguchi 2026-10-31 00:41:44 +00:00
  • closed this issue
  • added the
    bug
    triage
    labels
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#3549
No description provided.