perf: gate per-client hooks on registration emptiness
The per-client substitution detours fire on the hottest paths — ValueCopyHook runs for every field copy of every entity for every client, and it was walking the CFieldPath to resolve a field name on each. With no per-client registrations there's nothing to substitute, so short-circuit at the top of all four capture/ copy hooks (ValueCopyHook, GetBitRangeHook, WflShim, WdeEntityCaptureHook) on _registry.IsEmpty — the detour then costs one check plus the trampoline. The uniform encoder hook already gates on _byName.IsEmpty. Correct by construction: no registrations means the unmodified value is what would have been written. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
P
Prefix committed
bcd093ca4c9688084224bb306679431916ea29fd
Parent: c0444e9