dev-ops

Conventions — builders, coordinators and pull requests

The protocol every agent follows on Ed’s projects, whatever model it is and wherever it runs (Ed’s laptop, a cloud session, a GitHub Actions runner).

Roles

The pull request is the conversation

Every piece of work has a draft pull request, opened by its builder at the start (a GitHub Actions builder cannot open one: its conversation is the issue or PR it was mentioned on, and it comments a link for Ed to open the PR), titled with what it is and, where it must not be merged yet, — do not merge. Everything about the work is said there, so the PR holds the whole record and survives any lost session or machine. Comments carry a prefix at the start of a line — the Actions builder wraps its comments in a header of its own, so readers match a prefix at the start of any line, not only the first:

Prefix Who Meaning
COORDINATOR: coordinator an instruction or an answer; the builder acts on the latest one
QUESTION: builder needs an answer; states the recommended option; the builder keeps working on anything that does not depend on it
REPORT: builder progress at a milestone
FINAL: builder the finished work: commits, checks and their results, what changed for a user, what was deferred, and every call Ed has not ruled on, numbered, each with context and options. The checks are the exact commands CI runs, named word for word and run over what the builder wrote; a narrower stand-in is not green (plan-queue, 2026-08-27: a type check that skipped every test file). Every user-visible string that changed is listed, before → after, or the FINAL says no user-visible text changed; silence is not none (plan-queue: thirteen member-facing sentences once landed unrecorded)

All agents may post as Ed’s GitHub account; the prefix says who is speaking.

Branches and merging

Briefing a builder

Reviewing a FINAL

Waking a builder

Waking a coordinator: Ed’s questions page

A coordinator sleeps between messages, and nothing on GitHub wakes it except activity on a pull request it has subscribed to (2026-09-26/28: a cloud coordinator went quiet seven times, for up to ten hours). So the loop runs through Ed’s questions page (claude/QUESTIONS-PAGE.md):

Precedence

An explicit instruction in a brief or COORDINATOR: comment overrides these defaults (for example push nothing in a smoke test, or a named prefix for the reply). Otherwise this file holds.

Decisions

A builder that must choose something Ed has not ruled makes the call, keeps going, and lists it in FINAL:. Ed rules those afterwards, one at a time. Questions that block the work are QUESTION: comments and wait.

A decision taken on Ed’s behalf is shown to him. When a coordinator answers a builder’s QUESTION: itself, or accepts a call listed in a FINAL:, because an existing ruling settles it, it also posts an OK-only update on Ed’s questions page: what it decided, for which builder and PR, and which ruling settles it (see claude/QUESTIONS-PAGE.md, Decisions taken on Ed’s behalf). Ed’s OK costs one tap; his note is a veto, and the coordinator acts on it. A decision no ruling settles is not the coordinator’s to take: it goes to the page as a question. (Ed, 2026-09-29: he was rarely asked anything through the page, and could not see what had been decided without him.)