With QJAB-015 the lexer fuses file:'text', file:"snippet", file:/re/ and file:name, and bee lands every one of them on the top of the file. Resolve each to a byte span in the current blob, first match wins. The symbol anchor is sugar: per-file-type spot templates with the name bound. The three matchers exist in pure JS in be and port as they are.
door.js:517 splitRef peels anchors by lastIndexOf(":"): digitTail (door.js:496), permaTail (door.js:507).index/perma.js:324:Ab follow lands :line:hashlet; isHashlet (:49) and mintHashlet (:75) already demand a non-digit.index/lindex.js:382:PS mints a LINK row per F token, keyed on the target's segments; the anchor plays no part in the key.beagle-ext/views/spot/match.js:462 make(mode, body, ext): grep, regex, and the flat-token spot with brackets.door.js:98 rootArg already turns a //name/rel arg into a path through mnt.byName, refusing an unknown name in words.splitRef takes its parts from tok.link (QJAB-015); digitTail and permaTail go.index/match.js: the port of be's three matchers, make(kind, body, ext).run(bytes, toks) -> [{lo, hi}].index/defs.js: ext -> [kind, template] rules in order; .c/.h share one: fn, struct, enum, union, typedef, macro, proto.file:name binds the name into s rule by rule: the first rule to hit wins, then its first match; the kind labels the hunk.bee see and the web board land on the match span; a miss says so and lands on the file top, never on a guess.bee mint and the commit hook leave search and symbol anchors byte-identical..c:/re/, abc/:'x', abc/.c:"f(x)") is a query: every match, as hunks in the search view, never one landing..c:name.//repo/… resolves through mnt.byName as rootArg does; an unknown repo is a miss in words; LINK rows key it (BEE-002).N-tagged token of a fixture corpus resolves back to itself through the template table.test/anchor/: each anchor kind, a colon in a body, a miss, mint passing by; the repro comes first (work 3).test/scope/: ext, dir and dir+ext scopes confine the scan; .c:name finds a def; //repo/ crosses repos; an unknown repo.dog/tok/DEF.c:85) keeps indexing; templates only resolve a GIVEN name, which is why they can stay naive.N tags for resolution: a bound name needs no keyword guards, and a balanced A beats DEF's [^(){};]*.X.h:name lands on the declaration and X.c:name on the body.['fn', 's(A){B}'], ['struct', 'struct s{B}'], ['proto', 's(A);'].grep/spot verbs are one code path; the link is only another spelling of the same query.test/anchor/ red on all four kindssplitRef over tok.linktest/scope///repo/ links through mnt.byNameN-tag cross-check#define is ONE H token and the name a separate S beside it, so the macro rule is #define s.test/perma/pty.js:79:ix now fails: it pins a/b.c:k4 as NO anchor, and the grammar reads :k4 as a symbol.N tag ever reaches JS: DEFMark (dog/tok/DEF.h:29) is not bound into quickjab's tok.parse.test/scope/scope.js; a QJAB binding would free it.match.js:262:vT restores b.pos in the gap branch, so any two-space needle hangs; the port advances the scan.union U) IS a placeholder in the template alphabet; a span must carry the name, or it is refused.{ } body is not expressible by {B}: trait Four { } is on the commented allow-list of the cross-check.s(A){B} and s(){B}, since a placeholder binds at least one token.bee see fuses argv words while tok.link refuses the join, so :'a b' survives the CLI without hand parsing..c names no file, and a row on it would make every .c a suspect of every scope link.uri._parse("x.c:name") reads x.c as a SCHEME, so an explicit [t](x.c:name) href goes out verbatim.[t](x.c:12) does the same, so BEE-070 rests on the autolink leg; not touched here.test/coldfan leg 5 failed once and passed three reruns: its own comment calls that race pre-existing.S, not W; the matcher reads an all-blank token as a gap whatever its tag.Working tree only, nothing committed. door.js splits every ref through
tok.link and resolves a search or symbol anchor to a byte span in the blob;
index/match.js is the ported matcher, index/defs.js the def templates;
view/grep.js grew scope() over the verb's own run, view/see.js fuses a
spaced body and shows a query's hunks; index/lindex.js skips a scope.
test/anchor/ (12 + 31) and test/scope/ (7 + 14) are new and green. 77 of
77 suites passed before, 78 of 79 after: the one red is test/perma, on the
:k4 expectation DOG-050 already ruled amended.