Skip to content

Canonical Todo presentation checkpoint (2026-09-12)

Moved without content change from typescript-control-plane-migration-v0.md (former section "Canonical Todo presentation checkpoint (2026-09-12)") on 2026-09-26; RFC baseline 3e443ad7c. Checkpoint records live in this ledger, not in the RFC body.

The authority boundary now treats presentation as a first-class projection contract rather than naming it legacy_projection. A shared TS presentation normalizer maps the v0 wire shape's source_section/index to display_section/display_order, while native records derive their display section from domain role/archive state and never receive a fake persisted index. The normalized presentation contract is shared; the wire coordinate is not a second Todo state machine.

Todo creation, terminal successor materialization, projection validation, standing-decision ordering, and archive ordering all use the same presentation owner. The canonical domain validator is shared by both wire shapes, and the v0 record is produced by an adapter from a validated domain record. This unifies the semantic owner without rewriting v0 heads or receipts.

Python read callers now import the semantic owner directly; the compatibility facade is no longer an internal dependency. Python presentation sorting keeps source index order when it is present and uses completion/update time plus Todo identity for native records, so the compatibility shape cannot leak into business eligibility or lifecycle decisions.

The next migration may persist an optional canonical presentation object, but only after proving whether an imported section is provenance or current display intent and after qualifying a stable display-order policy. Until then, native display positions remain derived at the renderer boundary and must not affect authority lifecycle decisions.