Files
2026-03-10 21:36:09 +01:00

89 lines
5.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
phase: 3
slug: complete-experience
status: draft
nyquist_compliant: false
wave_0_complete: false
created: 2026-03-10
---
# Phase 3 — Validation Strategy
> Per-phase validation contract for feedback sampling during execution.
---
## Test Infrastructure
| Property | Value |
|----------|-------|
| **Framework** | Manual gameplay testing (no automated framework — no test setup in scope) |
| **Config file** | none — Wave 0 installs N/A |
| **Quick run command** | Open `index.html`, click through Title → Mode Select → Game → Game Over |
| **Full suite command** | Full playthrough: all modes (AI easy/medium/hard, 2P), all palettes, sound toggle, audio timing |
| **Estimated runtime** | ~3-5 minutes |
---
## Sampling Rate
- **After every task commit:** Run quick manual test (open index.html, navigate Title → Settings → Mode Select → Game → Game Over)
- **After every plan wave:** Run full suite (all game modes, all palette switches, sound toggle, audio verification)
- **Before `/gsd:verify-work`:** Full suite must complete with no errors; all screens render; keyboard nav works; audio plays correctly
- **Max feedback latency:** ~5 minutes
---
## Per-Task Verification Map
| Task ID | Plan | Wave | Requirement | Test Type | Automated Command | File Exists | Status |
|---------|------|------|-------------|-----------|-------------------|-------------|--------|
| 3-01-01 | 01 | 1 | SCRN-01 | manual/visual | Open index.html → title screen renders with game name + neon branding | ❌ manual | ⬜ pending |
| 3-01-02 | 01 | 1 | SCRN-02 | manual/keyboard | Press Enter on Play → mode select screen renders, arrow keys navigate | ❌ manual | ⬜ pending |
| 3-01-03 | 01 | 1 | SCRN-03 | manual | From title, press Settings → settings screen renders with difficulty/sound/palette | ❌ manual | ⬜ pending |
| 3-01-04 | 01 | 1 | SCRN-04 | manual | Play game to completion → game over screen shows winner + score + options | ❌ manual | ⬜ pending |
| 3-02-01 | 02 | 2 | AUD-01 | manual/audio | Start game, rally ball → paddle hit sound plays each collision | ❌ manual | ⬜ pending |
| 3-02-02 | 02 | 2 | AUD-02 | manual/audio | Ball bounces off wall → wall hit sound plays (distinct from paddle hit) | ❌ manual | ⬜ pending |
| 3-02-03 | 02 | 2 | AUD-03 | manual/audio | Ball passes paddle → score sound plays (deep thud, distinct from others) | ❌ manual | ⬜ pending |
| 3-02-04 | 02 | 2 | AUD-04 | manual/console | Page load → AudioContext.state = 'suspended'; first keydown → 'running' | ❌ manual | ⬜ pending |
| 3-02-05 | 02 | 2 | AUD-05 | manual | Settings → Sound OFF → no audio plays; Sound ON → audio resumes | ❌ manual | ⬜ pending |
*Status: ⬜ pending · ✅ green · ❌ red · ⚠️ flaky*
---
## Wave 0 Requirements
None — existing infrastructure (Phase 2 game loop in index.html) covers all phase requirements. Phase 3 adds manual gameplay tests only. No dedicated test framework is in scope for v1.
*Existing infrastructure covers all phase requirements.*
---
## Manual-Only Verifications
| Behavior | Requirement | Why Manual | Test Instructions |
|----------|-------------|------------|-------------------|
| Title screen renders with neon game name and branding | SCRN-01 | Requires visual inspection of canvas rendering | Open index.html, verify title displays with glow effect and arcade aesthetic |
| Mode select screen navigates with arrow keys | SCRN-02 | Requires keyboard input + visual verification | Press Enter → verify mode select; use Up/Down arrows; verify highlight changes |
| Settings screen: difficulty/sound/palette changes apply | SCRN-03 | Requires keyboard interaction + visual/audio feedback | Open Settings, change each option, verify game reflects changes |
| Game over screen shows score + winner + navigation | SCRN-04 | Requires completing a full game match | Play to score limit, verify PLAYER X WINS NM format, Play Again returns to mode select, Main Menu returns to title |
| Paddle hit sound plays | AUD-01 | Requires audio device + active listening | Start game, rally ball, listen for mid-range tone on paddle collision |
| Wall hit sound plays | AUD-02 | Requires audio device + active listening | Bounce ball off top/bottom wall, listen for higher-pitch snap |
| Score sound plays | AUD-03 | Requires audio device + active listening | Score a point, listen for low-frequency thud (distinct from paddle/wall) |
| Audio initializes only after first user interaction | AUD-04 | Requires console inspection + timing verification | Open DevTools console, load page, `audioContext.state` should be 'suspended'; press any key, state should be 'running' |
| Sound toggle mutes/unmutes audio | AUD-05 | Requires interaction + audio device | Toggle Sound OFF in settings → play game → no sounds; toggle ON → sounds return |
---
## Validation Sign-Off
- [ ] All tasks have `<automated>` verify or Wave 0 dependencies
- [ ] Sampling continuity: no 3 consecutive tasks without automated verify
- [ ] Wave 0 covers all MISSING references
- [ ] No watch-mode flags
- [ ] Feedback latency < 5 minutes
- [ ] `nyquist_compliant: true` set in frontmatter
**Approval:** pending