docs/plans/2026-04-07-slate-v2-remaining-release-hardening-plan.md
Supporting plan. For current queue and roadmap truth, see master-roadmap.md.
Current state is not release-grade by the standard the user asked for.
False today:
True today:
/Users/zbeyens/git/slate-v2 is a credible replacement candidate for a proved
default surfaceslate has 1069 test files;
current v2 slate has 3.It matches the evidence. Anything broader is fantasy; anything narrower just kicks the can.
Use a seven-workstream release-hardening program, executed in strict order, to
decide whether slate-v2 can claim release-grade confidence for the proved
default surface:
SlateEditableBlockswithHistory(createEditor())Go, freeze docs and ship.No-Go, publish the blocker set and cut the claim.Status:
Purpose:
Slate + EditableBlocks + withHistory(createEditor())Dependencies:
Likely files:
/Users/zbeyens/git/plate-2/docs/slate-v2/release-readiness-decision.md/Users/zbeyens/git/plate-2/docs/slate-v2/archive/full-replacement-blockers.md/Users/zbeyens/git/plate-2/docs/slate-v2/replacement-gates-scoreboard.md/Users/zbeyens/git/slate-v2/docs/general/replacement-candidate.mdRequired decisions:
Target A: release-grade confidence for the proved default surfaceTarget B: honest full replacementChosen default for planning:
Target AVerification commands:
yarn test:mochayarn workspace slate-react run testyarn test:replacement:compat:localAcceptance criteria:
Target B remains documented only as a later claim with blocker listExit criteria:
slate SurfaceStatus:
Purpose:
Dependencies:
Likely source files:
/Users/zbeyens/git/slate/packages/slate/test/transforms/delete/**/Users/zbeyens/git/slate/packages/slate/test/transforms/move/**/Users/zbeyens/git/slate/packages/slate/test/transforms/wrapNodes/**/Users/zbeyens/git/slate/packages/slate/test/transforms/unwrapNodes/**/Users/zbeyens/git/slate/packages/slate/test/transforms/liftNodes/**/Users/zbeyens/git/slate/packages/slate/test/interfaces/Editor/**Likely target files:
/Users/zbeyens/git/slate-v2/packages/slate/test/snapshot-contract.ts/Users/zbeyens/git/slate-v2/packages/slate/test/range-ref-contract.ts/Users/zbeyens/git/slate-v2/packages/slate/test/clipboard-contract.ts/Users/zbeyens/git/plate-2/docs/slate-v2/archive/oracle-harvest-ledger.mdExecution batches:
delete, move, Editor.before, Editor.afterselect, setPoint, collapse, setSelection, deselectwrapNodes, unwrapNodes, liftNodesRules:
Acceptance criteria:
slate helper family has harvested oracle casesTarget AVerification commands:
yarn test:mochaExit criteria:
slate surface is mostly defended by imported oracle semantics,
not custom happy-path proofsNon-blocking rule:
Target A do not block Workstream 4 startPurpose:
slateDependencies:
Likely files:
/Users/zbeyens/git/slate-v2/packages/slate-react/test/runtime.tsx/Users/zbeyens/git/slate-v2/packages/slate-history/test/history-contract.ts/Users/zbeyens/git/slate-v2/packages/slate-dom/test/**/Users/zbeyens/git/slate-v2/packages/slate-browser/test/**/Users/zbeyens/git/slate-v2/playwright/integration/examples/**Execution batches:
slate-react stable editor/reset/selection behaviorslate-history save/merge/reset behavior on the already-claimed transform
familiesslate-dom selection/clipboard/bridge behaviorslate-browser only for already-claimed automation surfacesAcceptance criteria:
Verification commands:
yarn test:mochayarn workspace slate-react run testyarn workspace slate-dom testyarn test:slate-browser:e2e:localyarn test:slate-browser:ime:localyarn test:slate-browser:anchorsExit criteria:
Status:
Purpose:
Dependencies:
Minimum anchor stack required to start:
/Users/zbeyens/git/slate-v2/packages/slate-react/test/runtime.tsx/Users/zbeyens/git/slate-v2/packages/slate-history/test/history-contract.ts/Users/zbeyens/git/slate-v2/playwright/integration/examples/rich-inline.test.ts/Users/zbeyens/git/slate-v2/packages/slate/test/clipboard-contract.ts/Users/zbeyens/git/slate-v2/packages/slate-dom/test/bridge.tsAnchor stack:
SlateEditableBlockswithHistory(createEditor())Likely files:
/Users/zbeyens/git/slate-v2/playwright/integration/examples/rich-inline.test.ts/Users/zbeyens/git/slate-v2/packages/slate-react/test/runtime.tsx/Users/zbeyens/git/slate-v2/packages/slate-history/test/history-contract.ts/Users/zbeyens/git/slate-v2/packages/slate/test/clipboard-contract.tsProof lanes:
Acceptance criteria:
Verification commands:
yarn test:mochayarn workspace slate-react run testyarn workspace slate-dom testyarn test:slate-browser:e2e:localyarn test:slate-browser:ime:localyarn test:slate-browser:anchorsyarn test:replacement:compat:localExit criteria:
Current proof read:
rich-inline now carries one direct browser proof stack for:
Start condition:
Status:
Purpose:
Target ADependencies:
Likely files:
/Users/zbeyens/git/slate-v2/scripts/**/Users/zbeyens/git/slate-v2/playwright/integration/examples/**/Users/zbeyens/git/plate-2/docs/slate-v2/replacement-gates-scoreboard.mdCandidate added lanes if stronger wording is retained:
Valid exits:
Chosen exit:
2Acceptance criteria:
Verification commands:
yarn bench:replacement:placeholder:localyarn bench:replacement:huge-document:localExit criteria:
Purpose:
Dependencies:
Likely files:
/Users/zbeyens/git/slate-v2/Readme.md/Users/zbeyens/git/slate-v2/docs/general/replacement-candidate.md/Users/zbeyens/git/plate-2/docs/slate-v2/release-readiness-decision.md/Users/zbeyens/git/plate-2/docs/slate-v2/archive/full-replacement-blockers.md/Users/zbeyens/git/plate-2/docs/slate-v2/replacement-gates-scoreboard.mdMust answer plainly:
Required comparison-only and later handling:
richtextmarkdownforced-layoutstylinghovering-toolbartablesembedseditable-voidsimagesscroll-into-viewAcceptance criteria:
scroll-into-view is explicitly kept intentionally later, not half-claimedVerification commands:
yarn test:replacement:compat:localyarn bench:replacement:placeholder:localyarn bench:replacement:huge-document:localExit criteria:
Status:
Target A: GoTarget B: No-GoPurpose:
Go or No-Go without bullshitDependencies:
Likely files:
/Users/zbeyens/git/plate-2/docs/slate-v2/release-readiness-decision.md/Users/zbeyens/git/plate-2/docs/slate-v2/replacement-gates-scoreboard.md/Users/zbeyens/git/plate-2/docs/slate-v2/archive/full-replacement-blockers.mdGate questions:
Target A?Acceptance criteria:
Go or No-GoNo-Go includes a short blocker list with named files and proof gapsCurrent gate read:
Target A
because the current claimed slate surface is defended by the harvest in:
/Users/zbeyens/git/plate-2/docs/slate-v2/archive/oracle-harvest-ledger.md/Users/zbeyens/git/slate-v2/packages/slate/test/snapshot-contract.tsTarget A
because the anchor stack is directly proved in:
/Users/zbeyens/git/slate-v2/packages/slate-react/test/runtime.tsx/Users/zbeyens/git/slate-v2/packages/slate-history/test/history-contract.ts/Users/zbeyens/git/slate-v2/packages/slate-dom/test/bridge.ts/Users/zbeyens/git/slate-v2/playwright/integration/examples/rich-inline.test.tsTarget A
because the public claim is now explicitly limited to:
1000-blockTarget A
because they are named explicitly in:
/Users/zbeyens/git/plate-2/docs/slate-v2/replacement-family-ledger.md/Users/zbeyens/git/plate-2/docs/slate-v2/archive/full-replacement-blockers.mdVerification commands:
yarn test:mochayarn workspace slate-react run testyarn test:slate-browser:e2e:localyarn test:slate-browser:ime:localyarn test:slate-browser:anchorsyarn test:replacement:compat:localyarn bench:replacement:placeholder:localyarn bench:replacement:huge-document:localExit criteria:
Non-blocking rule:
Target A do
not block GoPractical order:
Hard dependency notes:
This plan does not promise:
richtext, markdown, forced-layout, styling,
hovering-toolbar, tables, embeds, editable-voids, or imagesscroll-into-view family claim in this releasevoids, unit, hanging, or unsupported-block parityRecommended staffing by lane:
Verification path: