docs/research/sources/editor-architecture/slate-v2-local-proof-substrate.md
Compile the local Slate v2 evidence that already supports the overlay rewrite.
createSlateProjectionStore(...) already projects ranges into runtime-id
keyed slices with local subscription.projection-store.ts already has partial source controls:
dirtiness, runtimeScope, sourceId, targeted refresh, source
subscribers, runtime subscribers, and recompute metrics.Bookmark already exists as a public durable-anchor noun.idToPath / pathToId runtime indexes.Editor.getDirtyPaths(...) already exists as a rough operation-to-path
dirtiness primitive.annotation-store-contract.tsx and widget-layer-contract.tsx prove the
annotation/widget lanes are real, not just docs claims.projection-store.ts calls the source against the full snapshot, and
range-projection.ts collects text entries across the snapshot before
projecting a range.decoration-sources.ts or
use-slate-decoration-sources.tsx layer. Decoration source behavior lives in
the lower-level projection store.Local v2 already proves:
So the architecture work is a hardening/surface-design problem, not a blank sheet.
The snapshot and test evidence shows runtime ids surviving moves and property changes where paths do not stay stable as public identity.
That directly supports cutting public path-based widget anchors.
The local Bookmark type is already much closer to the honest public durable
anchor than exposing raw live-ref state as the main API.
The local proof substrate is strong at the subscription edge.
It is weaker at source-scoped recompute:
That is why the next perf architecture tranche belongs below React, not in another hook wrapper.
The current live source keeps the original conclusion intact and sharpens it:
The next review should decide whether public Slate React should expose decoration/annotation/widget source APIs above the projection store, while the runtime keeps projection as internal transport.