Summary
A long-lived CLI chat session becomes unloadable once its events.jsonl grows large. The loader appears to read/replay the entire event log on open, so a heavily-reused session eventually fails to load. Reuse + pinning is the intended workflow, so this hits the sessions people care about most.
Impact
- A reused session ran for weeks and became impossible to open.
events.jsonl reached ~460 MB / ~147k lines across 544 compactions.
- On open the app loops: load → fail → append
sessionEnd hooks → repeat, so the file keeps growing during failed loads.
- User-visible: "can't get it to load," accumulated context appears lost.
Root cause
events.jsonl is append-only and is never rotated or capped.
- Compaction shrinks the model context but does not shrink the on-disk log.
- It is not a few giant lines: lines >200 KB total only ~23 MB (largest ~775 KB). The remaining ~435 MB is the sheer count of ordinary events, so the loader must not depend on full-log size.
Repro
- Reuse one session for many days (hundreds of compactions).
- Let
events.jsonl exceed a few hundred MB.
- Reopen — load hangs/fails; file grows on each retry.
Workaround (reversible)
Trim events.jsonl to the last few compaction cycles (keep session.start + tail): ~35 MB / ~11.6k lines loaded fine, full log preserved as backup.
Proposed fixes
- Tail-load on open from the latest compaction boundary; don't replay the whole file.
- Cap + rotate
events.jsonl (roll past a threshold; keep N recent cycles; archive the rest).
- Stop the failure loop — don't append
sessionEnd on failed load; expire/release the stale inuse.<pid>.lock.
- Optional: keep heavy assets out of the event stream (store as files referenced by path).
Acceptance
A session reused for weeks (hundreds of compactions) opens reliably without manual trimming.
Summary
A long-lived CLI chat session becomes unloadable once its
events.jsonlgrows large. The loader appears to read/replay the entire event log on open, so a heavily-reused session eventually fails to load. Reuse + pinning is the intended workflow, so this hits the sessions people care about most.Impact
events.jsonlreached ~460 MB / ~147k lines across 544 compactions.sessionEndhooks → repeat, so the file keeps growing during failed loads.Root cause
events.jsonlis append-only and is never rotated or capped.Repro
events.jsonlexceed a few hundred MB.Workaround (reversible)
Trim
events.jsonlto the last few compaction cycles (keepsession.start+ tail): ~35 MB / ~11.6k lines loaded fine, full log preserved as backup.Proposed fixes
events.jsonl(roll past a threshold; keep N recent cycles; archive the rest).sessionEndon failed load; expire/release the staleinuse.<pid>.lock.Acceptance
A session reused for weeks (hundreds of compactions) opens reliably without manual trimming.