b80aa1b24b
- New TuningInvariantTests (6 tests). Two gaps the audit named:
* The six-site knob drift: adding a knob touches the struct field,
Defaults(), the TuningKnob const and three switches, and nothing
caught a knob wired into Apply but forgotten in ClampKnob. The clamp
is the only thing stopping a 0 reaching the i-frame divide, which
TuningConfig's own header records as "NaNs the kinematic body
permanently". Now every LIVE knob round-trips Apply -> Get against
ClampKnob.
The knob set is read by reflection, not assumed to be 0..Count:
CLAUDE.md reserves retired indices (20-23), so the space has holes
on purpose. A second test pins that those stay reserved — re-using
one would silently re-mean a value in saved feel profiles and in the
DebugOp wire payload.
* MeleeTiming had ZERO test references while producing the locked
20/12/25 contact ticks, and MeleeComboTests pins fixture values that
differ from the shipped defaults on nine of ten knobs. The new tests
assert RELATIONSHIPS against Defaults() — finisher contact stays
inside both CastFacingTicks and MeleeRecoverTicks — so a deliberate
retune stays green and only a broken coupling fails. That coupling
was previously enforced only by a [MenuItem] a human had to remember
to run.
- Test asmdef now references ProjectM.Authoring + Unity.Entities.Hybrid,
so bakers are reachable from tests at all (L18). Nothing referenced
them before, which is why "no prefab carries ChargerAuthoring" could
coexist with a green suite.
CORRECTION to the audit: "10 test files leak ECS Worlds" is REFUTED.
That finding came from counting `.Dispose()` tokens, which misses the
`using (world)` blocks these files actually use. Measured empirically:
World.All is 6 before the suite and 6 after — zero leaked.
304/304 green.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>