Issue20534 runtime evidence Base:70e5e384da Fix:a623c6b56b Environment:Linux x86_64, Node24.21.0, node:sqlite, vp dev server and T3 collaborative browser Chromium1280x800. 1. Populated copied state before fix Command: vp run migrate-dev-db; vp run dev (worktree isolated .t3) Paired browser loaded existing stopped threads and a new thread. HTTP shell/bounded requests200. Initial read-only dbstat:396events, correlation index24576bytes. Later app activity: {"events":399,"correlated":83} [{"name":"idx_orch_events_correlation_id","bytes":28672}] [{"name":"idx_orch_events_command_id"},{"name":"idx_orch_events_correlation_id"},{"name":"idx_orch_events_stream_sequence"},{"name":"idx_orch_events_stream_version"},{"name":"idx_orchestration_events_agent_stream_sequence"},{"name":"idx_orchestration_events_application_high_water"},{"name":"idx_orchestration_events_application_sequence"},{"name":"orchestration_events_v2_created_threads_idx"},{"name":"sqlite_autoindex_orchestration_events_1"}] [{"migration_id":67,"name":"WebhookDedupe"},{"migration_id":68,"name":"PeerLinks"},{"migration_id":69,"name":"PeerLinkFence"},{"migration_id":70,"name":"WaitingLinkRequestIndex"}] The copied source has local-fork migration68PeerLinks69PeerLinkFence70WaitingLinkRequestIndex. It was used for reproduction only; the canonical upgrade below does not alter or depend on those records. Live source was never opened read-write. 2. Larger local source read-only inventory 73876events,8196correlated; index2211840bytes, event table359731200bytes. This is not the reporter database and does not validate its43.7MB size. 3. Reporter-style schema-copy insert benchmark Schema/index SQL copied from runtime sqlite_schema; synthetic data only; WAL,synchronous=NORMAL;36000initialrows,2000singleeventtransactions;3300chartextpayload;~8.3percentnon-nullcorrelation IDs;3repetitions. Command: node /tmp/issue20534-bench.mjs {"repeat":0,"arm":"all","perEventTxnMs":0.3709724595,"indexBytes":385024} {"repeat":0,"arm":"no-corr","perEventTxnMs":0.35387803600000006,"indexBytes":0} {"repeat":1,"arm":"all","perEventTxnMs":0.34959216950000066,"indexBytes":385024} {"repeat":1,"arm":"no-corr","perEventTxnMs":0.3240690705000006,"indexBytes":0} {"repeat":2,"arm":"all","perEventTxnMs":4.193374060500001,"indexBytes":385024} {"repeat":2,"arm":"no-corr","perEventTxnMs":1.2149916345000003,"indexBytes":0} VM timings varied substantially; no reliable percentage or end-to-end performance improvement claimed. 4. Regression red result Commit5dedf455d1; vp test run src/persistence/Migrations.test.ts (apps/server). 1failed7passed FAIL runMigrations > drops the unused correlation index and keeps correlation values AssertionError: expected indexNames to not include idx_orch_events_correlation_id Migrations.test.ts:100 5. Canonical runtime upgrade Prepared new isolated /tmp/issue20534-canonical/userdata/statev2.sqlite using real runMigrations({toMigrationInclusive:67}) and NodeSqliteClient. Before: {"events":0,"correlated":0} [{"name":"idx_orch_events_correlation_id","bytes":4096}] [{"name":"idx_orch_events_command_id"},{"name":"idx_orch_events_correlation_id"},{"name":"idx_orch_events_stream_sequence"},{"name":"idx_orch_events_stream_version"},{"name":"idx_orchestration_events_agent_stream_sequence"},{"name":"idx_orchestration_events_application_high_water"},{"name":"idx_orchestration_events_application_sequence"},{"name":"orchestration_events_v2_created_threads_idx"},{"name":"sqlite_autoindex_orchestration_events_1"}] [{"migration_id":67,"name":"WebhookDedupe"}] Command: vp run dev --home-dir /tmp/issue20534-canonical migrations: [ '68_DropOrchestrationEventCorrelationIndex' ] [23:37:22.547] INFO (#6436): Listening on http://127.0.0.1:15398 Paired real web client loaded New thread and created a thread. No provider turn was started. Read-only post-start inventory: {"events":4,"correlated":4} [] [{"name":"idx_orch_events_command_id"},{"name":"idx_orch_events_stream_sequence"},{"name":"idx_orch_events_stream_version"},{"name":"idx_orchestration_events_agent_stream_sequence"},{"name":"idx_orchestration_events_application_high_water"},{"name":"idx_orchestration_events_application_sequence"},{"name":"orchestration_events_v2_created_threads_idx"},{"name":"sqlite_autoindex_orchestration_events_1"}] [{"migration_id":67,"name":"WebhookDedupe"},{"migration_id":68,"name":"DropOrchestrationEventCorrelationIndex"}] The index is absent after migration68; four real app events with correlation values are present; all other event indexes remain. 6. Green validation 33tests across Migrations, preview reconciliation, event store+sequence, initializeV2Database, LegacyV1ThreadImporter and LegacyV1Cutover pass. Targeted lint and apps/server typecheck pass. Affected visual fixture matrix: empty; no render-path changes. No client-specific change; desktop/Android native runs not required for this server-only migration. Large populated canonical upgrade timing not measured; preserved existing values proven by regression test.