Back to Plate

Slate v2 Live Shape Register

docs/slate-v2/references/live-shape-register.md

53.0.63.4 KB
Original Source

Slate v2 Live Shape Register

Reference doc. Not a live queue owner. For current queue and roadmap truth, see ../master-roadmap.md.

Purpose

Named register for allowed non-canonical live shapes in the True Slate RC program.

This exists so maintainers can audit:

  • why a non-canonical shape is allowed
  • where it is allowed
  • what boundary canonicalizes it
  • which proof rows keep it safe

Rule

If a live shape is not listed here, it is not an allowed intentional exception.

Allowed Non-Canonical Live Shapes

1. Adjacent compatible text siblings in inline-style containers

Why it exists:

  • forcing live text coalescing after ordinary edits kept breaking split/merge and delete proof
  • the better value is to keep live editing stable and canonicalize only when the caller asks for heavier cleanup

Where it is allowed:

  • ordinary committed snapshots
  • ordinary live transactions
  • inline-style containers only

What canonicalizes it:

  • explicit Editor.normalize()
  • import/load boundaries when app code chooses to normalize
  • app-owned custom normalizeNode(...)

Proof rows:

2. Block-wrapper descendants inside inline-style containers

Why it exists:

  • broad live flattening kept breaking mixed-inline clipboard and runtime proof
  • the better value is to keep the default live path safe and flatten only on explicit canonicalization boundaries

Where it is allowed:

  • ordinary committed snapshots
  • ordinary live transactions
  • inline-style containers, outside the direct-child node-op seam that is already proved safe to flatten

What canonicalizes it:

  • explicit Editor.normalize()
  • import/load boundaries when app code chooses to normalize
  • app-owned custom normalizeNode(...)

Proof rows:

Not Allowed By Default

These are explicitly outside the default live contract unless reopened with a better design and fresh proof:

  • broad always-on live inline-container coercion
  • broad always-on live adjacent-text cleanup
  • blanket child-family coercion as a general invariant