CODE-066: sym filter: seg3 never prunes, a bare-basename self-ref mints

Now
OPEN
Sev
LOW
Rep
///bee
Ask
gritzko
Rev
///bee#8cb69a0
See
BEE-063
See
BEE-002

Input

Context

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.

Goals

Compare slot 3 like the others; test the carrier's basename in the self-ref guard.

WIP

Design decisions

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.

TODOs

Blockers and bummers

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.

Outcome