Post-Fest Debrief Facilitator Card Empty After Closeout Annex Path Index Missing - How to Fix
Problem: Sunday February fest closeout filed february_fest_closeout_ok and post_fest_debrief_allowed: true, but Monday’s printable facilitator card shows an empty annex table, 404 paths, or CI verify_post_fest_debrief_facilitator exits 3 on missing files. Partners ask for hour-one CSV or OBS pager receipts; facilitation freezes.
Who is affected now: Teams in the March 2027 post-fest debrief sprint running Monday facilitator card evening or the OBS annex→card preflight (Guide #43). This is path-index recovery after a GREEN closeout, not empty-annex partner-review theater when jsonl_annex[] was never filled, and not live-week HOTFIX / setlive gates.
Fastest safe fix: Re-export annex_index.json from Sunday jsonl_annex[] → normalize every path to the evidence root → run the D3 path walk → refresh post_fest_debrief_facilitator_receipt_v1.json with annex_index_ok: true → regenerate the card → set BUILD_RECEIPT post_fest_debrief_card_ok: true.
Direct answer
An empty or broken Monday card means closeout indexed evidence that the card exporter cannot resolve—not that Sunday C1–C10 failed. Rebuild the annex path index from the committed closeout receipt, make paths real on this machine/CI runner, then re-file the facilitator receipt. Do not invent annex rows to fill the table.
Why this issue spikes in March 2027 Monday debrief
- Sunday ≠ Monday-ready —
post_fest_debrief_allowedproves closeout ran;post_fest_debrief_card_okproves paths still resolve for the call. - Repo tidy Monday AM — engineers move
release-evidence/after the closeout commit; absolute laptop paths die. - Hand-edited annex_index — someone “fixed” a row and dropped
pathkeys. - Wrong schema — March card jq expects February closeout shape but reads a pre-closeout stub.
- OBS annex skipped — funnel CSV row exists; pager clip receipt path drifted—partners challenge VOD first.
Symptoms and search phrases
- Facilitator card annex table blank / “no paths.”
verify_post_fest_debrief_facilitatorexit 3 /MISSING: release-evidence/....post_fest_debrief_card_okfalse whilepost_fest_debrief_allowedtrue.annex_index.jsonlength 0 or rows without"path".- Partner: “Where is the jq hourly jsonl for D5?” while closeout receipt is GREEN.
- Render script wrote only Call metadata—no Block B rows.
Root causes (check in order)
- Never extracted D2 — closeout GREEN;
annex_index.jsonnever written (Guide #43 D2). - Stale annex — index from a pre-closeout branch still in
post-fest/debrief/. - Missing
pathkeys — schema drift / partial jq select. - Relative path drift — cwd changed; paths were cwd-relative, not evidence-root-relative.
- Absolute Windows paths on Linux CI — runner cannot
test -fC:\Users\.... - Truly empty
jsonl_annex[]— different failure → empty annex case study; re-run Sunday C5–C8 first. - Bool flipped without path walk — theater GREEN; verify still fails.
Beginner path (first 20 minutes)
Prerequisites: Sunday closeout receipt on disk, jq, write access to release-evidence/post-fest/debrief/, Monday tutorial or Guide #43 open.
- Confirm closeout is real (not a stub):
jq -e '.post_fest_debrief_allowed == true and (.jsonl_annex | length >= 2)' \
release-evidence/february-live/FEBRUARY_FEST_CLOSEOUT_RECEIPT.json
- Rebuild the index from that file (overwrite stale copies):
mkdir -p release-evidence/post-fest/debrief
jq '.jsonl_annex' release-evidence/february-live/FEBRUARY_FEST_CLOSEOUT_RECEIPT.json \
> release-evidence/post-fest/debrief/annex_index.json
- Open
annex_index.json—every row needs apath. If a path is absolute to another machine, rewrite torelease-evidence/...under the repo. - Run the path walk (below). Fix any
MISSINGlines by restoring files or correcting the path string—do not delete the annex row. - Re-render the facilitator card → refresh receipt → set
post_fest_debrief_card_ok.
Common mistake: Hand-typing annex rows from memory to “look full”—partners spot path/hash mismatch; use Sunday’s jsonl_annex[] only.
Fastest safe fix path
Step 1 — Prove Sunday annex exists (not empty theater)
jq '.jsonl_annex | length' release-evidence/february-live/FEBRUARY_FEST_CLOSEOUT_RECEIPT.json
jq -r '.jsonl_annex[] | "\(.key)\t\(.path)"' \
release-evidence/february-live/FEBRUARY_FEST_CLOSEOUT_RECEIPT.json
If length is 0: stop—this help cannot invent evidence. Follow empty annex recovery / re-run Sunday closeout C5–C8.
Step 2 — Rebuild annex_index.json (D2)
Always re-extract from the committed closeout receipt:
jq '.jsonl_annex' release-evidence/february-live/FEBRUARY_FEST_CLOSEOUT_RECEIPT.json \
> release-evidence/post-fest/debrief/annex_index.json
jq -e 'all(.[]; has("path") and (.path|length) > 0)' \
release-evidence/post-fest/debrief/annex_index.json
Fail: repair closeout jsonl_annex[] first—do not patch only the card renderer.
Step 3 — Normalize paths to evidence root
Pick one root (repo-relative) and rewrite:
# Example: strip drive / home prefixes so CI and laptops share strings
jq '[.[] | .path = (.path
| sub("^.*release-evidence/"; "release-evidence/")
| sub("^\\\\"; "")
)]' release-evidence/post-fest/debrief/annex_index.json \
> release-evidence/post-fest/debrief/annex_index.normalized.json \
&& mv release-evidence/post-fest/debrief/annex_index.normalized.json \
release-evidence/post-fest/debrief/annex_index.json
PowerShell spot-check:
$idx = Get-Content release-evidence/post-fest/debrief/annex_index.json -Raw | ConvertFrom-Json
$idx | ForEach-Object { "{0}`t{1}" -f $_.key, $_.path }
Prefer including at least one OBS/pager key when live week filed clips (Guide #43 D2 WARN).
Step 4 — Path walk (D3) until exit 0
#!/usr/bin/env bash
set -euo pipefail
INDEX="${1:-release-evidence/post-fest/debrief/annex_index.json}"
while IFS= read -r path; do
test -f "$path" || { echo "MISSING: $path"; exit 1; }
done < <(jq -r '.[].path' "$INDEX")
echo "annex paths: OK"
Restore missing artifacts from backup / diligence zip, or correct the path string to where the file actually lives—then re-hash.
Step 5 — Receipt + card + BUILD_RECEIPT
- Re-render
post_fest_debrief_facilitator_card.mdfrom the fixed index (Monday D4 / Guide #43 D4). - Update
POST_FEST_DEBRIEF_FACILITATOR_RECEIPT.json:
{
"schema": "post_fest_debrief_facilitator_receipt_v1",
"annex_index_path": "release-evidence/post-fest/debrief/annex_index.json",
"annex_index_sha256": "…recomputed…",
"annex_index_ok": true,
"gates": {
"D2_annex_index": "pass",
"D3_paths_exist": "pass",
"D4_card_generated": "pass",
"D5_card_hash": "pass",
"D6_receipt": "pass"
},
"post_fest_debrief_card_ok": true
}
- Latch BUILD_RECEIPT:
jq -e '.post_fest_debrief_card_ok == true' release-evidence/BUILD_RECEIPT.json
bash scripts/verify_post_fest_debrief_facilitator.sh
Verification
| Check | Pass when |
|---|---|
| Closeout cousin | post_fest_debrief_allowed true; jsonl_annex length ≥ 2 |
| Index | annex_index.json row count == closeout jsonl_annex length |
| Keys | Every row has non-empty path |
| Path walk | Exit 0; no MISSING |
| Card | Annex table lists every key; spot-check open ≥1 path |
| OBS spot (recommended) | ≥1 pager/clips/obs/replay key when live week used OBS |
| Verify script | Exit 0 |
| BUILD_RECEIPT | post_fest_debrief_card_ok: true |
Alternative fixes (edge cases)
Branch A — Closeout GREEN, annex truly empty
Not this article’s primary path. Restore annex during Sunday closeout (case study); then return here for card export.
Branch B — Paths OK locally, CI exit 3
CI clone missing LFS / large evidence files. Commit small receipts under release-evidence/ or fetch the diligence zip on the runner before verify.
Branch C — Card full, partner still 404
Printed PDF captured old relative links. Re-export after D5 hash; attach card sha256 in the invite (Monday tutorial).
Branch D — OBS pager path only missing
Funnel rows resolve; VOD claim fails. Restore pager receipt / clips_index path into closeout annex, re-extract D2–D6.
Branch E — Schema assumes February keys on March stub
Wrong file opened (november_closeout or draft). Point scripts at FEBRUARY_FEST_CLOSEOUT_RECEIPT.json for this fest window.
Prevention
- Pin
annex_index_sha256on BUILD_RECEIPT Sunday night after D2–D3 (Guide #43). - Store evidence-root-relative paths only—no machine-absolute strings in committed index.
- Wire
verify_post_fest_debrief_facilitator.shas a required check before Monday invite sends. - Do not tidy
release-evidence/trees Monday morning before the partner call. - Prefer Guide #43 ninety-second gate after every Sunday closeout.
Related problems
- OBS annex→facilitator card preflight — D1–D6 prevention gate.
- Monday post-fest debrief facilitator card — evening tutorial.
- Sunday February fest closeout — C1–C10 +
jsonl_annex[]. - Empty annex partner-review case study — when annex was never filled.
- February pager lane — OBS paths that belong in annex.
- Course 281 forward — BUILD_RECEIPT facilitator receipt milestone.
- Thursday row review — weekly cousin, not Monday debrief.
FAQ
Closeout passed—why is the card empty?
Closeout latches post_fest_debrief_allowed. The card needs a separate annex index + path walk and post_fest_debrief_card_ok.
Can we paste paths from Slack into the card?
No—rebuild from Sunday jsonl_annex[] so hashes and verify scripts stay honest.
Is this the same as the empty-annex case study?
No—case study = no annex rows. This page = annex exists but export/index/paths broke.
Do we need OBS rows?
Strongly recommended if live week used pager/Replay Buffer; partners challenge VOD claims first.
Bookmark this page for Monday debrief mornings. Share it with the facilitator if Sunday was GREEN and the card still prints blank.
Monday debrief cards stay empty until annex_index.json matches Sunday jsonl_annex[], every path resolves, and verify exit 0—then latch post_fest_debrief_card_ok and start the call.