td-feature-release — cut and push a version
You convert QA-passed features into a released, pushed version. Project policy authorizes autonomous commit + tag + push. Autonomy ≠ recklessness — the hard rails below always hold.
Gate first
Do not release unless td-qa's report is PASS for everything shipping. Features marked FAIL or critical-UNVERIFIED are held for the next cycle — say which, don't quietly drop or ship them.
Procedure
- CHANGELOG (
CHANGELOG.md) — Keep a Changelog format. Add a dated version section with ### Added / ### Changed / ### Fixed. One bullet per feature: what it delivers + its CLI command (pull these from the integrator's shipped-features list). Update the version link reference at the bottom to the new tag.
- Version bump (SemVer) — minor for new features, patch for fixes. Bump every manifest that carries a version and confirm they're identical afterward (a cross-manifest version mismatch is a classic release bug):
package.json, the .dxt/plugin manifest, and any version synced into scripts/setup.mjs / docs. Grep the repo for the old version string to catch them all.
- Commit — match the repo's commit style (read
git log: feat/fix/docs/chore(release)). Stage by explicit path, message via HEREDOC, end with the Co-Authored-By: Codex trailer.
- Tag
vX.Y.Z and push the commit + tag.
Hard safety rails (always, even autonomous)
- Stage by explicit path — never
git add -A / git add .. Concurrent agents may have in-flight files on this branch; stage only what this release intends.
- Never commit secrets (
.env, credentials, tokens). If staged, unstage and flag.
- New commits only — never
--amend a shared/published commit.
- Never skip hooks (
--no-verify / --no-gpg-sign). If a pre-commit hook fails, the commit did NOT happen — fix the cause, re-stage, and make a NEW commit (do not amend).
- Never force-push to
main/master. If push is rejected (remote ahead), fetch + reconcile; never force a shared branch.
Output
The CHANGELOG edit + version bumps + commit + tag + push, and a release note at _workspace/05_release.md: the version, commit SHA, tag, what shipped, and what was held back (with reason). Done when the tagged commit is pushed and the tree is clean (except deliberately-unstaged concurrent work).
Follow-up releases
If _workspace/05_release.md exists, read the last shipped version, compute the next bump from it, and add a new CHANGELOG section — never re-tag the same version.
1---2name: td-feature-release3description: Release tdmcp: write the Keep-a-Changelog entry, bump the SemVer version across every manifest, then (autonomously, per project policy) commit, tag, and push — gated on a td-qa PASS, with hard git safety rails. Use when releasing/shipping/cutting a tdmcp version, writing the CHANGELOG, bumping the version, or tagging a release.4---56# td-feature-release — cut and push a version78You convert QA-passed features into a released, pushed version. Project policy authorizes autonomous commit + tag + push. Autonomy ≠ recklessness — the hard rails below always hold.910## Gate first1112Do not release unless `td-qa`'s report is **PASS** for everything shipping. Features marked FAIL or critical-UNVERIFIED are held for the next cycle — say which, don't quietly drop or ship them.1314## Procedure15161. **CHANGELOG** (`CHANGELOG.md`) — Keep a Changelog format. Add a dated version section with `### Added` / `### Changed` / `### Fixed`. One bullet per feature: what it delivers + its CLI command (pull these from the integrator's shipped-features list). Update the version link reference at the bottom to the new tag.172. **Version bump (SemVer)** — minor for new features, patch for fixes. Bump **every** manifest that carries a version and confirm they're identical afterward (a cross-manifest version mismatch is a classic release bug): `package.json`, the `.dxt`/plugin manifest, and any version synced into `scripts/setup.mjs` / docs. Grep the repo for the old version string to catch them all.183. **Commit** — match the repo's commit style (read `git log`: `feat`/`fix`/`docs`/`chore(release)`). Stage by explicit path, message via HEREDOC, end with the `Co-Authored-By: Codex` trailer.194. **Tag** `vX.Y.Z` and **push** the commit + tag.2021## Hard safety rails (always, even autonomous)2223- **Stage by explicit path — never `git add -A` / `git add .`.** Concurrent agents may have in-flight files on this branch; stage only what this release intends.24- **Never commit secrets** (`.env`, credentials, tokens). If staged, unstage and flag.25- **New commits only — never `--amend`** a shared/published commit.26- **Never skip hooks** (`--no-verify` / `--no-gpg-sign`). If a pre-commit hook fails, the commit did NOT happen — fix the cause, re-stage, and make a NEW commit (do not amend).27- **Never force-push to `main`/`master`.** If push is rejected (remote ahead), fetch + reconcile; never force a shared branch.2829## Output3031The CHANGELOG edit + version bumps + commit + tag + push, and a release note at `_workspace/05_release.md`: the version, commit SHA, tag, what shipped, and what was held back (with reason). Done when the tagged commit is pushed and the tree is clean (except deliberately-unstaged concurrent work).3233## Follow-up releases3435If `_workspace/05_release.md` exists, read the last shipped version, compute the next bump from it, and add a new CHANGELOG section — never re-tag the same version.