Lesson 283: February Live-Ops Truth Capstone Receipt on BUILD_RECEIPT (2026)

Direct answer: February 2027 live week latches when february_live_ops_truth_capstone_v1.json links six child receipts from Lessons 277–282, proves one expected_build_label across pager clips, setlive, HOTFIX label, hourly jsonl, moderation webhook, and hour-one funnel, and points to Sunday closeout plus November closeout 276 so Monday debrief is not “six GREEN Discord threads, prior arcs unknown.”

Lesson hero for February live-ops truth capstone receipt

Why this matters now (Sunday closeout before Monday debrief)

February 2027 producers filed six live-ops receipts—OBS pager, GameMaker setlive, Godot HOTFIX label, Unity hourly jsonl, Construct moderation webhook, hour-one funnel CSV—but partners still ask: “Is fest-demo-2027-02-rc3 safe to hand to Monday facilitator debrief?” Sunday closeout row review and Thursday BUILD_RECEIPT review need one February Live-Ops Capstone section—not six Slack pins.

This lesson closes arc 277–283 (same wiring pattern as Lesson 276 November closeout). Run verify_february_live_ops_capstone.sh before flipping february_live_ops_truth_ok. Pair jq hourly truth on the same expected_build_label—do not invent a second hourly schema.

Beginner path (75-minute capstone audit)

Step Action Success check
1 Collect six receipt paths from Lessons 277–282 Files exist
2 Verify same build_label / expected_build_label Crosswalk GREEN
3 Confirm OBS pager clip Lesson 277
4 Confirm setlive allowed Lesson 278
5 Confirm HOTFIX visible label Lesson 279
6 Confirm hourly live-ops jsonl Lesson 280
7 Confirm moderation webhook Lesson 281
8 Confirm hour-one funnel snapshot Lesson 282
9 Link Sunday closeout + November 276 pointers Prior truth on disk
10 Run verify_february_live_ops_capstone.sh Exit 0
11 File february_live_ops_truth_capstone_v1.json F1–F11 pass

Time: ~75 minutes when child lessons done; ~90 minutes first full February audit.

Prerequisites: Lessons 277–282 receipts GREEN (or honest deferred_children[]); ImageMagick/jq not required beyond verify script; write access to release-evidence/capstone/.

Developer path (gates F1–F11)

Gate Check Fail when
F1 february_pager_clip_receipt_v1 + february_pager_clip_ok Pager clip missing / hash crosswalk RED (Lesson 277)
F2 fest_day_setlive_recovery_receipt_v1 + setlive_allowed Depot/build-ID mismatch (Lesson 278)
F3 HOTFIX list + hotfix_label_ok Visible label screenshot missing (Lesson 279)
F4 february_fest_live_ops_receipt_v1 + february_fest_live_ops_hourly_ok Hourly jsonl without build_label (Lesson 280)
F5 fest_moderation_webhook_receipt_v1 + fest_moderation_webhook_ok Webhook URL drift after thread rename (Lesson 281)
F6 hour_one_funnel_snapshot_receipt_v1 + hour_one_funnel_snapshot_ok Funnel rates invented by hand (Lesson 282)
F7 Sunday closeout receipt / post_fest_debrief_allowed path Closeout skipped; Monday debrief starts blind (Sunday ritual)
F8 November capstone pointer 276 on disk February without prior closeout truth
F9 expected_build_label matches all six children Label drift across engines
F10 verify_february_live_ops_capstone.sh exit 0 jq / path mismatch
F11 Capstone JSON filed; BUILD_RECEIPT february_live_ops_truth_ok Boolean flipped without verify

Cross-cutting (required before february_live_ops_truth_ok: true): verify exit 0; all six children share expected_build_label; post_fest_debrief_allowed only after Sunday C gates—not from this capstone alone inventing debrief permission.

Child receipt crosswalk

Lesson Receipt schema Typical path Pass field
277 february_pager_clip_receipt_v1 release-evidence/playtest/pager/FEBRUARY_PAGER_CLIP_RECEIPT.json february_pager_clip_ok
278 fest_day_setlive_recovery_receipt_v1 release-evidence/steam/setlive/FEST_DAY_SETLIVE_RECOVERY_RECEIPT.json setlive_allowed / fest_day_setlive_recovery_ok
279 godot_hotfix_visible_label_receipt_v1 + list release-evidence/steam/hotfix/GODOT_HOTFIX_VISIBLE_LABEL_RECEIPT.json hotfix_label_ok
280 february_fest_live_ops_receipt_v1 release-evidence/february-live/FEBRUARY_LIVE_OPS_RECEIPT_LATEST.json february_fest_live_ops_hourly_ok
281 fest_moderation_webhook_receipt_v1 release-evidence/discord/FEST_MODERATION_WEBHOOK_RECEIPT.json fest_moderation_webhook_ok
282 hour_one_funnel_snapshot_receipt_v1 release-evidence/analytics/HOUR_ONE_FUNNEL_SNAPSHOT_RECEIPT.json hour_one_funnel_snapshot_ok

Order note: 278 setlive before trusting live branch traffic; 279 HOTFIX only with numbered exception list; 280 hourly feeds Sunday annex; 282 funnel before stand-up debates store copy; 281 webhook before P0 Discord nights.

february_live_ops_truth_capstone_v1.json

{
  "schema": "february_live_ops_truth_capstone_v1",
  "expected_build_label": "fest-demo-2027-02-rc3",
  "arc_lessons": ["277", "278", "279", "280", "281", "282", "283"],
  "receipts": {
    "277": "february_pager_clip_receipt_v1.json",
    "278": "fest_day_setlive_recovery_receipt_v1.json",
    "279": "godot_hotfix_visible_label_receipt_v1.json",
    "280": "february_fest_live_ops_receipt_v1.json",
    "281": "fest_moderation_webhook_receipt_v1.json",
    "282": "hour_one_funnel_snapshot_receipt_v1.json"
  },
  "receipt_paths": {
    "277": "release-evidence/playtest/pager/FEBRUARY_PAGER_CLIP_RECEIPT.json",
    "278": "release-evidence/steam/setlive/FEST_DAY_SETLIVE_RECOVERY_RECEIPT.json",
    "279": "release-evidence/steam/hotfix/GODOT_HOTFIX_VISIBLE_LABEL_RECEIPT.json",
    "280": "release-evidence/february-live/FEBRUARY_LIVE_OPS_RECEIPT_LATEST.json",
    "281": "release-evidence/discord/FEST_MODERATION_WEBHOOK_RECEIPT.json",
    "282": "release-evidence/analytics/HOUR_ONE_FUNNEL_SNAPSHOT_RECEIPT.json"
  },
  "prior_arc_pointers": {
    "276": "release-evidence/capstone/NOVEMBER_CLOSEOUT_CAPSTONE.json",
    "sunday_closeout": "release-evidence/february-live/FEBRUARY_FEST_CLOSEOUT_RECEIPT.json"
  },
  "gates": {
    "F1_pager_clip": "pass",
    "F2_setlive_allowed": "pass",
    "F3_hotfix_label": "pass",
    "F4_hourly_jsonl": "pass",
    "F5_moderation_webhook": "pass",
    "F6_hour_one_funnel": "pass",
    "F7_sunday_closeout": "pass",
    "F8_november_pointer": "pass",
    "F9_build_label_crosswalk": "pass",
    "F10_verify_script": "pass",
    "F11_capstone_filed": "pass"
  },
  "february_live_ops_truth_ok": true,
  "post_fest_debrief_ready": true
}

Pin under release-evidence/capstone/FEBRUARY_LIVE_OPS_TRUTH_CAPSTONE.json. Align Sunday pointer fields with Sunday closeout—do not invent a second closeout schema.

Verify before BUILD_RECEIPT flip

#!/usr/bin/env bash
# scripts/verify_february_live_ops_capstone.sh
set -euo pipefail
CAP="${1:-release-evidence/capstone/FEBRUARY_LIVE_OPS_TRUTH_CAPSTONE.json}"
jq -e '.schema == "february_live_ops_truth_capstone_v1"' "$CAP"
LABEL=$(jq -r '.expected_build_label' "$CAP")
for key in 277 278 279 280 281 282; do
  path=$(jq -r --arg k "$key" '.receipt_paths[$k]' "$CAP")
  test -f "$path"
  child_label=$(jq -r '.build_label // .expected_build_label // empty' "$path")
  if [[ -n "$child_label" && "$child_label" != "$LABEL" ]]; then
    echo "FAIL: label mismatch $key ($child_label != $LABEL)" >&2
    exit 2
  fi
done
test -f "$(jq -r '.prior_arc_pointers["276"]' "$CAP")"
test -f "$(jq -r '.prior_arc_pointers.sunday_closeout' "$CAP")"
jq -e '.february_live_ops_truth_ok == true' "$CAP"
echo "february_live_ops_capstone verify: OK"
./scripts/verify_february_live_ops_capstone.sh \
  release-evidence/capstone/FEBRUARY_LIVE_OPS_TRUTH_CAPSTONE.json
jq -e '.february_live_ops_truth_ok == true' \
  release-evidence/capstone/FEBRUARY_LIVE_OPS_TRUTH_CAPSTONE.json

Exit 0 is required before Sunday closeout lists the February Live-Ops Capstone row as GREEN for Monday facilitator handoff.

BUILD_RECEIPT capstone row

Column Source
february_pager_clip_ok Lesson 277
setlive_allowed Lesson 278
hotfix_label_ok Lesson 279
february_fest_live_ops_hourly_ok Lesson 280
fest_moderation_webhook_ok Lesson 281
hour_one_funnel_snapshot_ok Lesson 282
february_live_ops_truth_ok This lesson
november_closeout_ok (pointer) Lesson 276
post_fest_debrief_allowed (cousin) Sunday closeout ritual

CI verify_february_live_ops_capstone fails when february_live_ops_truth_ok is false and Monday debrief flag is set.

Key takeaways

  1. Capstone = wiring Lessons 277–282—not re-running OBS, setlive, or funnel CSV from scratch.
  2. expected_build_label joins pager, Steam, Godot HOTFIX, Unity hourly, Discord, and analytics rows.
  3. Verify firstverify_february_live_ops_capstone.sh before Boolean flip.
  4. Sunday closeout owns C1–C10 ritual; 283 owns BUILD_RECEIPT milestone JSON.
  5. 276 November still required—February live-ops does not erase prior closeout truth.
  6. jq hourly stays the per-hour sketch—capstone does not replace it.
  7. March debrief starts at Lesson 284—do not merge facilitator-card schema into this file.
  8. Multi-engine studios keep 278 setlive, 279 HOTFIX, and 280 hourly as separate columns.
  9. Guide preflights #38–#42 / Construct #39 are ninety-second gates; 283 is promotion wiring.
  10. Thursday review lists 277–282 in one February Live Ops section.
  11. Honest deferred_children[] beats fake GREEN when one lane is mid-recovery (Help #39–#41 cousins).
  12. February arc 277–283 closed — March runway starts at Lesson 284.

Common mistakes

  • Filing capstone while 280 RED but stand-up declared GREEN from screenshots.
  • Setting post_fest_debrief_allowed without Sunday closeout C gates.
  • Skipping 276 because “February already covers ops.”
  • Merging february_live_ops_truth_capstone_v1 into november_closeout_capstone_v1 or March sprint schemas.
  • Promoting with one child deferred and no honesty row.

Troubleshooting

Symptom Lane
One child RED Open that lesson / Help cousin; do not waive in capstone JSON
build_label mismatch Re-export child on correct label; re-run verify
Sunday closeout missing Sunday ritual
November pointer missing Lesson 276
Smoke RED, capstone GREEN Wednesday smoke—separate gate
verify exit 2 Fix child build_label / path table

Mini exercise (80 minutes)

  1. Collect six receipt paths; confirm each pass field GREEN.
  2. Run ./scripts/verify_february_live_ops_capstone.sh.
  3. Link 276 + Sunday closeout paths.
  4. Intentionally omit 282—confirm capstone promotion blocked.
  5. Restore 282; file february_live_ops_truth_capstone_v1.json.
  6. Add BUILD_RECEIPT February Live-Ops Capstone row for Thursday / Sunday review.

Continuity — February 2027 live week ops (277–283)

Lesson Receipt focus
277 OBS February pager clip
278 Fest-day setlive depot
279 Godot HOTFIX visible label
280 Unity hourly live-ops jsonl
281 Discord moderation webhook
282 Hour-one funnel snapshot CSV
283 (this) February live-ops truth capstone
Arc Lessons Capstone
November close-out 266–276 276
February live week 277–283 283 (this)
March debrief + October prep 284–288 Lesson 288 forward

Previous: Lesson 282 — Hour-one funnel snapshot CSV
Next: Lesson 284 — Post-fest debrief facilitator card

FAQ

Does 283 replace Sunday closeout?
No—Sunday owns C1–C10 ritual; 283 wires 277–282 receipt columns for BUILD_RECEIPT.

Can we skip 276 if 277–282 are GREEN?
No—276 documents November closeout truth; February adds live-week honesty lanes.

Is jq hourly enough without this lesson?
Hourly sketch owns per-hour append; 283 owns the six-child promotion latch.

Is 283 the last February lesson?
Yes for 277–283 live week; March starts at Lesson 284 when shipped.

Same as November 276?
Same wiring pattern, different children and Sunday pointer—do not reuse november_closeout_capstone_v1 schema.

Where to go next


Live week lies when six lanes are GREEN in chat but unlinked on disk—crosswalk 277–282, point at Sunday + November, verify, then latch february_live_ops_truth_ok before Monday debrief.