Put the changelog in the release notes, and show them before publishing #123

Merged
cruelacid merged 2 commits from worktree-release-notes-gh into main 2026-09-23 17:20:50 +01:00
Owner

Closes #84. Part of #77. It is stacked on #83.

  • releaseNotes() leads with the manifest version's ledger section, and keeps the install instructions and sha256(main.js).
  • A release with no ledger section is refused before anything is committed.
  • The dry-run exit prints the full notes. It is the only human checkpoint in a plugin release.
  • --release also tags this repo plugin-v<ver> on the source commit.
  • e2e.yml's push trigger now excludes tags: a paths:-only filter fired on the seven tag pushes today.

Checked against a scratch clone of the mirror: the dry run printed the 0.1.5 notes, and with the section renamed it refused, leaving the clone's head unmoved. assertAuthorship is untouched.

Changelog

Each GitHub release now lists what changed in that version, above the install and verification instructions.

🤖 Generated with Claude Code

https://claude.ai/code/session_01StURdiv33xnMfE2XRyg8Lt

Closes #84. Part of #77. It is stacked on #83. - `releaseNotes()` leads with the manifest version's ledger section, and keeps the install instructions and `sha256(main.js)`. - A release with no ledger section is **refused before anything is committed**. - The dry-run exit **prints the full notes**. It is the only human checkpoint in a plugin release. - `--release` also tags this repo `plugin-v<ver>` on the source commit. - `e2e.yml`'s push trigger now excludes tags: a `paths:`-only filter fired on the seven tag pushes today. Checked against a scratch clone of the mirror: the dry run printed the 0.1.5 notes, and with the section renamed it refused, leaving the clone's head unmoved. `assertAuthorship` is untouched. ## Changelog Each GitHub release now lists what changed in that version, above the install and verification instructions. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01StURdiv33xnMfE2XRyg8Lt
Publish the plugin's changelog in the mirror, generated from the ledger
Some checks failed
Release note / release-note (pull_request) Successful in 15s
CI / e2e (pull_request) Successful in 4m49s
CI / build (pull_request) Successful in 6m17s
CI / promote (pull_request) Has been skipped
CI / promote (push) Has been cancelled
CI / e2e (push) Has been cancelled
CI / build (push) Has been cancelled
6187b4e989
The mirror is what users install from, and it shipped no record of what any
release changed. CHANGELOG.md is now staged from docs/changelog-plugin.md —
released sections only, since Unreleased is a draft under review — the same
way the README is generated rather than kept. It is on the required list,
so a staging bug fails the build instead of shipping without it, and the
README links it from Installing.

verify() scans it like every other staged file. Checked both ways: a line
naming a private document in the ledger fails --check, and dropping the
write reports it missing.

Part of #77. Closes #83.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01StURdiv33xnMfE2XRyg8Lt
releaseNotes() was a fixed template: install instructions, a digest and a
source sha, identical for every release. It now leads with the version's
section of docs/changelog-plugin.md, and keeps the install instructions and
the sha256(main.js) that ties the artefact to the source.

The dry-run exit is the only human checkpoint in a plugin release, and the
notes were an inline argument to gh release create, never printed. It now
prints them in full, exactly as they would be published.

A release with no ledger section for manifest.version is refused before
anything is committed. On --release the source commit is also tagged
plugin-v<version> here and pushed, which is where changelog.mjs draft
starts the next range.

Checked against a scratch clone of the mirror: the dry run printed the
0.1.5 section, install and verification; with the section renamed, it
refused and the clone's head did not move. assertAuthorship is untouched.

Part of #77. Closes #84.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01StURdiv33xnMfE2XRyg8Lt
Stop a tag push from starting the real-Obsidian suite
Some checks failed
Release note / release-note (pull_request) Successful in 12s
CI / e2e (pull_request) Successful in 4m39s
CI / build (pull_request) Successful in 6m16s
CI / promote (pull_request) Has been skipped
CI / promote (push) Has been cancelled
CI / e2e (push) Has been cancelled
CI / build (push) Has been cancelled
e2e / multi (push) Failing after 9m14s
d4ca5f6241
e2e.yml's push trigger had only a paths filter, and a tag push matches it
whatever changed: pushing the seven release tags on 23 September queued
seven full e2e runs in the gate's concurrency group, ahead of main's own.
branches: ['**'] excludes tags without narrowing branches. It matters from
here on because publish-plugin.mjs now pushes a plugin-v* tag per release.

Part of #77, #84.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01StURdiv33xnMfE2XRyg8Lt
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Nectenda/nectenda!123
No description provided.