:58:mJ — line, then a 2..10 char hashletBEE-019 shortens the permalink to path:LINE:HASHLET — decimal line, then 2..10 ron64 chars, odd lengths allowed. dog/tok/LINK.rl:94 commit = ":" ron64{1,4} ":" (ron64 ron64){2,5} fuses only the old :OFF:HASH4+even shape, so a :58:mJ anchor is cut off the F token and the door never sees it. One rule changes; the six lexers that include LINK.rl are regenerated.
LINK.rl:93 line = ":" [0-9]{1,10} (":" [0-9]{1,10})? and :94 commit are the two anchor branches (anchor = line | commit); the JS side (door.js splitRef) tells them apart by segment 2 carrying a non-digit.FREE.c.rl:93, MKDT.c.rl:50, MDT.c.rl:43, TOKL.c.rl:37, RSTT.c.rl:49, TXTT.c.rl:27; the generated *.rl.c are checked in (ragel -C X.c.rl -o X.rl.c -L, dog/INDEX.md:239).:58:mJ is 6.commit = ":" [0-9]{1,10} ":" ron64{2,10}; the header comment at LINK.rl:20 follows.x.mkd:58:mJ, x.mkd:58:m7Q, BEE-005:58:mJ each fuse as ONE F token in every includer; x.mkd:58:20 still fuses (via line, unchanged bytes); the 10-char cap still trims.ninja && ctest in the quickjab build green; the TOK tests amended only where they pin the old even-length rule.git worktree of ~/src/quickjab/dog (and of ~/src/quickjab, dog/ symlinked in), built as BEE-019's build-bee3; no main-tree edit, no VC ops.:58:mJ cut short on the base.oldcommit — BEE-019 TEMPORARY, gritzko 2026-08-16: the grammar CARRIES the retired ":" ron64{1,4} ":" (ron64 ron64){2,5} alongside the new rule for the length of the migration. Without it a SLASHED old permalink (index/hook.js:1cG:xoo4) fuses no F token at all — the half-eaten anchor makes the whole ref retreat to crumbs — so bee reperma cannot see it and would need a hand-rolled byte walk, which is exactly what "no manual parsing" forbids. The JS never reads it: door.js splitRef stays digits-only, so an old link still lands on the file and nothing follows it.index/hook.js:1cG:xoo4 (an OLD permalink) fused NO F token at all under
the digits-only rule — the scanner starts line on the 1, fails, and the
ref retreats to crumbs, even though .js is a known extension that vouches
for itself. A BARE name (door.js:5T:l_y7) and a ticket CODE
(LITE-025:3L:zcD_) kept their F throughout. The retreat itself is not
new (path/README:12345678901 does it on the base, TOK01.c's own case); the
form change merely made every slashed old permalink hit it.Worktree ~/src/dog-BEE019 (branch BEE-019), symlinked as dog/
into ~/src/quickjab-BEE019, built into ~/src/quickjab/build-bee3. No VC op
run. ctest -j16 there: 149/149, TOK01test included.
tok/LINK.rl:86:DS is now commit = ":" [0-9]{1,10} ":" ron64{2,10}; — segment
1 is the LINE, segment 2 a 2..10 char hashlet, odd lengths allowed — beside
oldcommit (:87), the TEMPORARY old form, and anchor = line | commit |
oldcommit. The header spec block and two ruling bullets follow.ragel -C X.c.rl -o X.rl.c -L: FREE MKDT MDT
TOKL RSTT TXTT.tok.parse probe on the base build: see x.mkd:58:mJ here gave
["x.mkd:58"] — the hashlet cut off. After: ["x.mkd:58:mJ"], and so do
x.mkd:58:m7Q (odd) and BEE-005:58:mJ; x.mkd:58:20 still fuses through
line; x.mkd:58:m keeps x.mkd:58 only (1 char is below the floor); the
OLD x.mkd:1Jz:mJpI fuses x.mkd alone, as ruling 5 wants.test/TOK01.c amended where it pinned the old EVEN rule, in both copies:
{"file.c:58:mJ", "F"} and {"file.c:58:m7Q", "F"} are ADDED and
{"file.c:100:a7"} goes FPS -> F; {"DOG-032:k4:d8K3"} ->
{"DOG-032:58:mJ"}. {"file.c:k4:d8K3", "F"} STANDS as it was — that is
oldcommit doing its job. Nothing else in TOK moved.bee reperma has been run over the corpus,
DROP oldcommit from LINK.rl (rule, both header mentions,
anchor = line | commit), regenerate the six includers, and TOK01's
{"file.c:k4:d8K3"} becomes "FPSPS" — no anchor at all.Suggested commit (dog wt): DOG-043: LINK.rl fuses :LINE:HASHLET