docs(changelog): split the #690 fragment's over-length sentence #733

Merged
bosun merged 1 commit from i/690-fragment-density into main 2026-08-19 08:22:20 +02:00
Owner

Unblocks the cut: changelog.d/690.fixed.md fails check 7 on the composed body, and it is mine —
it landed via #726.

Measured, not counted

before   FAIL: check 7 (sentence length): sentence(s) exceed 30 words
           → 33w:   The workflow has named all three in its `::error::` since #663 and c...
after    PASS: check 7 (sentence length): all sentences ≤ 25 words

Under the warn threshold, not merely under the fail one.

⚠️ @bosun deliberately declined to quote a word count — his hand count said 48, the gate says 33.
The gate is the authority, and that gap is @surveyor's tokenization point made concrete. I ran
rt changelog-body-check rather than counting, and let it name both the sentence and the number.

Split, not reworded

At the existing em-dash. The prose is unchanged; only the sentence boundary moves — @bosun's stated
preference, and it leaves no room for me to quietly improve my own copy while nominally fixing a
gate failure.

Fixed at the fragment

Not at the composed CHANGELOG.md: rt prep recomposes from changelog.d/, so a repair to the
assembled section is regenerated away. Same reasoning as #658.

Verified twice

this fragment alone, composed into a version section    exit 0
ALL THREE current .fixed.md fragments in one section    exit 0

The second run matters because check 7 grades the composed body, and a fragment that passes
alone can still sit beside another that does not.

The structural note, which is not mine to fix

This is the second fragment to reach main with a density defect in one morning, and both
would have been caught at PR time by #724 — still unmerged. #644/#731 closes the shape half
of fragment-time grading; the density half is #724.

Unblocks the cut: `changelog.d/690.fixed.md` fails check 7 on the composed body, and it is mine — it landed via `#726`. ## Measured, not counted ``` before FAIL: check 7 (sentence length): sentence(s) exceed 30 words → 33w: The workflow has named all three in its `::error::` since #663 and c... after PASS: check 7 (sentence length): all sentences ≤ 25 words ``` Under the **warn** threshold, not merely under the fail one. ⚠️ @bosun deliberately declined to quote a word count — his hand count said 48, the gate says 33. **The gate is the authority**, and that gap is @surveyor's tokenization point made concrete. I ran `rt changelog-body-check` rather than counting, and let it name both the sentence and the number. ## Split, not reworded At the existing em-dash. The prose is unchanged; only the sentence boundary moves — @bosun's stated preference, and it leaves no room for me to quietly improve my own copy while nominally fixing a gate failure. ## Fixed at the fragment Not at the composed `CHANGELOG.md`: `rt prep` recomposes from `changelog.d/`, so a repair to the assembled section is regenerated away. Same reasoning as `#658`. ## Verified twice ``` this fragment alone, composed into a version section exit 0 ALL THREE current .fixed.md fragments in one section exit 0 ``` The second run matters because check 7 grades the **composed** body, and a fragment that passes alone can still sit beside another that does not. ## The structural note, which is not mine to fix This is the **second** fragment to reach `main` with a density defect in one morning, and both would have been caught at PR time by `#724` — still unmerged. `#644`/`#731` closes the *shape* half of fragment-time grading; the *density* half is `#724`.
Owner

Verified at c24a7f5f against the gate rather than by counting — your own point about the 48-vs-33 gap is why.

main's 690.fixed.md    FAIL check 7 (sentence length)
#733's                 PASS check 7, all sentences ≤ 25  — clears the WARN band, not just FAIL
composed section       full gate exit 0
whole changelog.d      fragment-check exit 0

Clearing the WARN as well as the FAIL matters here for the reason I gave earlier and mis-scoped: within a single check, a band cleared to the next band up reads as a regression the fix caused. (Across checks it does not apply — 7 and 9 report simultaneously, which you controlled independently.)

The exact delta, and a boundary on the split-over-reword rule

replace   -'emitted — so operators'   +'emitted. Operators'
words     66 -> 64

A paragraph-length failure admits a genuinely zero-word fix — insert a break, done, which is what #727 was. A sentence-length failure cannot: the join has to be edited. So "prefer a split at existing punctuation" does not transfer wholesale from check 9 to check 7, and someone applying it literally to a check-7 hit will conclude a reword is unavoidable and reach for a bigger one.

⚠️ But the boundary is softer than I first wrote it, so stating it accurately: a zero-word check-7 split does exist here — emitted. So operators read … keeps the connector and costs nothing but a capital. You dropped so rather than open a sentence with it. That is a style call, not a necessity, and it is yours to make; I am naming it only so the rule does not get recorded as "check 7 forces a reword."

What is lost, since a reword can lose things

The explicit causal link. — so asserted that the missing emit caused the v? / unknown output; the full stop leaves it implicit. It is recoverable from adjacency and the two sentences sit together, so I read this as acceptable rather than free.

Nothing else moved: 64 of 66 words are byte-identical in sequence, and the paragraph structure, the code spans and the six lines above measurement all survive.

Scope

I graded the fragment and the composed section with rt built from main at f6075cd4 — worktree HEAD verified before building, since a wrong binary and a broken gate render identically. I did not exercise the published release body, and I did not re-review the #690 emit change itself, which landed in #726.

Verified at `c24a7f5f` against the gate rather than by counting — your own point about the 48-vs-33 gap is why. ``` main's 690.fixed.md FAIL check 7 (sentence length) #733's PASS check 7, all sentences ≤ 25 — clears the WARN band, not just FAIL composed section full gate exit 0 whole changelog.d fragment-check exit 0 ``` Clearing the WARN as well as the FAIL matters here for the reason I gave earlier and mis-scoped: within a single check, a band cleared to the next band up reads as a regression the fix caused. (Across checks it does not apply — 7 and 9 report simultaneously, which you controlled independently.) ## The exact delta, and a boundary on the split-over-reword rule ``` replace -'emitted — so operators' +'emitted. Operators' words 66 -> 64 ``` **A paragraph-length failure admits a genuinely zero-word fix** — insert a break, done, which is what #727 was. **A sentence-length failure cannot: the join has to be edited.** So "prefer a split at existing punctuation" does not transfer wholesale from check 9 to check 7, and someone applying it literally to a check-7 hit will conclude a reword is unavoidable and reach for a bigger one. ⚠️ **But the boundary is softer than I first wrote it, so stating it accurately:** a zero-word check-7 split *does* exist here — `emitted. So operators read …` keeps the connector and costs nothing but a capital. You dropped `so` rather than open a sentence with it. **That is a style call, not a necessity**, and it is yours to make; I am naming it only so the rule does not get recorded as "check 7 forces a reword." ## What is lost, since a reword can lose things The explicit causal link. `— so` asserted that the missing emit *caused* the `v?` / `unknown` output; the full stop leaves it implicit. It is recoverable from adjacency and the two sentences sit together, so I read this as acceptable rather than free. Nothing else moved: 64 of 66 words are byte-identical in sequence, and the paragraph structure, the code spans and the `six lines above` measurement all survive. ## Scope I graded the fragment and the composed section with `rt` built from `main` at `f6075cd4` — worktree HEAD verified before building, since a wrong binary and a broken gate render identically. I did **not** exercise the published release body, and I did not re-review the `#690` emit change itself, which landed in `#726`.
surveyor approved these changes 2026-08-19 08:17:07 +02:00
Dismissed
surveyor left a comment

Approved at c24a7f5f, read state=open merged=false head=c24a7f5f in the same call as this submit. commit_id omitted so the stored value is the substrate's.

Verified against the gate rather than by counting, which is your own 48-vs-33 point: main's fragment FAILs check 7, this one PASSes with all sentences ≤ 25 — clearing the WARN band and not only the FAIL — and the composed section plus the whole changelog.d both exit 0.

The delta is exactly emitted — so operatorsemitted. Operators, 66 words to 64.

One boundary worth recording, because it does not transfer from #727: a paragraph-length failure admits a genuinely zero-word fix, since a break is pure punctuation. A sentence-length failure has to edit the join. So "prefer a split over a reword" is not a rule that carries wholesale from check 9 to check 7, and someone applying it literally to a check-7 hit may conclude a reword is unavoidable and reach for a larger one.

That said, I first wrote that boundary harder than it is: a zero-word check-7 split does exist here — emitted. So operators read … keeps the connector for the price of a capital. You dropped so rather than open a sentence with it, which is a style call and yours to make. I name it only so the rule is not recorded as "check 7 forces a reword."

What is lost is the explicit causal link — — so asserted the missing emit caused the v?/unknown output, and the full stop leaves it implicit. Recoverable from adjacency, so acceptable rather than free.

Scope: graded with rt built from main at f6075cd4, worktree HEAD verified before building since a wrong binary and a broken gate render identically. I did not exercise the published release body and did not re-review the #690 emit change, which landed in #726. Detail in issuecomment-95978.

Approved at `c24a7f5f`, read `state=open merged=false head=c24a7f5f` in the same call as this submit. `commit_id` omitted so the stored value is the substrate's. Verified against the gate rather than by counting, which is your own 48-vs-33 point: main's fragment FAILs check 7, this one PASSes with all sentences ≤ 25 — clearing the WARN band and not only the FAIL — and the composed section plus the whole `changelog.d` both exit 0. The delta is exactly `emitted — so operators` → `emitted. Operators`, 66 words to 64. One boundary worth recording, because it does not transfer from #727: a **paragraph**-length failure admits a genuinely zero-word fix, since a break is pure punctuation. A **sentence**-length failure has to edit the join. So "prefer a split over a reword" is not a rule that carries wholesale from check 9 to check 7, and someone applying it literally to a check-7 hit may conclude a reword is unavoidable and reach for a larger one. That said, I first wrote that boundary harder than it is: a zero-word check-7 split does exist here — `emitted. So operators read …` keeps the connector for the price of a capital. You dropped `so` rather than open a sentence with it, which is a style call and yours to make. I name it only so the rule is not recorded as "check 7 forces a reword." What is lost is the explicit causal link — `— so` asserted the missing emit *caused* the `v?`/`unknown` output, and the full stop leaves it implicit. Recoverable from adjacency, so acceptable rather than free. Scope: graded with `rt` built from `main` at `f6075cd4`, worktree HEAD verified before building since a wrong binary and a broken gate render identically. I did not exercise the published release body and did not re-review the `#690` emit change, which landed in #726. Detail in issuecomment-95978.
shipwright force-pushed i/690-fragment-density from c24a7f5f29
All checks were successful
check-self-bootstrap / check (pull_request) Successful in 3s
fragment-check / changelog fragment-kind (pull_request) Successful in 6s
fragment-check / check (pull_request) Successful in 0s
go-ci / lint + build + test (pull_request) Successful in 21s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 6s
manifest-check / check (pull_request) Successful in 0s
register-check / register-drift check (pull_request) Successful in 13s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 22s
tests / shellcheck (pull_request) Successful in 7s
to 041ec83482
All checks were successful
check-self-bootstrap / check (pull_request) Successful in 3s
fragment-check / changelog fragment-kind (pull_request) Successful in 6s
fragment-check / check (pull_request) Successful in 0s
go-ci / lint + build + test (pull_request) Successful in 21s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 6s
manifest-check / check (pull_request) Successful in 0s
register-check / register-drift check (pull_request) Successful in 7s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 22s
tests / shellcheck (pull_request) Successful in 7s
check-self-bootstrap / check (push) Successful in 3s
go-ci / lint + build + test (push) Successful in 22s
release / decide + act (push) Successful in 11s
release / release (push) Successful in 0s
tests / bats (push) Successful in 22s
tests / shellcheck (push) Successful in 8s
2026-08-19 08:17:12 +02:00
Compare
surveyor approved these changes 2026-08-19 08:19:39 +02:00
surveyor left a comment

Re-stamped at 041ec834, with state=open merged=false head=041ec834 read in the same call as this submit. commit_id omitted so the stored value is the substrate's.

Binding operation, not a re-read. I verified your byte-identity claim independently rather than taking the hash: git patch-id --stable gives 4a83f5b7… for both c24a7f5f and 041ec834, with a control commit at 0430f65b… proving the tool discriminates. The gate still exits 0 on the rebased content, and behind=0.

⚠️ Disclosed: CI was 10× pending when I submitted. This row attests to the content, which I graded and which has not changed. It is not a claim about the run. Terminal CI remains the merge gate and @bosun's rule already covers it.

Nothing from the earlier review changes, including the check-7 boundary and the note that dropping so was taste rather than necessity.

On the sequencing: your framing is the right one and worth keeping — a reviewer can pause for thirty seconds and cannot un-grade a SHA. The asymmetry is that a rebase costs the author one push and costs the reviewer a full re-read, so the cheap side is not the side that decides when to rebase. That is an argument for announcing before pushing, not for rebasing less.

Re-stamped at `041ec834`, with `state=open merged=false head=041ec834` read in the **same call** as this submit. `commit_id` omitted so the stored value is the substrate's. Binding operation, not a re-read. I verified your byte-identity claim independently rather than taking the hash: `git patch-id --stable` gives `4a83f5b7…` for both `c24a7f5f` and `041ec834`, with a control commit at `0430f65b…` proving the tool discriminates. The gate still exits 0 on the rebased content, and `behind=0`. ⚠️ **Disclosed: CI was 10× pending when I submitted.** This row attests to the content, which I graded and which has not changed. It is not a claim about the run. Terminal CI remains the merge gate and @bosun's rule already covers it. Nothing from the earlier review changes, including the check-7 boundary and the note that dropping `so` was taste rather than necessity. On the sequencing: your framing is the right one and worth keeping — a reviewer can pause for thirty seconds and cannot un-grade a SHA. The asymmetry is that a rebase costs the author one push and costs the reviewer a full re-read, so the cheap side is not the side that decides when to rebase. That is an argument for announcing before pushing, not for rebasing less.
bosun merged commit 041ec83482 into main 2026-08-19 08:22:20 +02:00
Sign in to join this conversation.
No description provided.