docs/plans/2026-04-10-slate-v2-full-diff-topology-ralplan.md
Stop rediscovering the same topology and drift decisions every turn.
This plan is the one durable owner for:
packages/slate/src/** topology workThe live /Users/zbeyens/git/slate-v2 diff still spans:
packages/slate/** source topology and deleted testspackages/slate-react/** recovered runtime surface plus deleted-family cutspackages/slate-history/** recovered package surface plus deleted testspackages/slate-dom/** package residue and deletionsplaywright/integration/examples/** and site/examples/**The roadmap/ledger already treat these as closed:
packages/slate/test/**packages/slate-react/** deleted-family closurepackages/slate-history/** package closureplaywright/integration/examples/**site/examples/ts/**site/examples/js/**Inside packages/slate/src/**, these topology lanes are already materially
fixed:
core.ts dissectiontransforms-selection/**transforms-node/**transforms-text/**interfaces foundation slice:
pathpointrangelocationpath-refpoint-refrange-reftextelementoperationscrubberinterfaces heavy slice:
editornodeeditor/*.ts public owner restorationFresh scan against packages/slate/src/**:
0 files under
/Users/zbeyens/git/slate-v2/packages/slate/src/editor
still do export * from '../editor'0 heavy interface files still do export * from '../interfaces'0 interface barrel files still do aggregate wildcard reexportsKeep one explicit aggregate surface per domain when it is honest:
Rule:
Do not keep fake-owner path files that only point back to the aggregate:
editor/*.ts -> not acceptableinterfaces/editor.ts -> not acceptableinterfaces/node.ts -> not acceptableThese can stay only if rewritten as explicit exports, not wildcard wrappers:
interfaces honestlyScope:
Target shape:
editor.ts owns the Editor interface and editor-adjacent option/entry typesnode.ts owns Node, Ancestor, NodeEntry, NodeMatch, node option
types, mutable helpers, and the Node namespaceinterfaces.ts becomes the honest explicit surfaceinterfaces/index.ts and interfaces/transforms/* become explicit export
surfaces or get cut if they add no valueStatus:
editor.ts back into method ownersScope:
56 fake-owner files under
/Users/zbeyens/git/slate-v2/packages/slate/src/editorOrder inside the lane:
edges, start, end, path, point, range, fragment, stringabove, first, last, leaf, node, nodes, levels, next,
previous, parentis-*, has-*, get-void, element-read-only, marksadd-mark, remove-mark, insert-*, delete-*, normalize,
set-normalizing, without-normalizingpath-ref, path-refs, point-ref, point-refs, range-ref,
range-refsTarget shape:
editor.ts = explicit aggregate surface onlyStatus:
src/editor/*.ts public owner files are restored and compilededitor/index.ts is an explicit barrel noweditor.ts is duplicate inline delegator removal,
not missing owner restorationAfter phases 1 and 2:
export * from '../editor' or export * from '../interfaces'
in fake-owner paths gets removed or convertedScan every remaining modified family and classify each as:
Families to review explicitly:
packages/slate-dom/**packages/slate-react/**packages/slate-history/**playwright/integration/examples/**site/examples/ts/**site/examples/js/**Rule:
pr-description.mdAfter every completed batch:
Always run a narrow same-turn compile over:
Use:
yarn exec tsc --noEmit --skipLibCheck --target es2022 --module esnext --moduleResolution bundler ...
Escalate from narrow compile to broader package checks when the slice changes live behavior materially:
yarn workspace slate run testeditor/*.ts wrappers remaininterfaces/editor.ts or interfaces/node.ts wrappers remaininterfaces.ts, core.ts, editor.ts, and transforms-*.ts are honest
aggregate surfaces onlypr-description.md explains surviving drift concretely