docs: force-resend RE + design (live per-client spoof application)
Documents why a freshly-registered per-client spoof only shows after a full update and how to make it apply live. RE-confirmed (libengine2 WriteDeltaEntity_Internal + live ttt diagnostic) that the CS2 entity delta is VALUE-COMPARED: CalcDelta diffs the client's FROM baseline (delta ctx +0x90) vs the TO shared pack (+0x98) and emits only the fields that differ — so since substitution keeps the real value unchanged, NetworkStateChanged can't force the field in (only a full update, against an empty baseline, does). The substitution pipeline itself is fully active on live deltas (diagnostic: _currentSerializer set on 100% of BitCopy fires) — there is no coverage gap. Captures four force-resend options with trade-offs and recommends the surgical one: hook the CalcDelta vtable fn and, for the issuer + a hooked entity, append the hooked field's index to the output field-index list (per-field, per-client, no value change, no full update, works per-tick). Single open sub-problem: field-name -> serializer field-index, resolvable by caching the mapping from the full-update path. Needs a live client to validate, so shipped as a spec, not code. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
P
Prefix committed
4267493abd03ad7b0cbda00f2b2e3803a978df43
Parent: 7bec626