Plate 编辑器基准实验室:剪贴板超预算(over-budget)调查与证据登记(Evidence Kit)实战解析
Plate 编辑器基准实验室剪贴板超预算over-budget调查与证据登记Evidence Kit实战解析【免费下载链接】plateRich-text editor with AI and shadcn/ui项目地址: https://gitcode.com/GitHub_Trending/pl/plate本篇技术指南聚焦 Plate 仓库中benchmarks/editor基准实验室Evidence Kit的一次真实调查健康检查报告出现investigate-over-budget两行剪贴板基准指标超过预算阈值。文章将带你还原从触发、根因定位、正确复现命令、登记表registry修正到最终验证的完整闭环并深入源码说明over-budget状态是如何被判定与上报的。读完你将掌握如何区分基准的默认模式与 issue 形态模式、如何通过环境变量复现 50,000 块超大剪贴板场景以及证据流水线evidence pipeline中活性工件active artifact的登记与废弃规则。事件背景Evidence Kit 基准实验室与 clipboard-large-payload 负载Plate 仓库中的编辑器基准实验室是一个基于 Evidence Kit 的独立 npm 包位于 benchmarks/editor。它的职责是集中管理源材料source material、模糊测试契约、基准结果行、包边界检查、启动检查与性能文档其权威数据来源与转移规则记录在 evidence-source-map.md 中。该实验室以 benchmark-registry.json 作为唯一的主基准登记表其中每一项artifact都声明了id工件唯一标识category/family分类与负载家族owner命令所属的本地仓库本实验室为slate-v2cwd命令执行目录command可复现的完整命令含环境变量path基准输出 JSON 工件artifact路径required是否必需缺失会直接产生rerun-*的优先动作decision该工件要回答的基准问题。本次事件的主角是clipboard-large-payload工件其登记的决策问题是10,000 行复制/粘贴负载与 50,000 块双节点剪切two-node cuts是否保持在 issue 形态预算issue-shaped budgets之内对应工作负载workload描述为Large paste/copy, 10,000-line paste, and 50,000-block cut pressure。触发健康报告报出两行超预算事件起点是 benchmark-health-latest.json。该健康报告由 benchmark-health.mjs 生成当存在status over-budget的结果行时会自动生成一条优先级为 2 的nextActioninvestigate-over-budget详见buildNextActions中overBudgetRows的过滤逻辑。本次触发的原始信息如下项目值触发的 nextActioninvestigate-over-budget超预算行数2 行工件来源../../.tmp/slate-v2/tmp/slate-clipboard-large-payload-benchmark.json登记表 idclipboard-large-payload命令 owner.tmp/slate-v2指标 1cutTwoBlocksEditMsP50552.21ms预算150ms超 3.68 倍指标 2cutTwoBlocksMsP50382.5ms预算250ms超 1.53 倍两行红色指标都指向同一个工件文件说明问题出在这个工件自身而非不同基准互相干扰。根因定位登记的命令太弱跑错了模式调查结论非常干脆登记的复现命令跑的不是预算所声明的场景。当时 benchmark-registry.json 中clipboard-large-payload的命令是bun run bench:core:clipboard-large-payload:local这条默认命令存在两个问题负载规模不匹配默认模式只执行 10,000 块的剪切cut而红色超标行来自 issue 形态的50,000 块模式——预算阈值 150ms / 250ms 是针对 50,000 块这一更严苛场景设定的未开启 issue 目标阈值默认模式下基准不会输出issueTargetThresholds也就无从生成cutTwoBlocksEditMsP50/cutTwoBlocksMsP50这类阈值行。换句话说红灯不是当前实现变慢了而是旧工件stale artifact是拿弱命令跑出来的历史输出却被误当作 50,000 块 issue 场景的证据。这正是 Evidence Kit 流水线中工件与声明必须一一对应原则的典型反例。正确复现用环境变量切换到 issue 形态模式正确的可复现命令必须显式注入两个环境变量把基准切换到 issue 形态SLATE_CLIPBOARD_BENCH_HUGE_CUT_BLOCKS50000 \ SLATE_CLIPBOARD_BENCH_ISSUE_TARGETS1 \ bun run bench:core:clipboard-large-payload:local两个环境变量的作用环境变量取值作用SLATE_CLIPBOARD_BENCH_HUGE_CUT_BLOCKS50000指定超大剪切场景的块数把负载推到 issue 报告中的 50,000 块规模SLATE_CLIPBOARD_BENCH_ISSUE_TARGETS1开启 issue 目标阈值输出使基准工件携带issueTargetThresholds从而生成阈值判定行复跑结果全部回到预算内在.tmp/slate-v2目录下以正确命令复跑后三行阈值全部转绿指标复跑实测预算阈值判定cutTwoBlocksEditMsP50145.74ms150ms通过cutTwoBlocksMsP50147.1ms250ms通过operationCount11单次事务通过这一结论已沉淀为持久证据在最新的 rich-text-editors-latest.json 中slate-clipboard-large-payload-threshold分类下的三行状态均为ok其中cutTwoBlocksEditMsP50的medianUs为145740即 145.74ms对应limitMs150cutTwoBlocksMsP50的medianUs为147100即 147.1ms对应limitMs250operationCount的ops为1对应limit1——与调查文档中的复跑数字完全一致。同时benchmark-health-latest.json 当前的nextActions已不再包含investigate-over-budget只剩下工件过期刷新refresh-core-*与可选工件处置optional-*等常规动作说明超预算问题已闭环。处置决策让登记命令匹配预算声明调查结论给出的处置是更新 benchmark-registry.json使活性工件的命令与 issue 形态的预算声明保持一致。查看当前登记表可见clipboard-large-payload的command已被改为SLATE_CLIPBOARD_BENCH_HUGE_CUT_BLOCKS50000 SLATE_CLIPBOARD_BENCH_ISSUE_TARGETS1 bun run bench:core:clipboard-large-payload:local也就是说红色行是过期的工件输出stale artifact output而非当前真实失败的阈值。修正的关键不是改预算放水而是让登记命令精确复现预算所基于的场景从源头杜绝弱命令产出强声明的错配。登记表的活性规则配合本调查需要理解登记表的两条核心策略见 benchmark-registry.json 顶部的policy字段活性工件规则activeArtifactRule只有登记在表中的工件才是活性的基准证据废弃规则discardRule未登记的基准 JSON 一律视为历史输出被活性 Evidence Kit 流程忽略。登记表通过discardUnregistered列表声明了../../.tmp/slate-v2/tmp匹配benchmark等扫描根benchmark-health.mjs 的findIgnoredUnregisteredArtifacts会扫描这些目录把所有未被登记的文件计入被忽略的历史工件。当前健康报告显示有 62 个未登记工件被忽略并产生优先级 6 的清理建议动作。验证流程从复现到证据刷新调查文档给出的完整验证链路分两步# 第一步在 .tmp/slate-v2 本地仓库跑出符合 issue 形态的基准工件 cd /Users/zbeyens/git/plate-2/.tmp/slate-v2 SLATE_CLIPBOARD_BENCH_HUGE_CUT_BLOCKS50000 SLATE_CLIPBOARD_BENCH_ISSUE_TARGETS1 bun run bench:core:clipboard-large-payload:local # 第二步回到基准实验室刷新证据并重新生成健康报告与性能文档 cd /Users/zbeyens/git/plate-2/benchmarks/editor npm run evidence:refresh其中evidence:refresh在 package.json 中展开为四步流水线npm run research:list # 更新研究源清单 npm run bench:rich-text:check # 重新生成并校验 rich-text 证据行 npm run evidence:health # 重新生成健康报告含 --check 断言 npm run docs:perf # 重新生成性能文档跑完evidence:refresh后benchmarks/results/rich-text-editors-latest.json中的阈值行与benchmark-health-latest.json的nextActions都会基于新工件重建——这就是本次调查旧红灯被清空的方式。深入原理over-budget 状态从何而来要彻底理解这次调查值得看一下状态判定的源码位置。在 src/index.mjs 的collectThresholdRows函数中阈值行只从工件的issueTargetThresholds字段读取若工件不含issueTargetThresholds则不产出任何阈值行——这正是默认模式未开SLATE_CLIPBOARD_BENCH_ISSUE_TARGETS1跑出来的工件没有阈值行的原因若包含则对每个阈值条目按threshold.passed判定true记okfalse记over-budget行内note会带上limitMs/limit预算值便于审计。随后 benchmark-health.mjs 的buildNextActions用rows.filter((row) row.status over-budget)统计超预算行只要非空就生成investigate-over-budget优先级 2。两条链路合起来形成了工件 → 阈值行 → 健康动作的自动告警闭环。此外benchmark-health.mjs还定义了健康断言assertHealth活性工件数至少 20、必需工件不能缺失、证据行数不低于 250、nextActions不能为空。这意味着健康报告本身就是可机检的--check模式适合接入 CI。经验沉淀把一次告警变成长期防错机制回顾整个调查可以沉淀出三条可复用的经验登记命令必须精确等于预算场景任何把阈值写进issueTargetThresholds的基准其登记命令必须包含复现该场景的全部环境变量否则健康报告会反复产生幽灵红灯。区分实现变慢与证据错配看到over-budget先核对工件来源与命令再用正确命令复跑一次再做性能归因——本次 552ms 的假警报正是被这一步化解的。证据链要闭环修正登记表后务必跑evidence:refresh让结果行、健康报告、性能文档三者同步重建最终在 rich-text-editors-latest.json 与 benchmark-health-latest.json 中留下可核对的持久记录。本次调查的完整原始记录见 004-clipboard-over-budget-investigation.md连同 evidence-source-map.md 一起构成了该基准实验室问题触发 → 根因定位 → 命令修正 → 证据刷新的标准操作范式。【免费下载链接】plateRich-text editor with AI and shadcn/ui项目地址: https://gitcode.com/GitHub_Trending/pl/plate创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考