5-Night FMOD Desktop Menu Snapshot Spot Challenge Before December Playtest - 2026
Monday playtest: menu sounds fine. Tuesday hotfix: credits screen adds a new Menu snapshot transition. Wednesday Discord: “combat music on title screen.” Your desktop QA lead ran Combat=1 in Profiler once—never re-spotted after the menu state machine changed.
December 2026 fest teams ship FMOD 2.03 desktop builds while facilitators also test itch WebGL. Bevy menu flush fixes ECS schedule hitches—different failure class. WebGL snapshot playbook fixes integration boot order; playtest snapshot spot preflight owns one-shot duck delta—this Challenges & Community Hooks sprint is the five-night menu RTPC accountability ladder: log before/after menu state bus levels, require WebGL row, file fmod_menu_snapshot_spot_receipt_v1.json—hashtag #FMODMenuSnapshotSpot2026.
Non-repetition note: Lesson 228 owns 90 s itch fest BUILD_RECEIPT; menu snapshot after state change preflight (Guide) forward owns ninety-second P1–P6; Lesson 275 forward owns BUILD_RECEIPT milestone. This URL is five-night facilitator rhythm before December pins.
Why this matters now (December 2026)
- Menu state changes nightly — Settings, credits, and options screens alter RTPC curves without combat code changes.
- Desktop-only spot checks lie — Half your cohort plays WebGL on itch.
- Fest hitches ≠ loud buses — Bevy flush Lesson 259 is frame timing; this challenge is snapshot/RTPC truth.
- Playtest threads amplify audio bugs — One loud menu clip becomes “game is broken.”
- BUILD_RECEIPT rows — Thursday row review needs
menu_snapshot_spot_okbesidedemo_smoke.
Direct answer: Five weeknights (~15 minutes each); gates P1–P6; artifacts under release-evidence/audio/menu-snapshot-challenge/; file fmod_menu_snapshot_spot_receipt_v1.json with five_night_ladder; no December playtest pin until P6 and WebGL row pass.
Who this challenge is for
| Audience | You will… |
|---|---|
| Beginner | Log one RTPC screenshot before/after opening menu |
| Audio lead | Stop trusting Monday spot on Friday build |
| Producer | Block playtest pin until Night 5 receipt |
| Working dev | Wire desktop + WebGL rows in one JSON |
Engines: FMOD 2.03 + Unity/Godot desktop + itch WebGL export.
Time: ~75 minutes total over five nights (15 min/night).
Challenge vs playbook vs fest lesson (format ladder)
| Artifact | Role |
|---|---|
| This challenge | 5-night menu RTPC spot ladder + #FMODMenuSnapshotSpot2026 |
| WebGL snapshot playbook | W1–W6 integration boot |
| Playtest spot preflight | One-shot duck delta (cousin schema) |
| Bevy menu hitch blog | ECS schedule graph |
| Lesson 228 | itch fest BUILD_RECEIPT |
| Lesson 275 forward | Menu spot BUILD_RECEIPT |
Order: WebGL boot receipts GREEN → this 5-night ladder when menu states change mid-week → Wednesday smoke on same build_label.
Before you start — readiness checklist
- [ ]
release-evidence/audio/menu-snapshot-challenge/folder exists - [ ] FMOD Studio 2.03 project pinned in
build_labelREADME - [ ] Menu snapshots documented: Menu, Explore, Combat (names match code)
- [ ] Desktop playtest build with visible build label
- [ ] itch WebGL URL on same
build_label - [ ] Profiler or bus meter access for RTPC screenshots
- [ ] Producer agrees: no Discord playtest pin until Night 5 receipt filed
Do not run the ladder on a week with zero menu changes—the challenge proves spot after state change, not generic audio hygiene.
Rules of the challenge
- One owner signs each night (
night_N_pass). - Fail stops the ladder—do not start Night 4 if Night 3 menu RTPC drifted > 2 dB without documented intent.
- WebGL row required on Night 4—desktop-only pass does not count.
- Post nightly progress with
#FMODMenuSnapshotSpot2026. - Pair Friday Block 5:
menu_snapshot_spot_ok Y/N.
Five-night calendar at a glance
| Night | Gates | Primary artifact | Pass signal |
|---|---|---|---|
| Night 1 (Mon) | P1–P2 | menu_rtpc_baseline_v1.json |
Snapshot names pinned + pre-menu RTPC logged |
| Night 2 (Tue) | P3 | menu_open_spot_desktop.png |
After main menu OnEnter RTPC within spec |
| Night 3 (Wed) | P4 | submenu_state_spot_desktop.png |
Settings/credits transition spot |
| Night 4 (Thu) | P5 | menu_loop_webgl_spot.json |
Cold-tab WebGL menu loop within 1.5 dB of desktop |
| Night 5 (Fri) | P6 | fmod_menu_snapshot_spot_receipt_v1.json |
menu_snapshot_spot_ok: true + BUILD_RECEIPT row |
Weekend between nights is allowed—re-run the prior night if menu code changed.
Beginner path — nightly 15-minute devlog
Night 1 tweet template:
Night 1/5 #FMODMenuSnapshotSpot2026 — pinned Menu/Explore/Combat snapshot names + menu RTPC baseline logged. build_label: december-playtest-2026-rc1
Night 4 trap: Click game canvas, not browser chrome—cousin to gesture parity preflight.
Nights 2–5 devlog templates:
Night 2/5 #FMODMenuSnapshotSpot2026 — main menu OnEnter RTPC spot desktop GREEN. Combat snapshot on title: NO. screenshot: menu_open_spot_desktop.png
Night 3/5 #FMODMenuSnapshotSpot2026 — settings submenu RTPC drift 0.8 dB vs Night 2. credits screen: PASS P4.
Night 4/5 #FMODMenuSnapshotSpot2026 — WebGL cold-tab 60 s menu loop. delta vs desktop: 0.6 dB (≤1.5). gesture: canvas click.
Night 5/5 #FMODMenuSnapshotSpot2026 — filed FMOD_MENU_SNAPSHOT_SPOT_RECEIPT.json. menu_snapshot_spot_ok: true. playtest pin: ALLOWED.
Posting all five threads creates a public audit trail—producers can verify you did not skip WebGL on Night 4.
Night-by-night failure modes (working dev)
| Night | Common fail | Fix without restarting ladder |
|---|---|---|
| 1 | Snapshot renamed in Studio, code stale | Update RegisterSnapshots() list; re-run Night 1 only |
| 2 | Combat audible on title | Audit menu scene Combat RTPC default; fix code; re-run 2–5 |
| 3 | Credits music +2 dB surprise | Intentional? Document in receipt notes[]; else fix snapshot blend |
| 4 | WebGL delta 3 dB | Re-check canvas gesture; compare bank list vs desktop |
| 5 | jq gate fails | Trace which gates.P* is false—do not set menu_snapshot_spot_ok manually |
Fail-closed: If Night 4 fails, do not paste itch URL to Discord—even if desktop Nights 2–3 passed Monday.
Developer path — gates P1–P6
| Gate | Check | Fail when |
|---|---|---|
| P1 | Snapshot names match Studio export | Code registers stale snapshot after menu refactor |
| P2 | Pre-menu RTPC baseline | No screenshot/log before first menu open |
| P3 | Desktop after main menu OnEnter | Combat bus auditions on title without input |
| P4 | Desktop after submenu state | Credits/settings RTPC drift > 2 dB undocumented |
| P5 | WebGL menu loop spot | Delta > 1.5 dB vs desktop or loud pre-gesture |
| P6 | fmod_menu_snapshot_spot_receipt_v1.json |
menu_snapshot_spot_ok false at playtest pin |
Night 1 — menu_rtpc_baseline_v1.json (P1–P2)
{
"schema": "menu_rtpc_baseline_v1",
"build_label": "december-playtest-2026-rc1",
"fmod_studio_version": "2.03.xx",
"snapshots": ["Menu", "Explore", "Combat"],
"rtpc_before_menu_open": {
"master_bus_db": -12.4,
"music_bus_db": -18.2,
"sfx_bus_db": -24.0
},
"profiler_screenshot": "release-evidence/audio/menu-snapshot-challenge/night1_baseline.png"
}
Night 2–3 — desktop spot protocol (P3–P4)
- Boot desktop build from cold start.
- Before first menu open—confirm P2 baseline still matches (±0.5 dB).
- Open main menu—capture Profiler screenshot (P3).
- Navigate to Settings or Credits—capture second screenshot (P4).
- Log whether Combat snapshot triggered—must be false on title without gameplay input.
Red flag: Bevy menu hitch one-frame stall with correct RTPC—fix schedule separately; still file spot receipt.
Night 4 — WebGL menu loop (P5)
{
"schema": "menu_webgl_spot_v1",
"build_label": "december-playtest-2026-rc1",
"browser": "chrome_guest",
"pre_gesture_silent": true,
"gesture_probe": "pointerdown_on_canvas",
"menu_loop_seconds": 60,
"desktop_menu_music_db": -18.2,
"webgl_menu_music_db": -17.6,
"delta_db": 0.6,
"within_tolerance": true,
"combat_snapshot_heard_on_menu": false
}
Tolerance 1.5 dB matches Lesson 228 F5 parity—cousin row, not merged schema.
Night 5 — fmod_menu_snapshot_spot_receipt_v1.json (P6)
{
"schema": "fmod_menu_snapshot_spot_receipt_v1",
"build_label": "december-playtest-2026-rc1",
"fmod_studio_version": "2.03.xx",
"five_night_ladder": {
"night1": "pass",
"night2": "pass",
"night3": "pass",
"night4": "pass",
"night5": "pass"
},
"menu_state_spots": {
"main_menu_on_enter_db": -18.0,
"settings_submenu_db": -19.2,
"credits_submenu_db": -20.1
},
"surfaces": {
"desktop_playtest": { "menu_music_db": -18.2, "pass": true },
"webgl_itch_playtest": { "menu_music_db": -17.6, "pass": true }
},
"cousin_receipts": {
"fmod_webgl_snapshot": "release-evidence/audio/FMOD_WEBGL_SNAPSHOT_RECEIPT.json",
"fmod_playtest_snapshot_spot": "release-evidence/audio/FMOD_PLAYTEST_SNAPSHOT_SPOT_RECEIPT.json"
},
"gates": {
"P1_snapshot_names": "pass",
"P2_baseline": "pass",
"P3_menu_on_enter": "pass",
"P4_submenu_state": "pass",
"P5_webgl_row": "pass",
"P6_receipt": "pass"
},
"menu_snapshot_spot_ok": true,
"december_playtest_pin_allowed": true
}
Pin under release-evidence/audio/FMOD_MENU_SNAPSHOT_SPOT_RECEIPT.json.
Fail-closed jq:
jq -e '.menu_snapshot_spot_ok == true' release-evidence/audio/FMOD_MENU_SNAPSHOT_SPOT_RECEIPT.json
BUILD_RECEIPT row (after P6)
{
"build_label": "december-playtest-2026-rc1",
"menu_snapshot_spot_ok": true,
"fmod_menu_snapshot_spot_receipt_path": "release-evidence/audio/FMOD_MENU_SNAPSHOT_SPOT_RECEIPT.json",
"demo_smoke": "pending_wednesday"
}
RTPC spot table (fill every night)
| State transition | Desktop (dB) | WebGL (dB) | Δ | Pass |
|---|---|---|---|---|
| Pre-menu baseline | — | P2 | ||
| Main menu OnEnter | — | P3 | ||
| Settings open | ≤2 vs P3 | P4 | ||
| 60 s menu loop | ≤1.5 | P5 |
Proof table
| Evidence | Path | Proves |
|---|---|---|
| Baseline | menu_rtpc_baseline_v1.json |
P1–P2 |
| Desktop spots | night2_*.png, night3_*.png |
P3–P4 |
| WebGL spot | menu_webgl_spot_v1.json |
P5 |
| Receipt | FMOD_MENU_SNAPSHOT_SPOT_RECEIPT.json |
P6 |
Scenarios A–G
| ID | Situation | Action |
|---|---|---|
| A | First December playtest week | Run full five nights |
| B | No menu changes | Skip—document waiver |
| C | Menu code changed Night 3 | Re-run Nights 2–5 |
| D | Desktop pass, WebGL fail | Night 4 only—gesture/canvas |
| E | Hitch + loud bus | Bevy flush + this ladder |
| F | itch only cohort | Still require P5 WebGL row |
| G | Pin without receipt | Block—P6 |
Common mistakes
- Combat=1 on title — P3 fail.
- Spot once Monday, ship Friday — re-run after state changes.
- Desktop-only Discord pin — P5 required.
- Merge with
fmod_playtest_snapshot_spot_receipt— cousin paths only. - Confuse with WebGL boot W-gates — playbook first.
- Skip Night 3 when credits screen added—P4 catches RTPC drift.
Troubleshooting
| Symptom | Lane |
|---|---|
| Loud combat on menu desktop | P3 snapshot trigger audit |
| WebGL flat, desktop OK | WebGL bank-load W3 |
| Pre-click loud WebGL | Gesture parity G2–G5 |
| One-frame hitch, audio OK | Bevy menu flush |
| Wrong build in thread | Lesson 201 |
Facilitator README snippet
## December playtest audio pin
1. Confirm Night 5 `FMOD_MENU_SNAPSHOT_SPOT_RECEIPT.json` GREEN.
2. Paste itch URL only after P5 WebGL row passes.
3. Attach duck table screenshot to Discord pin.
4. Separate `#audio` from `#hitch`—link Bevy flush if frames, this receipt if buses.
Menu state vs hitch decision tree (developer)
Playtest reports "menu feels broken"
├─ One-frame pop / empty UI frame? → [Bevy schedule blog](/blog/bevy-0-17-ecs-plugin-schedule-order-debug-fest-demo-menu-hitch-2026) + Lesson 259 flush
├─ Combat music on title / loud buses? → This 5-night challenge (P3–P5)
├─ Silent WebGL until click? → [WebGL playbook W4](/blog/fmod-2-03-bus-snapshots-silent-webgl-after-integration-upgrade-2026)
├─ Silent after click? → [Bank-load preflight W3](/guides/fmod-studio?chapter=fmod-2-03-webgl-bus-snapshot-registration-after-bank-load-preflight-2026-preflight)
└─ Wrong build in thread? → [Lesson 201 build_label](/courses/ai-powered-rpg-game/lessons/201-triple-channel-html5-build-label-and-channel-label-match-receipt-2026-rpg-live-ops)
Facilitators should tag Discord threads with hitch vs bus before engineers open Profiler—saves half the December triage week.
Cousin receipt pairing matrix
| Schema | When | This challenge |
|---|---|---|
fmod_webgl_snapshot_receipt_v1 |
Boot registration | Prerequisite—Night 4 assumes W6 GREEN |
fmod_playtest_snapshot_spot_receipt_v1 |
One-shot duck delta | Cousin path in P6 cousin_receipts |
fmod_webgl_fest_snapshot_receipt_v1 |
90 s itch fest | Lesson 228—after this ladder for fest pin |
fmod_menu_snapshot_spot_receipt_v1 |
Menu state RTPC spots | This URL |
Do not merge JSON—reference paths only on BUILD_RECEIPT.
Producer time-box (December fest week)
| Day | Audio task | Minutes |
|---|---|---|
| Mon | Night 1 baseline | 15 |
| Tue | Night 2 after menu merge | 15 |
| Wed | Night 3 if credits/settings ship | 15 |
| Thu | Night 4 WebGL + Wednesday smoke | 25 |
| Fri | Night 5 receipt + Thursday review | 20 |
Pair founder time-box worksheet—audio spot nights are engineering floor, not marketing deferrals.
Tools and sibling reads
- FMOD 2.03 WebGL snapshot playbook
- Bevy 0.17 menu hitch debug
- Lesson 228 fest snapshot
- WebGL silent first scene help
- Official: FMOD Studio snapshots documentation
Key takeaways
- Five nights—menu RTPC spots after state changes, not one Monday Profiler pass.
fmod_menu_snapshot_spot_receipt_v1is distinct fromfmod_playtest_snapshot_spot_receipt_v1.- Night 4 WebGL row is mandatory for mixed desktop + itch cohorts.
- 1.5 dB tolerance aligns with Lesson 228 fest parity cousin.
- Bevy menu hitch fixes frames; this challenge fixes buses.
- Guide #37 forward is ninety-second recap when shipped.
- Lesson 275 forward promotes BUILD_RECEIPT column.
#FMODMenuSnapshotSpot2026— community accountability hook.- Pair Thursday row review on Night 5.
- Forward Unreal OTLP case study when Q4 diligence runs same week.
FAQ
Same as Lesson 228?
228 = 90 s itch fest session; this challenge = five-night menu RTPC before playtest pin.
Same as playtest spot preflight?
Preflight = one-shot duck; this challenge = nightly after menu state changes.
Same as WebGL playbook?
Playbook = W1–W6 boot; this challenge = menu loop RTPC after boot GREEN.
Can we run 3 nights instead of 5?
Minimum 1+3+4+5 if no submenu changes—document waiver for Night 3.
Wwise teams?
Adapt RTPC spot table; keep receipt schema lanes separate per engine.
Does this replace Wednesday smoke?
No—smoke proves binary golden path; this challenge proves menu audio on same build_label.
What if only Steam desktop playtest?
Still run Nights 1–3; document F waiver for P5 with producer sign-off on receipt.
Conclusion
December playtest audio bugs cluster around menu state changes facilitators never re-spotted. Five nights: baseline, desktop OnEnter, submenu transition, WebGL row, receipt—then pin.
Next reads: menu snapshot after state change preflight (Guide), playtest snapshot spot preflight, Lesson 275 forward, WebGL snapshot playbook, Wednesday smoke.
Log Night 1 baseline before you paste the December playtest link—not after the #audio-broken thread.