diff --git a/ROADMAP.md b/ROADMAP.md index f4638dc..b023dd4 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -3,21 +3,20 @@ Phases beyond the first milestone (threaded single-flow review + merge/reject/deploy; see AGENTS.md `## Current state`). -## Phase 2 — Subagent panel, proven -- The lead `claude -p` reliably spawns the enabled subagents (reviewer / adjudicator / - security-auditor) and presents each opinion + its own recommendation. **Exit:** a real PR review - shows up to 3 distinct, labeled opinions + the lead's call; flaky headless subagent spawning - falsifies it → fall back to bot-orchestrated separate `claude -p` runs (the rejected alternative). -- In-chat `agents +/-` toggles change which subagents run on the next review, per room (persisted). - ## Phase 3 — Multi-repo at scale - Onboard ≥3 repos to their own rooms; confirm independent polling, no cross-talk. **Exit:** three - repos reviewed from three rooms in one run with no interleaving. -- Per-repo deploy (`[repo.].deploy_on_merge`) exercised on a non-static repo (not a Pages site). - -## Phase 4 — Spark Control tile -- Status badge + Update/Restart/Stop-Start/Logs, mirroring matrix-bridge's D10 (captured in the - cross-project inbox as a spark-control item). + repos reviewed from three rooms in one run. *(adjudicated 2026-07-18: verify — needs no new code; + rooms are already independent (per-room heads/threads/agents are namespaced, merge-confirm state is + keyed by room+PR). Check plan, when a real 2nd/3rd repo is onboarded: watch one poll cycle in + `docker compose logs -f`. Note the exit criterion is mis-stated — reviews run **serially** (one async + task walks the rooms in turn), so "no interleaving" is trivially satisfied; the thing actually worth + watching at 3+ repos is a long review **head-of-line-blocking** the next room's poll, i.e. the latency + problem the deferred poll→webhook item anticipates.)* +- Emit a heartbeat the poll loop touches, so a **wedged** bot (container up, sync/poll loop silently + stuck) is distinguishable from a healthy one — today it looks identical from outside. Crash detection + is already covered by spark-control's tile, which reads the container's docker state; this is only the + gap that leaves. Lightest correct form is a heartbeat file a Docker healthcheck or any monitor can + read, **not** an HTTP status server (this repo has no HTTP surface; don't add one for a badge). ## Deferred / non-goals - Not a Claude-session bot (that's matrix-bridge); not Maubot (revisit at ~6+ bots or web-UI mgmt); @@ -25,3 +24,5 @@ Phases beyond the first milestone (threaded single-flow review + merge/reject/de - A shared "bot kit" library (extract the common matrix-nio + SSH plumbing across the three bots) once duplication bites — the lighter step before ever considering Maubot. - Poll → webhook upgrade if 60s latency ever matters. +- Ops/dashboard tile lives in **spark-control**, not here — its Bots tab has shipped a gitea-review-bot + tile since v0.28.0 (status badge, Update, Start/Restart/Stop, View logs), confirmed live.