github / github/app

Long-lived sessions become unloadable: events.jsonl never capped/rotated, replayed in full on open

Ouverte
#1,487 1 commentaire 2 réactions 0 personnes assignées Voir sur GitHub
Bugs
Langage dominant
Aucune donnée de langage
Étoiles
2.1k
Forks
153
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

## 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
1. Reuse one session for many days (hundreds of compactions).
2. Let `events.jsonl` exceed a few hundred MB.
3. 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
1. **Tail-load on open** from the latest compaction boundary; don't replay the whole file.
2. **Cap + rotate** `events.jsonl` (roll past a threshold; keep N recent cycles; archive the rest).
3. **Stop the failure loop** — don't append `sessionEnd` on failed load; expire/release the stale `inuse..lock`.
4. 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.

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez par localiser le chargeur de session et la gestion du journal d’événements pour events.jsonl, puis suivez les limites de compaction, les hooks de sessionEnd et la gestion de stale inuse .lock. Reproduisez si possible l’échec avec un journal volumineux et utilisez la condition d’acceptation indiquée — après des semaines de réutilisation et des centaines de compactions, la réouverture doit être fiable sans troncature manuelle — comme vérification de fin.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Domaine
cli, desktop
Type d'issue
Bug
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
Calme
Clarté
Plutôt claire
Accessibilité débutants
42/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.