You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
181 fs: fail-soft tags in src/ have had no reader since #1318, and they have drifted #1949
Found by the v0.47.0 release legibility review (#1938).
src/ carries 181 fail-soft classification tags: fs:ANSWER, fs:CHANNEL, fs:EMPTY, fs:LITERAL, fs:STRICT, fs:TLS, fs:TODO and fs:VOID (git grep -ohE 'fs:(ANSWER|CHANNEL|EMPTY|LITERAL|STRICT|TLS|TODO|VOID)' -- src | wc -l). They were the input of tools/failsoft_classify_check.sh, which #1318 deleted (94c4c5b, 645 lines). The answer half moved to the PINS table of tools/strict_differential.sh (:765, "documented answers must not raise under strict"). Since then nothing reads the tags (git grep finds no reader outside src/), so they are unenforced claims, and they have already drifted:
A tag with no reader reads like a classification someone checked. Either it stops looking like one, or something checks it again.
Done when
Either the fs: prefixes are removed from src/ (any explanation still true stays as an ordinary comment, and a soft answer that matters has a PINS row in tools/strict_differential.sh), or a checker reads the tags again and a planted wrong tag goes red through it.
In the first case, git grep -cE 'fs:(ANSWER|CHANNEL|EMPTY|LITERAL|STRICT|TLS|TODO|VOID)' -- src prints nothing.
Decided: remove the fs: prefixes, and schedule the sweep for after Phase 2 (#1776) merges to main. Measured on main 6352151b: 179 tags (ANSWER 79, VOID 38, CHANNEL 37, EMPTY 12, STRICT 8, LITERAL 3, TLS 1; the one TODO mention is already resolved).
Why after Phase 2:phase2-numbers has rewritten most of these builtin bodies (R1.6b-R1.6z). A 179-site comment sweep on main now would conflict at every main → phase2 sync. Also, tools/strict_shape_contract.py hashes whole bodies, comments included, so each touched exempt builtin needs a reviewed repin (as runtime: one replay-refusal helper, and the taped-fs rule reads k_tape_kinds (#1943) #1960 needed). After the merge it is one sweep on one tree.
Done-when unchanged. This stays open until then, now as decided rather than undecided.
Activity
InauguralPhysicist commentedon Oct 24, 2026
Decided: remove the
fs:prefixes, and schedule the sweep for after Phase 2 (#1776) merges to main. Measured on main6352151b: 179 tags (ANSWER 79, VOID 38, CHANNEL 37, EMPTY 12, STRICT 8, LITERAL 3, TLS 1; the one TODO mention is already resolved).PINSrow intools/strict_differential.sh(the first done-when box). Each explanation that is still true stays as an ordinary comment.phase2-numbershas rewritten most of these builtin bodies (R1.6b-R1.6z). A 179-site comment sweep on main now would conflict at every main → phase2 sync. Also,tools/strict_shape_contract.pyhashes whole bodies, comments included, so each touched exempt builtin needs a reviewed repin (as runtime: one replay-refusal helper, and the taped-fs rule reads k_tape_kinds (#1943) #1960 needed). After the merge it is one sweep on one tree.Done-when unchanged. This stays open until then, now as decided rather than undecided.