feat(ci): check-events v2 on builds — ci-report tests, ci.progress, Go runner wiring, live Checks section #423

Merged
gmackie merged 5 commits from fg-check-summary into main 2026-08-24 21:44:07 +00:00
Owner

Lands check-events v2 across ForgeGraph (Phase 3 of the check-events plan) on top of the native-adapter + ci-progress work.

Agent (Go) — manifest/mise CI runner tails the worktree's .fg/check-events.ndjson, POSTs the folded summary to /api/agent/ci-progress every 2 s, and ships the final summary as CIReport.tests.

Server — POST /api/agent/ci-report accepts tests (jsonb-merged into builds.metadata.tests); ci-progress publishes a ci.progress bus event so /api/fg/events streams ticking counts; /api/fg/ci/gate builds[] and /api/fg/ci/runs/:id/failures expose tests so agents get exact per-configuration results instead of log scrapes.

Web — CI run page gains a Checks section: one bar per configuration (typecheck · lint · test · e2e · build) with exact/scraped counts and failing tests + messages, polling /api/ci/:id/checks every 3 s while active.

Consumer already live — Bob's cockpit (bob master e0ca241c) reads builds[].tests from the gate and renders per-phase chips on PR rows; its gateway bridges ci.* SSE events to open walls.

Tests: web 23 (ci-report / ci-progress / Checks section), check-events package 44, Go checkevents/manifestci/agentci green; web + api typecheck clean.

Follow-up: an agent release (scripts/release-agent.sh) is needed before fleet runners post progress/summaries.

🤖 Generated with Claude Code

Lands check-events v2 across ForgeGraph (Phase 3 of the check-events plan) on top of the native-adapter + ci-progress work. **Agent (Go)** — manifest/mise CI runner tails the worktree's `.fg/check-events.ndjson`, POSTs the folded summary to `/api/agent/ci-progress` every 2 s, and ships the final summary as `CIReport.tests`. **Server** — `POST /api/agent/ci-report` accepts `tests` (jsonb-merged into `builds.metadata.tests`); `ci-progress` publishes a `ci.progress` bus event so `/api/fg/events` streams ticking counts; `/api/fg/ci/gate` builds[] and `/api/fg/ci/runs/:id/failures` expose `tests` so agents get exact per-configuration results instead of log scrapes. **Web** — CI run page gains a Checks section: one bar per configuration (typecheck · lint · test · e2e · build) with exact/scraped counts and failing tests + messages, polling `/api/ci/:id/checks` every 3 s while active. **Consumer already live** — Bob's cockpit (bob master `e0ca241c`) reads `builds[].tests` from the gate and renders per-phase chips on PR rows; its gateway bridges `ci.*` SSE events to open walls. Tests: web 23 (ci-report / ci-progress / Checks section), check-events package 44, Go `checkevents`/`manifestci`/`agentci` green; web + api typecheck clean. Follow-up: an agent release (`scripts/release-agent.sh`) is needed before fleet runners post progress/summaries. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
The shared streaming test-results contract (plan: 7uo9xiwyp0dd.postplan.dev).
JS: envelope types, NDJSON writer, tail/parse consumer (v1 bob-check lines
upgrade in place), adapters (go test -json, TAP, TeamCity service messages,
scrape) behind a sniffing dispatcher that locks onto the first structured
format and reports honest confidence, target detection (pkg scripts ->
justfile -> Makefile -> forge-ci.toml override), runPhase with go -json
injection, fg-check CLI with CTRF fold, first-class vitest + jest reporters.
Go: agent/internal/checkevents ParseLine/Tail/Collect/Summarize mirror for
the CI runner (per-stream count summing, failed-stream-sticks semantics).
Published 0.1.0 to npm.forgegraf.com.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
ChecksSummary renders builds.metadata.tests as the per-configuration phase
strip with failing tests; the route test pins the jsonb merge contract.
Package 0.1.2 adds the ./cli export (published via pnpm so publishConfig
exports apply — npm publish shipped a tarball whose exports pointed at the
pruned src/ tree).

The wiring edits to ci-report/route.ts, page.tsx, build-queue.ts,
manifestci/runner.go, agentci/dispatch.go, and pkg/client/client.go remain
in the working copy: those files also carry the in-flight mise-toolchains
WIP and a path-scoped commit would sweep it along.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Lands the other half of check-events v2: libtest (nextest), pytest
report-log and passthrough adapters + RSpec formatter; POST
/api/agent/ci-progress storing mid-run summaries under
builds.metadata.tests; the manifest/mise CI runner tails the worktree's
.fg/check-events.ndjson, posts progress every 2s and ships the final
summary as CIReport.tests.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
feat(ci): check-events summaries on builds — ci-report tests, ci.progress events, live Checks section
Some checks failed
CI / gitleaks (pull_request) Has been cancelled
CI / storybook (pull_request) Has been cancelled
CI / ci (pull_request) Has been cancelled
35ed37e8fc
- POST /api/agent/ci-report accepts `tests` (checkSummarySchema) and jsonb-merges
  it into builds.metadata.tests (the route test that shipped ahead of this
  now passes).
- ci-progress publishes a `ci.progress` bus event so /api/fg/events streams
  ticking phase counts to live consumers (Bob's cockpit bridge included).
- /api/fg/ci/gate builds[] and /api/fg/ci/runs/:id/failures expose `tests`,
  giving agents exact per-configuration results instead of log scrapes.
- CI run page: Checks section (one bar per configuration, exact/scraped
  counts, failing tests with messages) polling /api/ci/:id/checks every 3s
  while the build is active.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
docs(plan): check-events v2 — Phase 3 landed, consumer live
All checks were successful
CI / gitleaks (pull_request) Successful in 7s
CI / storybook (pull_request) Successful in 1m37s
forgegraph/ci CI passed
CI / ci (pull_request) Successful in 9m36s
e7b9e42c28
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
gmackie deleted branch fg-check-summary 2026-08-24 21:44:07 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
gmackie/ForgeGraph!423
No description provided.