This protocol is mandatory for every oh-my-codex release. It exists to prevent release notes, changelogs, and GitHub release bodies from understating the actual shipped compare range.
- Identify the previous released tag and candidate ref.
- Example:
PREV=v0.16.1,NEXT=v0.16.2,CANDIDATE=dev.
- Example:
- Verify the previous tag is an ancestor of the candidate.
git merge-base --is-ancestor "$PREV" "$CANDIDATE"
- Generate the commit and PR inventory from the exact compare range.
git log --oneline --decorate "$PREV..$CANDIDATE"git log --format='%h %s' "$PREV..$CANDIDATE" | grep -Eo '#[0-9]+' | sort -ugh pr list --state merged --limit 100 --json number,title,mergedAt,author,url,mergeCommit
- Cross-check that every merge commit / PR in the compare range is represented in release notes or intentionally excluded as internal-only.
Release collateral must be based on the compare-range inventory, not on the last blocker fixed during release review.
Required files:
CHANGELOG.mddocs/release-notes-<version>.mddocs/qa/release-readiness-<version>.mdRELEASE_BODY.md
Required release-note sections:
- Highlights / major user-visible changes
- Fixes / compatibility notes
- Merged PR inventory with PR numbers and links
- Validation evidence
- Full changelog compare link
If a release includes major workflow changes (for example $ultragoal, $ralph, $team, wiki, setup, native hooks, MCP state, or Codex goal-mode behavior), those changes must appear in the Highlights section even if the final pre-ship blocker was unrelated.
RELEASE_BODY.md is a template consumed by dist/scripts/generate-release-body.js.
Before pushing a release tag, run:
node dist/scripts/generate-release-body.js \
--template RELEASE_BODY.md \
--out /tmp/RELEASE_BODY.generated.md \
--current-tag "$NEXT" \
--previous-tag "$PREV" \
--repo Yeachan-Heo/oh-my-codexHard requirements:
- The template contains
## Contributors. - The generated body still includes all major compare-range changes.
- The generated body includes the correct
**Full Changelog**line. - The contributors section is reviewed against the merged PR authors and matches the prior release-train sentence format; do not blindly accept shortlog-only generated names when release-prep commits distort the author list.
Before merging to main or tagging:
- Local gates appropriate to the touched surface pass.
devCI is green for the candidate commit.docs/qa/release-readiness-<version>.mdrecords:- compare range
- PR inventory
- local gates
- CI run IDs
- known gaps
- The release notes are reviewed against
git log "$PREV..$CANDIDATE", not just against the latest fix.
- Merge the verified candidate to
main. - Wait for
mainCI green. - Create/push the annotated tag only after release collateral is complete.
- Wait for the tag-triggered release workflow to pass.
- Verify:
- GitHub release exists and is non-draft/non-prerelease.
- Native assets and manifest are attached.
npm view oh-my-codex versionreturns the release version.
- Fast-forward
devto the shippedmaincommit and wait for final shipped-commitdevCI green. - Immediately bump
devpackage/plugin/Cargo metadata to the next development base version (for example, after publishingv0.18.17, commit0.18.18ondev) so dev installs display asv<next>-dev-<revision>instead of sharing the just-published stable base.
If release notes are found incomplete after npm publish:
- Do not move a published npm provenance tag unless the release artifact itself is invalid and maintainers explicitly choose an emergency retag.
- Commit corrected release collateral to
dev, then promote it tomainthrough the normal CI path. - Regenerate the GitHub release body from the corrected
RELEASE_BODY.md. - Update the existing GitHub release body with
gh release edit "$NEXT" --notes-file /tmp/RELEASE_BODY.generated.md. - Record the correction in
docs/qa/release-readiness-<version>.md.
A release is complete only when all are true:
mainand the release tag point to the intended shipped commit, anddeveither still points to that shipped commit or contains only documented post-publish corrections plus the next development base-version bump.- GitHub release workflow is green.
- npm shows the expected version.
- GitHub release body accurately summarizes the full compare range.
- Release-readiness evidence includes CI and publication proof.