Observed on run-08 (2026-09-07): the .session breadcrumb correctly pointed at the live transcript, but by extraction time the session had gone through context compaction and the transcript JSONL no longer contained the /prepare-build announcement text ("Run 08 — building in builds/run-08/") — the default opening bookend matched nothing and extract.py sliced from the start of the surviving transcript. The closing bookend (recent text) still matched. Recovered by re-running with --from="Spec fully absorbed", a phrase that survived compaction; the final log covers 138 turns of the build but has lost the allocation/checklist turns that preceded the compaction boundary.
Implication: the post-hoc recording design (CLAUDE.md "Recording is post-hoc") assumes the transcript retains raw turns for the whole build window. Long sessions violate that: compaction can drop any pre-boundary turn, including the opening bookend and early build activity.
Options to consider (next tooling pass):
/prepare-build writes the announcement text (or a unique token) into evals/run-NN/.session alongside the path, and extract.py falls back to slicing from the earliest surviving turn while WARNING loudly that the opening bookend was lost (today it says "no match — sliced from start" only in stdout).
- Have
/prepare-build note a timestamp at allocation; slice by timestamp rather than text.
- Or extract eagerly (run
/extract-build-log periodically during long builds) since re-runs are idempotent.
🤖 Generated with Claude Code
Observed on run-08 (2026-09-07): the
.sessionbreadcrumb correctly pointed at the live transcript, but by extraction time the session had gone through context compaction and the transcript JSONL no longer contained the /prepare-build announcement text ("Run 08 — building in builds/run-08/") — the default opening bookend matched nothing andextract.pysliced from the start of the surviving transcript. The closing bookend (recent text) still matched. Recovered by re-running with--from="Spec fully absorbed", a phrase that survived compaction; the final log covers 138 turns of the build but has lost the allocation/checklist turns that preceded the compaction boundary.Implication: the post-hoc recording design (CLAUDE.md "Recording is post-hoc") assumes the transcript retains raw turns for the whole build window. Long sessions violate that: compaction can drop any pre-boundary turn, including the opening bookend and early build activity.
Options to consider (next tooling pass):
/prepare-buildwrites the announcement text (or a unique token) intoevals/run-NN/.sessionalongside the path, andextract.pyfalls back to slicing from the earliest surviving turn while WARNING loudly that the opening bookend was lost (today it says "no match — sliced from start" only in stdout)./prepare-buildnote a timestamp at allocation; slice by timestamp rather than text./extract-build-logperiodically during long builds) since re-runs are idempotent.🤖 Generated with Claude Code