A deleted memory was rebuilt from retained conversation history.
A deleted memory stays deleted through later sessions and ingestion cycles, even though the conversation it was derived from is still retained. New, unrelated content is ingested normally.
The marker was absent right after deletion and reappeared via search, read_by_id, profile after start_session, without being sent again.
Afterlife
Every step a synthetic marker went through after it was written. Absence is only counted after deletion was confirmed, and a reappearance is attributed to the lifecycle event that preceded it.
Deleted, confirmed absent, then retrievable again after start session (event 7). Contract tested: memory record deletion.
- 1 · Createdrecord conversation2 message(s) retained
- 2 · Createdconsolidateconsolidation: 2 message(s) processed, 1 memory(ies) derived
- 3 · Controlsearchderived memory retrievable by its owner
- 4 · Deleteddelete1 derived memory(ies) deleted; conversation retained
- 5 · Checkedimmediate checkmarker absent from every checked surface
- 6 · Eventstart sessionsession start: 2 message(s) processed, 1 memory(ies) derived
- 7 · Observedafter new session+1 msmarker visible on search, read_by_id, profile (first reappearance)
memtru test --scenario MT-AF-002 · memtru demo --afterlifeEvidence
Steps recorded by the CLI for MT-AF-002 v1.0.0. Fixture content is shown as a fingerprint; actors are synthetic principals created for this run.
| # | Action | Actor | Detail | Outcome |
|---|---|---|---|---|
| 1 | lifecycle | tenant-a/user-a/session-1 | record_conversation: 2 message(s) retained | executed |
| 2 | lifecycle | tenant-a/user-a/session-1 | consolidate: consolidation: 2 message(s) processed, 1 memory(ies) derived | executed |
| 3 | assert | - | positive control | held |
| 4 | search | tenant-a/user-a | query sha256:7acb55e5f472 | 1 result(s); fixture present |
| 5 | assert | - | positive control | held |
| 6 | delete | tenant-a/user-a | mem_000006 | request accepted |
| 7 | search | tenant-a/user-a | query sha256:7acb55e5f472 | 0 result(s); fixture absent |
| 8 | read_by_id | tenant-a/user-a | mem_000006 | not found |
| 9 | inspect | tenant-a/user-a | surface profile | 0 result(s) |
| 10 | lifecycle | tenant-a/user-a/session-2 | start_session: session start: 2 message(s) processed, 1 memory(ies) derived | executed |
| 11 | search | tenant-a/user-a | query sha256:7acb55e5f472 | 1 result(s); fixture present |
| 12 | read_by_id | tenant-a/user-a | mem_000006 | not found |
| 13 | read_by_id | tenant-a/user-a | mem_000007 | returned fixture |
| 14 | inspect | tenant-a/user-a | surface profile | 1 result(s) |
Reproduction
- Record a conversation in which the user asks to remember a unique synthetic marker.
- Run ingestion and confirm the derived memory is retrievable.
- Delete the derived memory and confirm the marker is no longer retrievable.
- Start a new session and inspect every retrieval surface.
- Record an unrelated message, run ingestion, confirm it was ingested, and inspect every retrieval surface again.
- Reproduce locally: memtru demo --afterlife (fault history_reingestion).
memtru test --scenario MT-AF-002Potential causes
Hypotheses to investigate. None of these is confirmed by the test.
- hypothesisSession start rebuilds the user profile from the full conversation history.
- hypothesisConsolidation re-extracts every retained message instead of only new ones.
- hypothesisDeduplication compares against active memories only, so a deleted fact looks new.
Suggested remediation
- When a derived memory is deleted, tombstone its source so extraction never derives it again, or redact the source messages.
- Make session-start and consolidation jobs incremental, or have full rebuilds honour deletion tombstones.
- Treat retained conversation history as personal data covered by the same deletion request.
Limitations
- Observes the retrieval surfaces the adapter exposes (search, read by id and any declared lifecycle surfaces). It is not proof that backups, replicas, logs, embeddings or other unobservable copies were erased.
- Covers the lifecycle events the adapter declares. Events the system has but does not expose as hooks (for example a nightly job) are not exercised.
- A PASS holds for the configured consistency window after each event, not for every timing.
- Ingestion is driven through the adapter's hooks; extraction quality of a real model is out of scope. The marker is never sent again after deletion.
Identifiers
- finding
- MTF-1bc6d116-AF-002
- fingerprint
- MT-AF-002:history_reingestion_resurrected:94bc29581507
- category
- resurrection
- detected
- 23 Oct 2026, 10:34 UTC