Release
Create and publish releases for the LogTape project. Use when releasing a new version, creating a patch release, or creating a major/minor release. Handles Sacho changelog compilation, version bumping, tagging, and branch management.From its SKILL.md
npx -y skills add dahlia/logtape --skill releaseAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
SKILL.md
7.4 KB, as published. Nobody here has run it
Release skill
LogTape uses Sacho to keep unreleased changelog entries in changes.d/ and compile them into CHANGES.md. Never edit the materialized unreleased region of CHANGES.md by hand. Edit the fragments and let Sacho update the changelog.
There are two types of releases: patch releases from X.Y-maintenance
branches, and major/minor releases from main. The Sacho release guide
describes the underlying changelog lifecycle.
Prerequisites
Before starting any release:
-
Read and follow AI_POLICY.md. Every AI-assisted commit must include an
Assisted-by: AGENT_NAME:MODEL_VERSIONtrailer. -
Verify the branch, worktree, and remote:
git status --short --branch git remote -vAll GitHub operations must target dahlia/logtape. Use the actual remote name in commands below; do not assume it is
origin. -
Ensure the branch is up to date and that the release version in changes.d/next.txt matches the package versions. If the next version has not been prepared yet, set both through the repository task and commit that change before releasing:
mise run bump-version 1.2.3Do not call
sacho nextandmise run update-versionsseparately. The task keeps the Sacho next-version file and package versions together. -
Review the release notes as a user would, then run the full test suite:
sacho preview sacho check mise run testEdit the source fragments to combine duplicate entries, remove development history, and describe public behavior. Run
sacho fmtafter editing a fragment and repeat the preview and checks.
Patch releases
Patch releases such as 1.2.3 are created from the matching
X.Y-maintenance branch.
Prepare the release
-
Check out and update the maintenance branch:
git checkout 1.2-maintenance git pull -
Complete the prerequisite review and checks above.
-
Compile the fragments into the released changelog section:
sacho release 1.2.3 mise run fmtsacho releasedates the new CHANGES.md section, removes the consumed fragments, and removes changes.d/next.txt. Review all three parts of the diff. Do not replace this command with a manual edit to CHANGES.md. -
Run
mise run check, then commit the changelog, deleted fragments, and deleted next-version file together. UseRelease 1.2.3as the subject and include the AI disclosure trailer when applicable. -
Create the tag without a
vprefix. Always pass-mso a signed tag does not open an editor:git tag -m "LogTape 1.2.3" 1.2.3
Start the next patch cycle
Use the repository task to create the next Sacho region and update every package version:
mise run bump-version 1.2.4
sacho check
mise run check
Review and commit changes.d/next.txt, the materialized CHANGES.md region,
and all package version changes together. Use Version bump as the subject,
retain the existing [ci skip] body, and include the AI disclosure trailer
when applicable.
Push the tag and maintenance branch to the verified remote:
git push origin 1.2.3 1.2-maintenance
Replace origin with the remote name found during the prerequisite check.
Forward-porting patch releases
Forward-port a patch release through newer maintenance branches and finally to
main.
When possible, merge the maintenance branch before releasing it. The unconsumed fragments then travel with the code and require no Sacho-specific work.
When merging an already released tag, the release commit contains a frozen changelog section but no fragments. The Sacho merge driver places the frozen section in CHANGES.md and preserves the receiving branch's changes.d/next.txt.
Newer maintenance branches
-
Check out the newer branch and merge the released tag:
git checkout 1.3-maintenance git merge 1.2.3 -
If this branch's next release should repeat the patch notes, first check that no edited carried-from-1.2.3.md fragment already exists, then run:
sacho carry 1.2.3sacho carryrecreates package-scoped fragments from the frozen section. Edit them if the later branch exposes different behavior. Re-running the command overwrites existing carried fragments. -
Resolve code conflicts. Do not copy entries into CHANGES.md by hand. Fix fragments instead, then run:
sacho fmt sacho preview sacho check mise run test -
Complete the merge and release the newer branch's patch version. Continue through each newer maintenance branch.
Main branch
Merge the last released tag into main, resolve conflicts, and run the same
checks. Do not run sacho carry for this merge: LogTape does not duplicate
patch-release notes in the next major/minor release.
Major and minor releases
Major and minor releases such as 1.3.0 and 2.0.0 are created from main with
patch version 0.
Release from main
-
Check out and update
main, then complete the prerequisite review and checks. -
Compile, format, and review the release:
sacho release 1.3.0 mise run fmt mise run check -
Commit the release changes with subject
Release 1.3.0, including the AI disclosure trailer when applicable, then create the tag:git tag -m "LogTape 1.3.0" 1.3.0 -
Start the next minor cycle on
main:mise run bump-version 1.4.0 sacho check mise run checkCommit the next-version file, materialized changelog region, and package version changes together as the version bump.
-
Push
mainand the release tag to the verified remote:git push origin 1.3.0 main
Create the maintenance branch
Create the maintenance branch from the release tag, not from the version-bump
commit on main:
git branch 1.3-maintenance 1.3.0
git checkout 1.3-maintenance
mise run bump-version 1.3.1
sacho check
mise run check
Commit the first patch cycle's next-version file, materialized changelog region, and package version changes together, then push the branch:
git push origin 1.3-maintenance
Publishing release notes
When release notes must be published manually, render only the frozen release section:
sacho show 1.3.0 --skip-heading --no-word-wrap \
--output-file release-notes.md
sacho show never compiles current fragments. Use the generated file as the
release notes, then remove it if it is only a temporary publishing artifact.
Version format reference
- Patch releases:
X.Y.Zwhere Z > 0, such as 1.2.3 - Minor releases:
X.Y.0, such as 1.3.0 - Major releases:
X.0.0, such as 2.0.0 - Maintenance branches:
X.Y-maintenance, such as1.2-maintenance - Tags: no
vprefix, such as1.2.3 - Tag messages:
LogTape X.Y.Z