Add Push Compact Transcripts Option

similar to strategy_options.push_sessions, we want strategy_options.push_compact_transcripts that can be true or false. when it's true, transcript.jsonl is pushed (the code for generating transcript.jsonl lives in compact/*)
Done. All 6226 unit tests pass, lint is clean. Here's what I built:
How it works
Since push_sessions gates pushing the entire/checkpoints/v1 branch as a whole, the way to get transcript.jsonl pushed is to include it in the checkpoint tree: when strategy_options.push_compact_transcripts is true, every checkpoint write stores a condensed transcript.jsonl (generated by transcript/compact from the already-redacted full.jsonl content) next to full.jsonl in the session subdirectory. It then rides along on every push of the checkpoints branch. Default is false — nothing changes unless the option is explicitly set to true.
Changes
settings/settings.go—IsPushCompactTranscriptsEnabled()method plus a context-loading package-level variant, following the existingIsFilteredFetchesEnabled/IsSignCheckpointCommitsEnabledpatterns. Only an explicit booleantrueenables it.checkpoint/committed.go—writeTranscriptnow callswriteCompactTranscriptwhen the setting is on. It runs after the Codex sanitization step so the compact converter sees the same bytes asfull.jsonl. Generation is best-effort: a conversion or blob failure logs a warning and never blocks the checkpoint write, since hooks have no retry path.paths/paths.go— newCompactTranscriptFileName = "transcript.jsonl"constant.agent/registry.go— newNameForAgentType()helper with a static display-type → registry-slug map (e.g. "Claude Code" → "claude-code"), falling back to the live registry for external agents. The compact format'sagentfield wants the slug, and a static map keeps it deterministic regardless of which agent packages are linked in.- Docs — updated the checkpoint layout diagrams in
committed.go,checkpoint.go, anddocs/architecture/sessions-and-checkpoints.mdwith the new optional file and a paragraph explaining the option.
Tests
TestIsPushCompactTranscriptsEnabled(settings): missing / true / false / wrong-type cases.TestWriteCommitted_CompactTranscript(checkpoint): with the option enabled,transcript.jsonllands in the session tree with the compact format ("agent":"claude-code"); disabled by default, onlyfull.jsonlis written.
Two design notes worth knowing: the compact transcript covers the full session (same scope as full.jsonl, no StartLine truncation), and it's written as a single blob — no chunking, since compact output is much smaller than the full transcript. Also, because each session write clears its subdirectory first, turning the option off stops including the file on the next checkpoint write.
Review complete — fmt, lint, and tests all pass. Summary:
Fixed
- Duplicate warn-log blocks in
writeCompactTranscript(committed.go) — collapsed the two near-identical warning blocks (Compact failure, blob failure) into a single error-chained path with one log statement. - Hidden-artifact covenant undocumented (altitude) — the doc comment now states explicitly that
transcript.jsonlis deliberately not recorded inSessionFilePaths/CheckpointSummary, so future readers know the asymmetry is intentional rather than an oversight.
Skipped, with reasons
- Thread settings through
WriteCommittedOptionsinstead of loading in the store (efficiency + altitude, same mechanism): the store already reads settings this way (IsSignCheckpointCommitsEnabledin the same file), the cost is one small JSON parse per checkpoint write — negligible next to the git tree operations around it — and changingWriteCommittedOptionswould ripple through the strategy layer and its tests. Consistency with the existing pattern wins here. - Remove
NameForAgentType/ the static map (simplification and altitude pulled in opposite directions — one wanted map-only inlined, the other registry-only): the two-tier design is the deliberate middle ground. The registry fallback already covers the drift concern (a new agent registered viainit()resolves correctly in the real binary even if the map isn't updated), and the static map gives deterministic results regardless of which packages are linked in. The mapping also belongs in theagentpackage next to the constants, not inlined incheckpoint. addBlobEntryhelper for theTreeEntryliteral pattern (reuse): the pattern repeats 10+ times in pre-existing code; adding a helper used once by new code wouldn't reduce duplication, and refactoring all the existing sites is well outside this diff.- Docstring wording on the method/function pair in
settings.go: it mirrors the existingIsSignCheckpointCommitsEnabledpair exactly; deviating would be less consistent, not more.