fix(#4725): write normalization preserves tight paragraph-list shape (#4842)

* test(#4725): write normalization must not reflow untouched prose (failing first)

* fix(#4725): stop write normalization injecting a blank before a list after prose

* test(#4725): repair ordered-list fixture and list-spacing snapshot

* test(#4725): assert whole-file prose stability, fix heading-list comment

* chore(#4725): backfill changeset PR number (4842)

---------

Co-authored-by: sim <sim@local>
This commit is contained in:
Tom Boucher
2026-09-18 01:38:14 -04:00
committed by GitHub
parent c9a5cc3e12
commit 8d0b6868ae
6 changed files with 222 additions and 18 deletions

View File

@@ -2189,11 +2189,13 @@ describe('bug #950: quick-task SUMMARY must carry status: complete', () => {
const criticalBlock = lines.slice(criticalIdx, criticalEndIdx).join('\n');
assert.doesNotMatch(criticalBlock, /status: acknowledged/, 'the CRITICAL entry (and its continuation line) must NEVER be touched');
assert.match(criticalBlock, /see also: - minor typo/, 'the CRITICAL entry continuation line is preserved verbatim');
// Measured: the write seam's `_normalizeMd` (src/shell-command-projection.cts:837)
// inserts a blank line before a list item whose predecessor is a non-blank, non-list
// line — so a blank line appears between the CRITICAL continuation line and the
// "- minor typo" bullet after this write. That is repo-wide `.md`-write normalization
// (50 callers through the single write seam), not something specific to this feature.
// The write seam's `_normalizeMd` carries no before-a-bullet insertion
// rule: #3854 guarded the indented-continuation predecessor, #4725
// removed the prose-predecessor case outright. No blank line is
// injected between the CRITICAL continuation line and the "- minor
// typo" bullet by this write — repo-wide `.md`-write normalization
// (50 callers through the single write seam), not something specific
// to this feature.
assert.match(content, /- minor typo\n {2}status: acknowledged/, 'the standalone "minor typo" entry (its OWN span) now carries the marker');
const after = audit(tmpDir);