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>
This commit is contained in:
wuwiandClaude Opus 5 committed 2026-08-12 10:47:19 +02:00
1 parent ef88429887
commit 4e7b26f874
12 files changed
+12 -12

No files matched your search

+1 -1
View File
@@ -195,7 +195,7 @@ export function proj(x, y, z) {
// Asset cache-buster — bump with main.js?v=N (see the img.src note below). EXPORTED because the
// menu screens hang <img> tags on the same files, and two copies of this number is one copy too
// many: the one that does not get bumped is the one that serves a cached 404.
export const SPRV = 94;
export const SPRV = 95;
// The boot bar in main.js watches this. Nothing here CHANGES when things load — every sprite was
// already requested at import — it just makes the wait visible and holds the menu back until the
// last sheet has landed. See the onerror note below for the other half of "sometimes missing".