Repository navigation
v1.1.0 发版票面:功能点/需求点清单 + 3 项待拍板 #20
Description
v1.1.0 发版票面
v1.0.0 之后的第一个版本。本票只列范围与验收,发版动作等命令。
本票已更新到「重跑完成」状态。 评测重跑(v4 轮)已跑完并落盘,三项验收里有一项不通过(详见第五节 P4),已在第六节写清后果与处置。
一、这一版要解决的
v1.0.0 之后我们把 skill 通审了一遍(12 张票、PR #13),又把评测跑通了一轮。v1.1.0 要装的是:
- 审查本身更准——13 条设计问题的修复落地(已合入 feat: 修 13 个设计问题——路由分层、规则矛盾、输出契约、仓库工具链与评测护栏 #13)。
- 能力覆盖不缺——合并判定与设计体检两类问题都能路由进来,skill 自成一体不依赖任何其他东西。
- 能度量——有一份可复核的评测基线,改动之后能看出「是变好还是变坏」。
- 能持续——把评测暴露出的口径问题修掉,让下一轮评测测得准。
谁会用它:在合并前自查 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 条一起进 |
七、待你发话
- 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 的分支),必须按这个顺序合,合并动作我不代合。 - 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 之前合,否则基线对应的代码状态对不上。 - P5 打 tag 与发版,等你命令。
- 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