QMAI Stable Release
Use this workflow only in the Mochocyang/QMAI repository. Preserve the user's authorization boundary: preparing a release does not authorize pushing, tagging, or publishing unless the user requested those external mutations.
Release invariants
- Push the release commit to
mainby itself. Never pushmainand the version tag in one command or atomic push. - Do not wait for main CI before tagging. Main CI does not compile release binaries; only the tag workflow does.
- Never create the tag while local required validation is failing.
- Never overwrite, move, or force-push
mainor a release tag. - Stop if
origin/mainmoves away from the release commit before tagging. Reconcile the new remote state instead of tagging an older commit. - Use an annotated tag named
v<package-version>and verify that the remote tag resolves to the release commit.
Workflow
Confirm the repository and release target.
- Verify the remote is
Mochocyang/QMAI. - Require a clean worktree before switching or pulling.
- Fetch
origin/mainand tags, switch tomain, and update with--ff-only. - Confirm the requested version is a stable semantic version and the tag does not already exist locally or remotely.
- Verify the remote is
Update the complete QMAI release surface.
package.json- root package version and root package entry in
package-lock.json src-tauri/Cargo.toml- the
qmaipackage entry insrc-tauri/Cargo.lock src-tauri/tauri.conf.jsonsrc/lib/changelog.tssrc/lib/changelog.spec.ts- Derive release notes from commits since the previous version tag. Do not invent features or copy stale notes.
Validate before committing.
- Confirm every version source has the exact requested version.
- Run
node scripts/release-notes.mjs <version>and inspect that it returns the intended Chinese notes rather than the generic fallback. - Run
npx vitest run src/lib/changelog.spec.ts scripts/release-notes.spec.mjs. - Run
npm run test:mocks,npm run build, andgit diff --checkunless the user explicitly narrows validation. - If a required check fails, do not tag. Separate a verified pre-existing baseline failure from a release regression and obtain explicit authorization before proceeding despite it.
Commit and push only
main.- Use a Chinese Conventional Commit such as
chore(release): 升级版本至 <version>. - Re-fetch
origin/mainimmediately before pushing and confirm it is the release commit's parent. - Push only
main. Record the exact release commit SHA.
- Use a Chinese Conventional Commit such as
Tag after
mainis on the release commit.- Fetch
origin/mainand tags again. - Require local
HEAD,origin/main, and the recorded release SHA to match. - Reconfirm that
v<version>does not exist. - Create an annotated tag on the recorded SHA, then push only that tag in a separate command.
- Fetch
Verify delivery.
- Verify remote
mainand the dereferenced remote tag both resolve to the recorded release SHA. - Confirm
QMAI Multi-Platform Releasestarted for that tag and SHA. - Report the release workflow URL and current status. Do not claim release completion while jobs or required assets are pending.
- Verify remote