TKT-123:42 mints nothing, silentlyBEE-008 taught door.js that a ticket code is a STEM — BEE-006 is BEE-006.mkd with the ext dropped — so a code CLICKS. index/hook.js, the LITE-026 pre-commit pass that MINTS permalinks, resolves its targets independently through index/resolve.js and never learned it: targetOf looks for a file literally NAMED BEE-006, finds none, and mintRef returns null. So every TKT-123:42 in every commit stays a TRANSIENT :line anchor — the exact rot Link says the permalink exists to prevent — and the hook says NOTHING about it, so the miss is invisible at commit time. 60 such refs sit in ///bee's own sources today (32 distinct) and 15 more in ///bee-journal.
Found 2026-08-16: gritzko committed index/index.js (e814db0, "a bunch of small fixes to link handling") carrying BEE-006:42:3B, LITE-011:30:a9, DOG-030:23:Ph and a dozen more anchored codes, and not one permalink was minted.
///bee-journal, which HOLDS todo/BEE/BEE-006.mkd:
todo/BEE/BEE-006.mkd:42:3B -> minted todo/BEE/BEE-006.mkd:gt:3Bxd, "1 reference upgraded".BEE-006:42:3B -> untouched, no message, rc 0.index/hook.js:198:sE targetOf runs rs.split(partial) + rs.tailMatches + rs.resolveAt on the ref AS WRITTEN, where door.js would have run refSpellings first.hook.js reports only what it upgraded, so a ref that should have minted and did not is indistinguishable from a file with no refs at all. A wrong permalink would be loud; a missing one is not.door.js:10:WK -> door.js:5T:l_y7 in a ///bee clone), so nothing about the hook's plumbing, staging or rewrite is at fault.///bee/.git/hooks/pre-commit — a bee hook line and a lite hook line, from two installs — so every commit runs the pass twice. Harmless today (the second finds nothing fresh) but it should be one line.A ticket code with a line anchor mints its permalink exactly as a path does, and a ref that could not mint says so.
BEE-006:42:3B in a repo holding todo/BEE/BEE-006.mkd mints; every todo spelling (.mkd .md .txt /README.mkd /README.md, and the bare file) resolves the same as it does for a click.door.js refSpellings is the ladder of record (BEE-008, BEE-013) and hook.js must call it, never re-spell it.ninja && ninja -j20 test in quickjab/build green; test/hook and test/perma legs unmoved.The ladder is door.js refSpellings and nothing else — hook.js and perma.js CALL it, so a stem's spellings are written once (BEE-008, BEE-013) and the minter, the follower and the click can never drift apart again. Per spelling in preference order: the first that answers IS the answer, and only a tie WITHIN that one spelling is the ambiguity the hook refuses.
targetOf alone makes a code MINT and leaves the minted link DEAD, because perma.js follow resolves its path the same raw way — and the permalink keeps its path AS WRITTEN, so what comes back to be followed is still a bare code. A ref that mints and cannot be followed is worse than one that never minted, so both sites take the ladder; the test/hook ticket leg pins the round trip, not just the rewrite.if (hits.length) return hits.length === 1 ? hits[0] : null; — a spelling that answers AMBIGUOUSLY stops the walk rather than falling through to the next. Two files named TKT-007.mkd are a real ambiguity, and quietly trying TKT-007.md next would be the guessing the hook exists not to do.refSpellings reads a slash-headed ref as a page (BEE-013), so /wiki/Bro:12:Yl upgrades to /wiki/Bro:Hf:YlvT on the same code path. Ruled correct rather than merely tolerated — a page reference rots exactly as a ticket reference does, and the two should not need separate machinery.targetOf read only the committing repo, so all 60 of ///bee's codes stayed transient even once they spelled correctly. foreignTarget walks index/mount.js mounts() after the local search misses.XRT-999:3, which survives the commit exactly as typed.mintForeign opens it, anchors on ITS head blob and mints against blobHistory there. The carrier's history has nothing to say about a file it does not hold, and scoping against it would mint a hashlet that the follow could not reproduce.openRepo(root, true) + openIndex(gitdir, false, true) — mode "r", never brought up (BEE-002's fan-out contract) — so a commit in one repo cannot dirty, index or lock another. Only the carrier's own index takes the rewrite, as it always did.perma.js foreignFollow mirrors foreignTarget, and a repo that answers the PATH but not the HASHLET is no answer at all — the walk goes on to the next mount rather than landing wrong.refSpellings returns [path] for it, so the loop runs once and does what the old body did, byte for byte. The test/hook and test/perma legs confirm it — not one existing assertion moved.TKT-123:42 ref in the test/hook fixture, mintedtargetOf runs the ladder — via door.js, not a copyperma.js follow runs it too, or the minted link is dead///bee/.git/hooks/pre-commit///bee's own refs now mint against ///bee-journal, scoped to the target's history, both repos read-only. See Design decisions and Outcome.Done in the MAIN TREE ///bee on gritzko's explicit say-so (edited, nothing staged, no VC op run). A ticket code with a line anchor now mints its permalink and follows back — INCLUDING when its target lives in another registered repo, which was this ticket's bigger half. The one BLOCKED question left is untouched: the hook prints exactly what it printed before.
index/hook.js targetOf: the body is now a loop over door.js refSpellings, first spelling that answers wins. Nothing else in the pass moved.index/perma.js follow: the same loop before resolveAt, because the minted path stays a bare code and the follower met the identical wall. Found by the fixture, not by reading — the mint went green and the round trip stayed red.test/hook/ticket.js + its run.sh leg: 6 checks over a repo of their own (a todo pocket with a thin TKT-001.mkd, a fat TKT-005/README.mkd, and TKT-007 in TWO topics), so nothing in the existing fixtures shifted. 4 of the 6 were RED before the fix; the two negatives were green throughout and now guard against over-reach.ninja && ninja -j20 test in quickjab/build: 146/146. NOT ONE existing assertion was amended.///bee-journal, one commit: see BEE-006:42:3B and /wiki/Bro:12:Yl here -> see BEE-006:gt:3Bxd and /wiki/Bro:Hf:YlvT here, "2 references upgraded". BEE-006:gt:3Bxd carries the SAME offset and hashlet the path spelling todo/BEE/BEE-006.mkd:42:3B minted before the fix, which is the proof it resolved to the same blob. Both follow back through door.seatOf — to todo/BEE/BEE-006.mkd line 42 and wiki/Bro.mkd line 12.index/hook.js foreignTarget + inForeign: the mount-table fan-out, tried after the local search misses; mintForeign: the foreign mint, target opened READ-ONLY, hashlet scoped to the target's own blobHistory. targetOf returns a { root, rel } for a foreign hit, which is never a key in cands, so the LITE-027 cycle graph skips it by construction — a file in another repo cannot be on this commit's cycle.index/perma.js foreignFollow: the mirror, walked when the ambient repo answers nothing. A mount that spells the path but does not carry the anchored blob is passed over, not landed on.test/hook/cross.js + its run.sh leg: 7 checks over TWO installed repos — a CARRIER that commits and a TARGET that is only ever read — pinning that a cross-repo code mints, a cross-repo path mints, an UNREGISTERED target is left as typed, and both minted links follow back to line 20. 6 of the 7 were RED before the fix.///bee, one commit: // BEE-006:42:3B and LITE-006:17:Rc and LITE-011:30:a9 and LITE-028:39:~1 -> // BEE-006:gt:3Bxd and LITE-006:Kk:RcNe and LITE-011:dF:a9GC and LITE-028:fi:~1EZ, "4 references upgraded to permalinks in merge.js". All four follow back through door.seatOf into ///bee-journal — todo/BEE/BEE-006.mkd line 42, todo/LITE/LITE-006.mkd line 17, todo/LITE/LITE-011.mkd line 30, todo/LITE/LITE-028.mkd line 39. BEE-006:gt:3Bxd is the SAME offset and hashlet the journal-internal mint produced, which is the proof both paths scope against the one history.///bee's 60 TICKET:line refs are mintable from now on; they are not yet minted, because a hook only ever sees a commit in flight — reaching what already landed still wants a bee mint verb, and --amend still cannot (BEE-015).Suggested commit: BEE-014: the minter learns the ticket ladder