swimmwatch / project-release
Prepare, publish, verify, or recover a cloakbrowser-mcp release only when the user explicitly requests release work. Require a Prompt MCP-confirmed target version and stability, follow the repository's version, changelog, PR, GitHub Release, npm, Docker, MCP Registry, and docs process, and never tag, publish, create/update a release PR, or mutate external release state without separate explicit authorization.
Project Release
Use this skill only for cloakbrowser-mcp release work. Require a confirmed
target version such as v1.2.8, and decide whether it is stable or prerelease
before preparing, publishing, or recovering a release. If the user has not
provided a target version, propose one from the unreleased changes and ask the
user through Prompt MCP to confirm it or choose a different tag before release
execution.
Release tags use Semantic Versioning 2.0.0 with the repository's v prefix,
for example v1.2.8 or v1.2.8-rc.1. The pinned specification URL ishttps://semver.org/spec/v2.0.0.html.
Authorization And Interview
Start or reopen a persistent workspace Prompt MCP interview with a stable ID
such asrelease:vX.Y.Zafter inspecting the callable schemas.Record target tag and stable/prerelease selection as separate material
decisions. Treat only committed answers as confirmation.Release preparation, commit, push, release PR creation/update, merge, tag or
GitHub Release creation, npm publication, Docker publication, MCP Registry
publication, workflow rerun, and recovery mutations are separate
authorization gates.Never infer publish authorization from version confirmation, preparation
approval, merged code, or passing checks.
Choosing The Target Version
- If the user provides a target tag, validate it before changing files.
If no target tag is provided, fetch tags and inspect changes since the
previous release tag:
git fetch origin --tags --prune
git describe --tags --abbrev=0
git log --oneline <previous-tag>..HEADAlso inspect
[Unreleased]inCHANGELOG.md, merged PR titles, and
Conventional Commit subjects when available.Propose the next tag using Semantic Versioning 2.0.0:
MAJORfor backward-incompatible public API, CLI, MCP protocol, config, or
artifact contract changes;MINORfor backward-compatible user-facing features;PATCHfor backward-compatible fixes, dependency updates, docs, CI, or
packaging-only changes.
Present the proposed tag and short rationale, then ask the user to confirm it
or choose another tag through Prompt MCP. Do not runnpm run version:applyuntil the tag is confirmed and release preparation is
explicitly authorized.
Preconditions
- Start from a clean worktree; do not overwrite unrelated user changes.
Fetch latest refs and branch from current
mainunless the user explicitly
gives another base.- Confirm no existing Git tag or GitHub Release already uses the target version.
Before confirming the release tag, open and scan
https://semver.org/spec/v2.0.0.html, then validate that the requested tag
is thev-prefixed form of a SemVer 2.0.0 version.Exclude known failing or unrelated dependency PRs unless the user explicitly
includes them.Before editing
CHANGELOG.md, open and scanhttps://keepachangelog.com/en/1.1.0/.Before committing, open and scan
https://www.conventionalcommits.org/en/v1.0.0/.
Version Preparation
Run the release version script with the exact tag:
npm run version:apply -- vX.Y.ZThe script updates:
package.jsonpackage-lock.jsonserver.json
Documentation release tags and pinned install examples are rendered at MkDocs
build time from package.json through docs_macros.py; do not manually rewrite
those values in Markdown sources.
Manual release updates still required:
- add one new row to
docs/data/version-compatibility.json; - run
npm run docs:compatibility; verify
README.md,docs/index.md, anddocs/version-compatibility.md
changed as expected;verify the new compatibility row records the actual
@playwright/mcp,
Playwright MCP Docker base, CloakBrowser dependency, supported transport, and
platform;- run
npm run docs:compatibility:check; move current
[Unreleased]entries inCHANGELOG.mdinto## [X.Y.Z] - YYYY-MM-DD;- add or update the empty
[Unreleased]section above the new release; update changelog compare links so
[Unreleased]comparesvX.Y.Z...HEADand[X.Y.Z]compares the previous tag tovX.Y.Z;update release docs examples only if they are intended to show the current
release instead of a generic example.
Do not bump the package version outside release preparation.
Validation
Before opening or merging the release PR, run:
npm run check:ci
npm run package:verify
npm run docker:build
npm run docker:smoke
npm run bridge:compare -- cloakbrowser-mcp:dev --report bridge-parity-report.json
docker run --rm -v "$PWD:/repo" --workdir /repo docker.io/rhysd/actionlint:1.7.12@sha256:b1934ee5f1c509618f2508e6eb47ee0d3520686341fec936f3b79331f9315667 -color
python3 -m pipx run zizmor --min-severity high .
npm run docs:build
npm run docs:seo:validateRemove bridge-parity-report.json after inspecting it. If a check fails, fix
the smallest release-relevant cause and rerun the relevant command.
PR And Release Flow
After explicit commit authorization, commit release preparation as
chore(release): prepare vX.Y.Z.For release PR creation or updates, also read and follow
.agents/skills/project-pull-request/SKILL.md.After separate PR authorization, open a PR to
mainwith a concise release
summary and validation list.Call out security-sensitive release workflow changes, especially registry
credentials, public image publishing, OIDC, or token behavior.- Wait for required PR checks to pass before merging.
After separate publication authorization, create a published GitHub Release
for stable releases with:- tag
vX.Y.Z; - target
main; - title
vX.Y.Z; - notes from the
CHANGELOG.mdsection.
- tag
Mark prerelease versions as GitHub prereleases. Stable releases publish npm
latestand Dockerlatest; prereleases publish npmnextand prerelease
Docker tags only.
Post-Release Verification
Watch the unified Release workflow until metadata, npm, docker,mcp-registry, docs-build, and docs-deploy complete. docs-deploy
must run only after npm, Docker, and MCP Registry publishing have succeeded.
Then verify:
npm view cloakbrowser-mcp@X.Y.Z version
docker pull swimmwatch/cloakbrowser-mcp:X.Y.Z
docker run --rm --init swimmwatch/cloakbrowser-mcp:X.Y.Z --help
docker pull ghcr.io/swimmwatch/cloakbrowser-mcp:X.Y.Z
npm run registry:check -- --version X.Y.ZConfirm Docker Hub overview, short description, npm, GHCR, Docker Hub, docs,
and the official MCP Registry are current. GitHub /mcp visibility is curated
separately and may lag; treat it as a warning unless the user makes it a gate.
Recovery
If Docker Hub overview update fails with
Forbidden, theDOCKERHUB_TOKENsecret needs a Docker Hub personal access token with
read/write/delete permissions forswimmwatch/cloakbrowser-mcp; rerun failed
release jobs after the secret is updated.If npm, GHCR, Docker Hub, or MCP Registry already published artifacts, do not
delete and retag the same release for code defects. Prepare a follow-up patch
release instead.Rerun failed jobs only after confirming the failure is transient or caused by
a fixed external configuration.Keep release recovery notes in the final status report, including published
artifact state and any warnings.