Case Studies & Experiments Jul 12, 2026

We Recovered a Fest-Day setlive Mismatch After February RC Label Receipt Passed - 2026 Case Study

2026 case study—recover fest-day setlive mismatch after February RC label receipt passed; wrong depot promotion, S1–S6 gates, fest_day_setlive_recovery_receipt_v1.json, dry-run discipline.

By GamineAI Team

We Recovered a Fest-Day setlive Mismatch After February RC Label Receipt Passed - 2026 Case Study

Pixel-art hero for fest-day setlive mismatch recovery after February RC label receipt passed case study 2026

This is a synthesized case study—a field pattern from February 2027 live fest teams who filed february_rc_branch_label_receipt_v1.json GREEN, skipped GameMaker setlive dry-run, and promoted fest-demo-2027-02-rc2 while players still downloaded rc1 bytes on fest day two. It is not a named studio turnaround. There are no invented download counts, no fake player quotes, and no fabricated refund percentages.

What follows is the failure signature, a D1–D3 recovery timeline, fest_day_setlive_recovery_receipt_v1.json with gates S1–S6, and how the pattern maps when label receipts pass but live depot pointers do not.

Pair February RC label evening, 5-night pager challenge, hour-one funnel, live week timebox, forward Help #38, Course 278 cousin.

Non-repetition note: LFS silent demo case study owns binary stub / audio banks. Mismatched save slots owns persistence keys. February RC label evening owns L1–L6 pre-upload label unity. This URL owns live fest setlive depot mismatch after label GREEN—promotion truth, not label JSON alone.

Why this matters now (February 2027 live week)

  1. Receipt pass ≠ live depotfebruary_rc_label_ok documents intent; setlive documents what players download.
  2. Day-two HOTFIX pressurePager challenge P2 diffs build_label—drift here is the smoking gun.
  3. Launch rate collapsesHour-one funnel scenario A (launch down, quit flat) often traces to wrong depot, not gameplay.
  4. Skipped dry-run — Teams treat setlive evening as October-only—live fest still needs it.
  5. Moderation chaos — Players report “fixed” while still on old binary—moderation templates T1 rings hollow.

Direct answer: Recovery required depot manifest audit, staging setlive dry-run log, new label receipt for rc2, installed-player smoke, and fest_day_setlive_recovery_receipt_v1.json with S1–S6 GREEN before declaring HOTFIX complete.

Beginner quick start — what recovered means here

Recovered in this pattern means:

  1. Reproduced player-visible build_label ≠ BUILD_RECEIPT build_label on clean Steam install.
  2. Identified setlive targeted wrong depot ID or branch name typo (rc1 vs rc2).
  3. Re-promoted with dry-run log + screenshot evidence.
  4. Filed recovery receipt; set fest_day_setlive_recovery_ok: true.
  5. Verified funnel launch_rate recovers within next hour window (qualitative—not fabricated %).

Success check: Two consecutive clean installs show matching footer label and BUILD_RECEIPT string; Wednesday smoke GREEN on installed build.

The player-facing failure (typical signals)

Channel Typical wording
Steam discussion “Still on old build after patch note”
Discord #playtest “Footer says rc1, announcement said rc2”
Hour-one funnel Launch rate drop; quit rate flat
Internal “setlive succeeded”—no install check

Internal language before fix: “Steam CDN slow” — when root cause was wrong live branch pointer.

Starting state (what was wrong)

Layer Symptom
BUILD_RECEIPT build_label: fest-demo-2027-02-rc2
RC label receipt L1–L6 GREEN for rc2 before upload
setlive Ran without dry-run; wrong SetLive branch string
Player install Footer still shows fest-demo-2027-02-rc1
Smoke Passed on staging machine—not player library
Pager N2 build_label drift flagged YELLOW—ignored for “speed”

Gameplay on rc1 may be fine—the failure is promotion truth, not necessarily crash.

Root cause pattern (synthesized)

Mechanic What drifted
Branch string typo fest-demo-2027-02-rc2 promoted; live branch still ...-rc1
Wrong depot ID setlive targeted default depot—not fest demo depot
Skipped dry-run No gm_steam_setlive_dry_run_receipt_v1.json (or engine cousin) on fest day
Smoke on wrong surface Editor/staging binary—not Steam client library
Receipt theater Updated BUILD_RECEIPT label before setlive completed

None require malice—only promotion discipline skipped under live fest pager load.

Timeline D1–D3 (live fest recovery pattern)

Day Fest day Focus Output
D1 D2 Repro + label capture Screenshots + player_visible_label.txt
D2 D2–D3 Depot audit + dry-run Staging log + manifest JSON
D3 D3 Re-promote + smoke + receipt fest_day_setlive_recovery_receipt_v1.json

Teams with pager P2 diff caught mismatch in D1; teams without took until funnel RED.

D1 — reproduction discipline (beginner path)

Step Action
1 Clean Steam install from library (not staging folder)
2 Screenshot credits/footer build_label
3 Compare to BUILD_RECEIPT build_label and RC label receipt
4 Capture appmanifest_*.acf branch key if available
5 Log hour-one funnel row—note launch_rate drop
6 Post internal L1 escalation—no public “fixed” yet
# BUILD_RECEIPT truth
jq -r '.build_label' BUILD_RECEIPT.json

# Compare player file (facilitator pastes from screenshot OCR)
diff -u <(echo "fest-demo-2027-02-rc1") <(jq -r '.build_label' BUILD_RECEIPT.json)

Save diff output to release-evidence/steam/setlive-recovery/label-mismatch-d1.txt.

D2 — depot audit + dry-run (working dev)

SteamCMD / partner manifest checks

Check Command / action Pass
Live branch name Steamworks branch UI screenshot Matches intended rc2
Depot contents hash Compare upload log vs live manifest Bytes match upload receipt
Dry-run setlive evening S1–S6 Log shows target branch
{
  "schema": "setlive_depot_manifest_audit_v1",
  "fest_window": "2027-02-next-fest-live",
  "intended_build_label": "fest-demo-2027-02-rc2",
  "observed_player_label": "fest-demo-2027-02-rc1",
  "live_branch_key": "fest-demo-2027-02-rc1",
  "intended_branch_key": "fest-demo-2027-02-rc2",
  "dry_run_receipt_path": "release-evidence/steam/gm_steam_setlive_dry_run_receipt_v1.json",
  "mismatch_confirmed": true
}

Engine notes:

Engine setlive cousin
GameMaker setlive dry-run evening
Godot VDF LF + steamcmd before promote
Unity 12 setlive checks check 7

Worked narrative — synthesized D2 afternoon (no invented metrics)

This block is a facilitator script, not a studio press release. Times are relative to “first funnel RED on launch_rate.”

T+0 Signal Action
T+0 Hour-one funnel scenario A — launch_rate down, quit_rate flat Pager owns; community holds generic “investigating”
T+15m Two Discord screenshots show fest-demo-2027-02-rc1 footer File label-mismatch-d1.txt; do not post “fixed”
T+30m BUILD_RECEIPT says rc2; RC label receipt L1–L6 GREEN from morning Confirms receipt theater risk—label JSON passed, live pointer did not
T+45m Pager P2 diff shows build_label changed without attached dry-run path Root cause candidate: skipped_setlive_dry_run
T+60m Steamworks branch screenshot — live key still ...-rc1 File setlive_depot_manifest_audit_v1.json with mismatch_confirmed: true
T+90m Run setlive dry-run S1–S6 on staging Log must show exact fest-demo-2027-02-rc2 string
T+120m Production setlive with matching VDF Capture exit log + timestamp in evidence folder
T+150m Two clean installs — footer rc2 S4 pass; moderation may post T1 template
T+180m Wednesday smoke on library build S5 pass; file recovery receipt

Producer rule: If T+60m audit shows CDN hash updating but label unchanged, route to blog #6 wall-clock trend—not this recovery path.

GameMaker setlive string audit (working dev)

Wrong branch keys often differ by one character (rc1 vs rc2) or depot ID (default vs fest demo depot). Compare three surfaces byte-for-byte:

Surface What to capture Common drift
Partner branch UI Screenshot with branch name column Typo in rc2
VDF SetLive stanza Paste into setlive_vdf_audit.txt Wrong appid depot block
Player footer label Screenshot from clean install Old branch still live

Example audit snippet (values illustrative—replace with your App ID and depot IDs):

# setlive_vdf_audit.txt — compare dry-run vs production
AppID=1234560
DepotID=1234561
Branch=fest-demo-2027-02-rc2   # production mistakenly had rc1 here
BuildID=98765432

Pair 12 setlive checks check 7 when Unity Addressables or secondary depots participate—fest demos with DLC-sized splits promote the wrong depot while the primary EXE looks fine.

Godot and Unity cousins (same failure class)

Engine Pre-promote proof Live fest note
Godot VDF LF proof on Linux agent CRLF in branch name breaks silent setlive
Unity Library cache bust before upload Wrong Addressables catalog on correct branch label
GameMaker setlive dry-run evening S4 Partner receipt screenshot ≠ SetLive target

The recovery receipt root_cause field must name the engine-specific drift—branch_typo, wrong_depot, or skipped_dry_run—so post-fest debrief does not relitigate “Steam was slow.”

BUILD_RECEIPT columns for live fest promotion truth

Extend BUILD_RECEIPT with promotion columns orthogonal to February RC label february_rc_label_ok:

{
  "build_label": "fest-demo-2027-02-rc2",
  "february_rc_label_ok": true,
  "february_rc_label_receipt": "release-evidence/steam/february_rc_branch_label_receipt_rc2.json",
  "setlive_dry_run_ok": true,
  "setlive_dry_run_receipt": "release-evidence/steam/gm_steam_setlive_dry_run_receipt_v1.json",
  "fest_day_setlive_recovery_ok": false,
  "fest_day_setlive_recovery_receipt": null,
  "player_visible_build_label": "fest-demo-2027-02-rc1",
  "player_visible_label_captured_at": "2027-02-24T13:05:00Z"
}

Latch order (fail-closed):

  1. february_rc_label_ok — pre-upload label unity (L1–L6).
  2. setlive_dry_run_ok — staging proof before production setlive.
  3. Update build_label on BUILD_RECEIPT only after production setlive log path is attached.
  4. player_visible_build_label from installed Steam library—not editor export folder.
  5. When player_visible_build_label !== build_label, set fest_day_setlive_recovery_ok: false and open D1–D3.
  6. After S1–S6 GREEN, flip fest_day_setlive_recovery_ok: true and attach recovery receipt path.

Thursday row review should diff player_visible_build_label during live week—not only build_label—so P2 catches receipt theater before funnel RED.

Facilitator stand-up script (D2 recovery block)

Paste into #fest-live-ops during mismatch response:

## Setlive mismatch stand-up (20 min max)

- [ ] Funnel row attached — scenario A? (launch down, quit flat)
- [ ] Player label screenshot (before) in evidence folder
- [ ] BUILD_RECEIPT build_label vs player_visible_build_label diff printed
- [ ] RC label receipt path — GREEN but live wrong? (receipt theater check)
- [ ] Depot manifest audit JSON filed — mismatch_confirmed true/false
- [ ] Dry-run receipt re-run — S1–S6 GREEN
- [ ] Production setlive log path attached with timestamp
- [ ] Two clean install labels match — S4
- [ ] Wednesday smoke on library build — S5
- [ ] fest_day_setlive_recovery_receipt_v1.json filed — S6
- [ ] Moderation: hold T1 until S4; then post fix template

Beginner path: If any box is unchecked, community stays on investigating copy—never promise a fix hour.

Moderation comms templates (hold vs post-fix)

Pair moderation listicle M4 templates:

Hold (before S4):

Thanks for the build label screenshot — we're confirming the live depot matches fest-demo-2027-02-rc2.
Please do not reinstall yet; we'll post when the live branch is verified.

Post-fix (after S4 + S5):

Live depot now serves fest-demo-2027-02-rc2.
Verify footer/credits label matches rc2 after one clean install.
If you still see rc1 after that, reply with a fresh screenshot and appmanifest acf excerpt.

Wrong template (never use):

We pushed a fix — should be live now!

That line without install proof recreates the original failure: BUILD_RECEIPT optimism ahead of player-visible truth.

D3 — re-promote, smoke, receipt (S1–S6)

Gate Pass criterion
S1 Root cause documented (branch_typo / wrong_depot / skipped_dry_run)
S2 New setlive dry-run GREEN
S3 New february_rc_branch_label_receipt_v1.json for rc2 re-latch (do not edit pre-mismatch JSON)
S4 Two clean installs—matching player + BUILD_RECEIPT labels
S5 Wednesday smoke on installed library build
S6 fest_day_setlive_recovery_receipt_v1.json filed; fest_day_setlive_recovery_ok: true

fest_day_setlive_recovery_receipt_v1.json (template)

{
  "schema": "fest_day_setlive_recovery_receipt_v1",
  "fest_window": "2027-02-next-fest-live",
  "fest_day_detected": "D2",
  "generated_at": "2027-02-24T14:30:00Z",
  "root_cause": "skipped_setlive_dry_run_wrong_branch_key",
  "intended_build_label": "fest-demo-2027-02-rc2",
  "observed_player_label_before": "fest-demo-2027-02-rc1",
  "observed_player_label_after": "fest-demo-2027-02-rc2",
  "evidence_paths": {
    "label_mismatch_d1": "release-evidence/steam/setlive-recovery/label-mismatch-d1.txt",
    "dry_run_receipt": "release-evidence/steam/gm_steam_setlive_dry_run_receipt_v1.json",
    "rc_label_receipt": "release-evidence/steam/february_rc_branch_label_receipt_rc2_relatch.json",
    "demo_smoke_receipt": "release-evidence/smoke/demo_smoke_receipt_v1.json"
  },
  "fest_day_setlive_recovery_ok": true
}

BUILD_RECEIPT:

{
  "fest_day_setlive_recovery_ok": true,
  "fest_day_setlive_recovery_receipt": "release-evidence/steam/FEST_DAY_SETLIVE_RECOVERY_RECEIPT.json"
}

verify_fest_day_setlive_recovery.sh

#!/usr/bin/env bash
set -euo pipefail
REC="${1:-release-evidence/steam/FEST_DAY_SETLIVE_RECOVERY_RECEIPT.json}"

jq -e '.schema == "fest_day_setlive_recovery_receipt_v1"' "$REC" || exit 1
jq -e '.observed_player_label_before != .observed_player_label_after' "$REC" || exit 2
jq -e '.observed_player_label_after == .intended_build_label' "$REC" || exit 3
jq -e '.fest_day_setlive_recovery_ok == true' "$REC" || exit 6
echo "fest_day_setlive_recovery verify: OK"

PowerShell verify cousin (Windows facilitators)

$Rec = "release-evidence/steam/FEST_DAY_SETLIVE_RECOVERY_RECEIPT.json"
$j = Get-Content $Rec -Raw | ConvertFrom-Json
if ($j.schema -ne "fest_day_setlive_recovery_receipt_v1") { exit 1 }
if ($j.observed_player_label_before -eq $j.observed_player_label_after) { exit 2 }
if ($j.observed_player_label_after -ne $j.intended_build_label) { exit 3 }
if (-not $j.fest_day_setlive_recovery_ok) { exit 6 }
Write-Host "fest_day_setlive_recovery verify: OK"

Pin beside bash script in release-evidence/steam/README-setlive-recovery.md.

Gate triage — when to run recovery vs other cluster URLs

Symptom First doc Why
Silent menu audio, movement OK LFS case study Pointer stubs—not depot
Save loads wrong slot Save slot case study Persistence keys
Label mismatch live vs BUILD_RECEIPT This URL setlive / depot pointer
Label mismatch pre-upload RC label evening L1–L6 before store
Downloads slow, label correct Forward #6 wall-clock trend Queue telemetry—not promotion

Direct answer for search: If player-visible build_label ≠ BUILD_RECEIPT build_label after a fest-day promote, run D1–D3 here before gameplay HOTFIX.

Integration with live week cluster

Cluster row Role in recovery
#1 timebox Pager cap absorbs D2–D3 repro
#2 funnel Launch rate signal triggers D1
#3 moderation Hold T1 until S4 passes
#4 pager P2 diff should have blocked skip

Comms rule: Moderators post T1 before S4—never “fixed” on BUILD_RECEIPT alone.

Proof table

Row Evidence GREEN when
P1 Player label screenshot (before) Mismatch confirmed
P2 Depot manifest audit JSON S1 root cause
P3 setlive dry-run receipt S2 pass
P4 RC label re-latch JSON S3 pass
P5 Two install label match S4 pass
P6 Recovery receipt + verify script S1–S6 pass

Scenarios A–G

A — Typo rc1 vs rc2 in setlive string
Most common; dry-run S4 catches before production command.

B — Wrong depot ID (DLC depot promoted)
Manifest audit compares depot IDs from upload log.

C — GREEN label receipt but never ran setlive
BUILD_RECEIPT updated optimistically—S1 skipped_setlive.

D — Steam CDN delay vs mismatch
CDN delay: label unchanged but bytes slowly update—hash changes without label change; audit uses manifest hash, not time.

E — Pager P2 ignored
Organizational root cause—add producer waiver ID to receipt notes.

F — HOTFIX without exception list
Pair HOTFIX opinion (blog #10 forward).

G — Recovery on D3 clears funnel
Re-file hour-one row; attach recovery receipt path to funnel notes.

Post-fest debrief questions (S6 attachment)

When filing fest_day_setlive_recovery_receipt_v1.json, answer in notes for Sunday closeout row review forward:

  1. Did P2 diff fire before promote? If no, what waiver ID blocked pager?
  2. Was dry-run skipped for speed or missing staging App ID?
  3. Did moderation post “fixed” before S4? (comms audit)
  4. How many hours from funnel RED to S6 GREEN? (qualitative bucket: under 2h / 2–6h / over 6h)
  5. What engine-specific drift class (branch_typo, wrong_depot, skipped_dry_run)?
  6. Will next RC bump add player_visible_build_label to Thursday diff?

These six questions prevent the team from rewriting history as “CDN weirdness” and give partners an honest promotion narrative.

Prevention checklist (pre–next setlive)

[ ] february_rc_label_ok true for target rcN
[ ] setlive dry-run receipt GREEN (engine-specific)
[ ] Production setlive command matches dry-run branch string byte-for-byte
[ ] BUILD_RECEIPT build_label updated AFTER setlive success log
[ ] Clean install label check (not staging)
[ ] Wednesday smoke on installed build
[ ] Pager P2 diff shows no unexplained build_label change

Pin beside February RC label evening printable card.

Comparison pack (promotion failures)

Failure Symptom Receipt
LFS pointer drift Silent audio git_lfs_pointer_drift_receipt_v1
Save slot mismatch Wrong save loads save slot case study
setlive mismatch Wrong label/binary live fest_day_setlive_recovery_receipt_v1
RC label drift (pre-live) Upload blocked february_rc_branch_label_receipt_v1

Common mistakes

Trusting setlive exit code alone — Exit 0 with wrong branch still fails S4.

Editing old RC label JSON — File new re-latch receipt (S3).

Public “fixed” before install check — Destroys moderation trust.

Smoke on developer machine — S5 requires Steam library install.

Skipping pager P2 — Label drift is early warning.

Related GamineAI reads

Key takeaways

  1. GREEN RC label receipt does not prove live setlive truth—audit installs.
  2. fest_day_setlive_recovery_receipt_v1.json gates S1–S6 for live fest promotion recovery.
  3. D1–D3 timeline — repro, depot audit + dry-run, re-promote + smoke.
  4. Player-visible label must match BUILD_RECEIPT after S4—cousin L4 on RC evening.
  5. setlive dry-run evening is not optional on fest day two.
  6. Pager P2 diff catches drift—do not ignore for speed.
  7. Hour-one funnel launch drop + flat quit → check depot before gameplay hotfix.
  8. File new RC label receipt on re-latch—never edit pre-mismatch JSON.
  9. verify_fest_day_setlive_recovery.sh gives partners one exit code.
  10. Help #38 forward owns fix lane; this owns recovery narrative.
  11. February live-week queue playbook when downloads slow but label matches.
  12. February cluster #6 consumed—Blog-Create #7 co-stream overlay safe-zone art pass next.

FAQ

Is this the same as the RC label evening tutorial?
No—evening owns pre-upload L1–L6; case study owns live fest wrong depot after GREEN.

Can CDN delay mimic this?
CDN delay updates bytes with same label; mismatch shows label divergence—audit both.

Do we need a new RC receipt on recovery?
Yes—S3 re-latch documents post-mismatch promote.

What if gameplay is actually broken on rc2?
This case study ends at promotion truth—gameplay repro is separate pager work.

What ships next in February cluster?
Blog-Create #7 — February fest stream overlay safe-zone art pass when co-stream UI clips build labels.