Wednesday Demo Build Smoke Ritual - Fifteen Minutes Before Fest Branch Promotion
Your CI passed. Your BUILD_RECEIPT lists the right build_id. You promoted nextfest-oct-2026-rc4 at lunch. At 6 p.m. a player posts a screenshot of a black screen after the title card. The store page still promises co-op from last month because nobody ran the Wednesday metadata diff either.
Process & Workflow for micro-studios often treats green upload as green launch. This article defines a Wednesday fifteen-minute demo build smoke ritual that runs before any fest branch promotion—binary proof only: launch, sixty-second golden path, clean quit. It is not another store-metadata surface checklist. Store copy is Wednesday metadata; this Wednesday is gameplay truth on the depot players will install.
Pair with Friday Block 5 (evidence hygiene), 18 playtest tools (async capture after smoke passes), crash symbolicate receipt beginner pipeline (file crash_symbolicate_ok before promotion—not only after player crashes), and Lesson 214 — crash_symbolicate_receipt + build_label on minidumps so post-promotion crashes stay symbolicated—not hash-only stacks.
Who this is for and what you get
| Audience | You will be able to… |
|---|---|
| Solo dev | Run one repeatable smoke block without a full QA department |
| Engineer | Block promotion when S4–S6 fail on cold install |
| Producer | Require demo_smoke_receipt_v1.json beside BUILD_RECEIPT before marketing spends; reserve smoke hours in fest week founder time-box |
Time: 15 minutes weekly (Wednesday default, after metadata diff when both run same day); +10 minutes when build_id or demo scope changes.
Prerequisites: Fest branch name documented, golden path written in plain language, non-dev Steam account or family-share test account, current branch label map.
Why this matters now (May 2026)
- May–October fest prep — Teams promote branches weekly; smoke catches boot regressions metadata diffs cannot see.
- NW.js and Electron demos — Developer console discipline and wrapper crashes show up only on installed builds, not editor preview.
- Refund narrative shift — Refund signal dashboards tag hour-one blockers; smoke is the cheapest hour-one test.
- Store/demo mismatch — Recovery case studies often start with "we only tested in editor."
- Partner diligence — Q3 packets ask what you ran on the exact
build_idpromoted—not what passed yesterday oninternal.
Direct answer: Log wednesday-demo-smoke-YYYY-WW.md plus demo_smoke_receipt_v1.json with pass/fail per smoke gate; no fest branch promotion that week if S4–S6 are RED.
Smoke vs metadata (two Wednesdays, one gate)
| Ritual | Layer | Pass means |
|---|---|---|
| Wednesday metadata diff | Store copy and media | FAQ, About, screenshots match approved git |
| Wednesday demo smoke (this article) | Installed binary | Launch, golden path, quit on target build_id |
Run metadata first, then smoke, then promote. Metadata GREEN with smoke RED still ships a lie players can play.
What counts as demo build smoke (gates S1–S8)
| Gate | Name | Pass criteria |
|---|---|---|
| S1 | Install | Correct branch installs from library label; size plausible |
| S2 | Launch | Process starts within 90s cold boot; no instant crash |
| S3 | First input | Menu or gameplay accepts input; no frozen splash |
| S4 | Golden path start | Reach first scripted beat in golden path doc |
| S5 | Golden path 60s | Complete 60 continuous seconds of golden path without soft-lock |
| S6 | Clean quit | Exit to desktop/OS; no hang on close |
| S7 | Console | No F12/devtools; no debug overlay (opinion) |
| S8 | Receipt | demo_smoke_receipt_v1.json committed with matching build_id |
S4–S6 are promotion blockers when RED. S7 is RED for fest retail demos; YELLOW only on explicit internal depots documented in BUILD_RECEIPT.
Golden path document (write once, smoke weekly)
Store under release-evidence/03-builds/demo-golden-path.md:
# Demo golden path — fest SKU
build_id template: nextfest-oct-2026-rc*
max_duration: 60s active play (S5 timer starts at first gameplay input)
Steps:
1. From main menu, choose New Run / Play Demo
2. Complete tutorial prompt (skip allowed if shipped)
3. Reach first combat or first puzzle interaction
4. Perform one meaningful action (attack, place tile, dialogue choice)
5. Open pause menu and confirm settings readable
Out of scope for smoke: meta progression, DLC, achievements, cloud sync
Align steps with vertical slice honesty—smoke tests what you sell, not your internal full game.
Golden path examples by genre
| Genre | 60s path anchor |
|---|---|
| Roguelike | First room clear or first shop |
| Puzzle | Level 1 complete or first fail state |
| Narrative | First choice + one line of VO |
| RTS | Place first structure |
| Co-op demo | Solo path only unless co-op is fest promise |
If co-op is not in fest scope, golden path must not require a second client—matches FAQ parity discipline.
The fifteen-minute ritual (minute-by-minute)
| Min | Action |
|---|---|
| 0–1 | Open log; copy build_id + branch from BUILD_RECEIPT |
| 1–3 | S1–S2 cold install (or verify install from prior day if same build_id) |
| 3–5 | S3 first input; note crash dumps path |
| 5–12 | S4–S5 golden path with phone timer; screen record optional |
| 12–14 | S6 quit; S7 console check (F12, tilde, debug keys) |
| 14–15 | Write receipt JSON; mark RED/YELLOW/GREEN; promote only if S4–S6 GREEN |
Calendar invite: "Wednesday demo smoke — promotion gate (binary)."
Same-day pairing with metadata diff
| Order | Ritual | Why |
|---|---|---|
| 1 | Metadata diff | Fix copy lies before players install |
| 2 | Demo smoke (this) | Prove binary matches promise |
| 3 | Branch promotion | Only if both logs GREEN |
Total 30 minutes when both run—still cheaper than fest-week firefight.
RED / YELLOW / GREEN rules
| Status | Meaning | Promotion allowed? |
|---|---|---|
| RED | Crash, soft-lock, golden path impossible, hang on quit | No |
| YELLOW | S7 console on internal-only branch; missing receipt file | No until cleared |
| GREEN | S1–S8 pass on fest retail branch | Yes (if metadata also GREEN) |
YELLOW on S1 "install slow" is not a pass—document and investigate; do not promote on bandwidth excuses.
Log template
# Wednesday demo smoke — 2026-W21
build_id: nextfest-oct-2026-rc4
branch: nextfest-oct-2026-rc4
test_account: family_share_slot_2
golden_path_version: 2026-05-18
reviewer: (role)
| gate | status | notes |
|------|--------|-------|
| S1 | GREEN | |
| S2 | GREEN | cold boot 42s |
| S3 | GREEN | |
| S4 | GREEN | menu → New Run |
| S5 | GREEN | 60s to first combat |
| S6 | GREEN | |
| S7 | GREEN | F12 dead |
| S8 | GREEN | demo_smoke_receipt_v1.json attached |
Promotion this week: ALLOWED (binary)
Save under release-evidence/05-operations/demo-smoke/.
demo_smoke_receipt_v1.json
{
"schema": "demo_smoke_receipt_v1",
"build_id": "nextfest-oct-2026-rc4",
"branch": "nextfest-oct-2026-rc4",
"iso_week": "2026-W21",
"tested_at_utc": "2026-05-21T14:05:00Z",
"golden_path_doc": "release-evidence/03-builds/demo-golden-path.md",
"golden_path_version": "2026-05-18",
"gates": {
"S1_install": "pass",
"S2_launch": "pass",
"S3_first_input": "pass",
"S4_golden_start": "pass",
"S5_golden_60s": "pass",
"S6_clean_quit": "pass",
"S7_console": "pass",
"S8_receipt": "pass"
},
"promotion_allowed": true,
"paired_metadata_diff": "release-evidence/05-operations/store-metadata/wednesday-metadata-diff-2026-W21.md",
"notes": "Construct NW.js; tested on Win11, Steam client stable"
}
Commit receipt same day as smoke. Validate-packet can grep promotion_allowed if you script gates.
Promotion gate integration
Add beside metadata checklist:
[ ] Wednesday demo smoke log exists for this ISO week
[ ] demo_smoke_receipt_v1.json promotion_allowed == true
[ ] build_id matches BUILD_RECEIPT and branch string
[ ] S7 pass on retail fest branch (not internal)
[ ] Optional screen recording archived if S5 was YELLOW once
Engineers may wire pre-promote hook—humans still own golden path judgment when UX is ambiguous.
Engine-specific smoke notes (2026)
Construct 3 → NW.js
- Test exported NW.js folder Steam uploaded—not Remote Preview.
- Pair with 7-day sheet freeze before first fest upload.
- S5 must include one floor transition if golden path crosses rooms.
- Disable devtools per console opinion.
Godot 4.x
- Export debug off; test release template matching depot.
- Threaded loader stalls can fail S5 without crashing—timer still runs.
- RNG ledger cross-engine habits apply to Godot daily seeds if advertised.
Unity 6
- Player build, not Editor play mode.
- Deck graphics API issues surface at S2—note platform in receipt
notes. - Development Build banner fails S7.
HTML5 / itch parallel SKU
If you run dual-SKU economics, smoke each SKU weekly or document why Steam-only this week—browser refresh bugs (replay case study) will not appear in NW.js smoke.
Worked example (composite micro-studio week)
Context: Duo promotes nextfest-oct-2026-rc4 Thursday; Wednesday smoke runs after metadata GREEN.
| Gate | Finding | Action |
|---|---|---|
| S2 | Black screen 8s then menu | YELLOW—acceptable if documented; watch trend |
| S5 | Soft-lock opening inventory on first pickup | RED |
| S6 | Hang 10s on quit | RED |
| S7 | F12 opens devtools | RED on retail branch |
Outcome: Promotion slipped; fixed inventory event order; re-smoke Thursday morning; attached new receipt. Marketing delay one day—cheaper than refund dashboard spike.
Two-machine and cold-install discipline
| Check | Pass |
|---|---|
| Tester machine never opened project folder this week | Yes |
| Steam library shows correct branch label | Yes |
Delete prior fest build before S1 when build_id changed |
Yes |
| Second machine spot-check monthly | Recommended |
Same spirit as cloud saves parity—smoke on player conditions.
Screen recording (optional, high value)
| When to record | Why |
|---|---|
First smoke of new build_id |
Partner and Discord proof |
| S5 YELLOW once | Compare next week |
| Fest launch week | Incident timeline |
Keep clips under 90s; store beside receipt path in log header. Do not publish clips as marketing without trailer scope audit.
Distributed team handoff
When Asia-EU handoff promotes overnight:
- EU morning: smoke before announcing branch to marketing
- Receipt
tested_at_utcandnotesinclude OS + Steam client channel - Never promote on "works on dev laptop" without S1–S6 on receipt
Add handoff_demo_smoke: pending|done to BUILD_RECEIPT optional fields.
Playtest tools after smoke passes
Smoke is gate; 18 playtest tools are volume. Run async capture after S5 GREEN, not instead of smoke.
| Tool class | Use after smoke |
|---|---|
| Async video | Longer sessions |
| Spreadsheet intake | Non-golden-path bugs |
| Discord | Community breadth |
Closure rule: playtest tickets reference build_id from receipt.
Calendar integration (May–October 2026)
| Period | Smoke intensity |
|---|---|
| May–June | Full S1–S8 weekly; establish habit |
| July | Add second OS spot-check monthly |
| August | Re-smoke within 24h of any gameplay promotion |
| September | Freeze golden path doc; typo-only edits |
| October fest | Mini S4–S6 on each promotion day + full weekly |
Escalation when RED persists
| Day | Action |
|---|---|
| Wed | Log RED; block promotion |
| Thu | Fix binary; new BUILD_RECEIPT row |
| Fri | Re-smoke; if GREEN, promote + Friday Block 5 note |
If RED spans two weeks, run 7-day vertical slice challenge—weekly smoke is not enough.
Snippet-friendly answers
What is a demo build smoke test?
A 15-minute installed-build check—launch, 60-second golden path, clean quit—logged before fest branch promotion.
How is this different from metadata diff?
Metadata diff compares store text; smoke tests the binary players install.
Can engineers skip if only copy changed?
Only if build_id and demo depot are unchanged and prior week S4–S6 GREEN—rare; default run smoke.
Does smoke replace full QA?
No—it is a promotion gate, not certification.
CI and automation hooks
Optional pre-promote pseudologic:
if ! test -f release-evidence/.../demo_smoke_receipt_v1.json; then exit 2
if jq -e '.promotion_allowed == false' receipt; then exit 3
if jq -r '.build_id' receipt != "$BRANCH_BUILD_ID"; then exit 4
exit 0
Align exit codes with validate-packet style docs.
Cold-hash same week
Teams on cold-hash challenge should run demo smoke before hashing the zip players download—integrity without boot proof still fails partners.
Beginner path (first Wednesday smoke)
- Write five-step golden path in a text file.
- Install fest branch on a non-dev Steam account.
- Start phone timer at first gameplay input; play 60 seconds.
- Quit and confirm process ended.
- Copy receipt JSON template; set
promotion_allowedtrue only if no crash/lock.
Success: you have one dated receipt proving you played the build you uploaded.
Second-week expansion
Add S7 console check. Add pairing note to metadata diff filename in receipt. Tell team promotion requires receipt path in chat.
Third-week expansion
Block promotion once intentionally on RED drill—team learns gate is real.
Art and readability hooks during S5
If golden path includes HUD text, glance at pixel font gates during smoke—illegible HUD fails player experience even when S5 technically passes.
Construct save migration and smoke
After save-format migration, add S5 step: "load continue if shipped" or explicitly skip in golden path doc—silent save corruption fails S4.
Fest marketing stop rules
Fest spend cap: no spend increase while S4–S6 RED. Paid traffic on a crashing demo burns runway.
Operating review hook
Four-Friday operating reviews Block 2 add:
- Wednesdays smoke GREEN count last month
- Longest-open S5 RED
- Qualitative link to refund tags "crash at start"
Relationship to Friday Block 5
| Ritual | Day | Focus |
|---|---|---|
| Wednesday metadata diff | Wed | Store copy |
| Wednesday demo smoke | Wed | Binary golden path |
| Friday Block 5 | Fri | Evidence folder hygiene |
Same person can run all three; logs stay separate for post-mortems.
Month-one adoption ladder
| Week | Goal |
|---|---|
| 1 | Golden path doc + first receipt |
| 2 | Block one promotion on intentional S5 RED drill |
| 3 | Pair with metadata diff same day |
| 4 | Attach receipts to release-evidence taxonomy |
Roles on a three-person team
| Person | Wednesday smoke duty |
|---|---|
| Engineer | S1–S3, S7, receipt JSON |
| Designer | Golden path authorship; S5 judgment |
| Producer | Sign log; enforce gate |
Solo dev: still write receipt—future diligence asks what you ran.
When Wednesday conflicts with promotion day
If promotion must happen Wednesday:
- Run smoke first in morning.
- Promote only after S4–S6 GREEN.
- Re-smoke same day if binary changes after promotion.
Never promote at 11 p.m. without receipt because "Discord is waiting."
Pre-promotion tabletop (10 minutes, optional)
High-stakes fest week:
- Producer reads golden path aloud.
- Engineer demonstrates S5 on projected screen.
- Marketer confirms UTM landing matches playable hook.
- Sign smoke log together.
Metrics without fake benchmarks
| Metric | Use |
|---|---|
| S5 RED per month | Gameplay stability |
| Promotion delays due to smoke | Cost of discipline |
| Time to clear S5 RED | Engineering bandwidth |
| Repeat S5 fail same beat | Design or script bug |
Improve ritual; do not publish metrics as marketing claims.
Common mistakes (seven)
- Smoke in editor only — Players install Steam depot.
- Smoke after promotion — Players hit crash first.
- Golden path too long — S5 is 60 seconds, not full run.
- Skipping S6 — Quit hangs matter for reviews.
- No receipt file — Logs without JSON do not script-check.
- Dev account only — Wrong entitlements hide depot bugs.
- Metadata GREEN, smoke skipped — Two products still ship.
Pro tips (six)
- Phone timer for S5—obvious and reliable.
- Same Steam account weekly for comparability.
- Note GPU/driver in receipt
notesonce per month. - Archive one 90s clip per
build_id. - Link receipt path in BUILD_RECEIPT
notes. - Index by ISO week —
2026-W21sorts correctly.
Incident response when smoke failed during fest
| Hour | Action |
|---|---|
| 0 | Pause ads (fest cap) |
| 1 | Roll back branch or hotfix |
| 2 | Re-smoke; new receipt |
| 3 | Community note if crash was widespread |
| 4 | Log in retro folder |
Intake compression and partner packets
Q3 intake compression: attach last four smoke receipts to partner ZIP—shows binary discipline. Pair with partner ZIP naming 03_builds/ folder.
Non-repetition note (editorial)
This URL is the binary smoke companion to Wednesday metadata diff—not a fourteenth FAQ or descriptor checklist. Forward links from Construct freeze, pixel font pass, and console opinion resolve here.
Key takeaways
- Demo smoke proves the installed binary; metadata diff proves the store story—run both before promotion.
- Fifteen minutes weekly beats fest-week crash threads.
- Gates S1–S8: install through receipt JSON.
- S4–S6 RED blocks promotion that week.
- Golden path is 60 seconds of intentional play, not full content.
demo_smoke_receipt_v1.jsonpairs with BUILD_RECEIPTbuild_id.- Test NW.js/Unity/Godot player builds, not editor preview.
- S7 enforces no devtools on retail fest demos.
- Optional screen recording helps partners and post-mortems.
- After smoke GREEN, scale with playtest tools.
- Fest marketing cap stop rules apply on smoke RED.
- October 2026 Next Fest punishes hour-one crashes harder than typo FAQs.
- Solo teams still write receipts for diligence.
- Combine with validate-packet and metadata diff for full upload-week story.
FAQ
We promote daily during crunch—still Wednesday smoke?
Run mini smoke (S4–S6 only) on promotion days; full S1–S8 weekly.
No golden path doc yet?
Write five bullets today—smoke tomorrow.
What if only shaders changed?
Still run S2–S6—GPU paths can fail launch.
Does this replace playtest tools listicle?
No—smoke is gate; tools are scale.
How does this interact with metadata diff?
Metadata first, smoke second, promote third.
We use internal branch for QA—skip S7?
S7 YELLOW on internal only if BUILD_RECEIPT documents; retail fest branch must GREEN.
Can smoke run on Steam Deck?
Recommended monthly; note Deck in receipt notes.
Conclusion
Promoting a fest branch without demo smoke is shipping a lottery ticket—players may get a game or a black screen.
Book fifteen minutes every Wednesday after your metadata diff. Block promotion when S4–S6 fail. Let October players play the build you uploaded.
The ritual is small. The hour-one trust it protects is not.
Set the recurring calendar event before your next fest branch promotion—not after the first refund screenshot shows a crash at the title card.
Fifteen minutes on Wednesday is cheaper than fifteen hours explaining why the demo never launched.
If your team already runs evidence cycles, slot demo smoke in the same light week as metadata diff—binary discipline is part of the cycle, not a distraction. The invite title should include smoke gate so nobody confuses this with optional playtesting.