Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 20 additions & 7 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,8 @@ irreversible step, and report.
| `bd close <id>` | 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
Expand Down Expand Up @@ -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
Expand All @@ -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.

Expand Down
Loading