docs/plans/2026-04-13-slate-v2-exhaustive-api-contract-recovery-plan.md
Recover every remaining legacy-vs-current API regression in the kept
slate-v2 public surfaces.
This remains the supporting recovery plan for kept public-surface rows.
Current batch order is owned by 2026-04-18-slate-v2-lossless-remaining-work-replan.md, which requires claim-width audit and residue classification before any broader package/source recovery language.
This plan exists because file-level closure was not enough. Name-only helper recovery is not contract recovery.
This plan is not the whole remaining-work story anymore.
Example parity is now a sibling blocker with its own owner:
The current stack overclosed the public-surface lane.
What failed:
mapped-mirroredConcrete known miss family:
Editor.before(...)Editor.after(...)Legacy rows that were overclaimed:
voids: truenonSelectable traversalCurrent shipped surface:
Path | Point | Range{ distance?: number }That is not full legacy parity.
Current progress:
before/after miss family is now recovered:
unitvoidsnonSelectable traversalbeforeafternextpreviouslevelsunhangRangeEditor.nodes/** is now directly proved by
legacy-editor-nodes-fixtures.tsinterfaces/** namespaces are now directly proved by
legacy-interfaces-fixtures.tspositions is now also recovered on the kept editor surface:
unitvoidsexplicit-skipBecause the requested direction is to recover, not just classify:
Legacy truth:
/Users/zbeyens/git/slate/docs/api/**/Users/zbeyens/git/slate/packages/slate/test/**/Users/zbeyens/git/slate/packages/slate-history/test/**Current truth:
/Users/zbeyens/git/slate-v2/docs/**/Users/zbeyens/git/slate-v2/packages/**/Users/zbeyens/git/slate-v2/packages/*/test/**Live control owners:
Add exact audit matrices under docs/slate-v2/ledgers/ for:
slate-editor-api.md (landed)slate-transforms-api.md (landed)slate-interfaces-api.md (landed)slate-history-api.md (landed)slate-react-api.md (landed)Each row must contain:
mapped-mirroredmapped-recoveredmapped-mixedexplicit-skipRecover missing contract width in code and tests for every row that stays in the kept public surface.
After each recovery wave, sync:
Goal:
Primary files:
/Users/zbeyens/git/slate-v2/packages/slate/src/interfaces/editor.ts/Users/zbeyens/git/slate-v2/packages/slate/src/editor.ts/Users/zbeyens/git/slate-v2/packages/slate/test/query-contract.ts/Users/zbeyens/git/slate-v2/docs/api/nodes/editor.mdLegacy families to audit first:
Editor.before/**Editor.after/**Editor.next/**Editor.previous/**Editor.positions/**Editor.nodes/**Editor.levels/**Editor.unhangRange/**Recovery priority:
before/after voidsbefore/after nonSelectableRequired outcomes:
before/after row is either directly proved or explicitly cutvoids stays part of the kept surface, code must accept it for
before/afternonSelectable traversal stays part of the kept surface, code must
consult editor.isSelectable(...) instead of stepping blindlyGoal:
Primary files:
/Users/zbeyens/git/slate-v2/packages/slate/src/transforms-selection/**/Users/zbeyens/git/slate-v2/packages/slate/src/transforms-text/**/Users/zbeyens/git/slate-v2/packages/slate/src/transforms-node/**/Users/zbeyens/git/slate-v2/packages/slate/test/transforms-contract.ts/Users/zbeyens/git/slate-v2/packages/slate/test/operations-contract.ts/Users/zbeyens/git/slate-v2/docs/api/transforms.mdPriority families:
Transforms.move(...)Transforms.delete(...)Transforms.select(...)Transforms.setPoint(...)Transforms.setSelection(...)Rule:
Goal:
Primary files:
/Users/zbeyens/git/slate-v2/packages/slate/src/interfaces.ts/Users/zbeyens/git/slate-v2/packages/slate/src/interfaces/*.ts/Users/zbeyens/git/slate-v2/packages/slate/test/snapshot-contract.ts/Users/zbeyens/git/slate-v2/packages/slate/test/interfaces-contract.tsPriority families:
Location.*Path.*Point.*Range.*Operation.*Rule:
Goal:
slate corePrimary files:
/Users/zbeyens/git/slate-v2/packages/slate-history/src/**/Users/zbeyens/git/slate-v2/packages/slate-history/test/**/Users/zbeyens/git/slate-v2/packages/slate-react/src/**/Users/zbeyens/git/slate-v2/packages/slate-react/test/**/Users/zbeyens/git/slate-v2/packages/slate-dom/src/**/Users/zbeyens/git/slate-v2/packages/slate-dom/test/**Priority:
slate-historyslate-reactslate-domRule:
Goal:
Primary files:
/Users/zbeyens/git/slate-v2/docs/general/replacement-candidate.md/Users/zbeyens/git/slate-v2/packages/*/Readme.mdExit:
Editor.before/after family fully.mapped-mirrored API rows hide narrower accepted arguments, option
bags, return shapes, or behavior widthThe earlier public-surface closure was too optimistic.
The recovery path is not:
The recovery path is: