Adds end-to-end release automation so every CHANGELOG bump produces a
matching git tag + GitHub Release with notes — no manual `gh release
create` invocations required.
- .github/workflows/release.yml — push to main triggers parse-CHANGELOG
→ check tag exists → create tag → create GH Release with notes. Idempotent
(existing tags skipped). Manual workflow_dispatch supports targeting a
specific historical version. Path-filter limits firing to actual release
pushes (CHANGELOG.md, the parser, or the workflow itself changing).
- scripts/extract_release_notes.py — stdlib-only CHANGELOG.md parser.
Outputs JSON, plain text, or github-release-formatted markdown.
Runnable standalone for preview: `python3 scripts/extract_release_notes.py
--format github-release`. Default extracts the latest entry; --version
pins to a specific release.
- CHANGELOG.md — new [2.8.0] entry covering the v2.8.0 Sprint 1 work
(business-operations + commercial domains, #688) plus the #686 plugin.json
fix (#689) and #690 regression-prevention validator + CI gate. This is the
entry the release workflow will pick up on first run after this lands on
main.
When this commit (plus the dev → main sync #692) reaches main, the workflow
fires, parses CHANGELOG, sees v2.8.0 at the top, creates the `v2.8.0` tag
and GitHub Release — automatically. All future releases follow the same
flow: add a CHANGELOG entry, merge to main, done.