Repository navigation
fix(verdict): BendTT labels spell the canonical key injectively (#1131, #1247) - #1216
Conversation
|
Joint verification of #1215, #1216, #1218, #1219 and #1220 against main commit 0187512:
The cluster-wide corpus gates were not run; this evidence is the local repository gate, actual CLI/compiler runs and actual kernel checks. |
|
Refreshed the existing branch onto current main |
|
Joint verification on main
No physical macOS/GPU/cluster gate claim. |
…lang#1131, bendlang#1247) name_tt spelled B.name_key(k), so an imported ns:name and a local ns.name got one label, and it left _ unescaped, so a source name could spell an escape (a-b and a_2d_b). Spell the internal key itself, with _ as __ and any other non-name character as _hex_: distinct keys give distinct constructor and recursive-group labels. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
e676033 to
7177a21
Compare
Fixes #1131. Fixes #1247.
name_ttturns a bend2 key into a BendTT identifier, and those identifiers are also the constructor and recursive-group labels. It was not injective in two ways:B.name_key(k), which turns:into., so an importedns:nameand a localns.name(distinct since A file's names are keyed ns:name inside the compiler, so no declaration lands in another file's namespace and a foreign CID(None) keeps meaning Base's None (#1045) #1156) got one label (ns:name keys collapse back to ns.name in --verdict, bypassing #1216 #1247);_unescaped, so a source name could spell an escape:a-banda_2d_bboth becamea_2d_b(BendTT name escaping merges distinct constructor labels across module paths #1131).Def names were already made unique by
fresh; labels were not.The fix spells the internal key itself, with
_as__and any other non-name character as_hex_(whole code points,uflag). Every_in the output now opens either__or_hex_, so the spelling decodes to exactly one key. Names without_(most of Base) are unchanged;Cmp.is_eqbecomesCmp.is__eq.This is a preventive fix. On current main the known reproducers no longer reach a wrong verdict: #1131's group no longer forms, the #1212 misroute is fixed (#1215), and #1247's case stops at "out of scope". The label collision itself still shows in
-o: an importedlabel_namespace_lib:Kand a locallabel_namespace_lib.Kboth get.label_namespace_lib.Kon main, and.label__namespace__lib_3a_K/.label__namespace__lib.Khere. It would matter again the moment a group or a specialized recursion reached the kernel with such names.The earlier regression tests are dropped: they pass on main too, since a collision only makes the kernel accept more and a
#|verdict line cannot see it.Gates on main 3b3f02e: repo 54/54 (safe.ts 23,994/24k ttok), test 1818/1818, perf 124/124, ping 81/81, safe 1160 agree / 0 false reject / 0 timeout (same as main).
🤖 Generated with Claude Code