oskiewar debug: training boxes in the agreed colors, and a frame meter master
Debug mode already drew boxes. It drew them in cyan limbs, a RED head and a green pushbox — the same three facts wearing the wrong three colors, and the red head was the worst of it, reading as "this is the dangerous part" about the most vulnerable part there is. Now it is the arrangement every fighting game and every hitbox site has agreed on: green is what can be hit, red is what is hitting, orange is the space the body occupies. A swing that has already landed is drawn in recovery blue rather than hitbox red, because `attackHit` makes a strike land once and the rest of its window cannot hurt anybody. A red box that cannot hit is the most misleading thing a training overlay can show. And a frame meter, Street Fighter 6's legend because it is the one people already know: green startup, red active, blue recovery, yellow stun. What those mean HERE is a question about this game, and the honest answers are not all flattering: startup is structurally zero. `startMelee` sets `attackUntil` and `resolveMelee` gates on nothing but `now < attackUntil`, so a strike is live on the frame it is thrown. The meter computes the phase anyway, against a named `meleeActiveFrom = 0`, so the day an anticipation window exists it lights up rather than being remembered. active is a swing that can still connect. recovery is a swing that is spent — the limb hanging out after `attackHit`, which is precisely what a player is being punished for. stun is `hitStunUntil`, hit and shield-break alike. Shielding keeps a color of its own, because holding a shield here is a stance rather than a reaction and folding it into stun would say something false about who is in control. Two rows stacked so the frames line up vertically. That column alignment IS the instrument — reading "my recovery sits under their active" is the whole reason the thing exists — and it is why this is a stacked pair rather than a row per player somewhere convenient. The legend lists only the states the last two seconds actually contained; a legend of colors that are not on screen is a thing to decode rather than read. It draws on the screen-UI layer, which the layering test caught: it was sitting at the debug-geometry depth where a tall enough piece of world could have drawn through it. Bounded at 120 frames, cleared at the bell, and recorded only while the overlay is on, after the exchange resolves so a frame that landed reads as the recovery it became. Engine suite 251 passing against the same 73 failures HEAD has. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>