Heartbeat dropped: a Docker healthcheck badge restarts nothing under this
container's setup, spark-control's tile would need its own change to read it,
and serial per-room polling (a review may run 10 min) makes any staleness
threshold either too loose to be timely or noisy mid-review. No wedge has ever
been observed. Reopens on an observed wedge plus confirmation the tile already
renders Docker health.
Replaced by a fold-in, since the realistic failure is a hang rather than a
crash: bound the two unbounded awaits in src/bot.py and stop the process if the
poll task ever dies, letting restart: unless-stopped and the existing
spark-control tile cover it.
AGENTS.md Current state reconciled to match. Phase 3's onboard-3-repos verify
item stands (inside the 14-day skip window).
Phase 2 (both lines) — done. The headless review spawns the enabled
subagents and prints each verdict under its own heading (src/bot.py),
proven end-to-end on ten31-site PR #4; the `agents +/-` handler updates
and atomically persists each room's enabled set. Finished milestone, and
the record already lives in AGENTS.md Decisions + Current state.
Phase 4 (Spark Control tile) — already built elsewhere. spark-control's
Bots tab has had a first-class gitea-review-bot entry since v0.28.0, same
code path as matrix-bridge; the running dashboard reports it live. The
work was never this repo's. Left a one-line pointer under Deferred.
Phase 3, deploy-on-a-non-static-repo — dropped. No repo needs it (only
the static ten31-site is onboarded), and it isn't doable as written: the
deploy step is hardcoded to the static-site publish script and the only
per-repo knob is on/off, not a per-repo deploy command. Exercising it
means a real deploy plus a force-merge against a live service. Revisit
when a concrete non-static repo needs it — that repo is the honest test
target, and the deploy-command field comes first.
Phase 3, three-repo onboarding — kept, annotated with its check plan and
a correction: reviews run serially, so the stated "no interleaving" exit
is trivially satisfied. What matters at 3+ repos is a long review
head-of-line-blocking the next room's poll.
New: heartbeat for wedge detection. Scoped to the gap the tile leaves —
it reads container state, so it catches a crash but not a stuck sync/poll
loop, which looks identical to healthy from outside.