Tutorials & Beginner-First Jul 11, 2026

Your First GameMaker Steam setlive Branch Dry-Run Receipt Before Fest Promotion in One Evening - 2026

2026 beginner GameMaker tutorial—Steam setlive branch dry-run, staging app_build proof, gm_steam_setlive_dry_run_receipt_v1.json, and fail-closed fest promotion.

By GamineAI Team

Your First GameMaker Steam setlive Branch Dry-Run Receipt Before Fest Promotion in One Evening - 2026

Pixel-art hero for your first GameMaker Steam setlive branch dry-run receipt fest promotion one evening 2026

gm_steam_partner_ok is true. Wednesday smoke was GREEN. You run setlive on the fest branch—and players still download last week's default build. Steamworks shows upload success. Your Discord says "we're live." The demo is not.

December 2026 GameMaker teams pass partner sanity and export gates then fail setlive because the branch pointer never moved from default to nextfest-dec-2026. 12 setlive preflight checks own the printable checklist—this Tutorials & Beginner-First guide closes the GameMaker branch dry-run gap in one evening: screenshot Steamworks Branches, run staging build_app against the fest branch VDF, file gm_steam_setlive_dry_run_receipt_v1.json, set setlive_dry_run_ok on BUILD_RECEIPT before real setlive.

Non-repetition note: 12 setlive checks owns twelve-check listicle; Lesson 262 owns P1–P6 partner identity; export evening owns G1–G5 folder; setlive dry-run preflight (Guide) owns ninety-second S1–S6; Lesson 270 forward owns BUILD_RECEIPT milestone. This URL is the beginner evening path between partner receipt and fest promotion.

Why this matters now (December 2026)

  1. Partner ≠ branchDepotOwnedByOtherAccount is fixed; wrong branch is the new Thursday burn.
  2. GameMaker upload cadence — Teams upload Friday; setlive Monday without dry-run on fest branch name.
  3. Playtest vs festPlaytest isolation requires surface: fest_public and branch screenshot proof.
  4. Visible build labelLabel opinion fails when branch points at old build_label.
  5. Receipt chaingm_steam_partner_oksetlive_dry_run_oksetlive_allowed must be ordered.

Direct answer: Screenshot fest branch in Steamworks; run staging build_app with VDF whose branch key matches screenshot; archive log; file gm_steam_setlive_dry_run_receipt_v1.json with S1–S6 pass; set setlive_dry_run_ok: true before production setlive.

Who this is for and what you get

Audience You will be able to…
Beginner GameMaker Steam exporter Capture branch screenshot + dry-run log
Solo dev Stop promoting default by habit
Producer Gate setlive on receipt
Working dev Wire staging app ID + jq fail-closed

Time: ~90–120 minutes first evening; 15 minutes per promotion after template.
Prerequisites: Lesson 262 P5 GREEN or equivalent gm_steam_partner_ok; fest branch name in runbook; steamcmd access.

What you will have after one evening

  • Steamworks Branches screenshot (fest_branch_screenshot.png)
  • Staging app_build_fest.vdf with explicit branch key
  • build_app_staging_dry_run_<date>.log
  • gm_steam_setlive_dry_run_receipt_v1.json passing S1–S6
  • BUILD_RECEIPT columns setlive_dry_run_ok, fest_branch
  • release-evidence/steam/gamemaker-setlive/README.md

Beginner checkbox

# Bad habit Fix tonight
1 setlive on default S1 screenshot proves fest branch
2 Skip staging dry-run S2 log before production
3 VDF branch typo S4 crosswalk screenshot ↔ VDF
4 Partner receipt stale Re-run 262 if actor changed
5 Promote without receipt S6 before setlive

Evening overview (four blocks)

Block Minutes Output
A — Branch screenshot 20–25 S1 PNG
B — Staging VDF 25–35 Fest branch in app_build
C — Dry-run log 25–35 S2 staging log
D — Receipt + BUILD_RECEIPT 20–30 JSON + columns

Run after partner P5 and before production setlive—pair Thursday row review.

Gates S1–S6

Align with setlive dry-run preflight (Guide).

Gate Check Fail when
S1 Branches tab screenshot Fest branch not shown or name mismatch
S2 Staging build_app dry-run Auth fail or branch parse error
S3 build_label on BUILD_RECEIPT matches smoke Drift vs Wednesday receipt
S4 VDF "branch" matches screenshot Typo nextfest-dec vs nextfest-dec-2026
S5 Fail-closed jq setlive without setlive_dry_run_ok
S6 Receipt filed Missing JSON

Promotion rule: setlive_allowed is true only when S1–S6 pass, gm_steam_partner_ok true, and Wednesday smoke S4–S6 GREEN on same build_label.

Branch pointer vs depot upload (beginner mental model)

Many first-time Steam exporters confuse uploading bytes to a depot with moving the live branch pointer. They are different operations:

Action What changes What players see
Depot upload New build ID exists in Steamworks Often nothing until branch points at it
setlive / branch promotion Branch pointer moves to a build ID Download updates on that branch
Default branch Store page default install target Most fest traffic if you never promote fest branch

GameMaker teams export Friday, upload successfully, and celebrate in Discord—while default still serves last month’s jam build. The fix is not re-exporting; it is proving tonight that your VDF SetLive (or equivalent branch key in your runbook) targets nextfest-dec-2026 (or your documented fest name) before you run production setlive.

Pair depot and branch discipline when Unity or Godot teammates share the same Steamworks app—branch names must be one runbook string, not three Slack variants.

Sample BUILD_RECEIPT row (after S6)

{
  "build_label": "nextfest-dec-2026-rc3",
  "engine": "gamemaker_2024",
  "surface": "fest_public",
  "fest_branch": "nextfest-dec-2026",
  "gm_steam_partner_ok": true,
  "setlive_dry_run_ok": true,
  "setlive_allowed": true,
  "gm_steam_setlive_dry_run_receipt_path": "release-evidence/steam/gamemaker-setlive/GM_STEAM_SETLIVE_DRY_RUN_RECEIPT.json",
  "demo_smoke": {
    "promotion_allowed": true,
    "receipt_path": "release-evidence/03-builds/demo_smoke_receipt_v1.json"
  }
}

Thursday row review should diff fest_branch and setlive_dry_run_ok alongside build_label—a GREEN smoke with setlive_dry_run_ok: false means you uploaded a good binary to the wrong promotion story.

Multi-depot GameMaker teams (working dev)

Some GameMaker projects ship Windows demo depot + optional content depot. For dry-run:

  1. List every depot ID in gm_steam_setlive_dry_run_receipt_v1.json under depot_ids.
  2. Confirm all depots in VDF match Steamworks Depots tab (cousin of Lesson 262 P4).
  3. Run one staging dry-run that includes every mapped depot—partial mapping passes locally and fails at setlive.

Document depot_ids in receipt so producers do not promote after only the exe depot uploaded.

Block A — Steamworks Branches screenshot (S1)

  1. Steamworks → App AdminSteamPipeBranches.
  2. Locate fest branch (e.g. nextfest-dec-2026)—not default unless runbook says so.
  3. Screenshot showing branch name, build ID (if assigned), description.
  4. Save release-evidence/steam/gamemaker-setlive/fest_branch_screenshot_2026-12-09.png.

Pin branch name in README—every VDF and BUILD_RECEIPT row uses exact string.

Cross-read depot and branch discipline for multi-engine teams.

Block B — Staging VDF with fest branch (S4)

GameMaker teams often maintain app_build_demo.vdf. For dry-run, copy to staging and set branch explicitly:

"AppBuild"
{
  "AppID" "1234560"
  "Desc" "GameMaker fest staging dry-run"
  "BuildOutput" "C:\\build\\steam\\output"
  "Depots"
  {
    "1234561"
    {
      "FileMapping"
      {
        "LocalPath" "C:\\build\\gamemaker\\SteamDemo\\*"
        "DepotPath" "."
        "recursive" "1"
      }
    }
  }
  "SetLive" "nextfest-dec-2026"
}

S4 pass: "SetLive" string byte-identical to S1 screenshot branch name.

Staging app pattern: Some teams use separate staging App ID—if so, document in receipt staging_app_id and never run production setlive against staging VDF. This tutorial assumes same app, fest branch dry-run only.

Pair Godot VDF LF evening when Linux CI parses VDF—GameMaker on Windows still benefits from LF if CI uploads.

Block C — Staging dry-run (S2)

steamcmd +login "$STEAM_PARTNER_USER" "$STEAM_PARTNER_PASS" \
  +run_app_build "C:\build\steam\app_build_fest_staging.vdf" \
  +quit 2>&1 | tee release-evidence/steam/gamemaker-setlive/build_app_staging_dry_run_2026-12-09.log
Log signal Action
DepotOwnedByOtherAccount Return to Lesson 262
Branch / SetLive error Fix S4 VDF
Build finished OK Proceed S3/S6
Queue idle after OK Wall-clock trend—not branch failure

S2 note: Dry-run proves branch + depot mapping—not that players downloaded yet.

Block D — gm_steam_setlive_dry_run_receipt_v1.json

{
  "schema": "gm_steam_setlive_dry_run_receipt_v1",
  "build_label": "nextfest-dec-2026-rc3",
  "engine": "gamemaker_2024",
  "app_id": "1234560",
  "fest_branch": "nextfest-dec-2026",
  "fest_branch_screenshot": "release-evidence/steam/gamemaker-setlive/fest_branch_screenshot_2026-12-09.png",
  "staging_vdf_path": "build/steam/app_build_fest_staging.vdf",
  "staging_dry_run_log": "release-evidence/steam/gamemaker-setlive/build_app_staging_dry_run_2026-12-09.log",
  "surface": "fest_public",
  "cousin_receipts": {
    "gm_steam_partner": "release-evidence/steam/GM_STEAM_PARTNER_RECEIPT.json",
    "gm_steam_export": "release-evidence/gamemaker/gamemaker_steam_export_receipt_v1.json",
    "depot_owner_checklist": "release-evidence/steam/depot_owner_receipt_v1.json"
  },
  "gates": {
    "S1_branch_screenshot": "pass",
    "S2_staging_dry_run": "pass",
    "S3_build_label_crosswalk": "pass",
    "S4_vdf_branch_match": "pass",
    "S5_fail_closed": "pass",
    "S6_receipt": "pass"
  },
  "setlive_dry_run_ok": true,
  "setlive_allowed": true
}

BUILD_RECEIPT columns

Column Example
setlive_dry_run_ok true
fest_branch nextfest-dec-2026
gm_steam_setlive_dry_run_receipt_path release-evidence/steam/gamemaker-setlive/GM_STEAM_SETLIVE_DRY_RUN_RECEIPT.json
gm_steam_partner_ok true (cousin)
surface fest_public

Lesson 270 forward wires promotion gates.

S5 — Fail-closed jq

jq -e '.setlive_dry_run_ok == true' release-evidence/steam/gamemaker-setlive/GM_STEAM_SETLIVE_DRY_RUN_RECEIPT.json
jq -e '.fest_branch == "nextfest-dec-2026"' release-evidence/steam/gamemaker-setlive/GM_STEAM_SETLIVE_DRY_RUN_RECEIPT.json

Block production setlive script unless both exit 0.

Developer path — promotion week order

Step Artifact Owner
1 Export G1–G5 Export evening
2 Partner P1–P6 Lesson 262
3 Upload to depot Engineering
4 This dry-run Release owner
5 Wednesday smoke Producer
6 Production setlive Release owner
7 Thursday row diff Thursday review

Relationship to checklist vs partner vs export

Artifact Role
This tutorial One-evening branch dry-run
12 setlive checks Printable 12-check list
Lesson 262 Partner identity
Export evening Folder sanity
Partner preflight P1–P6 ninety-second
Resource #25 steamcmd validation tools

Common mistakes

  1. setlive on default — S1 screenshot catches.
  2. Branch name in Discord ≠ VDF — S4 crosswalk.
  3. Skipping staging — production setlive without S2 log.
  4. Partner OK but wrong surfaceplaytest_invite on BUILD_RECEIPT.
  5. Old build_label on branch — S3 vs smoke receipt.
  6. Confusing queue delay with branch failWall-clock trend.
  7. Filing receipt before dry-run completes — S2 log must exist.

Troubleshooting

Symptom Lane
Players get old build Wrong branch—re-check S1/S4
SetLive invalid Branch not created in Steamworks
Dry-run OK, smoke RED Binary lane—not branch
DepotOwnedByOtherAccount Lesson 262
VDF parse Linux CI Godot VDF LF cousin

Promotion week calendar (Friday → Monday)

Day Owner Task Gate
Friday Engineering Export + depot upload G1–G5 + upload log
Friday PM Release S1 branch screenshot S1
Saturday Release Staging VDF + dry-run S2, S4
Sunday Producer File receipt + BUILD_RECEIPT S3, S6
Monday AM QA Wednesday smoke early if fest is Tuesday Smoke S4–S6
Monday PM Release Production setlive Only if all GREEN

Solo studios compress Saturday–Sunday into this one evening—the calendar still matters so you do not run production setlive before smoke proves the same build_label you filed in the receipt.

If your fest goes live Tuesday, run smoke Monday even when upload was Friday—branch pointer discipline does not replace binary boot proof.

Worked example — Friday upload, Monday setlive

Step Action Result
1 Upload depot Friday Build ID assigned
2 Screenshot nextfest-dec-2026 S1 pass
3 Staging dry-run S2 log OK
4 build_label matches smoke S3 pass
5 File receipt setlive_dry_run_ok: true
6 Production setlive Players get rc3

Lesson learned: Upload succeeded to depot—but setlive never targeted fest branch until dry-run proved VDF SetLive string.

Discord stand-up one-liner

gm_steam_partner_ok + setlive_dry_run_ok on nextfest-dec-2026—staging log clean, production setlive after smoke.

Proof table

Row Evidence Pass
Branch screenshot S1 PNG Name visible
Staging log S2 file No ownership error
BUILD_RECEIPT label S3 Matches smoke
VDF SetLive S4 Matches screenshot
jq S5 Exit 0
Receipt S6 setlive_dry_run_ok: true

Seven scenarios (A–G)

ID Situation Correct response
A First fest setlive Run full S1–S6 tonight
B Partner fail Fix 262 before branch
C Branch typo S4 before re-upload
D Smoke RED No setlive
E Queue hours after OK Wall-clock trend
F Contractor changed branch New S1 screenshot
G Skipped receipt Roll back pointer

Staging vs production setlive script (sketch)

#!/usr/bin/env bash
set -euo pipefail
RECEIPT="release-evidence/steam/gamemaker-setlive/GM_STEAM_SETLIVE_DRY_RUN_RECEIPT.json"
jq -e '.setlive_dry_run_ok == true' "$RECEIPT"
# production setlive only after Wednesday smoke GREEN
# steamcmd +app_set_config ... +commit ...

Document production commands in runbook—this post owns receipt discipline, not every SteamPipe flag.

Cousin receipt chain (GameMaker Steam lane)

gamemaker_steam_export_receipt_v1.json     → export G1–G5
gm_steam_partner_receipt_v1.json          → partner P5
gm_steam_setlive_dry_run_receipt_v1.json  → setlive_dry_run_ok (this evening)
depot_owner_receipt_v1.json               → twelve-check listicle cousin

Keep build_label aligned across all four for Thursday row review.

Facilitator README snippet

## Before GameMaker fest setlive

1. Confirm `gm_steam_partner_ok: true` (Lesson 262 / partner preflight).
2. Screenshot Steamworks Branches tab for `nextfest-dec-2026`.
3. Run staging `build_app` with VDF `SetLive` matching screenshot.
4. File GM_STEAM_SETLIVE_DRY_RUN_RECEIPT.json with S1–S6 pass.
5. Wednesday smoke GREEN on same `build_label`.
6. Production `setlive` only when jq gates pass.

Tools and sibling reads

Key takeaways

  1. Partner receipt ≠ branch pointer—dry-run proves SetLive target.
  2. One evening wires screenshot, staging log, receipt, BUILD_RECEIPT columns.
  3. S4 VDF branch string must match S1 screenshot exactly.
  4. Fail-closed jq before production setlive.
  5. 12 setlive checks check 7 pairs this tutorial for GameMaker.
  6. Lesson 262 must be GREEN before S2.
  7. Guide preflight holds ninety-second S1–S6; this post holds evening blocks.
  8. surface: fest_public required with fest branch—not playtest invite.
  9. Thursday row review diffs fest_branch column.
  10. Blender hero glTF diligence evening when mirror week is next.

FAQ

Is staging App ID required?
No—document if you use one; never mix staging VDF with production setlive.

Same as depot_owner_receipt?
Listicle cousin—gm_steam_setlive_dry_run is GameMaker branch-specific evening path.

Can Godot teams use this JSON?
Schema is GameMaker lane—use same S1–S6 spirit with engine-specific paths.

How does this relate to Lesson 270?
Lesson 270 promotes receipt into BUILD_RECEIPT—run this evening first.

What if branch already has old build?
setlive moves pointer—dry-run still proves VDF targets correct branch name.

Does dry-run replace Wednesday smoke?
No—smoke proves binary; dry-run proves branch discipline.

Conclusion

December GameMaker fest promotion fails quietly when setlive targets the wrong branch. One evening: screenshot Branches, staging dry-run, crosswalk VDF, file receipt, set setlive_dry_run_ok—then run production setlive after smoke.

Next reads: setlive dry-run preflight (Guide), 12 setlive checks, Lesson 262, Lesson 270 forward, export evening.

Pin fest branch screenshot beside your app_build VDF before Monday setlive—not after players report the wrong demo build.