The dogfood swarm reviewed PR #1; folding in the warranted findings
(graded via the gadfly MCP — 18 real / 18 false-positive across the 4
completed reviewers):
- entrypoint.sh: finalize a never-written status file when run.sh skips
the binary (empty diff / no key / missing binary). The pre-seed stayed
{started:0, done:false}, so the board showed that model "waiting to
start" forever and the N/N counter never completed — breaking the
board's own "tell when everything is finished" invariant.
(glm-5.2, correctness — the strongest finding.)
- main.go: recover() in the per-lens goroutine. A panic previously
crashed the whole binary (killing every other lens's output) and left
the lens stuck "running" on the board. Now it's recorded as an errored
result and the lens is marked finished. (glm-5.2 + minimax-m3.)
- status-board.sh: coerce a non-numeric GADFLY_STATUS_POLL_SECS back to
12. Under `set -uo pipefail` a bad `sleep "$POLL"` failed silently and
the loop spun, hammering the Gitea API. (glm-5.2, error-handling.)
The remaining real findings (sanitizer collision, page-10 pagination,
markdown-injection via PR-controlled lens names, cosmetic blank line)
were graded trivial and left as-is — documented in the finding notes.
gofmt clean, go vet quiet, go build + go test -race green.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Phase 3 of the gadfly-games build. With several models × several lenses
reviewing a PR, all you'd see mid-run is a row of "⏳ Reviewing…"
placeholders. Add ONE consolidated, live-updating status-board comment
that aggregates every model's per-lens progress (queued → running →
finished + verdict), so progress is visible at a glance and a watcher
can tell when the whole swarm is done.
- cmd/gadfly: opt-in statusWriter (GADFLY_STATUS_FILE) publishes this
model's lenses to a JSON file, written atomically (temp+rename) as
runSpecialists transitions each lens. Inert when unset — plain runs
and tests are unaffected.
- scripts/status-board.sh: background renderer that polls the status
dir and upserts one marker comment every GADFLY_STATUS_POLL_SECS
(default 12s), caching the comment id to PATCH in place. Advisory and
best-effort; the per-model findings comments are untouched.
- entrypoint.sh: pre-seeds every model as queued, launches the board,
waits only on the review lanes, then signals .done for a final render.
Default on; disable with GADFLY_STATUS_BOARD=0.
- Docs: README config table + "Live status board" section, example
stub note, CLAUDE.md architecture map.
gofmt clean, go vet quiet, go build + go test -race green.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>