Prepare ai-tester releases, version bumps, changelog updates, npm run publish:{type} runs, release tags, and missing-tag recovery. Use when asked to release ai-tester, choose a patch/minor/major version, update the changelog for a release, publish a package version, push release tags, or create a missing vX.Y.Z tag for an already-versioned release.
Use this skill when preparing or repairing an ai-tester release. Keep the workflow conservative: inspect first, ask before release mutations, and include only developer-facing package changes in release notes.
package.json, CHANGELOG.md, and git tags as the release sources of truth.skills/ai-tester/SKILL.md as user-facing guidance for consuming projects, not contributor guidance for this library repo.skills/ai-tester/SKILL.md fully reflects recent user-facing package, CLI, docs, config, migration, and workflow changes.vX.Y.Z for git tags and changelog commit messages.X.Y.Z without v for CHANGELOG.md headings.vX.Y.Z tag as the release baseline.npm run publish:{type}, creating tags, or pushing.Follow this sequence exactly.
Read the current state:
package.json for the current version and publish scriptsCHANGELOG.md for the existing Keep a Changelog format and compare linksgit tag --list --sort=-version:refname for existing vX.Y.Z tagsgit status --short --branch to confirm the working tree stateIf the working tree has uncommitted changes, stop and ask the user whether those changes should be handled first. Do not ignore them silently.
Identify the latest release tag, then inspect full commits since it:
git log <latest-v-tag>..HEAD
Classify each commit by user impact:
Recommend exactly one semantic version bump: patch, minor, or major.
Ask the user to confirm the bump before publishing. It is acceptable to update a changelog draft before confirmation, but do not run npm run publish:{type} until the user confirms.
Update CHANGELOG.md using the existing format:
## [X.Y.Z] - YYYY-MM-DDUnreleased bullets into the new version section## [Unreleased][Unreleased] compare link to https://github.com/gerukin/ai-tester/compare/vX.Y.Z...HEAD[X.Y.Z] compare link from the previous release tag to vX.Y.ZCommit only the changelog release preparation change:
git add CHANGELOG.md
git commit -m "docs: update changelog for vX.Y.Z"
Run the confirmed publish script:
npm run publish:patch
# or: npm run publish:minor
# or: npm run publish:major
The publish script compiles and runs npm version, which updates package version files, creates the version commit, and creates the release tag.
Push commits first, then tags:
git push
git push --tags
If any command fails, stop, report the failure, and do not continue to later release steps until the failure is understood.
Use this path only when the package has already been versioned but the corresponding git tag is missing.
Confirm the intended version:
package.json for X.Y.ZCHANGELOG.md already contains ## [X.Y.Z] - YYYY-MM-DDCHANGELOG.md compare links already reference the intended releaseConfirm vX.Y.Z is missing:
git tag --list vX.Y.Z
Confirm the working tree is clean:
git status --short --branch
Verify the target commit contains the released state. Usually this is HEAD; if the user identifies another commit, inspect that commit before tagging.
Do not rerun npm version, do not run npm run publish:{type}, and do not rewrite the changelog in catch-up mode.
Create the missing annotated tag:
git tag -a vX.Y.Z -m "vX.Y.Z"
Push only the missing tag:
git push origin vX.Y.Z
If any source of truth disagrees, stop and explain the mismatch instead of guessing which version to tag.
Use this structure when reporting release work:
Release mode: normal release or missing-tag catch-upBaseline: latest tag and commit range inspectedRecommendation: patch, minor, major, or tag-only repairChangelog: changes made or still neededCommands: commands run or proposedPush/tag status: what was pushed, what remains, or why the workflow stopped