# 历史案例与可选录制 技术验收使用脚本操作真实开源应用,并保留可重放的动作、固定检查条件和运行结果。无需人工录制即可运行已有案例。脚本录制、人工录制、植入问题示例分别标注;不能将其中一种结果推断为另一种体验的验收。 ## 同一提交的复验记录 [首轮完整记录](results/cohort-bbdf901-2026-11-03.json)将 12 例绑定到同一源提交、检查器与默认索引:9 例符合预设,另外出现 `FLAKY`、非预期 `NEEDS_REVIEW` 和 `ENV_BLOCKED`,进程返回 1。IT-Tools 1368 的完整候选与独立原代码对照已完成,后续缩减比较未能启动;该时段还存在系统待机。IT-Tools 799 的原代码工作区在执行中变化,需先定位变化文件。 ChartDB 1061 的[第 2 版定义](holdout-recordings/v2/chartdb-1061.json)把点击限定到原断言使用的侧栏 `N`,并明确前置可见状态。六步操作与原断言不变;新运行符合预设的 `NEEDS_REVIEW`,禁用控件仍需业务审阅。它不证明首次超时的唯一根因。[最新历史索引](results/regression-summary-20bf1ba61eba.json)保留 49 次尝试,各例最近结果中 10/12 符合预设;这是混合历史版本,不能替代最终版本统一验收。 干净 Windows 作业中的 IT-Tools 799 与 1368 均因独立原代码目标未找到而返回 `NEEDS_REVIEW`,即使候选代码各通过 3/3 也不计为确认修复。[路径别名诊断](results/baseline-path-alias-2026-11-03.json)复现了临时目录别名导致应用工作目录与模块解析目录不一致的问题;规范化任务自有临时目录后,相同输入恢复触发原业务错误。该诊断只运行一次测量,不能替代完整对照与干净环境复验。较早的本地补跑通过、后续冷启动失败均保留,不能只选通过结果。 ## 冻结案例集 [`holdout-cases.json`](holdout-cases.json) 固定了 4 个项目的 12 个历史问题、原始提交、修复提交和预期判定。旧的 3 个开发案例不在该集合中。环境受阻、录制失败、未复现、不稳定和验证失败都保留在 12 个案例的分母中。 部分案例已用于改进执行器,因此这是扩展回归集,不是盲测,也不代表随机项目成功率。文件名中的 `holdout` 保留最初的清单标识,不应据此扩大结果含义。 ```bash node bench/setup-holdout.mjs node bench/holdout.mjs ``` 准备程序会从官方仓库创建独立临时工作区,按锁文件安装依赖,关闭依赖安装脚本。需有 Git、Node、npm、足够的磁盘空间、网络和系统 Edge/Chrome;首次准备耗时由仓库和网络决定。工作区状态保存在被忽略的 `.buggps/holdout/workspaces.json`。`BUGGPS_HOLDOUT_STATE` 可指向已有状态文件;运行器只接受本程序格式的独立临时工作区。 默认从 [`regression-inputs.json`](regression-inputs.json) 选择全部 12 例的版本化定义,包括 v3 导出文件名、v3 另存为及 v5 编辑器输入。索引固定数据集、分母、每例文件、定义版本和内容指纹,公式为 `sha256(JSON.stringify(JSON.parse(fileUtf8)))`;JSON 缩进和换行变化不影响指纹,业务值或键顺序变化需要更新索引并重新验收。输入不匹配时记录 `TEST_INVALID`,不启动该例浏览器。 历史复验可显式设置 `BUGGPS_HOLDOUT_INPUTS` 指向版本目录;自定义完整索引可用 `BUGGPS_HOLDOUT_INDEX`,两者不能同时设置。恢复默认索引前应移除这两个环境变量。每例结果记录实际选择方式、定义文件、输入指纹和索引指纹;运行信息另外记录选择器源码指纹。 每个有完整录制定义的案例会检查原始录制、连续 3 次原失败、预算内缩减、无效改动仍失败、上游修复,以及需要时的独立基线对照。运行器不调用模型;它检验浏览器执行和判定内核。真实模型工作流由 `npm run test:live-model` 单独验证,复用已经登录的 DSH 账号,需显式提供 `BUGGPS_DSH_DIR`。 结果写入 `bench/results/holdout-*.json`。可通过位置参数单独运行一个案例,例如 `node bench/holdout.mjs it-tools-1359`;单个案例的成功不能代表 12 个案例全部成功。输入定义尚缺失时明确记录 `TEST_INVALID`,不会跳过。 任一案例未达到清单预设结果,进程结束时返回非零。全局索引无效时为全部选中案例写出 `TEST_INVALID`,保留分母;`NEEDS_REVIEW` 是否符合预设仍由冻结清单决定。 ## 如何读结果 - `rawRecording`:原始脚本录制能否直接回放;使用补充定位时,也保留原始结果。 - `input.authoredTargets`:锁定之前明确补充的定位器及理由,不由修复过程改写。 - `lock`:原代码是否 3/3 出现同一失败。 - `minimize`:实际 N→M;相同步数、未解决尝试和预算耗尽均如实保留,不承诺全局最短。 - `minimize.fixedComparison`:缩短的路径是否也随上游修复恢复正常;不一致时不能将其宣传为保留了原触发情境。旧结果未记录该检查时,不能据此推断它已通过。 - `negativeControl`:仅修改说明文件后,应仍出现原失败。 - `fixed`:只应用清单中的上游修复文件;需要审阅的修法保持 `NEEDS_REVIEW`。 - `protectedInputs`:检查定义和锁文件是否保持相同字节指纹。 独立缓存避免不同历史版本污染 Vite 生成产物。部分旧版开发服务器会生成类型声明;已生成的声明及其指纹单独记录并纳入基线。运行期间源码变化仍由内核拒绝。依赖本身是单独记录的运行输入,不能将共享依赖等同于依赖完整性证明。 ChartDB 夹具显式将 `github_repo_opened` 设为 `true`,仅关闭延时推广弹窗;入口、脚本指纹和该项适配写入运行记录。数据库行为与检查条件使用原始代码。这些案例不能代表完全没有夹具适配的首次安装体验。 JWT 案例只使用无认证能力的合成夹具,录制仍保留敏感字段引用。运行器临时填入 `BUGGPS_SECRET_HOLDOUT_*`,结束后恢复原环境值。 `drawdb-1066` 的首份定义将相邻标题节点之间的视觉间距误写成字符串空格,旧输入和失败结果继续保留。`holdout-recordings/v2/drawdb-1066.json` 从干净原始版本重新录制,在另存为前固定标题、要求操作后标题完全相同,并继续要求创建 Copy 链接。新定义记录原始提交、前一输入指纹和版本;必须重新建立 RED,不能沿用旧锁。 ## 导出文件名的版本化定义 `drawdb-1031` 的[第 3 版执行定义](holdout-recordings/v3/drawdb-1031.json)是根据应用源码编写的路径:保存 `New`,在同一浏览器上下文中重新进入编辑器并确认已加载标题,再选择最近图表并首次导出。文件名前缀仍要求为 `New_`。原 11 步路径未复现、v2 错误的第二次数据库弹窗假设及其 `TEST_INVALID` 结果均保留。v3 的原代码、无关改动、上游修复与独立原代码对照符合预设结果;15→15 的预算耗尽不计缩减收益。[该次历史索引](results/regression-summary-012c4ecf2d0d.json)保留 33 次尝试,12 例各自最近一次结果为 11 `VERIFIED`、1 预期 `NEEDS_REVIEW`,尚不是同一最终提交的统一验收。 单独复验此定义时,显式指定版本目录,准备工作区的步骤保持不变: ```powershell $env:BUGGPS_HOLDOUT_INPUTS = (Resolve-Path bench/holdout-recordings/v3).Path node bench/holdout.mjs drawdb-1031 Remove-Item Env:BUGGPS_HOLDOUT_INPUTS ``` ## 自选人工体验反馈 可用 `node bench/real.mjs serve drawdb-943` 启动旧开发案例,再用 CLI `record` 或插件工具录制。工具栏可以标注预期、检查点和关键步骤;操作范围及限制以 [README](../README.md#保护机制与已知限制) 为准。 录制结束后先在本地检查内容。凭据、私有代码、业务数据、截图、路径和运行日志需要单独审阅;导出或分享由录制者选择。人工体验反馈应标注来源和环境,不用于替代固定案例验证。