plugins/guild/skills/release/SKILL.md
This skill should be used when the user asks to "cut a release", "release the guild", "ship it", "create a release", "tag a version", "publish a release", "guild release", or wants to finalize completed requirements into a versioned release. Renames CHANGELOG Unreleased to a version, archives completed REQs, and creates an annotated git tag. Does not push.
npx skillsauth add hirogakatageri/hirokata releaseInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Finalize completed guild requirements into a versioned release: stamp the CHANGELOG.md Unreleased section with a version, move completed requirement artifacts into a dated archive, and create an annotated git tag.
--dry-run — print the full plan without making any changes--only REQ-NNN[,REQ-MMM] — release only the named requirements (default: all requirements with status: done since last release)Run in parallel:
git rev-parse --is-inside-work-tree — confirm git repogit status --short — check for uncommitted changesgit tag --list --sort=-v:refname — list existing tags.guild/BOARD.md — confirm board existsStop conditions:
Not inside a git repository. Guild release requires git.No guild board found. Nothing to release.You have uncommitted changes. A release should be a clean point in history.
Continue anyway? (yes / no)
Default to stopping on "no".Find requirements to include:
--only REQ-NNN,... provided: use exactly those..guild/requirements/REQ-*.md — include every requirement with status: done that is NOT already present in any .guild/archive/*/requirements/ directory.If the resulting set is empty, stop with:
No completed requirements to release since the last release.
For each requirement in scope:
Find all its tasks (.guild/tasks/TASK-*.md with matching requirement frontmatter) AND the tasks still listed on the BOARD (In Progress, Backlog).
Block release if ANY task for an included requirement has:
status: failed → report which task and stopESCALATE that has not been resolved → report and stopWarn (do not block) if ANY task for an included requirement has:
status: in-progress or status: pending → list them and ask:
These tasks for included requirements are not yet done:
TASK-NNN: {title} ({status})
They will remain on the board after release. Continue? (yes / no)
Read existing tags and suggest the next version:
vX.Y.Z). If none, suggest v0.1.0.Current version: {latest tag or "none"}
Requirements in this release: {N}
REQ-NNN: {title}
REQ-MMM: {title}
What version? (e.g. v1.2.0)
v\d+\.\d+\.\d+(-[A-Za-z0-9.]+)?. Re-prompt on invalid.The changelog lives at repo root (CHANGELOG.md), NOT inside .guild/.
If CHANGELOG.md does not exist, create it with this skeleton:
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
If CHANGELOG.md exists but has no ## [Unreleased] section, insert one immediately after the preamble (before the first ## [version] heading).
If the ## [Unreleased] section is empty (no bullet points) AND --only was not used, warn:
The [Unreleased] section is empty. Release anyway? (yes / no)
Transform CHANGELOG.md:
Capture all content under ## [Unreleased] up to the next ## heading or EOF — call this UNRELEASED_BODY.
If --only was used, filter UNRELEASED_BODY to keep only bullet points referencing the included REQ IDs; move the rest back under ## [Unreleased].
For each requirement in scope that is NOT already in UNRELEASED_BODY, append a bullet:
- REQ-NNN: {requirement title}
(This catches requirements completed before the check-in skill started maintaining [Unreleased].)
Replace the ## [Unreleased] heading block with:
## [Unreleased]
## [{version}] - {today's date}
{UNRELEASED_BODY}
The new ## [Unreleased] section is deliberately empty — ready for future work.
Create archive directory .guild/archive/{version}/ with subdirectories requirements/, plans/, tasks/.
For each requirement in scope:
.guild/requirements/REQ-NNN.md → .guild/archive/{version}/requirements/REQ-NNN.mdrequirement: REQ-NNN in its frontmatter:
.guild/plans/PLAN-NNN.md → .guild/archive/{version}/plans/PLAN-NNN.md.guild/plans/PLAN-NNN/ (if exists) → .guild/archive/{version}/plans/PLAN-NNN/requirement: REQ-NNN, status: done:
.guild/tasks/TASK-NNN.md → .guild/archive/{version}/tasks/TASK-NNN.mdLeave any in-progress / pending tasks in place on the board.
Never archive .guild/docs/ — the knowledge base is evergreen. Researcher findings persist across releases so future architects and researchers can reuse them. Docs are not versioned alongside releases.
Write .guild/archive/{version}/BOARD-snapshot.md containing the BOARD.md frontmatter values at release time:
---
released: {today's date}
version: {version}
next-task-at-release: {value from BOARD.md frontmatter}
next-req-at-release: {value from BOARD.md frontmatter}
next-plan-at-release: {value from BOARD.md frontmatter}
requirements:
- REQ-NNN: {title}
- REQ-MMM: {title}
---
# Release {version} Snapshot
Requirements included in this release are archived alongside this file.
ID counters are continuous across releases — they are NOT reset.
Do NOT reset the BOARD.md counters. IDs remain continuous across releases to keep archived references stable.
Remove rows for released requirements from the Requirements table in BOARD.md. Leave In Progress, Backlog, and Done tables untouched (those reflect task state, not requirement state).
Run:
git add CHANGELOG.md .guild/
git commit -m "$(cat <<'EOF'
chore(release): {version}
Release {N} requirement(s):
{one bullet per REQ}
EOF
)"
git tag -a {version} -m "$(cat <<'EOF'
Release {version}
{UNRELEASED_BODY content}
EOF
)"
Do NOT push. Do NOT pass --no-verify.
If pre-commit hooks fail, surface the error and stop. The archive moves have already happened on disk — instruct the user to resolve the hook issue and commit manually.
Released {version}
==================
Changelog: CHANGELOG.md (new [{version}] section added)
Archived: .guild/archive/{version}/
{N} requirement(s)
{N} plan(s)
{N} task(s)
Git:
Commit {short-hash}: chore(release): {version}
Tag: {version}
Not pushed. Push with:
git push && git push --tags
If --dry-run is set, execute steps 1–6 to build the plan, then print:
Dry run — no changes would be made.
Version: {version}
Requirements to release ({N}):
REQ-NNN: {title}
REQ-MMM: {title}
CHANGELOG.md changes:
## [Unreleased] → ## [{version}] - {today's date}
New [Unreleased] section would be created empty
Files to move:
.guild/requirements/REQ-NNN.md → .guild/archive/{version}/requirements/REQ-NNN.md
...
Git actions:
Commit: chore(release): {version}
Tag: {version} (annotated)
Push: NOT executed
Warnings:
{any warnings from the pre-release gate}
Do not create files, move anything, or run any git commands.
--no-verify.guild/.guild/docs/ is evergreen — never archive or touch the knowledge base during a releasedevelopment
This skill should be used when the user reports an error, bug, or unexpected behavior and wants it diagnosed and fixed. Trigger on phrases like "check this error", "check this bug", "here's an error", "here's a bug", "I have an error", "I have a bug", "found a bug", "got an error", "debug this", "this is broken", "fix this error", "verify and fix", or any message that includes a stack trace or error output. Runs a structured workflow: gather context, investigate configured log/code sources, report root cause with ranked solutions, then apply a test-driven fix.
testing
This skill should be used when the user says "check svelte env vars", "check environment variables", "validate env vars", "check env var patterns", "audit environment variables", "audit env vars", "check SvelteKit env", "svelte env check", or any phrase asking to audit or validate SvelteKit environment variable usage patterns.
data-ai
Internal skill used by the session-tracker logger agent to append a session entry to .logs/YYYY-MM-DD-log.md, creating the file and directory if needed. Not user-invocable.
data-ai
Internal skill used by the session-tracker logger agent to query git for committed and uncommitted changes in the past 28 hours. Not user-invocable.