You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#4351 cut the product over to SessionTodo, but intentionally retained the legacy Task Ledger replay, codecs, tests, and tables for lazy migration and rollback. A SessionTodo document is materialized only when a Session first reads Todo: pending/in-progress Tasks are imported, blocked Tasks become pending, and even an empty document is persisted.
Consequently, directly deleting the legacy tables or replay code would strand old Sessions that have not yet reached readOrBootstrap. #4420 separately repairs the persisted Runtime Host access grant transition from task.ledger.query to session.todo.query; it does not materialize legacy Task data.
Desired outcome
After an explicitly chosen migration window, supported State Roots reach a durable SessionTodo document without any runtime dependency on legacy Task Ledger state. Then remove the retired implementation and database storage without reintroducing a dual writer or a dual product surface.
Scope and acceptance criteria
Define the supported pre-retirement State Root/version boundary and the backup, restore, and downgrade policy.
Define and test a deterministic final migration for eligible Sessions that have no SessionTodo document yet, including initialized-empty semantics and the existing blocked-to-pending mapping.
Remove legacy Task Ledger replay, codecs, stores, operational-backup handling, tests, and SQLite tables only after the final migration is proven.
Verify no remaining production consumer exposes task_ tools, task.ledger.query, the legacy Task change feed, or a Task Ledger UI projection.
Add upgrade, backup/restore, removal, and unsupported-downgrade regressions for the final boundary.
Non-goals
Do not change the SessionTodo contract: it remains a Host-owned current snapshot, read explicitly with todo_read and replaced atomically with todo_write.
Do not restore Task identity, mutation history, revision/CAS, turn-tail injection, task-to-subagent binding, claim/settle, or a compatibility switch.
AI assistance disclosure: Codex helped derive the migration and compatibility acceptance criteria from the merged SessionTodo cutover. I reviewed the scope and own the final position.
Problem
#4351 cut the product over to SessionTodo, but intentionally retained the legacy Task Ledger replay, codecs, tests, and tables for lazy migration and rollback. A SessionTodo document is materialized only when a Session first reads Todo: pending/in-progress Tasks are imported, blocked Tasks become pending, and even an empty document is persisted.
Consequently, directly deleting the legacy tables or replay code would strand old Sessions that have not yet reached readOrBootstrap. #4420 separately repairs the persisted Runtime Host access grant transition from task.ledger.query to session.todo.query; it does not materialize legacy Task data.
Desired outcome
After an explicitly chosen migration window, supported State Roots reach a durable SessionTodo document without any runtime dependency on legacy Task Ledger state. Then remove the retired implementation and database storage without reintroducing a dual writer or a dual product surface.
Scope and acceptance criteria
Non-goals
Related
AI assistance disclosure: Codex helped derive the migration and compatibility acceptance criteria from the merged SessionTodo cutover. I reviewed the scope and own the final position.