feat(uniform): substitute via direct encoder hook, not the bit-copy path
The per-field bit-copy path can't reliably pair a value-copy to its field (WriteFieldList's two-stream layout), so uniform substitution was flaky/invisible or corrupted neighbouring fields. Pivot uniform (all-clients) substitution to hooking the per-field encoder directly (the mechanism that showed 1337 HP live in early testing): the encoder receives the field's fieldInfo as an arg -> unambiguous field identity, no pairing -> redirect the value pointer to a scratch holding the fake value in that encoder's layout. Runs once during the shared pack, so every client sees it. New UniformEncoderHook: one shared managed hook over all encoder detours, dispatched by the live dispatch fn (= the hooked addr) to its trampoline + bucket type; matches by field name; value-kind checked against the real encoder type. SetUniform(...) now routes here; per-client callbacks stay on the bit-copy path (FieldSubstitution). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
P
Prefix committed
0fdd7081d16355f5ae627f6f6f432aa756c62871
Parent: 100510f