Lesson 218: Godot Deck Static Menu Render Scale Receipt on BUILD_RECEIPT (2026)
Direct answer: File deck_static_menu_receipt_v1.json on BUILD_RECEIPT only after Godot Deck static menu preflight passes D1–D6, you export an installed Steam Deck build, and a 15-minute MangoHud idle log sets gpu_idle_smoke_pass: true—continuing from Lesson 217 H1 capstone into H2 fest hardening.

Why this matters now (July 2026 Deck fest menus)
July 2026 teams close H1 trust with Lesson 217 then promote fest builds whose title menus still peg GPU despite green menu_fps_cap_receipt rows. The MangoHud recovery case study separates FPS overlay from GPU %; menu FPS opinion sets policy.
This lesson is the first H2 2026 milestone—it does not repeat Lesson 205 protocol alone; it requires Godot export discipline (static camera, render scale, menu max_fps) plus Deck install smoke before deck_static_menu_receipt promotes. October 2026 letterboxing after desk play is Lesson 255 (deck_aspect_reset_receipt)—parallel column, not a substitute.
Beginner path (Godot audit + Deck idle)
| Step | Action | Success check |
|---|---|---|
| 1 | Pass guide D1–D6 on menu scene | deck_static_menu_receipt draft GREEN |
| 2 | Export Windows/Deck depot for fest menu build | Not editor F5 only |
| 3 | Install from Steam on Deck | Same build_label as receipt |
| 4 | MangoHud log 15 min idle on title menu | idle_menu_mangohud.log archived |
| 5 | Peak GPU % below team threshold | gpu_idle_smoke_pass: true |
| 6 | Merge into menu_fps_cap_receipt if separate |
Both columns agree |
| 7 | Pin receipt on BUILD_RECEIPT | D6 pass |
Time: ~25 min Godot preflight + 15 min mandatory idle + ~25 min first-time export—65 minutes total.
Developer path (gates D1–D6)
| Gate | Check | Fail when |
|---|---|---|
| D1 | Menu scene path matches export | Wrong entry scene |
| D2 | Camera static (guide audit) | Transform keys on idle |
| D3 | render_scale_menu ≤ policy |
1.0 on UI-heavy Deck menu |
| D4 | menu_target_fps on boot |
Uncapped after autoload |
| D5 | VFX/SubViewport idle | Particles spinning under logo |
| D6 | Deck idle smoke + receipt | GPU peak over threshold |
Inherit Godot preflight (do not duplicate)
Copy values from Deck static menu guide—lesson adds BUILD_RECEIPT + installed Deck proof only. Unreal SKUs: use UE 5.6 Deck fest static lighting preflight with the same deck_static_lighting_receipt_v1 schema.
Fifteen-minute idle protocol (D6)
| Minute block | Action |
|---|---|
| 0–1 | Launch installed build; reach title menu |
| 1–16 | No input except one brightness check; MangoHud logging |
| 16 | Stop log; record mangohud_gpu_percent_15min_peak |
Pass example policy: peak GPU < 50% on Steam Deck OLED for UI-only menu (set your studio number in #perf-deck).
Crosswalk Lesson 205 mangohud_idle_recovery_receipt_v1.json when recovery fixes were required.
deck_static_menu_receipt_v1.json
{
"schema": "deck_static_menu_receipt_v1",
"build_label": "deck-fest-2026-rc9",
"menu_scene_path": "res://scenes/main_menu.tscn",
"menu_target_fps": 60,
"render_scale_menu": 0.85,
"camera_static_audit": "release-evidence/deck/menu_camera_static.png",
"vfx_idle_discipline": "particles_off_subviewport_paused",
"idle_test_minutes": 15,
"mangohud_gpu_percent_15min_peak": 42,
"gpu_idle_smoke_pass": true,
"menu_fps_cap_pass": true,
"gates": {
"D1_menu_scene": "pass",
"D2_camera_static": "pass",
"D3_render_scale": "pass",
"D4_max_fps": "pass",
"D5_vfx_idle": "pass",
"D6_deck_idle_smoke": "pass"
},
"paired_receipts": {
"menu_fps_cap": "release-evidence/deck/MENU_FPS_CAP_RECEIPT.json",
"mangohud_idle": "release-evidence/deck/MANGOHUD_IDLE_RECOVERY.json"
},
"promotion_allowed": true
}
Pin under release-evidence/deck/DECK_STATIC_MENU_RECEIPT.json.
BUILD_RECEIPT columns
| Column | Value |
|---|---|
deck_static_menu_receipt |
Path + pass/fail |
render_scale_menu |
e.g. 0.85 |
gpu_idle_smoke_pass |
true after D6 |
menu_fps_cap_pass |
Must not contradict D6 |
build_label |
Fest Deck row |
Thursday row review — add deck_static_menu_receipt beside menu_fps_cap_receipt.
Proof table (Deck menu week)
| build_label | render scale | FPS cap | GPU peak 15m | Promote? |
|---|---|---|---|---|
| deck-fest-2026-rc9 | 0.85 | 60 | ||
| deck-fest-2026-rc8 (old) | 1.0 | 60 | 99 | blocked |
Key takeaways
- FPS cap ≠ GPU idle—file both columns.
- Godot preflight is editor truth; Deck install is promotion truth.
render_scale_menuis menu-only—do not blur combat scenes.- Static camera means no transform keys—not “barely moving” cinematic drift.
- Lesson 205 owns recovery narrative; 218 owns BUILD_RECEIPT wiring for H2.
- H1 capstone (217) stays required—H2 does not replace trust receipts.
- Lesson 219 continues H2 with Unity string tables—not Deck perf.
Prerequisites
- Lesson 217 — H1 capstone
- Godot Deck static menu preflight
- Lesson 205 — gpu_idle smoke
- MangoHud case study
- Deck OLED battery help
- Menu FPS cap opinion
Common mistakes
- Filing receipt after editor play only—Deck install never tested.
- Skipping render scale because “menu looks fine on PC.”
- Leaving animated Camera3D for “premium feel” on Deck.
- Setting
gpu_idle_smoke_pass: truewithout 15-minute log file. - Promoting when H1 217 capstone still RED.
Troubleshooting
| Symptom | Lane |
|---|---|
| FPS 60, GPU 99% | Guide D2–D5 + Lesson 205 recovery |
| Receipt GREEN, players say hot | Re-run D6 on installed build |
| Gameplay blurry | Render scale applied globally—scope to menu scene |
| Planned help #12 | MangoHud GPU fix when live |
Mini exercise (60 minutes)
- Fail D3 intentionally (scale 1.0)—confirm promotion blocked.
- Fix per guide; re-export Deck build.
- Run 15-minute MangoHud idle; archive log.
- File
deck_static_menu_receipt_v1.json. - Add BUILD_RECEIPT row; run Thursday review.
Continuity — H2 2026 arc (218–223)
| Lesson | Receipt focus |
|---|---|
| 218 (this) | Deck static menu + gpu_idle_smoke_pass |
| 219 | Addressables string tables |
| 220 | VOD concat batch |
| 221 | Facilitator amendment |
| 222 | CORP/COEP fest HTML5 |
| 223 | H2 capstone (arc close) |
Prior arc: H1 212–217.
Next: Lesson 219 — Unity Addressables string table fest receipt.
FAQ
Unity-only RPG, no Godot menu?
deck_static_menu_receipt may be n/a with engine note—still run Deck idle smoke on your menu scene if you ship Deck.
Same build_label as H1 receipts?
Yes—H2 rows extend the same fest promotion train; Lesson 217 must stay GREEN.
Battery drain but GPU pass?
Track idle_power_smoke_pass separately per Deck battery help—do not conflate columns.
Deck menu receipts need Godot discipline and Deck proof—not overlay screenshots from the editor.