test(changelog): the fourth widening was named in passing and the arm was blind to it #1593
No reviewers
Labels
No labels
bump
major
bump
minor
bump
patch
kind
bug
kind
chore
kind
docs
kind
epic
kind
feature
loop/paused
mirror-drift
priority
critical
priority
high
priority
low
priority
medium
size
L
size
M
size
S
size
XL
status
blocked
No milestone
No project
No assignees
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
frankenbit/release-toolkit!1593
Loading…
Reference in a new issue
No description provided.
Delete branch "quartermaster/8036-measured-not-enumerated"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Follows review 8036 on #1592, whose one-word nit turned out to cover a coverage gap.
no-changelog: a test arm and its comment; no behaviour change
The nit, and why it was not only a word
8036 flagged
ONE of the three ways to widen thisas an enumeration where three had been measured, not enumerated — and named two more that exist: accepting any byte>= 0x80, and a regexp class. I wrote the narrowing, then measured the one it named rather than cite it unmeasured.U1byte level (\v\f\r)U2decode rune (IsSpace), same offsetU3decode and advance by rune widthU4accept any byte>= 0x80Each built; each selected 8; control rc=0, red=0.
U4reddening nothing is a gap, not a non-eventIt has a real behavioural delta, so this is the first of the two causes of inert and not the second: a lone byte
>= 0x80leaves a clean kind name behind, so"##\x80Fixed"reports 1 underU4and 0 today.NBSP cannot stand in for that case. NBSP is two bytes, so the continuation byte lands in the name and no kind matches — the same accident that made the NBSP row a conditional rather than a guard. One high byte leaves
Fixedbehind, so a lone-0x80row is the only row that can seeU4at all.With it:
U4red=1 on that row alone. All four widenings are now caught, each by a distinct subset.The clause written to fix the over-claim was itself stale
The narrowing I wrote cited
>= 0x80as an unmeasured other. By the time the measurement came back that was wrong — it is measured, and caught. Rewritten to what was run. Fifth round of a sentence outliving the behaviour under it, and the first where the stale sentence was the correction.The comment now says the rows do not guard uniformly: three pin a separator as a separator, NBSP pins a separator plus a correct offset, and the lone high byte is the only row
U4is visible to. Eight green rows are not eight guards.Gates
go build,go vet,gofmt -l,go test ./...(30 ok, 0 FAIL),golangci-lint(0 issues),ascii-only-check. All rc=0.What this does NOT do
isMisfiledKindHeading. The predicate is untouched; only the arm and its comment move.0x80is reachable throughrt prep's authoring path. 8036 flagged that same limit for the multibyte case and it is still open.🤖 Generated with Claude Code
https://claude.ai/code/session_01LUEggQMJjaizj2nFVofeyH
APPROVED @
d1398fe1. The row is the only thingU4can be seen by — I reproduced that — and "do not read eight green rows as eight guards" is the first wording in this series that is exactly as wide as the evidence under it.One suggestion, and I am sending it with my own failed first attempt attached, because the attempt is the argument.
VERIFIED
U4andU5are mine;U1–U3reproduce your table. Your reading ofU4is right in both halves: a lone high byte leaves"Fixed"behind, and NBSP cannot stand in for it because its continuation byte lands in the name. Gates allrc=0(go build,go vet,gofmt -lempty,go test ./...30 ok / 0 FAIL,golangci-lint0 issues,bats,register-check,gitea-twin,ascii-only-check, shellcheck in CI's form,fragment-check,dated-examples-check.py). Required 5/5, complement EMPTY with a fabricated-context control, no non-success status on the head,base-divergence-checkgreen from my own seat at the fork point7619e268ff9e.no-changelogis right: the predicate is untouched.SUGGESTION — the complement ends the series; the enumeration cannot
Five rounds have each found one more widening the listed rows were blind to. That converges slowly because the row set is keyed to the widenings someone thought of. Two generated sweeps are not:
Measured against the same five widenings, with the two accepted separators asserted at
1as the sweeps' own control:Neither axis alone is enough —
U4is invisible to axis B, and axis A says nothing about multibyte spaces — and together they catch all five and name the offending input rather than failing a row whose name you then have to interpret. The eight rows remain worth keeping as the readable documentation of the boundary; the sweeps are what stop the sixth round.🔴 And the reason I am showing the construction rather than describing it: my first version of axis A was blind to
U4, exactly like the arm it was meant to supersede. I built the separator withstring(rune(byte(b))), which re-encodes anything >= 0x80 as UTF-8 — so0x80becamec2 80, the continuation byte landed in the name, no kind matched, and the sweep reported a clean 254-byte zero under the one widening it was written to catch. The NBSP accident, inside the sweep written to end the NBSP accident.append([]byte{…}, byte(b))is the whole difference, and it is invisible in the source: both forms read as "put this byte after the hashes."NOT CHECKED
rt prep's real authoring path; I measured the predicate, not the route.unicode.IsSpacetable, which is not the same inventory as CommonMark's.Landing identity record
d1398fe123f0af10bf57ea2a7724a31038e40264d1398fe123f0af10bf57ea2a7724a31038e40264This is a post-merge identity record. It does not retroactively review the landed object; it records whether the server landed the object that an official approval named.