Lesson 228: FMOD WebGL Snapshot Fest Demo Receipt (2026)

Direct answer: Before you paste the January 2027 itch HTML5 fest link into a public thread, require a GREEN Lesson 203 fmod_webgl_snapshot_receipt_v1.json, pass gesture + registration smoke on a cold browser tab, then file fmod_webgl_fest_snapshot_receipt_v1.json so BUILD_RECEIPT fmod_webgl_fest_snapshot promotes only when exploration (not combat) auditions in the first 90 seconds on itch_public.

Lesson hero for FMOD WebGL fest demo snapshot receipt

Why this matters now (January 2027 itch HTML5 fest demos)

January 2027 teams finish Windows Wwise rows and press-key scope then promote the same build_label to itch. Facilitators open the demo in Chrome guest mode—combat music is loud because snapshots never registered after gesture, or the menu loop still runs the Combat snapshot from a debug session. Lesson 203 proves boot order; this lesson proves fest-session behavior on the storefront players actually click.

The FMOD 2.03 WebGL snapshot playbook and WebGL silent first scene help fix integration regressions; gesture parity preflight, bank-load preflight, and summer playtest desktop vs WebGL spot preflight are the ninety-second editor gates—228 is the live-ops fest promotion milestone on BUILD_RECEIPT.

Beginner path (cold-tab fest smoke)

Step Action Success check
1 Confirm Lesson 203 receipt GREEN promotion_allowed: true on child JSON
2 Open itch URL in new guest profile No cached AudioContext
3 Wait 3 s pre-click Menu bed silent or very low (F2)
4 Click game canvas once Meters move; exploration snapshot
5 Stay on menu 90 s No accidental Combat snapshot
6 File fmod_webgl_fest_snapshot_receipt_v1.json fest_snapshot_pass: true
7 BUILD_RECEIPT row fmod_webgl_fest_snapshot GREEN

Time: ~68 minutes first fest lane; ~12 minutes when 203 + parity guides are pinned.

Developer path (gates F1–F6)

Gate Check Fail when
F1 Child fmod_webgl_snapshot_receipt_v1 Missing or promotion_allowed: false
F2 Cold-tab pre-gesture silence policy Loud combat before click (false “working”)
F3 Post-gesture exploration snapshot Combat duck on menu without input
F4 itch_public + build_label Wrong surface or label vs Lesson 201
F5 Desktop/WebGL duck parity WebGL > 1.5 dB off desktop combat audition
F6 Fest receipt + BUILD_RECEIPT itch link public without F1–F5

Child receipt crosswalk (F1)

Field Child (203) Fest wrapper (228)
Schema fmod_webgl_snapshot_receipt_v1 fmod_webgl_fest_snapshot_receipt_v1
Gates W1–W6 F1–F6
Scope Boot registration 90 s menu fest session
Surface webgl generic itch_public required

Do not duplicate W3/W4 proof inside the fest receipt—reference the child path:

"child_receipts": {
  "fmod_webgl_snapshot": "release-evidence/audio/FMOD_WEBGL_SNAPSHOT_RECEIPT.json"
}

fmod_webgl_fest_snapshot_receipt_v1.json

{
  "schema": "fmod_webgl_fest_snapshot_receipt_v1",
  "build_label": "fest-demo-2027-01-14-rc1",
  "surface": "itch_public",
  "fest_url": "https://YOURGAME.itch.io/demo",
  "fmod_studio_version": "2.03.xx",
  "child_receipts": {
    "fmod_webgl_snapshot": "release-evidence/audio/FMOD_WEBGL_SNAPSHOT_RECEIPT.json"
  },
  "fest_session_probe": {
    "browser": "chrome_guest",
    "pre_gesture_silent": true,
    "post_gesture_snapshot": "exploration",
    "menu_loop_seconds": 90,
    "combat_snapshot_heard": false
  },
  "parity": {
    "desktop_combat_duck_db": -6.1,
    "webgl_combat_duck_db": -5.7,
    "delta_db": 0.4,
    "within_tolerance": true
  },
  "gates": {
    "F1_child_snapshot": "pass",
    "F2_cold_tab_pre_gesture": "pass",
    "F3_menu_exploration": "pass",
    "F4_itch_label": "pass",
    "F5_parity": "pass",
    "F6_build_receipt": "pass"
  },
  "fest_snapshot_pass": true,
  "fest_promotion_allowed": true
}

Pin under release-evidence/audio/FMOD_WEBGL_FEST_SNAPSHOT_RECEIPT.json.

Fest menu loop script (F3)

Second Expected snapshot parameter Fail when
0–3 None / menu bed only Combat bed audible
3 (click) Gesture unlock No meter movement
4–90 Exploration = 1 Combat = 1 without gameplay
90+ Optional combat audition Combat before facilitator click-to-start

Archive fest_audio_smoke.log with build_label, surface, and FMOD bus meter CSV export.

BUILD_RECEIPT row (F6)

Column Pass when
fmod_webgl_fest_snapshot Fest receipt path + fest_snapshot_pass: true
fmod_webgl_snapshot Child 203 receipt still GREEN
channel_label_match Lesson 201 if GX/Steam also ship
ALTER TABLE release_publish_gate ADD COLUMN IF NOT EXISTS
  fmod_webgl_fest_snapshot_blocked BOOLEAN NOT NULL DEFAULT false;

CI verify_fmod_webgl_fest_snapshot_v1 fails when fest_url is non-empty in publish manifest and fest_snapshot_pass is false.

Relationship to Lesson 203 (not a repeat)

Question Lesson 203 Lesson 228 (this)
When? After FMOD 2.03 integration upgrade Before public itch fest link
Proves? Banks → snapshots → gesture boot Fest menu session + child receipt
Receipt fmod_webgl_snapshot_receipt_v1 fmod_webgl_fest_snapshot_receipt_v1
Surface Generic webgl itch_public only

If 203 is RED, do not file 228—fix boot order first via bank-load preflight.

Key takeaways

  1. 203 GREEN is mandatory—fest receipt wraps boot proof, does not replace it.
  2. Cold guest tab catches cached AudioContext false positives.
  3. First 90 s must sound like your storefront menu, not combat debug.
  4. itch_public surface ties to triple-channel labels.
  5. Gesture parity preflight satisfies F5 when filed same build_label.
  6. Wednesday demo smoke should include guest-tab audio capture.
  7. Q1 capstone 229 wires 228 with 224–227.
  8. Windows audio is Lesson 226—do not conflate middleware receipts.

Common mistakes

  • Promoting itch while 203 receipt still shows Awake() registration fail.
  • Testing in the same browser profile that already clicked “Start”.
  • Leaving Combat snapshot parameter at 1 in menu scene.
  • Proving duck on desktop only for a fest HTML5 URL.
  • fest_url uses GX embed host but receipt says itch_public.
  • Skipping Bevy wasm build_label when Rust wasm SKU ships same fest week.

Troubleshooting

Symptom Lane
Silent after click WebGL first-scene help + 203 W4
Loud combat on menu F3 parameter reset; check debug Combat=1
Child receipt missing Re-run Lesson 203 milestone
Parity fail Gesture parity preflight or playtest spot preflight
Wrong storefront audio Lesson 201
Banks stripped from build FMOD banks missing help

Mini exercise (68 minutes)

  1. Break F3 (leave Combat=1); confirm fest_snapshot_pass: false.
  2. Fix menu snapshot; pass cold-tab F2–F3.
  3. Attach child 203 JSON path; verify F1 crosswalk.
  4. Run F5 parity row; document exception if > 1.5 dB.
  5. Commit fest receipt; set BUILD_RECEIPT fmod_webgl_fest_snapshot GREEN.

Continuity — Q1 2027 post-fest recovery (224–229)

Lesson Receipt focus
224–227 VOD, Ren'Py, Wwise, review keys
228 (this) FMOD WebGL fest snapshot
229 Q1 capstone

Previous: Lesson 227 — Steam review-key press demo scope
Next: Lesson 229 — Q1 post-fest capstone receiptQ1 arc 224–229 closed.

FAQ

Same as Lesson 203?
203 is boot registration; 228 is fest promotion with child receipt + 90 s menu policy.

Same as gesture parity guide?
Guide is ninety-second F5 evidence; this lesson files BUILD_RECEIPT fest row.

Godot FMOD bridge?
Same F1–F6 semantics; swap Unity hooks—fest receipt schema unchanged.


A loud combat bed on the itch menu is a fest refund mood—203 GREEN, cold-tab click, exploration for 90 seconds, then fmod_webgl_fest_snapshot_receipt.