docs/slate-v2-draft/fresh-branch-migration-plan.md
Canonical execution plan for migrating the draft slate-v2 rewrite into the
fresh .tmp/slate-v2 clone without reopening broad accidental drift.
This plan treats:
.tmp/slate-v2 as the live target.tmp/slate-v2-draft as the evidence/value bankdocs/slate-v2/** as the final-state spec stackdocs/slate-v2-draft/** as the archive laneUse this with:
repair-drift still governs same-path source and API recovery.post RC.Every file touched by the fresh-vs-draft delta must land in one of these states:
recovered: close legacy port with only forced current-runtime changesextended: source-close plus intentional current-only valuemixed: source-close, but proof or ownership still incompleteopen: rewrite-heavy and not yet acceptablepost RC: real value exists, but landing it now would introduce non-engine
drift or cross the active tranche boundarycut: no justified value survivesDefault package order follows dependency and public-surface risk:
slateslate-historyslate-hyperscriptslate-domslate-reactEarly low-conflict adoption lane:
slate-browserRationale:
slate is the contract rootslate-history and slate-hyperscript depend on slate but do not own the
browser/runtime envelopeslate-dom sits between core and Reactslate-react carries the largest caller-visible browser/input surfaceslate-browser is additive and should land as soon as the root toolchain can
absorb it without forcing engine driftpost RC.For each package:
.tmp/slate-v2 and .tmp/slate-v2-draftdocs/slate-v2/** is the final-state spec lane. It is allowed to lead code.
The stack should stay explicit about ownership:
overview.md
master-roadmap.md
release-readiness-decision.md
release-file-review-ledger.md
true-slate-rc-proof-ledger.md
replacement-gates-scoreboard.md
references/pr-description.md
references/*
ledgers/*
commands/*
docs/slate-v2-draft/** holds prior plan/spec material that should remain
available for lossless migration review but should not compete with the live
spec stack.
Port the non-src root/package/site/doc machinery from the draft lane into the
fresh clone and establish the final-state spec stack.
Root/toolchain files:
.tmp/slate-v2/.gitignore.tmp/slate-v2/.npmrc.tmp/slate-v2/.yarnrc.yml.tmp/slate-v2/package.json.tmp/slate-v2/pnpm-workspace.yaml.tmp/slate-v2/turbo.json.tmp/slate-v2/tsconfig.json.tmp/slate-v2/biome.jsonc.tmp/slate-v2/eslint.config.mjs.tmp/slate-v2/config/babel/register.cjs.tmp/slate-v2/config/rollup/rollup.config.js.tmp/slate-v2/.github/workflows/ci.yml.tmp/slate-v2/.github/workflows/comment.yml.tmp/slate-v2/.github/workflows/release.yml.tmp/slate-v2/README.md.tmp/slate-v2/Readme.md.tmp/slate-v2/docs/general/contributing.mdSite/config files required by the root graph:
.tmp/slate-v2/site/next.config.js.tmp/slate-v2/site/next-env.d.ts.tmp/slate-v2/site/pages/api/index.tsPackage manifest/script layer:
.tmp/slate-v2/packages/slate/package.json.tmp/slate-v2/packages/slate-history/package.json.tmp/slate-v2/packages/slate-hyperscript/package.json.tmp/slate-v2/packages/slate-dom/package.json.tmp/slate-v2/packages/slate-react/package.jsonRepo docs reset:
docs/slate-v2/**/*docs/slate-v2-draft/**/*src behavior changesThe tranche should leave these doc families alive and rewritten for the new program:
docs/slate-v2/overview.mddocs/slate-v2/master-roadmap.mddocs/slate-v2/release-readiness-decision.mddocs/slate-v2/release-file-review-ledger.mddocs/slate-v2/true-slate-rc-proof-ledger.mddocs/slate-v2/replacement-gates-scoreboard.mddocs/slate-v2/references/*.mddocs/slate-v2/ledgers/*.mddocs/slate-v2/commands/*.mddocs/slate-v2-draft/**src semantic drift has landedpost RC rows opened by tranche 1Land the React 19.2 and compatibility baseline before any engine rewrite.
Root/site compatibility surfaces:
.tmp/slate-v2/package.json.tmp/slate-v2/site/**/*Primary package surfaces:
.tmp/slate-v2/packages/slate-react/package.json.tmp/slate-v2/packages/slate-react/src/**/*.tmp/slate-v2/packages/slate-react/test/**/*.tmp/slate-v2/packages/slate-dom/package.json.tmp/slate-v2/packages/slate-dom/src/**/*.tmp/slate-v2/packages/slate-dom/test/**/*Optional early-adopt lane:
.tmp/slate-v2/packages/slate-browser/**/*
from .tmp/slate-v2-draft/packages/slate-browser/**/*Forced spillover only if needed by compatibility:
.tmp/slate-v2/packages/slate/package.json.tmp/slate-v2/packages/slate-history/package.json.tmp/slate-v2/packages/slate-hyperscript/package.jsonslate-browser if it lands cleanly without forcing engine-package driftslate-reactslate-domforwardRef/ref-compat scaffolding that is pure compatibility debt is goneslate-browser work is either landed cleanly or parked with owned
follow-up rowsslateRecover the core engine contract in slate and only then widen into dependent
packages.
.tmp/slate-v2/packages/slate/src/**/*.tmp/slate-v2/packages/slate/test/**/*.tmp/slate-v2/packages/slate/type-tests/custom-types/**/*docs/slate-v2/ledgers/slate-editor-api.mddocs/slate-v2/ledgers/slate-interfaces-api.mddocs/slate-v2/ledgers/slate-transforms-api.mdslate source reads like an honest same-path or engine-justified portslate file ledgerslate-history And slate-hyperscriptRecover the support packages that depend on slate but do not own the full DOM
or React runtime.
.tmp/slate-v2/packages/slate-history/src/**/*.tmp/slate-v2/packages/slate-history/test/**/*.tmp/slate-v2/packages/slate-history/package.json.tmp/slate-v2/packages/slate-hyperscript/src/**/*.tmp/slate-v2/packages/slate-hyperscript/test/**/*.tmp/slate-v2/packages/slate-hyperscript/package.jsondocs/slate-v2/ledgers/slate-history-api.mdslate-historyslate-hyperscriptslate-domRecover the DOM bridge as the runtime owner between core Slate and React.
.tmp/slate-v2/packages/slate-dom/src/**/*.tmp/slate-v2/packages/slate-dom/test/**/*.tmp/slate-v2/packages/slate-dom/package.jsondocs/slate-v2/ledgers/slate-react-api.md.tmp/slate-v2/site/examples/**/*.tmp/slate-v2/site/pages/examples/**/*slate-reactRecover the React runtime last, once core and DOM ownership are already settled.
.tmp/slate-v2/packages/slate-react/src/**/*.tmp/slate-v2/packages/slate-react/test/**/*.tmp/slate-v2/packages/slate-react/package.json.tmp/slate-v2/site/components/**/*.tmp/slate-v2/site/examples/**/*.tmp/slate-v2/site/pages/examples/**/*slate-react file ledgerpost RC rowsAdopt the remaining non-conflicting draft value once the owning package seams already exist.
.tmp/slate-v2-draft/site/examples/**/*.tmp/slate-v2-draft/site/components/**/*.tmp/slate-v2-draft/site/pages/examples/**/*slate-browser proof/test files not already landedpost RCClose the program with honest ledgers, proof, and explicit post RC leftovers.
docs/slate-v2/release-readiness-decision.mddocs/slate-v2/release-file-review-ledger.mddocs/slate-v2/true-slate-rc-proof-ledger.mddocs/slate-v2/replacement-gates-scoreboard.mddocs/slate-v2/references/pr-description.mdpost RCThe plan assumes these artifacts get created or rewritten early:
docs/slate-v2/ledgers/**docs/slate-v2/**slate-browser or example adoption blocking on package seams they do not ownThe migration is on track when:
post RC means a named deferred row, not a trash can