Opinion & Hot Takes Jul 12, 2026

Stop Hotfixing Fest Demos During Live Week Without a Numbered HOTFIX Exception List - 2026 Opinion

2026 Opinion—stop hotfixing fest demos during live week without a numbered HOTFIX exception list; hotfix_exception_list_receipt_v1.json, gates H1–H6, BUILD_RECEIPT hotfix_exception_list_ok, Wednesday smoke pairing.

By GamineAI Team

Stop Hotfixing Fest Demos During Live Week Without a Numbered HOTFIX Exception List - 2026 Opinion

Pixel-art hero for stop hotfixing fest demos during live week without numbered HOTFIX exception list opinion 2026

February fest D4 hour ten: #playtest wants a crash fix tonight. Pager already ran P2 diff. Refund spike worksheet hit SR4 RED. Someone merges to setlive because "players are leaving"—without a number, without Wednesday smoke, without updating jq hourly J3 build_label policy.

February 2027 live week is when compassionate hotfixes destroy the evidence trail you built in January. SHIP exception opinion disciplined holiday freeze → re-entry. Live fest needs a cousin list with different stakes: every mid-week binary promotion during D1–D7 must appear as the next integer in hotfix_exception_list_receipt_v1.json—not Slack heroics, not moderator promises, not "we'll file the receipt after the stream."

This Opinion & Hot Takes piece makes a narrow claim: during February Next Fest live week, no setlive or player-visible depot promotion happens unless the change is HOTFIX-00N with same-day smoke, label bump, and pager producer sign-off—refuse merges that skip the next number even when refunds are RED.

Non-repetition note: SHIP exception list owns holiday freeze O1–O6 and January baseline. Visible build label opinion owns player-facing label policy. Refund spike worksheet owns daily % thresholds SR1–SR5. Setlive case study owns recovery after mismatch. This URL owns numbered HOTFIX exception list + H1–H6 gates when live-week promotion pressure peaks.

Pair Wednesday smoke ritual, 5-night pager challenge, February live week timebox, and hour-one funnel.

Why this matters now (February 2027 live week)

  1. #playtest velocity — Live fest threads reward visible action; unreceipted hotfixes feel moral even when they poison BUILD_RECEIPT rows.
  2. Refund SR4 couplingRefund worksheet SR4 blocks HOTFIX without exception ID—this opinion supplies the ID format.
  3. jq J3 policy — Hourly receipt routes build_label drift to setlive case study unless hotfix_id exists in notes.
  4. Moderator false promisesModeration listicle scripts need HOTFIX-00N language—not "fixing tonight" without seq.
  5. Sunday closeout — Forward #11 debrief counts hotfixes; unnumbered merges become partner folklore.

Direct answer: Maintain hotfix-exception-list-2027-live.md with monotonic HOTFIX-001…N, file hotfix_exception_list_receipt_v1.json, set BUILD_RECEIPT hotfix_exception_list_ok: true, run Wednesday smoke same calendar day any exception touches player binaries—refuse setlive that skips the next number.

The opinion in one paragraph

Live fest is not a hackathon with a Steam page. If you promote a binary during D1–D7 without incrementing a numbered HOTFIX exception, you did not save the demo—you created a second fest inside the first: new bits, old receipts, moderators quoting fixes that jq cannot find, and finance reading refund spikes you cannot correlate to build_label. Micro-studios cannot afford two fests in one week. Numbered HOTFIX lists are the minimum correlation layer between pager nights, community tone, and the smoke ritual you already claim to respect. Verbal "we're hotfixing" is how teams ship four builds in forty-eight hours while telling partners the label never moved.

Who this opinion is for

Audience Why read
Solo founder in #fest-live-ops Copy-paste "next HOTFIX number or no setlive"
Producer on pager nights Block promote until list matches smoke + label
Engineer Wire verify_hotfix_exception_list.sh before CI setlive
Community manager Replace "fixing soon" with seq row or defer language

SHIP vs HOTFIX — format ladder

List Window Schema Primary gate
SHIP exception Dec freeze → Jan re-entry ship_exception_list_receipt_v1 O1–O6
HOTFIX exception Feb live D1–D7 hotfix_exception_list_receipt_v1 H1–H6
Refund SR4 Daily mornings february_refund_spike_receipt_v1 R1–R6
jq hourly J3 Each hour february_fest_live_ops_receipt_v1 J1–J6

Rule: SHIP rows do not substitute for HOTFIX rows after live week starts—archive SHIP list before D1; start HOTFIX list at HOTFIX-001 on first live-week binary touch.

Beginner path — numbered list in 25 minutes

Copy into release-evidence/february-live/hotfix-exception-list-2027-live.md:

# Numbered HOTFIX exception list (February 2027 live week)
fest_window: 2027-02-next-fest-live
list_owner: producer
next_seq: 2
live_week_start: D1

| Seq | Fest day | Summary | P0? | Touches binary? | build_label_before | build_label_after | Smoke same day? | Pager night | Owner |
|-----|----------|---------|-----|-----------------|--------------------|--------------------|-----------------|-------------|-------|
| HOTFIX-001 | D2 | Menu null ref crash | yes | yes | fest-demo-2027-02-rc2 | fest-demo-2027-02-hotfix1 | yes | N2 | engineering |
| HOTFIX-002 | (reserved) | — | — | — | — | — | — | — | — |

Beginner rules:

  1. Next setlive must be next_seq—no HOTFIX-003 before HOTFIX-002 exists.
  2. Binary touch ⇒ smoke same day—cousin Wednesday smoke, compressed to fifteen minutes.
  3. build_label_after must update when players receive new bits—pair visible label opinion.
  4. Feature scope ⇒ DEFER—live week HOTFIX list is P0/P1 only; new modes belong in post-fest defer, not HOTFIX-00N theater.

Success check: Moderator can cite HOTFIX-001 in a player reply without asking engineering "did we ship?"

Developer path — gates H1–H6

Gate Check Fail action
H1 exceptions[] seq integers 1..N contiguous Fix gaps before setlive
H2 next_seq == N+1 in markdown matches JSON Sync list + receipt
H3 touches_binary: truesmoke_receipt_path same calendar day Block setlive
H4 Last build_label_after matches BUILD_RECEIPT build_label Fix label lineage
H5 fest_day on last exception ∈ D1–D7 Reject post-fest rows here
H6 hotfix_exception_list_ok: true + producer sign-off path Fail jq bundle

hotfix_exception_list_receipt_v1.json (template)

{
  "schema": "hotfix_exception_list_receipt_v1",
  "fest_window": "2027-02-next-fest-live",
  "generated_at": "2027-02-24T22:00:00Z",
  "next_seq": 2,
  "exceptions": [
    {
      "seq": 1,
      "id": "HOTFIX-001",
      "fest_day": "D2",
      "date": "2027-02-23",
      "summary": "Menu null ref crash on Deck",
      "p0": true,
      "touches_binary": true,
      "build_label_before": "fest-demo-2027-02-rc2",
      "build_label_after": "fest-demo-2027-02-hotfix1",
      "smoke_required": true,
      "smoke_receipt_path": "release-evidence/smoke/HOTFIX_001_SMOKE.json",
      "pager_night": "N2",
      "producer_signoff_path": "release-evidence/february-live/PAGER_N2_SIGNOFF.json",
      "owner": "engineering",
      "refund_spike_status_at_file": "YELLOW",
      "jq_hourly_receipt_path": "release-evidence/february-live/FEBRUARY_LIVE_OPS_RECEIPT_2200.json"
    }
  ],
  "pointers": {
    "february_live_timebox": "release-evidence/ops/FEBRUARY_LIVE_TIMEBOX_RECEIPT.json",
    "refund_spike_latest": "release-evidence/february-live/FEBRUARY_REFUND_SPIKE_RECEIPT_LATEST.json"
  },
  "gates": {
    "H1": "pass",
    "H2": "pass",
    "H3": "pass",
    "H4": "pass",
    "H5": "pass",
    "H6": "pass"
  },
  "hotfix_exception_list_ok": true
}

Store canonical copy at release-evidence/february-live/HOTFIX_EXCEPTION_LIST_RECEIPT.json.

BUILD_RECEIPT row

{
  "hotfix_exception_list_ok": true,
  "hotfix_exception_count": 1,
  "hotfix_exception_list_receipt": "release-evidence/february-live/HOTFIX_EXCEPTION_LIST_RECEIPT.json",
  "build_label": "fest-demo-2027-02-hotfix1",
  "refund_spike_watch_ok": true
}

Fail-closed: If hotfix_exception_countexceptions[].length or last build_label_afterbuild_label, setlive gate fails.

verify_hotfix_exception_list.sh

#!/usr/bin/env bash
set -euo pipefail
LIST="${1:-release-evidence/february-live/HOTFIX_EXCEPTION_LIST_RECEIPT.json}"
BR="${2:-BUILD_RECEIPT.json}"

jq -e '.schema == "hotfix_exception_list_receipt_v1"' "$LIST" || exit 1

COUNT=$(jq '.exceptions | length' "$LIST")
for i in $(seq 1 "$COUNT"); do
  ACT=$(jq -r --argjson n "$i" '.exceptions[] | select(.seq == $n) | .seq' "$LIST")
  [[ "$ACT" == "$i" ]] || { echo "H1 fail: missing seq $i"; exit 2; }
done

jq -e '
  [.exceptions[] | select(.touches_binary == true)
    | .smoke_receipt_path] | all(. != null and . != "")
' "$LIST" || { echo "H3 fail: binary touch without smoke"; exit 3; }

LAST=$(jq -r '.exceptions[-1].build_label_after' "$LIST")
BL=$(jq -r '.build_label' "$BR")
[[ "$LAST" == "$BL" ]] || { echo "H4 fail: label mismatch"; exit 4; }

FD=$(jq -r '.exceptions[-1].fest_day' "$LIST")
[[ "$FD" =~ ^D[1-7]$ ]] || { echo "H5 fail: fest_day"; exit 5; }

jq -e '.hotfix_exception_list_ok == true' "$LIST" || exit 6
echo "hotfix_exception_list verify: OK"

Exit codes: 1 schema, 2 H1 gaps, 3 H3 smoke, 4 H4 label, 5 H5 fest_day, 6 H6 latch.

Hotfix theater vs honest HOTFIX exception

Behavior Theater Honest exception
"Quick setlive tonight" No HOTFIX row HOTFIX-00N filed same day
"Smoke tomorrow" H3 ignored smoke_receipt_path exists
Label unchanged after hotfix jq J3 fail build_label_after bumps
CM promises fix in thread Informal Seq cited in reply
Three bugs one merge One vague row Three seq rows or explicit scope hash
Ship new boss phase Feature creep DEFER post-fest—not HOTFIX

Producer script for #fest-live-ops:

Live week binary changes need the next HOTFIX-00N in hotfix-exception-list-2027-live.md, same-day smoke, build_label bump, and pager producer sign-off. Refund RED triggers SR4—exception row required before setlive. Feature ideas go to post-fest defer—not HOTFIX.

Integration with February cluster #1–#9

Row HOTFIX list coupling
#1 timebox D4 engineering cap—each HOTFIX notes estimated_engineering_h
#2 funnel File refund_spike_status_at_file on exception row
#4 pager pager_night + producer_signoff_path on each HOTFIX
#5 setlive case study Recovery when H4 fails after unnumbered setlive
#8 jq hourly J3 hotfix_id must match HOTFIX-00N
#9 refund SR4 names exception before promote on RED

Wednesday smoke coupling (live-week compression)

Pre-fest Wednesday smoke owns branch promotion ritual. During live week, each HOTFIX reuses the same fifteen-minute script—not a shortened "we already smoked this fest."

Smoke element HOTFIX requirement
Installed binary Fresh build from build_label_after
Menu boot Pass before setlive
Demo scope spot-check No new features smuggled in HOTFIX
Receipt path HOTFIX_00N_SMOKE.json same date as exception

Working dev: Template smoke JSON from Wednesday ritual—swap ritual_type: "live_week_hotfix" in notes.

jq gate sketch (CI + hourly crosswalk)

# H1 + latch
jq -e '
  .hotfix_exception_list_ok == true
  and (.exceptions | length) == (.exceptions | map(.seq) | max)
' release-evidence/february-live/HOTFIX_EXCEPTION_LIST_RECEIPT.json

# J3 coupling — hotfix_id must exist on label change hour
jq -e '
  .row_diff[] | select(.field=="build_label" and .after != .before)
  | .notes.hotfix_id
' release-evidence/february-live/FEBRUARY_LIVE_OPS_RECEIPT_LATEST.json

Run after verify_february_live_ops.sh when build_label row changes.

Proof table

Row Evidence GREEN when
P1 HOTFIX_EXCEPTION_LIST_RECEIPT.json H1–H6 pass
P2 Per-HOTFIX smoke JSON Same calendar date
P3 BUILD_RECEIPT build_label Matches last build_label_after
P4 Pager night sign-off JSON Producer path on row
P5 Visible label screenshot Matches BUILD_RECEIPT
P6 jq hourly receipt hotfix_id on label change

Scenarios A–G

A — Zero HOTFIXs (stable fest)
exceptions: [], next_seq: 1. Any setlive during D1–D7 without HOTFIX-001 is H6 fail.

B — One P0 crash D2
HOTFIX-001 only. Label hotfix1. Moderator reply links seq. jq J3 pass with hotfix_id: HOTFIX-001.

C — Refund RED D4 + engineer panic
SR4 requires exception before setlive—even when refunds scream.

D — "Config only" that moves depot
touches_binary: true—players download new bits. HOTFIX row required.

E — Stream overlay layout HOTFIX
If only 1920×1080 assets change without depot, not HOTFIX—re-run overlay O2–O4. If depot changes, HOTFIX row.

F — Two HOTFIXs same night
HOTFIX-002 and HOTFIX-003 sequential—no batch row unless scope hash documented.

G — D7 hotfix request
Allowed with HOTFIX-00N—but triggers Sunday closeout #11 forward annex requirement.

Engine-specific notes (working dev)

Engine setlive touch signal Label field
Unity Player build hash changes BUILD_LABEL env
Godot Export preset output changes config/version
Unreal Staged build folder changes PROJECT_VERSION
GameMaker YYZ changes GM_BUILD_LABEL per setlive evening
Ren'Py Bundle changes config.version

Rule: New depot ID ⇒ HOTFIX row—even for "one script."

PowerShell verify cousin

$List = "release-evidence/february-live/HOTFIX_EXCEPTION_LIST_RECEIPT.json"
$Br = "BUILD_RECEIPT.json"
$j = Get-Content $List -Raw | ConvertFrom-Json
$build = Get-Content $Br -Raw | ConvertFrom-Json
if ($j.schema -ne "hotfix_exception_list_receipt_v1") { exit 1 }
if (-not $j.hotfix_exception_list_ok) { exit 6 }
if ($j.exceptions[-1].build_label_after -ne $build.build_label) { exit 4 }
Write-Host "hotfix_exception_list verify: OK"

Git tag pairing (optional)

Tag hotfix-001-20270223 at the exception merge commit. Partners browsing Git without opening release-evidence/ still see promotion anchors—tags supplement JSON, never replace receipts.

Moderation template coupling

Moderation listicle scripts should include three reply classes:

Player ask Approved reply pattern
"When fix?" "Tracked under HOTFIX-00N—smoke gate pending" OR honest defer
"Broken on Deck" Escalate pager—do not promise HOTFIX without seq
"Add co-op?" Defer post-fest—not HOTFIX scope

CM policy: Only producer assigns next next_seq—moderator empathy is not H6-compliant approval.

Live-week enforcement calendar

Fest day Policy emphasis
D1 List starts next_seq: 1; zero unnumbered setlive
D2–D3 Peak #playtest pressure—H6 strict
D4 Refund lag + SR4 coupling—producer owns sign-off
D5–D6 Limit to P0—reject feature HOTFIX theater
D7 Last HOTFIX needs closeout pointer—forward #11

Counterarguments (and rebuttals)

"Numbered lists slow live fixes."
HOTFIX-001 takes five minutes—setlive case study recovery takes five hours.

"Pager already approved it."
Pager owns ritual; HOTFIX list owns binary promotion audit trail.

"SHIP list covered January."
SHIP closes at D1—live week needs fresh HOTFIX-001 lineage from RC label.

"Players demand fixes—we'll lose wishlists."
Unnumbered hotfixes lose refund correlation and partner trust—worse than waiting one smoke cycle.

"Exceptions look incompetent."
Incompetent is four mystery builds—numbered lists show discipline under pressure.

Printable producer card

# HOTFIX gate (pin near setlive)

1. Next HOTFIX-00N reserved in markdown?
2. P0 scope only—features → defer
3. Smoke same day → receipt path
4. build_label_after bumped + visible label
5. verify_hotfix_exception_list.sh → exit 0
6. Refund RED? SR4 satisfied
7. jq hourly J3 hotfix_id matches
8. Pager producer sign-off attached

Related GamineAI reads

Key takeaways

  1. Live fest D1–D7 needs numbered HOTFIX exceptions—not verbal pager heroics.
  2. hotfix_exception_list_receipt_v1.json gates H1–H6 with same-day smoke on binary touch.
  3. HOTFIX-001…N is a fresh list at live week—cousin to SHIP, not a continuation.
  4. Refund SR4 requires exception ID before setlive on RED.
  5. jq J3 hotfix_id must match HOTFIX-00N.
  6. BUILD_RECEIPT hotfix_exception_list_ok latches before live-week setlive GREEN.
  7. Wednesday smoke compresses to per-HOTFIX fifteen-minute ritual.
  8. Pager P2 diff cousins each HOTFIX build_label row.
  9. Sunday closeout C4 annexes HOTFIX count for partners—#11 consumed.
  10. Feature scope during live week belongs in defer—not HOTFIX theater.
  11. Moderators cite seq in replies—or defer without promising binaries.
  12. February cluster #12 published—same-day Whisper live-week triage closes February cluster #1–#12.

FAQ

Is this the same as the SHIP exception list?
No—SHIP owns holiday freeze; HOTFIX owns February live week D1–D7.

Can we reuse SHIP-003 as HOTFIX-001?
No—start HOTFIX list fresh from RC build_label at D1.

Does every Discord bug need HOTFIX?
Only binary promotions—investigate first; comms-only fixes skip the list.

What if smoke fails on HOTFIX-002?
Do not setlive; file rollback row or mark exception status: rolled_back in notes.

What ships next in February cluster?
Blog-Create #11 — Sunday February fest closeout BUILD_RECEIPT row review.

Closing

Live fest pressure will always outrun your documentation instinct—that is why the list exists. One HOTFIX integer, one smoke receipt, and H1–H6 turn #playtest noise into BUILD_RECEIPT truth—beginners copy the markdown table, working devs wire verify + jq J3, producers get a line they can refuse in public without sounding cruel.