.agents/skills/release/SKILL.md
You are conducting a release of Open Notebook, reproducing the process
established in v1.11.0. The source of truth for the process is
.github/RELEASE_PROCESS.md — read it first. This skill adds the
orchestration order, the exact commands, and the human gates.
Ground rules for the whole run:
${CLAUDE_SKILL_DIR}/gates.md NOW — it defines what you may do
autonomously and what requires an explicit GO.git fetch --tags · find the last release tag and gh release list.git log <last-tag>..origin/main --oneline.[Unreleased] section against that list. Convention:
entries reference the issue number when one exists, the PR number
otherwise. Close every gap via PR.gh api repos/{owner}/{repo}/dependabot/alerts?state=open)
— a security-themed release with open highs is incoherent. Triage them
into the fix loop or document acceptance.Read ${CLAUDE_SKILL_DIR}/test-matrix.md and instantiate it against the
actual release diff. Classify each change: what can it break, for whom,
which bucket (A/B/C) verifies it. Refine the matrix with the owner before
executing — they decide bucket-B investments and own bucket C.
Run in parallel where possible:
uv run pytest tests/ · ruff check . · uv run python -m mypy . (all three
are required CI gates since the July 2026 cleanup; mypy must exit 0)npm run lint, npm run test, npm run build (production build;
a stale node_modules produces false build failures — npm ci first if so)lsof + process cwd, never kill
blind; the frontend runs fine on PORT=3001 npm run dev — pass the URL to
the smoke agent. Also note the dev .env may point at a standalone
SurrealDB, not the repo-compose one)make docker-build-local, then make release-test TAG=<ver> OLD_TAG=<prev>
(pull the genuine previous tag first — see gotchas in RELEASE_PROCESS.md).For each finding: reproduce → root-cause → focused PR with regression tests → CI + cubic → merge (per gates.md). Apply the re-test policy from RELEASE_PROCESS.md after each merge. Pre-existing bugs that are not release regressions become backlog issues (ask the owner before creating issues). Verify UI fixes in the real browser (Playwright) before opening the PR.
pyproject.toml, date the changelog section.make tag.gh workflow run build-and-release.yml --ref main -f push_latest=false
and watch the run. (Local make docker-push needs docker login.)${CLAUDE_SKILL_DIR}/runbook.md).Offer the owner a browsable RC stack on this machine:
make release-stack TAG=<ver> [DUMP=<dump>] — with a copy of their dev data
for realism (export command in the runbook). Support them through it; findings
go back to Phase 4. Do not proceed without their GO.
${CLAUDE_SKILL_DIR}/comms-templates.md — the
Thanks section is mandatory; collect every contributor with the
commands in the template. Show the owner for review.gh release create v<ver> --title ... --notes-file ... --latest.
Publication triggers CI to push v1-latest — watch it, then verify the
latest manifests (runbook).released label (ask before mass-labeling).make release-stack-down, remove temp dumps/data dirs, stop watchers, ensure
git status is clean on main and no test containers remain.
Ask the owner: "what should improve in this process?" — and apply the
accepted improvements now: edit .github/RELEASE_PROCESS.md,
scripts/release-test/*, and this skill's files while context is fresh.
New gotchas discovered during the run go into RELEASE_PROCESS.md's Known
Gotchas via the same PR flow.