Publishing & Deployment Issues Jul 13, 2026

February Fest HOTFIX Upload Blocked Without Numbered hotfix_exception_list_ok - How to Fix

Fix February fest live-week HOTFIX blocked without numbered hotfix_exception_list_ok. HOTFIX-00N row, branch and label screenshot, hotfix_exception_list_receipt_v1.json, Wednesday smoke re-run, and BUILD_RECEIPT gate for 2027 Next Fest.

By GamineAI Team

February Fest HOTFIX Upload Blocked Without Numbered hotfix_exception_list_ok - How to Fix

Problem: During February 2027 Steam Next Fest live week (D1–D7), engineering finishes an urgent crash fix, but CI, Thursday row review, or steamcmd promotion scripts refuse setlive because BUILD_RECEIPT hotfix_exception_list_ok is false (or missing). Discord pressure peaks; the binary is ready; the evidence gate is not.

Who is affected now: Godot / Unity / multi-engine teams following HOTFIX exception opinion and the Godot HOTFIX visible label preflight (Guide #41). This is live-week numbered exception truth, not SHIP holiday freeze exceptions, not SteamPipe “queued forever” when the depot is already uploading (Help #14 forward), and not fest-day setlive depot mismatch after RC passed (Help #38 forward / setlive recovery case study).

Fastest safe fix: Add the next HOTFIX-00N row → bump player-visible build_label + capture screenshot → file hotfix_exception_list_receipt_v1.json → run verify_hotfix_exception_list.sh → re-run Wednesday smoke same calendar day → set hotfix_exception_list_ok: true.

Direct answer

Blocked HOTFIX uploads mean the studio tried to promote a mid-fest binary without a monotonic HOTFIX-00N row, matching branch + visible label, and same-day smoke. SteamPipe queue length is irrelevant until those gates pass. Complete the list → receipt → smoke path; do not force setlive by flipping the bool manually.

Why this issue spikes in February 2027 live week

  1. Pager compassion — Teams ship HOTFIX binaries on verbal approval, then CI catches a false GREEN rebuild.
  2. SHIP vs HOTFIX confusionSHIP list rows are archived at D1; live week needs a fresh HOTFIX list.
  3. Label drift — Branch is hotfix3 but player footer still says rc2jq hourly J3 fails.
  4. Smoke skipped — Opinion H3 requires smoke same day as the exception—yesterday’s smoke does not latch.
  5. Seq gaps — HOTFIX-003 filed without HOTFIX-002 → verify script exits non-zero.

Symptoms and search phrases

  • hotfix_exception_list_ok false / CI job verify_hotfix_exception_list fails.
  • “Hotfix ready but setlive blocked.”
  • next_seq mismatch / “skipped HOTFIX number.”
  • Player Discord: “which build am I on?” with no footer string.
  • Staging branch green; fest branch promotion script exits 6 on exception list.
  • Thursday review RED on hotfix_exception_list_ok while binary artifact exists.

Root causes (check in order)

  1. No HOTFIX-00N row — list empty or still pointing at SHIP archive.
  2. Branch name ≠ branch_after on the exception row.
  3. Visible label missing — Project Settings / UI not bumped (Guide #41).
  4. Screenshot path empty — receipt fails H4 honesty.
  5. Smoke not same day — calendar day mismatch vs smoke_same_day.
  6. Seq gap — next integer skipped under Discord pressure.
  7. Bool flipped without verify — theater GREEN; gate still fails in CI.

Beginner path (first 20 minutes)

Prerequisites: Write access to release-evidence/february-live/, HOTFIX opinion template, ability to export a player build, Wednesday smoke runnable.

  1. Open hotfix-exception-list-2027-live.md → add the next HOTFIX-00N line (never skip).
  2. Checkout the HOTFIX branch; bump player-visible version string.
  3. Export player → screenshot footer (Guide #41 for Godot).
  4. Refresh HOTFIX_EXCEPTION_LIST_RECEIPT.json → run verify script.
  5. Run smoke on the HOTFIX binary → promote only when verify exit 0.

Common mistake: Reusing SHIP-00N numbering mid-fest—start HOTFIX at HOTFIX-001 on first live-week binary touch.

Fastest safe fix path

Step 1 — Reserve HOTFIX-00N (H1)

| HOTFIX-004 | D5 | Null ref on Deck resume | yes | yes | fest-demo-2027-02-rc2 | fest-demo-2027-02-hotfix4 | … |

Confirm next_seq in receipt equals that integer:

jq -e '.next_seq == (.exceptions | length) + 1 or .exceptions[-1].id == ("HOTFIX-" + (.exceptions | length | tostring | if length == 1 then "00" + . elif length == 2 then "0" + . else . end))' \
  release-evidence/february-live/HOTFIX_EXCEPTION_LIST_RECEIPT.json

Simpler honesty check:

jq -r '.exceptions[-1].id, .next_seq' release-evidence/february-live/HOTFIX_EXCEPTION_LIST_RECEIPT.json

Step 2 — Branch + label proof (H2–H4)

git branch --show-current | tee release-evidence/february-live/hotfix/BRANCH.txt
# After export: screenshot player-visible label
test -f release-evidence/february-live/hotfix/HOTFIX-004_label_capture.png

Godot: follow Guide #41 H3–H4—Config version and on-screen Label must match build_label_after.

Step 3 — Refresh hotfix_exception_list_receipt_v1.json (H6)

Minimum fields (align with HOTFIX opinion template):

{
  "schema": "hotfix_exception_list_receipt_v1",
  "fest_window": "2027-02-next-fest-live",
  "next_seq": 5,
  "exceptions": [
    {
      "id": "HOTFIX-004",
      "fest_day": "D5",
      "scope": "Null ref on Deck resume",
      "build_label_before": "fest-demo-2027-02-rc2",
      "build_label_after": "fest-demo-2027-02-hotfix4",
      "branch_after": "fest-demo-2027-02-hotfix4",
      "label_screenshot": "release-evidence/february-live/hotfix/HOTFIX-004_label_capture.png",
      "smoke_same_day": true,
      "producer_signoff": "pager-oncall"
    }
  ],
  "hotfix_exception_list_ok": false
}

Leave hotfix_exception_list_ok false until Steps 4–5 pass.

Step 4 — Verify script (fail-closed)

./scripts/verify_hotfix_exception_list.sh \
  release-evidence/february-live/HOTFIX_EXCEPTION_LIST_RECEIPT.json

Pass: prints hotfix_exception_list verify: OK (exit 0).
Fail seq / screenshot / schema: fix receipt—do not edit BUILD_RECEIPT alone.

Step 5 — Same-day smoke + latch bool (H5–H6)

  1. Run Wednesday smoke on the HOTFIX export.
  2. Set "smoke_same_day": true with today’s UTC date in smoke receipt path.
  3. Flip receipt + BUILD_RECEIPT:
"hotfix_exception_list_ok": true,
"hotfix_exception_count": 4,
"hotfix_exception_list_receipt": "release-evidence/february-live/HOTFIX_EXCEPTION_LIST_RECEIPT.json"
  1. Re-run verify → exit 0 → unlock setlive / SteamPipe promotion job.

Verification

Check Pass when
Seq Last id is next integer; no gaps
Branch git branch matches branch_after
Label Screenshot shows build_label_after
Verify script Exit 0
Smoke Same UTC day as exception
BUILD_RECEIPT hotfix_exception_list_ok: true
Hourly ops jq J3 hotfix_id matches row

Alternative fixes (edge cases)

Branch A — CI green, Thursday still RED

Local verify passed with a laptop path; CI runner missing screenshot file. Commit evidence under release-evidence/ or store artifact URL both environments can read.

Branch B — Feature disguised as HOTFIX

If scope is a new mode/UI, do not mint HOTFIX-00N—route to post-fest defer (HOTFIX opinion). Gate stays RED intentionally.

Branch C — SHIP list still in active path

Archive SHIP at D1. Point CI at hotfix-exception-list-2027-live.md only. Mixing lists causes schema / fest_window fails.

Branch D — Godot label blank in export only

Editor Play shows version; Steam players do not—re-export after Config change (Guide #41).

Branch E — Upload already queued, exception late

If SteamPipe already ingested a bad build, complete this help and follow setlive mismatch recovery (Help #38 forward)—do not treat queue wait as the root cause.

Prevention

  • Keep a blank HOTFIX template in facilitator README before D1.
  • Run Guide #41 (or engine cousin) on every live-week binary touch.
  • Wire verify_hotfix_exception_list.sh as a required check before setlive jobs.
  • Pair nightly pager challenge with HOTFIX count diff.
  • Archive HOTFIX list at Sunday closeout; March uses MERGE exceptions.

Related problems

FAQ

Can we set hotfix_exception_list_ok true to ship tonight?
No—verify script must exit 0 with real HOTFIX-00N + smoke evidence.

Is this the same as SHIP exceptions?
No—SHIP is holiday freeze; HOTFIX is live week D1–D7 only.

Do Unity teams need Guide #41?
Guide #41 is Godot-shaped; the same H1–H6 receipt fields apply—swap engine paint steps for your footer / Application.version.

What if Discord demands a fix with no time for smoke?
Document a waiver line with producer sign-off and still file HOTFIX-00N + label screenshot; smoke incomplete = keep setlive_allowed false.

Bookmark this page for live-week promotion nights. Share it with your on-call pair if a crash fix is waiting on SteamPipe.


Live-week HOTFIX uploads stay blocked until HOTFIX-00N, visible label, same-day smoke, and verify exit 0—then flip hotfix_exception_list_ok and promote.