---
description: Release one repository from main — its checks with walkthrough, README and release notes, then /save with the release message and the tag at an approved major
argument-hint: '[project-slug] [-m "message"] [--tag name]'
disable-model-invocation: true
---

Release one repository from `main` (POS.1100): the checks POS.1140
composes, settled by walkthrough (POS.0570), the README and the release
notes regenerated from the settled sources under the principal's eyes
(POS.0810, POS.1000), and then `/save` (`.claude/skills/save/SKILL.md`)
with the release message and, at an approved major, the tag. The
repository is named by its slug, `forge` meaning the engine; without
a slug, ask which repository — a release is always one repository,
never a sweep.

1. Determine the state from `python scripts/forge-status.py` (the scripts
   are the only door to git — CLAUDE.md, Persistence). A release runs
   on `main` only: on any other
   branch, stop and report the branch the repository is on and how to
   get back (`python scripts/forge-branch.py <slug> main`, after saving).
   Merging a branch into `main` is git's business, by hand or by
   merge request, never this command's (POS.1110).
2. Run the checks over the sources through the `/check` procedure
   (`.claude/skills/check/SKILL.md`) and report the result to the
   principal — always, even when clean. A project: `light` and
   `project` on it. The engine: `engine` on the engine root, and
   `light` and `project` on `projects/forge`, the forge's own
   project. Launched at once, awaited together. Clean: state that
   the checks passed.
   Findings: settle them by walkthrough (CLAUDE.md, Working methods);
   a finding may be parked, as the `/check` procedure says, and the
   release proceeds. Never fix silently; a finding the principal has
   not settled when he orders the release to go on is parked by that
   word, said aloud, since the check is advisory (POS.0430). The check
   runs before the renders so that a fix of the
   walkthrough — an intent bump, a changed convention — is already in
   the inputs the renders derive from (POS.0570).
3. Offer `/critique essence` once, in one sentence: the lens that
   guards what a release publishes, the drift of the chain
   (POS.0400). On the principal's word run it through its own
   definition (`.claude/skills/critique/SKILL.md`) and settle its
   findings by walkthrough before going on; on his no, or silence,
   run nothing — no reviewer ever runs at a release on Claude's own
   judgement.
4. Only once the findings are settled, regenerate the repository's
   README and release notes from their recipes — unconditionally, no
   staleness test, always through the `/render` procedure
   (`.claude/skills/render/SKILL.md`), never through an ad-hoc subagent
   prompt (POS.1070). The two renders are launched at once, each
   through the `/render` procedure, and awaited together. Report the
   steps, including a short summary of what materially changed in the
   regenerated files (POS.0810, POS.1000): the principal rules on the
   delta before the commit. A render made from the settled sources is
   current by construction; its verification is `/render` step 6 (the
   file, its provenance), not a check. Which renders a
   repository has is CLAUDE.md, Document chain, Renders's. A project whose
   recipe is missing is reported (a `/check` finding)
   and released without the render. Other renders are never
   regenerated here; their staleness is the principal's business,
   shown by the `/forge` map (POS.0570).
5. Report the age of the documentation: the `version` in the
   front-matter of the repository's `docs/README.md` against the
   intent's version (a repository without `docs/` has none, and that
   is no finding), and offer `/document` in one sentence. On the
   principal's word run it through its own definition
   (`.claude/skills/document/SKILL.md`) before the save, so that the
   release carries current pages; on his no, or silence, run nothing.
   A release never regenerates the documentation on its own
   (POS.1450).
6. Then run `/save` for this repository through its own definition
   (`.claude/skills/save/SKILL.md`), with two things decided here: the
   commit message is `release <intent version>: <one line>` — the
   line summarising the rounds since the last release, from the
   records of the intent's history since the last release, and the
   rows of its archive where the span reaches before the log, the
   primary record
   (CLAUDE.md, Versioning & status), unless `-m` was supplied; for a
   library, whose history is git, the version is omitted and the line
   describes what changed — and, when the intent's version is an
   integer (an approved major), the tag `v<major>`, proposed and
   taken on the principal's word (a rule of the procedure, not a gate
   in the script). Before proposing the tag of a major of the forge
   intent, name what POS.0300 of that intent asks a major to pass —
   a reminder on the principal's word, never a gate. Any other tag is
   his request, as `/save` has it.

The check is advisory (POS.0430): the principal may order the release
at any moment regardless of findings, and the findings he has not
settled are parked by that word (step 2).
