PR 28111 runtime verification main: 61cb845d9699d0ecce5a9b660d3b32907914df8b head: b4fe276485c851e55b9e2e0dc751f8b7fe5fd874 Linux; vp run dev; isolated homes; Playwright 1.60 + /usr/bin/google-chrome. Real app-created projects and Codex gpt-6.1-sol turns. No transcript contents or usage timestamps fabricated. For the age cutoff, changed one completed task-owned transcript file mtime to 120 days ago. Temporarily moved that file outside the provider scan directory to exercise transcript cleanup. Restored that original file and its original mtime afterward. Main: server.updateSettings({patch:{usageHistoryRetentionDays:365}}) returned Success but omitted the setting. Main: cache did not retain the 120-day-mtime real transcript despite requested 365 days. PR: authenticated server.getUsageSummary({sinceDay:"2020-01-01",untilDay:"2026-11-10",timeZone:"UTC",awaitRefresh:true}) and server.updateSettings via actual WebSocket API. {"check":"retention 365 accepted","result":"Success","value":365} {"check":"365-day full-history read","result":"Success","sessions":3} {"check":"365 retains unavailable real transcript","result":"Success","sessions":3} {"check":"restart with source transcript absent","result":"Success","sessions":3} {"check":"lowering to default 92 prunes unavailable 120-day-old file","setting":92,"sessionsAfterScan":2,"sessionsNextRead":2} {"check":"widening cannot recover pruned unavailable transcript","setting":"unlimited","sessions":2} {"check":"unlimited recovers still-available provider transcript","result":"Success","sessions":3} {"check":"invalid retention settings preserve history","result":"Success","sessions":3} {"check":"invalid settings safe fallback","result":"Success","retention":"unlimited","continueThreads":false} {"check":"large positive retention and one-day pruning","largeSetting":36500,"largeRead":"Success","largeSessions":3,"shortSetting":1,"shortRead":"Success","shortSessions":3} {"check":"invalid RPC values rejected, valid 365 restored","zero":"Failure","negative":"Failure","fraction":"Failure","restored":365} {"check":"365-day retention","cached":true,"records":1,"mtime":"2026-07-13T11:38:26.133Z"} {"check":"one-day retention","cached":false} Real responses rendered in web client: RETENTION_MAIN_OK, RETENTION_PR_OK, RETENTION_AFTER_SETTINGS_OK. Usage tokens and 90-day selector remained usable after retention changes and restart. 125 focused tests passed on Blacksmith. vp run check:changed 3fa57b92a238cdd8e079af925b673b2f99618b98 passed on Blacksmith: format, lint, knip, graphql, typecheck (36 packages), 160 tests. The initial check command lacked history on the snapshot worker; fetched the exact head at depth 2 and reran successfully. No source changes, commits, or pushes. Unverified: Cursor external API/backfill, real Claude transcript cleanup, live retention races, native mobile/desktop, relay/tunnel. The proxy supports real Codex turns but its account rate-limit read returns JSON-RPC -32600.