Bounded, reversible, and it can refuse

Improving a team Shipped

Score a team against its own rubric, propose edits, apply the ones you approve, re-run, and stop when a deterministic authority says to.

The walls

  • The proposing dispatch is read-only. It can propose, it cannot write — the session applies approved edits.
  • Nothing under evals/ is ever a valid edit target. The loop must not edit its own rubric mid-run.
  • At most five proposals per iteration, capped at three iterations (hard max five).
  • A clean git tree is required to start, because the rollback trail is load-bearing.
  • Convergence means every criterion scores at least 8 on every primary scenario. Holdouts confirm at the end; they never gate.
  • A confirmed regression reverts to the best-scoring commit — a git revert, never a reset.
  • Every iteration pauses for you. A plain "keep going" is structural, enforced by a guard that refuses to advance an un-acknowledged iteration.

socialteam, scored against its own rubric

  • Baseline20 / 100blocked — no web access
  • After iteration 168.18 / 100tool grant fixed
  • After iteration 287.27 / 100halted at the cap

Reported as halted, not converged: it stopped at the iteration cap with one criterion finishing at 7 against a bar of 8. A run that stops one point short is not a success, and calling it one is how a rubric stops meaning anything.

The iteration gate

The loop stops here every time. The proposing dispatch is read-only, so nothing on this screen has been written yet — a plain "keep going" is what applies it, and a guard refuses to advance an iteration you never acknowledged.

What the iterations actually found

socialteam's 20.0 baseline was not the team being bad at writing — it was a missing tool grant. The generated authoring objective denied its own child web access, so the team honestly reported that it was blocked and produced nothing. Fixing that took it to 68.18, but freshness regressed to 1 because a prose instruction was being overridden. Iteration two moved that window into fixed doctrine and freshness went to 10. The lesson written down afterward: doctrine files bind, method prose gets overridden.

Every iteration is a commit

Which makes rollback ordinary git history rather than a bespoke undo, and makes the improvement itself reviewable by the same pipeline that reviews everything else.