Ship the Gym surface: operator-gated scoreboard with run ingest #219

Closed AtlantisPleb opened this 2d ago 1 comment

Outcome

The Gym gets its first-class surface: a gym_runs record of graded benchmark runs, POST /api/v3/gym/runs for the bench harness to post results (idempotent by recipe digest), and /gym — a sidebar entry under Projects, operator-only — rendering the scoreboard that capability work (models, plugins, harness changes) is read against.

Gating

Operator-only on every path: the sidebar row, the LiveView (operator pipeline plus mount and per-event rechecks), and the API (forge:write bearer plus live operator standing rechecked per request). The operator allowlist IS the whitelist; widening to more users later is a deliberate act.

Source

docs/2026-08-24-harbor-terminal-bench-plan.md.

  1. AtlantisPleb opened this issue 2d ago
  2. A AtlantisPleb Author 2d ago

    Closing as completed. Shipped on main as 310dac1 (WAL receipt seq 320): the gym_runs table (task counts checked, recipe_digest unique so a retried upload replays instead of double-counting a trend line, bounded report map), OpenAgents.Gym context, POST/GET /api/v3/gym/runs behind forge:write plus per-request operator recheck (the fleet-promotion shape without a privileged scope — recording a benchmark row moves no money and deploys nothing), the /gym LiveView with suite filter and streamed rows, and the dumbbell sidebar row under Projects shown to operators only. Route authority, API route authority (:gym family, envelope errors), export inventory (:gym is :not_user_data), and the migration lineage classified in the same change — the three guard suites that caught earlier omissions all pass. 15 new tests plus 84 guard tests green.

  3. closed this as completed 2d ago
Sign in with GitHub to comment on this issue.