Name the Gym in ADMIN-001 and its enumerating proof

d2fdc705c7f4 · AtlantisPleb · · parent cf7d68e2d6cd

Name the Gym in ADMIN-001 and its enumerating proof

The /gym surface landed classified :operator without being named in
ADMIN-001's write enumeration or the operator-surface declared tables,
so the enumerating proof was red at HEAD — caught by the invariant
proof audit (docs/2026-08-24-invariant-proof-audit.md, finding 1). The
route, GymLive, and GymRunController are now declared, and ADMIN-001
records what the Gym write is and why the surface is operator-only.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GoYpb8FEmdxVErsv7ABCYi
Co-Authored-By
Claude Fable 5 <noreply@anthropic.com>

Deploy story

What this commit did to the running system — joined from the forge receipt chain, the part a commit page elsewhere cannot show.

pushed
by user · WAL seq 331 · 2026-08-25T02:57:01.630474Z

Changed files

  • modified INVARIANTS.md
  • modified test/openagents_web/operator_surface_test.exs

Diff

2 files changed, +11 -0

INVARIANTS.md modified +7

@@ -2896,6 +2896,13 @@ sentence:

2896 2896
  `/api/operator/artifact-listings`.
2897 2897
- Creating, cancelling, resuming, and replaying continual-learning jobs under
2898 2898
  `/api/operator/continual-learning/jobs`.
2899
- Recording a graded Gym run under `POST /api/v3/gym/runs`
2900
  (`OpenAgentsWeb.GymRunController`, which rechecks the operator on every
2901
  request over the bearer scope), and reading the scoreboard from `/gym`
2902
  (`OpenAgentsWeb.GymLive`, recheck on mount and on every event). A run is a
2903
  benchmark record — recipe digest, task, model, lane, reward, duration —
2904
  never account data; the surface is operator-only because it is
2905
  pre-release instrumentation, not because it reads across accounts.
2899 2906
2900 2907
Reading a private forum board and raising a repository's transparency tier to
2901 2908
`glass` are operator reads that widen with the same allowlist
test/openagents_web/operator_surface_test.exs modified +4

@@ -37,6 +37,7 @@ defmodule OpenAgentsWeb.OperatorSurfaceTest do

37 37
    {"get", "/admin/recordings", "voice:recording:list", false},
38 38
    {"get", "/admin/tokens", "tokens:productivity:read", false},
39 39
    {"get", "/chat", "chat:preview", false},
40
    {"get", "/gym", "gym:read", false},
40 41
    {"get", "/api/v3/admin/forge/targets", "deployments:promote", false},
41 42
    {"get", "/api/v3/admin/forge/targets/:id", "deployments:promote", false},
42 43
    {"get", "/api/operator/artifact-listings/:id/export", "artifact-catalog:operate", false},

@@ -96,6 +97,9 @@ defmodule OpenAgentsWeb.OperatorSurfaceTest do

96 97
    OpenAgentsWeb.ForumApiController => "gates topic, post, and claim moderation over the API",
97 98
    OpenAgentsWeb.ForumBoardLive => "widens the board listing to private boards",
98 99
    OpenAgentsWeb.ForumTopicLive => "widens the topic read and gates closing and hiding",
100
    OpenAgentsWeb.GymLive => "rechecks the operator on mount and on every event",
101
    OpenAgentsWeb.GymRunController =>
102
      "rechecks the operator on every request before recording or listing gym runs",
99 103
    OpenAgentsWeb.HomeLive => "marks the session operator for the home surface",
100 104
    OpenAgentsWeb.Layouts => "shows the operator entries in the sidebar",
101 105
    OpenAgentsWeb.Plugs.OperatorApiTokenAuth => "rechecks the operator behind /api/operator",

This page updates live while a promote is in flight · changelog