From 9fe9da9830a57e55e376be6abd3225b16d11091a Mon Sep 17 00:00:00 2001 From: Tom Boucher Date: Tue, 21 Jul 2026 19:32:51 -0400 Subject: [PATCH] fix(#2488): strip leading terminators so changeset bullets survive re-parse (#2492) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(#2488): strip leading terminators so changeset bullets survive re-parse A fragment body beginning with a line terminator rendered as an empty `- ` bullet followed by an orphaned paragraph. `parseChangelog` treats a non-indented line as terminating a bullet, so `github-release-notes.cjs` silently dropped the entry when re-parsing CHANGELOG.md to build the GitHub Release body. Two independent causes, both in scripts/changeset/parse.cjs: 1. `extractDocsExempt` stripped trailing terminators but not leading ones. `DOCS_EXEMPT_RE` is `^...$` under /m, so removing a first-line `` marker left the `\n` that `$` does not consume. 2. `parseFragment` preserved the post-frontmatter body verbatim, so a blank line between the closing `---` and the first content line produced the same leading `\n` with no marker involved. 8 of 256 pending fragments were affected, split 4/4 across the two causes — including the OpenCode MCP binding, the pi extension, and the EoS adapters, all of which would have vanished from the v1.8.0 release notes. Regression tests cover both causes in LF and CRLF form, plus an end-to-end serializeChangelog -> parseChangelog round-trip that pins the user-visible defect. Co-Authored-By: Claude Opus 4.8 * chore(#2488): regenerate golden install fixtures for parse.cjs scripts/ ships in the npm package and the installer, so the golden install-parity fixtures record a content hash for every shipped file. Editing scripts/changeset/parse.cjs drifts that hash and fails all 18 per-runtime parity tests. Regenerated via `npm run gen:golden`. The diff is exactly one line per fixture — the scripts/changeset/parse.cjs hash — with no unrelated drift. Co-Authored-By: Claude Opus 4.8 --------- Co-authored-by: Claude Opus 4.8 --- scripts/changeset/parse.cjs | 26 +++++ tests/changeset-parse.test.cjs | 94 +++++++++++++++++++ .../golden-install-parity/antigravity.json | 2 +- .../golden-install-parity/augment.json | 2 +- .../golden-install-parity/claude-local.json | 2 +- .../golden-install-parity/claude.json | 2 +- .../fixtures/golden-install-parity/cline.json | 2 +- .../golden-install-parity/codebuddy.json | 2 +- .../fixtures/golden-install-parity/codex.json | 2 +- .../golden-install-parity/copilot.json | 2 +- .../golden-install-parity/cursor.json | 2 +- .../golden-install-parity/hermes.json | 2 +- .../fixtures/golden-install-parity/kilo.json | 2 +- .../fixtures/golden-install-parity/kimi.json | 2 +- .../golden-install-parity/opencode.json | 2 +- tests/fixtures/golden-install-parity/pi.json | 2 +- .../fixtures/golden-install-parity/qwen.json | 2 +- .../fixtures/golden-install-parity/trae.json | 2 +- .../golden-install-parity/windsurf.json | 2 +- .../fixtures/golden-install-parity/zcode.json | 2 +- 20 files changed, 138 insertions(+), 18 deletions(-) diff --git a/scripts/changeset/parse.cjs b/scripts/changeset/parse.cjs index 4787b0cfc..30a057eca 100644 --- a/scripts/changeset/parse.cjs +++ b/scripts/changeset/parse.cjs @@ -65,10 +65,23 @@ function extractDocsExempt(body) { // is CRLF-aware so Windows-authored fragments don't leave residual `\r` // characters that would shift the `(#NNNN)` PR suffix to a blank line in // the rendered CHANGELOG.md / GitHub release-notes bullet. + // + // Both leading AND trailing line terminators are stripped. `DOCS_EXEMPT_RE` + // removes the marker's own text but its `$` anchor (multiline mode) does + // not consume the `\n` that terminates the marker's line. When the marker + // is the FIRST line of the body, that leftover `\n` becomes the new first + // character of `body` — serializeChangelog then emits an empty `- ` bullet + // followed by an orphaned continuation paragraph, and parseChangelog's + // bullet-continuation check (which requires a leading `\s`) treats that + // non-indented paragraph as terminating the bullet, silently dropping the + // entry's content on re-parse. Stripping leading terminators here closes + // that gap the same way the trailing strip already does for the opposite + // (marker-last) position. const cleaned = body .replace(DOCS_EXEMPT_RE, '') .replace(/[ \t\r]+$/gm, '') // strip trailing \r/spaces on each line .replace(/(?:\r?\n){3,}/g, '\n\n') // collapse 3+ blank lines (CRLF-aware) + .replace(/^[\r\n]+/, '') // strip terminators left by a first-line marker .replace(/[\r\n]+$/, ''); // strip every trailing line terminator return { docsExempt: reason, body: cleaned }; } @@ -105,6 +118,19 @@ function parseFragment(src) { if (body.endsWith('\r\n')) verbatimBody = body.slice(0, -2); else if (body.endsWith('\n')) verbatimBody = body.slice(0, -1); else verbatimBody = body; + // Some fragments have a blank line between the closing frontmatter `---` + // and the first line of actual content (purely a stylistic authoring + // choice — the blank line carries no significant content, unlike + // indentation inside a code block). Strip any such leading blank line(s) + // here, mirroring the trailing-terminator strip above. Without this, + // `body` starts with `\n`/`\r\n`, serializeChangelog emits an empty `- ` + // bullet followed by an orphaned paragraph, and parseChangelog's + // continuation check (requires a leading `\s` on the line) treats that + // non-indented paragraph as terminating the bullet — silently dropping + // the fragment's content on re-parse. This is the same downstream failure + // mode as a first-line docs-exempt marker (see extractDocsExempt below); + // it just arises from plain authoring whitespace instead of a marker. + verbatimBody = verbatimBody.replace(/^(?:[ \t]*\r?\n)+/, ''); const { docsExempt, body: visibleBody } = extractDocsExempt(verbatimBody); if (!visibleBody.trim()) return { ok: false, reason: FRAGMENT_ERROR.EMPTY_BODY }; diff --git a/tests/changeset-parse.test.cjs b/tests/changeset-parse.test.cjs index 4c71721e0..aa1f09193 100644 --- a/tests/changeset-parse.test.cjs +++ b/tests/changeset-parse.test.cjs @@ -27,6 +27,48 @@ describe('changeset parse: fragment file → typed record (#2975)', () => { assert.equal(r.fragment.body, '```js\nlet x = 1;\n```'); }); + test('strips a blank line between the frontmatter close and the body content (no marker involved)', () => { + // Same downstream failure mode as a first-line docs-exempt marker, but + // triggered purely by authoring whitespace (a blank line right after the + // closing `---`) with no docs-exempt marker present at all — a distinct + // root cause than extractDocsExempt's marker-stripping path, discovered + // via the .changeset/ fleet scan while regression-testing #1929. + const src = '---\ntype: Changed\npr: 2036\n---\n\n**Bold text describing the fix.** More detail follows.\n'; + const r = parseFragment(src); + assert.equal(r.ok, true); + assert.equal(r.fragment.docsExempt, null); + assert.doesNotMatch(r.fragment.body, /^[\r\n]/); + assert.match(r.fragment.body, /^\*\*Bold text describing the fix\.\*\*/); + }); + + test('CRLF variant: blank line between frontmatter close and body content is stripped identically', () => { + const src = '---\r\ntype: Changed\r\npr: 2036\r\n---\r\n\r\n**Bold text describing the fix.** More detail follows.\r\n'; + const r = parseFragment(src); + assert.equal(r.ok, true); + assert.doesNotMatch(r.fragment.body, /^[\r\n]/); + assert.doesNotMatch(r.fragment.body, /[\r]/); + const lfSrc = '---\ntype: Changed\npr: 2036\n---\n\n**Bold text describing the fix.** More detail follows.\n'; + assert.equal(r.fragment.body, parseFragment(lfSrc).fragment.body); + }); + + test('end-to-end: leading-blank-line fragment survives serializeChangelog → parseChangelog round-trip', () => { + const src = '---\ntype: Changed\npr: 2036\n---\n\n**Bold text describing the fix.** More detail follows.\n'; + const r = parseFragment(src); + assert.equal(r.ok, true); + + const { serializeChangelog, parseChangelog } = require(path.join(__dirname, '..', 'scripts', 'changeset', 'serialize.cjs')); + const out = serializeChangelog({ + releaseHeader: { version: '1.0.0', date: '2026-01-01' }, + sections: [{ type: 'Changed', bullets: [{ pr: r.fragment.pr, body: r.fragment.body }] }], + priorChangelog: null, + }); + const parsed = parseChangelog(out); + assert.equal(parsed.releases.length, 1); + assert.deepEqual(parsed.releases[0].sections, [ + { type: 'Changed', bullets: [{ body: '**Bold text describing the fix.** More detail follows.', pr: 2036 }] }, + ]); + }); + test('exposes a frozen FRAGMENT_ERROR enum with the documented codes', () => { assert.deepEqual( Object.keys(FRAGMENT_ERROR).sort(), @@ -176,6 +218,58 @@ describe('changeset parse: docs-exempt extraction (#3213)', () => { assert.match(r.fragment.body, /bug fix\./); }); + test('marker as the FIRST line of the body does not leave a leading line terminator (root-cause fix)', () => { + // Before the fix: DOCS_EXEMPT_RE's `$` (multiline mode) does not consume + // the `\n` terminating the marker's own line, so when the marker is the + // first line, `body` was left starting with `\n`. serializeChangelog then + // emits an empty `- ` bullet followed by an orphaned paragraph, and + // parseChangelog's continuation check (requires leading `\s`) treats the + // non-indented paragraph as terminating the bullet — dropping the + // content on re-parse. + const src = '---\ntype: Fixed\npr: 1929\n---\n\nBold text describing the fix.\n'; + const r = parseFragment(src); + assert.equal(r.ok, true); + assert.equal(r.fragment.docsExempt, 'first-line marker'); + assert.doesNotMatch(r.fragment.body, /^[\r\n]/); + assert.match(r.fragment.body, /Bold text describing the fix\./); + }); + + test('CRLF-authored fragment with a FIRST-line marker: same leading-terminator fix applies', () => { + const src = '---\r\ntype: Fixed\r\npr: 1929\r\n---\r\n\r\nBold text describing the fix.\r\n'; + const r = parseFragment(src); + assert.equal(r.ok, true); + assert.equal(r.fragment.docsExempt, 'first-line marker'); + assert.doesNotMatch(r.fragment.body, /^[\r\n]/); + assert.doesNotMatch(r.fragment.body, /[\r]/); + // LF- and CRLF-authored variants of the same fragment must produce the + // identical body — the recurring CRLF bug class (#1658/#1668/#2206/ + // #2449/#2450) means these two must never diverge. + const lfSrc = '---\ntype: Fixed\npr: 1929\n---\n\nBold text describing the fix.\n'; + const lfResult = parseFragment(lfSrc); + assert.equal(r.fragment.body, lfResult.fragment.body); + }); + + test('end-to-end: FIRST-line marker fragment survives serializeChangelog → parseChangelog round-trip (#1929 pin)', () => { + // This is the assertion that pins the user-visible defect: a dropped + // bullet in GitHub release notes (scripts/changeset/github-release-notes.cjs), + // built by feeding the CHANGELOG.md text through parseChangelog. + const src = '---\ntype: Fixed\npr: 1929\n---\n\nBold text describing the fix.\n'; + const r = parseFragment(src); + assert.equal(r.ok, true); + + const { serializeChangelog, parseChangelog } = require(path.join(__dirname, '..', 'scripts', 'changeset', 'serialize.cjs')); + const out = serializeChangelog({ + releaseHeader: { version: '1.0.0', date: '2026-01-01' }, + sections: [{ type: 'Fixed', bullets: [{ pr: r.fragment.pr, body: r.fragment.body }] }], + priorChangelog: null, + }); + const parsed = parseChangelog(out); + assert.equal(parsed.releases.length, 1); + assert.deepEqual(parsed.releases[0].sections, [ + { type: 'Fixed', bullets: [{ body: 'Bold text describing the fix.', pr: 1929 }] }, + ]); + }); + test('marker on its own line trailing a fragment body still wins (real-marker positive case)', () => { const src = '---\ntype: Added\npr: 3213\n---\n' + diff --git a/tests/fixtures/golden-install-parity/antigravity.json b/tests/fixtures/golden-install-parity/antigravity.json index 712c87335..6850d50e7 100644 --- a/tests/fixtures/golden-install-parity/antigravity.json +++ b/tests/fixtures/golden-install-parity/antigravity.json @@ -358,7 +358,7 @@ "scripts/changeset/github-release-notes.cjs": "795677f0c009b132", "scripts/changeset/lint.cjs": "23cb53f77a6ea180", "scripts/changeset/new.cjs": "4991e21fd17f5541", - "scripts/changeset/parse.cjs": "f9a949cbcab56445", + "scripts/changeset/parse.cjs": "c0a9bbc3914aee04", "scripts/changeset/render.cjs": "e47bc3e1587c3cae", "scripts/changeset/serialize.cjs": "ac0b8fe6f87cdb0e", "scripts/fix-slash-commands.cjs": "0519742531ff3529", diff --git a/tests/fixtures/golden-install-parity/augment.json b/tests/fixtures/golden-install-parity/augment.json index 40e0957f8..2f87ab10d 100644 --- a/tests/fixtures/golden-install-parity/augment.json +++ b/tests/fixtures/golden-install-parity/augment.json @@ -428,7 +428,7 @@ "scripts/changeset/github-release-notes.cjs": "795677f0c009b132", "scripts/changeset/lint.cjs": "23cb53f77a6ea180", "scripts/changeset/new.cjs": "4991e21fd17f5541", - "scripts/changeset/parse.cjs": "f9a949cbcab56445", + "scripts/changeset/parse.cjs": "c0a9bbc3914aee04", "scripts/changeset/render.cjs": "e47bc3e1587c3cae", "scripts/changeset/serialize.cjs": "ac0b8fe6f87cdb0e", "scripts/fix-slash-commands.cjs": "0519742531ff3529", diff --git a/tests/fixtures/golden-install-parity/claude-local.json b/tests/fixtures/golden-install-parity/claude-local.json index d5553e30e..f22190637 100644 --- a/tests/fixtures/golden-install-parity/claude-local.json +++ b/tests/fixtures/golden-install-parity/claude-local.json @@ -427,7 +427,7 @@ "scripts/changeset/github-release-notes.cjs": "795677f0c009b132", "scripts/changeset/lint.cjs": "23cb53f77a6ea180", "scripts/changeset/new.cjs": "4991e21fd17f5541", - "scripts/changeset/parse.cjs": "f9a949cbcab56445", + "scripts/changeset/parse.cjs": "c0a9bbc3914aee04", "scripts/changeset/render.cjs": "e47bc3e1587c3cae", "scripts/changeset/serialize.cjs": "ac0b8fe6f87cdb0e", "scripts/fix-slash-commands.cjs": "0519742531ff3529", diff --git a/tests/fixtures/golden-install-parity/claude.json b/tests/fixtures/golden-install-parity/claude.json index d628bd527..243a6fc0d 100644 --- a/tests/fixtures/golden-install-parity/claude.json +++ b/tests/fixtures/golden-install-parity/claude.json @@ -356,7 +356,7 @@ "scripts/changeset/github-release-notes.cjs": "795677f0c009b132", "scripts/changeset/lint.cjs": "23cb53f77a6ea180", "scripts/changeset/new.cjs": "4991e21fd17f5541", - "scripts/changeset/parse.cjs": "f9a949cbcab56445", + "scripts/changeset/parse.cjs": "c0a9bbc3914aee04", "scripts/changeset/render.cjs": "e47bc3e1587c3cae", "scripts/changeset/serialize.cjs": "ac0b8fe6f87cdb0e", "scripts/fix-slash-commands.cjs": "0519742531ff3529", diff --git a/tests/fixtures/golden-install-parity/cline.json b/tests/fixtures/golden-install-parity/cline.json index 063c6cb01..45f33abe1 100644 --- a/tests/fixtures/golden-install-parity/cline.json +++ b/tests/fixtures/golden-install-parity/cline.json @@ -332,7 +332,7 @@ "scripts/changeset/github-release-notes.cjs": "795677f0c009b132", "scripts/changeset/lint.cjs": "23cb53f77a6ea180", "scripts/changeset/new.cjs": "4991e21fd17f5541", - "scripts/changeset/parse.cjs": "f9a949cbcab56445", + "scripts/changeset/parse.cjs": "c0a9bbc3914aee04", "scripts/changeset/render.cjs": "e47bc3e1587c3cae", "scripts/changeset/serialize.cjs": "ac0b8fe6f87cdb0e", "scripts/fix-slash-commands.cjs": "0519742531ff3529", diff --git a/tests/fixtures/golden-install-parity/codebuddy.json b/tests/fixtures/golden-install-parity/codebuddy.json index fd6a1379a..c49a5a298 100644 --- a/tests/fixtures/golden-install-parity/codebuddy.json +++ b/tests/fixtures/golden-install-parity/codebuddy.json @@ -428,7 +428,7 @@ "scripts/changeset/github-release-notes.cjs": "795677f0c009b132", "scripts/changeset/lint.cjs": "23cb53f77a6ea180", "scripts/changeset/new.cjs": "4991e21fd17f5541", - "scripts/changeset/parse.cjs": "f9a949cbcab56445", + "scripts/changeset/parse.cjs": "c0a9bbc3914aee04", "scripts/changeset/render.cjs": "e47bc3e1587c3cae", "scripts/changeset/serialize.cjs": "ac0b8fe6f87cdb0e", "scripts/fix-slash-commands.cjs": "0519742531ff3529", diff --git a/tests/fixtures/golden-install-parity/codex.json b/tests/fixtures/golden-install-parity/codex.json index 3efbf4d1f..4cec23e93 100644 --- a/tests/fixtures/golden-install-parity/codex.json +++ b/tests/fixtures/golden-install-parity/codex.json @@ -437,7 +437,7 @@ "scripts/changeset/github-release-notes.cjs": "795677f0c009b132", "scripts/changeset/lint.cjs": "23cb53f77a6ea180", "scripts/changeset/new.cjs": "4991e21fd17f5541", - "scripts/changeset/parse.cjs": "f9a949cbcab56445", + "scripts/changeset/parse.cjs": "c0a9bbc3914aee04", "scripts/changeset/render.cjs": "e47bc3e1587c3cae", "scripts/changeset/serialize.cjs": "ac0b8fe6f87cdb0e", "scripts/fix-slash-commands.cjs": "0519742531ff3529", diff --git a/tests/fixtures/golden-install-parity/copilot.json b/tests/fixtures/golden-install-parity/copilot.json index b6545a26d..9ba02f53a 100644 --- a/tests/fixtures/golden-install-parity/copilot.json +++ b/tests/fixtures/golden-install-parity/copilot.json @@ -331,7 +331,7 @@ "scripts/changeset/github-release-notes.cjs": "795677f0c009b132", "scripts/changeset/lint.cjs": "23cb53f77a6ea180", "scripts/changeset/new.cjs": "4991e21fd17f5541", - "scripts/changeset/parse.cjs": "f9a949cbcab56445", + "scripts/changeset/parse.cjs": "c0a9bbc3914aee04", "scripts/changeset/render.cjs": "e47bc3e1587c3cae", "scripts/changeset/serialize.cjs": "ac0b8fe6f87cdb0e", "scripts/fix-slash-commands.cjs": "0519742531ff3529", diff --git a/tests/fixtures/golden-install-parity/cursor.json b/tests/fixtures/golden-install-parity/cursor.json index c4dcf0b79..d7a5ca745 100644 --- a/tests/fixtures/golden-install-parity/cursor.json +++ b/tests/fixtures/golden-install-parity/cursor.json @@ -406,7 +406,7 @@ "scripts/changeset/github-release-notes.cjs": "795677f0c009b132", "scripts/changeset/lint.cjs": "23cb53f77a6ea180", "scripts/changeset/new.cjs": "4991e21fd17f5541", - "scripts/changeset/parse.cjs": "f9a949cbcab56445", + "scripts/changeset/parse.cjs": "c0a9bbc3914aee04", "scripts/changeset/render.cjs": "e47bc3e1587c3cae", "scripts/changeset/serialize.cjs": "ac0b8fe6f87cdb0e", "scripts/fix-slash-commands.cjs": "0519742531ff3529", diff --git a/tests/fixtures/golden-install-parity/hermes.json b/tests/fixtures/golden-install-parity/hermes.json index 203dc7b70..fbf0d2398 100644 --- a/tests/fixtures/golden-install-parity/hermes.json +++ b/tests/fixtures/golden-install-parity/hermes.json @@ -357,7 +357,7 @@ "scripts/changeset/github-release-notes.cjs": "795677f0c009b132", "scripts/changeset/lint.cjs": "23cb53f77a6ea180", "scripts/changeset/new.cjs": "4991e21fd17f5541", - "scripts/changeset/parse.cjs": "f9a949cbcab56445", + "scripts/changeset/parse.cjs": "c0a9bbc3914aee04", "scripts/changeset/render.cjs": "e47bc3e1587c3cae", "scripts/changeset/serialize.cjs": "ac0b8fe6f87cdb0e", "scripts/fix-slash-commands.cjs": "0519742531ff3529", diff --git a/tests/fixtures/golden-install-parity/kilo.json b/tests/fixtures/golden-install-parity/kilo.json index 388473bb7..df9b47f9d 100644 --- a/tests/fixtures/golden-install-parity/kilo.json +++ b/tests/fixtures/golden-install-parity/kilo.json @@ -430,7 +430,7 @@ "scripts/changeset/github-release-notes.cjs": "795677f0c009b132", "scripts/changeset/lint.cjs": "23cb53f77a6ea180", "scripts/changeset/new.cjs": "4991e21fd17f5541", - "scripts/changeset/parse.cjs": "f9a949cbcab56445", + "scripts/changeset/parse.cjs": "c0a9bbc3914aee04", "scripts/changeset/render.cjs": "e47bc3e1587c3cae", "scripts/changeset/serialize.cjs": "ac0b8fe6f87cdb0e", "scripts/fix-slash-commands.cjs": "0519742531ff3529", diff --git a/tests/fixtures/golden-install-parity/kimi.json b/tests/fixtures/golden-install-parity/kimi.json index 1ddb7297c..41b26045a 100644 --- a/tests/fixtures/golden-install-parity/kimi.json +++ b/tests/fixtures/golden-install-parity/kimi.json @@ -393,7 +393,7 @@ "scripts/changeset/github-release-notes.cjs": "795677f0c009b132", "scripts/changeset/lint.cjs": "23cb53f77a6ea180", "scripts/changeset/new.cjs": "4991e21fd17f5541", - "scripts/changeset/parse.cjs": "f9a949cbcab56445", + "scripts/changeset/parse.cjs": "c0a9bbc3914aee04", "scripts/changeset/render.cjs": "e47bc3e1587c3cae", "scripts/changeset/serialize.cjs": "ac0b8fe6f87cdb0e", "scripts/fix-slash-commands.cjs": "0519742531ff3529", diff --git a/tests/fixtures/golden-install-parity/opencode.json b/tests/fixtures/golden-install-parity/opencode.json index ffdc3f271..3d8bd5a30 100644 --- a/tests/fixtures/golden-install-parity/opencode.json +++ b/tests/fixtures/golden-install-parity/opencode.json @@ -430,7 +430,7 @@ "scripts/changeset/github-release-notes.cjs": "795677f0c009b132", "scripts/changeset/lint.cjs": "23cb53f77a6ea180", "scripts/changeset/new.cjs": "4991e21fd17f5541", - "scripts/changeset/parse.cjs": "f9a949cbcab56445", + "scripts/changeset/parse.cjs": "c0a9bbc3914aee04", "scripts/changeset/render.cjs": "e47bc3e1587c3cae", "scripts/changeset/serialize.cjs": "ac0b8fe6f87cdb0e", "scripts/fix-slash-commands.cjs": "0519742531ff3529", diff --git a/tests/fixtures/golden-install-parity/pi.json b/tests/fixtures/golden-install-parity/pi.json index 0c5c73a82..a997d3883 100644 --- a/tests/fixtures/golden-install-parity/pi.json +++ b/tests/fixtures/golden-install-parity/pi.json @@ -324,7 +324,7 @@ "scripts/changeset/github-release-notes.cjs": "795677f0c009b132", "scripts/changeset/lint.cjs": "23cb53f77a6ea180", "scripts/changeset/new.cjs": "4991e21fd17f5541", - "scripts/changeset/parse.cjs": "f9a949cbcab56445", + "scripts/changeset/parse.cjs": "c0a9bbc3914aee04", "scripts/changeset/render.cjs": "e47bc3e1587c3cae", "scripts/changeset/serialize.cjs": "ac0b8fe6f87cdb0e", "scripts/fix-slash-commands.cjs": "0519742531ff3529", diff --git a/tests/fixtures/golden-install-parity/qwen.json b/tests/fixtures/golden-install-parity/qwen.json index 97c3ce513..ac252e85b 100644 --- a/tests/fixtures/golden-install-parity/qwen.json +++ b/tests/fixtures/golden-install-parity/qwen.json @@ -357,7 +357,7 @@ "scripts/changeset/github-release-notes.cjs": "795677f0c009b132", "scripts/changeset/lint.cjs": "23cb53f77a6ea180", "scripts/changeset/new.cjs": "4991e21fd17f5541", - "scripts/changeset/parse.cjs": "f9a949cbcab56445", + "scripts/changeset/parse.cjs": "c0a9bbc3914aee04", "scripts/changeset/render.cjs": "e47bc3e1587c3cae", "scripts/changeset/serialize.cjs": "ac0b8fe6f87cdb0e", "scripts/fix-slash-commands.cjs": "0519742531ff3529", diff --git a/tests/fixtures/golden-install-parity/trae.json b/tests/fixtures/golden-install-parity/trae.json index ff5c2cab9..8caa9b50a 100644 --- a/tests/fixtures/golden-install-parity/trae.json +++ b/tests/fixtures/golden-install-parity/trae.json @@ -329,7 +329,7 @@ "scripts/changeset/github-release-notes.cjs": "795677f0c009b132", "scripts/changeset/lint.cjs": "23cb53f77a6ea180", "scripts/changeset/new.cjs": "4991e21fd17f5541", - "scripts/changeset/parse.cjs": "f9a949cbcab56445", + "scripts/changeset/parse.cjs": "c0a9bbc3914aee04", "scripts/changeset/render.cjs": "e47bc3e1587c3cae", "scripts/changeset/serialize.cjs": "ac0b8fe6f87cdb0e", "scripts/fix-slash-commands.cjs": "0519742531ff3529", diff --git a/tests/fixtures/golden-install-parity/windsurf.json b/tests/fixtures/golden-install-parity/windsurf.json index e9b637d20..7a65a4c05 100644 --- a/tests/fixtures/golden-install-parity/windsurf.json +++ b/tests/fixtures/golden-install-parity/windsurf.json @@ -331,7 +331,7 @@ "scripts/changeset/github-release-notes.cjs": "795677f0c009b132", "scripts/changeset/lint.cjs": "23cb53f77a6ea180", "scripts/changeset/new.cjs": "4991e21fd17f5541", - "scripts/changeset/parse.cjs": "f9a949cbcab56445", + "scripts/changeset/parse.cjs": "c0a9bbc3914aee04", "scripts/changeset/render.cjs": "e47bc3e1587c3cae", "scripts/changeset/serialize.cjs": "ac0b8fe6f87cdb0e", "scripts/fix-slash-commands.cjs": "0519742531ff3529", diff --git a/tests/fixtures/golden-install-parity/zcode.json b/tests/fixtures/golden-install-parity/zcode.json index 6e59d951e..49951300b 100644 --- a/tests/fixtures/golden-install-parity/zcode.json +++ b/tests/fixtures/golden-install-parity/zcode.json @@ -400,7 +400,7 @@ "scripts/changeset/github-release-notes.cjs": "795677f0c009b132", "scripts/changeset/lint.cjs": "23cb53f77a6ea180", "scripts/changeset/new.cjs": "4991e21fd17f5541", - "scripts/changeset/parse.cjs": "f9a949cbcab56445", + "scripts/changeset/parse.cjs": "c0a9bbc3914aee04", "scripts/changeset/render.cjs": "e47bc3e1587c3cae", "scripts/changeset/serialize.cjs": "ac0b8fe6f87cdb0e", "scripts/fix-slash-commands.cjs": "0519742531ff3529",