docs: changelog headings match what each release shipped

Merged
MH
11d ago
+121-17

Summary

CHANGELOG.md only. Every entry now sits under the release that first shipped it, with that release's date.

WasNow
## [1.4.0] (no date)## [1.4.0] — 2026-10-15, contents unchanged (#103 is the only user-facing PR in v1.3.0..v1.4.0)
## [1.3.0] — 2026-10-13unchanged (v1.2.1..v1.3.0 = #96–#100, the bullets cite their issues #92–#95)
## [1.2.1] — 2026-09-30 (with 1.2.0, same day)split: 1.2.1 keeps only "daisyui 2.x is allowed" (#89, the only PR in v1.2.0..v1.2.1); 1.2.0 — 2026-09-30 (tagged; never published to RubyGems) gets the upgrade notes, Removed, the rest of Changed, Fixed and Added (#78, #83, #72, #87)
## [1.1.1] and earliersplit into 1.0.0, 1.0.1 (#49 SEO, closes #48), 1.0.2 (#50 og:image fix), 1.0.5 (#55 Landing), 1.0.6 (#57 hero logo)
—new short entries, from the PR title/body, for releases that had none: 1.0.3 (#52), 1.0.4 (#53, #54), 1.0.7 (#56, #63), 1.0.8 (#66, #68), 1.1.0 (#67, #70, #74), 1.1.1 (#75)

No entry was reworded; ## [Unreleased] stays at the top (nothing merged since v1.4.0).

How it was determined

  • git log --oneline vA..vB for every consecutive tag pair v1.0.0 … v1.4.0, mapping each bullet to the earliest tag whose range holds its PR (or, for the oldest bullets, the commit that added the bullet: #38, #39, #42 are all ancestors of v1.0.0).
  • Dates are the GitHub release publish dates (UTC), which match RubyGems. Two lightweight tags carry a next-day local (+02:00) commit date: v1.0.2 (release 2026-07-03T22:15Z) and v1.0.7 (release 2026-08-03T22:33Z); the UTC date is used.
  • 1.2.0's "never published" note comes from the existing daisyui bullet and is confirmed by the RubyGems versions list, which has 1.2.1 but no 1.2.0.
  • Not given entries: PRs with nothing for a gem consumer (#51 dogfood test suite, #58/#60 Claude commands, #73 dev-dependency bumps with the root lockfile gitignored, #102 dev dependency, plus version bumps).

Note for the maintainer: RubyGems also lists a 0.1.0 (2026-07-03T18:42Z, seven minutes before 1.0.0) that has no tag or GitHub release, so it gets no heading here.

Test plan

  • Every line of the old file is still present (a line-tally diff shows only the three replaced headings missing)
  • Only CHANGELOG.md changed
  • CI green

https://claude.ai/code/session_01Pu6VAMxKeUE1gfNwDrbPZ4


Summary by cubic

Reorganizes CHANGELOG.md so every entry sits under the release that first shipped it. The lumped 1.2.1 (with 1.2.0) and 1.1.1 and earlier blocks are split into one heading per release, the 1.4.0 heading gets its publish date, and releases that had no entries (1.0.3, 1.0.4, 1.0.7, 1.0.8, 1.1.0, 1.1.1) get short ones.

  • Entries were mapped to releases by git log over each tag range; dates come from the GitHub release publish dates.
  • No entry was reworded and ## [Unreleased] is unchanged. Only CHANGELOG.md changes.