Files
gstack/ship/sections/changelog.md
Garry Tanandcapy-ai[bot] e744bfe994 v1.91.353.0 fix(ship): Step 12 keeps VERSION on --keep-current, adds bump never, and waits for the owner's answer before an unattended bump (GST-380) (#3666)
* test(ship): failing-first Step 12 keep-current refusal and unattended early bump write (GST-380)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* fix(ship): Step 12 keeps VERSION on --keep-current, adds bump never, and waits for the owner's answer before an unattended bump (GST-380)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* test: regenerate ship SKILL goldens (GST-380)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* fix: pre-landing review fixes (answer gate covers ALREADY_BUMPED --version writes; typed session rows; never drift and --answer rejection cases)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* fix: pre-landing review fixes (the answer gate names every flag that decides the write; Version Gate and validate understand bump never)

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* fix: under bump never a release PR that moves VERSION takes the Version Gate's ordinary rules

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

* docs(changelog): fragment for GST-380 Step 12 keep-current and bump never

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>

---------

Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
2026-10-31 06:07:36 +00:00

2.9 KiB

Step 13: CHANGELOG (auto-generate)

  1. Read CHANGELOG.md header to know the format.

  2. First, enumerate every commit on the branch:

    git log origin/<base>..HEAD --oneline
    

    Copy the full list. Count the commits. You will use this as a checklist.

  3. Read the full diff to understand what each commit actually changed:

    git diff origin/<base>
    
  4. Group commits by theme before writing anything. Common themes:

    • New features / capabilities
    • Performance improvements
    • Bug fixes
    • Dead code removal / cleanup
    • Infrastructure / tooling / tests
    • Refactoring
  5. Write the CHANGELOG entry covering ALL groups:

    • If existing CHANGELOG entries on the branch already cover some commits, replace them with one unified entry for the new version
    • Categorize changes into applicable sections:
      • ### Added — new features
      • ### Changed — changes to existing functionality
      • ### Fixed — bug fixes
      • ### Removed — removed features
    • Write concise, descriptive bullet points
    • Insert after the observed file header, before the first release entry, dated today
    • Format: ## [X.Y.Z.W] - YYYY-MM-DD
    • Voice: Lead with what the user can now do that they couldn't before. Use plain language, not implementation details. Never mention TODOS.md, internal tracking, or contributor-facing details.
  6. Cross-check: Compare your CHANGELOG entry against the commit list from step 2. Every user-facing change in that list must be represented; add any that is missing. Commits with no user-facing effect (merges, version bumps, fixes to work introduced earlier on this branch) need no bullet. The entry must reflect every user-facing theme.

Do NOT ask the user to describe changes. Infer from the diff and commit history.

  1. Lint the entry: ~/.claude/skills/gstack/bin/gstack-prose-lint CHANGELOG.md --base origin/<base> --gate reads only the lines this branch added; rewrite each PROSE: line it names and rerun until the trailer is PROSE_LINT: ok.

NO_VERSION (Step 12): skip this step; write no CHANGELOG entry or version header.

Kept (Step 12 VERSION: <v> kept): no version header. Put the entry where the repo's own rule puts unit-PR notes (its CHANGELOG preamble or a fragment directory it names), else under ## [Unreleased], never under a released heading.

No CHANGELOG: when the policy's changelog is null, or the file it names (CHANGELOG.md by default) is absent at HEAD, print one line, CHANGELOG: skipped (none at <path>), write nothing and never create the file; Step 19's PR body carries the release notes instead. A repository with neither a version source nor a CHANGELOG ships with both lines printed and a receipt whose version is "none" (docs/ship-policy.md#ship-receipt).