Case Studies & Experiments Jul 13, 2026

We Recovered a Post-Fest Partner Review After February Closeout Receipt Passed But Annex Was Empty - 2026 Case Study

2026 case study—recover post-fest partner review after February closeout receipt passed with empty annex; P1–P6 gates, post_fest_partner_review_recovery_receipt_v1.json, annex backfill checklist.

By GamineAI Team

We Recovered a Post-Fest Partner Review After February Closeout Receipt Passed But Annex Was Empty - 2026 Case Study

Pixel-art hero for post-fest partner review recovery after February closeout empty annex case study 2026

This is a synthesized case study—a field pattern from March 2027 micro-studios who filed february_fest_closeout_receipt_v1.json with post_fest_debrief_allowed: true, ran Sunday closeout C1–C10 on schedule, and opened the partner diligence call with a GREEN boolean—then failed the first annex path request because jsonl_annex[] was empty or pointed at moved files. It is not a named studio turnaround. There are no invented download counts, no fake partner quotes, and no fabricated wishlist percentages.

What follows is the failure signature, a D1–D3 recovery timeline, post_fest_partner_review_recovery_receipt_v1.json with gates P1–P6, and an annex backfill checklist teams run when closeout receipts pass but diligence stories fail.

Pair Sunday closeout #11, Monday debrief facilitator card, March evidence sprint, Q3 diligence analysis, forward blog #11 Friday March capstone.

Non-repetition note: Monday debrief evening owns non-empty annex card export. March evidence sprint owns E1–E7 consumption when annex exists. Fest-day setlive mismatch owns live depot drift. This URL owns empty or stale jsonl_annex[] after GREEN closeout—partner diligence recovery, not closeout mechanics redo.

Why this matters now (March 2027 diligence calls)

  1. GREEN receipt ≠ GREEN storyfebruary_fest_closeout_ok documents ritual completion; partners ask for paths.
  2. Feature sprint amnesia — March merges rename release-evidence/ folders while closeout JSON still lists old paths.
  3. Compressed intake windowsQ3 diligence packets expect annex index on first call—not a week to backfill.
  4. Evidence sprint blockedMarch E3 sha256 walk fails on empty annex.
  5. Facilitator card theaterMonday debrief card printed hooks with no files behind them.

Direct answer: Recovery required annex inventory from cluster receipts, backfill jsonl_annex[], re-run Sunday C7 with real paths, file recovery receipt, and post_fest_partner_review_recovery_ok: true before rescheduling partner review.

Beginner quick start — what recovered means here

Recovered in this pattern means:

  1. Admitted empty or broken annex on the diligence call—no bluffing paths.
  2. Rebuilt annex index from February cluster #1–#10 receipts on disk.
  3. Re-filed closeout receipt with populated jsonl_annex[] + receipt_version bump.
  4. Filed post_fest_partner_review_recovery_receipt_v1.json with P1–P6 GREEN.
  5. Rescheduled partner review with zip bundle—paths open in under 60 seconds.

Success check: Partner asks for funnel CSV path; facilitator opens file in shared screen without searching Slack.

The partner-facing failure (typical signals)

Channel Typical wording
Partner diligence "Your closeout receipt shows annex—where is the hourly jsonl?"
Internal #fest-ops "We passed Sunday—why is annex empty?"
March E3 sha256 walk exits 1 on MISSING
Producer "Slides say strong fest—we have no files"

Internal language before fix: "Closeout was GREEN" — when root cause was empty index or path drift, not fest performance.

Starting state (what was wrong)

Layer Symptom
Closeout receipt february_fest_closeout_ok: true, jsonl_annex: []
BUILD_RECEIPT post_fest_debrief_allowed: true
Sunday C7 Passed with waiver note "annex TBD"—undocumented
Cluster receipts Files exist scattered—not indexed
Monday card Block B lists paths that 404 on disk
Partner call First path request fails live

Fest may have been legitimately strong—the failure is evidence index, not necessarily demo quality.

Root cause pattern (synthesized)

Mechanic What drifted
Placeholder closeout Team set post_fest_debrief_allowed before C7 annex populated
Path move without re-index release-evidence/ reorganized March week 1
Copy-paste closeout JSON Template jsonl_annex[] never filled from cluster
Skipped C7 waiver Undeclared empty annex—C7 should RED
Debrief before backfill Monday card built from memory not closeout export

None require malice—only Sunday night speed and March folder churn.

Timeline D1–D3 (recovery pattern)

Day Focus Output
D1 Admit + inventory annex_backfill_inventory_v1.json
D2 Rebuild jsonl_annex[] + closeout re-file Updated FEBRUARY_FEST_CLOSEOUT_RECEIPT.json
D3 Recovery receipt + partner zip post_fest_partner_review_recovery_receipt_v1.json

Teams with velocity exports caught path drift in stand-up; teams without learned on partner call.

D1 — inventory discipline (beginner path)

Goal: List every February cluster receipt that should have been in annex.

Step Action
1 Walk closeout row catalog table
2 find release-evidence/february-live -name '*receipt*.json'
3 Map found files to annex keys (funnel, refund, hourly, HOTFIX, pager)
4 Record missing[] vs found[] in inventory JSON
5 Post internal status—pause partner scheduling

Beginner rule: Do not edit closeout receipt until inventory complete—P2 requires honest gap list.

annex_backfill_inventory_v1.json (sketch)

{
  "schema": "annex_backfill_inventory_v1",
  "fest_window": "2027-02-next-fest-live",
  "found": [
    { "key": "hour_one_funnel_csv", "path": "release-evidence/analytics/hour-one-funnel-2027.csv", "exists": true },
    { "key": "refund_daily_jsonl", "path": "release-evidence/february-live/refund/february_refund_spike_daily_log.jsonl", "exists": true }
  ],
  "missing": [
    { "key": "hourly_ops_jsonl", "expected": "release-evidence/february-live/ops/february_fest_live_ops_hourly_log.jsonl", "exists": false, "action": "re-export from jq hourly cluster" }
  ],
  "empty_annex_root_cause": "C7 waiver not documented; jsonl_annex never populated"
}

D2 — rebuild annex index (working dev)

Goal: Populate jsonl_annex[] on closeout receipt; bump receipt_version.

Step Action Gate
1 Re-export or restore each missing[] path P3
2 Build annex array from inventory found[] P4
3 sha256sum each annex file; store in annex row P4
4 Update FEBRUARY_FEST_CLOSEOUT_RECEIPT.json P5
5 Re-run verify_february_fest_closeout.sh P5
6 Update Monday facilitator card Block B paths P5
#!/usr/bin/env bash
# backfill_annex_from_inventory.sh
set -euo pipefail
INV="${1:-annex_backfill_inventory_v1.json}"
CLOSEOUT="${2:-release-evidence/february-live/FEBRUARY_FEST_CLOSEOUT_RECEIPT.json}"
jq --slurpfile inv "$INV" '
  .jsonl_annex = ($inv[0].found | map({
    key: .key,
    path: .path,
    sha256: .sha256
  }))
  | .receipt_version = ((.receipt_version // 1) + 1)
  | .notes += ["annex backfill 2027-03-05"]
' "$CLOSEOUT" > "${CLOSEOUT}.tmp" && mv "${CLOSEOUT}.tmp" "$CLOSEOUT"

Fail-closed: Any missing[] without restored file blocks P5—reschedule partner, do not bluff.

D3 — partner review reschedule (producer path)

Goal: File recovery receipt; send diligence zip; rerun March E3 if sprint active.

Step Action
1 Write post_fest_partner_review_recovery_receipt_v1.json
2 Zip closeout + annex files + recovery receipt
3 Email partner with path index (not slides-only)
4 BUILD_RECEIPT post_fest_partner_review_recovery_ok: true
5 Resume March evidence sprint Night 3+

Gates P1–P6 (recovery blockers)

Gate Name Pass criteria
P1 Failure admitted Partner call notes document empty annex discovery
P2 Inventory filed annex_backfill_inventory_v1.json with found + missing
P3 Missing resolved or waived Each missing[] has action + file OR documented waiver
P4 Annex sha256 pinned Every annex row has hash
P5 Closeout re-filed jsonl_annex[] length ≥ adopted cluster count
P6 Recovery receipt post_fest_partner_review_recovery_ok: true on BUILD_RECEIPT

P3–P5 are reschedule blockers when RED.

post_fest_partner_review_recovery_receipt_v1.json (schema)

{
  "schema": "post_fest_partner_review_recovery_receipt_v1",
  "fest_window": "2027-02-next-fest-live",
  "recovery_started_utc": "2027-03-05T10:00:00Z",
  "recovery_completed_utc": "2027-03-07T16:00:00Z",
  "gates": {
    "P1": "GREEN",
    "P2": "GREEN",
    "P3": "GREEN",
    "P4": "GREEN",
    "P5": "GREEN",
    "P6": "GREEN"
  },
  "cousin_receipts": {
    "february_fest_closeout_before": "release-evidence/february-live/archive/FEBRUARY_FEST_CLOSEOUT_RECEIPT_v1_empty_annex.json",
    "february_fest_closeout_after": "release-evidence/february-live/FEBRUARY_FEST_CLOSEOUT_RECEIPT.json",
    "monday_debrief_facilitator": "release-evidence/post-fest/debrief/POST_FEST_DEBRIEF_FACILITATOR_RECEIPT.json"
  },
  "inventory_path": "release-evidence/post-fest/recovery/annex_backfill_inventory_v1.json",
  "partner_zip": "release-evidence/post-fest/recovery/partner-review-recovery-2027-03-07.zip",
  "annex_row_count_before": 0,
  "annex_row_count_after": 6,
  "post_fest_partner_review_recovery_ok": true,
  "partner_review_rescheduled_utc": "2027-03-10T14:00:00Z",
  "notes": "Root cause: C7 empty annex with undeclared waiver; March folder move broke 2 paths"
}

BUILD_RECEIPT rows (D3 commit)

{
  "february_fest_closeout_ok": true,
  "post_fest_debrief_allowed": true,
  "post_fest_partner_review_recovery_ok": true,
  "post_fest_partner_review_recovery_receipt": "release-evidence/post-fest/recovery/POST_FEST_PARTNER_REVIEW_RECOVERY_RECEIPT.json",
  "closeout_receipt_version": 2
}

verify_post_fest_partner_review_recovery.sh

#!/usr/bin/env bash
set -euo pipefail
REC="${1:-release-evidence/post-fest/recovery/POST_FEST_PARTNER_REVIEW_RECOVERY_RECEIPT.json}"
CLOSEOUT="${2:-release-evidence/february-live/FEBRUARY_FEST_CLOSEOUT_RECEIPT.json}"
jq -e '.schema == "post_fest_partner_review_recovery_receipt_v1"' "$REC" || exit 1
jq -e '.post_fest_partner_review_recovery_ok == true' "$REC" || exit 6
COUNT=$(jq '.jsonl_annex | length' "$CLOSEOUT")
test "$COUNT" -gt 0 || exit 5
while IFS= read -r path; do test -f "$path" || exit 4; done < <(jq -r '.jsonl_annex[].path' "$CLOSEOUT")
echo "post_fest_partner_review_recovery verify: OK"

Annex backfill checklist (printable)

# Annex backfill after empty closeout — March 2027

□ P1 — Document empty annex on partner/internal record
□ P2 — Inventory JSON (found + missing)
□ P3 — Restore or waive each missing path
□ P4 — sha256 each annex file
□ P5 — Re-file closeout receipt (version bump)
□ P6 — Recovery receipt + partner zip
□ Reschedule partner review only after verify exit 0
□ Re-run March evidence sprint E3 if active

Proof table

Evidence Proves Fail signal
Partner call notes P1 admission Blame partner "wrong question"
Inventory JSON P2 honest gap list Skip straight to re-file
Restored files on disk P3 Fake paths in JSON
sha256 rows P4 integrity Hand-typed hashes
Closeout v2 P5 non-empty annex Edit v1 in place
Recovery receipt P6 completion Verbal "we fixed it"

Scenarios A–G

ID Situation Move
A Annex empty, files exist D1 inventory → D2 index
B Annex populated, paths wrong Path walk + re-index only
C Files deleted Re-export from Steamworks/cluster rituals
D Partner call tomorrow Delay call; P1 email with timeline
E March E3 already RED This recovery unblocks E3
F Solo founder Same checklist—inventory script is not team-size gated
G Partial cluster adoption Annex only indexes adopted rows—document waivers

Comparison pack (recovery vs cousins)

Artifact Owns
Sunday closeout C1–C10 including C7 annex
Monday debrief card Card from non-empty annex
March evidence sprint Consume annex nights
This case study Empty/stale annex recovery
Q3 diligence analysis Packet expectations

Partner diligence zip (D3)

#!/usr/bin/env bash
set -euo pipefail
OUT="release-evidence/post-fest/recovery/partner-review-recovery-2027-03-07.zip"
zip -j "$OUT" \
  release-evidence/post-fest/recovery/POST_FEST_PARTNER_REVIEW_RECOVERY_RECEIPT.json \
  release-evidence/february-live/FEBRUARY_FEST_CLOSEOUT_RECEIPT.json \
  release-evidence/post-fest/debrief/POST_FEST_DEBRIEF_FACILITATOR_RECEIPT.json \
  release-evidence/post-fest/recovery/annex_backfill_inventory_v1.json
while IFS= read -r p; do zip -u "$OUT" "$p"; done < <(jq -r '.jsonl_annex[].path' release-evidence/february-live/FEBRUARY_FEST_CLOSEOUT_RECEIPT.json)
echo "partner recovery zip: $OUT"

Aligns with Q3 demo evidence packets—paths over narrative.

Prevention (post-recovery discipline)

  1. Sunday C7 fail-closed — Empty jsonl_annex[] → RED unless waiver in notes with producer sign-off.
  2. No Monday card before annex walkD3 path script must exit 0.
  3. March folder freeze — No release-evidence/ moves without closeout receipt_version bump.
  4. **Start March sprint only after annex non-empty or recovery P6 GREEN.

Common mistakes

Re-running Sunday C1–C10 from scratch — Recovery is annex backfill, not full live week replay.

Fabricating annex rows — P4 sha256 audit catches empty files.

Hiding empty annex on call — P1 requires documented admission.

Editing closeout v1 in place — Archive v1; file v2 with version bump.

Skipping partner reschedule — Recovery receipt is not the call—send zip + new slot.

Extended scenarios H–L

H — Only hourly jsonl missing
P3 single-file re-export from jq hourly #8—do not re-index entire fest.

I — Partner accepts delayed call
P1 email template: "empty annex discovered; recovery ETA 72h"—better than live path failure.

J — Velocity receipt unrelated
Velocity listicle continues—recovery is closeout annex cousin.

K — Forward Friday March capstone (#11)
Capstone expects recovery receipt if partner review slipped—log cousin link in notes.

L — Help row forward
Help planner #37–#41 may ship annex path fix article—blog owns recovery timeline.

Worked example — D1 through D3 (synthetic timeline)

UTC Phase Action Artifact
2027-03-05T10:00 D1 Partner asks for hourly jsonl; jq '.jsonl_annex\|length' returns 0 Call notes
2027-03-05T14:00 D1 find + inventory JSON annex_backfill_inventory_v1.json
2027-03-06T09:00 D2 Re-export jq hourly from blog #8 ritual hourly jsonl restored
2027-03-06T16:00 D2 Closeout v2 + verify script exit 0 FEBRUARY_FEST_CLOSEOUT_RECEIPT.json
2027-03-07T11:00 D3 Recovery receipt + partner zip POST_FEST_PARTNER_REVIEW_RECOVERY_RECEIPT.json
2027-03-10T14:00 D3 Rescheduled review—paths open in 42 seconds Partner sign-off email

Producer email (P1 template):

Subject: February fest evidence annex — recovery in progress

We discovered our closeout receipt indexed an empty annex array during today's diligence prep.
We are backfilling paths from February cluster receipts and will send an updated zip within 72 hours.
Rescheduled review proposed: 2027-03-10 14:00 UTC.

Cluster receipt map (annex backfill source)

Annex key Typical source receipt Blog cousin
hour_one_funnel_csv HOUR_ONE_FUNNEL_SNAPSHOT_RECEIPT.json Hour-one funnel #2
refund_daily_jsonl february_refund_spike_receipt_v1.json Refund spike #9
hourly_ops_jsonl february_fest_live_ops_receipt_v1.json jq hourly #8
hotfix_exception_list hotfix_exception_list_receipt_v1.json HOTFIX opinion #10
pager_challenge_receipt february_live_ops_challenge_receipt_v1.json Pager challenge #4
whisper_clips_index february_live_whisper_triage_receipt_v1.json Whisper same-day #12

Inventory walks disk first, then maps to receipts—never invent paths from slide deck.

PowerShell verify cousin

$rec = Get-Content "release-evidence/post-fest/recovery/POST_FEST_PARTNER_REVIEW_RECOVERY_RECEIPT.json" | ConvertFrom-Json
if ($rec.schema -ne "post_fest_partner_review_recovery_receipt_v1") { exit 1 }
if (-not $rec.post_fest_partner_review_recovery_ok) { exit 6 }
$closeout = Get-Content "release-evidence/february-live/FEBRUARY_FEST_CLOSEOUT_RECEIPT.json" | ConvertFrom-Json
if ($closeout.jsonl_annex.Count -le 0) { exit 5 }
foreach ($row in $closeout.jsonl_annex) {
  if (-not (Test-Path $row.path)) { Write-Error "MISSING: $($row.path)"; exit 4 }
}
Write-Host "post_fest_partner_review_recovery verify: OK"

CI hook sketch (post-recovery)

jobs:
  partner-review-recovery:
    if: github.ref == 'refs/heads/march-sprint-2027'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: bash scripts/verify_post_fest_partner_review_recovery.sh
      - run: jq -e '.post_fest_partner_review_recovery_ok == true' release-evidence/BUILD_RECEIPT.json

Counterarguments (honest limits)

"Partners should accept narrative."
Some angels do—publishers with Q3 packet norms increasingly do not.

"We can rebuild annex from memory."
Memory drifts; sha256 walk is the audit.

"Closeout GREEN means legal protection."
Receipts are operational truth, not legal shields—recovery restores trust.

"Recovery takes too long."
72-hour reschedule beats a failed live screen share.

D2 deep dive — annex row shape after backfill

Each jsonl_annex[] entry should match Sunday closeout C7 expectations:

{
  "key": "hourly_ops_jsonl",
  "path": "release-evidence/february-live/ops/february_fest_live_ops_hourly_log.jsonl",
  "source_receipt": "february_fest_live_ops_receipt_v1",
  "fest_day": "D7",
  "sha256": "a1b2c3d4…",
  "indexed_utc": "2027-03-06T16:00:00Z"
}

Developer checks after backfill:

# Annex length vs adopted cluster count
jq '.jsonl_annex | length' FEBRUARY_FEST_CLOSEOUT_RECEIPT.json
# Crosswalk Monday facilitator annex_index
diff <(jq -c '.jsonl_annex[]' FEBRUARY_FEST_CLOSEOUT_RECEIPT.json | sort) \
     <(jq -c '.[]' release-evidence/post-fest/debrief/annex_index.json | sort)

Mismatch between closeout annex and Monday debrief annex_index.json fails partner trust—re-sync both in same commit.

Red flag table (pre-partner call)

Signal Severity Action
jsonl_annex.length == 0 CRITICAL Do not schedule call—start D1
Path 404 on first request CRITICAL Pause call; run recovery
sha256 mismatch HIGH Re-export source file
Monday card paths ≠ closeout HIGH Re-render card from annex_index
Velocity ok but annex empty MEDIUM Orthogonal—fix annex first
Producer slide deck only MEDIUM Replace with zip index

Post-recovery stand-up script

## Annex recovery complete

- closeout receipt_version: 2
- annex rows: 6 (was 0)
- recovery receipt: POST_FEST_PARTNER_REVIEW_RECOVERY_RECEIPT.json
- partner review: 2027-03-10T14:00:00Z
- March sprint E3: re-run tonight

Closing

Empty jsonl_annex[] is a silent failure mode—february_fest_closeout_ok looks fine in stand-up until a partner clicks a path. Recovery is inventory, backfill, re-file, and reschedule—not shame, not re-running the entire live week. Beginners follow D1–D3; working devs wire verify scripts; producers send zips before the second call. Prevention is Sunday C7 fail-closed on empty annex—recovery is the honest bridge when prevention slipped. Forward Friday March capstone (#11) expects either clean annex consumption or documented recovery receipt before April content update authorization.

Treat annex_backfill_inventory_v1.json as the partner-facing index: every path in jsonl_annex[] must resolve on disk with sha256 matching the closeout row review—not a second annex invented during recovery. If your team already started March evidence sprint Night 3, pause at failed E3, complete P1–P6 here, archive the partial challenge receipt with superseded_by, then restart Night 1 from a non-empty annex so sprint gates consume real files.

Key takeaways

  1. GREEN closeout can still be RED partner story when jsonl_annex[] is empty.
  2. P1–P6 recovery: admit → inventory → restore → re-file → receipt.
  3. post_fest_partner_review_recovery_receipt_v1.json indexes before/after closeout cousins.
  4. Pair Sunday closeout #11 C7 annex discipline.
  5. Pair Monday debrief #1—requires non-empty annex first.
  6. Unblocks March evidence sprint E3.
  7. Q3 diligence packets expect path index on call one.
  8. verify_post_fest_partner_review_recovery.sh gives CI one exit code.
  9. Archive closeout v1—never edit empty annex in place.
  10. Forward #11 Friday March capstone consumes recovery cousin.
  11. March cluster #5 consumed—#6 signup trend next.
  12. Prevention beats recovery—C7 fail-closed on empty annex.

FAQ

Is this saying Sunday closeout was wrong?
Ritual may have run—index was incomplete; recovery fixes index.

Can we skip partner reschedule?
P6 expects new call with zip—async path review is valid.

Same as empty annex on Monday card only?
Monday card symptom; root cause is closeout jsonl_annex[].

Do we re-run February live week?
No—backfill annex from existing cluster receipts.

How long does D1–D3 take?
Typically 48–72 hours for six annex rows—depends on missing exports.

Does recovery replace velocity exports?
No—orthogonal; velocity listicle continues.

What if we already ran March evidence sprint with empty annex?
Pause sprint at failed E3, complete P1–P6 recovery, archive partial challenge receipt with superseded_by, restart Night 1 from non-empty annex.

How does this relate to BUILD_RECEIPT beginner pipeline?
Recovery extends root row discipline—post_fest_partner_review_recovery_ok is a cousin boolean, not a replacement for closeout columns.

Can we skip annex backfill if closeout boolean is GREEN?
No—C7 fail-closed on empty jsonl_annex[] exists precisely because booleans can pass while paths are hollow; this case study is the recovery bridge.

Related GamineAI reads


GREEN booleans are not paths—inventory the annex, backfill the index, file the recovery receipt, then reschedule the partner call with files that open.