iteration_log.md 7.94 KB

iteration_log.md — Small Loop 迭代记录

打分对象:SKILL.md(不是某次具体交付,是这份操作手册本身"照做能不能拿到高分")。 打分方法:与 industry_avg_score.md 基线一同一套方法——逐维度检查 SKILL.md 的操作指令 是否明确关闭了该维度对应的真实缺口,用真实样本(A/B/独立样本 p-v82tpc)做交叉验证: "如果 coder 严格照这份 SKILL.md 执行,会不会拦住/记录下这个样本里已经发生过的真实问题"。 目标线:80(industry_avg_score.md 基线三)。上限 10 轮,本文档记录每轮改了什么/为什么/ 重新打分多少,不展开评分细节推演过程(细节口径与 sample_verification.md/ benchmark_v1.md 一致,此处只记结论)。


Round 1 — SKILL.md v1 首次打分

交叉验证(对样本 A/B 的一致性核对):

  • 样本A attempt-1"代码走查+CSS规则推导确认……判定PASS"——命中 SKILL.md VERIFY 机械动作1 的信号词列表("代码走查")。若 coder 照做,这条会被当场拦住 → D1 机制有效。
  • 样本B currentScrollTarget——SDD §3.2"不需要维护状态标志……不写这段代码是明确选择",命中 SKILL.md 清单B 摘录规则("不需要""不写"字样)。若 coder 照做,写这段代码时会触发清单B 停下 三选一 → D5 机制对"SDD明确禁止"这一档有效。

独立样本反查(发现真实缺口):p-v82tpc 的 hashchange/replaceState 防御性代码,SDD I-2 没有明确禁止,只是没提到。按 SKILL.md v1 EXECUTE 机械动作当前写法——"这段代码对应 清单B哪一条?(大概率是'不对应任何一条',那就跳过,正常记流水账即可)"——这段代码恰好落在 "不对应清单B"这一支,会被直接放过,不会被强制记录。但 benchmark_v1.md D5 5分档原文要求 "代码里出现的每一个 SDD 未提及或明确禁止的实现决策,都能在 coder.log 找到对应的显式记录" ——"未提及"和"明确禁止"是并列要求,SKILL.md v1 只做到了后半句,前半句被自己的"大概率 跳过"这句话堵死了。这是本轮 SKILL.md 自身的真实设计缺口,不是凑数——sample_verification.md 里独立样本的 D5=3 分档命中,就是这个缺口在真实场景下的直接后果。

逐维度打分:

维度 分数 依据
D1 5 信号词负面清单 + "命令+输出缺一不算数"正面要求双重把关,样本A交叉验证通过,未发现遗漏
D2 4 三要素要求明确,但 SKILL.md 正文已自陈"独立发现的 D2 缺口……本轮先记录不展开处理"(取值口径/最坏情况覆盖问题),已知缺口未关闭
D3 5 占位符扫描 + 数值逐项核对,判据字面清晰,无遗漏
D4 4 清单A 机制能覆盖"扫描SDD全部具体标识符",但"标签语义变化算不算锚点"这条边界未写清楚,存在分类歧义风险
D5 3 本轮核心问题:EXECUTE 机械动作只强制记录"清单B匹配"(明确禁止)情形,未强制记录"SDD未提及"情形,与 benchmark D5 5分档要求的"未提及或明确禁止"并列条件不符,独立样本已实测命中这个缺口
D6 5 高/低风险判断线 + vacuous case 显式记录要求,判据清晰,样本核对无遗漏
加权和 = 5/5×25 + 4/5×15 + 5/5×13 + 4/5×12 + 3/5×25 + 5/5×10
       = 25 + 12 + 13 + 9.6 + 15 + 10 = 84.6
封顶检查:D1=5(≥4) 不封顶;D5=3(=3) → 上限70
最终得分 = min(84.6, 70) = 70.0

70 分,低于目标线 80,弱维度:D5(封顶生效,是本轮唯一拖累总分的维度)。继续 Round 2。


Round 2 — 修复 D5:EXECUTE 阶段补"SDD 未提及"分支

改动:SKILL.md EXECUTE 阶段机械动作原第1-2步只区分"对应清单B"与"不对应清单B"两支, 后者直接放过。改为三支判断:

  1. 对应清单B(明确禁止)→ 停下三选一(不变)。
  2. 不对应清单B,但也不是 SDD 字面契约(模块划分/接口契约/数据形态等章节)明确要求的实现 内容——即"SDD 通篇没提过这个行为"→ 新增分支:至少留一句"SDD 未提及,新增理由:……", 不需要三选一决策(比清单B情形宽松),但必须留痕,不许直接跳过。
  3. 完全是 SDD 已要求内容的实现细节(换个变量名做同一件事)→ 走清单A 内部命名判断(不变)。

同时把"独立验证样本原型(p-v82tpc)"那条反模式对照从"❌ 反模式"移到这条新分支下面, 标注"这类偏离现在必须过第2支,留一句话即可过关,不再是'大概率跳过'"。

改动为什么能关闭缺口:新分支2 直接对应 benchmark D5 5分档"未提及"那半句要求,覆盖了此前 "大概率跳过"留下的空子。用独立样本反查:hashchange/replaceState 代码不属于清单B(SDD未 禁止),但也不属于"SDD已要求内容的实现细节"(SDD压根没让做这件事),落入新分支2,要求留痕 ——如果 coder 照新版执行,这处偏离会被记录,不再是"大概率跳过"的放过状态。

重新打分(只重算 D5,其余维度本轮无改动,沿用 Round 1 分数):

D5 新判据覆盖了"未提及"和"明确禁止"两种情形,且都要求留痕(前者要求相对宽松,一句话即可; 后者要求三选一决策),达到 benchmark D5 5分档的字面要求。是否给满分 5,还是保守给 4? 保守给 4——理由:新分支2 只要求"留一句话",没有像清单B情形那样要求"权衡利弊",这是刻意 简化(避免对"SDD没说的所有代码"都要求重量级决策记录,防止 SKILL.md 变成不可执行的形式主义 负担),但这个简化本身意味着"记录质量"可能参差(一句敷衍的"新增理由:需要"也满足字面要求, 但达不到 benchmark 5分档"有清晰说明为什么明知SDD不建议还是要加"的精神)。给 4 分是如实反映 "机制已覆盖,但执行质量的把关还留有空间",不因为"补了一条规则"就直接跳到满分。

D5 = 4/5×25 = 20.0(替换 Round 1 的 15.0)
加权和 = 25 + 12 + 13 + 9.6 + 20 + 10 = 89.6
封顶检查:D1=5(≥4) 不封顶;D5=4(≥4) 不封顶
最终得分 = 89.6

89.6 分,超过目标线 80。达标,停止迭代。


是否继续迭代到更高分(如 D2/D4 已知缺口)的决定

Round 2 已达标(89.6 ≥ 80),按任务书"低于目标线才继续迭代"的规则,不再进行 Round 3。 D2(取值口径/最坏情况覆盖)与 D4(标签语义锚点边界)两处已知缺口有意保留、不在本轮 SKILL.md 里强行打满分掩盖——理由:

  1. D2 的问题根源在 validator 侧的计算口径,不在 coder 侧 coder.log 本身,训练对象是 coder 不是 validator,勉强塞进 SKILL.md 会做成"管别的节点的事"的越权指令。
  2. D4 的标签语义问题目前只有一个真实样本命中,样本量不足以确认这是普遍规律还是这次 独立样本的个案,workgraph-planning-methodology-trial 训练的教训是"单样本过拟合出的 规则"风险高,此处选择记录、不立即写死规则,等下次训练/复训有第二个真实样本佐证再决定 是否正式写入。

这两处已经写进 sample_verification.md 的"发现的规则问题"一节,留给 benchmark_v1.md 后续修订版和下一轮训练参考,不是遗漏,是有意识的止损点。


迭代汇总

轮次 改了什么 为什么 重新打分
1(首次) — 首次用 A/B/独立样本三方交叉验证打分 70.0(D5=3 封顶)
2 EXECUTE 阶段新增"SDD未提及"记录分支,关闭"大概率跳过"的字面漏洞 独立样本 p-v82tpc 的 hashchange 代码实测命中这个漏洞,不是假设性缺口 89.6(达标,停止)

共 2 轮,远低于 10 轮上限。