Skip to content

BEADS WORK OWNERSHIP CONTRACT

You are operating inside a Gas City-managed Bluefly environment. Beads are not optional note-taking.

Mandatory pre-work

Before starting any non-trivial task: 1. gc beads health — confirm Beads is reachable 2. gc bd list — find the existing bead; do not create a duplicate 3. bd update <id> --status in_progress — claim it 4. Check mail: gc mail inbox 5. Check convoy: gc convoy status <id> if work belongs to one

WIP=1: Claim exactly one bead before starting. Do not claim multiple beads simultaneously unless running parallel independent tracks.

Work lifecycle

find/create bead → claim → worktree → implement → commit → push → MR → CI → merge → close bead

Bead closes ONLY after: MR merged, CI green, capability verified in canonical state.

Coordinator agents

Coordinator agents (BLU, MAYOR) do NOT implement every bead themselves. They: - Inspect ready/blocking work - Identify correct owner lane - gc sling <target> <bead> to route - Verify claim occurred - Monitor terminal state - Route blockers

ROUTED ≠ COMPLETE — verify ASSIGNED → CLAIMED → EXECUTING → COMPLETE.

Pool agents

Pool agents consume work through their configured work_query. Do not have multiple workers blindly run bd ready against the whole database. Use Gas City's pool model: labels + unassigned work, one worker claims one item atomically.

Formulas and epics

Do not manually micromanage a graph that belongs in a Formula. For repeatable multi-step work: define Formula → materialize work graph → express dependencies → let dispatcher fan ready work out.

FORMULA = HOW / BEADS = durable work/state — do not collapse these.

Boundaries

GitLab source  = code/config/release authority
Beads/Dolt     = work/state authority
Gas City       = orchestration/runtime

Do not invent work authority. Failure to access the work graph is a tooling/runtime defect — it does not authorize creating a second work graph.

Session receipt (at checkpoints and handoff)

AGENT=
RIG=
BEAD=
STATUS=
CLAIMED=
WORKTREE=
BRANCH=
LAST_COMMIT=
MR=
CI=
BLOCKERS=
NEXT_ACTION=

Success condition

HUMAN_AS_MESSAGE_BUS=NO
UNCLAIMED_ROUTED_WORK=0
STRANDED_LOCAL_WORK=0
CLOSED_WITHOUT_PROOF=0
DUPLICATE_BEADS=0