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.versionbuild_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.

Lesson hero for Unity February fest live-ops hourly jsonl BUILD_RECEIPT

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 dev labels 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)

  1. Export Unity smoke → fill LATEST receipt (J1–J2).
  2. Assert build_label (J3).
  3. Recompute row_diff[] vs prior hour (J5).
  4. Run verify (J6).
  5. Append jsonl; flip BUILD_RECEIPT february_fest_live_ops_hourly_ok.
  6. Paste one row_diff line 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


Sign-off: Unity smoke → receipt → verify → append jsonl → promote february_fest_live_ops_hourly_ok—then keep Discord moderation for Lesson 281.