:用运行时/浏览器证据把替换宽度做实)
Slate v2 Batch 4 家族证明深度Family-Proof Depth用运行时/浏览器证据把替换宽度做实【免费下载链接】plateRich-text editor with AI and shadcn/ui项目地址: https://gitcode.com/GitHub_Trending/pl/plate导读本文讲解 plate 仓库中 Slate v2 重写工程的Batch 4家族证明深度Family-Proof Depth批次计划。该批次解决的核心问题是当家族级功能面已经铺开markdown、表格、图片、悬停工具栏、可编辑 void 等之后如何给每个家族补上直接的运行时/浏览器证明而不是停留在文件存在但证据薄弱的状态。读完本文你将掌握该批次排名薄弱证明 → 补运行时证据 → 分类剩余薄弱项 → 同步控制文档 → 验证评审的五阶段方法以及它如何与replacement-family-ledger、release-readiness-decision等控制文档联动成为 slate-v2 替换工程中可复用的证据治理范式。一、背景slate-v2 替换计划中的家族与批次Batch 4 的起点来自 master-roadmap.md 中定义的规范化批次顺序tranche order。这份路线图把将slate-v2-draft移植进全新slate-v2克隆体的工作拆成了从根工具链、React 19.2 兼容、slate核心 API 重置到slate-history、slate-hyperscript、slate-dom、slate-react逐包闭合再到示例/基准/附加价值与 RC 账本闭合的八个 tranche并给出包级顺序slateslate-historyslate-hyperscriptslate-domslate-react整个程序被两道不可谈判的门约束parity gate奇偶性门与v2 north-star gate北星门。Batch 4 正是在这个框架内、针对家族级功能面family envelope已加宽之后的证明深度缺口而发起的执行批次。在 slate-v2 的语境里家族family指的是一组用户可见、行为自洽的功能面例如 markdown、forced-layout强制布局、styling样式、hovering-toolbar悬停工具栏、editable-voids可编辑 void、tables表格、scroll-into-view滚动到视野、images图片、embeds嵌入等。而 replacement-family-ledger.md 则按家族逐一登记当前栈对每个家族的态度Preserved保留行为作为被保留的用户可见表面如 placeholder/IME 家族、Shadow DOM/iframe 家族Redefined重新定义如 inline 家族链接为显式行内元素、提及为显式行内建议行为、decoration/highlight 家族投影驱动的高亮、anchor/projection 家族Bookmark 支撑的持久锚点、huge document 家族基准支撑的大文档姿态Comparison-only/Intentionally later仅对比、有意延后。Batch 4 的工作对象正是这张家族账本与每个家族到底有多少真实证明之间的差距。二、Batch 4 的目标与五阶段工作流Batch 4 的文档docs/plans/2026-04-08-slate-v2-batch4-family-proof-depth.md开宗明义地写道Execute Batch 4 fromdocs/slate-v2/master-roadmap.md.其目标不是新增功能而是把已有家族表面的证明做深。批次被规划为五个阶段阶段工作内容产出1. Rank thin family proofs在加宽后的当前家族边界内对证据薄弱的家族证明进行排序优先级明确的证明补强清单2. Add high-value runtime/browser proof为高价值家族补充直接的运行时/浏览器证明可运行的证明用例3. Classify remaining thinness对剩余的薄弱项进行分类哪些需要补、哪些有意保持薄薄弱分类结论4. Sync docs and roadmap同步控制文档与路线图账本、判定、阻断清单、路线图一致5. Verify and review验证与评审测试、浏览器套件、架构评审、回归复检这份工作流的关键在于证明proof被当作一等交付物与代码同等重要。批次不是把功能写完就结束而是要回答这个功能在真实运行与浏览器环境里证据是否站得住。三、七个家族的直接运行时/浏览器证明Batch 4 的进度清单显示本批次为以下七个家族新增了直接运行时/浏览器证明direct runtime/browser proofmarkdownMarkdown 解析/序列化家族forced-layout强制布局家族styling样式家族hovering-toolbar悬停工具栏家族editable-voids可编辑 void 家族tables表格家族scroll-into-view滚动到视野家族所谓直接证明对应的反面是间接/文件存在式证明。在 slate-v2 的工程语境里一个常见陷阱是某个功能文件在同路径下存在、甚至有配套文档但没有任何证据证明它在真实运行时和浏览器里的行为符合预期。Batch 4 的做法是给这些家族补上能直接观察行为的证明行——让每个家族从文件在升级为行为被验证。以editable-voids家族为例仓库中就有现成的用户可见示例 editable-voids-demo.tsx它通过createPlatePlugin({ key: editable-void, node: { component, isElement: true, isVoid: true } })注册可编辑 void 节点并在组件外层显式声明contentEditable{false}注释明确说明为了规避 Firefox 对某些输入类型的兼容问题内部再嵌套一个完整的Plate编辑器。这正是可编辑 void 内嵌另一个编辑器的运行时行为被真实使用和验证的落点——void 节点本身不可被文档编辑触碰但节点内部承载表单控件与嵌套编辑器的交互。再看scroll-into-view家族源码实现位于 packages/slate/src/internal/editor-extension/scrollIntoView.ts它基于scroll-into-view-if-needed对外暴露scrollIntoView(editor, target, options)target既可以是Point此时内部通过editor.api.toDOMRange把点转换成 DOM Range也可以是现成的DOMRange默认选项为{ scrollMode: if-needed }仅当需要时才滚动整个滚动动作被包进requestAnimationFrame保证在布局稳定后的下一帧执行滚动前临时把domRange.getBoundingClientRect借给 leaf 元素滚动完成后在setTimeout(0)中回收避免污染元素。配套的单元测试 scrollIntoView.spec.ts 用bun:test的mock.module替换掉scroll-into-view-if-needed覆盖三条行为Point 目标转 DOM Range 并携带自定义选项滚动、Point 无法转换时提前返回、既有 DOM Range 目标走默认选项。这就是家族证明在源码层面的具体形态实现 行为测试 默认参数语义三者对齐。四、images 与 embeds浏览器领先证明的强化除七个新增证明家族外Batch 4 还**强化strengthened**了两个浏览器领先browser-leading家族images图片embeds嵌入浏览器领先意味着这两个家族的主要证明来源在真实浏览器环境而非纯 headless/Node 环境。对图片和嵌入这类强依赖 DOM 布局、资源加载与选区行为的家族而言浏览器环境是唯一能证明其行为真实的场所。Batch 4 的做法是在已有浏览器证据的基础上继续加厚而不是认为有过一次 Chromium 冒烟就足够。五、控制文档同步让账本、判定、阻断与路线图同频批次的一个重要交付是**同步synced**了四份控制文档确保代码/证明的现实与文档宣称的现实一致replacement-family-ledger.md家族账本登记每个家族是 Preserved、Redefined 还是其他状态见 docs/slate-v2/references/replacement-family-ledger.mdrelease-readiness-decision.md发布就绪判定见 docs/slate-v2/release-readiness-decision.mdfull-replacement-blockers.md整体替换阻断清单归档于 docs/slate-v2-draft/archive/full-replacement-blockers.mdmaster-roadmap.md主路线图docs/slate-v2/master-roadmap.md。为什么同步控制文档如此重要因为 slate-v2 工程的判定体系是分层的replacement-family-ledger比包级 API 账本更宽、比路线图更窄回答每个家族当前是什么状态release-readiness-decision拥有唯一的实时判定把推荐面拆成Target A发布级信心Slate、EditableBlocks、withHistory(createEditor())与Target B对旧 Slate 的整体诚实替换master-roadmap负责执行顺序与把关点每个 tranche 后停下评审。Batch 4 的证明工作直接改变了这些判定的事实基础——某些家族从文件在但证据薄变成运行时/浏览器行为有直接证明因此账本、判定、阻断清单与路线图必须同步刷新否则文档会系统性滞后于代码现实。六、验证方式四道关卡Batch 4 文档明确记录了四道验证关卡yarn workspace slate-react run testslate-react包的测试套件说明该批次特别关注 React 运行时家族的证明不被破坏。需要说明的是Batch 4 文档撰写于 2026-04-08当时使用 yarn workspace 命令而当前仓库的 master-roadmap.md 已记录包管理器重置为bun包级验证改为bun test ./packages/slate/test、bunx turbo build/typecheck等命令这属于工具链迁移不影响批次方法论本身targeted Chromium family suite定向 Chromium 家族套件针对上述家族在真实 Chromium 浏览器中跑定向测试这是浏览器证明的执行载体architect review架构评审由架构视角复查证明是否真的证明了行为而非只是形式上存在post-deslop regression recheckdeslop 后的回归复检在完成文档瘦身/清理类工作后对关键路径再做一次回归复检防止清理引入回归。四道关卡组合起来覆盖了单元行为 → 浏览器真实行为 → 架构合理性 → 回归安全四个维度这与路线图中保持既有正确性与性能下限为硬护栏的 doctrine 一脉相承。七、退出读数与风险什么是诚实的完成Batch 4 的退出读数Exit Read写得很克制Batch 4 is complete. The remaining risk after this batch is proof depth relative to blanket replacement width, not missing family proof lanes.翻译过来就是批次本身完成了但剩余风险是证明深度 vs 整体替换宽度之间的比例而不是还缺哪条家族证明通道。也就是说通道已经铺满剩下的问题是每条通道上证据的厚度能否支撑整体替换旧 Slate这种面状承诺。文档还显式登记了两个风险某些家族可能设计上有意保持 oracle-thin即使运行时/浏览器深度提升了某些家族仍可能刻意只保留薄证明oracle-thin by design——例如纯靠 API 预言机oracle而非浏览器验证的家族这是设计取舍不是疏漏太浅的证明只是换了个名字的问题如果补充的证明本身过浅等于把没有证明改名为有证明问题并未真正解决。这条风险实质上是给证明质量定了一条底线宁可承认薄不可用假厚度掩盖。这种完成声明 剩余风险 质量底线的写法体现了该工程对诚实性的刻意追求——与 release-readiness-decision.md 中什么现在推荐是诚实的、什么现在声称是不诚实的的措辞一脉相承该判定目前为Target A: Go、Target B: Reopened under challenge即默认推荐面可发布但整体零回归替换声明仍被挑战。八、从 Batch 4 提炼的工程方法把 Batch 4 放到整个 slate-v2 程序里看它示范了一套可复用的证据治理方法证明是一等交付物每个功能家族除了代码还必须回答在运行时和浏览器里行为被证明了吗批次化推进通过排名薄弱项 → 补高价值证据 → 分类剩余 → 同步文档 → 验证的固定五阶段避免一次性铺开带来的不可控账本驱动replacement-family-ledger这类账本让保留/重定义/有意延后的决策显式化证明工作跟着账本走而不是凭印象控制文档实时同步代码现实一变账本、判定、阻断清单、路线图必须同频杜绝文档滞后风险显式登记完成不等于无风险剩余风险证明深度 vs 替换宽度与质量底线不得用浅证明改名被明文写进批次文档供后续批次继续消化。对于任何一个大规模重写/替换成熟库的项目Batch 4 都是一份值得参考的样本在把功能面铺开之后如何系统性地把存在升级为被证明并让整个组织的文档体系跟得上证据的现实。进一步阅读批次原文2026-04-08-slate-v2-batch4-family-proof-depth.md主路线图tranche 与包顺序master-roadmap.md家族账本Preserved/Redefined 状态replacement-family-ledger.md发布就绪判定Target A / Target Brelease-readiness-decision.md批次引擎参考批量操作证明矩阵的扩展阅读slate-batch-engine.mdscroll-into-view 家族源码与测试scrollIntoView.ts、scrollIntoView.spec.tseditable-voids 家族示例editable-voids-demo.tsx【免费下载链接】plateRich-text editor with AI and shadcn/ui项目地址: https://gitcode.com/GitHub_Trending/pl/plate创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考