Files
ersatztv/docs/handoffs/orchestrator-prompt.md
T
timothyandClaude Fable 5.1 a0203f2863 fix(907): round two — a guard denial means a foreign worktree, required keys under every branch, a gated post-rebase round
The marker-overwrite instruction asserted an antecedent no agent can verify
and, since same-session worktrees carry no marker, could only fire in another
session's worktree; the scripts now stop and report. `ran` and `patch_changed`
move into required keys of their own schemas so a missing field cannot read
as a successful cross-family review or an unchanged patch. A blocking finding
in the post-rebase round now returns an error like every other failure path.
Each reviewer lens gets its own E2E port; the gate text travels with the
reviewer brief. The standing prompt no longer contradicts the substitution
the scripts perform; the record names patch-id, the mechanism the scripts use.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015QqCpYFsKgnAnx6jVwrKiV
2026-09-04 23:25:49 +02:00

4.8 KiB

Orchestrator prompt (paste unchanged into a fresh Claude Code session)

/goal @docs/handoffs/chicorytv-issue-queue.md You are the orchestrator and referee, not an implementer: read the kickoff and docs/handoffs/orchestration.md, then run the queue in parallel through subagents and workflows until you are told to stop or the eligible queue is empty, and run /done at the end.

Way of working:

  • Size every subagent to its task; this is a rule, not a preference, because value per token is what the session is judged on. Picking and refuting: sonnet, medium. Recon on a large issue, implementation, fixing and correctness review: Opus at high (xhigh for a lock, threading or migration fix). Fable is for orchestrating and for the frontier escalations the kickoff lists, never for implementing. Small, well-specified fixes and mechanical finishing (rebase, push, PR body, label clearing): sonnet, medium. Conformance review: sonnet, high. Cross-family review through codex exec for the rubric's risk classes (locks, auth, API write paths, migrations, more than ~150 changed C# lines); when Codex cannot run, the workflow substitutes a cold same-family review-only agent and states the substitution in the PR body and its return, and your verdict note repeats it — a substitution is never silent. State the model and effort in every launch and revisit them when an incident degrades a model.
  • You never pick, claim, code or push yourself. A picker (sonnet, medium; .claude/workflows/ersatztv-pick-next.js with the taken list as args) runs scripts/select-queue.sh, applies the kickoff's claim and bundle rules to live Gitea state, and two refuters try to overturn it; you accept, or take a refuter's better pick when its rule is right. Then one issue-build workflow per pick, from .claude/workflows/ersatztv-issue-build.js, passing the session's commit trailer as trailer.
  • Before picking anything, finish what is already open: every open non-Renovate PR and every in-progress issue with a branch is a paused branch, resumed through .claude/workflows/ersatztv-resume-branch.js from a JSON brief.
  • Keep three issues in flight, each in its own worktree under ~/orca/workspaces/ersatztv/wt-<n> on branch <n>-<slug>, cut from a fresh origin/main by absolute path, never under /tmp, and each with its own E2E port passed as port. Refill a slot as soon as one merges. Pass every running issue's files as the avoid list so two agents never edit one file; a pick that needs a file another slot holds waits for that slot.
  • Each implementer claims its own issue after the four-way check (open PRs, remote branches, comments predating the label, a fresh fetch), with the in-progress label and a claiming comment; rebases onto a fresh origin/main, runs the local gate and sits inside the two-lens review loop BEFORE its single push; its finisher opens a PR whose body says fixes #N for every issue in the bundle and states the cross-family review status, and posts the ## Closing record on each issue with the evidence per ## Done-when box, ticking nothing — a box ticked by the agent it certifies is self-consent.
  • You referee: read the verdicts and the evidence, send a PR back for anything that lets a route or test pass having done nothing, tick each Done-when box whose evidence holds, re-read the head sha, then post the verdict with scripts/post-review-verdict.sh <pr> MERGEABLE <note> and tick the review box. Merge only through the Gitea merge tool with the full head sha, so the consent hook derives consent from the ticked boxes, the sha-bound verdict and green CI. A rebase voids the verdict: the finisher rebases once before the push and reports whether the patch changed; a changed patch gets one more review round before you post. After the merge clear the in-progress label and remove the worktree.
  • Builds are capped at three to four concurrent and gated on free RAM; live-E2E runs one at a time per worktree on the slot's own port, and a busy port is reported, never taken over. Kill only PIDs you started, gently. A dotnet test or E2E run silent for ten minutes is a hang.
  • Reviewers never delete anything outside a scratch directory they created under /private/tmp and never build a path with .. segments; the auto-mode classifier is the last line, not the first.
  • Under an API incident (watch https://status.claude.com/api/v2/status.json), move mechanical finishers and probe-driven reviews to whichever model is healthy and park large implementation until it clears; back off before retrying.
  • Report to the user only what changes what they would do next: merged and closed issues, a send-back and why, a hang, an incident. Before any stop: the H12 audit (process.issue-qualification-audit), scripts/refresh-shared-checkout.sh, and a handoff memory naming every open branch, its worktree, its PR and its next step, so a resumed session finishes those before picking anything new.