diff --git a/CLAUDE.md b/CLAUDE.md index 175c89a..c04e6f6 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -62,7 +62,8 @@ irreversible step, and report. | `bd close ` | never for a mirrored bead whose other half is not merged to its own repo's `origin/main`; a mirrored bead whose other half has ALSO landed may be closed by the campaign conductor under a consent naming this exception, both halves together, each verified against its remote; otherwise the work is on `origin/main`, verified against the remote | for a bead whose description carries a `mirrors:` line while its other half is unlanded, campaign consent included; and otherwise at commit time, or on a local commit that has not been pushed | | `bd dolt push` | bead state changed locally **and** the git side of the same change has already reached `origin` | as a way to publish beads for work that is not on `origin/main` yet; and inside a campaign that spans mirrored trackers - the conductor pushes those atomically | | a version bump on a release bead's branch | an operator-authorized release bead, inside a campaign carrying the operator's explicit consent | on any other bead, on main, or when the operator has not named this repo's release bead | -| a release (tag, `mix hex.publish`, GitHub release) | never | always - publishing is the operator's, in every campaign | +| tagging a release prep | the release bead's version bump is merged to `origin/main`; the tag names that version at the merged commit | before the bump is on `origin/main`; a tag naming any other version or commit | +| a release (`mix hex.publish`, GitHub release) | never | always - publishing is the operator's, in every campaign | The organizing principle is that the human gate belongs where an action stops being reversible. A commit on a per-bead branch is undone with @@ -93,12 +94,12 @@ subagent's sense of being authorized. A subagent that cannot quote them reports and stops. (Recorded 2026-09-05 by the operator.) A relay unlocks nothing the rows above forbid outright: closing a mirrored -bead whose other half has not landed, and a release - a tag, a -`mix hex.publish`, a GitHub release - stay forbidden however the consent -arrives. The two recorded exceptions below are the only widenings, and a -relay does not widen either past its own row: the version bump stays a -release-bead bump with no tag and no publish, and the campaign merge stays a -merge of one PR meeting every condition its consent names. +bead whose other half has not landed, and a release - a `mix hex.publish`, +a GitHub release - stay forbidden however the consent arrives. The recorded +exceptions below are the only widenings, and a relay does not widen any of +them past its own row: the version bump stays a release-bead bump with no +publish, its tag stays the tag of that merged prep, and the campaign merge +stays a merge of one PR meeting every condition its consent names. A version bump is the recorded exception: on a release bead the operator has named (in the campaign plan or their own words), the bump commit is release @@ -111,6 +112,18 @@ clean with a positive control, any named review gate passed), the conductor's merge executes the operator's own authorization - the consent's text is what may be done and nothing more. (Recorded 2026-09-01 by the operator.) +**Release preps.** The version bump and the tag of a release prep are the +family norm, not a grant a campaign consent has to name. On a release bead +the operator has named (in the campaign plan or their own words), the prep - +the version bump and the changelog promotion - lands through the rows above; +once it is merged to `origin/main`, the conductor or the session that owns +the release bead tags that merged commit with the new version and pushes the +tag. Publishing (`mix hex.publish`, a docs republish included) is the +operator's one release step, in every campaign, and no consent or relay +delegates it. Merging the prep follows this file's merge row, and nothing +else this file reserves for the operator changes. (Recorded 2026-09-25 by +the operator.) + Widening this section is a decision for the user to make and record here. An agent may draft the change; it does not adopt it.