# 回归清单 · 分析流水线变体治理（BM-6）

- 产品：CoDelphi
- 提交：[d48d4d2](https://github.com/gzhanlei/codelphi/compare/8b6a0c07c8ab852209ef0cc7f70da480e229a9ef...d48d4d257e4dd9b464b014d197d068ce2f9e65b1)
- 生成时间：2026-11-15 03:51 UTC

## 产品总览仪表盘
- [ ] [变化] 更新功能「产品总览仪表盘」（行为变化）（待验证）
- [ ] [变化] EC-1 — 「产品总览仪表盘」更新场景 EC-1（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：最近发布中某场景级变化的对侧证据全部来自测试/文档｜操作：buildProductOverview 计算发布稿功能勾选计数｜结果：该变化不计入 changeGroups，但发布时间线 changeStats 仍按全量统计
- [ ] [新增] EC-10 — 「产品总览仪表盘」新增场景 EC-10（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：最新发布同时存在实现证据与测试佐证的影响文本｜操作：buildUserImpact 执行｜结果：实现证据的影响文本优先占位，测试佐证文本只在有余位时补充
- [ ] [新增] EC-11 — 「产品总览仪表盘」新增场景 EC-11（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：行为变化不是场景级（entityType 非 scenario）｜操作：changeIsTestOnly 判定｜结果：返回 false，该变化按实现证据口径计入勾选计数
- [ ] [新增] EC-12 — 「产品总览仪表盘」新增场景 EC-12（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：场景级变化的对侧证据全部为测试/文档｜操作：buildProductOverview 执行｜结果：该变化不进 changeGroups 发布稿勾选计数，但 changeStats 时间线统计仍计入
- [ ] [新增] EC-13 — 「产品总览仪表盘」新增场景 EC-13（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：变化实体类型不是 scenario｜操作：changeIsTestOnly 执行｜结果：返回 false，功能级变化始终计入发布稿勾选
- [ ] [新增] EC-14 — 「产品总览仪表盘」新增场景 EC-14（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：某功能影响文本已满每功能上限｜操作：buildUserImpact 执行｜结果：后续文本计入 moreCount，不再追加到 userImpacts
- [ ] [变化] EC-2 — 「产品总览仪表盘」更新场景 EC-2（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：最近发布中某变化不是场景级（entityType 非 scenario）｜操作：changeIsTestOnly 判定｜结果：返回 false，该变化照常计入发布稿勾选计数
- [ ] [变化] EC-3 — 「产品总览仪表盘」更新场景 EC-3（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：连续多条零行为变化发布｜操作：buildProductOverview 执行｜结果：折叠为 quiet-run 分组，单条零变化发布不分组
- [ ] [变化] EC-4 — 「产品总览仪表盘」更新场景 EC-4（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：最新发布没有非空用户影响文本｜操作：buildProductOverview 执行｜结果：按确定性变化统计回退，不用更早发布的影响冒充
- [ ] [变化] EC-5 — 「产品总览仪表盘」更新场景 EC-5（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：最新发布无用户影响说明但有规格行为变化｜操作：渲染总览影响面板｜结果：回退展示前 3 个功能级变化摘要并链接全部前后差异
- [ ] [新增] EC-6 — 「产品总览仪表盘」新增场景 EC-6（行为变化）（待验证）
  情境：发布时间线中连续多次发布均无规格行为变化｜操作：渲染发布时间线｜结果：折叠为一组「N 次提交均未发现规格行为变化」，可展开查看
- [ ] [新增] EC-7 — 「产品总览仪表盘」新增场景 EC-7（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：场景级变化的对侧证据全部来自测试/文档｜操作：buildProductOverview 执行｜结果：该变化不计入 changeGroups 与影响投影，changeStats 仍计入全量
- [ ] [新增] EC-8 — 「产品总览仪表盘」新增场景 EC-8（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：同一功能下实现证据与测试佐证的影响文本并存｜操作：buildUserImpact 执行｜结果：实现证据文本先占位，测试佐证文本仅在有余位时补充
- [ ] [新增] EC-9 — 「产品总览仪表盘」新增场景 EC-9（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：最新发布中某场景变化的对侧证据全部来自测试/文档｜操作：buildProductOverview 执行｜结果：该变化不计入发布稿功能勾选计数，但仍在时间线 changeStats 与发布变化视图中可见
- [ ] [新增] ER-1 — 「产品总览仪表盘」新增场景 ER-1（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：产品尚无任何发布｜操作：buildProductOverview 执行｜结果：userImpact.state 为 none，任务入口给出「尚无发布」等真实禁用原因
- [ ] [新增] ER-2 — 「产品总览仪表盘」新增场景 ER-2（行为变化）（待验证）
  情境：知识健康接口读取失败｜操作：渲染知识健康面板｜结果：面板不渲染，不阻断总览其余内容
- [ ] [变化] HP-1 — 「产品总览仪表盘」更新场景 HP-1（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：产品存在最近一次发布且含行为变化｜操作：buildProductOverview 执行｜结果：返回按功能聚合的发布稿勾选计数、发布时间线与用户影响投影
- [ ] [新增] HP-10 — 「产品总览仪表盘」新增场景 HP-10（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：最新发布包含实现证据的行为变化｜操作：buildProductOverview 执行｜结果：changeGroups 按功能聚合 added/removed/changed 计数，影响卡展示实现证据的影响文本
- [ ] [新增] HP-11 — 「产品总览仪表盘」新增场景 HP-11（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：最新发布同时包含实现证据与测试佐证的变化｜操作：buildProductOverview 执行｜结果：影响卡中实现证据的影响文本排在测试佐证之前
- [ ] [变化] HP-2 — 「产品总览仪表盘」更新场景 HP-2（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：最近发布中同时存在实现证据与纯测试/文档证据的变化｜操作：buildProductOverview 构建用户影响投影｜结果：实现证据的影响文本排在前面，测试佐证文本只在有余位时补充
- [ ] [变化] HP-3 — 「产品总览仪表盘」更新场景 HP-3（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：产品已有最新发布与行为变化｜操作：buildProductOverview 执行｜结果：返回能力清单、最新发布变化统计、按功能分组与发布时间线
- [ ] [新增] HP-4 — 「产品总览仪表盘」新增场景 HP-4（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：最新发布存在已落库的用户影响文本｜操作：buildProductOverview 执行｜结果：按功能合并影响文本，每组最多 3 条并给出溢出计数，最多 3 个功能组
- [ ] [新增] HP-5 — 「产品总览仪表盘」新增场景 HP-5（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：最新发布的变化中场景证据全为测试/文档｜操作：buildProductOverview 执行｜结果：该变化不进发布稿功能勾选计数，changeStats 仍计入全量
- [ ] [新增] HP-6 — 「产品总览仪表盘」新增场景 HP-6（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：最新发布同时存在实现证据与测试佐证的影响文本｜操作：buildProductOverview 执行｜结果：实现证据的影响文本排在前面，测试佐证文本在有余位时补充
- [ ] [新增] HP-7 — 「产品总览仪表盘」新增场景 HP-7（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：最新发布存在带用户影响说明的变化｜操作：渲染总览「本次发布对用户的影响」面板｜结果：按功能列出用户影响文本，超出条数提示见全部前后差异
- [ ] [新增] HP-8 — 「产品总览仪表盘」新增场景 HP-8（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：最新发布的变化证据全部来自测试/文档｜操作：渲染发布稿功能勾选计数与影响投影｜结果：该变化不计入勾选计数，其影响文本排在实现证据文本之后
- [ ] [新增] HP-9 — 「产品总览仪表盘」新增场景 HP-9（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：最新发布含实现证据的行为变化｜操作：buildProductOverview 执行｜结果：changeGroups 按功能聚合实现证据变化，changeStats 统计全量变化，userImpact 按实现证据优先排列影响文本

## 产品页头部与简介展示
- [ ] [变化] 更新功能「产品页头部与简介展示」（行为变化）（待验证）
- [ ] [移除] EC-7 — 「产品页头部与简介展示」移除场景 EC-7（行为变化）（待验证）
- [ ] [移除] HP-6 — 「产品页头部与简介展示」移除场景 HP-6（行为变化）（待验证）
- [ ] [移除] HP-7 — 「产品页头部与简介展示」移除场景 HP-7（行为变化）（待验证）
- [ ] [变化] EC-1 — 「产品页头部与简介展示」更新场景 EC-1（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：产品简介为空｜操作：buildProductOverview 执行｜结果：headline 回退为「产品概览」
- [ ] [变化] EC-2 — 「产品页头部与简介展示」更新场景 EC-2（行为变化）（待验证）
  情境：产品简介为空且当前用户可编辑｜操作：渲染产品简介行｜结果：显示「尚无产品简介——点击 ✎ 由 AI 生成或手写」与编辑入口
- [ ] [变化] EC-3 — 「产品页头部与简介展示」更新场景 EC-3（行为变化）（待验证）
  情境：产品简介为空且当前用户只读｜操作：渲染产品简介行｜结果：不渲染任何占位内容
- [ ] [变化] EC-4 — 「产品页头部与简介展示」更新场景 EC-4（行为变化；证据路径命中 components/scenario-card.tsx）（待验证）
  情境：场景证据全部来自测试/文档，无实现代码｜操作：渲染场景卡片｜结果：场景标签行显示「测试佐证」徽标，悬浮提示行为以人工核实为准
- [ ] [变化] EC-5 — 「产品页头部与简介展示」更新场景 EC-5（行为变化；证据路径命中 lib/evidence.ts）（待验证）
  情境：场景证据为空数组｜操作：isTestOnlyEvidence 执行｜结果：返回 false，不显示测试佐证徽标
- [ ] [变化] EC-6 — 「产品页头部与简介展示」更新场景 EC-6（行为变化；证据路径命中 app/globals.css；证据路径命中 components/scenario-card.tsx）（待验证）
  情境：场景证据全部来自测试/文档，无实现代码｜操作：渲染场景卡片｜结果：在编号后显示「测试佐证」徽标，悬浮说明行为以人工核实为准
- [ ] [变化] ER-1 — 「产品页头部与简介展示」更新场景 ER-1（行为变化）（待验证）
  情境：保存产品简介接口失败｜操作：在编辑对话框点击保存｜结果：对话框内显示错误消息，保持打开可重试
- [ ] [变化] HP-1 — 「产品页头部与简介展示」更新场景 HP-1（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：产品简介由分析生成并带证据｜操作：buildProductOverview 执行｜结果：headline 取简介文本，headlineSource 为 generated，headlineEvidence 返回证据路径
- [ ] [变化] HP-2 — 「产品页头部与简介展示」更新场景 HP-2（行为变化）（待验证）
  情境：产品已有简介且当前用户可编辑｜操作：渲染产品简介行｜结果：展示完整简介文本与 ✎ 编辑入口
- [ ] [变化] HP-3 — 「产品页头部与简介展示」更新场景 HP-3（行为变化；证据路径命中 components/scenario-card.tsx）（待验证）
  情境：场景证据全部来自测试/文档｜操作：渲染规格工作台场景卡片｜结果：场景标签行显示「测试佐证」徽标，悬停说明行为以人工核实为准
- [ ] [变化] HP-4 — 「产品页头部与简介展示」更新场景 HP-4（行为变化；证据路径命中 components/scenario-card.tsx）（待验证）
  情境：场景证据包含实现代码路径｜操作：渲染场景卡片｜结果：正常展示场景标签、情境/操作/结果与证据链接，不显示测试佐证徽标
- [ ] [变化] HP-5 — 「产品页头部与简介展示」更新场景 HP-5（行为变化；证据路径命中 components/scenario-card.tsx）（待验证）
  情境：场景证据包含实现代码｜操作：渲染场景卡片｜结果：显示类别、编号、来源与编辑信息，不显示「测试佐证」徽标

## 分析覆盖率回执与继承
- [ ] [变化] 更新功能「分析覆盖率回执与继承」（行为变化）（待验证）
- [ ] [变化] EC-1 — 「分析覆盖率回执与继承」更新场景 EC-1（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：分析运行无覆盖率回执｜操作：buildProductOverview 执行｜结果：coverageByte 与 coverageFiles 为 null，不展示覆盖率行
- [ ] [变化] EC-2 — 「分析覆盖率回执与继承」更新场景 EC-2（行为变化）（待验证）
  情境：本次分析无覆盖率回执｜操作：渲染总览信任行｜结果：覆盖率位置显示「源码装配覆盖率 —（无覆盖率回执）」
- [ ] [变化] EC-3 — 「分析覆盖率回执与继承」更新场景 EC-3（行为变化）（待验证）
  情境：上一版为回填快照或沿用版本，无有效回执｜操作：loadInheritedCoverageReceipt 执行｜结果：沿版本链向上最多回看 10 版，跳过 implFilesTotal=0 的合成零回执，取最近有效回执
- [ ] [新增] EC-4 — 「分析覆盖率回执与继承」新增场景 EC-4（行为变化）（待验证）
  情境：提取趟数达到上限｜操作：isCoverageCapped 执行｜结果：返回 true，展示层显式警示本规格未覆盖全部实现面
- [ ] [新增] EC-5 — 「分析覆盖率回执与继承」新增场景 EC-5（行为变化）（待验证）
  情境：分区被截断或 diff 有未选路径｜操作：deriveSourceCoverage 执行｜结果：状态为 partial，并保留 diffTotalPaths/diffSelectedPaths/diffOmittedPaths 计数
- [ ] [新增] EC-6 — 「分析覆盖率回执与继承」新增场景 EC-6（行为变化；证据路径命中 lib/spec-versions.ts）（待验证）
  情境：传入的受影响功能名在上一版规格中不存在｜操作：loadPreviousSpecText 执行｜结果：无命中，功能顺序保持原 position 序不变
- [ ] [新增] EC-7 — 「分析覆盖率回执与继承」新增场景 EC-7（行为变化；证据路径命中 lib/spec-versions.ts）（待验证）
  情境：仓库没有任何规格版本｜操作：loadPreviousSpecText 执行｜结果：返回空数组，锚定降级为仅命名约束
- [ ] [新增] ER-1 — 「分析覆盖率回执与继承」新增场景 ER-1（行为变化）（待验证）
  情境：版本链上全部回执均无效｜操作：loadInheritedCoverageReceipt 执行｜结果：返回 null
- [ ] [新增] ER-2 — 「分析覆盖率回执与继承」新增场景 ER-2（行为变化）（待验证）
  情境：未装配任何实现文件｜操作：deriveSourceCoverage 执行｜结果：状态为 failed
- [ ] [新增] ER-3 — 「分析覆盖率回执与继承」新增场景 ER-3（行为变化；证据路径命中 lib/analysis.ts）（待验证）
  情境：读取上一版规格文本抛错｜操作：runAnalysisBody 加载锚｜结果：记录错误日志，previousSpecText 置空，本次分析不因锚加载失败而中断
- [ ] [变化] HP-1 — 「分析覆盖率回执与继承」更新场景 HP-1（行为变化；证据路径命中 lib/product-overview.ts）（待验证）
  情境：分析运行带覆盖率回执｜操作：buildProductOverview 执行｜结果：返回 coverageByte 与 coverageFiles 展示标签
- [ ] [变化] HP-2 — 「分析覆盖率回执与继承」更新场景 HP-2（行为变化）（待验证）
  情境：本次分析产生覆盖率回执｜操作：渲染总览信任行｜结果：展示源码装配覆盖率字节、证据文件数与 Spec 版本号
- [ ] [新增] HP-3 — 「分析覆盖率回执与继承」新增场景 HP-3（行为变化）（待验证）
  情境：分析完成并写入规格版本｜操作：computeCoverageReceipt 与 saveCoverageReceipt 执行｜结果：回执记录装配文件数/字节、总面、覆盖率、趟数与 diff 覆盖口径并落库
- [ ] [新增] HP-4 — 「分析覆盖率回执与继承」新增场景 HP-4（行为变化）（待验证）
  情境：分析 run 完成源码装配｜操作：deriveSourceCoverage 执行｜结果：覆盖率回执含 implFilesAssembled/implFilesTotal/coverageRatio，全部装配且未截断时状态为 complete
- [ ] [新增] HP-5 — 「分析覆盖率回执与继承」新增场景 HP-5（行为变化；证据路径命中 lib/spec-versions.ts）（待验证）
  情境：仓库已有上一版规格且本次为增量分析｜操作：loadPreviousSpecText 传入受影响功能名执行｜结果：受影响功能按传入顺序排最前，其余功能保持 position 序返回
- [ ] [新增] HP-6 — 「分析覆盖率回执与继承」新增场景 HP-6（行为变化；证据路径命中 lib/spec-versions.ts）（待验证）
  情境：仓库已有上一版规格且本次为全量分析｜操作：loadPreviousSpecText 不传 prioritize 执行｜结果：全部功能按 position 序返回场景全文锚

## 变体场景合并提案脚本
- [ ] [新增] 新增功能「变体场景合并提案脚本」（行为变化）（待验证）
- [ ] [回归] EC-1 — 功能或场景来源为 manual，或场景已被人工核实 脚本生成提案（影响面推荐）（证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）
- [ ] [回归] ER-1 — 未提供 --repository 参数 执行脚本（影响面推荐）（证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）
- [ ] [回归] ER-2 — 指定仓库不存在或没有规格版本 执行脚本（影响面推荐）（证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）
- [ ] [回归] HP-1 — 指定仓库存在措辞变体场景 执行 merge-variant-scenarios.ts --repository <slug|id>（影响面推荐）（证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）
- [ ] [回归] HP-2 — 人工审阅 dry-run 报告后确认合并 追加 --apply 执行（影响面推荐）（证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）

## 变体场景存量清理脚本
- [ ] [新增] 新增功能「变体场景存量清理脚本」（行为变化）（待验证）
- [ ] [回归] EC-1 — 场景来源为 manual 或已人工核实 生成合并提案（影响面推荐）（证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）
- [ ] [回归] ER-1 — 未提供 --repository 参数 执行脚本（影响面推荐）（证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）
- [ ] [回归] ER-2 — 指定仓库不存在或没有规格版本 执行脚本（影响面推荐）（证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）
- [ ] [回归] HP-1 — 仓库最新规格版本存在措辞变体场景 执行 merge-variant-scenarios.ts --repository <slug|id>（影响面推荐）（证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）
- [ ] [回归] HP-2 — 人工审阅 dry-run 报告后确认执行 追加 --apply 执行（影响面推荐）（证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）

## 变体场景清理提案脚本
- [ ] [新增] 新增功能「变体场景清理提案脚本」（行为变化）（待验证）
- [ ] [回归] EC-1 — 功能来源为 manual 或场景已被人工核实 脚本生成提案（影响面推荐）（证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）
- [ ] [回归] EC-2 — 功能或场景来源为 manual，或场景已被人工核实 脚本生成提案（影响面推荐）（证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）
- [ ] [回归] ER-1 — 未提供 --repository 参数 执行脚本（影响面推荐）（证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）
- [ ] [回归] ER-2 — 指定仓库不存在或没有规格版本 执行脚本（影响面推荐）（证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）
- [ ] [回归] ER-3 — 仓库不存在或该仓库没有规格版本 执行脚本（影响面推荐）（证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）
- [ ] [回归] ER-4 — 指定仓库不存在或该仓库没有规格版本 执行脚本（影响面推荐）（证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）
- [ ] [回归] HP-1 — 指定仓库存在最新规格版本且含措辞变体场景 执行 merge-variant-scenarios.ts --repository <slug|id>（影响面推荐）（证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）
- [ ] [回归] HP-2 — 指定仓库存在措辞变体场景 执行 merge-variant-scenarios.ts --repository <slug|id>（影响面推荐）（证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）
- [ ] [回归] HP-3 — 人工审阅 dry-run 报告后决定执行 追加 --apply 执行（影响面推荐）（证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）
- [ ] [回归] HP-4 — 已人工审阅 dry-run 报告 执行 merge-variant-scenarios.ts --repository <slug|id> --apply（影响面推荐）（证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）

## 变体场景清理脚本
- [ ] [新增] 新增功能「变体场景清理脚本」（行为变化）（待验证）
- [ ] [回归] EC-1 — 功能来源为 manual 或场景已被人工核实 脚本生成提案（影响面推荐）（证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）
- [ ] [回归] ER-1 — 未提供 --repository 参数 执行脚本（影响面推荐）（证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）
- [ ] [回归] ER-2 — 指定仓库不存在或该仓库没有规格版本 执行脚本（影响面推荐）（证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）
- [ ] [回归] HP-1 — 维护者对指定仓库运行清理脚本且未加 --apply 执行 merge-variant-scenarios.ts --repository <slug|id>（影响面推荐）（证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）
- [ ] [回归] HP-2 — 维护者审阅 dry-run 报告后决定执行 执行 merge-variant-scenarios.ts --repository <slug|id> --apply（影响面推荐）（证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）

## 多趟提取确定性合并
- [ ] [变化] 更新功能「多趟提取确定性合并」（行为变化）（待验证）
- [ ] [移除] ER-1 — 「多趟提取确定性合并」移除场景 ER-1（行为变化）（待验证）
- [ ] [变化] EC-1 — 「多趟提取确定性合并」更新场景 EC-1（行为变化；证据路径命中 lib/extraction-merge.ts）（待验证）
  情境：两场景骨架词共享但行为不同（如跳转 dashboard 与锁定账户）｜操作：scenarioVariantSimilar 判定｜结果：返回 false，两条场景都保留
- [ ] [变化] EC-2 — 「多趟提取确定性合并」更新场景 EC-2（行为变化；证据路径命中 lib/extraction-merge.ts）（待验证）
  情境：合并后 changes 超过 150 条｜操作：mergeChunkResults 执行｜结果：截断到前 150 条并打日志，onStats 回报 changesTruncated
- [ ] [变化] EC-3 — 「多趟提取确定性合并」更新场景 EC-3（行为变化；证据路径命中 tests/bm6-variant-fold.test.ts）（待验证）
  情境：同一功能内两条场景行为确实不同｜操作：mergeChunkResults 执行｜结果：两条场景都保留，不误合
- [ ] [新增] EC-4 — 「多趟提取确定性合并」新增场景 EC-4（行为变化；证据路径命中 lib/extraction-merge.ts）（待验证）
  情境：两条场景骨架词共享但行为不同（如「跳转 dashboard」与「锁定账户」）｜操作：mergeChunkResults 执行｜结果：不折叠，两条场景均保留
- [ ] [新增] EC-5 — 「多趟提取确定性合并」新增场景 EC-5（行为变化；证据路径命中 lib/extraction-merge.ts）（待验证）
  情境：两条场景骨架词共享但行为不同（如跳转 dashboard 与锁定账户）｜操作：mergeChunkResults 执行｜结果：变体判定拒绝合并，两条均保留
- [ ] [新增] EC-6 — 「多趟提取确定性合并」新增场景 EC-6（行为变化；证据路径命中 lib/extraction-merge.ts）（待验证）
  情境：两条场景骨架词共享但行为不同（如「跳转 dashboard」与「锁定账户」）｜操作：mergeChunkResults 执行｜结果：变体判定拒绝折叠，两条场景都保留
- [ ] [新增] EC-7 — 「多趟提取确定性合并」新增场景 EC-7（行为变化；证据路径命中 lib/extraction-merge.ts）（待验证）
  情境：两条场景情境/操作/结果同义且 category 相同｜操作：mergeChunkResults 执行｜结果：scenarioBehaviorEqual 命中直接去重，不进入变体判定
- [ ] [变化] HP-1 — 「多趟提取确定性合并」更新场景 HP-1（行为变化；证据路径命中 lib/extraction-merge.ts）（待验证）
  情境：多个分区返回同名功能｜操作：mergeChunkResults 执行｜结果：按功能稳定键合并，摘要取场景数最多的趟，场景按引用冲突规则重编号
- [ ] [新增] HP-10 — 「多趟提取确定性合并」新增场景 HP-10（行为变化；证据路径命中 lib/extraction-merge.ts）（待验证）
  情境：同一分区输出内同一行为以不同措辞重复建条｜操作：mergeChunkResults 执行｜结果：scenarioVariantSimilar 命中，后一条被去重，scenariosDeduped 计数加一
- [ ] [新增] HP-2 — 「多趟提取确定性合并」新增场景 HP-2（行为变化；证据路径命中 lib/extraction-merge.ts）（待验证）
  情境：单分区输出中同一行为从不同角色重复建条（措辞变体）｜操作：mergeChunkResults 执行｜结果：变体近似判定命中后折叠，scenariosDeduped 计数加一，不落库并存
- [ ] [新增] HP-3 — 「多趟提取确定性合并」新增场景 HP-3（行为变化；证据路径命中 lib/extraction-merge.ts）（待验证）
  情境：多个分区各自提取出同一功能｜操作：mergeChunkResults 执行｜结果：按功能 key 归并为一条功能，场景合并保留
- [ ] [新增] HP-4 — 「多趟提取确定性合并」新增场景 HP-4（行为变化；证据路径命中 lib/extraction-merge.ts）（待验证）
  情境：单分区输出内同一行为以不同措辞重复建条｜操作：mergeChunkResults 执行｜结果：变体场景折叠为一条，保留先到者，changes 不受影响
- [ ] [新增] HP-5 — 「多趟提取确定性合并」新增场景 HP-5（行为变化；证据路径命中 lib/extraction-merge.ts）（待验证）
  情境：实现面被切分为多个提取分区｜操作：mergeChunkResults 合并各趟 AnalysisResult｜结果：同名功能归并为一条，场景按顺序合并为完整规格
- [ ] [新增] HP-6 — 「多趟提取确定性合并」新增场景 HP-6（行为变化；证据路径命中 lib/extraction-merge.ts）（待验证）
  情境：单分区输出内同一行为以不同角色或措辞重复建条｜操作：mergeChunkResults 执行｜结果：scenarioVariantSimilar 判定为变体后折叠，scenariosDeduped 计数加一
- [ ] [新增] HP-7 — 「多趟提取确定性合并」新增场景 HP-7（行为变化；证据路径命中 lib/extraction-merge.ts）（待验证）
  情境：多个分区窗口输出同一功能｜操作：mergeChunkResults 执行｜结果：按功能稳定键归并场景并统计去重数量
- [ ] [新增] HP-8 — 「多趟提取确定性合并」新增场景 HP-8（行为变化；证据路径命中 lib/extraction-merge.ts）（待验证）
  情境：多个分区窗口各自产出功能与场景｜操作：mergeChunkResults 执行｜结果：按功能稳定键归并场景，返回合并后的规格与去重/截断统计
- [ ] [新增] HP-9 — 「多趟提取确定性合并」新增场景 HP-9（行为变化；证据路径命中 lib/extraction-merge.ts）（待验证）
  情境：实现面超出单窗口被分成多个分区｜操作：mergeChunkResults 执行｜结果：各分区功能按 key 归并，场景合并为一份完整规格并回报合并统计

## 行为面两步提取
- [ ] [变化] 更新功能「行为面两步提取」（行为变化）（待验证）
- [ ] [变化] EC-1 — 「行为面两步提取」更新场景 EC-1（行为变化；证据路径命中 tests/ai.test.ts）（待验证）
  情境：复述输出含未知路径或畸形条目｜操作：parseBehavioralDescriptions 执行｜结果：只保留已知路径的合法条目，畸形条目丢弃
- [ ] [新增] EC-2 — 「行为面两步提取」新增场景 EC-2（行为变化；证据路径命中 tests/ai.test.ts）（待验证）
  情境：判定输出缺 product 或 release 且 features 为空数组｜操作：analyzeBehavioralGroup 执行｜结果：注入占位 product/release，features 空数组合法
- [ ] [新增] EC-3 — 「行为面两步提取」新增场景 EC-3（行为变化；证据路径命中 lib/analysis.ts）（待验证）
  情境：窗口内无实现级行为变更（纯文档/注释/格式提交）｜操作：runAnalysisBody 执行｜结果：跳过全部 AI 提取，上一版规格原样沿用、零变化
- [ ] [新增] EC-4 — 「行为面两步提取」新增场景 EC-4（行为变化）（待验证）
  情境：行为文件数超过组数上限｜操作：enumerateBehavioralChunks 执行｜结果：只处理前 maxGroups 组，其余计入 pathsOmitted，状态为 partial
- [ ] [新增] EC-5 — 「行为面两步提取」新增场景 EC-5（行为变化）（待验证）
  情境：单文件 hunk 总需求超过 400 行预算｜操作：allocateHunkReads 执行｜结果：每 hunk 先保底核心区间，剩余按需求比例分配，未满足的 hunk 标记 truncated 并计数披露
- [ ] [变化] ER-1 — 「行为面两步提取」更新场景 ER-1（行为变化）（待验证）
  情境：某组定向提取连续两次失败｜操作：enumerateBehavioralChunks 执行｜结果：跳过该组，groupsFailed 计数增加，状态为 partial 而非完整成功
- [ ] [变化] HP-1 — 「行为面两步提取」更新场景 HP-1（行为变化；证据路径命中 tests/ai.test.ts）（待验证）
  情境：行为变更文件含多个变更块｜操作：analyzeBehavioralGroup 执行｜结果：先调用复述 prompt 逐块给出改前改后，再调用判定 prompt 输出场景
- [ ] [新增] HP-2 — 「行为面两步提取」新增场景 HP-2（行为变化；证据路径命中 lib/analysis.ts）（待验证）
  情境：push 变更包含行为文件｜操作：runAnalysisBody 计算 behavioralPaths 并进入提取｜结果：行为文件清单跨模式共享，供 RC2 与定向枚举使用
- [ ] [新增] HP-3 — 「行为面两步提取」新增场景 HP-3（行为变化；证据路径命中 lib/analysis.ts）（待验证）
  情境：窗口存在实现级行为变更｜操作：runAnalysisBody 执行｜结果：按行为面文件清单分区逐趟提取后合并为完整规格
- [ ] [新增] HP-4 — 「行为面两步提取」新增场景 HP-4（行为变化）（待验证）
  情境：窗口 diff 含行为文件｜操作：enumerateBehavioralChunks 执行｜结果：按组定向提取，每组结果用组文件与全部 diff 文件作证据允许集清洗后返回

## 规格工作区场景卡片
- [ ] [新增] 新增功能「规格工作区场景卡片」（行为变化）（待验证）
- [ ] [回归] EC-1 — 场景同时带 staleSince 与测试佐证 渲染 ScenarioCard（影响面推荐）（证据路径命中 components/scenario-card.tsx）（待验证）
- [ ] [回归] HP-1 — 场景证据包含实现代码路径 渲染 ScenarioCard（影响面推荐）（证据路径命中 components/scenario-card.tsx）（待验证）
- [ ] [回归] HP-2 — 场景证据全部来自测试或文档 渲染 ScenarioCard（影响面推荐）（证据路径命中 components/scenario-card.tsx）（待验证）

## 规格工作台场景卡片
- [ ] [新增] 新增功能「规格工作台场景卡片」（行为变化）（待验证）
- [ ] [回归] EC-1 — 场景证据全部来自测试或文档路径 渲染 ScenarioCard（影响面推荐）（证据路径命中 components/scenario-card.tsx；证据路径命中 lib/evidence.ts）（待验证）
- [ ] [回归] EC-2 — 场景证据为空数组 isTestOnlyEvidence 判定（影响面推荐）（证据路径命中 lib/evidence.ts）（待验证）
- [ ] [回归] EC-3 — 场景被标记可能过时 渲染场景卡片（影响面推荐）（证据路径命中 components/scenario-card.tsx）（待验证）
- [ ] [回归] HP-1 — 场景证据包含实现代码路径 渲染 ScenarioCard（影响面推荐）（证据路径命中 components/scenario-card.tsx）（待验证）
- [ ] [回归] HP-2 — 场景证据全部来自测试或文档 渲染场景卡片（影响面推荐）（证据路径命中 components/scenario-card.tsx）（待验证）
- [ ] [回归] HP-3 — 场景证据含实现代码 渲染场景卡片（影响面推荐）（证据路径命中 components/scenario-card.tsx）（待验证）

## 规格差异变体折叠
- [ ] [新增] 新增功能「规格差异变体折叠」（行为变化）（待验证）
- [ ] [回归] EC-1 — 两条场景 category 不同（happy 与 edge） scenarioVariantSimilar 执行（影响面推荐）（证据路径命中 lib/spec-diff.ts）（待验证）
- [ ] [回归] EC-2 — 两条场景结果数字不同（404 与 400） scenarioVariantSimilar 执行（影响面推荐）（证据路径命中 lib/spec-diff.ts）（待验证）
- [ ] [回归] EC-3 — 两条场景结果否定词计数不同（可以重试 与 不可以重试） scenarioVariantSimilar 执行（影响面推荐）（证据路径命中 lib/spec-diff.ts）（待验证）
- [ ] [回归] EC-4 — 两条场景情境被同义改写但操作与结果行为等价 scenarioVariantSimilar 执行（影响面推荐）（证据路径命中 lib/spec-diff.ts）（待验证）
- [ ] [回归] ER-1 — 两条场景骨架词共享但结果语义相反（跳转 dashboard 与 锁定账户） scenarioVariantSimilar 执行（影响面推荐）（证据路径命中 lib/spec-diff.ts）（待验证）
- [ ] [回归] HP-1 — 同功能内一条场景被移除、另一条措辞近似的新场景被加入 diffSpecWithFolded 执行（影响面推荐）（证据路径命中 lib/spec-diff.ts）（待验证）
- [ ] [回归] HP-2 — 同功能内 removed↔added 且行为字段逐项等价 diffSpecWithFolded 执行（影响面推荐）（证据路径命中 lib/spec-diff.ts）（待验证）

## 规格版本落库与发布记录
- [ ] [变化] 更新功能「规格版本落库与发布记录」（行为变化）（待验证）
- [ ] [变化] EC-1 — 「规格版本落库与发布记录」更新场景 EC-1（行为变化；证据路径命中 lib/analysis.ts）（待验证）
  情境：发布已存在 changes 记录｜操作：upsertRelease 执行｜结果：跳过 changes 插入，直接确保回归任务后返回 releaseId
- [ ] [新增] EC-10 — 「规格版本落库与发布记录」新增场景 EC-10（行为变化；证据路径命中 lib/spec-versions.ts）（待验证）
  情境：仓库没有任何规格版本｜操作：loadPreviousSpecText 执行｜结果：返回空数组，锚定降级为仅命名约束
- [ ] [新增] EC-2 — 「规格版本落库与发布记录」新增场景 EC-2（行为变化；证据路径命中 lib/spec-versions.ts）（待验证）
  情境：增量模式下 AI 输出命中 carried 键｜操作：insertSpecVersion 执行｜结果：该 AI 功能被丢弃并计数，carried 内容保全
- [ ] [新增] EC-3 — 「规格版本落库与发布记录」新增场景 EC-3（行为变化；证据路径命中 lib/spec-versions.ts）（待验证）
  情境：新版场景数较上一版骤降超过阈值｜操作：detectSpecCollapse 执行｜结果：返回坍缩告警，只告警不阻断落库
- [ ] [新增] EC-4 — 「规格版本落库与发布记录」新增场景 EC-4（行为变化；证据路径命中 lib/spec-diff.ts）（待验证）
  情境：前后场景行为相反或数字/否定冲突（如 404 与 400、可以重试与不可以重试）｜操作：scenarioVariantSimilar 判定｜结果：返回 false，不折叠，两条变化均保留
- [ ] [新增] EC-5 — 「规格版本落库与发布记录」新增场景 EC-5（行为变化；证据路径命中 lib/spec-diff.ts）（待验证）
  情境：前后场景 category 不一致（happy 与 edge）｜操作：scenarioVariantSimilar 判定｜结果：直接返回 false，不折叠
- [ ] [新增] EC-6 — 「规格版本落库与发布记录」新增场景 EC-6（行为变化；证据路径命中 lib/spec-diff.ts）（待验证）
  情境：同功能内 removed↔added 且行为字段逐项等价｜操作：scenarioChanges 执行｜结果：折叠为 reason=renumber，不产生变化行
- [ ] [新增] EC-7 — 「规格版本落库与发布记录」新增场景 EC-7（行为变化；证据路径命中 lib/spec-diff.ts）（待验证）
  情境：同功能内 removed↔added 措辞近似但语义相同｜操作：scenarioChanges 执行｜结果：折叠为 reason=variant 进 folded 审计面，不产生变化行、不删数据
- [ ] [新增] EC-8 — 「规格版本落库与发布记录」新增场景 EC-8（行为变化；证据路径命中 lib/spec-diff.ts）（待验证）
  情境：两条场景行为相反、主体互换、数字或否定冲突｜操作：scenarioVariantSimilar 执行｜结果：返回 false，保留为真实变化
- [ ] [新增] EC-9 — 「规格版本落库与发布记录」新增场景 EC-9（行为变化；证据路径命中 lib/spec-versions.ts）（待验证）
  情境：prioritize 中的功能名在上一版规格中不存在｜操作：loadPreviousSpecText 执行｜结果：顺序不变，全部功能按 position 序返回
- [ ] [变化] ER-1 — 「规格版本落库与发布记录」更新场景 ER-1（行为变化；证据路径命中 lib/analysis.ts）（待验证）
  情境：保存过程中任一步抛错｜操作：saveResult 执行｜结果：事务回滚并抛出错误，run 不标记成功
- [ ] [新增] ER-2 — 「规格版本落库与发布记录」新增场景 ER-2（行为变化；证据路径命中 lib/analysis.ts）（待验证）
  情境：当前 run 已被更新的 run 取代｜操作：assertLatestRun 执行｜结果：抛出 Analysis superseded by run N，事务回滚
- [ ] [新增] ER-3 — 「规格版本落库与发布记录」新增场景 ER-3（行为变化；证据路径命中 lib/spec-diff.ts）（待验证）
  情境：新增功能的实现证据文件本次均无行为性行变更｜操作：diffFeature 执行｜结果：折叠为 reason=tests-only，不落行为变化
- [ ] [变化] HP-1 — 「规格版本落库与发布记录」更新场景 HP-1（行为变化；证据路径命中 lib/analysis.ts）（待验证）
  情境：分析成功且存在上一版规格｜操作：saveResult 执行｜结果：事务内写入规格版本、覆盖率回执、发布记录与改动文件清单，run 标记 succeeded
- [ ] [变化] HP-2 — 「规格版本落库与发布记录」更新场景 HP-2（行为变化；证据路径命中 lib/analysis.ts）（待验证）
  情境：发布已存在同 sha 记录｜操作：upsertRelease 执行｜结果：按唯一键更新 analysis_run_id 与 spec_version_id，不重复插入
- [ ] [新增] HP-3 — 「规格版本落库与发布记录」新增场景 HP-3（行为变化；证据路径命中 lib/spec-versions.ts）（待验证）
  情境：增量模式存在受影响集之外的既有功能｜操作：insertSpecVersion 执行｜结果：未受影响功能原样沿用上一版，AI 输出与人工条目按优先级合并
- [ ] [新增] HP-4 — 「规格版本落库与发布记录」新增场景 HP-4（行为变化；证据路径命中 lib/spec-diff.ts）（待验证）
  情境：同功能内 removed↔added 场景措辞近似但语义相同｜操作：diffSpec 计算变化｜结果：该对折叠为 reason=variant 的审计明细，不产生变化行
- [ ] [新增] HP-5 — 「规格版本落库与发布记录」新增场景 HP-5（行为变化；证据路径命中 lib/spec-diff.ts）（待验证）
  情境：分析产出的场景与上一版行为等价但编号变化｜操作：diffSpec 计算场景差异｜结果：removed↔added 对折叠为 reason=renumber，不产生变化行
- [ ] [新增] HP-6 — 「规格版本落库与发布记录」新增场景 HP-6（行为变化；证据路径命中 lib/spec-diff.ts）（待验证）
  情境：分析产出的场景与上一版为同义改写（如「演示访客」改为「demo 访客」）｜操作：diffSpec 计算场景差异｜结果：removed↔added 对折叠为 reason=variant，写入 folded 审计，changes 为空
- [ ] [新增] HP-7 — 「规格版本落库与发布记录」新增场景 HP-7（行为变化）（待验证）
  情境：分析产出新规格｜操作：insertSpecVersion 执行｜结果：写入规格版本并在同事务内重建 path→规格反向索引
- [ ] [新增] HP-8 — 「规格版本落库与发布记录」新增场景 HP-8（行为变化；证据路径命中 lib/spec-versions.ts）（待验证）
  情境：仓库已有最新规格版本｜操作：loadPreviousSpecText 执行｜结果：返回按 position 序的功能与场景全文，供 prompt 锚定
- [ ] [新增] HP-9 — 「规格版本落库与发布记录」新增场景 HP-9（行为变化；证据路径命中 lib/spec-versions.ts）（待验证）
  情境：增量分析已确定受影响功能清单｜操作：loadPreviousSpecText 传入 prioritize 执行｜结果：受影响功能稳定排到最前，其余保持 position 序

## 证据清洗与提取重试
- [ ] [变化] 更新功能「证据清洗与提取重试」（行为变化）（待验证）
- [ ] [变化] EC-1 — 「证据清洗与提取重试」更新场景 EC-1（行为变化；证据路径命中 lib/analysis.ts）（待验证）
  情境：模型引用了本趟未读的文件｜操作：sanitizeEvidence 执行｜结果：剔除该证据及整条场景/变化，打 warn 日志，其余产出保留
- [ ] [变化] EC-2 — 「证据清洗与提取重试」更新场景 EC-2（行为变化；证据路径命中 lib/analysis.ts）（待验证）
  情境：候选全部被清洗后为空｜操作：sanitizeEvidence 执行｜结果：标记 allCandidatesRejected 并打 error 日志，不伪装成正常空结果
- [ ] [新增] EC-3 — 「证据清洗与提取重试」新增场景 EC-3（行为变化；证据路径命中 tests/ai.test.ts）（待验证）
  情境：模型输出缺 changes 键｜操作：parseAnalysisContent 执行｜结果：changes 归一化为空数组
- [ ] [新增] EC-4 — 「证据清洗与提取重试」新增场景 EC-4（行为变化；证据路径命中 lib/evidence.ts）（待验证）
  情境：证据数组为空｜操作：isTestOnlyEvidence 执行｜结果：返回 false，不标记为测试佐证
- [ ] [新增] EC-5 — 「证据清洗与提取重试」新增场景 EC-5（行为变化；证据路径命中 lib/evidence.ts）（待验证）
  情境：证据以 JSON 字符串或带 evidence 字段的场景对象传入｜操作：isTestOnlyEvidence 执行｜结果：解析出证据数组后按同一口径判定
- [ ] [新增] EC-6 — 「证据清洗与提取重试」新增场景 EC-6（行为变化；证据路径命中 lib/evidence.ts）（待验证）
  情境：证据含 CI/锁文件等基础设施文件｜操作：evidenceKind 执行｜结果：仍判为 implementation，不标记为测试佐证
- [ ] [新增] EC-7 — 「证据清洗与提取重试」新增场景 EC-7（行为变化）（待验证）
  情境：部分证据路径不在允许集内｜操作：sanitizeEvidence 执行｜结果：剔除不可溯源声明，droppedClaims 计数增加，证据完整性维度为 partial
- [ ] [变化] ER-1 — 「证据清洗与提取重试」更新场景 ER-1（行为变化；证据路径命中 lib/analysis.ts）（待验证）
  情境：单趟提取重试后仍失败｜操作：extractPassWithRetry 执行｜结果：错误向上抛出，run 失败
- [ ] [新增] ER-2 — 「证据清洗与提取重试」新增场景 ER-2（行为变化；证据路径命中 tests/ai.test.ts）（待验证）
  情境：响应不含完整 JSON 对象｜操作：parseAnalysisContent 执行｜结果：抛出 AI response did not contain a JSON object
- [ ] [新增] ER-3 — 「证据清洗与提取重试」新增场景 ER-3（行为变化；证据路径命中 lib/ai.ts）（待验证）
  情境：模型输出结构不可解析｜操作：parseAnalysisContent 解析｜结果：schema 校验失败并抛错，交由重试与 run 失败如实暴露
- [ ] [新增] ER-4 — 「证据清洗与提取重试」新增场景 ER-4（行为变化）（待验证）
  情境：某趟候选全部被清洗｜操作：deriveEvidenceIntegrity 执行｜结果：allCandidatesRejectedPasses 计数增加，证据完整性维度为 failed
- [ ] [变化] HP-1 — 「证据清洗与提取重试」更新场景 HP-1（行为变化；证据路径命中 lib/analysis.ts）（待验证）
  情境：模型引用的证据路径都在本分区允许集内｜操作：sanitizeEvidence 执行｜结果：证据全部保留，返回清洗摘要且 droppedClaims 为 0
- [ ] [新增] HP-2 — 「证据清洗与提取重试」新增场景 HP-2（行为变化；证据路径命中 lib/analysis.ts）（待验证）
  情境：单趟提取首次调用抛错｜操作：extractPassWithRetry 执行｜结果：重试一次，重试调用照常落 LLM 回执，成功则继续
- [ ] [新增] HP-3 — 「证据清洗与提取重试」新增场景 HP-3（行为变化；证据路径命中 tests/ai.test.ts）（待验证）
  情境：模型在合法 diff 路径前后带零宽字符｜操作：parseAnalysisContent 执行｜结果：证据路径去除不可见字符后通过允许集校验
- [ ] [新增] HP-4 — 「证据清洗与提取重试」新增场景 HP-4（行为变化；证据路径命中 tests/ai.test.ts）（待验证）
  情境：模型输出证据列表超过上限｜操作：parseAnalysisContent 在 schema 校验前执行 capEvidence｜结果：证据截断为前 5 条，解析继续成功
- [ ] [新增] HP-5 — 「证据清洗与提取重试」新增场景 HP-5（行为变化；证据路径命中 lib/evidence.ts）（待验证）
  情境：模型输出证据为 JSON 字符串或带 evidence 字段的场景对象｜操作：isTestOnlyEvidence 读取证据｜结果：兼容三种形状解析出证据数组并判定是否全部非实现代码
- [ ] [新增] HP-6 — 「证据清洗与提取重试」新增场景 HP-6（行为变化；证据路径命中 lib/evidence.ts）（待验证）
  情境：场景证据含实现代码路径｜操作：isTestOnlyEvidence 执行｜结果：返回 false，按实现证据对待
- [ ] [新增] HP-7 — 「证据清洗与提取重试」新增场景 HP-7（行为变化）（待验证）
  情境：模型输出的证据路径都在允许集内｜操作：sanitizeEvidence 执行｜结果：证据保留，keptClaims 计数增加，证据完整性维度为 complete

## 证据链接与证据强度分级
- [ ] [变化] 更新功能「证据链接与证据强度分级」（行为变化）（待验证）
- [ ] [变化] EC-1 — 「证据链接与证据强度分级」更新场景 EC-1（行为变化；证据路径命中 lib/evidence.ts）（待验证）
  情境：证据入参为带 evidence 字段的场景对象｜操作：isTestOnlyEvidence 执行｜结果：递归取出 evidence 数组后判定，全部非实现代码时返回 true
- [ ] [新增] EC-10 — 「证据链接与证据强度分级」新增场景 EC-10（行为变化；证据路径命中 lib/evidence.ts）（待验证）
  情境：证据数组为空｜操作：isTestOnlyEvidence 执行｜结果：返回 false，不把无证据场景判为测试佐证
- [ ] [新增] EC-11 — 「证据链接与证据强度分级」新增场景 EC-11（行为变化；证据路径命中 lib/evidence.ts）（待验证）
  情境：证据路径为 CI 工作流或锁文件等基础设施文件｜操作：isTestOnlyEvidence 执行｜结果：evidenceKind 仍判为 implementation，返回 false，保持可见不冒进
- [ ] [变化] EC-2 — 「证据链接与证据强度分级」更新场景 EC-2（行为变化；证据路径命中 lib/evidence.ts）（待验证）
  情境：证据路径为 CI 工作流或锁文件｜操作：isTestOnlyEvidence 执行｜结果：evidenceKind 仍判为 implementation，不视为测试佐证
- [ ] [变化] EC-3 — 「证据链接与证据强度分级」更新场景 EC-3（行为变化；证据路径命中 lib/evidence.ts）（待验证）
  情境：传入空证据数组｜操作：isTestOnlyEvidence 执行｜结果：返回 false，不判为测试佐证
- [ ] [新增] EC-4 — 「证据链接与证据强度分级」新增场景 EC-4（行为变化；证据路径命中 lib/evidence.ts）（待验证）
  情境：传入带 evidence 字段的场景对象或 JSON 字符串｜操作：isTestOnlyEvidence 执行｜结果：递归取出证据数组后按同一口径判定
- [ ] [新增] EC-5 — 「证据链接与证据强度分级」新增场景 EC-5（行为变化；证据路径命中 lib/evidence.ts）（待验证）
  情境：证据包含任一实现代码文件｜操作：isTestOnlyEvidence 执行｜结果：返回 false，不标记为测试佐证
- [ ] [新增] EC-6 — 「证据链接与证据强度分级」新增场景 EC-6（行为变化；证据路径命中 lib/evidence.ts）（待验证）
  情境：证据路径为测试或文档文件｜操作：evidenceKind 执行｜结果：返回 test 或 document，全部非实现时 isTestOnlyEvidence 为 true
- [ ] [新增] EC-7 — 「证据链接与证据强度分级」新增场景 EC-7（行为变化）（待验证）
  情境：证据路径为绝对路径、含反斜杠或含 ..｜操作：evidenceUrl 执行｜结果：返回 null，不生成链接
- [ ] [新增] EC-8 — 「证据链接与证据强度分级」新增场景 EC-8（行为变化；证据路径命中 lib/evidence.ts）（待验证）
  情境：证据路径为 CI 配置或锁文件｜操作：evidenceKind 判定｜结果：仍按实现代码处理，isTestOnlyEvidence 返回 false
- [ ] [新增] EC-9 — 「证据链接与证据强度分级」新增场景 EC-9（行为变化；证据路径命中 lib/evidence.ts）（待验证）
  情境：传入的是 behavior_changes 的 before/after 场景对象｜操作：isTestOnlyEvidence 执行｜结果：读取对象上的 evidence 字段继续判定，不因非数组形状返回 false
- [ ] [变化] HP-1 — 「证据链接与证据强度分级」更新场景 HP-1（行为变化；证据路径命中 lib/evidence.ts）（待验证）
  情境：证据路径为普通源码文件｜操作：evidenceKind 执行｜结果：返回 implementation
- [ ] [新增] HP-2 — 「证据链接与证据强度分级」新增场景 HP-2（行为变化；证据路径命中 lib/evidence.ts）（待验证）
  情境：证据路径为 tests/ 目录或 .test./.spec. 文件｜操作：evidenceKind 执行｜结果：返回 test
- [ ] [新增] HP-3 — 「证据链接与证据强度分级」新增场景 HP-3（行为变化；证据路径命中 lib/evidence.ts）（待验证）
  情境：场景证据全部来自测试或文档｜操作：isTestOnlyEvidence 执行｜结果：返回 true，展示层可打「测试佐证」标
- [ ] [新增] HP-4 — 「证据链接与证据强度分级」新增场景 HP-4（行为变化；证据路径命中 lib/evidence.ts）（待验证）
  情境：场景证据含至少一条实现代码路径｜操作：isTestOnlyEvidence 执行｜结果：返回 false，按实现证据对待
- [ ] [新增] HP-5 — 「证据链接与证据强度分级」新增场景 HP-5（行为变化）（待验证）
  情境：证据路径指向测试或文档文件｜操作：EvidenceLinks 渲染证据｜结果：链接前显示 [测试] 或 [文档] 标记
- [ ] [新增] HP-6 — 「证据链接与证据强度分级」新增场景 HP-6（行为变化；证据路径命中 lib/evidence.ts）（待验证）
  情境：场景证据全部来自测试/文档｜操作：isTestOnlyEvidence 执行｜结果：返回 true，供场景卡片打「测试佐证」标与总览影响降权
- [ ] [新增] HP-7 — 「证据链接与证据强度分级」新增场景 HP-7（行为变化）（待验证）
  情境：证据路径指向实现代码且提交 SHA 合法｜操作：evidenceUrl 执行｜结果：返回带 #L 行号锚点的 GitHub blob 链接
- [ ] [新增] HP-8 — 「证据链接与证据强度分级」新增场景 HP-8（行为变化；证据路径命中 lib/evidence.ts）（待验证）
  情境：场景证据全部来自测试/文档｜操作：isTestOnlyEvidence 执行｜结果：返回 true，供展示层打「测试佐证」标与影响投影降权
- [ ] [新增] HP-9 — 「证据链接与证据强度分级」新增场景 HP-9（行为变化；证据路径命中 lib/evidence.ts）（待验证）
  情境：场景证据全部来自测试或文档路径｜操作：isTestOnlyEvidence 执行｜结果：返回 true，场景被标记为测试佐证

## 零行为变更窗口沿用
- [ ] [变化] 更新功能「零行为变更窗口沿用」（行为变化）（待验证）
- [ ] [变化] EC-1 — 「零行为变更窗口沿用」更新场景 EC-1（行为变化；证据路径命中 lib/analysis.ts）（待验证）
  情境：零行为变更窗口但整条版本链无覆盖率回执｜操作：runAnalysisBody 执行｜结果：写入诚实的零回执并打 warn 日志
- [ ] [新增] EC-2 — 「零行为变更窗口沿用」新增场景 EC-2（行为变化；证据路径命中 lib/spec-versions.ts）（待验证）
  情境：仓库尚无上一版规格｜操作：loadLatestSpecFeatures 执行｜结果：返回 null，无法沿用
- [ ] [新增] EC-3 — 「零行为变更窗口沿用」新增场景 EC-3（行为变化；证据路径命中 lib/analysis.ts）（待验证）
  情境：零行为变更窗口且仓库无上一版规格｜操作：runAnalysisBody 执行｜结果：无规格可沿用，按既有空态处理
- [ ] [新增] EC-4 — 「零行为变更窗口沿用」新增场景 EC-4（行为变化）（待验证）
  情境：零行为变更窗口且上一版无有效覆盖率回执｜操作：loadInheritedCoverageReceipt 执行｜结果：沿版本链向上取最近有效回执，避免落合成零回执
- [ ] [新增] EC-5 — 「零行为变更窗口沿用」新增场景 EC-5（行为变化；证据路径命中 lib/analysis.ts）（待验证）
  情境：窗口内无实现级行为变更但 diff 命中功能证据面｜操作：runAnalysisBody 执行｜结果：不激活增量重提取，避免文档内容被写成假场景
- [ ] [新增] ER-1 — 「零行为变更窗口沿用」新增场景 ER-1（行为变化；证据路径命中 lib/analysis.ts）（待验证）
  情境：零行为变更窗口但找不到上一版规格｜操作：runAnalysisBody 执行｜结果：抛出 no-behavioral-change window but no previous spec found
- [ ] [变化] HP-1 — 「零行为变更窗口沿用」更新场景 HP-1（行为变化；证据路径命中 lib/analysis.ts）（待验证）
  情境：已有上一版规格且本窗口无行为变更文件｜操作：runAnalysisBody 执行｜结果：跳过 AI 提取，规格原样沿用上一版，release 说明声明无行为变化
- [ ] [新增] HP-2 — 「零行为变更窗口沿用」新增场景 HP-2（行为变化；证据路径命中 lib/analysis.ts）（待验证）
  情境：零行为变更窗口且版本链上存在有效覆盖率回执｜操作：loadInheritedCoverageReceipt 执行｜结果：继承最近有效回执作为本版覆盖率
- [ ] [新增] HP-3 — 「零行为变更窗口沿用」新增场景 HP-3（行为变化；证据路径命中 lib/analysis.ts）（待验证）
  情境：窗口内只有文档或注释变更｜操作：runAnalysisBody 执行｜结果：跳过 AI 提取，上一版规格整体沿用，不产生行为变化
- [ ] [新增] HP-4 — 「零行为变更窗口沿用」新增场景 HP-4（行为变化；证据路径命中 lib/analysis.ts）（待验证）
  情境：窗口内仅有文档/注释/格式提交｜操作：runAnalysisBody 执行｜结果：上一版规格原样沿用，零变化，不调用 AI 提取
- [ ] [新增] HP-5 — 「零行为变更窗口沿用」新增场景 HP-5（行为变化；证据路径命中 lib/analysis.ts）（待验证）
  情境：窗口无实现级行为变更且存在上一版规格｜操作：runAnalysisBody 执行｜结果：上一版规格原样沿用，零变化
- [ ] [新增] HP-6 — 「零行为变更窗口沿用」新增场景 HP-6（行为变化；证据路径命中 lib/analysis.ts）（待验证）
  情境：窗口内只有文档/注释/格式提交，无实现级行为变更｜操作：runAnalysisBody 执行｜结果：跳过 AI 提取，上一版规格原样沿用，发布变化为零

## AI 规格分析与发布变化
- [ ] [回归] EC-1 — 全量重建模式分析（无 affectedKeys） 写入规格版本并计算 diff（影响面推荐）（证据路径命中 lib/analysis.ts）（待验证）
- [ ] [回归] EC-10 — 增量模式下存在未命中规格索引的行为变更文件 analyzeWithAI 组装增量 prompt（影响面推荐）（证据路径命中 lib/ai.ts）（待验证）
- [ ] [回归] EC-11 — 增量窗口中发现不属于清单内既有功能的新入口或功能拆分 analyzeWithAI 组装增量 prompt（影响面推荐）（证据路径命中 lib/ai.ts）（待验证）
- [ ] [回归] EC-19 — 模型输出的单个功能场景数超过 schema 上限 40（增量锚定回显叠加变体累积） parseAnalysisContent 在 schema 校验前执行 capScenariosPerFeature（影响面推荐）（证据路径命中 lib/ai.ts）（待验证）
- [ ] [新增] EC-2 — 「AI 规格分析与发布变化」新增场景 EC-2（行为变化；证据路径命中 lib/ai.ts）（待验证）
  情境：AI 输出中同一行为从不同角色/视角/措辞重复建条｜操作：按锚定规则处理输出｜结果：与锚中既有场景语义相同的输出按沿用处理，不新增重复场景
- [ ] [新增] EC-3 — 「AI 规格分析与发布变化」新增场景 EC-3（行为变化；证据路径命中 components/scenario-card.tsx；证据路径命中 lib/evidence.ts）（待验证）
  情境：场景证据混合实现代码与测试文件｜操作：调用 isTestOnlyEvidence 判定｜结果：因存在 implementation 证据返回 false，不显示「测试佐证」徽标
- [ ] [回归] EC-32 — 模型把 features 数组漂移到未知顶层键 normalizeTopLevelCollections 执行（影响面推荐）（证据路径命中 lib/ai.ts）（待验证）
- [ ] [新增] EC-33 — 「AI 规格分析与发布变化」新增场景 EC-33（行为变化；证据路径命中 lib/analysis.ts；证据路径命中 lib/spec-versions.ts）（待验证）
  情境：增量模式存在受影响功能且上一版规格锚超过 24k 字符预算｜操作：loadPreviousSpecText 以 affectedFeatureNames 作为 prioritize 装载锚｜结果：受影响功能稳定排到最前，其余功能保持 position 序，截断时先保住受影响功能的旧场景
- [ ] [新增] EC-34 — 「AI 规格分析与发布变化」新增场景 EC-34（行为变化；证据路径命中 lib/ai.ts）（待验证）
  情境：增量模式组装 prompt 且锚段存在｜操作：specAnchoringSection 生成锚段文本｜结果：锚段包含「同一行为只允许一条场景」约束，禁止同一行为从不同角色或措辞重复建条
- [ ] [新增] EC-35 — 「AI 规格分析与发布变化」新增场景 EC-35（行为变化；证据路径命中 lib/analysis.ts；证据路径命中 lib/spec-versions.ts）（待验证）
  情境：增量分析中受影响功能在上一版规格锚的 24k 预算内｜操作：loadPreviousSpecText 按受影响功能名定向装入锚｜结果：受影响功能稳定排到锚最前，其余功能保持 position 序，截断时先保受影响功能的旧场景
- [ ] [新增] EC-36 — 「AI 规格分析与发布变化」新增场景 EC-36（行为变化；证据路径命中 lib/ai.ts）（待验证）
  情境：增量分析中模型为同一行为从不同角色或措辞重复建条｜操作：analyzeWithAI 组装增量 prompt｜结果：锚段明确「同一行为只允许一条场景」，与锚中既有场景语义相同的输出按沿用处理
- [ ] [新增] EC-37 — 「AI 规格分析与发布变化」新增场景 EC-37（行为变化；证据路径命中 lib/ai.ts）（待验证）
  情境：增量分析中受影响功能在上一版规格锚中不存在｜操作：AI 按增量契约处理该功能｜结果：允许重新枚举，通常每功能 3-8 个场景，happy/edge/error 全部类别逐一检查，边界与错误路径不得省略
- [ ] [新增] EC-38 — 「AI 规格分析与发布变化」新增场景 EC-38（行为变化；证据路径命中 lib/spec-diff.ts）（待验证）
  情境：removed 与 added 场景 category 不同（如 happy 与 error）。｜操作：运行规格差异分析。｜结果：不判定为变体，不折叠，仍作为独立的移除与新增变化行输出。
- [ ] [新增] EC-39 — 「AI 规格分析与发布变化」新增场景 EC-39（行为变化；证据路径命中 lib/spec-diff.ts）（待验证）
  情境：removed 与 added 场景操作或结果中的数字 token 不一致（如 404 与 400）。｜操作：运行规格差异分析。｜结果：variantFieldGate 拒绝，不折叠为变体，变化行保留。
- [ ] [新增] EC-4 — 「AI 规格分析与发布变化」新增场景 EC-4（行为变化；证据路径命中 lib/evidence.ts）（待验证）
  情境：场景证据为空数组｜操作：调用 isTestOnlyEvidence 判定｜结果：返回 false，不显示「测试佐证」徽标
- [ ] [新增] EC-40 — 「AI 规格分析与发布变化」新增场景 EC-40（行为变化；证据路径命中 lib/spec-diff.ts）（待验证）
  情境：removed 与 added 场景否定词计数不同。｜操作：运行规格差异分析。｜结果：不判定为变体，变化行保留。
- [ ] [新增] EC-41 — 「AI 规格分析与发布变化」新增场景 EC-41（行为变化；证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）
  情境：场景 source 为 manual 或存在于 spec_verifications（entity_type=scenario）。｜操作：运行合并提案脚本。｜结果：该场景被跳过并在报告中标注「人工/已核实」，不进入删除提案。
- [ ] [新增] ER-1 — 「AI 规格分析与发布变化」新增场景 ER-1（行为变化；证据路径命中 lib/analysis.ts）（待验证）
  情境：加载上一版场景全文时数据库调用失败｜操作：runAnalysisBody 执行 loadPreviousSpecText｜结果：错误被捕获并记录日志，previousSpecText 置为空数组，分析继续执行（锚定降级为仅命名约束，不阻塞分析）
- [ ] [回归] ER-6 — 场景既无 outcome 也无 result 字符串 parseAnalysisContent 解析模型输出（影响面推荐）（证据路径命中 lib/ai.ts）（待验证）
- [ ] [回归] ER-7 — 模型输出缺 product 或 release 解析分析结果（影响面推荐）（证据路径命中 lib/ai.ts）（待验证）
- [ ] [新增] ER-8 — 「AI 规格分析与发布变化」新增场景 ER-8（行为变化；证据路径命中 lib/spec-diff.ts）（待验证）
  情境：removed 与 added 场景操作/结果不等价且合并文本 contentJaccard 低于 0.5。｜操作：运行规格差异分析。｜结果：不折叠，作为独立变化行输出，不产生 variant 审计条目。
- [ ] [新增] ER-9 — 「AI 规格分析与发布变化」新增场景 ER-9（行为变化；证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）
  情境：未提供 --repository 参数，或仓库不存在/无规格版本。｜操作：运行合并提案脚本。｜结果：打印用法或抛出错误，进程以退出码 1 结束。
- [ ] [回归] HP-1 — 产品已注册且仓库可读 在 push 后由 webhook 触发分析（影响面推荐）（证据路径命中 lib/analysis.ts）（待验证）
- [ ] [新增] HP-10 — 「AI 规格分析与发布变化」新增场景 HP-10（行为变化；证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）
  情境：指定仓库最新规格版本内存在措辞变体场景，且非 manual、未被人工核实。｜操作：运行 merge-variant-scenarios.ts --repository <slug|id>（不带 --apply）。｜结果：输出按功能分组的删除/并入提案与跳过项，提示 dry-run 未改动数据。
- [ ] [新增] HP-11 — 「AI 规格分析与发布变化」新增场景 HP-11（行为变化；证据路径命中 scripts/merge-variant-scenarios.ts）（待验证）
  情境：已人工审阅 dry-run 提案。｜操作：运行 merge-variant-scenarios.ts --repository <slug|id> --apply。｜结果：按提案删除被合并的变体场景行并打印删除行数，历史 changes 的 before/after JSON 不动。
- [ ] [新增] HP-2 — 「AI 规格分析与发布变化」新增场景 HP-2（行为变化；证据路径命中 lib/analysis.ts）（待验证）
  情境：上一版规格全文超过 24k 字符且包含受影响功能｜操作：runAnalysisBody 在受影响集计算后加载上一版场景全文并传入受影响功能名｜结果：受影响功能优先装入锚，截断时先保留受影响功能的旧场景
- [ ] [新增] HP-3 — 「AI 规格分析与发布变化」新增场景 HP-3（行为变化；证据路径命中 lib/extraction-merge.ts）（待验证）
  情境：多分区提取结果中同一功能出现同一行为的措辞变体｜操作：mergeChunkResults 对场景做去重合并｜结果：行为等价或近似变体的场景被折叠为一条，scenariosDeduped 计数增加
- [ ] [新增] HP-4 — 「AI 规格分析与发布变化」新增场景 HP-4（行为变化；证据路径命中 app/globals.css；证据路径命中 components/scenario-card.tsx）（待验证）
  情境：规格工作区展示一个证据全部来自测试/文档的场景｜操作：渲染 ScenarioCard｜结果：reference 之后显示「测试佐证」徽标，悬停提示证据全部来自测试/文档、行为以人工核实为准
- [ ] [回归] HP-5 — 仓库已有上一版规格快照 再次执行分析（影响面推荐）（证据路径命中 lib/ai.ts）（待验证）
- [ ] [回归] HP-6 — 增量/carry 模式分析（存在 affectedKeys） 写入规格版本并计算 diff（影响面推荐）（证据路径命中 lib/analysis.ts）（待验证）
- [ ] [新增] HP-7 — 「AI 规格分析与发布变化」新增场景 HP-7（行为变化；证据路径命中 lib/ai.ts）（待验证）
  情境：增量分析中上一版规格锚包含受影响功能的旧场景｜操作：AI 按增量契约对受影响功能做修订｜结果：未变场景逐字沿用原编号与文字，变化行为改写对应条目，新增行为才新增条目，消失行为不再输出，每功能输出条数不超过锚中该功能条数 +3
- [ ] [新增] HP-8 — 「AI 规格分析与发布变化」新增场景 HP-8（行为变化；证据路径命中 lib/spec-diff.ts）（待验证）
  情境：同一功能内一个场景被移除、另一个措辞近似（同义替换）的场景被新增，category 一致且操作/结果通过严守护。｜操作：运行规格差异分析。｜结果：该 removed↔added 对被折叠，不产生 added/removed 变化行，折叠明细中出现 reason=variant 的审计条目，原始 before/after 保留。
- [ ] [新增] HP-9 — 「AI 规格分析与发布变化」新增场景 HP-9（行为变化；证据路径命中 lib/spec-versions.ts）（待验证）
  情境：分析前读取上一版规格全文作为锚，且已知受影响功能名列表。｜操作：调用 loadPreviousSpecText 并传入 prioritize 受影响功能名。｜结果：受影响功能按名称匹配稳定排到返回列表最前，其余功能保持 position 序，24k 锚预算优先覆盖受影响功能。

## LLM 调用回执记账
- [ ] [回归] ER-1 — 调用超时或网络失败 requestStructuredCompletion 执行（影响面推荐）（证据路径命中 lib/ai.ts）（待验证）
- [ ] [新增] ER-2 — 「LLM 调用回执记账」新增场景 ER-2（行为变化；证据路径命中 lib/ai.ts）（待验证）
  情境：网关返回非 2xx｜操作：requestStructuredCompletion 执行｜结果：写入 outcome=failed 的 unknown-usage 回执后抛出网关错误
- [ ] [新增] ER-3 — 「LLM 调用回执记账」新增场景 ER-3（行为变化；证据路径命中 lib/ai.ts）（待验证）
  情境：网关返回 2xx 但响应结构不可解析｜操作：requestStructuredCompletion 执行｜结果：usage 若存在仍写入 outcome=failed 回执，随后抛出解析错误
- [ ] [回归] HP-1 — LLM 调用成功返回 requestStructuredCompletion 执行（影响面推荐）（证据路径命中 lib/ai.ts）（待验证）