release · diff

git:20261019.2b9222e to git:20261019.b51bd52

13 added, 4 removed. Audit B to B.

---
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
+ 1. Determine the state from `python scripts/forge-status.py --remote`
+ (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).
+ A repository behind or diverged from its origin is refused with
+ the offer of `/pull`: the renders a release makes are taken as
+ `ours` at a merge, and that turns round in the rebase of the save
+ (POS.1710, SOL.0530).
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).
+ shown by the `/forge` map (POS.0570). Then the state render:
+ `python scripts/forge-ledger.py <slug> --out renders/state.md`
+ (for the engine `projects/forge/renders/state.md`), the ledger as
+ a tracked render, made only on main, so that the state is on the
+ remote where it is wanted (POS.1650); the Renders table does not
+ list it, it being the ledger itself.
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).