Sparse pod clones vs committed cross-issue inputs: pre-launch stat-check + git-show materialization recipe (experimenter.md + gotchas.md)
Highlight text on any card (body, plan, or an event) to anchor a comment, or leave a whole-task comment here. Mention @claude to summon a reply.
No comments yet.
Provenance
Surfaced by the #2476 experimenter spawn (2026-08-23, session cmt4td1zor48ewz0unlixnkji): the first pod-2476 launch died in ~5 s on FileNotFoundError: eval_results/issue_1482/split_1482.json. The pod bootstrap clone is SPARSE (cone excludes every other issue's eval_results/), while scripts/issue2476_turnavg_sae.py hard-reads two committed #1482 inputs. The Step 6a.5 carry-over gate had PASSed both paths as in-ref at origin/issue-2476 — "tracked at the launch SHA" does not imply "materialized on the pod". The experimenter fixed it inline: git show HEAD:<path> > <path> on the pod + git hash-object verify against the committed blob (cdb9a68b/b05d19dc), then relaunched clean.
Goal (what to fix)
Close the gap on the workflow surface so the next sparse-clone launch does not burn a boot cycle:
.claude/rules/gotchas.md— add an entry: pod bootstrap clones are sparse (cone excludes other issues'eval_results/); a driver hard-reading committed CROSS-ISSUE inputs crashes FileNotFoundError despite in-ref carry-over gate PASS. Recipe: stat-check the driver's committed cross-issue reads ON the pod pre-launch; on a miss, materialize per-file viagit show HEAD:<path> > <path>+git hash-object -w-free blob verify against the committed hash (prefer per-file materialization overgit sparse-checkout addfor large subtrees through MooseFS)..claude/agents/experimenter.md— add the pre-launch stat-check duty (bounded: the paths the plan/6a.5 gate names as committed repo inputs) + the materialization recipe.- OPTIONAL (assess):
scripts/verify_carryover_inputs.pyor the Step 6 docs — annotate thein-refPASS reason with a sparse-clone caveat line for cross-issueeval_results/paths on pod lanes, so the gate's own output names the residual.
Acceptance
- Both surface edits landed + lints clean (
workflow_lint.py --check-lessons-indexif a rules file is added/renamed — this edits an existing rule, so index untouched). - A grep for the recipe in
gotchas.mdandexperimenter.mdfinds it.
failure_class: infra; generalizes: yes; root_cause_confirmed: yes (experimenter verified blob hashes + healthy relaunch).