PR 28144 real dev verification main: 54c5f25249 (github/main) PR: d1ae8dcc920f363ecc6785b043133e7110d8bd15 Chrome: /usr/bin/google-chrome; Playwright 1.60.0 Dev runner: serverPort=16733 webPort=8693; isolated homes Data: actual app-created git project, Codex gpt-6.1-sol turns, UI deletion. No event inserts, timestamp rewrites, fixtures, or mocks. Clock: LD_PRELOAD libfaketime, FAKETIME=+21h then +28h, FAKETIME_DONT_FAKE_MONOTONIC=1, NO_FAKE_STAT=1. System/browser clocks unchanged. Background compaction ran normally after startup delay. Restored normal process time before final turn. read-only SQLite snapshots: node /tmp/db-snapshot.cjs main +28h: {"initialEventCount":164,"afterEventCount":138,"backgroundDeleted":28,"oldAssistant152Retained":true,"floors":[]} PR +21h: {"eventCount":181,"floors":[]} PR +28h: {"beforeEventCount":183,"afterEventCount":102,"backgroundDeleted":81,"allProjectionTablesEqual":true,"projectionTableCount":18,"oldAssistant152Retained":false,"recentAssistant195Retained":true,"floors":[{"thread_id":"8d73d732-e7ab-4913-9085-aeb499a049cd","replay_floor":127},{"thread_id":"9d4d5469-42c0-46c7-a74f-7ad4cabcf92e","replay_floor":159}],"quickCheck":{"quick_check":"ok"}} WebSocket expired-thread: {"error":null,"kinds":["snapshot","synchronized"],"eventSequences":[],"deletionReplayed":false,"enrichmentOnly":false} WebSocket expired-shell: {"error":null,"kinds":["snapshot","synchronized"],"threadSnapshotCount":3,"eventSequences":[],"deletionReplayed":false,"enrichmentOnly":false} WebSocket valid-thread: {"error":null,"kinds":["event","synchronized"],"eventSequences":[160,161,162,163,165,171,172,173,174,175,176,177,179,180,181,182,183,185,186,193,194,195,196,198,199,200,201,203,204,205,206,207,209,210],"deletionReplayed":false,"enrichmentOnly":false} WebSocket valid-shell: {"error":null,"kinds":["snapshot","project.updated","thread.updated","synchronized"],"threadSnapshotCount":0,"eventSequences":[],"deletionReplayed":false,"enrichmentOnly":true} WebSocket deleted-thread: {"error":null,"kinds":["event","synchronized"],"eventSequences":[101,102,103,104,106,108,109,114,123,128,129,130,131,132,133,135,136],"deletionReplayed":true,"enrichmentOnly":false} Resume payloads: live thread expired cursor 134 < floor 159; shell expired cursor 133; valid thread/shell cursor 159; deleted thread cursor 100 < floor 127. UI: cold reopen preserved all original replies and checkpoint diff. Expanded original command output and read marker. Deleted thread absent. After normal-time restart, real Codex read same file and returned AFTER-PRUNE-28144 retention-marker-28144. Blacksmith: vp i && vp test run apps/server/src/orchestration-v2/EventHistoryRetention.test.ts apps/server/src/orchestration-v2/EventHistoryRetentionAnchors.test.ts apps/server/src/ws.eventHistoryRetention.test.ts apps/server/src/persistence/DatabaseStorage.test.ts 4 files, 10 tests passed. No code changes. Not verified: native mobile/Electron shells; other providers; relay/tunnel; native subagent promptSequence production anchors; unfinished legacy imports; an actual concurrent prune/replay overlap; a natural 24h wait. These are not claimed by this runtime pass.