Found while adding the third copy's emptiness floor to the two twins (objectui#7901). Measured, not inferred. Reported rather than built: it is a widening of an existing surface, and objectui#7901's ordering was hard — floor, then census, then expansion only if the census reads zero. A third change to the same pair of files was not in it.
What
All three copies of objectui#7448's document-count pin extract a workflow's comment block before applying the same pattern. Two of the three extractions are the same; the third is not:
| copy |
extraction |
strips the # marker |
scripts/__tests__/check-doc-fence-languages.test.ts |
filter comment lines, join with a newline |
no |
scripts/__tests__/check-doc-component-types.test.ts |
filter comment lines, join with a newline |
no |
scripts/__tests__/check-links-workflow.test.ts (commentProse) |
filter comment lines, strip the leading marker, join |
yes |
The third copy's own docstring says why it strips, and the sentence is the whole finding:
Stripped, not kept: a sentence that wraps across two comment lines has a # sitting in the middle of it, and a scan that reads the raw lines cannot see a numeral and the noun it qualifies as adjacent when the line break falls between them. Removing the marker is what makes the count pin below read the header the way a person does.
That reasoning applies verbatim to the two twins, and neither does it.
The measurement
Same pattern (identical in all three copies), same input, the two extractions:
input yaml (a count wrapping at a 100-column comment line, the ordinary case in a 71-line header)
# the published site is built from 184
# pages today, so the sweep covers
name: x
twin extraction (markers kept) : "# the published site is built from 184\n# pages today, ..."
documentCounts => [] <-- INVISIBLE
third-copy extraction (stripped) : "the published site is built from 184\npages today, ..."
documentCounts => ["184 pages"] <-- caught
The mechanism: the pattern allows at most two intervening [A-Za-z]-initial words between the numeral and its noun. A bare # is not one, so the wrap defeats the match — and a # also trips the pattern's own negative lookbehind, which exists to rule out issue references.
Latent, not live
Both twin headers are clean under both extractions today, and both remain clean after objectui#7901's change:
doc-fence-languages.yml markers kept: [] markers stripped: []
doc-component-types.yml markers kept: [] markers stripped: []
check-links.yml markers kept: [] markers stripped: []
So this closes a proven hole rather than a live violation — the same footing objectui#7888 landed its own widening on.
Why it matters more than a wrapped sentence sounds
These headers are 71 and 68 comment lines, hard-wrapped. A count landing at end-of-line is not a corner case in a block that shape; it is the ordinary outcome of editing a paragraph. And the family's whole subject is a pin that reads a surface without really reading it — objectui#7901 has just added the floor for the version of that where the surface comes back empty. This is the version where the surface comes back whole and still unreadable.
⭐ It is also the third divergence found between copies of one rule in this family (objectui#7888 the pattern's narrowness, objectui#7914 two definitions inside one file, this one the extraction). Same rule, copies free to drift is the family's actual disease.
Acceptance
Both twins read their header through the same extraction the third copy uses, the pattern staying byte-identical across all three (objectui#7943's grep | sort | uniq -c = 1 distinct line proof must still hold). A positive control demonstrating a wrapped count is caught, in the file, not only in a pull request description — objectui#7914's ruling.
⚠️ Consider whether the extraction belongs in one shared module rather than a fourth hand-copy; that is the same question objectui#7966 has to answer for the scan population.
Back-links
objectui#7901 (the card this was found under), objectui#7448, objectui#7825, objectui#7888, objectui#7914, objectui#7943, objectui#7966.
Filed by the objectui#7901 developer seat, session https://claude.ai/code/session_01KbJQ1y1J12nZxYzFWhP8Q3. Left unassigned for PM triage.
Found while adding the third copy's emptiness floor to the two twins (objectui#7901). Measured, not inferred. Reported rather than built: it is a widening of an existing surface, and objectui#7901's ordering was hard — floor, then census, then expansion only if the census reads zero. A third change to the same pair of files was not in it.
What
All three copies of objectui#7448's document-count pin extract a workflow's comment block before applying the same pattern. Two of the three extractions are the same; the third is not:
#markerscripts/__tests__/check-doc-fence-languages.test.tsscripts/__tests__/check-doc-component-types.test.tsscripts/__tests__/check-links-workflow.test.ts(commentProse)The third copy's own docstring says why it strips, and the sentence is the whole finding:
That reasoning applies verbatim to the two twins, and neither does it.
The measurement
Same pattern (identical in all three copies), same input, the two extractions:
The mechanism: the pattern allows at most two intervening
[A-Za-z]-initial words between the numeral and its noun. A bare#is not one, so the wrap defeats the match — and a#also trips the pattern's own negative lookbehind, which exists to rule out issue references.Latent, not live
Both twin headers are clean under both extractions today, and both remain clean after objectui#7901's change:
So this closes a proven hole rather than a live violation — the same footing objectui#7888 landed its own widening on.
Why it matters more than a wrapped sentence sounds
These headers are 71 and 68 comment lines, hard-wrapped. A count landing at end-of-line is not a corner case in a block that shape; it is the ordinary outcome of editing a paragraph. And the family's whole subject is a pin that reads a surface without really reading it — objectui#7901 has just added the floor for the version of that where the surface comes back empty. This is the version where the surface comes back whole and still unreadable.
⭐ It is also the third divergence found between copies of one rule in this family (objectui#7888 the pattern's narrowness, objectui#7914 two definitions inside one file, this one the extraction). Same rule, copies free to drift is the family's actual disease.
Acceptance
Both twins read their header through the same extraction the third copy uses, the pattern staying byte-identical across all three (objectui#7943's
grep | sort | uniq -c= 1 distinct line proof must still hold). A positive control demonstrating a wrapped count is caught, in the file, not only in a pull request description — objectui#7914's ruling.Back-links
objectui#7901 (the card this was found under), objectui#7448, objectui#7825, objectui#7888, objectui#7914, objectui#7943, objectui#7966.
Filed by the objectui#7901 developer seat, session
https://claude.ai/code/session_01KbJQ1y1J12nZxYzFWhP8Q3. Left unassigned for PM triage.