Recording only — unassigned. Measured while landing the skip-changeset-at-birth edit
(PR #12890, 2026-08-28), on a tree at 8b02f78c7.
The measurement
check-skill-line-ratchet.mjs refuses to OFFER a break directly after an ASCII , ; :
that follows a Han character (hanAsciiPunctTail), because such a break is not between two
wide characters and so survives the CSS segment-break transformation — it renders as a
space, mid-sentence, in prose that has no spaces anywhere else. That channel was shut at
its source, and the pre-existing breaks were left to be paid down opportunistically, file
by file (the ceiling comment on references/decision-analysis.md records three of them
merging back).
.claude/agents/os-dev.md still carries 8, at lines 15, 32, 87, 99, 245, 356, 361, 454
(post-PR-12890 numbering). Reproduce:
node -e 'const fs=require("node:fs");const HAN=/\p{Script=Han}/u;
const L=fs.readFileSync(".claude/agents/os-dev.md","utf8").split("\n");
const out=[];for(let i=0;i<L.length-1;i++){const t=L[i],a=t[t.length-1],b=t[t.length-2];
if(/[,;:]/.test(a)&&b&&HAN.test(b)&&L[i+1].trim()!=="")out.push(i+1);}
console.log(out.length,out.join(","));'
Why it is worth a row rather than a shrug
The defect is invisible in the source and visible only in the render, which is the inverse
of the usual reading: a reviewer reads this file as source, where the break looks like
ordinary wrapping, while the space exists only for the agent reading the RENDERED text —
and that population is every dispatched dev, once per run. This is the most-read agent
definition in the repo.
Cost, and the one trap in paying it
Cheap but not free: the file sits at 470/470 with headroom 0, so merging a break back
into its paragraph must be re-wrapped canonically and can only shrink or hold the line
count (shrinking lets the ceiling come down with it — always legitimate).
⚠️ The paydown is SELF-CONCEALING under review, and the gate's own docblock says so: a
faithful re-wrap must PRESERVE the rendered space, so it migrates out of the line break and
into a literal ", " in the source, and then looks like the re-wrap introduced a space. It
did not — it only made an existing render visible. The honest fix for prose like
必要不充分: | 实测 is to drop the space entirely (the author never wrote one), which is
what the PR above did for the two breaks inside the passage it re-flowed. Judge each site;
do not batch-convert.
Lineage
The class was found and shut in #12081; the already-literal variant of the same stray space
was recorded in #12265. Neither is open, and neither tracks this file's remaining count —
which is why this is a row rather than a comment on those.
Recording only — unassigned. Measured while landing the
skip-changeset-at-birth edit(PR #12890, 2026-08-28), on a tree at
8b02f78c7.The measurement
check-skill-line-ratchet.mjsrefuses to OFFER a break directly after an ASCII,;:that follows a Han character (
hanAsciiPunctTail), because such a break is not between twowide characters and so survives the CSS segment-break transformation — it renders as a
space, mid-sentence, in prose that has no spaces anywhere else. That channel was shut at
its source, and the pre-existing breaks were left to be paid down opportunistically, file
by file (the ceiling comment on
references/decision-analysis.mdrecords three of themmerging back).
.claude/agents/os-dev.mdstill carries 8, at lines 15, 32, 87, 99, 245, 356, 361, 454(post-PR-12890 numbering). Reproduce:
Why it is worth a row rather than a shrug
The defect is invisible in the source and visible only in the render, which is the inverse
of the usual reading: a reviewer reads this file as source, where the break looks like
ordinary wrapping, while the space exists only for the agent reading the RENDERED text —
and that population is every dispatched dev, once per run. This is the most-read agent
definition in the repo.
Cost, and the one trap in paying it
Cheap but not free: the file sits at 470/470 with headroom 0, so merging a break back
into its paragraph must be re-wrapped canonically and can only shrink or hold the line
count (shrinking lets the ceiling come down with it — always legitimate).
faithful re-wrap must PRESERVE the rendered space, so it migrates out of the line break and
into a literal
", "in the source, and then looks like the re-wrap introduced a space. Itdid not — it only made an existing render visible. The honest fix for prose like
必要不充分:|实测is to drop the space entirely (the author never wrote one), which iswhat the PR above did for the two breaks inside the passage it re-flowed. Judge each site;
do not batch-convert.
Lineage
The class was found and shut in #12081; the already-literal variant of the same stray space
was recorded in #12265. Neither is open, and neither tracks this file's remaining count —
which is why this is a row rather than a comment on those.