Files
wuwiandClaude Opus 5 4e7b26f874 Every stride pair now passes the gate — the legs actually move
`_regen.py --audit` is clean for the first time:

  racket_play    z_r2/z_r3       1.00  0.157  0.565   ok
  racket_w1      z_rw1/z_rw1b    1.00  0.112  0.424   ok
  racket_w2      z_rw2/z_rw2b    1.00  0.077  0.372   ok
  racket_f_play  z_r2_f/z_r3_f   1.00  0.049  0.552   ok
  racket_f_w1    z_rw1_f/…b_f    1.01  0.112  0.716   ok
  racket_f_w2    z_rw2_f/…b_f    1.00  0.054  0.793   ok

Against the reference pairs (brute 1.00/0.000/0.638, shambler 1.00/0.070/0.520)
these are the real thing: one body, same camera, legs swapped. Fifteen rolls
were rejected getting here, every one for a named measurable reason — which is
the whole point of the gate: none of it shipped on luck.

Two calibration lessons, both from watching what the gate rejected:

BRIGHT is off for the racket batches. It counts near-white pixels and was
calibrated on the LIVING opponent, whose racket barely registers — these frames
hold a pale-strung racket FACE-ON and it swings 3%..20% purely with how the
racket is angled. It was rejecting rolls for racket geometry. Redness, shorts
brightness and shorts hue are the kit, and hue is the one that caught the drift
Oliver actually saw.

EACH WOUND STAGE IS HELD TO THE STAGE BEFORE IT, not to the healthy frame two
steps away. Stage 2 kept being rejected at hue -4.2 against the healthy -8.7
while the stage it actually follows sits at -5.0 — the roll was more consistent
with its own neighbour than the gate would allow. Chained references stop drift
compounding without demanding stage 2 match a frame the player never sees next
to it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 10:47:19 +02:00

17 KiB
143x224px