Skip to content

FLEET COMMUNICATION & COORDINATION LAW

This directive supersedes informal coordination through chat windows, local notes, generated Markdown artifacts, or assumptions about what another agent knows.

CANONICAL COMMUNICATION MODEL

BEADS    = DURABLE STATE / WORK AUTHORITY
GC MAIL  = AGENT-TO-AGENT COMMUNICATION
GC SLING = OWNERSHIP / WORK ROUTING
GITLAB   = SOURCE + MR + CI EVIDENCE
CHAT     = DISPOSABLE EXECUTION INTERFACE

Anything important enough for another agent to know MUST exist in Beads and, when another lane needs to act on it, MUST be communicated through gc mail.

A statement made only in a chat window does not count as fleet communication.

SESSION START PROTOCOL

At session start, before choosing work:

gc mail inbox
bd list --status in_progress
bd list --status blocked
bd list --status open

Then inspect the Bead you own:

bd show <bead-id>

Do not assume the chat prompt contains the latest state. Do not rely on memory from a prior session.

BEADS ARE THE DURABLE RECORD

Every material state transition MUST be recorded on the canonical Bead:

CLAIMED → IN_PROGRESS → BLOCKED → MR_OPENED → CI_GREEN → MERGED
→ RUNTIME_VERIFIED → READY_FOR_ACCEPTANCE → CLOSED

Receipts belong on the Bead. Use structured notes:

LANE=
STATE=
WHAT_CHANGED=
MR=
VERIFICATION=
BLOCKERS=
NEXT=

If the session dies, another agent must reconstruct work entirely from Bead + GitLab + runtime evidence.

GC MAIL IS REQUIRED FOR CROSS-LANE COMMUNICATION

When another lane needs to know something, send gc mail:

gc mail send <recipient> \
  -s "LANE RECEIPT: <bead> <state>" \
  -m "BEAD=<bead> LANE=<lane> STATE=<state> WHAT_CHANGED=<summary> MR=<url-or-none> BLOCKERS=<blockers-or-none> NEXT=<next>"

Use actual Gas City recipient identities. Inspect gc session list if unsure.

BLU IS THE ROUTING HUB

All lanes send Blu: completion receipts, new blockers, cross-lane discoveries, security findings, authority conflicts, human gates, work requiring another lane, premise-not-reproduced findings.

CROSS-LANE HANDOFF

If work belongs to another lane:

  1. STOP implementing it.
  2. Update the current Bead with evidence.
  3. Add dependency/blocker when applicable.
  4. Send gc mail to Blu.
  5. If ownership transfer is required, use gc sling <target-agent> <bead-id>.
  6. Continue ready work in your own lane.

gc sling = transfer/routing of work. gc mail = communication. Do not confuse the two.

MAIL FAILURE PROTOCOL

If gc mail read <id> fails (known gc 1.4.1 / bd 1.3.0 version-skew):

  1. Do NOT discard the message.
  2. Read through bd show <message-id> instead.
  3. Record the defect if not already tracked.
  4. Continue using gc mail inbox for discovery.

If gc mail send fails (no valid sender identity):

  1. Do NOT claim delivery succeeded.
  2. Update the canonical Bead with the full receipt.
  3. Record: GC_MAIL_DELIVERY=FAILED REASON=<error> RECIPIENT=<intended>
  4. Send through gc mail once identity is restored.
  5. A local artifact is not an acceptable replacement for durable communication.

BLOCKED WORK

Blocked work must become graph state, not chat state:

TASK_BLOCKED=YES → record blocker, dependency, evidence, owner, required action → mail Blu

Do not leave a worker "waiting." Do not poll another agent through chat.

COMPLETION REQUIRES COMMUNICATION

Before session termination:

  1. Update canonical Bead.
  2. Record MR/commit/pipeline/runtime verification.
  3. Perform governed worktree closeout.
  4. Close Bead only when completion law passes.
  5. Send completion receipt through gc mail.

Terminal receipt:

BEAD= LANE= STATE=CLOSED WHAT_CHANGED= MR= VERIFICATION= BLOCKERS=NONE NEXT=

If gc mail receipt cannot be delivered, record that failure on the Bead.

NON-NEGOTIABLE INVARIANT

IF IT IS NOT IN BEADS, IT IS NOT DURABLE WORK STATE.
IF ANOTHER AGENT MUST KNOW IT AND NO GC MAIL WAS SENT, IT WAS NOT COMMUNICATED.
IF OWNERSHIP CHANGES AND THE WORK GRAPH WAS NOT ROUTED, OWNERSHIP DID NOT CHANGE.

Sessions are disposable. Chat is disposable. Beads are durable. Gas City mail coordinates the fleet.