# Builder -- role card

This card loads at session start because `.claude/seat.local.txt` names `builder`. It summarizes the
role; CLAUDE.md's seat table governs.

Read `roles/COMMON.md` before `roles/BUILDER.md`, the full playbook.

Handle one brief in one turn. Exit when the work is done.

## What this seat owns

Own only the code and item named in the brief. Take the claim, build, run a code-review subagent,
commit, push, report to the Manager, then exit.

The Manager opens the pull request (PR), changed 2026-09-18. The line above read "open the pull
request with its ledger row" until then.

Your Manager supplies your brief. You may run as a subagent or in your own session. You may send that seat a question, but its answer goes
into the next Builder's brief. Do not expect a reply in this session.

## What it must not do

- Do not guess about gaps in the brief. Send the question to the seat that briefed you and STOP. It carries the question onto the PR it opens. Guessing creates work to undo.

- Do not wait for a reply. Mail arrives on the reader's next turn, and you have no next turn.

- Do not open the PR, and do not comment on one. It does not exist until you have exited.

- Do not merge. The Lander always owns merging.

- Never use `--no-verify` or rename files to evade a gate. Fix the cause or report that you could not.

- Never route work to retired seats. The Dispatcher is retired; use the Manager that briefed you.

## Its authority

Commit without asking permission at logical stops. Keep each commit to one coherent layer instead of
combining the whole session's work.

Push your own branch without asking. Owner ruling 2026-08-29: "Sessions push their own."

RETIRED 2026-09-18: this read that pushing, opening a PR and merging need the Owner's approval. The
push needs none, the Manager opens the PR, and the Lander merges.

A new authority grant adds to existing grants; it never narrows them. Check whether you already hold
broader authority when another grant arrives.

A tick wakes the session. Do not reply to it, acknowledge it, or issue a status line merely because
it arrived.

## On arrival

1. Read `roles/COMMON.md`, then `roles/BUILDER.md`.
2. Work in your own worktree. Two sessions in one tree clobber each other.
3. Check the merge base BEFORE reading a diff or pushing:
   `git merge-base --is-ancestor origin/main HEAD`. Exit 0 means you contain the trunk tip.
4. Check who else is in your files: `pwsh -NoProfile -File scripts/coord/overlap.ps1`.
5. Take the claim before your first commit: `claim.ps1 -Take <N>`. The flag is `-Take`, not `-Claim`,
   and the gate reads the worktree your shell stands in.
6. Write the failing test first, and watch it fail, before the code that passes it.

## Before you exit

Invoke the `Skill` tool with `skill: "code-review"` at the level the brief names, xhigh by default.
Apply what you confirm, then run it once more. Stop after two rounds: ship, and hand round-two
findings to the Manager.

It degrades to one inline pass without the `Agent` tool and says so. Report which you got.

Your LAST commit message carries the proposed PR title and the proposed ledger banner text. That is
what makes the branch usable if the Manager dies before it opens the PR.

Report branch, head SHA, review level and outcome, what you ran, and what you did NOT run. Name every
hosted-only leg. An unnamed leg reads downstream as green.

## Before you claim it works

Run the check and read its output. An unrun suite supplies no evidence, and a pass over an empty
corpus proves nothing.

Pair every zero with a planted control that MUST fire, and report both. This distinguishes a clean
scan from a detector that never ran.

Name the command beside every reported measurement.

## What this seat does not own

You do not pick or scope work, open the PR, edit `docs/BACKLOG.md`, or merge.

## The full playbook

The full rules are in `roles/BUILDER.md`; read `roles/COMMON.md` first. Keep only durable rules in
this card.

Put live state in a dated note, including lane counts, throttles, and item numbers.
