Publishing & Deployment Issues Aug 13, 2026

Itch Steam Dual-Depot Dress Rehearsal Channel Label Mismatch - How to Fix

Fix dual_sku_rehearsal_ok false when itch and Steam channel_label_match drifts. Shared build_label writer, dual_sku_dress_rehearsal_receipt_v1, BUILD_RECEIPT for October 2026 upload peak.

By GamineAI Team

Itch Steam Dual-Depot Dress Rehearsal Channel Label Mismatch - How to Fix

Problem: During October 2026 upload peak (and September dress rehearsals), itch HTML5 shows 2026-09-11-rc02 while Steam demo HUD / description still says 2026-09-04-rc01, so channel_label_match is false, verify_dual_sku_dress_rehearsal.sh fails, and dual_sku_rehearsal_ok stays false even though both uploads “succeeded.”

Who is affected now: Micro-studios shipping itch + Steam fest demos after dual-depot evening and Godot dual-depot Guide #50. This is recovery after label drift, not triple HTML5 channel_label_match (itch+GX+Steam), not wishlist-split recovery (discovery after GREEN bytes), and not VDF LF parse failures.

Fastest safe fix: Freeze promotions → pick one candidate build_id / build_label → rewrite shared VERSION / HUD source → re-export itch Web + Steam desktop → Butler + Steamworks upload → dual smoke screenshots → rewrite dual_sku_dress_rehearsal_receipt_v1.json with channel_label_match: true → latch dual_sku_rehearsal_ok.

Direct answer

Dual-SKU label mismatch means the two storefronts no longer advertise the same player-visible token. Fix the shared label writer, re-ship both channels from the same git SHA, then re-prove D3–D6—do not flip dual_sku_rehearsal_ok because Butler and steamcmd both exited 0.

Why this issue spikes before October upload peak

  1. Separate CI stamps — itch job uses GITHUB_SHA short; Steam job uses calendar rcNN from another workflow.
  2. Itch-only mid-week push — marketing repushes HTML5 without Steam re-export.
  3. HUD painted on Steam only — Project Settings version updated; Web export preset still embeds old string.
  4. Store copy drift — Steam description edited by hand; itch page notes ignored.
  5. GREEN rehearsal went stale — Thursday row review still shows last week’s channel_label_match: true after a Tuesday itch-only upload.

Symptoms and search phrases

  • “dual_sku_rehearsal_ok false channel_label_match”
  • itch HTML5 build label different from Steam demo
  • verify_dual_sku_dress_rehearsal.sh fails after Butler push
  • Thursday BUILD_RECEIPT R6 RED dual SKU
  • Godot Web export version ≠ Windows depot footer
  • October Next Fest itch and Steam not the same build

Root causes (check in order)

  1. Two label writers — no single build_label source for Web + desktop presets.
  2. D1 violated — rehearsal spans two build_id values silently.
  3. D3 skipped — receipt flipped without HUD / store token table.
  4. D4/D5 stale — Butler version new; Steam buildid old (or reverse).
  5. Wrong cousin — treating triple-HTML5 help as dual itch+Steam only.
  6. Intentional scope gap — feature parity differs but version token should still match (visible build label opinion).

Beginner path (first 30 minutes)

Prerequisites: itch page + Steam demo depot access, Godot (or your engine) dual export presets, jq, write access to release-evidence/dual-sku/, Guide #50 open.

  1. Prove the failure:
REC="release-evidence/dual-sku/*/DUAL_SKU_DRESS_REHEARSAL_RECEIPT.json"
jq -e '.channel_label_match == true and .dual_sku_rehearsal_ok == true' $REC
# expect fail

Screenshot itch page / in-game HUD and Steam demo HUD — write both tokens on a sticky note.

  1. Choose one recovery build_label (usually today’s candidate, e.g. 2026-09-18-rc03). Update Project Settings / VERSION file / HUD Label from one source both presets read.

  2. Re-export Web and Windows Desktop (or Linux) from the same git commit. Do not reuse yesterday’s Steam zip with today’s itch WASM.

  3. Push itch (Butler) and Steam depot; record Butler status + Steamworks buildid under release-evidence/dual-sku/<label>/.

  4. Dual smoke on installed paths (private window itch + Steam client) → smoke/itch_menu.png + smoke/steam_menu.png showing the same token.

  5. Rewrite receipt + BUILD_RECEIPT (below). Do not promote October fest while tokens disagree.

Developer path (recovery gates)

Step Action Pass when
R1 Confirm dual itch+Steam lane (not triple HTML5 / not wishlist case) Correct cousin
R2 Lock one build_id + shared label writer Single source for both presets
R3 Re-export + re-upload both channels Butler + Steam bytes from same SHA
R4 Dual smoke screenshots Identical player-visible token
R5 Rewrite dual_sku_dress_rehearsal_receipt_v1 channel_label_match: true
R6 Latch BUILD_RECEIPT + verify script dual_sku_rehearsal_ok: true

R1 — Pick the correct cousin

Symptom Lane
itch + GX + Steam three channels Triple HTML5 channel_label_match help
Bytes GREEN, wishlists still split Wishlist-split case study
steamcmd VDF parse / CRLF VDF LF Guide
itch WASM stale after Butler itch WASM MIME help
Labels disagree on itch + Steam only This article (R2–R6)

R2 — Shared label writer (Godot sketch)

# autoload or boot HUD — both Web and desktop read the same constant/file
const BUILD_LABEL := "2026-09-18-rc03"

Also set Project Settings → Application → Config/Version to the same string. Export presets must not override with divergent custom features unless documented as EXC-00N.

R5 — Receipt rewrite

{
  "schema": "dual_sku_dress_rehearsal_receipt_v1",
  "rehearsal_label": "october-next-fest-2026-dual-sku",
  "locked_utc": "2026-09-18T19:30:00Z",
  "build_id": "2026-09-18-rc03",
  "build_label": "2026-09-18-rc03",
  "git_commit": "abc123def",
  "channel_label_match": true,
  "recovery": {
    "reason": "itch-only mid-week push drifted Steam label",
    "previous_itch_label": "2026-09-11-rc02",
    "previous_steam_label": "2026-09-04-rc01",
    "recovered_utc": "2026-09-18T19:30:00Z"
  },
  "proof": {
    "butler_status_path": "release-evidence/dual-sku/october-next-fest-2026-dual-sku/butler_html5.txt",
    "steam_buildid_path": "release-evidence/dual-sku/october-next-fest-2026-dual-sku/steam_buildid.txt",
    "smoke_dir": "release-evidence/dual-sku/october-next-fest-2026-dual-sku/smoke"
  },
  "gates": {
    "D1_build_id": "pass",
    "D2_channels": "pass",
    "D3_label_match": "pass",
    "D4_byte_proof": "pass",
    "D5_dual_smoke": "pass",
    "D6_receipt": "pass"
  },
  "dual_sku_rehearsal_ok": true
}

R6 — BUILD_RECEIPT + verify

{
  "dual_sku_rehearsal_ok": true,
  "channel_label_match": true,
  "dual_sku_dress_rehearsal_receipt": "release-evidence/dual-sku/october-next-fest-2026-dual-sku/DUAL_SKU_DRESS_REHEARSAL_RECEIPT.json"
}
./scripts/verify_dual_sku_dress_rehearsal.sh \
  release-evidence/dual-sku/october-next-fest-2026-dual-sku/DUAL_SKU_DRESS_REHEARSAL_RECEIPT.json

Verify

  • itch private-window menu and Steam client menu show the same build_label.
  • jq -e '.channel_label_match == true' on the recovery receipt.
  • jq -e '.dual_sku_rehearsal_ok == true' on BUILD_RECEIPT.
  • Thursday row review R6 no longer RED for this candidate.

Prevent

  1. One shared label writer for itch + Steam export jobs (Guide #50 D3).
  2. Re-run D1–D6 after any mid-week single-channel upload.
  3. Pair prevention with dual-depot evening before October peak.
  4. Keep visible build label discipline on both surfaces.

Related GamineAI reads


October peak is the wrong week to learn itch and Steam advertised different builds—normalize one build_label, re-export both channels, dual-smoke, rewrite dual_sku_dress_rehearsal_receipt_v1, then latch dual_sku_rehearsal_ok only when channel_label_match is honestly true.