Case Studies & Experiments Jul 16, 2026

We Recovered Wrong Steam Default Branch After Localization Capstone GREEN - 2026 Case Study

2026 case study—recover wrong Steam `default` branch promoted after localization capstone GREEN; gates B1–B6; `default_branch_recovery_receipt_v1.json`; set BUILD_RECEIPT latch and prevention checklist.

By GamineAI Team

We Recovered Wrong Steam Default Branch After Localization Capstone GREEN - 2026 Case Study

Pixel-art hero for wrong Steam default branch recovery after localization capstone GREEN case study 2026

October 2026 is when micro-studios finally finish a localization capstone and feel safe. Then they run a “promotion” step that actually targets the wrong Steam branch, and players keep downloading the wrong bytes.

This is the pattern we recovered from:

  1. Localization capstone is GREEN (strings are aligned, weekly annex indexed).
  2. Teams treat that as a permission slip for the upload window and promotion steps.
  3. The Steam promotion command targets default (or an equivalent fallback branch) instead of the fest-day / RC / upload target branch.
  4. setlive appears to succeed, but the player-installed footer still shows the older branch’s build_label.
  5. The team “fixed it” by editing BUILD_RECEIPT booleans, not by fixing the actual live branch pointer.

This case study is a recovery narrative with no invented download counts, no fake player quotes, and no fabricated refund percentages. It gives you a failure signature, a B1–B6 recovery ladder, and the default_branch_recovery_receipt_v1.json gates so future you can grep what went wrong.

Pair Localization capstone #11, October upload dress rehearsal challenge, and the cousin February setlive mismatch case study. Forward the prevention habit with 12 pre-flight checks before steamcmd setlive, and for GameMaker-specific dry-run receipt structure see Course Lesson 270.

Non-repetition note:
February setlive mismatch owns label/depot mismatch after RC label receipt passed. This URL owns wrong Steam branch pointer after localization capstone GREEN—the “receipt theater” failure mode where the team believes upload permission equals live pointer truth.

Why this matters now (October 2026 upload week)

  1. Localization GREEN is not promotion truth. The capstone validates strings and weekly indexing, not which Steam branch is live.
  2. default is a trap branch. default can look “good enough” in a rushed promotion window because it often hosts old-but-working binaries.
  3. Receipt theater scales with team size. Once BUILD_RECEIPT says october_upload_window_allowed: true, people stop reading the Steam branch UI and start editing booleans.
  4. Dry-run discipline gets skipped. Teams treat setlive dry-run as “required only when RC label drift is suspected,” but wrong branch pointer is a separate class of drift.
  5. Players prove the truth, not scripts. The only safe claim is when installed footer build_label matches what you promoted and what you recorded.

Direct answer: Recover wrong Steam default promotions using:

  • a player-installed label capture (B1),
  • a Steam branch / setlive string audit (B2),
  • a depot manifest audit against upload receipts (B3),
  • a setlive dry-run on the correct target branch (B4),
  • a production re-promote plus installed smoke (B5),
  • and a master receipt default_branch_recovery_receipt_v1.json with B1–B6 gates (B6).

Beginner quick start (what recovered means here)

In this pattern, “recovered” means you made the installed game match the truth you intended:

  1. You reproduced the mismatch: player-installed footer build_label != BUILD_RECEIPT build_label.
  2. You identified that setlive targeted the wrong branch pointer (usually default).
  3. You audited depot manifest against the upload receipt (so you know which bytes were actually live).
  4. You re-promoted by running dry-run on the correct target branch first.
  5. You verified installed behavior (smoke on an installed library build).
  6. You filed default_branch_recovery_receipt_v1.json and set the recovery latch in BUILD_RECEIPT.

Success check: Two consecutive clean installs show the same installed footer label, and the BUILD_RECEIPT recovery latch points to your master recovery receipt.

The failure signature (typical signals)

Channel Typical wording / symptom
Steam discussion “Steam says update happened, but it still looks like the old build label.”
Discord #builds “Localization is GREEN; why is the new strings not showing?”
Internal setlive exited 0, so it must be right.”
Installed client Footer build_label remains from default branch promotion, not from intended upload target.

Starting state (what was wrong)

Layer Expected Observed
Localization capstone Capstone receipt is GREEN GREEN (strings + weekly annex ok)
Upload window october_upload_window_allowed: true True in BUILD_RECEIPT
Steam promotion setlive targets upload target branch (fest/RC) setlive targets default
Player-installed label footer matches intended promoted build footer shows old build_label

This is not a “localization is broken” story. Localization evidence was fine. The live branch pointer was wrong.

Root cause pattern (synthesized)

Mechanic What drifted
Branch pointer slip default promoted instead of intended upload target branch
Dry-run skipped no staging dry-run proof for the correct target branch
Receipt theater BUILD_RECEIPT flags flipped before installed footer proof
Depot bytes confusion bytes live on default branch despite capstone GREEN

Timeline B1–B6 (recovery ladder)

Stage Gate Focus Output
B1 D1 Player-installed label capture player_visible_label_before.txt
B2 D2 Steam branch / setlive string audit branch_setlive_audit_v1.json
B3 D3 Depot manifest audit vs upload receipt default_branch_manifest_audit_v1.json
B4 D4 Setlive dry-run on correct target branch engine dry-run log receipt
B5 D5 Production re-promote + installed smoke installed_smoke_receipt_v1.json
B6 D6 Master receipt + BUILD_RECEIPT latch default_branch_recovery_receipt_v1.json

B1 — Player-installed label reproduction (beginner path)

Goal: Prove the mismatch on a clean Steam install. This is the one step that stops “it should be green” arguments.

Steps

  1. Use a clean Steam install (no staging editor copies).
  2. Capture the installed footer or any visible UI label that maps to build_label.
  3. Compare against your recorded BUILD_RECEIPT value.
  4. Save evidence:
    • release-evidence/october-upload/default-branch-recovery-2026/player_visible_label_before.txt

Quick command template

jq -r '.build_label' release-evidence/build/BUILD_RECEIPT.json

Then compare the string you saw installed with the BUILD_RECEIPT build_label.

Pass criteria for B1

  • You can show installed label mismatch (not just “we think we promoted the right build”).

B2 — Steam branch / setlive string audit (working dev)

Goal: Prove what the promotion step actually targeted.

In a wrong-branch recovery, you can have a perfect localization capstone and still promote the wrong branch pointer.

Steps

  1. Capture a Steamworks branch UI screenshot showing the target branch for this promotion.
  2. Capture the setlive command inputs you used:
    • branch key / branch name string
    • target depot IDs (if you recorded them)
  3. Write an audit receipt:

release-evidence/october-upload/default-branch-recovery-2026/receipts/branch_setlive_audit_v1.json

{
  "schema": "branch_setlive_audit_v1",
  "observed_player_label_before": "REPLACE_ME",
  "intended_branch_key": "REPLACE_ME",
  "observed_setlive_target_branch_key": "default",
  "promotion_timestamp": "REPLACE_ME_ISO8601"
}

Pass criteria for B2

  • The receipt clearly identifies that the live pointer drifted via a wrong branch target (typically default).

B2 evidence checklist (so you don’t re-litigate in Slack)

Before anyone says “Steam must be slow,” collect the three anchors below. In wrong-branch recoveries, they answer almost every question:

Anchor What to capture Saved as
Branch UI proof Screenshot (Steamworks branch name column) showing default or the observed target .../snapshots/steam-branch-ui.png
Promotion inputs The exact setlive target branch key / string that the command used .../receipts/branch_setlive_inputs.txt
Receipt context The capstone receipt ID you believe “enabled upload” (so you can separate permission from pointer truth) .../receipts/capstone_latch_ref.txt

Fail note: if you only capture the setlive command but not the branch UI, your evidence can still be correct but your story can still collapse under moderation pressure.

Common B2 failure modes

  • The branch UI screenshot is of the wrong moment (after someone re-ran setlive). Timestamp it or store the snapshot immediately.
  • The setlive command string differs from what the dry-run used (typo in branch key). B4 prevents this by forcing the same target string twice.
  • People copy default as a default value in scripts. Scripts are fine—receipt evidence is mandatory.

B3 — Depot manifest audit (evidence against upload receipt)

Goal: Tie the branch pointer to the actual bytes by auditing depots against the upload receipt.

Steps

  1. Load your depot upload receipt from the upload-night evidence:
  2. Compare expected depot contents against what’s live under the wrong branch pointer.
  3. File:

release-evidence/october-upload/default-branch-recovery-2026/receipts/default_branch_manifest_audit_v1.json

{
  "schema": "default_branch_manifest_audit_v1",
  "observed_branch_key": "default",
  "upload_receipt": "release-evidence/steam/steampipe_depot_upload_receipt_v1.json",
  "mismatch_confirmed": true,
  "notes": "bytes mismatch vs intended upload target build"
}

Pass criteria for B3

  • You now have evidence that the wrong branch pointer corresponds to the wrong bytes.

B3 bytes mapping (working dev)

In this failure mode, you do not need complicated forensics. You need a comparison that answers: “Which bytes did players actually get under default?”

Compare three surfaces that should be aligned if promotion truth is correct:

Surface Source What you extract Why
Intended upload bytes your upload receipt from the steampipe depot upload evening (#1) the depot contents hash / expected build ID mapping expected reality
Live bytes under wrong pointer manifest audit for the promoted branch key (default) live depot list + build ID mapping observed reality
Installed player bytes installed smoke run on a clean library client visible build_label and one localization string spot “what matters” reality

B3 is where you lock the narrative: if B3 says “mismatch_confirmed,” do not soften the response. Players need the truth before you promise fixes.

Pass criteria for B3

  • mismatch_confirmed: true AND you can point at the exact evidence artifacts used for that conclusion.

B4 — Setlive dry-run on the correct target branch (promotion preflight)

Goal: Stop repeating the mistake by proving the correct target branch in staging before production.

For GameMaker-specific receipt shape, Course Lesson 270 provides the dry-run receipt discipline.

For the underlying SteamPipe mechanics, keep the official reference nearby: Uploading builds with SteamPipe.

Steps

  1. Run engine-specific setlive dry-run on the correct target branch.
  2. Ensure:
    • the dry-run log shows the same branch key you intend
    • depot identity and build_label intent match your upload evidence
  3. If you rely on a partner identity config, include the guide preflight first:

Pass criteria for B4

  • Dry-run receipt shows the correct target branch and expected build label intent.

B4 dry-run log requirements (what to grep)

Your dry-run evidence must include, verbatim:

  1. the intended target branch key/string,
  2. the intended promoted build_label intent (or equivalent),
  3. and a “no wrong depot identity” signal (engine-specific: depot ownership / partner identity checks).

If the dry-run shows the correct target branch, but production promotes the wrong pointer again, treat that as a pipeline rerouting issue (not a Steam outage). That is a different recovery ticket than this one.

B5 — Production re-promote + installed smoke (prove the truth)

Goal: After production setlive, verify on installed Steam client, not Editor/staging.

Steps

  1. Re-run production setlive with the corrected target branch pointer.
  2. Capture the production log evidence (timestamp + output).
  3. Run the installed smoke:
    • confirm installed footer label matches BUILD_RECEIPT build_label
    • optionally validate one visible localization string (since capstone GREEN should surface expected changes)
  4. File:
    • release-evidence/october-upload/default-branch-recovery-2026/receipts/installed_smoke_receipt_v1.json

Pass criteria for B5

  • Installed footer label matches what you intended to promote.

B5 localization spot check (still capstone GREEN, but verify visibility)

Localization capstone GREEN is about the content pipeline. Still, in the wrong-branch story you must confirm the player-visible surface matches the intended strings for the branch you fixed.

For B5, do a “minimal surface check”:

  • open one menu or screen that displays a previously identified string,
  • confirm at least one of the changed phrases matches the intended locale behavior,
  • record what you saw in release-evidence/october-upload/default-branch-recovery-2026/notes/string_spot_check.md.

Do not claim full translation verification in a recovery post. B5 proves the branch pointer truth, and the spot check prevents the next class of “wrong bytes, right receipts” loop.

Facilitator stand-up script (B5 + B6 filing block)

Use this as the comms-to-evidence template during recovery:

## Oct upload wrong-default recovery — stand-up (20 min max)
- B1: installed footer mismatch observed (path attached)
- B2: Steam branch UI + setlive target string captured (evidence attached)
- B3: depot manifest audit mismatch_confirmed true (receipt path attached)
- B4: dry-run on correct target branch shows intended build_label intent
- B5: installed smoke after production setlive shows matching footer label
- B6: default_branch_recovery_receipt_v1.json filed and BUILD_RECEIPT latch updated
No public “fixed” until B5; no receipt theater substitutes.

Moderation comms templates (hold vs post-fix)

Hold (before B4/B5):

“We have localization capstone GREEN, but player installs may still be on the wrong Steam branch pointer. We are collecting B1–B3 evidence and will only confirm ‘fixed’ after installed smoke (B5).”

Post-fix (after B5, before B6 sharing):

“Installed footer label matches the intended promoted build_label. Recovery receipt default_branch_recovery_receipt_v1.json is filed and BUILD_RECEIPT latch updated. If you still see old text, capture your local footer screenshot and the session branch key we used.”

B6 — Master receipt + BUILD_RECEIPT latch

Goal: File the recovery receipt once, so partner/on-call can grep it later without asking “which branch was live?”

default_branch_recovery_receipt_v1.json template

{
  "schema": "default_branch_recovery_receipt_v1",
  "fest_window": "2026-10-next-fest-upload-week",
  "default_branch_key": "default",
  "intended_branch_key": "REPLACE_ME",
  "observed_player_label_before": "REPLACE_ME",
  "intended_build_label": "REPLACE_ME",
  "root_cause_class": "wrong_branch_pointer",
  "nights": [
    {"gate": "B1", "pass": true},
    {"gate": "B2", "pass": true},
    {"gate": "B3", "pass": true},
    {"gate": "B4", "pass": true},
    {"gate": "B5", "pass": true},
    {"gate": "B6", "pass": true}
  ],
  "default_branch_recovery_ok": true,
  "evidence_dir": "release-evidence/october-upload/default-branch-recovery-2026/"
}

BUILD_RECEIPT latch snippet

Update your root BUILD_RECEIPT with a recovery latch:

{
  "default_branch_recovery_ok": true,
  "default_branch_recovery_receipt": "release-evidence/october-upload/default-branch-recovery-2026/receipts/default_branch_recovery_receipt_v1.json"
}

Pass criteria for B6

  • Receipt verifies and BUILD_RECEIPT points to it.

verify_default_branch_recovery.sh (pattern)

#!/usr/bin/env bash
set -euo pipefail
REC="${1:-release-evidence/october-upload/default-branch-recovery-2026/receipts/default_branch_recovery_receipt_v1.json}"

jq -e '.schema == "default_branch_recovery_receipt_v1"' "$REC" >/dev/null
jq -e '.nights | length == 6' "$REC" >/dev/null
jq -e '[.nights[].pass] | all' "$REC" >/dev/null
jq -e '.default_branch_recovery_ok == true' "$REC" >/dev/null
echo "default_branch_recovery verify: OK"

Proof table (what “GREEN” means)

Gate Evidence GREEN when
B1 player_visible_label_before.txt Installed footer label != BUILD_RECEIPT before fix
B2 branch_setlive_audit_v1.json Audit identifies promotion target branch (default)
B3 default_branch_manifest_audit_v1.json Depot bytes mismatch confirmed vs intended target
B4 engine dry-run log/receipt Dry-run targets correct branch pointer
B5 installed_smoke_receipt_v1.json Installed footer matches intended build_label
B6 master receipt + BUILD_RECEIPT latch default_branch_recovery_ok: true

Scenarios A–G (what looks similar, but isn’t)

A — Localization capstone GREEN but setlive targeted wrong branch
This exact class: capstone is fine; branch pointer is wrong. Recovery needs B1–B6.

B — default promotion because fest target label “looked fine” in Steamworks UI
Still wrong: UI might show the right label even when players see old bytes. Trust installed smoke.

C — Dry-run skipped “for speed” during upload week
B4 exists so you do not repeat B2/B3 evidence work.

D — CDN delay vs pointer slip
CDN delay changes bytes while label may look similar; branch pointer slip changes the intended branch mapping. Audit both.

E — “We fixed BUILD_RECEIPT so it’s fixed”
Receipt theater: BUILD_RECEIPT booleans are not promotion truth. Installed smoke is mandatory.

F — HOTFIX without exception list
If you consider a HOTFIX, follow the numbered exception policy (separate from this case study). In Oct you still need the recovery receipt narrative.

G — Player label mismatch that is not wrong bytes
Sometimes label rendering differs per platform. If installed footer is inconsistent, still file B1 evidence and stop promotion until resolved.

Prevention checklist (before next setlive)

Prevent step What it prevents
Branch pointer audit (B2-style) before production promote default promoted by accident
Engine dry-run receipt (B4-style) no staging proof for target branch
Installed footer smoke on every recovery receipt theater
Keep capstone receipt separate from promotion truth localization GREEN mistaken for live pointer truth
Pair this with Steam label mismatch help as a quick sanity review label mismatch class guidance

Integration with October upload-week cluster rows

Cluster row Role in this recovery narrative
Localization capstone #11 Provides capstone GREEN context; does not prove branch pointer
October upload dress rehearsal challenge (#3) Helps keep evidence diffs and receipt discipline during upload week
SteamPipe depot upload log evening (#1) Provides depot upload receipt anchors for B3 audits
12 setlive checks Prevention gate so future B2 slips don’t happen silently
Lesson 270 GameMaker dry-run receipt milestone for B4

Related GamineAI reads

Key takeaways

  1. Localization capstone GREEN is not the same thing as live Steam branch pointer truth.
  2. This URL’s recovery is B1–B6 and produces one grep-able master receipt: default_branch_recovery_receipt_v1.json.
  3. The mismatch must be proven on a player-installed Steam client (B1 and B5).
  4. The branch pointer target must be audited (B2) and tied to depot bytes (B3).
  5. Dry-run is prevention, not paperwork: B4 stops the “repeat the same mistake faster” loop.
  6. Do not flip BUILD_RECEIPT booleans as a substitute for installed footer proof.

FAQ

Is this the same as RC label mismatch recovery?

No. RC label mismatch is about label receipts passing while live depots differ. This is about a wrong Steam branch pointer after capstone GREEN.

What if setlive exit code is 0?

Exit code can be 0 while you targeted the wrong branch pointer. Trust B1 + B5 installed smoke evidence.

Do we need a new capstone receipt on recovery?

No. Capstone validates localization and weekly indexing. Recovery validates promotion truth and live branch pointer behavior.

Can CDN delay mimic this?

It can delay bytes, but pointer slip changes the mapping. Use B2 + B3 receipts and always smoke on installed client.

What ships next?

After you recover the branch pointer, the next coordination step is usually store publish readiness and metadata discipline. (This URL is intentionally recovery-first, not store-first.)