Conversation
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: unavailable · PR result: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a focused migration-state bug fix that adds startup validation for conflicting V2 IDs while preserving compatible migration paths. Regression tests cover fresh databases, collisions, site-local earlier migrations, and newer V2 histories; the remaining change is documentation. Notes:
You can add or adjust custom eligibility rules. Learn more. |
Dismissing prior approval to re-evaluate 872ff2f
The migrator skips every id up to the highest recorded one without checking names. If a database recorded another migration at 55 (for example a future main release), V2 skipped its own schema migration and then crash-looped on "no such column: application_event_version". Check V2's ids before migrating and fail with one error naming the clashing ids. Lower ids keep the warning, since real databases carry site-local migrations there and still work. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Refine pass: one flag gates both preview reconciliation and the V2 id check. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
872ff2f to
269ac28
Compare
Dismissing prior approval to re-evaluate 269ac28
If a database already has a different migration recorded at id 55, for example because
mainships its own migration 55 before V2 lands, V2 silently skips its ownOrchestrationV2schema migration. The server then crash-loops on every start withno such column: application_event_version, and the only clue is a warning that already appears in the logs.This happens because the migrator skips every id up to the highest one it has recorded and never checks the names.
runMigrationsnow checks V2's ids (55 and up) before migrating. If any would be skipped, startup stops with one error that names them, and nothing is migrated. Lower ids keep the existing warning only: #11639 found a real user database with a site-local migration there that still works, and it has to keep booting. A database that a newer V2 build migrated further, such as one with an extra 57, still starts.Before, on a copy of real data with a fake
55_FutureMainMigrationrow:Migration 56 had also been applied to the broken database.
After, with the same copy:
The database was left untouched. An unmodified copy of the same data boots normally.
This doesn't make a clashing database usable. It turns a cryptic crash loop into an error we can act on. The real protection is to number
main's migrations above V2's before either ships. Related: #8896 and #9312, which address the same trap for id 45 onmain.Model: Claude Opus 5.5 (Claude Code)
🤖 Generated with Claude Code