| <!-- SPDX-License-Identifier: Apache-2.0 |
| https://www.apache.org/licenses/LICENSE-2.0 --> |
| |
| You are running the **build** beat of the spec-driven loop for this |
| repository. Implement exactly ONE work item, on its OWN branch. |
| |
| Context to load first: |
| |
| - `tools/spec-loop/AGENTS.md` — operational rules (repo map, validation |
| commands, branch + hard-limit rules). The repo-wide `/AGENTS.md` also |
| applies (commit trailers, placeholder convention, confidentiality). |
| - `tools/spec-loop/IMPLEMENTATION_PLAN.md` — the prioritised work items. |
| - The appended **Compact repository inventory** block from the runner — |
| use it to route to likely specs/source files before opening full files. |
| - The appended **Open pull-request context** block from the runner. |
| - The appended **Local work-item branches** block from the runner. The |
| loop never pushes, so a work item it already built shows up here, not in |
| the PR context above. |
| - Only the spec(s) and source files relevant to the chosen work item — |
| do not read the whole tree. |
| |
| Steps: |
| |
| 1. Read the appended **Compact repository inventory**. Use it as a routing |
| aid for selecting likely relevant specs, skills, tools, and validation |
| commands. It is not proof; verify the selected work item against the |
| plan and exact source files before changing anything. |
| 2. Read the appended **Open pull-request context** and **Local work-item |
| branches**. Treat both open PRs and existing local work-item branches as |
| in-flight work. Pick the single highest-priority work item from |
| `IMPLEMENTATION_PLAN.md`. If a **Tooling source** block is appended |
| below, read the plan from the control branch as it shows |
| (`git show <ref>:tools/spec-loop/IMPLEMENTATION_PLAN.md`), not from the |
| working tree, which is on the integration base and need not carry the |
| plan. Pick an item not already substantially covered by an open PR and |
| not already built as a local work-item branch (the loop never pushes, so |
| a built item lives only as a local branch until a human pushes it). One |
| only. |
| 3. **Create its branch off the integration base**, then switch to it: |
| `git checkout -b <slug>` where `<slug>` is the work item's branch — the |
| bare slug, **no `spec/` or other prefix** (e.g. |
| `pairing-self-review`). NEVER commit the work to the integration |
| branch. One branch per work item. |
| 4. Read only the relevant spec file(s) — from the control branch if a |
| **Tooling source** block is appended, otherwise from the working tree — |
| plus the relevant `.claude/skills/` / `tools/` / `docs/` files from the |
| working tree. Confirm what already exists before writing — do not assume. |
| 5. Implement the work item **completely** — no placeholders, no stubs. |
| Skills: follow the skill format (frontmatter `name` / `description` / |
| `license`, SPDX header, placeholder convention, every state change a |
| confirmed proposal) **and ship an eval suite** under |
| `tools/skill-evals/evals/<skill-name>/` exercising each step with |
| fixture cases (per `/AGENTS.md` § Reusable skills — a skill without a |
| matching eval suite is incomplete). Tools: ship tests. |
| 6. Run the work item's **Validation** command(s) from its spec (the |
| backpressure). Fix until they pass. |
| 7. Specs and `IMPLEMENTATION_PLAN.md` live on the control branch. If a |
| **Tooling source** block is appended, they are **not** on this work |
| branch — do not create or edit them here; instead note any `status` or |
| `Known gap` change in the PR body for a later plan/update beat to |
| reconcile. (If no such block is present, the tooling is on this branch: |
| update **only that spec's** frontmatter/Known-gaps, and never |
| `IMPLEMENTATION_PLAN.md`.) |
| 8. `git add -A` then `git commit` with an imperative subject and a |
| `Generated-by: <agent> (<model>)` trailer, where `<agent>` and |
| `<model>` are the actual agent and model you are running as (e.g. |
| `Claude (Opus 4.8)`, `OpenCode (Big Pickle)`) — do not hardcode |
| either. **Never** add a `Co-Authored-By:` trailer for an agent. |
| |
| Then STOP. Do NOT push and do NOT open a PR — `git push` and |
| `gh pr create` are the human's step (they are in `.claude/settings.json` |
| `ask`). Print the exact commands the human can run: |
| |
| ```text |
| git push -u origin <slug> |
| gh pr create --web --base <integration-base> --head <slug> \ |
| --title "<subject>" --body-file <prepared-body> |
| ``` |
| |
| Rules: |
| |
| - One work item per iteration. Do not bundle. |
| - Do not duplicate in-flight work. If the highest-priority plan item is |
| already covered by an open PR or already exists as a local work-item |
| branch, skip it and choose the next uncovered item. Checking local |
| branches, not just open PRs, is what keeps the loop from rebuilding the |
| same item every iteration. |
| - If a work item is blocked, note why in its spec's `Known gaps` and pick |
| the next item instead. |
| - Stay inside the sandbox; never edit `.claude/settings.json`; never add a |
| new network/filesystem allowance. |
| - Single sources of truth — no duplicate logic; extend `tools/`. |