Surfaced by the #410 implementation (PR #438): the premise "the session file preserves what compaction discards" is FALSE in graff — .graff/sessions/<name>.session.json is a single JSON object whose messages array is rewritten in place after compaction. The next autosave permanently drops the pre-compaction history. Prime-agent's "grep your own conversation log" property (the model recovering any detail compaction summarized away) therefore has no graff equivalent today; the traces/trajectories JSONLs serve telemetry, not recall.
Proposal: an append-only transcript log per durable session — .graff/sessions/<name>.transcript.jsonl — one line per message as it first enters history, never rewritten, unaffected by compaction. The #410 prompt line then gains a second path: the resume artifact (current truth) and the transcript (full history, greppable). Compaction summaries could even cite it ("full detail for this span in the transcript").
Bounds: same session lifecycle as artifacts (#409's sweep), size cap with head-truncation or rotation, subagents excluded (history never persisted). Cheap to write (append at the same point autosave observes a new message); the win is that post-compaction "what did that error say exactly?" becomes a grep instead of a lost cause.
Surfaced by the #410 implementation (PR #438): the premise "the session file preserves what compaction discards" is FALSE in graff —
.graff/sessions/<name>.session.jsonis a single JSON object whosemessagesarray is rewritten in place after compaction. The next autosave permanently drops the pre-compaction history. Prime-agent's "grep your own conversation log" property (the model recovering any detail compaction summarized away) therefore has no graff equivalent today; the traces/trajectories JSONLs serve telemetry, not recall.Proposal: an append-only transcript log per durable session —
.graff/sessions/<name>.transcript.jsonl— one line per message as it first enters history, never rewritten, unaffected by compaction. The #410 prompt line then gains a second path: the resume artifact (current truth) and the transcript (full history, greppable). Compaction summaries could even cite it ("full detail for this span in the transcript").Bounds: same session lifecycle as artifacts (#409's sweep), size cap with head-truncation or rotation, subagents excluded (history never persisted). Cheap to write (append at the same point autosave observes a new message); the win is that post-compaction "what did that error say exactly?" becomes a grep instead of a lost cause.