Reproduction
On MemPalace 3.9.0 and current develop (f9297a2), import a synthetic Codex JSONL transcript in --mode convos:
- A user/assistant exchange at
2026-09-09T09:00:00Z/09:00:01Zrecords a decision. - Append a second exchange at
10:00:00Z/10:00:01Zexplicitly superseding it, then re-mine. - Inspect the original drawer:
authored_athas changed from09:00:01Zto10:00:01Z. Both old and new decisions now carry the latest transcript date.
convo_miner._extract_authored_at() deliberately returns the maximum timestamp for the whole source. _file_chunks_locked() assigns it to every chunk. Normalization returns plain strings, losing message timestamps before exchange chunking, so search cannot recover exchange chronology from that field.
Expected behavior and proposed scope
Keep each exchange's provenance through normalization and chunking. A drawer should retain the time of the source messages it contains when later turns are appended. For a split exchange, all fragments retain that exchange's provenance. For content spanning messages, document whether authored_at means first or last contributing message; optionally expose the start/end range. Preserve stable message/session identifiers when available.
Do not infer message time from import time, filename, or today's filesystem when it is absent. For legacy stored drawers, retain explicit unknown/transcript-level provenance until a controlled re-mine can recover the original source timestamps. Original text should remain untouched.
This likely needs a small metadata-carrying normalization result rather than assigning timestamps by searching for text or counting > markers (both fail for repeated text and quoted/code content). I am opening the design question before proposing that API change, per CONTRIBUTING.
Relationship to existing work
- #1889 / #1890 introduced transcript-level chronology, which is useful but does not preserve individual exchange dates.
- #2453 exposes date provenance; its stated scope preserves existing timestamp values and does not solve this case.
- #2408 improves changed-transcript re-mining; timestamp identity should remain stable on metadata-only updates too.
Acceptance cases
- Appending a new exchange leaves existing exchange timestamps unchanged.
- Old and superseding decisions retain distinct source timestamps.
- Split exchanges, repeated identical text, mixed legacy/current Codex events, and Claude user/assistant events preserve correct provenance.
- Missing/invalid timestamps remain explicitly unknown rather than acquiring another exchange's date.
- Repair of existing data is retryable and cannot discard old drawers before replacement succeeds.
This was reproduced with synthetic content only. No personal session dumps are attached.
Activity
0No activity yet.