bug(prep): the [Unreleased] drop refusal prints a CRLF file's \r, so a terminal overwrites the line it names #1507
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
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
frankenbit/release-toolkit#1507
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
rt preprefuses[Unreleased]text it would drop (prep.UnreleasedDropError, from #1486), naming each line. The refusal prints eachUncarriedLine.Textverbatim. On a CRLFCHANGELOG.md, every record keeps its trailing\r, and that\rreaches the terminal.Measured
This was a Go probe on
main@2060ed1, 2026-10-02. It made the same callsrt prepmakes:parser.UnreleasedContent(clBytes)(cmd/rt/prep.go:195),changelog.UnreleasedStartLine(clBytes)(:298), thenprep.Compose. The CHANGELOG used CRLF line endings, with this[Unreleased]:Composereturns*prep.UnreleasedDropError. Detection is correct, with the same lines as on LF input. The refusal's second line is:In a terminal, the
\rreturns the cursor to column 0. The reason after it is then drawn over the start of the line. Here the reason is the longer part, soCHANGELOG.md:5: Prose.is no longer visible.Why it matters
The refusal exists to point the operator at the exact lines to fix (#1486). #1485 made this repo check out LF, but an adopter's
CHANGELOG.mdcan still be CRLF. There, the refusal shows reasons without the lines they belong to.Acceptance criteria
rt prep's refusal contains no raw\r, and it names the same file lines as on LF input. — DONE @ #1508 (de49186, reviewed asde49186).TestCompose_refusalOnACRLFChangelogreads the CHANGELOG with the two callsrt prepmakes and asserts that the CRLF refusal is byte-equal to the LF one, naming lines 5, 7 and 9.UncarriedLine.Textstays verbatim; only the rendering strips the\r. — DONE @ #1508 (de49186, reviewed asde49186). The newUncarriedLine.Renderstrips it at print time, and bothrt prepand the fold-back refusal use it. The test checks that each CRLFTextkeeps its\r.internal/prep/unreleased_drop_test.go. — DONE @ #1508 (de49186, reviewed asde49186). The new test pins the whole LF refusal and passes against2060ed1's code. The literal tail pin is unchanged.mainand mutation-verified (AGENTS.md section 8, Axis B). — DONE @ #1508 (de49186, reviewed asde49186). The test is red against2060ed1's code at the raw-\rand CRLF-vs-LF assertions. Mutants: 6/6 killed at5682563. Atde49186, the red-on-main check, M1, M5, M7 and an added-kind probe were re-run, and review 7169 reproduced them.Notes
changelog.FoldBackDropError.Describe, with an unexportedunCRininternal/changelog/foldback.go. One exported rendering helper used by both refusals would keep them from drifting. #1493 did the same for the accepted-headings note and the remedy (changelog.AcceptedHeadingsNote,changelog.UncarriedRemedy).Landed on
mainasde4918684856ff3ef364de2381866e5e7576bd42via #1508 (rebase merge, 2026-10-02 13:23:04).5682563andde49186landed with their reviewed SHAs.git range-diff 2060ed1..de49186 2060ed1..origin/mainshows=for both, and the trees match.de49186, the merged head. It was submitted at 13:08:48, after the HOLD for the review-7168 nit was released (HOLD comment 113946 at 12:52:20, released by 113949 at 12:57:37), so it follows the AGENTS.md section 6.2 order.5682563) and 7169 (atde49186) were posted as COMMENT, because that account authored the PR. Both give the verdict APPROVE, and 7169 re-read the head after the HOLD was released.de49186: 30/30 success, read right before the merge. push:main onde49186, at the time of writing: 14 success, 1 failure, and 1 pending (release / fire-cut, waiting to run). The failure isgo-ci / record reviewed vs landed commit (push). Its log (run 18842, job 2) readscomment page 2 repeated the previous non-empty page; endpoint did not advance; refusing to grade, which is the recorder defect in #1495, not this change.check-self-bootstrap (push)is green, as the PR's re-pin section predicted.rt preppicked up the change frommainwith no re-pin.ac-closure-checkcontext onde49186passed.claude/1507-prep-refusal-crlfwas deleted after the range-diff check.All four acceptance criteria are ticked above (DONE @ #1508). Closing by hand.