docs: mark WASM seam G1/R1 resolved in audit doc

This commit is contained in:
daniel-c-harvey
2026-06-07 13:02:21 -04:00
parent ba31e124f2
commit 22452815c6
2 changed files with 5 additions and 5 deletions
@@ -1,5 +0,0 @@
@using DeepDrftPublic.Client.Controls
+5
View File
@@ -15,11 +15,14 @@
### G1 — `DeepDrftHero` fade-up animation replays on home-page WASM boot (Mode B)
**Status: RESOLVED**
- **Files:** `DeepDrftPublic.Client/Controls/DeepDrftHero.razor` (markup), `DeepDrftPublic.Client/Controls/DeepDrftHero.razor.css` (lines 210).
- **What happens:** Five elements carry `class="fade-up"`. The CSS is `opacity: 0; animation: fade-up 0.8s ease forwards;` — an unconditional entrance animation that runs whenever the element mounts. `DeepDrftHero` sits on `Home.razor` (`@page "/"`), which is `InteractiveAuto`. On the WASM remount the hero subtree is recreated and the whole headline block fades up from transparent **a second time**, seconds after the page was already visible and settled.
- **Symptom:** The hero title / eyebrow / subtitle / desc / CTA visibly re-fade after WASM loads — the canonical "it animates, then a beat later animates again" regression. This is the home-page instance of the symptom the audit was opened against.
- **User-visible impact:** High. It is the first thing every visitor sees, above the fold, on the site root. Most-trafficked page, most-noticeable element.
- **Note:** This is *not* a missing PersistentComponentState — the hero fetches nothing. Persisting state will not help. See R1.
- **Resolution:** `DeepDrftHero.razor` updated to gate the `fade-up` animation class on `!RendererInfo.IsInteractive`. The SSR prerender pass renders with the class (animation plays on first paint); the WASM hydration pass renders without it (elements land in settled state, no replay). Approach used: Option A from remediation plan. Build clean, zero errors. Commit: `fix: gate hero fade-up on SSR pass only to stop double-fire on WASM hydration`.
### G2 — `NowPlaying` waveform/placeholder swap on WASM boot (Mode A-adjacent, lower severity)
@@ -56,6 +59,8 @@ These already bridge the seam correctly. Re-implementing or "tidying" them risks
### R1 — Stop `DeepDrftHero` fade-up from replaying on the interactive remount ⟵ only real fix needed
**Status: DONE**
Addresses **G1**. PersistentComponentState does not apply (no data). The animation must not re-fire when the hero subtree is recreated on the WASM pass. Three viable approaches, in order of preference:
**Option A (recommended) — gate the animation to first paint via a one-shot CSS marker.**