navigation_3d generates changelog drafts and release notes from Conventional Commits,
merged PR titles, and Git tags.
The current policy is:
- development changes accumulate into a draft changelog
- stable version descriptions are frozen on release tags
- Git tags are the source of truth for release versions
Generate a draft from the latest tag to HEAD:
./scripts/release_notes.py --draft --output /tmp/release-notes.mdGenerate a draft for an explicit range:
./scripts/release_notes.py --from v0.1.0 --to HEAD --title UnreleasedThe output is grouped by commit type:
featfixdocsrefactortestchorestylebreaking
CHANGELOG.md is the repository-level rolling changelog. It is generated from the same
tag and Conventional Commit history, and can be refreshed locally or by the changelog
sync workflow:
./scripts/update_changelog.py --output CHANGELOG.mdWhen develop changes, the changelog sync workflow can open a PR that refreshes the file
using the same generator logic.
When a release tag is pushed, the repository automatically generates a GitHub Release body from the tag range and publishes it through:
This workflow uses the same generator script as the local draft flow:
If the team wants to keep a repository-local archive, the generated Markdown can be saved under:
docs/releases/<tag>.md
That archive is optional and can be updated manually from the generated output when a release is frozen.