Phase 6: coordinator + ops (runbook §7) #10

Merged
ellen merged 5 commits from phase6/coordinator-ops into main 2026-07-21 17:56:12 +00:00
Member

Implements runbook §7 — the coordinator route and the tick daily digest.

coordinate.yaml (new route) — triggered by agent/coordinate on an epic in valssi/ops, APPROVER-only (enforced by lib/preflight), runs as CLAUDE_PLAN_PAT. Claude (sonnet, tier-aware via dispatch.resolve) breaks the epic goal into a structured children JSON; bash then creates child issues in the target valssi work repos with tier/* labels + acceptance criteria, mirrors the epic milestone into each work repo, and maintains an idempotent managed children block (<!-- agent-epic:children:* -->) in the epic body as the cross-repo task list. Optionally applies agent/plan on the first ready child (bot PAT ⇒ fires the plan route). Records an attempt via lib/state; failure → needs/human + comment.

dispatch.yaml — agent/coordinate added to the resolve gate + role-default (coordinate = sonnet, §6); new coordinate job (needs: resolve, APPROVER-guarded, passes model/base-url, secrets: inherit). The tick job gains a daily epic digest step: once per UTC day (idempotent via a dated <!-- agent-digest --> marker), for each open epic in EPIC_REPO (new org var, defaults to valssi/ops) it posts one comment — children grouped by state/*, queue depth (blocked/*), last-24h attempts (summed from child lib/state comments), and open needs/*. Epics are discovered by the <!-- agent-epic marker; child refs are read from the managed children block.

Cost omitted by design — billing is fixed-subscription / local, not per-run metered, so the digest carries no cost line (resolves the cost_usd carry-over from Phase 5).

agents/coordinate.md — status planned → active; digest note updated (attempts not cost; epic/children markers documented).

Validated: js-yaml parses both workflows; bash -n passes on every run: block.

Note for the org owner: set org var EPIC_REPO=valssi/ops (the digest falls back to valssi/ops if unset, so this is optional).

🤖 Generated with Claude Code

Implements runbook §7 — the coordinator route and the tick daily digest. **`coordinate.yaml` (new route)** — triggered by `agent/coordinate` on an epic in `valssi/ops`, APPROVER-only (enforced by `lib/preflight`), runs as `CLAUDE_PLAN_PAT`. Claude (sonnet, tier-aware via `dispatch.resolve`) breaks the epic goal into a structured children JSON; bash then creates child issues in the target valssi work repos with `tier/*` labels + acceptance criteria, mirrors the epic milestone into each work repo, and maintains an idempotent managed children block (`<!-- agent-epic:children:* -->`) in the epic body as the cross-repo task list. Optionally applies `agent/plan` on the first ready child (bot PAT ⇒ fires the plan route). Records an attempt via `lib/state`; failure → `needs/human` + comment. **`dispatch.yaml`** — `agent/coordinate` added to the `resolve` gate + role-default (`coordinate` = sonnet, §6); new `coordinate` job (`needs: resolve`, APPROVER-guarded, passes model/base-url, `secrets: inherit`). The `tick` job gains a **daily epic digest** step: once per UTC day (idempotent via a dated `<!-- agent-digest -->` marker), for each open epic in `EPIC_REPO` (new org var, defaults to `valssi/ops`) it posts one comment — children grouped by `state/*`, queue depth (`blocked/*`), last-24h attempts (summed from child `lib/state` comments), and open `needs/*`. Epics are discovered by the `<!-- agent-epic` marker; child refs are read from the managed children block. **Cost omitted by design** — billing is fixed-subscription / local, not per-run metered, so the digest carries no cost line (resolves the `cost_usd` carry-over from Phase 5). **`agents/coordinate.md`** — status `planned` → `active`; digest note updated (attempts not cost; epic/children markers documented). Validated: `js-yaml` parses both workflows; `bash -n` passes on every `run:` block. Note for the org owner: set org var `EPIC_REPO=valssi/ops` (the digest falls back to `valssi/ops` if unset, so this is optional). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Author
Member

Per review: the coordinator now defaults to opus (higher-end model — epic→children breakdown needs it). Changed the agent/coordinate role default in dispatch.resolve (sonnet→opus) and the coordinate.yaml input default to match. A tier/* label on the epic still overrides. Re-validated: js-yaml + bash -n clean.

Per review: the coordinator now defaults to **opus** (higher-end model — epic→children breakdown needs it). Changed the `agent/coordinate` role default in `dispatch.resolve` (sonnet→opus) and the `coordinate.yaml` input default to match. A `tier/*` label on the epic still overrides. Re-validated: js-yaml + bash -n clean.
ellen merged commit bf563cf730 into main 2026-07-21 17:56:12 +00:00
ellen deleted branch phase6/coordinator-ops 2026-07-21 17:56:12 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
valssi-public/agent-workflows!10
No description provided.