Docs: 07-21 auto-recast root-cause correction (wire-count InputEvent ★), harness lessons, CLAUDE.md net-zero trims
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -3,7 +3,34 @@
|
||||
**Operator: "after casting an ability - it seems to auto recast - also I want to be able to see the cds of
|
||||
socketed abilities + dash. do a rework of the ui."**
|
||||
|
||||
## Auto-recast: diagnosed NOT a sim bug — a telegraph misread (fixed)
|
||||
> ## ⚠ CORRECTION (same day, operator re-report): the auto-recast WAS a real sim bug
|
||||
>
|
||||
> The section below stands as the record of a **false negative**: the morning guardian window (500 frames on a
|
||||
> fast unfocused editor) ended BEFORE the 7 s Vortex cooldown did, so "1 press = 1 stamp over 8 s" proved
|
||||
> nothing about the reopen. The operator's sharper re-report ("as soon as the cd is over it recasts") forced a
|
||||
> longer watch through the REAL input path (synthetic `QueueStateEvent` keyboard taps), which reproduced a
|
||||
> **self-sustaining recast loop: a new cast at EVERY cooldown reopen, forever, from one press**
|
||||
> (`t3933 NF0+zone; t4353 NF0+zone; …`).
|
||||
>
|
||||
> **Root cause (pre-existing, shipped with the 07-15 socket kit):** Netcode's copy layer ACCUMULATES
|
||||
> `InputEvent` counts on the wire — the gather's per-frame reset never reaches the command buffer (live proof:
|
||||
> every buffered command carried `Socket0.Count=2, IsSet=true` while both decoded components read clean). Only
|
||||
> the decoded COMPONENT is delta-corrected (why Blink/melee/dash never looped). `AbilityFireSystem`'s windup
|
||||
> resolve reads the RAW buffer (`GetDataAtTick`) and gated on `IsSet` = `Count > 0` = "ever pressed" — so after
|
||||
> the first press of a session, every socket refired the instant its cooldown reopened.
|
||||
>
|
||||
> **Fix:** the gate is now a count-STEP vs the previous tick's command (Netcode's own decode semantics; missing
|
||||
> previous command = no-fire — dropping a buffer-edge windup press beats an infinite loop). Test helper
|
||||
> rewritten to model the wire truth (monotonic counts persisting across commands) + regression
|
||||
> `Cast_Never_Refires_When_The_Cooldown_Reopens` (fails against the old gate). **430/430**; live re-verify:
|
||||
> one tap → one cast → silence across the reopen + two more full periods. The zone-telegraph drain-inward
|
||||
> change below remains correct (it WAS also visually mimicking recasts) but was not the root cause.
|
||||
>
|
||||
> **Lessons banked:** a guardian window must OUTLIVE the period it's judging (frames ≠ ticks on a fast editor);
|
||||
> `DebugInputInjectionSystem` writes the component and can NEVER reproduce wire-semantics bugs — synthetic
|
||||
> `QueueStateEvent` through the real gather can; the wire-count gotcha is now a CLAUDE.md ★.
|
||||
|
||||
## Auto-recast: the original (WRONG) presentation-only diagnosis — kept for the record
|
||||
|
||||
- Static analysis: the gather is edge-clean (`Socket0 = default` + `.Set()` only on `wasPressedThisFrame`,
|
||||
PlayerInputGatherSystem:180-186); the injection system self-expires. No sim path to a refire.
|
||||
|
||||
Reference in New Issue
Block a user