DL-064
The agent persists its transcript DIRECTLY from inside the container as the session runs: a Compass-owned S3 SessionStorageBackend wrapped in the SDK’s IndexedSessionStorage, injected at the cli.ts composition root via createAgentSession({ sessionManager }); no runner-ships-the-log-after-teardown step exists. The persist model is a SEGMENTED PER-EPOCH LOG — a stable session_id keys the prefix sessions/<session_id>/ and each container lifetime appends only to its own <epoch>.jsonl segment (continuous per-append full-object PUT of that one segment + terminal drain); reconstruction is an S3 LIST of the prefix reconstructed in ascending epoch order with title-slot CHECKPOINT SUPERSESSION — a segment whose first line parses as a title slot is a full-body-rewrite snapshot that supersedes prior epochs (readFull resets its accumulator to it), so SDK-internal compaction rewrites do not double-count (readFull=LIST+reconstruct vs append=single-current-segment asymmetry). Fresh opens <0>.jsonl via SessionManager.open; resume opens the PRIOR latest existing epoch key (context is seeded by the backend readFull=LIST+reconstruct on that existing, indexed key) then repoints the write target to a fresh <max+1>.jsonl via the public captureState/restoreState seams (session-manager.ts:919/939, onDisk:true, needsRewrite:false), so appends land only in the new segment and prior segments stay immutable — NO SDK patch
Status: Superseded by DL-085 (Matt, 2026-07-31)