Files
msd-core/.changeset/steady-pumas-click.md
Tom Boucher dc9b299b4e fix(#2359): CHANGELOG 1.4.0 Cursor commands entry cites #805, not #803 (#3252)
* test(#2359): failing-first regression for the 1.4.0 Cursor commands citation

The `## [1.4.0]` CHANGELOG entry for the `.cursor/commands/` surface carries
the trailing reference (#803) — the Cline PR, cited correctly by the entry two
lines below. The Cursor surface shipped in #805 (feat(#785)).

Adds four behavioral cases to the owning module's test file, asserting through
parseChangelog (the same parser cmdExtract/cmdVerify/cmdRender use) rather than
raw text matching:

  1. the Cursor bullet cites 805               - FAILS before the fix
  2. the adjacent Cline bullet still cites 803 - guards a global s/803/805/
  3. exactly one Cursor bullet exists          - guards drop/duplicate
  4. the two bullets cite different PRs        - the defect as an invariant

Folded into tests/changeset-serialize.test.cjs rather than a new
bug-2359-*.test.cjs file, per scripts/lint-regression-test-names.cjs.

Refs #2359

* fix(#2359): CHANGELOG 1.4.0 Cursor commands entry cites #805, not #803

The `## [1.4.0]` entry for `gsd install --cursor` writing
`.cursor/commands/gsd-<name>.md` carried the trailing reference (#803). That
PR is `feat(#787): elevate Cline` — cited correctly by the entry two lines
below. The Cursor slash-command surface shipped in #805 (`feat(#785): write
.cursor/commands/ Cursor 1.6 slash-command surface`).

Two adjacent bullets therefore claimed one PR, and only the second was right.
The trailing (#NNNN) is machine-parsed by parseChangelog and consumed by
`changeset extract`, so the wrong number is live data, not only prose — and it
had already propagated to a human reporter (#2341, quoted there as
"#785 / #803").

Single-occurrence, line-anchored edit. The Cline entry's (#803) is correct and
is deliberately untouched; the regression test added in the preceding commit
asserts both, so a global s/803/805/ fails.

Prose is unchanged, including the "both surfaces are written on every install"
clause the issue explicitly certifies as accurate.

Fixes #2359

* chore(#2359): changeset fragment for the Cursor commands citation fix

* test(#2359): assert bullet cardinality before reading it

Review findings, one root cause: each of the four cases re-derived the bullet
list, re-filtered by marker, then destructured `const [x] = ...` and read `.pr`
unguarded. A reworded or deleted entry therefore died with

  TypeError: Cannot read properties of undefined (reading 'pr')

instead of naming what was missing. The repetition was also duplicated logic
across all four cases.

Adds locateBullet(version, marker, label), which asserts exactly one match
before returning, and folds the two cardinality guards into one case covering
both entries. Failure mode verified: a marker matching nothing now raises
AssertionError "expected exactly one bogus bullet in the 1.4.0 section,
found 0".

Refs #2359

* chore(#2359): backfill changeset pr number (#3252)

---------

Co-authored-by: sim <sim@local>
2026-08-09 12:27:04 -04:00

366 B

type, pr
type pr
Fixed 3252

The 1.4.0 changelog entry for Cursor slash commands now credits the PR that shipped it — the entry describing gsd install --cursor writing .cursor/commands/ cited #803 (the Cline PR, which the adjacent entry cites correctly) instead of #805, so anyone tracing the Cursor commands surface landed in an unrelated change. (#2359)