PR #25286 verification, 2026-10-28, Linux Boat VM main: 1f8530ec3c (github/main) PR: 5233847af3c3a64d0d636c683c4a5fd5a8f4b816 main setup: git worktree add ../main github/main; vp i main launch: T3CODE_DEV_SEED=0 setsid nohup timeout 7000 vp run dev [dev-runner] serverPort=16733 webPort=8693 baseDir=/home/user/main/.t3 Stopped captured main process group before starting PR. PR setup: git switch --detach 5233847af3c3a64d0d636c683c4a5fd5a8f4b816; vp i PR launch: T3CODE_DEV_SEED=0 setsid nohup timeout 6100 vp run dev --home-dir /home/user/t3code/.t3 [dev-runner] serverPort=13773 webPort=5733 baseDir=/home/user/t3code/.t3 Both scenarios: project added through the UI, pointing at /home/user/t3code. Chrome from /usr/bin/google-chrome driven by repository Playwright 1.60.0. Composer used Codex gpt-6.1-sol; prompt and final answer match in both captures. Authenticated /ws?orchestrationProtocol=2 command: {type:"message.dispatch", text:"/compact", attachments:[], createdBy:"agent", creationSource:"server", idleCompaction:"beforeCacheExpires", dispatchMode:{type:"start_immediately"}, ...fresh command/message ids and actual thread id} This is the IdleCompactionService dispatch shape. Its Claude-only timer was not exercised. No mock replies, synthetic events, direct database writes, timer patches or demo data. main provider log: 06:10:05.430 outgoing thread/compact/start 06:10:05.475 incoming item/started contextCompaction 06:10:22.046 incoming item/completed contextCompaction main run projection: user run completedAt: 2026-10-28T06:09:24.617Z compaction completedAt: 2026-10-28T06:10:22.135Z after UI Mark unread: 2026-10-28T06:10:22.134Z lastVisitedAt lastVisitedAt < user completion: false; no Done badge (bug reproduced). PR provider log: 06:19:20.828 outgoing thread/compact/start 06:19:20.857 incoming item/started contextCompaction 06:19:33.385 incoming item/completed contextCompaction PR run projection: user run completedAt: 2026-10-28T06:17:42.076Z compaction completedAt: 2026-10-28T06:19:33.418Z after UI Mark unread: 2026-10-28T06:17:42.075Z lastVisitedAt lastVisitedAt < user completion: true; Done badge visible (fix verified). Reopen: Done clears and lastVisitedAt advances to compaction completion. Neighbor: ordinary Mark unread before compaction shows Done; reopen clears it. Neighbor: a subsequent composer turn completed through the same Codex session with "continuation after compaction works." Its Mark unread action also shows Done. Blacksmith command: vp test run apps/server/src/orchestration-v2/runtimeLayer.test.ts -t 'marks unread|visited thread' 1 passed, 89 filtered out; matching case covers automatic compaction and revisit. vp test run apps/server/src/orchestration-v2/runtimeLayer.test.ts -t 'carries the visited watermark' 1 passed, 89 filtered out; normal unread/visit shell behavior. Existing CI: 31 successful, 0 pending, 0 failing at the unchanged PR head. Not verified: Claude automatic idle timer (Claude unauthenticated, Codex has no such timer), other providers, native desktop/mobile, relay/tunnel and multi-device paths.