Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Release new versions of sidecar. Covers version tagging with semver, td dependency updates, go.mod validation, CHANGELOG updates, GoReleaser automation, Homebrew tap updates, and verification steps. Use when preparing or executing a release.
.claude/skills/marcus-release-sidecar/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 14% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 30% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 85% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 87% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 25% | 0% |
Operator contract: docs/guides/active/releasing.md. Enforcement lives in scripts/ and RELEASE_VERSION=vX.Y.Z make release. Prefer the one-shot command over replaying this checklist by hand.
go.modmain identical to live origin/maincheck-release-state.sh now checks this itself via gh run list --workflow=go-ci.yml and fails closed if it's red/running/missing, so you don't have to remember to look
marcus/homebrew-tapreplace directives in go.modHOMEBREW_TAP_TOKEN secret present in the GitHub repo (CI tap job)Beware of go.work: always use GOWORK=off when updating dependencies and when validating install paths.
Local lint must match CI's golangci-lint v2.12.2, or trust CI:
bashgh run list --workflow=go-ci.yml --limit=1
bashgit tag -l 'v*' | sort -V | tail -1
SemVer: major / minor / patch as usual.
bashGOWORK=off go get github.com/marcus/td@latest GOWORK=off go mod tidy
If td jumped several minors, decide deliberately (pin for a focused release vs take latest and note it under Dependencies). Launch the app and open the td tab when td moved.
markdown## [vX.Y.Z] - YYYY-MM-DD ### Features - … ### Bug Fixes - … ### Dependencies - …
Commit the changelog (and any dependency bump) on main, then push so HEAD == origin/main.
bash# Dry-run (optional but recommended for tooling changes) make release-snapshot ./scripts/verify-release-archives.sh dist ./scripts/test-release-guards.sh dist ./scripts/test-release-publication.sh # Cut the release (fail-closed preflight → tag → CI → formula verify/publish) RELEASE_VERSION=vX.Y.Z make release
What make release enforces and does is documented in docs/guides/active/releasing.md.
Resume only the tap step if the tag/release already exists:
bashRELEASE_VERSION=vX.Y.Z make release-tap
verify — tag points at live main, tests, snapshot archives, release guardsrelease — GoReleaser publishes GitHub release + binariesupdate-homebrew-tap — renders packaging/homebrew/sidecar.rb.tmpl andpushes Formula/sidecar.rb with downgrade/idempotency/race guards
td/nightshift formulas are not auto-bumped; edit them by hand when co-releasing.
bashgh run list --workflow=release.yml --limit=1 gh release view vX.Y.Z --json assets -q '.assets[].name' GOBIN=$(mktemp -d) GOWORK=off go install github.com/marcus/sidecar/cmd/sidecar@vX.Y.Z "$GOBIN/sidecar" --version
go install @vX.Y.Z can 500 from the checksum DB for a minute or two after the tag — wait and retry. Prefer a throwaway GOBIN so verification does not clobber a dev machine's sidecar.
bash# Return to the canonical main development build: make install-local # Or keep the released Homebrew build active: make use-homebrew # In either case, prove the managed link and both login-shell modes: make install-status
Prefer a new patch release. Keep tags. Resume tap with make release-tap. See docs/guides/active/releasing.md.
check-release-state.shmain == origin/mainreplace in go.mod; GOWORK=off build works## [vX.Y.Z] - …RELEASE_VERSION=vX.Y.Z make release succeededgo install verified into throwaway GOBINmake install-status proves the dev machine is on the intended binaryOther measured skills in the registry, with their headline benchmark lift.