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:
- STOP implementing it.
- Update the current Bead with evidence.
- Add dependency/blocker when applicable.
- Send
gc mailto Blu. - If ownership transfer is required, use
gc sling <target-agent> <bead-id>. - 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):
- Do NOT discard the message.
- Read through
bd show <message-id>instead. - Record the defect if not already tracked.
- Continue using
gc mail inboxfor discovery.
If gc mail send fails (no valid sender identity):
- Do NOT claim delivery succeeded.
- Update the canonical Bead with the full receipt.
- Record:
GC_MAIL_DELIVERY=FAILED REASON=<error> RECIPIENT=<intended> - Send through
gc mailonce identity is restored. - 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:
- Update canonical Bead.
- Record MR/commit/pipeline/runtime verification.
- Perform governed worktree closeout.
- Close Bead only when completion law passes.
- 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.