用途
Authored decision order 用于验证 Plate 编辑器中 authored 审核树的决策顺序性质:对同一组待处理变更,逐个接受或拒绝(按任意可允许顺序)所得到的文档,应与一次性决定相同判定所得到的子节点和可读落地写入一致。它同时检测“耦合集合”——即只有一次性决定才能收敛、任何逐个决定顺序都会等待的判定集合。
主要能力
- 穷举检查:运行真实解析器,构建限定范围内所有可能的文档,而非采样。默认门禁范围为两块、两个标记、两个变更。
- 多系列覆盖:quotes 系列处理引用、对齐、拆分、连接、插入删除等;give-back 系列在链接 schema 上覆盖被拒剪切后的回退;lift 系列额外覆盖解包、清空、移除半片、换行剪切、段落合并等;generated-id 系列在五种生成 id 的 schema 下运行引用文档。
- 比较规则:每步调用 resolveWithVerdicts 与 settleAsAdmission,逐个决定后与一次性决定比较;若某步只顾等待其他待定变更则跳过比较,其他拒绝视为失败。
- 基线比对:失败与耦合集合经 finding-baseline 与只收缩基线比对,基线不增长。修复后需运行 --lower 删除不再存在的条目。
- 并行与导出:--jobs 设置工作进程数,--together 将耦合集合写入文件。
使用方式
所有命令从仓库根目录运行。
pnpm check:authored-order:运行门禁范围(两块、两标记、两变更)。pnpm check authored-order:运行门禁及一块 generated-elements 变体。pnpm check --affected:对 packages/plitejs/ 或 finding-baseline.mjs 的变更运行两者。- 参数示例:
--marks=3、--blocks=3、--marks=3 --changes=3、--family=quotes、--family=giveback、--family=lift、--schema=generated、--schema=generated-<places>、--giveback-script='<script>'、--lift-script='<script>'、--lower、--jobs=<n>、--together=<file>。非门禁范围会跳过基线,任何失败退出码为 1。
适用场景
适用于修改解析器的 join、split、enclosure 逻辑后运行 --marks=3 与 --blocks=3;修改 settlement、holders 或 spares 后运行 generated-id 系列;以及日常门禁检查。输出包含 JSON 摘要行,随后列出基线未记录的失败与耦合集合。
限制
脚本是 TypeScript 代码的有界穷举检查,不涉及模型检查器或验证器。部分系列默认不在门禁内运行,失败时退出 1 且无基线。运行时间随参数显著增长,大范围需使用 --jobs 或分片。已知失败会重复出现在更多文档和顺序中,非门禁范围仅以摘要中的 together 计数输出耦合集合。