Lesson 280: Unity February Fest Live-Ops Hourly jsonl Receipt on BUILD_RECEIPT (2026)
Direct answer: Before February 2027 live-week stand-up declares GREEN, complete J1–J6—export FEBRUARY_LIVE_OPS_RECEIPT_LATEST.json from Unity smoke (Application.version → build_label), recompute honest row_diff[], run verify_february_live_ops.sh, append february_fest_live_ops_hourly_log.jsonl—then promote BUILD_RECEIPT february_fest_live_ops_hourly_ok: true. Pair Unity hourly jsonl append preflight (Guide #40), jq hourly row-diff sketch, Thursday row review, and hourly missing build_label help.

Why this matters now (February 2027 live week hour three)
February 2027 D3 hour three: HOTFIX bumps Unity Application.version, Addressables catalog hash drifts, and facilitators still paste Slack screenshots into #fest-live-ops. Thursday row review is weekly—it will not catch 14:00 → 15:00 funnel slip. jq sketch owns strategy + one-liners; Guide #40 owns the ninety-second append ritual—280 latches both on BUILD_RECEIPT so CI refuses “stand-up GREEN” without a verified jsonl line.
Lesson 279 proved HOTFIX identity players can quote; 280 proves hourly ops continuity so Sunday closeout is not Discord archaeology.
Promotion order on BUILD_RECEIPT: Unity smoke files root receipt → february_fest_live_ops_hourly_ok (this lesson) → stand-up post → Sunday closeout consumes jsonl.
Beginner path (Unity export → verify → append → promote)
| Step | Action | Success check |
|---|---|---|
| 1 | Smoke Unity player; copy label fields | J1–J2 skeleton |
| 2 | Fill build_label from Application.version |
J3 |
| 3 | Recompute row_diff[] vs prior hour |
J5 |
| 4 | Run verify_february_live_ops.sh |
exit 0 |
| 5 | Append jsonl via append_february_live_ops_hour.sh |
New line |
| 6 | Promote BUILD_RECEIPT | february_fest_live_ops_hourly_ok: true |
Time: ~45 minutes first fest day; ~3 minutes per hour when Guide #40 scripts exist.
Common mistake: Appending before verify—jsonl grows with theater lines that Sunday closeout cannot trust.
Developer path (gates J1–J6)
| Gate | Check | Fail when |
|---|---|---|
| J1 | Schema + fest window | Wrong / March sprint schema |
| J2 | fest_day + hour_utc |
Clock mismatch / missing prior |
| J3 | Unity build_label policy |
Empty, dev, or unlabeled HOTFIX |
| J4 | Cluster snapshot paths | Missing funnel/queue/overlay files |
| J5 | Honest row_diff[] |
Hand-waved zeros |
| J6 | Verify + jsonl latch | Script exit ≠ 0 / no append |
Cousin receipt crosswalk
| Field | jq blog | Guide #40 | This lesson (280) |
|---|---|---|---|
| Schema | february_fest_live_ops_receipt_v1 |
Same + Unity paint | Same + BUILD_RECEIPT column |
| Scope | Strategy + copy-paste jq | Unity export → append | Milestone latch for CI |
| BUILD_RECEIPT | Documents february_fest_live_ops_hourly_ok |
Engine ritual | february_fest_live_ops_hourly_ok |
| Path | …/FEBRUARY_LIVE_OPS_RECEIPT_LATEST.json |
+ hourly_log.jsonl |
Crosswalk both in cousin_receipts |
Do not merge with March weekly march_post_fest_sprint (Guide #46 / Lesson 287 forward)—different schema and cadence.
J1–J2 — write FEBRUARY_LIVE_OPS_RECEIPT_LATEST.json
release-evidence/february-live/FEBRUARY_LIVE_OPS_RECEIPT_LATEST.json
Minimum skeleton:
{
"schema": "february_fest_live_ops_receipt_v1",
"fest_window": "2027-02-next-fest-live",
"fest_day": "D3",
"hour_utc": "2027-02-18T18:00:00Z",
"build_label": "february-fest-2027-live-rc2",
"snapshot": {
"hour_one_launch_rate": 0.38,
"february_live_queue_wall_clock_ok": true,
"fest_stream_overlay_safe_zone_ok": true,
"wednesday_smoke_ok": true
},
"row_diff": [],
"february_fest_live_ops_hourly_ok": false
}
Unity Editor convenience (optional):
// Tools → Fest → Log Build Label For Hourly Receipt
Debug.Log($"build_label={Application.version}+{GitSha}");
J3 — Unity build_label before append
BL=$(jq -r '.build_label' release-evidence/february-live/FEBRUARY_LIVE_OPS_RECEIPT_LATEST.json)
test -n "$BL" && [[ "$BL" != *dev* ]]
Label must match player footer / visible build label. If HOTFIX changed the binary, crosswalk Lesson 279 / HOTFIX list—swap Godot Config for Unity Application.version.
J4–J5 — snapshot paths + row_diff honesty
Use jq blog one-liners against the prior jsonl hour. Empty row_diff is allowed only when prior hour is identical—document delta: 0 / unchanged, do not omit the array.
PRIOR=$(tail -n 1 release-evidence/february-live/february_fest_live_ops_hourly_log.jsonl)
jq -e '.row_diff | type == "array"' release-evidence/february-live/FEBRUARY_LIVE_OPS_RECEIPT_LATEST.json
J6 — verify, append, promote BUILD_RECEIPT
Pin from Guide #40:
./scripts/verify_february_live_ops.sh \
release-evidence/february-live/FEBRUARY_LIVE_OPS_RECEIPT_LATEST.json
./scripts/append_february_live_ops_hour.sh
Then latch root:
{
"february_fest_live_ops_hourly_ok": true,
"cousin_receipts": {
"february_live_ops_latest": "release-evidence/february-live/FEBRUARY_LIVE_OPS_RECEIPT_LATEST.json",
"february_live_ops_hourly_log": "release-evidence/february-live/february_fest_live_ops_hourly_log.jsonl",
"unity_hourly_append_guide": "guides/unity#unity-february-fest-live-ops-hourly-build-receipt-jsonl-append-preflight-2026-preflight"
}
}
Fail-closed:
jq -e '.february_fest_live_ops_hourly_ok == true' release-evidence/BUILD_RECEIPT.json
wc -l release-evidence/february-live/february_fest_live_ops_hourly_log.jsonl
GitHub Actions fest-week cron (sketch)
name: february-live-ops-hourly-append
on:
schedule:
- cron: "5 * * * *"
workflow_dispatch:
jobs:
append:
if: github.ref == 'refs/heads/fest-demo-2027-02-live'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Append after Unity receipt present
run: |
test -f release-evidence/february-live/FEBRUARY_LIVE_OPS_RECEIPT_LATEST.json
bash scripts/append_february_live_ops_hour.sh
Pin if: to the live branch—do not append year-round.
Common mistakes
- Declaring stand-up GREEN from Discord screenshots without jsonl.
- Mixing March weekly paths into February hourly folder.
- Appending Editor Play
devlabels while Steam players are on HOTFIX depot. - Skipping hours “because nothing changed”—still latch for closeout C7.
- Treating Thursday review as a substitute for hourly append.
Troubleshooting
| Symptom | Lane |
|---|---|
| verify exit 1 schema | Fix february_fest_live_ops_receipt_v1—not March sprint |
| verify exit 3 build_label | Missing build_label help / HOTFIX list / setlive case study |
| jsonl gaps Saturday | Document waiver; backfill if recoverable |
| CI append without Unity receipt | Fail job—do not invent snapshot |
| Weekly GREEN, hourly RED | Expected—different cadences |
Mini exercise (45 minutes)
- Export Unity smoke → fill LATEST receipt (J1–J2).
- Assert
build_label(J3). - Recompute
row_diff[]vs prior hour (J5). - Run verify (J6).
- Append jsonl; flip BUILD_RECEIPT
february_fest_live_ops_hourly_ok. - Paste one
row_diffline into the stand-up note for Thursday review trail.
Continuity — February 2027 live week ops (277–283)
| Lesson | Receipt focus |
|---|---|
| 277 | OBS February pager clip |
| 278 | Fest-day setlive depot manifest |
| 279 | Godot HOTFIX visible build label |
| 280 (this) | Unity hourly live-ops jsonl |
| 281 (forward) | Discord moderation webhook |
Previous: Lesson 279 — Godot HOTFIX visible build label
Next: Lesson 281 — Construct fest live moderation webhook (forward)
FAQ
Same as Guide #40?
Guide = ninety-second Unity append ritual; 280 = BUILD_RECEIPT february_fest_live_ops_hourly_ok + CI latch.
Same as jq blog?
Blog = strategy + copy-paste gates; 280 = project milestone that flips the root receipt bool.
Same as Thursday row review?
Thursday = weekly ten-minute column ritual; 280 = hourly jsonl between Thursdays.
Godot / GameMaker team—skip Unity menu?
Keep receipt fields; map build_label from your engine version / footer path.
Missing build_label on append?
Hourly jsonl missing build_label help owns recovery—normalize writer schema before flipping hourly ok.
Related GamineAI reads
- Unity hourly jsonl append preflight (Guide #40)
- jq February live-ops hourly row diff
- Thursday BUILD_RECEIPT row review
- Sunday February closeout
- Lesson 279 — HOTFIX visible label
- 5-night pager challenge
- Hourly jsonl missing build_label help
- Official: Unity Application.version
Sign-off: Unity smoke → receipt → verify → append jsonl → promote february_fest_live_ops_hourly_ok—then keep Discord moderation for Lesson 281.