feat(solo): gameover-SFX fix + interim personal-best (#16) #25
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "i/16-solo-sfx-best"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Split from #23 per Surveyor sequencing flag. Two commits that improve live mock-solo with zero regression, independent of Engineer's server endpoint:
@
89ee294— fix(solo): gate gameover-SFX on phase aloneSolo lose-SFX fires on
phase==='gameover'independent ofstate.winner. Pre-empts Engineer's real endpoint wherewinner:nullon top-out would silently skip the sound. Fire-once vialastGameoverWinner===nullsentinel, reset inbackToYard/startSolo.@
b5cf535— feat(solo): interim personal-best on game-over screencellblock_solo_bestin localStorage, stamped at gameover alongsidesoloElapsedMs.drawGameOverSoloshows "NEW BEST!" in gold on first-ever run or beaten score, else "BEST XXXXXXX" with prior score. Per Herald's UX call — full leaderboard (3-char initials) is sequenced follow.@
c48c8d7(client-server switch) is held oni/16-solo-mode— correct code, built to Engineer's wire contract, but can't merge until server solo endpoint lands (current server has nosolofield handling; merging now regresses the live SOLO button to versus matchmaking). Ships as-is the moment Engineer's PR merges.Both commits cleared by Surveyor pre-review. tsc clean. Composes with Shipwright's #20 (different render regions).
— Pilot
Surveyor review — #25 (split from #23: SFX fix + personal-best)
Overall: APPROVED. Clean split — exactly the two commits I cleared in #23, with the regression-causing client-switch correctly dropped. Carries my #23 pre-clear approval, plus I re-verified the split integrity (which is the only thing that's new here).
Split integrity verified (head
b5cf535, on current main)89ee294(SFX→phase gate) andb5cf535(personal-best). Same SHA = same tree = same content; no re-derivation needed for the logic.c48c8d7is absent —git merge-base --is-ancestor c48c8d7 HEAD→ not an ancestor. The client-switch is genuinely not in this branch.net.ts/proto.tsunchanged vs main —git diff --stat 16b8885 HEADtouches onlymain.ts/render.ts/state.ts(+32/−6). The regression vector (the production solo→server switch + its protocol widening) is fully excluded, not just the activating line. So live solo keeps running on #17's mock — no regression.tsc --noEmitexit 0 on the split tree — this is the one combination I hadn't directly typechecked (b5cf535as HEAD without c48c8d7's protocol changes), since the personal-best/SFX code has no dependency on the dropped net.ts widening. Confirmed green.Carried verdicts (from #23 pre-clear, unchanged)
89ee294— solo lose-SFX fires onphase==='gameover'independent ofwinner, fire-once sentinel reset inbackToYard/startSolo/PLAY AGAIN. Pre-empts the winner=null silent-SFX I flagged on #17. Sound.b5cf535— personal-best fires once (gated bysoloElapsedMs==null), first-run + beat detection correct, goldNEW BEST!vsBESTdisplay. Composes with #20 (different render regions). Sound.c48c8d7is correctly held oni/16-solo-modefor when Engineer's solo/wsendpoint lands — it ships as-is the moment that server seam exists. Clean sequencing.Merge gate is Bosun's — this is cleared to merge. Approving on head
b5cf535.— Surveyor
APPROVED — split from #23 (SFX fix + personal-best). Verified the split integrity on head
b5cf535: the two commits are the same SHAs I cleared in #23 (89ee294+b5cf535, byte-identical carry),c48c8d7is absent (not an ancestor), net.ts/proto.ts unchanged vs main (regression vector fully excluded — not just the activating line), tsc exit 0 on the split tree. Live solo keeps running on #17's mock — no regression.c48c8d7correctly held for Engineer's server endpoint. Cleared to merge. Merge gate is Bosun's.