resolve: every path resolves through the kernel (leg 7f, part 3b, step 1)
Merged
BO
1mo ago+389+389+012345678901234567890123456789-936-936-012345678901234567890123456789
Part 3b, step 1 of leg 7f in docs/design/resolution-binding-model-plan.md: no resolution path falls back to TypeScript any more. Step 2 deletes the spine code that is now unreachable.
What changed
- Full index, no pool. The main-thread kernel opens when the first batch needs it. A kernel that cannot open, or a native failure mid-run, is an error.
- Full index, pool. The first fan-out waits for the workers to boot, where it used to run TypeScript batches meanwhile. Every later batch fans out whatever its size. The post-prerequisite snapshot refresh now runs in the fan-out step. A pool failure (boot, fan-out, recycle, refresh) continues on a main-thread kernel. A pool without a snapshot copy is not created, and workers refuse to start without one.
- Sync,
resolveReferences, both deferred passes resolve kernel-only. - Removed:
CODEGRAPH_KERNEL_RESOLVE=0,CODEGRAPH_RESOLVE_SHADOW=1,passthroughhandling, and the adaptive mid-loop pool engage. That engage measured only passthrough settle time, which has been zero since #190. - Fix: right after an index, node:sqlite has no
-shmmapped, so the kernel'sreadonly_shm=1open failed at its first query ("unable to open database file"). The TypeScript list paths had hidden this. The resolver now runs one node:sqlite read before opening a kernel on the live db.
Verification
tsc --noEmitclean; full suite 317 files / 5,233 tests pass, golden dumps included.- Dump gate against the previous build (9cc255a7), default and with the pool forced on (
CODEGRAPH_PARALLEL_RESOLVE_MIN=0): all 28 corpora identical in both modes (56/56).initwall-clock unchanged within noise. - Incremental sync gate (index 40 commits back, then sync): identical on ktor, celery, Ocelot. sync-resolve went 2,231 → 1,995 ms on ktor.
Ledger §5.91.