ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Slate v2 迁移零回归审计:以 1:1 文件账本(Ledger)关闭遗留测试缺口

Slate v2 迁移零回归审计:以 1:1 文件账本(Ledger)关闭遗留测试缺口 Slate v2 迁移零回归审计以 1:1 文件账本Ledger关闭遗留测试缺口【免费下载链接】plateRich-text editor with AI and shadcn/ui项目地址: https://gitcode.com/GitHub_Trending/pl/plate本文解析 plate 仓库内 Slate v2 重写工程中的一次账本缺口审计Ledger Gap Audit它以每个遗留文件必须有唯一活的归属答案为验收口径用四条 1:1 精确账本覆盖slate、slate-react、slate-history与 Playwright 示例测试最终把无回归声明从口号变成可逐行核验的本地事实。读完本文你将掌握这套账本—映射—关闭的方法论以及它如何与create-editor.ts等引擎修复形成闭环。审计背景重写工程为何需要账本Slate v2 是一次 fresh-branch 式的重写在保留既有编辑器行为契约的前提下对核心包、React 运行时、历史栈与浏览器集成做整体替换。这类重写最大的风险不是能不能写出新代码而是如何证明旧行为没有悄悄丢失——也就是 no-regression无回归声明。为此仓库维护了一套逐文件迁移真相账本即 release-file-review-ledger.md。它的定位是per-file migration truth每个文件当前处于什么状态ported/adapted/pending/archived/post RC、由谁继续负责、是否已删除并回收全部落到表格行上。这套账本后来升级为所谓 single live answer——对任何一个遗留文件账本必须给出唯一的、活的、可核验的答案而不是多个相互打架的说明。但审计方2026-04-13-slate-v2-ledger-gap-audit.md指出仅靠这一套控制账本是不够的。旧审计的问题正在于此——控制账本描述的是计划与状态却无法回答每个遗留测试文件到底被谁接走了这一更严格的问题。这正是本次缺口审计的起点。审计目标与验收口径审计文档给出了清晰的两条验收标准single live answerrelease-file-review-ledger.md是否真的能对每个文件给出唯一、活的答案stricter 1:1 legacy-file bar是否达到更严格的遗留文件 1:1 映射门槛——即旧版测试树中的每一个文件都必须能精确对应到当前仓库的某个证明载体proof owner不允许存在没人认领的行。换句话说审计不是在问测试过不过而是在问每一个旧文件是否都有明确的去处被镜像、被恢复、被混合拆分或被显式跳过并说明理由。四条 1:1 精确账本范围与统计审计的结论是当前仓库已为四块遗留测试区域建立了精确 1:1 账本且四条账本全部达到zeroneeds-triage无待分类行。四条账本均存放于 docs/slate-v2/ledgers 目录账本文件覆盖范围遗留文件总数映射构成legacy-slate-test-files.mdpackages/slate/test/**1069mapped-mirrored 979、mapped-recovered 49、mapped-mixed 5、explicit-skip 36legacy-slate-react-test-files.mdpackages/slate-react/test/**8mapped-mirrored 5、mapped-mixed 1、explicit-skip 2legacy-slate-history-test-files.mdpackages/slate-history/test/**20mapped-mirrored 17、explicit-skip 3legacy-playwright-example-tests.mdplaywright/integration/examples/**23same-path-current 21、mapped-recovered 1、explicit-skip 1各账本的统计可以自洽以slate为例979 49 5 36 1069恰好等于遗留文件总数说明没有漏网的行其余三条账本同理。四条账本合计覆盖 1120 个遗留文件无一处于待分类状态。账本字段与映射语义阅读这些账本TSV 格式时每一行都由四个字段构成字段含义legacy_file旧版测试树中的相对路径例如packages/slate/test/apply-batch-exact-set-node.jsmapping_status映射状态见下current_owner当前仓库中的证明载体契约文件、夹具文件或同路径测试note一句话说明该行为何这样关闭mapping_status的五种取值构成了整套审计的语言mapped-mirrored旧行为已在某个专门的当前证明载体中被直接镜像覆盖。例如interfaces/Editor/above/**系列的几十个.tsx夹具全部映射到 query-contract.ts账本中的专用 query 契约注释统一为direct legacy parity is proved in the dedicated query owner。mapped-recovered旧行为通过新写的恢复证明重新落地。例如apply-batch-*系列映射到transaction-contract.ts、operations-contract.ts、snapshot-contract.ts等恢复出的契约文件。mapped-mixed旧文件的语义被拆分到多个包级证明中。例如apply-batch-dom-wrapper.js同时映射到slate-dom/test/bridge.ts、slate-react/test/react-editor-contract.tsx与slate-history/test/history-contract.ts——旧的 monolithic 包装器矩阵退役其语义由三个包的专用证明分担。explicit-skip显式跳过且必须给出理由。典型是batch-matrix-manifest.js随旧批次测试框架一起退役、perf-benchmark-manifest.js发布性能证明不再依赖入库的 manifest harness、以及interfaces/CustomTypes/**声明合并属硬切割不在现行类型面内。same-path-currentPlaywright 账本专用旧测试在新仓库的同路径下原样存在例如richtext.test.ts、paste-html.test.ts、tables.test.ts等 21 个示例测试直接同路径接管。用真实行理解最后核心行的三种关闭路径审计文档特别指出最后一批核心行是通过三种方式关闭的账本里的真实行可以逐一印证。路径一恢复现行证明recovered current proof。slate账本中apply-batch-exact-set-node.js、apply-batch-generic-ops.js、apply-batch-mixed-op-pairs.js等一批行被标记为mapped-recovered其 current_owner 指向transaction-contract.ts、snapshot-contract.ts、operations-contract.tsnormalization/**与transforms/general/invalid-insert_node.tsx则统一映射到normalization-contract.ts注释以normalization family closure rule概括整族关闭规则。这对应审计文档中通过恢复的现行证明关闭最后核心行的说法。路径二显式跳过退役设施explicit skip。batch-matrix-manifest.js、perf/set-nodes-bench.js、index.js、jsx.d.ts等行被标记为explicit-skip理由是matrix manifest registry is retired with the old batch harness、legacy batch benchmark harness is retired from the live proof surface等。审计要求每个 skip 都有理由而不是默默消失——这是防静默删除的关键闸门。路径三引擎层修复concrete engine fixes。当账本发现某类行无法仅靠证明文件闭合时缺口会反哺到引擎实现本身。审计文档点名了两个修复目标draft-helpers.ts与create-editor.ts。其中 create-editor.ts 在当前仓库的 packages/slate/src 下真实存在且配套有同目录的 create-editor.spec.ts这说明审计—恢复证明—引擎修复是相互驱动的闭环。需要说明的是审计文档中提及的transaction-contract.ts、normalization-contract.ts、draft-helpers.ts等路径属于迁移程序当时的恢复计划命名在当前仓库快照中packages/slate的测试已改为与源码同目录的.spec.ts形式如src/interfaces/location-ref.spec.ts、src/internal/dom-editor/isTargetInsideNonReadonlyVoid.spec.ts因此账本记录的是历史迁移时刻的真相快照而非现行文件布局。Hard Read审计结论与剩余债务审计文档的结论部分Hard Read给出了三句话的定性旧审计问题已关闭原先控制账本不足以支撑 1:1 门槛的问题不复存在精确账本的故事在本地是诚实的四条账本零needs-triage每个遗留文件都有唯一去向剩余的无回归债务是外部性的剩余债务集中在外部浏览器/输入证据external browser/input evidence与最终裁决清理final verdict cleanup而不是缺失的遗留文件行——文件行的账目已经闭合尚未闭合的是浏览器真机/输入法层面的证据链与最终发布裁决的收尾。这个区分非常关键它把本地代码层面的无回归与跨浏览器行为层面的无回归分成两类债务避免把前者未完成的责任误记为后者也避免用文件行数掩盖真实缺口。从账本到证明通道配套治理文件精确账本不是孤立存在它与 release-file-review-ledger.md 及 true-slate-rc-proof-ledger.md 构成一套三层治理结构release-file-review-ledger负责文件级迁移真相tranche 1/2 的根目录与工具链文件Bun/Turbo/Biome/tsdown、包清单文件、运行时兼容行、Docs Split、Deferred Rows、Runtime Recovery Snapshot、包级删除与恢复树、Current Recovery Rows、V2 North-Star Rows。它还写明了Remaining-Work Rule剩余包级/源码工作由合并语料驱动、按行推进账本既不授权对剩余包做一刀切的同路径重写也不把避免重写本身当作价值——下一步必须是先围绕原生 transaction/snapshot-store API 安定packages/slate再显式分类兼容性包袱最后才重开支撑包。true-slate-rc-proof-ledger负责证明通道记录slate、slate-dom、slate-react的包级运行时证明是否materially closed并管理 V2 North-Star 证明通道overlay 架构、rerender 局部性、huge-document 开销等。四条精确账本负责遗留行 ↔ 证明载体的映射明细是前两者的可执行索引。可复用方法论给同类重写项目的审计清单如果把这次审计抽象为方法论可以得到一份可直接套用的清单建立 1:1 账本而非汇总报告为每一块旧测试树生成文件→状态→归属→理由的逐行映射保证总数 各状态之和杜绝漏行定义清晰的映射状态词汇镜像mirrored、恢复recovered、混合mixed、同路径same-path-current、显式跳过explicit-skip每种状态都有唯一的关闭含义强制跳过必须给理由explicit-skip不是免死金牌退役设施如旧批次矩阵、旧性能 harness必须写明为何不在现行契约内用三种手段闭合缺口优先恢复现行证明对确已退役的设施显式跳过若证明无法闭合则反哺引擎修复——账本驱动实现而非实现迁就账本区分本地债务与外部证据债务文件行闭合 ≠ 行为零回归浏览器/输入法证据与最终裁决必须单列跟踪守住重写回避不作为价值的红线账本只记录事实不授权无原则的保旧也不授权无原则的重写先安定核心 API 再重开支撑包。这套方法在 plate 仓库中已有完整落地样本读者可按 release-file-review-ledger.md → docs/slate-v2/ledgers 四条账本 → true-slate-rc-proof-ledger.md 的顺序逐层阅读并配合 master-roadmap.md 了解整个重写路线图在其中的位置。【免费下载链接】plateRich-text editor with AI and shadcn/ui项目地址: https://gitcode.com/GitHub_Trending/pl/plate创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表