index/lindex.js:569:PS sigFits returns true the moment slot 3 is non-zero, so
seg3 never refuses a path with four or more dirs — false positives only, so
contract-legal, but a quarter of the prune table is discarded for exactly the
deep trees that need it. index/lindex.js:391:PS: a self-reference spelled as a
bare basename (lindex.js inside index/lindex.js) DOES mint a LINK row,
against INDEXES.mkd's "a ref spelling the carrier's own path mints nothing".
Found in the 2026-09-18 index review.
Compare slot 3 like the others; test the carrier's basename in the self-ref guard.
The self-ref guard now tests the carrier's BASENAME as well as
its whole path: a short spelling names the same file, and the
partial-target doctrine already reads abc/TCP.c as one target
with src/abc/TCP.c. INDEXES.mkd:269:6K says so now.
Slot 3 is NOT compared, and cannot be on this val: a non-zero
seg3 spells "four dirs OR MORE", so aa/bb/cc/dd/deep.c and
aa/bb/cc/dd/ee/deep.c mint the identical val (proved in
test/sym/rows.js). Refusing on seg3 would drop the deeper file
whenever the run sits BELOW seg3 — bee grep x display/dc in
linux, where seg0..3 are drivers/gpu/drm/amd — which is a
false NEGATIVE, the one thing the suspects contract forbids
("the index only narrows"). The return true at index/
lindex.js:569:PS is that hole, stated in the comment above it.
A sound seg3 prune needs the val to spell the dir DEPTH — the
reserved vnib would hold it (cap 15), but that is a format
change: IDX_EXT bump, the sweep, one re-derive, and want
would have to carry vals rather than sigs (symSig strips the
nibble). gritzko's call; not done here.