--- title: Demo-Readiness Polish Pass — redesign closeout review + full four-area polish date: 2026-07-04 tags: [session, polish, demo, review, netcode, hud, audio, onboarding, dots-dev] permalink: gamevault/07-sessions/2026/2026-07-04-demo-polish-pass --- # Demo-Readiness Polish Pass (/dots-dev, ultracode) Operator brief: *"overall complete polish pass, ready for a game demo"* → intake locked: hands-off public demo, standalone Windows co-op build, finish-the-redesign baseline, all four polish areas. Full decisions + finding table: [[DR-044_Expedition_Redesign_Shipped_Demo_Polish]]. ## How it went 1. **Ground fan-out** (`wf_d3f1890a-8ca`, 3 read-only agents) — headline: the 07-02 log said "steps 1–11" but `Run Re-Do` already contained 12a/12b/13/14. Only the post-impl review + doc bookend were missing. 2. **Baseline verify** — 452/452 EditMode + clean netcode Play boot (born-correct Staging on both worlds). 3. **Post-impl adversarial review** (`wf_38ef58c2-8bd`, 3 lenses → per-finding critics, 15 agents, 0 failures) — 7 confirmed / 3 refuted. All 7 fixed same-session + pinned (`RunRosterRegressionTests`, `TerminalCampaignRollTests`); the two contradictory critic verdicts on the respawn stray line were adjudicated by reading the code (artifact confirmed, deleted). 4. **Stability slice** — ConnectionWatchdog/SessionEnd/menu-reason plumbing; mode-aware outcome banner; terminal-save roll-forward; save-before-restart. 5. **UI slice** — READY panel, drawn route map (Painter2D DAG + client path trace), onboarding re-author (the dead at-base Mine step was a first-run soft-lock), How-to-Play rewrite, DOWNED countdown. 6. **Feel/audio slice** — 4-layer phase-locked procedural music, Fabricator can-die parity, core-hit alarm, landing grace, slash-arc reach fold (local+remote), Warrior cone VFX, boss bar+roar, rarity borders, depth dots, outcome flourish, shop pips, core-crystal tint system. 7. **Sweep** — build scenes → MainMenu+Game only; `com.unity.ai.assistant` removed; corrupt whitespace-only `Simulation/Meta.meta` (committed in Run Re-Do; surfaced on the package re-resolve) deleted → regenerated. ## Validation 456/456 EditMode · repeated Play smokes (launch conscription sampled tick-by-tick; wipe-abort self-validated; zero exceptions) · L3 screenshots: staging READY panel + meta shop, route map with lit path + depth dots, rarity boon modal. The route-map/boon states were forced via the disable-the-driver idiom (`ResolveSystemStateRef(handle).Enabled = false` on `RunDirectorSystem`, then write `RunInfo` server-side). ## Gotchas worth remembering - **A session log can lag the commit** — ground the working tree, not the log's "Remaining" section. - **Two critics can contradict each other** (one refuted, one confirmed the same stray line) — adjudicate at the source before acting. - **A committed `.meta` can be whitespace-corrupt and stay latent** until a package re-resolve forces a full reimport ("GUID cannot be extracted"); Unity's own advice applies — delete it, let it regenerate (folder GUIDs are unreferenced; script GUIDs live in their own metas). - **`CombatFeedbackSystem` already owns the `AbilityCooldown` fire-edge latch** (muzzle flash) — a second consumer needs its OWN latch field or it never sees the edge (CS0102 caught the collision). - The idle-player death→respawn→wipe-abort arc is the system working, not a bug — but it exposed the missing landing grace. ## Operator-side next steps Standalone build (`ProjectM/Build/Windows Player`) + 2-instance smoke: `-mhost` / `-mjoin 127.0.0.1`, then kill the host and expect `[ConnectionWatchdog] CONNECTION LOST…` in the joiner log (that line also proves the join connected); a dead-IP join should log the 12 s timeout. Onboarding fun-gate via Settings → Force Each Launch. Explicitly deferred to operator art curation: HudTheme structure icons, projectile/pickup placeholder meshes.