feat(tour): multi-project parallel fan-out — one runner per repo

Two or more project paths dispatch one general-purpose runner per repo,
all in a single message, instead of processing repos one by one. The
runner inherits the session model — no pin, it carries tour's reflection
(fix decisions, convergence) — and every agent inside keeps its defined
tier (security-auditor sonnet, Phase B opus, doc-syncer sonnet). A dead
or mute runner becomes an explicit RUNNER FAILED summary row; the gated
capitalize offer stays in the main loop, never in a runner.

Bounded LRN-083 derogation recorded in BDR-084: the per-project fix loop
moves into its runner, but nothing a runner decides touches shared state
— independent repos, per-repo chore branches, branches left unmerged for
human review exactly as inline. Mechanics proven before building: nested
probe, 3 sub-agent windows all overlapping, 9.1s vs ~18s sequential.

Census §12: 6 locks, flip-tested. Single-project path unchanged.
This commit is contained in:
Bastien Chanot
2026-08-24 14:18:59 +02:00
parent 4ededc75ab
commit 543b0c811a
6 changed files with 90 additions and 7 deletions
+11
View File
@@ -70,6 +70,17 @@ has "agents/validator-analyzer.md" 'model: sonnet'
has "agents/plan-challenger.md" 'model: opus'
fm_lacks "agents/client-handover-writer.md" 'model:'
fm_lacks "agents/interviewer.md" 'model:'
# 12) tour multi-project fan-out (BDR-084) — runner INHERITS the session
# model (no pin: it carries reflection), inner agents keep their tiers,
# dispatch is single-message, capitalize stays in the main loop.
has "skills/tour/SKILL.md" 'STEP 0b — MULTI-PROJECT FAN-OUT'
# shellcheck disable=SC2016 # literal backticks — no expansion intended
has "skills/tour/SKILL.md" 'NO `model` override'
has "skills/tour/SKILL.md" 'ALL in a SINGLE message'
has "skills/tour/SKILL.md" 'MAIN LOOP ONLY, never inside a'
has "skills/tour/SKILL.md" 'RUNNER FAILED'
lacks "skills/tour/SKILL.md" 'description="tour runner", model='
has "skills/onboard/SKILL.md" 'model="opus"'
has "skills/tour/SKILL.md" 'model="opus"'
has "lib/challenge-plan.md" 'BDR-076'