Skip to content

v1.1.0 发版票面:功能点/需求点清单 + 3 项待拍板 #20

Open

Description

@Luo-root

v1.1.0 发版票面

v1.0.0 之后的第一个版本。本票只列范围与验收,发版动作等命令。

本票已更新到「重跑完成」状态。 评测重跑(v4 轮)已跑完并落盘,三项验收里有一项不通过(详见第五节 P4),已在第六节写清后果与处置。


一、这一版要解决的

v1.0.0 之后我们把 skill 通审了一遍(12 张票、PR #13),又把评测跑通了一轮。v1.1.0 要装的是:

  1. 审查本身更准——13 条设计问题的修复落地(已合入 feat: 修 13 个设计问题——路由分层、规则矛盾、输出契约、仓库工具链与评测护栏 #13)。
  2. 能力覆盖不缺——合并判定与设计体检两类问题都能路由进来,skill 自成一体不依赖任何其他东西。
  3. 能度量——有一份可复核的评测基线,改动之后能看出「是变好还是变坏」。
  4. 能持续——把评测暴露出的口径问题修掉,让下一轮评测测得准。

谁会用它:在合并前自查 PR 的开发者(快模式问「能不能合」),以及要审设计、契约、重复、过度设计的开发者(全量模式)。


二、功能点清单(这一版具体多了什么)

# 功能点 落在哪 状态
F1 description 同时覆盖「合并判定」与「设计体检」两类触发词,解决只有一类能进的问题 SKILL.md frontmatter 已合 #13
F2 两档模式:快模式(紧凑列表 + 结论)与全量模式(七维 + 扩展维度 + 六段式),判据是「用户在问什么」不是改动大小 SKILL.md + references/regression-review.md 已合 #13
F3 快模式合并判定契约内置进本 skill,不依赖任何其他工具 references/regression-review.md 已合 #13
F4 「本次审查要读哪些文件」加载表,避免漏读导致把「不算」当「算」 SKILL.md 已合 #13
F5 既有问题(基线前就存在)的统一规则,消掉原先三条互相打架的指令 SKILL.md 已合 #13
F6 零发现模式:没有 P2 以上问题时直接一句话,不套空骨架 SKILL.md + references/output-template.md 已合 #13
F7 维度覆盖表改三态(无发现 / 未扫(理由) / n 条),扩展维度各自成行 references/output-template.md 已合 #13
F8 向宿主结构化评审协议让步:宿主有协议时以宿主为准,本契约降为内容要求 SKILL.md 已合 #13
F9 评测素材:样本 + 标准答案 + 评分表 + 操作手册,含 12 条植入缺陷与 1 条并发确认点 evals/ 已合 #13
F10 仓库自带 lint(CRLF 免疫)+ CI + .gitattributes tools/、.github/、.gitattributes 已合 #13
F11 README 重写:两档模式表、用法、目录、设计取舍、评测段 README.md 已合 #13
F12 评测基线(首轮):首轮 A/B/C 三轮评分进版本控制,可复核 evals/baseline.md PR #18
F13 硬编码判定去矛盾:区分「协议固定值」与「业务政策值」,给唯一判据 references/dimensions.md PR #19
F14 命名/分包口味边界可操作化:补三条判据 + 归到拍板 references/dimensions.md PR #19
F15 标准答案修准:G4 判定改正 + 补 13 条真缺陷(12 → 25 条) evals/ground-truth.md、evals/rubric.md PR #19
F16 发版前自检 5 处口径不一致:输出模板补「性能/测试盲区」两行、扩展维度清单与速查表同步新口径、测试触发条件补一条、playbook 补三条 API/库/SDK 判据、README 与评测段同步 SKILL.md、references/*.md、README.md PR #21
F17 命名/分包判据的事实错误修正:实测确认两个同名包一起 import 不起别名编译器会报 shop redeclared in this block(原文写「编译器不报错」是错的)。处置规则不变 references/dimensions.md PR #21
F18 相对表述检查机器化:lint 新增「内置/别的工具/第二个工具」扫描,防止成品出现相对表述 tools/lint-skill.mjs PR #21
F19 评测卫生规则:样本中性化、原始输出隔离、skill 副本路径显式化(三条踩过的坑) evals/runbook.md PR #22
F20 判分细则定死:把每轮都会吵的六处分歧写进细则,第三方照着能复算出同样的分数 evals/rubric.md PR #22
F21 v4 轮基线:25 条口径下的重跑结果进版本控制 evals/baseline.md PR #22

三、需求点清单(这一版满足了哪些要求)

# 需求 怎么满足的 状态
R1 我问「这个 PR 能不能合」时,给我一个能直接用的答案,别让我自己筛 快模式:紧凑列表 + 「可以合 / 改完再合」结论,每条带具体触发路径 PR #13
R2 我问设计、契约、重复、过度设计时,要能问到这些 全量模式:七维 + 扩展维度 + 类型 playbook PR #13
R3 别让我为了用这个 skill 再去装别的东西 合并判定契约内置;全仓不提「内置」「别的工具」,skill 自成一体 PR #13
R4 报告里每条结论我都能自己复核 输出契约固定字段(触发 / 影响 / 证据 / 修法);行号只用于定位,不当论据 PR #13
R5 没查过的地方别写成「没问题」 「已查过没问题」是条件段,每条必须带验证方式,写不出就整段省略 PR #13
R6 改完之后我得知道变好还是变坏 评测基线 + 评分表 + 归档规范(原始输出留仓外,评分表进版本控制) PR #18 + #22
R7 别把口味问题当缺陷报给我 命名/分包口味补可操作判据,真要提只进拍板 PR #19(v4 轮验证:三轮误报全 0)
R8 退款窗口这类业务政策值要被看见 硬编码维度区分协议固定值与业务政策值,后者的判据是「改了只是口径变了 → 算」 PR #19(v4 轮验证:B、C 结论一致 ✔)
R9 我审的代码没问题时,别给我塞一堆「建议加测试」 扩展维度补测试盲区的触发条件,泛泛建议在 rubric 里算误报 PR #21

四、这一版明确不做

不做 为什么
不改 SKILL.md 的执行顺序、七维表、输出契约 改动会直接影响漏报率,需要单独一轮评测才敢动
不扩充样本规模 现在的样本(约 150 行)够测出档位分流与判级能力;扩样本是下一轮的事
不引入新工具链 评测靠三个全新子 Agent 上下文跑,不需要额外依赖
不给 code-review 之类的东西写对比章节 成品里不出现相对表述(这是 v1.0.0 就定下的规矩)
不动 v1.0.0 的 tag 已发布版本不可变
不把评测暴露的能力边界塞进 v1.1.0 补这些要改 references/dimensions.md 的成立条件 → 触发重跑评测,且属于新增能力不是修复。单独开 v1.2.0 的票跟踪(见第八节)

五、发版前必须完成

# 事项 依赖 状态
P1 PR #18(首轮基线)合并 你操作 待合
P2 PR #19(口径修正)合并 你操作 待合
P3 按新口径重跑一轮评测,新基线追加到 baseline.md P1 + P2 ✅ 已完成(v4 轮,冻结提交 7c1c4ea)
P4 重跑后确认三件事 P3 ⚠️ 已验证:两条成立、一条不成立(见下表)
P5 打 v1.1.0 tag + 发 release note P1–P4 待命
P6 关掉剩余 issue(#14–#17) P1 + P2 待合后关
P7 PR #21(发版前自检 5 处 + 命名判据事实修正 + lint 相对表述检查)合并 P2 待合
P8 PR #22(v4 基线 + 判分细则 + 评测卫生规则)合并 P7 待合

P3 是硬门槛:不重跑就发版,等于把一个没验证过的口径修正放进正式版。这一条已经履行。

P3 重跑的实际过程

原计划是「修完标准答案 → 重跑一轮 → 发版」。执行时发现两件事,都得先解决才能拿到能进正式版的分数:

第一件:第一次重跑跑在了「移动的靶」上。
重跑的那几分钟里,我同时在改 skill 本体(发版前自检发现执行文件内部有 5 处口径打架)。三轮评测是并行的,每轮各自去读 skill 文件——而我正好在那几分钟里改它们。结果 A/B/C 读到的 skill 版本互不相同:C 轮明确读到的是修复前的模板(它自己的思考过程写着「输出模板漏了性能和测试盲区两行」)。这样的分数不能当基线——它描述的是一个中间状态,不存在哪个提交对应它。
处置:等改动全部落地、把 skill 冻结在 7c1c4ea 这一个提交上,三轮全部重跑。发版基线只认这个提交。

第二件:A 轮读到了磁盘上另一份过期的 skill 副本。
我给子 Agent 的约束里写了「不要读 D:\Github-Project\deep-code-review」,本意是防它去翻仓库里的标准答案。但 skill 的安装线本来就是从那个目录符号链接过去的——它读不到 skill,就去磁盘上别处找,找到了一份 10 月 19 日的旧副本(缺 regression-review.md,硬编码还是旧口径)。
后果:A 轮判「硬编码:无发现」,用的正是被 #19 修掉的那条旧细则。这轮作废。
处置:① 改约束——明确告诉它 skill 装在哪,同时只禁 evals/ 目录(那里才有标准答案);② 把那份陈旧副本清进回收站(可还原);③ A 轮重跑。两条都已写进 evals/runbook.md 的卫生规则。

P4 三件事的验证结果

断言 结论 证据
① 硬编码维度:B、C 两轮结论一致,且能区分「协议固定值 100 不算」与「业务政策值 24h 算」 部分成立 B、C 结论一致 ✔(都把 24h 当业务政策值、都给「参数/配置项」两条路)。但「区分协议固定值 100」只有 B 做到——C 全文未提 100,从报告文本无法证明它做了这个区分
② 包名/目录名不进「必须修/建议修」 成立 A 排除候选「按命名细则属口味,不报」;B「这条本身按规则属于命名口味,所以不进必须修」;C「只是风格统一建议,不影响正确性」。三轮误报全 0
③ 真正的文档缺陷仍报得出来 不成立 GT 点名的 G4(承诺没有对应对象)、G19(注释「第二个返回值」写反)三轮都没报出来。三轮报的文档类问题全部落在 G3/G11/G14,不能充数

断言③ 不成立的后果与处置:

  • 不构成 v1.1.0 的阻塞项。原因是它测的不是一个「文档维度整体失灵」的系统性短板——三轮都能报出「文档与实现不一致」类问题(G3/G11/G14),说明这个能力在。漏的是两种更窄的形态:位置指代型(G19)和承诺无对应对象型(G4)。
  • 这两条属于能力边界,补它们要改 references/dimensions.md 的成立条件 → 触发重跑评测,且属于新增能力不是修复。已单独开 v1.2.0 的票跟踪。
  • 断言③ 的表述已在 evals/baseline.md 里按实测改写,避免下一轮又按旧表述去验收。

v4 轮分数(发版基线)

维度 A(快模式·合并判定) B(全量·按七维审) C(全量·模块体检)
命中 15.5 / 25(62.0%) 13.0 / 25(52.0%) 19.5 / 25(78.0%)
误报 0 条 0 条 0 条
归类合计 / 已报条目数 10.5 / 14(75.0%) 8.0 / 15(53.3%) 12.0 / 15(80.0%)
证据强度均值 4.93(69/14) 4.73(71/15) 4.20(63/15)
表达质量 14.1 / 14.5 15.1 / 15.5 15.1 / 15.5
raw 163.4 154.4 151.6

值得留意:C 轮命中最高,raw 反而最低——差距不在「看漏了什么」,在证据强度(C 4.20 vs A 4.93)。C 靠读完读懂拿命中,A 靠跑探针拿证据。


六、三个待拍板决策的实际执行

决策 票面建议 实际执行 说明
1:v1.1.0 的范围 A/B A A 口径修正(#19)与自检修复(#21)都进 v1.1.0
2:P3 重跑 1 轮还是 3 轮 A(先 1 轮) A 三种问法各 1 轮。理由与票面一致:这一轮的目的是验证口径修正是否生效,不是测方差
3:新 GT 混进 v1.1.0 还是单独一票 A A GT 已随 #19 扩到 25 条一起进

七、待你发话

  1. PR 合并顺序:#18 → #19 → #21 → #22。这四个是叠着的(fix: 修 5 处执行文件口径不一致 + 1 处事实错误;lint 新增相对表述检查 #21 的 base 是 fix(dimensions): 修硬编码判定自相矛盾 + 命名口味边界;GT 扩到 25 条 #19 的分支,docs(evals): 折进判分细则 + 记录 v4 轮基线(25 条口径,冻结提交 7c1c4ea) #22 的 base 是 fix: 修 5 处执行文件口径不一致 + 1 处事实错误;lint 新增相对表述检查 #21 的分支),必须按这个顺序合,合并动作我不代合。
  2. PR fix: 修 5 处执行文件口径不一致 + 1 处事实错误;lint 新增相对表述检查 #21 的顺序有讲究:它改了 references/dimensions.md 的第 5 维口径,而 docs(evals): 折进判分细则 + 记录 v4 轮基线(25 条口径,冻结提交 7c1c4ea) #22 的基线是按 7c1c4ea 跑的——7c1c4ea 正是 fix: 修 5 处执行文件口径不一致 + 1 处事实错误;lint 新增相对表述检查 #21 的头提交。所以 fix: 修 5 处执行文件口径不一致 + 1 处事实错误;lint 新增相对表述检查 #21 必须在 docs(evals): 折进判分细则 + 记录 v4 轮基线(25 条口径,冻结提交 7c1c4ea) #22 之前合,否则基线对应的代码状态对不上。
  3. P5 打 tag 与发版,等你命令。
  4. P6 关掉 issue 评测基线:首跑 A/B/C 三轮,记录分数与口径缺陷 #14–命名/分包口味这条不报边界没守住:2/3 轮把包名不一致报成 P2 缺陷 #17,等你合完再关。

八、已知能力边界(本轮实测,v1.1.0 不修,已开 v1.2.0 票跟踪)

这几条不是 skill 的缺陷(skill 内部口径一致、能跑的路径都跑通了),是能力覆盖上的已知边界——它们在标准答案里,但三轮都没当成一条结论报出来:

条目 三轮表现 根因(已独立复核) 归类
G4 godoc 承诺指向的对象在模块里根本不存在 A/B 判「承诺属实」,C 说的是镜像问题 references/dimensions.md 第 4 维无对应判据 真缺口
G19 godoc 措辞里的位置指代(「第二个返回值」) 三轮全漏 判据已存在(dimensions.md:101 明写「godoc 与实现行为不符、注释把返回值顺序说反了,这些要照报」),但没触发 判据存在但没触发
G22 状态持久性接缝缺失 A 划进「本次没覆盖」,B 兼容性维度未扫,C 判「无发现」 兼容性维度的检查面里没有「状态持久性」这一项 真缺口
G23 Order.ID 零使用 A/B 全文零提及,C 当成「无注入面可报」排除 过度设计维度没覆盖「字段叫 ID 但全模块零使用」这种形态 真缺口
G12 业务口径 vs 缺陷的判别 A 排除、B 未提、C 在别的拍板项里顺带提到 判别线画在「折扣能力」上,没画在「百分比取值范围」上 判别线位置
G10 零值路径的测试覆盖 三轮都在覆盖表里点到,从未成为结论 已补的触发条件(「关键分支完全没有覆盖且该分支高风险」)没解决它 触发条件
包名理由被压缩回旧措辞 A、B 仍写「编译器不报错(起个别名即可)」 处置结论三处都正确,只是理由被压缩回已被纠正的旧说法 措辞

处置建议:v1.2.0 把「承诺指向的对象在不在」「godoc 的位置指代」「状态持久性」「零使用字段」四条做成 references/dimensions.md 里的可操作判据,然后按 evals/runbook.md 的规则重跑一轮。这会改 dimensions.md 的成立条件 → 必须重跑评测,所以不能塞进 v1.1.0。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementdeep-code-review review finding

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions