the code bridge
Does the result survive the jump from documents to code?
ObjectGraph is a document format. The problem it is adjacent to — an agent burning context on a repository it mostly does not need — is a code problem. A result on prose does not automatically transfer, so this page tests it directly: same two primitives, same format, but nodes are symbols instead of headings, and :requires edges are reference dependencies instead of prose ordering.
Nothing in search_index or resolve_context changed to make this work. The input files are this project's own source.
| File | Query | Top symbol | Whole file | Traversal | Reduction |
|---|---|---|---|---|---|
| primitives.ts | how are index keywords scored against a query | scoreEntry | 2,477 | 1,442 | 41.8% |
| primitives.ts | how does role scoping hide nodes | visibleNodeIds | 2,477 | 328 | 86.8% |
| primitives.ts | where are requires edges followed | — | 2,477 | 307 | 87.6% |
| primitives.ts | how is markdown split into sections | — | 2,477 | 307 | 87.6% |
| transpiler.ts | how are index keywords scored against a query | deterministicMetadata | 2,611 | 718 | 72.5% |
| transpiler.ts | how does role scoping hide nodes | inferNodeType | 2,611 | 661 | 74.7% |
| transpiler.ts | where are requires edges followed | edges | 2,611 | 204 | 92.2% |
| transpiler.ts | how is markdown split into sections | RawSection | 2,611 | 761 | 70.9% |
The attack transfers too
Same conclusion as the document case, and it arrives for the same structural reason: the routing layer is derived metadata, the content is verbatim, and only the content can disconfirm the metadata. If anything the code case is worse — symbol names are far easier to impersonate than prose, and a repository has many more plausible decoys.
What this does and does not show
- ✓The two primitives work unmodified on source code. Symbol-level traversal gives a similar reduction to heading-level traversal on similarly sized inputs.
- ✓The routing vulnerability is domain-independent — it transfers cleanly to code.
- ✗This is single-file. A real repository engine has to resolve symbols across files, which the format explicitly does not support yet — the paper lists cross-file edge resolution as an open limitation, and that is the first thing I would build next.
- ✗The symbol extractor is a lightweight structural parser, not a type-aware one. It finds declarations and references; it does not resolve overloads, re-exports, or dynamic dispatch.