Lesson 262: GameMaker Steam Partner Receipt on BUILD_RECEIPT (2026)
Direct answer: Before October 2026 GameMaker teams run first SteamPipe depot upload or fest setlive, promote gm_steam_partner_receipt_v1.json proving Steamworks App Admin screenshot (P1), config.vdf partner login (P2), IDE Steam session match (P3), VDF depot crosswalk (P4), and build_app dry-run without DepotOwnedByOtherAccount (P5)—distinct from GameMaker export sanity evening (gamemaker_steam_export_receipt_v1 folder gates G1–G5) and runtime parity preflight (GX + Steam hash discipline). Pair the GameMaker Steam partner account sanity preflight (Guide #25).

Why this matters now (October fest first Steam upload)
October 2026 HTML5-first GameMaker teams add Windows Steam demos for Next Fest. Export folder gates pass; steamcmd fails Thursday with DepotOwnedByOtherAccount because the IDE, config.vdf, and Steamworks admin row disagree on who owns the depot. Teams burn fest week on queue retries when the fix is partner identity—262 files gm_steam_partner_ok on BUILD_RECEIPT so producers block setlive until P5 GREEN.
The GameMaker partner preflight is the ninety-second gate—262 is the BUILD_RECEIPT milestone.
Beginner path (admin screenshot → dry-run → receipt)
| Step | Action | Success check |
|---|---|---|
| 1 | Screenshot Steamworks Users & Permissions | Upload actor is App Admin |
| 2 | Confirm config.vdf partner login |
Not personal Steam |
| 3 | Re-login GameMaker IDE Steam session | Matches P2 |
| 4 | Crosswalk app_build_*.vdf depot IDs |
Match Steamworks UI |
| 5 | Run build_app dry-run |
No DepotOwnedByOtherAccount |
| 6 | File receipt + BUILD_RECEIPT | gm_steam_partner_ok: true |
Time: ~50 minutes first Steam upload; ~12 minutes when screenshot + config.vdf are pinned.
Developer path (gates P1–P6)
| Gate | Check | Fail when |
|---|---|---|
| P1 | Steamworks app admin screenshot | Upload actor not App Admin |
| P2 | config.vdf account name |
Personal Steam on CI |
| P3 | GameMaker IDE Steam session | IDE ≠ steamcmd login |
| P4 | VDF app + depot IDs | Drift vs Steamworks Depots tab |
| P5 | build_app dry-run log |
DepotOwnedByOtherAccount |
| P6 | Receipt + BUILD_RECEIPT | Promote before P5 GREEN |
P1 — cousin receipt crosswalk
| Field | Cousin (export blog) | Cousin (runtime preflight) | This lesson (262) |
|---|---|---|---|
| Schema | gamemaker_steam_export_receipt_v1 |
GX_RUNTIME_PARITY / depot labels |
gm_steam_partner_receipt_v1 |
| Scope | Standalone exe folder G1–G5 | GX + Steam runtime hash | Partner identity + depot ownership |
| Path | release-evidence/01-build/gamemaker/ |
release-evidence/gx/ |
release-evidence/steam/ |
Do not merge schemas—reference paths in cousin_receipts only.
P1 — App admin screenshot ritual
- Steamworks → Users & Permissions → target app.
- Screenshot App ID, depot list, upload actor email.
- Save
release-evidence/steam/steamworks_app_admin_<appid>_<date>.png.
Producer rule: No fest setlive until screenshot < 7 days old.
P2 — config.vdf sanity
Windows:
%ProgramFiles(x86)%\Steam\config\config.vdf
CI rule: One mounted secret per app—never reuse producer laptop personal Steam config on ubuntu-latest.
P4 — VDF crosswalk table
| Field | Steamworks UI | app_build_*.vdf |
|---|---|---|
| App ID | App → App ID | "appid" |
| Depot ID | Depots tab | "depot" |
| Content root | — | GameMaker SteamDemo/ folder |
Cross-read depot discipline before fest branch promotion.
P5 — build_app dry-run
steamcmd +login "$STEAM_PARTNER_USER" "$STEAM_PARTNER_PASS" \
+run_app_build_http /path/to/app_build_demo.vdf \
+quit 2>&1 | tee logs/steamcmd_build_app_dry_run.log
Fail-closed: grep log for DepotOwnedByOtherAccount before BUILD_RECEIPT promotion.
gm_steam_partner_receipt_v1.json
{
"schema": "gm_steam_partner_receipt_v1",
"app_id": "1234560",
"depot_id": "1234561",
"partner_login": "studio_partner_login",
"ide_session_match": true,
"config_vdf_account": "studio_partner_login",
"steamworks_app_admin_screenshot": "release-evidence/steam/steamworks_app_admin_1234560_2026-10-04.png",
"build_app_dry_run_log": "logs/steamcmd_build_app_dry_run.log",
"cousin_receipts": {
"export_sanity": "release-evidence/01-build/gamemaker/gamemaker_steam_export_receipt_v1.json",
"runtime_parity": "release-evidence/gx/GX_RUNTIME_PARITY_RECEIPT.json"
},
"gates": {
"P1_app_admin_screenshot": "pass",
"P2_config_vdf": "pass",
"P3_ide_session": "pass",
"P4_vdf_depot_crosswalk": "pass",
"P5_build_app_dry_run": "pass",
"P6_build_receipt": "pass"
},
"depot_upload_allowed": true,
"gm_steam_partner_ok": true
}
Pin under release-evidence/steam/GM_STEAM_PARTNER_RECEIPT.json.
BUILD_RECEIPT row (P6)
| Column | Pass when |
|---|---|
gm_steam_partner |
gm_steam_partner_ok: true |
export_sanity |
Cousin export evening independent column |
runtime_parity |
Cousin runtime preflight independent column |
Thursday row review — GameMaker partner identity line: P5 dry-run Y/N.
Key takeaways
DepotOwnedByOtherAccountis identity—not queue delay (P5).- App Admin screenshot before fest week (P1).
- Never mix personal SteamGuard on CI (P2).
- Export sanity = folder; 262 = partner + depot ownership.
- Partner preflight Guide #25 — ninety-second gate before this lesson.
- Cousin: Lesson 263 — OBS replay path KFM BUILD_RECEIPT column.
- October capstone 265 wires 254–264 including this row.
- Help #27 (planned) — fix lane for
DepotOwnedByOtherAccount. - 12 preflight checks before setlive — checklist sibling.
- 18-free Steamworks resources — partner bookmark list.
Common mistakes
- Uploading from contractor laptop on personal Steam (P2–P3).
- Reusing last year's
config.vdfon new App ID. - Trusting IDE green without P5 log grep.
- Marketing-only invite instead of App Admin (P1).
- Skipping export sanity—partner OK but exe folder broken.
Troubleshooting
| Symptom | Lane |
|---|---|
DepotOwnedByOtherAccount |
P1–P3; Help #27 when published |
| IDE upload OK, CI fails | P2 config.vdf vs IDE cache |
| Wrong build on fest branch | Runtime parity preflight |
| Queue vs auth confusion | SteamPipe wall-clock trend |
| CRLF VDF parse on Linux CI | Help #31 (symptom differs) |
Mini exercise (45 minutes)
- Intentionally log steamcmd with wrong account—confirm P5 fail.
- Fix
config.vdf+ IDE session—confirm match. - Capture P1 screenshot; fill P4 crosswalk table.
- Run dry-run; grep log clean.
- File receipt; BUILD_RECEIPT GREEN.
Continuity — October–Q4 2026 fest ops truth (254–265)
| Lesson | Receipt focus |
|---|---|
| 261 | Unity CI Library cache |
| 262 (this) | GameMaker Steam partner |
| 263 | OBS replay path KFM |
| 265 | October ops capstone |
Previous: Lesson 261 — Unity CI Library cache Addressables
Next: Lesson 263 — OBS replay path KFM receipt
FAQ
Same as export sanity blog?
Export blog = G1–G5 standalone folder; 262 = Steamworks partner + steamcmd ownership on BUILD_RECEIPT.
Same as Guide #25?
Guide #25 = ninety-second preflight checklist; 262 = BUILD_RECEIPT promotion milestone.
Need both IDE and steamcmd?
Yes—P3 proves they match; either alone can lie.
GX.games HTML5 related?
Parallel channel—run VERSION pin for HTML5; 262 for Windows Steam depot.
Can we skip dry-run?
No for fest-facing BUILD_RECEIPT—P5 log is the ownership proof.
October fest Steam uploads fail on partner identity before they fail on queue time—screenshot App Admin, pin config.vdf, dry-run build_app, then gm_steam_partner_ok before setlive.