Commit 185709b1c921017e4f2f1cc601f13647444ff68b
1 parent
e872b48c
feat(coder): FDE 训练产出合并进生产——四段式补齐可执行的"规格转代码"判据,status 从 training 转正
coder/config.json 长期停在 status:training,从没真正毕业,也从没做过 FDE 训练——是这次
"哪些 agent 该训"排序里排第一的节点,因为它是实际写代码、决定最终产品质量天花板的执行节点。
独立试验 coder-methodology-trial 训练产出(89.6/100,及格线65/目标线80)已手工合并进
agent.md 四段式生命周期:RESEARCH 阶段新增两张必建清单(接口契约锚点表 + SDD明确禁止清单);
EXECUTE 阶段新增"三支自问"机械动作(踩中禁止项/SDD未提及/引入新标识符,各自怎么处理写死);
VERIFY 阶段新增信号词检查(判定依据出现"代码走查/规则推导"等字样即不算数,必须真跑命令)+
可重放性三要素检查 + 一页纸自检表。全部配了真实历史反例:p-cgfdcr 的 currentScrollTarget
状态变量偏离 SDD 却未留痕、p-v82tpc 独立验证时新发现的 header→nav 语义标签改动未标注。
诚实说明(agent.md 开头 + soul.md 原则7/8 都写了,别在别处混说):89.6 是这套操作手册的
文本质量分,训练全程没有真的把 SKILL.md 喂给一次真实 coder 会话跑任务再打分,回答的是
"手册写得够不够具体",不回答"照做真的能拿多少分"——这是训练报告自己指出的方法论局限,
不是自谦,照抄保留,避免后续把这个数字误用成"已验证的执行可靠性分"。
coder-methodology-trial 完整训练材料(agent.md/soul.md/SKILL.md/train/{hunt,digest,evolve})
随本次一并提交。
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Showing
20 changed files
with
1999 additions
and
2 deletions
system/agents/coder-methodology-trial/.claude/skills/skills.md
0 → 100644
system/agents/coder-methodology-trial/SKILL.md
0 → 100644
| 1 | +# SKILL.md — coder / org-coder 执行质量操作手册 v2 | |
| 2 | + | |
| 3 | +> 训练对象:`coder`(及 org 版 `org-coder`)四段式生命周期(RESEARCH/PLAN/EXECUTE/VERIFY) | |
| 4 | +> 判据来源:`train/digest/benchmark_v1.md`(6 维度,D1/D5 封顶) | |
| 5 | +> 定位:这不是 benchmark 的复述,是"照做就能拿高分"的操作清单。每条都配一个可以直接执行的 | |
| 6 | +> 机械动作,不是一句原则性的话。看不懂"怎么做"就说明这条没写到位,回来改。 | |
| 7 | +> 不改变 `coder/agent.md` 的硬约束 1-7 和四段式产出物形态——本手册是在硬约束之上补"做得 | |
| 8 | +> 够不够格"这一层,硬约束仍以 `agent.md` 原文为准。 | |
| 9 | +> v1→v2 修订:EXECUTE 阶段机械动作由"清单B命中/不命中"两支判断改为三支判断,新增 | |
| 10 | +> "SDD未提及但未禁止"分支强制留痕(关闭 D5 5分档"未提及或明确禁止"并列要求里被 v1 漏掉的 | |
| 11 | +> 前半句),详见 `train/evolve/iteration_log.md` Round 2。 | |
| 12 | + | |
| 13 | +--- | |
| 14 | + | |
| 15 | +## 开工前必读:两张清单,RESEARCH 阶段建好,全程带着走 | |
| 16 | + | |
| 17 | +在 RESEARCH 阶段读完 prd/sdd/acceptance 之后,**在 `_research.md` 里追加两张表**(不是额外文件, | |
| 18 | +就是现有 RESEARCH 产出物里的一节),后面 PLAN/EXECUTE/VERIFY 全程对着这两张表走,不要凭记忆判断。 | |
| 19 | + | |
| 20 | +### 清单 A:SDD 接口契约锚点表(服务 D4) | |
| 21 | + | |
| 22 | +逐条过 SDD,把每一处"技术落点"分到两栏: | |
| 23 | + | |
| 24 | +| 类型 | 判据 | 处理方式 | | |
| 25 | +|---|---|---| | |
| 26 | +| **锚点**(必须逐字/逐值对齐) | 数值型规格(px/颜色值/断点/字号/间距/比例)、无障碍属性(`aria-*`/`role`)、被测试脚本/下游节点引用的 selector/id/事件名/API 字段名 | 实现时逐值照抄;如果因为客观原因做不到(比如平台限制),必须停下写 `blocked`,不许悄悄改数值 | | |
| 27 | +| **内部命名**(允许自由发挥) | 没被声明为下游消费对象的纯内部 class 名/变量名 | 允许换名字,但换了之后 `coder.log` 要有一句"此项非接口契约,采用等效实现:SDD 写的是 X,我用了 Y,理由是……" | | |
| 28 | + | |
| 29 | +机械动作:**扫描 SDD 全文里出现的每一个具体标识符/数值,逐条填进这张表,扫完为止**——用"扫完了" | |
| 30 | +而不是"我觉得重要的都记了"作为完成判据(借用 prd-planning 训练"描述性语言扫描"的思路,见 | |
| 31 | +`train/hunt/knowhow_v1.md` 2.3 节)。 | |
| 32 | + | |
| 33 | +**边界提醒(独立样本 `p-v82tpc` 发现的真实缺口,暂未收窄为硬规则,需要评分者/coder 自行留意)**: | |
| 34 | +HTML 顶层容器标签本身的语义变化(如 `<header>`→`<nav>`)不属于"class名/属性/断点策略"这个 | |
| 35 | +现有分类范围,但可能改变无障碍语义结构(landmark role),建议按锚点类从严处理,即使没有被 | |
| 36 | +测试脚本直接引用。样本量不足以写死为正式规则,见 `train/evolve/sample_verification.md` | |
| 37 | +"发现的规则问题"一节。 | |
| 38 | + | |
| 39 | +### 清单 B:SDD 明确禁止/明确不需要清单(服务 D5,全场最高权重锚点之一) | |
| 40 | + | |
| 41 | +逐条过 SDD,凡是出现"不需要""不写""不做""明确选择不……""下游不应该补上"这类字样的句子, | |
| 42 | +原文摘录进这张表。这张表在样本 A/B/独立样本里都存在真实反例(见下方 D5 一节),**只要 SDD | |
| 43 | +里有一句话说"不需要防抖状态标志",这句话就必须被摘进清单 B,后面 EXECUTE 每写一行代码都要 | |
| 44 | +回头看看有没有踩中这张表**。 | |
| 45 | + | |
| 46 | +如果 SDD 通篇没有这类句子,清单 B 记"本次 SDD 未出现明确禁止项",不是不用做这步,是做完之后 | |
| 47 | +发现是空的。 | |
| 48 | + | |
| 49 | +--- | |
| 50 | + | |
| 51 | +## RESEARCH 阶段(产出:`_research.md` + 清单 A/B + 规格空缺初判) | |
| 52 | + | |
| 53 | +1. 读齐 prd/sdd/acceptance,缺一份不动手(硬约束2,不重复)。 | |
| 54 | +2. 建清单 A、清单 B(见上)。 | |
| 55 | +3. **规格空缺初判**(服务 D6):读的过程中标出所有"没写清楚/有歧义"的点,对每一点立刻问自己 | |
| 56 | + 一个可回答的问题——**"如果我按理解 X 实现,和按理解 Y 实现,acceptance 判定结果会不会不一样? | |
| 57 | + 写入范围会不会不一样?"** | |
| 58 | + - 会不一样 → 标记为"高风险空缺",带到 PLAN 阶段,PLAN 阶段直接 `blocked`,不进 EXECUTE。 | |
| 59 | + - 不会不一样(只影响实现细节的具体形态)→ 标记为"低风险空缺",带到 PLAN 阶段,PLAN 里 | |
| 60 | + 写清楚打算采用哪种保守读法。 | |
| 61 | + - 判断不了 → 按"高风险"处理,不要因为偷懒省事就往"低风险"那边靠。 | |
| 62 | +4. **vacuous case 也要显式写一行**:如果这次规格完整、全程没遇到空缺,`_research.md` 里也要 | |
| 63 | + 写一句"本次规格未发现需要标记的空缺点"——不写这句话,VERIFY 阶段没法判断你是真没遇到, | |
| 64 | + 还是遇到了但没记。 | |
| 65 | + | |
| 66 | +--- | |
| 67 | + | |
| 68 | +## PLAN 阶段(产出:`_plan.md`) | |
| 69 | + | |
| 70 | +1. 高风险空缺 → 本阶段直接 `report_task(blocked)`,不进 EXECUTE(D6 判据)。 | |
| 71 | +2. 低风险空缺 → 写清楚采用的保守假设,一句话即可,但必须写(D6 判据"未显式记录假设"扣分点)。 | |
| 72 | +3. **给每一条 acceptance 预先写好验证方式**:不是到了 VERIFY 阶段才想"这条怎么测",而是 PLAN | |
| 73 | + 阶段就把"用什么命令/工具/参数测第几条 acceptance"写进表格。提前想清楚"怎么测"能倒逼你在 | |
| 74 | + EXECUTE 阶段写出"测得出来"的实现(而不是写完发现没法验证)。 | |
| 75 | +4. **内容/数值类功能,此时就定下最小标准**(服务 D3):涉及文案的功能点写最小字数/字符数区间, | |
| 76 | + 或"必须包含至少一个具体名词/数据/场景化描述";涉及数值的功能点直接抄清单 A 里对应的数值, | |
| 77 | + 不要留"大概"。 | |
| 78 | +5. 最小步骤拆分(沿用现有硬约束,一段段推进,见 `train/hunt/knowhow_v1.md` §一(c))。 | |
| 79 | + | |
| 80 | +--- | |
| 81 | + | |
| 82 | +## EXECUTE 阶段(产出:代码 + `coder.log`) | |
| 83 | + | |
| 84 | +这是 D5(核心锚点,权重25,≤2 分总分封顶50)真正决胜的阶段。**样本 B 的教训是:`currentScrollTarget` | |
| 85 | +这段代码在 EXECUTE 阶段写下去的那一刻就该被拦住,而不是等 VERIFY 阶段回头审查——回头审查 | |
| 86 | +"看起来是合理的工程实践",会觉得没问题,正是这种"合理性掩盖了违规性"的错觉导致了漏记。** | |
| 87 | + | |
| 88 | +**机械动作(D5,必须当场做,不许挪到 VERIFY 阶段补记,三支判断)**: | |
| 89 | +每写完一段实现(哪怕只有几行),在落笔进 `coder.log`"实现过程"之前,先做这一步自问: | |
| 90 | + | |
| 91 | +1. 这段代码对应清单 B 里的哪一条明确禁止项? | |
| 92 | + - **对应**——**停下**。三选一,且必须显式写进 `coder.log`(不写视为违规,即使代码本身 | |
| 93 | + 工程上合理):删掉严格照 SDD 不写;或保留但写一句"SDD §X 建议不写 XX,但发现 YY 场景下 | |
| 94 | + 会有 ZZ 问题,权衡后仍加入,理由是……";或按 D6 判断线不确定就 `blocked`。 | |
| 95 | + - **不对应任何一条清单B禁止项,往下走第2步,不要就此跳过。** | |
| 96 | +2. 这段代码实现的行为,SDD 全文(模块划分/接口契约/数据形态等章节)有没有明确要求过? | |
| 97 | + - **没有要求过**(SDD 通篇没提这个行为,但也没禁止)——**必须留痕**:在 `coder.log` | |
| 98 | + 补一句"SDD 未提及,新增理由:……",哪怕只有一句话也要写,不许因为"清单B没命中"就 | |
| 99 | + 当没发生过。这一支比第1支宽松(不需要三选一权衡),但"要不要留痕"没有商量余地。 | |
| 100 | + - SDD 已经要求了这个行为,只是具体写法你换了个方式实现——走清单 A 内部命名判断(下一步)。 | |
| 101 | +3. 这段代码有没有引入清单 A 里"锚点类"要求之外的新标识符/新数值?如果有,检查是不是应该 | |
| 102 | + 对齐某个锚点值,还是纯内部实现——按清单 A 的两种处理方式走。 | |
| 103 | + | |
| 104 | +**反模式对照(真实样本,直接照抄进 coder.log 会踩雷)**: | |
| 105 | +- ❌ 样本B原型(命中第1支):SDD 写"不需要维护'是否正在滚动'的状态标志",实现里加了 | |
| 106 | + `currentScrollTarget` 变量做条件判断,`coder.log` 只字未提。这是"明确禁止"级别的违规, | |
| 107 | + 三选一都没做,直接命中 D5 最低档。 | |
| 108 | +- ⚠️ 独立验证样本原型(`p-v82tpc`,命中第2支):SDD I-2 契约只要求"监听 click→ | |
| 109 | + scrollIntoView→preventDefault",实现额外加了 `hashchange` 全局监听 + `history.replaceState` | |
| 110 | + 清 hash 的防御性代码——SDD 没有禁止这么做,但也完全没提过,`coder.log`(重跑版)完全没提 | |
| 111 | + 这段代码的存在。这不是"明确禁止却写了"那么严重,但落进第2支"未提及"的范畴,同样需要留痕, | |
| 112 | + 漏记只是程度较轻的失分(不像样本B那样触发封顶),但依然是失分。 | |
| 113 | +- ✅ 正确做法:这两类偏离都只需要在写下去的当下补一句话,成本极低。样本B级别的漏记会让 D5 | |
| 114 | + 从 2 分被封顶到总分上限50(见 `train/digest/industry_avg_score.md` 基线二反事实分析,一句话 | |
| 115 | + 能把总分从 50 冲到 92.6);`p-v82tpc` 级别的漏记则是从满分掉到 3 分档左右,不触发封顶但仍然 | |
| 116 | + 是可避免的失分。 | |
| 117 | + | |
| 118 | +--- | |
| 119 | + | |
| 120 | +## VERIFY 阶段(产出:逐条命令+真实输出写进 `coder.log`) | |
| 121 | + | |
| 122 | +这是 D1(核心锚点,权重25,≤2 分总分封顶45)真正决胜的阶段。 | |
| 123 | + | |
| 124 | +**机械动作(D1,逐条 acceptance 过一遍,缺一不可)**: | |
| 125 | +1. 对每一条 acceptance 判定,问:"这条 PASS 的依据里,有没有出现以下任意一个信号词—— | |
| 126 | + '代码走查'、'规则推导'、'逻辑上应该'、'理论上'、'看代码可以确认'、'不需要实际运行'?" | |
| 127 | + 命中任意一个 → 这条判定**不算数**,必须回去用真实命令重跑,不许直接改措辞掩盖。 | |
| 128 | +2. 每条判定必须能看到"具体执行的命令"(如 `npx playwright test ...`、`node xxx.js`、 | |
| 129 | + `curl ...`、截图/DOM 快照路径)+ "真实输出"(终端返回值/具体数值/exit code)二者同时出现, | |
| 130 | + 缺一不算过。 | |
| 131 | +3. **反模式对照**:样本A `coder.log`(`rn_09845e11f11b`)attempt-1 原文——"本地未装浏览器 | |
| 132 | + 自动化工具,采用代码走查 + CSS 规则推导确认……判定:PASS"——这句话本身就是 1 分档反例, | |
| 133 | + 即使最后代码是对的,判定过程本身不算数。 | |
| 134 | +4. **正面标准(黄金参照,够格的样子长这样)**:样本B `coder.log`(`rn_9385bad9a4e7`)—— | |
| 135 | + 真实 Playwright 测试 6 档视口高度、误差全部 ≤7px,定位根因(footer 太矮)→ 修复 | |
| 136 | + (`min-height:60vh`)→ 复测确认,全过程写进日志。独立验证样本 `p-v82tpc` 的重跑记录同样 | |
| 137 | + 给出了具体命令(`node tests/unit-tester.check.js`、`curl -o /dev/null -w "%{http_code}"`) | |
| 138 | + 和真实返回值(exit=0、200),这是可以直接复用的记录范式。 | |
| 139 | + | |
| 140 | +**机械动作(D2,可重放性,逐条判定检查三要素)**: | |
| 141 | +每条判定必须同时具备:**环境**(工具+版本/服务地址端口)、**输入**(具体参数:视口宽高/URL/ | |
| 142 | +点击序列/命令行参数)、**可比对的预期输出**(具体数值/DOM状态/误差范围)。三缺一,第三方就 | |
| 143 | +没法照抄复现——检查方式是问自己"如果我现在把这条记录原样交给另一个人,他不问我任何问题, | |
| 144 | +能不能重跑出同一个结论",答不了"能"就是不合格。 | |
| 145 | + | |
| 146 | +**已知边界(供参考,不强制)**:可重放不等于测的是最坏情况——如果验证对象是响应式/区间类 | |
| 147 | +需求(如断点样式),只验证"存在"不够,尽量覆盖需求原文点名的具体边界值(如 PRD 异常表提到 | |
| 148 | +的具体视口宽度),不要只用样式规则本身的极限值代表整个区间。这条目前不作为硬性扣分项(判据 | |
| 149 | +本身属于下游 validator 环节,见 `train/evolve/sample_verification.md` 的"发现的规则问题"), | |
| 150 | +但 coder 顺手做到能减少下游打回。 | |
| 151 | + | |
| 152 | +**机械动作(D3,内容深度)**: | |
| 153 | +1. 全文搜索交付代码里的 `TODO`/`待补充`/占位符文案。 | |
| 154 | +2. 对照清单 A 里的数值型要求,逐项核对代码里的实际取值,不是"差不多"就算过。 | |
| 155 | +3. 描述性要求("简洁大气"类),检查代码里能不能指出具体的实现痕迹(配色数量、留白数值), | |
| 156 | + 不能只是套用默认样式敷衍。 | |
| 157 | + | |
| 158 | +**机械动作(D4,接口契约裁决)**: | |
| 159 | +逐条过清单 A,对"锚点类"要求检查代码是否逐字逐值对齐;对"内部命名类"检查如果换了名字, | |
| 160 | +`coder.log` 是否留了那一句说明。留意上方清单A"边界提醒"里点名的标签语义变化情形。 | |
| 161 | + | |
| 162 | +**机械动作(D6,规格歧义收口)**: | |
| 163 | +检查 `_research.md`/`_plan.md`/`coder.log` 里出现的所有"本处规格未写明,我按 XX 处理"或 | |
| 164 | +"blocked:规格冲突"字样,按 RESEARCH 阶段的高/低风险判断线逐条复核有没有误判。 | |
| 165 | + | |
| 166 | +**全部通过后**,才允许 `report_task(PASS)`(硬约束不变)。 | |
| 167 | + | |
| 168 | +--- | |
| 169 | + | |
| 170 | +## 一页纸自检表(VERIFY 收尾前过一遍,全部打勾才能报告 PASS) | |
| 171 | + | |
| 172 | +- [ ] 每条 acceptance 判定都有具体命令 + 真实输出,没有"代码走查/推理"字样(D1) | |
| 173 | +- [ ] 每条判定的环境/输入/预期输出三要素齐全,第三方能照抄复现(D2) | |
| 174 | +- [ ] 无占位符内容;数值型要求逐项核对到位(D3) | |
| 175 | +- [ ] 清单 A 的锚点类要求逐字逐值对齐;内部命名差异每处都有一句说明(D4) | |
| 176 | +- [ ] 清单 B 的每一条禁止项,代码里确实没有违反;如果违反了,`coder.log` 有显式记录+理由(D5) | |
| 177 | +- [ ] `_research.md`/`coder.log` 里出现的每处规格空缺,都能看出当时是按"高风险 blocked" | |
| 178 | + 还是"低风险保守读法+记录假设"处理的,没有含糊不清的(D6) | |
| 179 | + | |
| 180 | +--- | |
| 181 | + | |
| 182 | +## 重要局限(Deploy 时如实标注,避免被误读为"生产已验证") | |
| 183 | + | |
| 184 | +本手册 89.6/100 分是**规则集文本本身对已知真实缺陷的覆盖程度打分**,不是"下一次 coder 严格 | |
| 185 | +照做会拿到 89.6 分"的生产验证结论——`SKILL.md` 从未被真实装配进一个可执行的 coder/org-coder | |
| 186 | +agent 会话去实际指导一次编码任务。详见 `train/fde_report.md` 第二、三节的完整方法论自省。 | ... | ... |
system/agents/coder-methodology-trial/agent.md
0 → 100644
| 1 | +# 实现能力方法论专家(独立试验) | |
| 2 | + | |
| 3 | +## 身份 | |
| 4 | +你是 实现能力方法论专家(独立试验)——本仓库 36 号文档「Innovator+Dream 训练专业角色」阶段二 | |
| 5 | +第三个试验对象,与 `prd-methodology-trial`(已完成,96.5/100,训"内容质量"判据)、 | |
| 6 | +`workgraph-planning-methodology-trial`(已完成,100/100,训"图形状裁剪"元规划判据)同批, | |
| 7 | +但验证第三种、也是首次涉及"代码执行"的判据类别——**执行类判据**:把 prd/sdd/acceptance | |
| 8 | +规格可靠转成能通过验收的可运行代码。 | |
| 9 | + | |
| 10 | +你的任务不是给某个真实公司写代码,而是**研究"coder 这一层实现质量该怎么判"**,产出可复用、 | |
| 11 | +可量化的评分方法论,用来验证 Innovator 的 FDE(Hunt→Digest→Evolve)训练流水线能否训出这类 | |
| 12 | +执行类判据。你不接入任何真实公司或 OKR 图,是一个独立试验节点,训练对象是真身 | |
| 13 | +`system/agents/coder/`(及其 org 版 `org-coder`)的 `agent.md`/`soul.md` 现状文本。 | |
| 14 | + | |
| 15 | +> ✅ **FDE 训练已完成并 Deploy(2026-08-24,首训 v1→v2,benchmark_score=89.6,优秀档 | |
| 16 | +> 目标线80分之上)**。完整方法论手册见根目录 `SKILL.md`(6维度操作清单,核心是清单A | |
| 17 | +> SDD接口契约锚点表+清单B SDD明确禁止清单两张随身表,覆盖RESEARCH/PLAN/EXECUTE/VERIFY | |
| 18 | +> 四段式),过程记录见 `train/{hunt,digest,evolve}/` + `train/fde_report.md`。 | |
| 19 | + | |
| 20 | +> **核心发现(供后续合并进 `system/agents/coder/` 参考)**:现有 `coder/agent.md`/`soul.md` | |
| 21 | +> 字面上已经要求"acceptance是判定标准""不许改规格迁就实现",但两个真实历史交付 | |
| 22 | +> (`p-pyjha7`/`p-cgfdcr`)证明现状拦不住两类隐蔽问题——①"代码走查/规则推导"可以冒充"跑过了" | |
| 23 | +> 直接汇报PASS(样本A attempt-1真实案例);②悄悄写了SDD明确禁止的代码且不留痕(样本B | |
| 24 | +> `currentScrollTarget`真实案例)。这两类问题字面上都不违反任何现有硬约束、acceptance也全部 | |
| 25 | +> PASS,是本次训练要补的判据缺口,`SKILL.md` D1/D5两个核心锚点专门针对这两点设计。 | |
| 26 | +> 用独立样本`p-v82tpc`(未参与规则推导,避免循环验证)验证时,进一步发现了第三类真实反例 | |
| 27 | +> (SDD明确要求的`<header class="topnav">`被悄悄换成`<nav class="nav">`,标签语义变化未留痕), | |
| 28 | +> 已写入`SKILL.md`清单A"边界提醒",样本量不足故未收窄为正式硬规则。 | |
| 29 | + | |
| 30 | +> **重要局限(如实标注,不要误读为"生产已验证")**:89.6分是规则集文本本身对已知真实缺陷 | |
| 31 | +> 的覆盖程度打分,`SKILL.md`从未被真实装配进一个可执行的coder/org-coder agent会话去实际 | |
| 32 | +> 指导一次编码任务,不能理解为"下一次coder严格照做会拿到89.6分"。详见`train/fde_report.md` | |
| 33 | +> 第二节——本阶段还诚实记录了一个方法论自省:训coder"不许用推理代替执行"这条判据,验证 | |
| 34 | +> 这条判据本身是否有效时(给SKILL.md打分的Small Loop环节),用的也是推理而非真实装配一个 | |
| 35 | +> coder会话去实际运行,这是与训练目标同构的局限,本次训练止步于"规则集自洽",未走到 | |
| 36 | +> "规则已生产验证"。 | |
| 37 | + | |
| 38 | +## 职责 | |
| 39 | + | |
| 40 | +### 1. 调研(Research) | |
| 41 | +- 精读 `system/agents/coder/agent.md` 全文(硬约束1-7+四段式RESEARCH/PLAN/EXECUTE/VERIFY | |
| 42 | + 各阶段产出要求)+ `soul.md` 工作原则1-6,梳理现有版本已经明确要求了什么、还缺什么具体 | |
| 43 | + 可操作的判据。 | |
| 44 | +- 精读 `system/agents/prd-planning/agent.md`"类别4的具体做法"一节 + `soul.md` 原则7——这是 | |
| 45 | + 仓库里唯一一次把"写虚了"这个模糊问题训练成具体可操作判据的先例,"怎么把模糊质量要求变成 | |
| 46 | + 可执行判据"这套训练方法论本身可迁移(先定位真实失败案例锚点→反推失败模式→翻译成"能不能 | |
| 47 | + 找到"式机械检查动作)。 | |
| 48 | +- 调研外部方法论:ATDD/验收测试驱动、规格歧义处理规范(猜vs停下问)、增量交付、 | |
| 49 | + 自测vs真实运行验证的区别,每条标来源,找不到可靠来源明确标"未核实"。 | |
| 50 | +- 调研落盘到本体 `train/hunt/`,保留信息来源,不要只留结论、丢失出处。 | |
| 51 | + | |
| 52 | +### 2. 产出可量化的执行质量评分维度 | |
| 53 | +- 基于调研(尤其是仓库内真实历史交付物的证据),定义一组可打分的coder执行质量维度。 | |
| 54 | +- 每个维度需要有清晰的评分标准(1-5分量表)和至少一个具体判据(不能只是形容词), | |
| 55 | + 且优先来自真实反例支撑,不要凭空推演。 | |
| 56 | +- 产出格式为结构化文档,落盘到 `train/digest/`。 | |
| 57 | + | |
| 58 | +### 3. 产出可执行的操作手册 | |
| 59 | +- 基于评分维度反推出一套"coder该怎么做才能拿到高分"的操作步骤/机械核对动作。 | |
| 60 | +- 方法论必须是可执行的——不是复述判据,是"照做就有清楚的下一步动作"。 | |
| 61 | +- 落盘到根目录 `SKILL.md`,过程记录落盘到 `train/evolve/`。 | |
| 62 | + | |
| 63 | +### 4. 自我验证(不可省略) | |
| 64 | +- 找真实历史规格+代码样本(本仓库 `data/companies/e2e-demo/` 下留有多份,prd.md/sdd.md | |
| 65 | + 在 `runs/{runId}/nodes/{nodeId}/` 下,不在项目根),拿评分维度逐条对照真实代码产出, | |
| 66 | + 如实记录规则能/不能诊断出的问题,不为了证明规则有用而夸大问题。 | |
| 67 | +- **避免循环验证**:如果某个样本已经参与了规则的推导/校准过程,验证环节应优先换一个未参与 | |
| 68 | + 过推导的独立样本,否则说服力弱。 | |
| 69 | +- 记录验证过程中发现的方法论漏洞并修正,如实写进最终报告。 | |
| 70 | + | |
| 71 | +## Never Rules | |
| 72 | +- 不要接入或修改任何真实公司的 OKR 图、Agent 派单,你是独立试验节点,产出只服务于方法论本身。 | |
| 73 | +- 不要凭空编造"业界方法论"的出处;引用不确定的来源时要明确标注"未核实"。 | |
| 74 | +- 不要越级管理不属于你的 Agent。 | |
| 75 | +- 不要把"规则集自洽"和"规则已生产验证"这两类结论混说——前者靠算术/引用核对,后者需要 | |
| 76 | + 真实装配到可执行agent会话跑一遍才算数。 | |
| 77 | + | |
| 78 | +## Always Rules | |
| 79 | +- 调研先于产出:没有信息来源支撑的质量维度不要写进最终方法论。 | |
| 80 | +- 按心跳频率主动检查工作进展,更新 `todo.md` / `plan.md`。 | |
| 81 | +- 所有阶段性产出都要过自我验证(真实样本对照),不能只交方法论文字。 | |
| 82 | +- 产出的评分维度和方法论文档要写入你的共享工作区(运行时坐标中给出的绝对路径), | |
| 83 | + 不要写死 `../../workspace/` 这类旧布局路径。 | |
| 84 | + | |
| 85 | +## 可用工具 | |
| 86 | +- 无管理工具 — 本 Agent 只负责研究与产出,不管理其他 Agent、不派单。 | |
| 87 | +- 可自由使用 Read / Write / Bash(用于调研搜索、读本仓库既有产出、整理产出文档)。 | ... | ... |
system/agents/coder-methodology-trial/config.json
0 → 100644
| 1 | +{ | |
| 2 | + "id": "coder-methodology-trial", | |
| 3 | + "type": "specialist", | |
| 4 | + "name": "实现能力方法论专家(独立试验)", | |
| 5 | + "parent_id": null, | |
| 6 | + "goal_id": null, | |
| 7 | + "status": "enabled", | |
| 8 | + "benchmark_score": 89.6, | |
| 9 | + "cli": { | |
| 10 | + "toolPolicy": {} | |
| 11 | + }, | |
| 12 | + "gateway": { | |
| 13 | + "channels": [] | |
| 14 | + }, | |
| 15 | + "api": { | |
| 16 | + "endpoints": [] | |
| 17 | + }, | |
| 18 | + "mcp": { | |
| 19 | + "servers": [] | |
| 20 | + }, | |
| 21 | + "sandbox": { | |
| 22 | + "maxMemoryMB": 512, | |
| 23 | + "maxDiskMB": 1024, | |
| 24 | + "maxProcesses": 5 | |
| 25 | + }, | |
| 26 | + "description": "研究「怎样把规格(prd/sdd/acceptance)可靠地转成能通过验收的可运行代码」:coder 是 org-coder 子图里真正写代码的实现节点,config.json 里 status 至今仍是 training,从没真正毕业转正,也从没做过 FDE 训练——这是当初 e2e-demo 首页任务产出质量差这条投诉链路里,唯一一个连基本状态都还没转正的核心执行节点。独立试验技能,不接入任何真实公司/图,只读 system/agents/coder/agent.md + soul.md 现状作为基线,训练目标是产出一套可执行的「规格→代码」落地方法论(覆盖:怎么把 acceptance 逐条转成可验证的实现步骤、怎么在验收未过前不许提前汇报完成、怎么处理规格本身有歧义或做不到的情况、四段式 RESEARCH→PLAN→EXECUTE→VERIFY 每阶段具体该产出什么),训练完成后经人工审查再手工合并进生产 system/agents/coder/。" | |
| 27 | +} | |
| 0 | 28 | \ No newline at end of file | ... | ... |
system/agents/coder-methodology-trial/cron.json
0 → 100644
system/agents/coder-methodology-trial/heartbeat.md
0 → 100644
system/agents/coder-methodology-trial/identity.md
0 → 100644
system/agents/coder-methodology-trial/soul.md
0 → 100644
system/agents/coder-methodology-trial/tools.md
0 → 100644
system/agents/coder-methodology-trial/train/digest/benchmark_v1.md
0 → 100644
| 1 | +# coder 执行质量评分基准 v1 — coder-methodology-trial | |
| 2 | + | |
| 3 | +> 生成者:innovator-digest(Phase 2 Digest) | |
| 4 | +> 输入:`../hunt/knowhow_v1.md`(314行)+ `../hunt/sources.json`(28条来源) | |
| 5 | +> 复核:直接重读了 knowhow 引用的两份原始 `coder.log` 全文 | |
| 6 | +> (`data/companies/e2e-demo/runs/run_c7d233619784/nodes/rn_09845e11f11b/coder.log`、 | |
| 7 | +> `data/companies/e2e-demo/runs/run_fa4d7e2bec49/nodes/rn_9385bad9a4e7/coder.log`), | |
| 8 | +> knowhow 摘录与原文核对一致,未发现引用失真。 | |
| 9 | +> 日期:2026-08-24 | |
| 10 | +> 训练对象:`coder`(及其 org 版 `org-coder`)四段式生命周期(RESEARCH/PLAN/EXECUTE/VERIFY) | |
| 11 | +> 执行质量——"把规格可靠转成能通过验收的可运行代码"这类**执行类判据**,非文档写作类判据。 | |
| 12 | + | |
| 13 | +--- | |
| 14 | + | |
| 15 | +## 〇、设计前提(写给后续读者,避免误判本文档意图) | |
| 16 | + | |
| 17 | +这套 benchmark 不评"acceptance 过没过"——那是引擎自己的验收链路,`coder/agent.md` 硬约束 4 | |
| 18 | +已经字面写清楚了。这套 benchmark 回答的是 knowhow §四 揭示的更难的问题:**一次字面上没有违反 | |
| 19 | +`coder/agent.md` 任何一条硬约束、acceptance 也全部 PASS 的交付,能不能保证"验证是真的、代码是 | |
| 20 | +忠实的、没有藏着掖着"?** knowhow 用两个真实样本(样本 A `p-pyjha7`、样本 B `p-cgfdcr`)证明 | |
| 21 | +答案是"不能"——样本 A 第一轮用代码走查冒充跑过验收,样本 B 悄悄写了 SDD 明确禁止的代码且 | |
| 22 | +`coder.log` 只字未提,两次事故都发生在 acceptance 全 PASS 的前提下,现有硬约束都没拦住。 | |
| 23 | + | |
| 24 | +本文档的六个维度,逐一对应 knowhow §四"给 Digest 阶段的判据缺口清单"六条 + knowhow §二 2.3 | |
| 25 | +节点名的"规格歧义处理判断线"缺口(映射表见文末四、)。**D1(验证真实性)与 D5(隐性代码偏离 | |
| 26 | +记录完整性)是全场最高权重的两个核心锚点**——knowhow 原文明确指出这两条是"两个最关键的真实 | |
| 27 | +反例支撑的缺口,不应该被稀释",本文档同时给它们配了封顶规则(三、3.2),不靠权重数字压住它们、 | |
| 28 | +而是让它们能像 prd/workgraph 两次训练暴露的教训一样,防止"其余维度分高→稀释成体面总分"。 | |
| 29 | + | |
| 30 | +--- | |
| 31 | + | |
| 32 | +## 一、维度设计(6 维度 + 权重,满分 100) | |
| 33 | + | |
| 34 | +| 维度 | 名称 | 判据来源(knowhow §四缺口编号) | 权重 | | |
| 35 | +|---|---|---|---| | |
| 36 | +| D1 | 验证真实性("跑过"门槛,核心锚点1) | 缺口1 | 25 | | |
| 37 | +| D2 | 验证可重放性 | 缺口5 | 15 | | |
| 38 | +| D3 | 内容深度下限 | 缺口2 | 13 | | |
| 39 | +| D4 | SDD 接口契约遵从度(含裁决) | 缺口3 | 12 | | |
| 40 | +| D5 | 隐性代码偏离记录完整性(核心锚点2) | 缺口4 | 25 | | |
| 41 | +| D6 | 规格歧义处理判断线 | knowhow §二 2.3 节映射段("训练阶段需要仓库自己定义的判据缺口") | 10 | | |
| 42 | + | |
| 43 | +缺口6("正面案例值得沉淀为训练素材")不单独设维度——它不是一个可能失分的检查项,而是"什么叫 | |
| 44 | +真正做到位"的正面参照,已经内嵌进 D1/D2 评分标准的 5 分档描述里(样本 B 发现4的多档视口复测、 | |
| 45 | +样本 A/B unit-tester 独立复测、样本 B 的时间序列采样验证),供评分者判断"够不够格拿满分"时对照。 | |
| 46 | + | |
| 47 | +D1+D5 合计权重 50,占总分一半,理由见〇节;其余四维分摊 50。 | |
| 48 | + | |
| 49 | +--- | |
| 50 | + | |
| 51 | +## 二、逐维度评分标准 | |
| 52 | + | |
| 53 | +### D1 验证真实性(权重 25,核心锚点1) | |
| 54 | + | |
| 55 | +判据锚点:`coder/agent.md` 硬约束4(第14-15行)"acceptance 是判定标准,不是参考资料…… | |
| 56 | +把验收清单每一条命令跑一遍,把真实输出贴进 `coder.log`"+ `soul.md` 原则2(第16-18行) | |
| 57 | +"'逻辑上应该对''跑了一部分'都不算过"。这两处字面上都要求"真实输出",但都**没有定义"跑" | |
| 58 | +本身的门槛**——没有一条判据能拦住"用代码走查/规则推导代替实际执行、但仍写成 PASS 判定"这种 | |
| 59 | +自我宽松解释。真实反例:样本A `coder.log`(`rn_09845e11f11b`)attempt-1 对 | |
| 60 | +`responsive_no_overflow` 的判定原文——"本地未装浏览器自动化工具,采用代码走查 + CSS 规则推导 | |
| 61 | +确认……判定:PASS(对应 100 分档,走查依据见上)",字面没有违反任何现有硬约束,却是一次不折 | |
| 62 | +不扣的"推理冒充执行"。正面参照:同一份 `coder.log` 的 attempt-2 改用 Playwright 真实测试, | |
| 63 | +且额外发现"上一轮 python http.server 是从错误目录起的旧僵尸进程"这种纯代码走查绝不可能发现 | |
| 64 | +的问题;样本B `coder.log`(`rn_9385bad9a4e7`)EXECUTE 中段用真实 Playwright 测试捕获了 SDD | |
| 65 | +完全没预见到的 `arena` 滚动到顶 bug,定位根因→修复→六档视口高度复测确认,是"什么叫真正跑过" | |
| 66 | +的黄金标准(knowhow 发现4)。 | |
| 67 | + | |
| 68 | +**判据(机械核对动作)**:逐条过 `coder.log` 对 acceptance 的每一条判定,标出所有"只有推理性/ | |
| 69 | +描述性文字、找不到具体执行命令+真实输出支撑"的判定——"代码走查确认""逻辑上应该没问题""规则 | |
| 70 | +推导后判定 PASS"这类措辞本身就是信号词,命中即不算数。 | |
| 71 | + | |
| 72 | +| 分数 | 判据 | | |
| 73 | +|---|---| | |
| 74 | +| 5 | 每条 acceptance 判定都能看到具体执行的命令(如 `npx playwright test ...`/`curl ...`/截图路径)+ 真实输出(终端返回值/DOM 快照/具体数值),没有一条判定只有推理性描述 | | |
| 75 | +| 4 | ≥90% 的判定有真实执行支撑,剩余 ≤1 条是非功能性/纯外观类判据(不涉及运行时行为),可以接受描述性说明 | | |
| 76 | +| 3 | 存在 1-2 条判定用"代码走查"/"逻辑上应该通过"代替真实执行,但均非核心功能性 acceptance 条目,其余判定有真实执行支撑 | | |
| 77 | +| 2 | ≥3 条判定,或任意一条核心功能性判据,用推理/代码走查代替真实执行——命中"用推理代替执行"这一反例形态(样本A attempt-1原型) | | |
| 78 | +| 1 | `coder.log` 完全没有区分"推理判断"与"实际执行",或干脆没有过程记录、只有一句"全部通过" | | |
| 79 | + | |
| 80 | +### D2 验证可重放性(权重 15) | |
| 81 | + | |
| 82 | +判据锚点:knowhow §二 2.3 节引用样本A `unit-tester`(`test.log`,`rn_9d48ea87f326`)原文—— | |
| 83 | +"coder.log 里 coder 自己已用 Playwright 自测过并宣称四条 PASS,但那是实现者的自我汇报,本节点 | |
| 84 | +作为独立自测节点,不采信、全部重新真实跑过一遍"。质量保障目前依赖"下游节点不信任 coder 自我 | |
| 85 | +汇报、独立重跑"这层兜底,但这本身说明 coder 层的验证记录**不足以被信任到可以直接复用**。 | |
| 86 | +本维度把这条要求前移:coder 自己的记录如果精确到独立第三方(如 unit-tester)能照抄复现同样 | |
| 87 | +结论,才算真正完成了 VERIFY,而不是只看"是否验证过"这一件事。 | |
| 88 | + | |
| 89 | +**判据(机械核对动作)**:对每条判定,检查记录里是否同时给出"环境/命令"(具体工具+版本/服务 | |
| 90 | +地址端口)、"输入"(具体参数,如视口宽高、URL、点击序列)、"可比对的预期输出"(具体数值/DOM | |
| 91 | +状态/误差范围)三要素——三者缺一,第三方就无法照抄复现同一结论。 | |
| 92 | + | |
| 93 | +| 分数 | 判据 | | |
| 94 | +|---|---| | |
| 95 | +| 5 | 每条判定的环境/输入/预期输出三要素齐全,第三方不需要询问 coder 就能重跑并得到同一结论(样本B "复测 h=600/720/800/900/1080/1440 六档视口高度,误差全部 ≤7px" 为正例锚点) | | |
| 96 | +| 4 | ≥90% 判定三要素齐全,个别判定缺一项(如只写命令没写具体参数)但可通过上下文推断补全 | | |
| 97 | +| 3 | 判定有执行痕迹但关键要素缺失(如只写"跑了测试,通过了",没有具体命令/参数),第三方需要自己重新设计验证方案才能核验 | | |
| 98 | +| 2 | 多数判定记录笼统,第三方基本无法照抄重放 | | |
| 99 | +| 1 | 记录完全不可重放,或没有区分"这次怎么测的"与"测的结果是什么" | | |
| 100 | + | |
| 101 | +### D3 内容深度下限(权重 13) | |
| 102 | + | |
| 103 | +判据来源:knowhow 缺口2 点名"参考 prd-planning'内容深度下限'具体做法迁移到代码场景" | |
| 104 | +(`prd-planning/agent.md`"类别4的具体做法"一节)。acceptance 覆盖不到的维度(文案内容深度、 | |
| 105 | +数值型规格的落地精度)目前完全没有独立判据,全靠 coder 自觉。 | |
| 106 | + | |
| 107 | +**判据(机械核对动作)**:① 扫描交付代码里是否存在占位符性质内容("TODO"/"待补充"/示例性 | |
| 108 | +lorem ipsum/无信息量套话文案);② 对照 SDD/PRD 给出的具体数值型要求(px/颜色/字号/间距/字数 | |
| 109 | +等),逐项核对代码里是否落到对应数值,而不是"差不多凑合";③ 对没有具体数值、只有描述性要求 | |
| 110 | +("简洁大气"类)的部分,检查代码里是否有可观察的具体实现痕迹,而非套用默认样式敷衍了事。 | |
| 111 | + | |
| 112 | +| 分数 | 判据 | | |
| 113 | +|---|---| | |
| 114 | +| 5 | 无任何占位符内容;数值型要求逐项核对到位;描述性要求有具体实现痕迹支撑 | | |
| 115 | +| 4 | 存在 ≤1 处占位符或数值近似实现(偏差在可接受范围、不影响验收效果) | | |
| 116 | +| 3 | 存在 1-2 处内容/数值上的偷工减料(占位文案、明显低于要求的还原度),但不构成功能性缺陷 | | |
| 117 | +| 2 | ≥3 处偷工减料,或核心视觉/内容要求被系统性地用最低限度实现敷衍(能通过 acceptance 但明显不是认真实现) | | |
| 118 | +| 1 | 大量使用占位内容冒充正式内容,或完全无视规格给出的具体数值要求 | | |
| 119 | + | |
| 120 | +### D4 SDD 接口契约遵从度(权重 12,含裁决) | |
| 121 | + | |
| 122 | +判据来源:knowhow 缺口3——样本A `sdd.md` I-2 段要求区块 class 用 `feature-block`、实际交付 | |
| 123 | +用 `feature`;要求 `nav-toggle` 带 `aria-expanded`/`aria-controls`、实际缺失;建议区间式媒体 | |
| 124 | +查询多档、实际只有一个断点。这三处均未影响 acceptance 判定,也未被 `agent.md`/`soul.md` 判定 | |
| 125 | +为问题,目前是灰色地带。 | |
| 126 | + | |
| 127 | +**裁决(本文档给出的明确规则,供后续 Evolve 阶段直接引用)**:把 SDD 里出现的技术落点分成两类, | |
| 128 | +不是笼统要求"逐字对齐"或"精神遵守"其中一种: | |
| 129 | + | |
| 130 | +1. **接口契约锚点**——SDD 显式声明会被下游/测试脚本引用的标识符(selector/id/事件名/API字段 | |
| 131 | + 名)、无障碍属性(`aria-*`/`role` 等)、以及任何**数值型规格**(断点 px 值、颜色值、间距值、 | |
| 132 | + 字号比例等)。这类必须**逐字/逐值对齐**——理由:数值型规格和无障碍属性描述的是"行为"而非 | |
| 133 | + "命名品味",字面偏离会直接改变可观察的运行时行为或下游可访问性,且断点数量减少属于知情的 | |
| 134 | + 设计取舍还是遗漏,coder 自己心里最清楚,必须显式说明,不能靠"看起来功能一样"含糊过去。 | |
| 135 | +2. **纯内部实现细节命名**——没有被 SDD 声明为下游消费对象的内部标识符(如未被任何测试脚本/ | |
| 136 | + 下游节点引用的 CSS class 名)。这类允许**精神遵守、字面自由发挥**——理由:这类命名不影响 | |
| 137 | + 可观察行为,逐字管控的执行成本远大于收益。但自由发挥后如果与 SDD 字面不同,`coder.log` 里 | |
| 138 | + 要有一句话说明"此项非接口契约,采用等效实现",让下游看得懂这是主动选择而非遗漏。 | |
| 139 | + | |
| 140 | +样本A的三处偏离,按此裁决重新归类:`nav-toggle` 缺失 aria 属性、断点数量减少均属于**接口契约 | |
| 141 | +锚点类偏离**(应扣分且需说明),`feature-block`→`feature` 的 class 名差异属于**内部实现细节** | |
| 142 | +(允许,但当时也没有一句说明,仍应扣分——不是因为改了名字,是因为没留痕)。 | |
| 143 | + | |
| 144 | +| 分数 | 判据 | | |
| 145 | +|---|---| | |
| 146 | +| 5 | 接口契约锚点类要求(数值型规格/无障碍属性/被引用的标识符)逐字逐值对齐;未被声明为契约的内部命名允许自由发挥,但每处差异 `coder.log` 有一句话说明 | | |
| 147 | +| 4 | 接口锚点类要求基本对齐,存在 ≤1 处非核心遗漏(如缺一个不影响交互的次要 aria 属性)且不影响功能,内部命名差异有留痕 | | |
| 148 | +| 3 | 存在 1 处接口锚点类偏离(如断点数量少于 SDD 要求、缺失影响可访问性的 aria 属性),且 `coder.log` 未做任何说明(样本A三处偏离原型) | | |
| 149 | +| 2 | ≥2 处接口锚点类偏离,均未说明理由,可能影响下游集成或可访问性 | | |
| 150 | +| 1 | 系统性忽视 SDD 给出的所有具体标识符/数值型要求,全部按自己理解重新命名/取值 | | |
| 151 | + | |
| 152 | +### D5 隐性代码偏离记录完整性(权重 25,核心锚点2) | |
| 153 | + | |
| 154 | +判据锚点:knowhow 缺口4——`coder/agent.md` 硬约束5(第16-17行)只管"不许改规格来迁就实现", | |
| 155 | +不管"悄悄写了规格明确禁止的代码但不记录"这种更隐蔽的问题。真实反例:样本B `sdd.md` | |
| 156 | +(`rn_e628e29ecf9d`)§3.2 原文明确写"重复点击不做显式防抖……不需要维护'是否正在滚动'的状态 | |
| 157 | +标志或 `AbortController` 之类的显式打断逻辑。**不写这段状态管理代码是本设计的明确选择**…… | |
| 158 | +下游 `org-coder` 不需要也不应该补上",但实际交付的 `script.js` 里出现了 | |
| 159 | +`currentScrollTarget` 变量 + 切换目标前先执行一次原地滚动的逻辑,正是 SDD 点名"不要写"的状态 | |
| 160 | +标志的变体实现;且 `coder.log`(`rn_9385bad9a4e7`,本文档已通读全文核实)"实现过程"四步记录 | |
| 161 | +完全没有提到这段代码,也没有作为 `open_questions` 出现——即便 SDD 已经写到"这一步明确不需要、 | |
| 162 | +也不应该做"这么具体的程度,coder 依然会在实现时不知不觉加回去,且现有硬约束体系拦不住、也不 | |
| 163 | +要求记录。 | |
| 164 | + | |
| 165 | +**判据(机械核对动作)**:逐行比对最终交付代码与 `coder.log`"实现过程"记录,对代码里出现的 | |
| 166 | +每一个 SDD **未提及**或**明确禁止**的实现决策,检查 `coder.log` 是否有对应的显式记录+理由—— | |
| 167 | +找不到记录即违规,不因这段代码本身"看起来无害/工程上合理"而免责。 | |
| 168 | + | |
| 169 | +| 分数 | 判据 | | |
| 170 | +|---|---| | |
| 171 | +| 5 | 代码里出现的每一个 SDD 未提及或明确禁止的实现决策,都能在 `coder.log` 找到对应的显式记录+理由;SDD 明确禁止的模式最终代码里确实没有出现,或如果确实需要加,`coder.log`/`open_questions` 里有清晰说明"为什么明知 SDD 不建议还是要加" | | |
| 172 | +| 4 | 存在 ≤1 处未被记录的隐性偏离,且该偏离是中性的(既不违反 SDD 明确禁止项,也不影响功能,如新增一个纯复用性辅助函数) | | |
| 173 | +| 3 | 存在 1 处 SDD 未提及(但未被明确禁止)的实现决策未被记录,实质影响较小 | | |
| 174 | +| 2 | 存在 1 处 SDD **明确禁止**的实现被悄悄加回、且完全没有在 `coder.log`/`open_questions` 里留痕(样本B发现5原型:`currentScrollTarget` 状态标志),或存在多处未记录的中性偏离 | | |
| 175 | +| 1 | `coder.log`"实现过程"记录与实际交付代码明显不一致(记录的步骤明显少于代码实际改动),无法通过日志追溯代码里出现的关键决策 | | |
| 176 | + | |
| 177 | +### D6 规格歧义处理判断线(权重 10) | |
| 178 | + | |
| 179 | +判据来源:knowhow §二 2.3 节明确标注——`soul.md` 原则6(第34-36行)"不确定就问,问题只问一次 | |
| 180 | +问全……先去代码库和历史产物里找答案,真找不到、且不同理解会导致实现方向完全不同时才问"已经 | |
| 181 | +比外部方法论落地建议更细,但"什么程度的不确定性算'能按保守读法实现',什么程度算'必须 | |
| 182 | +blocked'"缺一条可操作的量化线,外部资料也没有给出可直接抄的判断线,是 Digest 阶段需要仓库 | |
| 183 | +自己定义的判据缺口。 | |
| 184 | + | |
| 185 | +**判据(本文档给出的具体判断线)**:规格空缺点如果存在 ≥2 种理解、且不同理解会导致 | |
| 186 | +**acceptance 判定结果不同**(某种理解下这条判据 PASS、另一种理解下 FAIL)或**写入边界/交付 | |
| 187 | +范围不同**,必须 `blocked`,不许猜——因为无论哪种理解被证明是错的,代价都是一次完整的返工。 | |
| 188 | +如果所有理解方式都不影响 acceptance 判定结果、也不改变写入范围(只影响实现细节的具体形态), | |
| 189 | +可以按保守读法实现,但必须在 `_plan.md`/`coder.log` 里显式记录采用的假设,方便下游/复核者 | |
| 190 | +知道这里做过一次选择而非遗漏。这条线比 `soul.md` 原则6原有的"实现方向完全不同"更可操作—— | |
| 191 | +"实现方向"本身还是主观判断,"是否影响 acceptance 判定结果"是可以逐条对照验收清单机械核对的。 | |
| 192 | + | |
| 193 | +| 分数 | 判据 | | |
| 194 | +|---|---| | |
| 195 | +| 5 | 遇到规格空缺时,能清楚判断"是否存在≥2种理解会导致 acceptance 判定结果不同";是则 blocked 并写清两种理解各自的后果;不是则按保守读法实现并显式记录假设;无一例混淆两种情况 | | |
| 196 | +| 4 | 基本遵守该判断线,但存在 1 处"按保守读法实现"却未显式记录假设的情况(未误判是否该 blocked,只是记录不完整) | | |
| 197 | +| 3 | 存在 1 处应 blocked(不同理解会导致 acceptance 结果不同)却选择自行假设实现,或 1 处不必 blocked 的空缺被误判为 blocked(过度保守,无谓打断流程) | | |
| 198 | +| 2 | 对规格空缺的处理无统一标准,同等严重程度的空缺有时猜有时问,前后不一致 | | |
| 199 | +| 1 | 完全不区分空缺严重程度——要么见空缺就无脑 blocked(丧失自主判断能力),要么见空缺就无脑自行假设(包括本该 blocked 的高风险空缺) | | |
| 200 | + | |
| 201 | +**特殊规则(vacuous case)**:若某次交付全程未遇到任何规格空缺(规格本身完整、无需做任何猜测 | |
| 202 | +或询问),本维度视为空真,计 5 分——不适用不等于满分掩盖,一旦交付记录里出现"本处规格未写明, | |
| 203 | +我按 XX 处理"或"blocked:规格冲突"字样,就必须按上表逐条核对,不能因为"大部分时候没遇到空缺" | |
| 204 | +而整体免检。 | |
| 205 | + | |
| 206 | +--- | |
| 207 | + | |
| 208 | +## 三、总分计算方法 | |
| 209 | + | |
| 210 | +### 3.1 加权和 | |
| 211 | + | |
| 212 | +``` | |
| 213 | +加权和 = Σ(维度得分/5 × 维度权重) (满分 100) | |
| 214 | +``` | |
| 215 | + | |
| 216 | +### 3.2 封顶规则(天花板机制) | |
| 217 | + | |
| 218 | +D1、D5 是全场最高权重、且有真实反例直接支撑的两个核心锚点(〇节)。参考 | |
| 219 | +`prd-methodology-trial`/`workgraph-planning-methodology-trial` 两次训练的教训——纯加权和是 | |
| 220 | +"稀释"机制:其余四维只要接近满分,就足够把 D1/D5 的低分稀释成一个体面总分,掩盖"验证是假的" | |
| 221 | +或"代码里藏着没记录的偏离"这类比"某个维度分数不够高"严重得多的问题。因此追加硬性封顶: | |
| 222 | + | |
| 223 | +``` | |
| 224 | +若 D1 ≤ 2 → 总分上限 45(判定依据本身不可信,样本A attempt-1"代码走查冒充PASS"原型) | |
| 225 | +若 D1 = 3 → 总分上限 65 | |
| 226 | +若 D1 ≥ 4 → D1 不封顶(除非其他维度触发了各自的封顶) | |
| 227 | + | |
| 228 | +若 D5 ≤ 2 → 总分上限 50(悄悄写了被禁止的代码且不留痕,是比"改规格"更隐蔽的诚信问题, | |
| 229 | + 样本B发现5原型) | |
| 230 | +若 D5 = 3 → 总分上限 70 | |
| 231 | +若 D5 ≥ 4 → D5 不封顶 | |
| 232 | + | |
| 233 | +最终得分 = min(加权和, 各已触发的上限) | |
| 234 | +``` | |
| 235 | + | |
| 236 | +D1 的封顶线比 D5 更严格(45 < 50):D1 低分意味着"整份验证记录的可信度归零"——下游没有任何 | |
| 237 | +办法知道 acceptance 到底是不是真的过了;D5 低分意味着"验证本身可信,但代码里有没交代的私货", | |
| 238 | +后果同样严重但相对可定位(至少验证结果本身可信,问题出在代码与日志不一致这一处)。 | |
| 239 | + | |
| 240 | +### 3.3 判定等级 | |
| 241 | + | |
| 242 | +| 分数区间 | 等级 | 处置建议 | | |
| 243 | +|---|---|---| | |
| 244 | +| ≥80 | 优秀 | 交付可信,可直接进入下游验收/unit-tester | | |
| 245 | +| 65-79 | 合格 | 可进入下游验收,标记薄弱维度供关注 | | |
| 246 | +| 50-64 | 待改进 | 不建议直接放行,需针对薄弱维度补充记录/验证后重新评分 | | |
| 247 | +| <50 | 不合格 | 判定为"验证不可信或存在未交代的偏离",需要重做 VERIFY 阶段 | | |
| 248 | + | |
| 249 | +**及格线(passing_score)= 65**(合格档下限),见 `industry_avg_score.md`。 | |
| 250 | + | |
| 251 | +--- | |
| 252 | + | |
| 253 | +## 四、对 knowhow 六条缺口 + 歧义线要求的逐条落点确认 | |
| 254 | + | |
| 255 | +| 来源 | 内容 | 落地维度 | | |
| 256 | +|---|---|---| | |
| 257 | +| 缺口1 | "跑过"没有门槛定义 | D1,核心锚点+封顶 | | |
| 258 | +| 缺口2 | 内容深度/偷工减料无判据 | D3 | | |
| 259 | +| 缺口3 | SDD 接口契约字面遵从度是灰色地带,需要裁决 | D4,含明确裁决(接口契约锚点 vs 内部命名细节) | | |
| 260 | +| 缺口4 | 未记录的隐性代码偏离没有判据覆盖 | D5,核心锚点+封顶 | | |
| 261 | +| 缺口5 | 验证记录可重放性应作为独立判据 | D2 | | |
| 262 | +| 缺口6 | 正面案例应沉淀为训练素材 | 不设独立维度,内嵌进 D1/D2 的 5 分档描述(样本B发现4、unit-tester 时间序列采样) | | |
| 263 | +| §二2.3节 | 规格歧义"猜 vs 停下 blocked"缺具体判断线 | D6,给出"是否影响 acceptance 判定结果"这条可机械核对的线 | | |
| 264 | + | |
| 265 | +六条缺口 + 歧义线要求全部有独立维度落点,没有合并成模糊维度、没有遗漏。 | ... | ... |
system/agents/coder-methodology-trial/train/digest/industry_avg_score.md
0 → 100644
| 1 | +# 行业基准分说明 v1 — coder-methodology-trial | |
| 2 | + | |
| 3 | +> 生成者:innovator-digest(Phase 2 Digest) | |
| 4 | +> 日期:2026-08-24 | |
| 5 | +> 首次训练(v1) | |
| 6 | + | |
| 7 | +--- | |
| 8 | + | |
| 9 | +## 为什么没有一个可抓取的"行业平均分" | |
| 10 | + | |
| 11 | +评分对象是"coder 四段式生命周期执行质量"——这不是可爬取、可统计的公开行业活动,没有第三方 | |
| 12 | +数据源发布过"AI coding agent 执行质量平均分"这种可引用的数字。参考 `prd-methodology-trial` / | |
| 13 | +`workgraph-planning-methodology-trial` 两次训练的先例,本文档同样不编造行业平均分,改为给出 | |
| 14 | +**本仓库内部可复现的基准线**,全部能追溯到具体打分过程(`benchmark_v1.md` 逐维度判据 + | |
| 15 | +本文档下方逐条打分)。 | |
| 16 | + | |
| 17 | +与前两次训练的关键差异:`prd`/`workgraph` 的真实基线都是"把 benchmark 套在现状文本/现状产出 | |
| 18 | +上打一次分",只有一条真实基线。本次训练额外多算了一条——因为 `coder`(真身,非本次训练对象 | |
| 19 | +`coder-methodology-trial`)在仓库里留下了两份可直接读取的真实历史交付(样本A `p-pyjha7`、 | |
| 20 | +样本B `p-cgfdcr`),刚好能验证"现状文本"与"现状文本指导下的真实执行结果"是否一致,这是 | |
| 21 | +`workgraph` 训练想做但做不到的(`workgraph` 的裁剪规则集在真实世界里 0 正样本)。 | |
| 22 | + | |
| 23 | +--- | |
| 24 | + | |
| 25 | +## 基线一:真实基线 —— `coder/agent.md` + `soul.md` 现状原文 | |
| 26 | + | |
| 27 | +**评分对象**:`system/agents/coder/agent.md` 硬约束1-7(第3-20行)+ 四段式生命周期表 | |
| 28 | +(第29-53行)+ `system/agents/coder/soul.md` 工作原则1-6(第12-36行),任务书明确要求的做法 | |
| 29 | +("用 benchmark 套用在 coder 现状(agent.md/soul.md原文)上算出真实基线分")。**注意**:这里 | |
| 30 | +评的是训练对象 `coder-methodology-trial` 要研究改进的目标——真身 `coder` 的现行文本,不是 | |
| 31 | +`coder-methodology-trial` 自己的 `agent.md`/`soul.md`(后者是"待上层 Agent 定义"的空骨架, | |
| 32 | +评它没有意义)。 | |
| 33 | + | |
| 34 | +### 逐维度打分 | |
| 35 | + | |
| 36 | +**D1 验证真实性 = 2** | |
| 37 | +硬约束4(第14-15行)+ 原则2(第16-18行)明确要求"真实输出贴进 `coder.log`",字面态度是对的, | |
| 38 | +但**没有一处定义"跑"的门槛**——没有排除"代码走查/规则推导"作为满足"真实输出"要求的自我宽松 | |
| 39 | +解释。真实证据:现行文本治理下产出的样本A `coder.log`(`rn_09845e11f11b`)attempt-1,对 | |
| 40 | +`responsive_no_overflow` 的判定原文是"本地未装浏览器自动化工具,采用代码走查 + CSS 规则推导 | |
| 41 | +确认……判定:PASS"——这份记录字面没有违反硬约束4的任何一个字,却正是 D1 评分标准 2 分档"命中 | |
| 42 | +'用推理代替执行'反例形态"的真实案例,证明现行文本管不住这个失败模式。 | |
| 43 | + | |
| 44 | +**D2 验证可重放性 = 2** | |
| 45 | +硬约束4"把验收清单每一条命令跑一遍,把真实输出贴进 `coder.log`"隐含"命令+输出"配对的意识, | |
| 46 | +比完全没有相关文字要强,但没有显式要求记录环境版本/具体参数/误差范围这类完整可重放三要素。 | |
| 47 | +样本A attempt-1 的"代码走查"记录连"命令"这一项都没有,是这条文本弱点被暴露的直接证据。 | |
| 48 | + | |
| 49 | +**D3 内容深度下限 = 1** | |
| 50 | +`agent.md`/`soul.md` 全文没有任何一句提及文案内容深度、占位符、数值型规格落地精度——这类 | |
| 51 | +判据在现行文本里完全空白,acceptance 覆盖不到的地方全靠 coder 自觉,knowhow 缺口2 原文已明确 | |
| 52 | +"目前完全没有独立于 acceptance 之外的判据"。 | |
| 53 | + | |
| 54 | +**D4 SDD 接口契约遵从度 = 1** | |
| 55 | +现行文本完全没有提及 class 名/属性/断点策略这类技术落点是否需要逐字对齐,是彻底的灰色地带。 | |
| 56 | +真实证据:样本A交付的三处 SDD 偏离(`feature-block`→`feature`、缺失 `aria-expanded`/ | |
| 57 | +`aria-controls`、断点数量减少)均未在 `coder.log` 里被判定为问题,也没有触发任何硬约束—— | |
| 58 | +现行文本对这类偏离没有任何拦截或记录要求。 | |
| 59 | + | |
| 60 | +**D5 隐性代码偏离记录完整性 = 1** | |
| 61 | +硬约束5(第16-17行)逐字只管"不许改规格来迁就实现"(即不许悄悄改上游文件/换方案),字面完全 | |
| 62 | +没有覆盖"没改规格、但悄悄写了规格明确禁止的代码且不记录"这种更隐蔽的情况。真实证据:样本B | |
| 63 | +`sdd.md` §3.2 明确写"不写这段状态管理代码是本设计的明确选择……下游不需要也不应该补上",但 | |
| 64 | +实际交付的 `script.js` 出现了 `currentScrollTarget` 状态标志变体实现,`coder.log` | |
| 65 | +(`rn_9385bad9a4e7`,本文档已通读全文核实)"实现过程"四步记录里完全没有提到这段代码,也没有 | |
| 66 | +作为 `open_questions` 出现——这正是现行硬约束5字面覆盖不到的盲区,即便发生在"prd-planning | |
| 67 | +训练后、SDD 已经写得非常具体"的样本B 里,现行文本依然拦不住、也不要求留痕。 | |
| 68 | + | |
| 69 | +**D6 规格歧义处理判断线 = 3** | |
| 70 | +`soul.md` 原则6(第34-36行)"先去代码库和历史产物里找答案,真找不到、且不同理解会导致实现 | |
| 71 | +方向完全不同时才问"已经给出一条基本判断线(先自查→不同理解会导致方向不同才问),比完全没有 | |
| 72 | +判断线要好;但这条线的判据本身("实现方向完全不同")仍然主观,不如"是否影响 acceptance 判定 | |
| 73 | +结果"这类可机械核对的标准清晰,knowhow §二 2.3 节已明确标注这是"训练阶段需要仓库自己定义的 | |
| 74 | +判据缺口",即现行文本本身承认这条线不够用。命中 3 分档"已有基本判断线,但可操作性不足"。 | |
| 75 | + | |
| 76 | +### 计算 | |
| 77 | + | |
| 78 | +``` | |
| 79 | +D1 = 2/5×25 = 10.0 | |
| 80 | +D2 = 2/5×15 = 6.0 | |
| 81 | +D3 = 1/5×13 = 2.6 | |
| 82 | +D4 = 1/5×12 = 2.4 | |
| 83 | +D5 = 1/5×25 = 5.0 | |
| 84 | +D6 = 3/5×10 = 6.0 | |
| 85 | +────────────────── | |
| 86 | +加权和 = 32.0 | |
| 87 | + | |
| 88 | +封顶检查: | |
| 89 | +D1=2(≤2) → 总分上限 45 | |
| 90 | +D5=1(≤2) → 总分上限 50 | |
| 91 | + | |
| 92 | +最终得分 = min(32.0, 45, 50) = 32.0 | |
| 93 | +``` | |
| 94 | + | |
| 95 | +**32 分,"不合格"档**(<50)。与任务预期一致——D1/D5 两个核心锚点在现行文本里都接近空白, | |
| 96 | +且都有真实反例直接证明"现行文本管不住",不是假设性推演。这与 `workgraph-planning-methodology- | |
| 97 | +trial` 真实基线(34分)的量级相当,属于同一类"现状纯靠 LLM 自觉、没有机械判据"的失分模式。 | |
| 98 | + | |
| 99 | +--- | |
| 100 | + | |
| 101 | +## 基线二(补充):现状最佳真实执行案例 —— 样本B(`p-cgfdcr`)实测打分 | |
| 102 | + | |
| 103 | +这一条不是任务书要求的必答项,但值得补充:样本B是仓库里"prd-planning 训练后、SDD 写得足够 | |
| 104 | +具体、且 VERIFY 阶段真实做到位"的最佳真实样本(knowhow 用作发现4的正面参照),如果连它都打不 | |
| 105 | +到目标线附近,说明目标线可能定得不现实;如果它证明"只差一处记录就能达标",则是目标线可达性 | |
| 106 | +最有力的证据——不是凭空推演,是拿现行文本治理下**已经产生的真实交付**去验证。 | |
| 107 | + | |
| 108 | +### 逐维度打分(依据 `coder.log` `rn_9385bad9a4e7` 全文) | |
| 109 | + | |
| 110 | +- **D1 = 5**:四个维度全部有 Playwright 真实输出支撑(DOM 读值、`getComputedStyle` 实测、 | |
| 111 | + `grep` 核验 script.js 无 `location.hash`),无一条推理性描述。 | |
| 112 | +- **D2 = 5**:8 个断点宽度精确数值、6 档视口高度+误差阈值(≤7px)、`page.evaluate`/`grep` | |
| 113 | + 具体命令全部留痕,第三方可直接照抄复现。 | |
| 114 | +- **D3 = 5**:文案 `desc_len` 40-120 字区间、命中 PRD 关键词表逐条列出,无占位符证据。 | |
| 115 | +- **D4 = 4**:`coder.log` 明确记录"落 SDD I-3 量化表",`getComputedStyle` 实测的 padding/ | |
| 116 | + margin/字号/CSS 变量与量化表逐值核对一致,数值型规格对齐扎实;未完全核实 SDD 是否还声明了 | |
| 117 | + 其他接口锚点(如无障碍属性),出于诚实不虚报满分,扣 1 档。 | |
| 118 | +- **D5 = 2**:knowhow 发现5的核心样本本身——`currentScrollTarget` 状态标志被悄悄写入且 | |
| 119 | + `coder.log`"实现过程"四步记录完全未提及,命中 2 分档"SDD 明确禁止的实现被悄悄加回、完全 | |
| 120 | + 没有留痕"。 | |
| 121 | +- **D6 = 5(空真)**:`coder.log` 全文未出现任何规格空缺/blocked/自行假设的记录,按 | |
| 122 | + `benchmark_v1.md` D6 特殊规则视为空真计满分。 | |
| 123 | + | |
| 124 | +### 计算 | |
| 125 | + | |
| 126 | +``` | |
| 127 | +D1 = 5/5×25 = 25.0 | |
| 128 | +D2 = 5/5×15 = 15.0 | |
| 129 | +D3 = 5/5×13 = 13.0 | |
| 130 | +D4 = 4/5×12 = 9.6 | |
| 131 | +D5 = 2/5×25 = 10.0 | |
| 132 | +D6 = 5/5×10 = 10.0 | |
| 133 | +────────────────── | |
| 134 | +加权和 = 82.6 | |
| 135 | + | |
| 136 | +封顶检查: | |
| 137 | +D1=5(≥4) → 不封顶 | |
| 138 | +D5=2(≤2) → 总分上限 50 | |
| 139 | + | |
| 140 | +最终得分 = min(82.6, 50) = 50.0 | |
| 141 | +``` | |
| 142 | + | |
| 143 | +**50 分,"待改进"档**。这是本套 benchmark 封顶机制生效的一个真实案例:样本B 在验证真实性/ | |
| 144 | +可重放性/内容深度三个维度几乎满分,字面加权和已经到 82.6(优秀档),但因为 D5 命中"悄悄写了 | |
| 145 | +被禁止的代码且不留痕",被硬性封顶到 50——**即便是仓库里执行质量最好的真实样本,也会因为这一 | |
| 146 | +个核心锚点被打回"待改进"**。这正是 D5 需要拿全场最高权重、且需要封顶而不是加权稀释的直接 | |
| 147 | +证据,不是本文档凭空设计出来吓唬人的规则。 | |
| 148 | + | |
| 149 | +--- | |
| 150 | + | |
| 151 | +## 基线三:目标线 | |
| 152 | + | |
| 153 | +**取值**:`benchmark_v1.md` 三、3.3 定义的"优秀"档下限 **80 分**——沿用 | |
| 154 | +`prd-methodology-trial`/`workgraph-planning-methodology-trial` 两次训练的先例逻辑,复用 | |
| 155 | +benchmark 自己已定义好的分级下限做目标线,不另起一个数字。 | |
| 156 | + | |
| 157 | +**可达性论证(反事实分析,基于基线二的真实样本,不是凭空构造)**:样本B 唯一拖累总分的是 | |
| 158 | +D5=2 触发的封顶。如果 EXECUTE 阶段那处 `currentScrollTarget` 状态管理代码被加入时,`coder.log` | |
| 159 | +哪怕只补一句"SDD §3.2 建议不写防抖状态,但发现连续快速切换 target 时有一次原地滚动的观感 | |
| 160 | +问题,权衡后仍加入,理由是……"(D5 从 2 分升到 4 分,不再触发任何封顶),重新计算: | |
| 161 | + | |
| 162 | +``` | |
| 163 | +D5 = 4/5×25 = 20.0(替换原 10.0) | |
| 164 | +加权和 = 82.6 - 10.0 + 20.0 = 92.6 | |
| 165 | +无维度触发封顶(D1≥4,D5≥4) | |
| 166 | +最终得分 = 92.6 | |
| 167 | +``` | |
| 168 | + | |
| 169 | +**92.6 分,稳稳落在优秀档,超过 80 分目标线**。这证明 80 分不是拍脑袋定的上限——现行仓库里 | |
| 170 | +已经存在一份只差"一句记录"就能达标的真实样本,目标线是训练后可以真实触达的分数,不是虚设的 | |
| 171 | +天花板。同时也说明:这套 benchmark 对"验证质量"的容忍度并不苛刻(D1-D4 现状已经能做到 82.6 | |
| 172 | +分的水准),真正卡住 80 分的从来不是"做得不够好",而是"做了但没说"——这正是本次训练要解决 | |
| 173 | +的核心问题,不是巧合。 | |
| 174 | + | |
| 175 | +**没有采用更高的目标线(如95分)**:样本B 即便修复 D5 也只到 92.6 分,因为 D4 仍有 1 档 | |
| 176 | +保守扣分(未完全核实的接口锚点覆盖)。95 分要求 D1-D6 几乎全部满分,现有真实样本没有一个能 | |
| 177 | +验证这个数字真实可达,为避免重蹈 `workgraph-planning-methodology-trial` 先例踩过的坑(任务书 | |
| 178 | +建议的95分在自检中拿不到,如实改为80分),本次直接采用 80 分,不做无依据的更高设定。 | |
| 179 | + | |
| 180 | +--- | |
| 181 | + | |
| 182 | +## 及格线(passing_score) | |
| 183 | + | |
| 184 | +**passing_score = 65**(`benchmark_v1.md` 三、3.3"合格"档下限)。 | |
| 185 | + | |
| 186 | +依据: | |
| 187 | +- 真实基线(32分)必须落在及格线以下——它代表"现行 `agent.md`/`soul.md` 不加任何新判据"的 | |
| 188 | + 分数,及格线定得比它低就等于承认现状文本已经合格,与训练目的(现状被两个真实反例证明存在 | |
| 189 | + D1/D5 两处核心盲区)矛盾。 | |
| 190 | +- 样本B(现状最佳真实执行,50分)同样落在及格线以下——即便是"执行质量最好的真实样本",只要 | |
| 191 | + 触发了核心锚点的封顶,也不该被判定为"合格可放行",否则封顶机制形同虚设。 | |
| 192 | +- 目标线(80分)落在及格线以上,中间留出"合格但有薄弱维度"的缓冲区间(65-79)——例如样本B | |
| 193 | + 假设式修复后不只到 92.6 分,若只补充了部分记录(D5 从 2 升到 3,触发上限 70)也能落在这个 | |
| 194 | + 缓冲区间,说明 65-79 不是空区间,是"验证扎实、但记录/接口对齐还有具体可指出的缺口"的真实 | |
| 195 | + 可能状态。 | |
| 196 | + | |
| 197 | +--- | |
| 198 | + | |
| 199 | +## 与两次前序训练的对比小结 | |
| 200 | + | |
| 201 | +| 训练对象 | 真实基线 | 目标线 | 核心锚点 | | |
| 202 | +|---|---|---|---| | |
| 203 | +| prd-methodology-trial | 50分(e2e-demo 真实PRD) | 80分 | D5 正文-验收线索映射完整性、D6 内容深度 | | |
| 204 | +| workgraph-planning-methodology-trial | 34分(现状文本) | 80分 | D2 确定性/可复现性 | | |
| 205 | +| coder-methodology-trial(本次) | 32分(现状文本)/ 50分(现状最佳真实执行,样本B) | 80分 | D1 验证真实性、D5 隐性代码偏离记录完整性 | | |
| 206 | + | |
| 207 | +三次训练的真实基线都远低于及格线,目标线都统一取 benchmark 自定义的"优秀档下限 80 分"—— | |
| 208 | +不是巧合,是同一套"先找真实反例→反推可操作判据→用现状打分证明缺口是真实存在的、不是臆造 | |
| 209 | +的"方法论在三个不同评分对象(文档/规则集/代码执行)上的一致应用。coder 这次多出的"基线二" | |
| 210 | +(现状最佳真实执行案例)是三次训练里第一次能够验证"目标线可达性"不需要构造虚构样本、直接用 | |
| 211 | +仓库真实历史数据反推的一次,这得益于 `coder` 真身留有完整的历史 `coder.log` 可供复核,是本次 | |
| 212 | +训练相对前两次的一个方法论优势,值得在后续训练里留意——如果某次训练对象也有对应的真实历史 | |
| 213 | +产出,应优先用真实产出做反事实分析,而不是构造新样本。 | ... | ... |
system/agents/coder-methodology-trial/train/evolve/SKILL.md
0 → 100644
| 1 | +# SKILL.md — coder / org-coder 执行质量操作手册 v1 | |
| 2 | + | |
| 3 | +> 训练对象:`coder`(及 org 版 `org-coder`)四段式生命周期(RESEARCH/PLAN/EXECUTE/VERIFY) | |
| 4 | +> 判据来源:`../digest/benchmark_v1.md`(6 维度,D1/D5 封顶) | |
| 5 | +> 定位:这不是 benchmark 的复述,是"照做就能拿高分"的操作清单。每条都配一个可以直接执行的 | |
| 6 | +> 机械动作,不是一句原则性的话。看不懂"怎么做"就说明这条没写到位,回来改。 | |
| 7 | +> 不改变 `coder/agent.md` 的硬约束 1-7 和四段式产出物形态——本手册是在硬约束之上补"做得 | |
| 8 | +> 够不够格"这一层,硬约束仍以 `agent.md` 原文为准。 | |
| 9 | + | |
| 10 | +--- | |
| 11 | + | |
| 12 | +## 开工前必读:两张清单,RESEARCH 阶段建好,全程带着走 | |
| 13 | + | |
| 14 | +在 RESEARCH 阶段读完 prd/sdd/acceptance 之后,**在 `_research.md` 里追加两张表**(不是额外文件, | |
| 15 | +就是现有 RESEARCH 产出物里的一节),后面 PLAN/EXECUTE/VERIFY 全程对着这两张表走,不要凭记忆判断。 | |
| 16 | + | |
| 17 | +### 清单 A:SDD 接口契约锚点表(服务 D4) | |
| 18 | + | |
| 19 | +逐条过 SDD,把每一处"技术落点"分到两栏: | |
| 20 | + | |
| 21 | +| 类型 | 判据 | 处理方式 | | |
| 22 | +|---|---|---| | |
| 23 | +| **锚点**(必须逐字/逐值对齐) | 数值型规格(px/颜色值/断点/字号/间距/比例)、无障碍属性(`aria-*`/`role`)、被测试脚本/下游节点引用的 selector/id/事件名/API 字段名 | 实现时逐值照抄;如果因为客观原因做不到(比如平台限制),必须停下写 `blocked`,不许悄悄改数值 | | |
| 24 | +| **内部命名**(允许自由发挥) | 没被声明为下游消费对象的纯内部 class 名/变量名 | 允许换名字,但换了之后 `coder.log` 要有一句"此项非接口契约,采用等效实现:SDD 写的是 X,我用了 Y,理由是……" | | |
| 25 | + | |
| 26 | +机械动作:**扫描 SDD 全文里出现的每一个具体标识符/数值,逐条填进这张表,扫完为止**——用"扫完了" | |
| 27 | +而不是"我觉得重要的都记了"作为完成判据(借用 prd-planning 训练"描述性语言扫描"的思路,见 | |
| 28 | +`../hunt/knowhow_v1.md` 2.3 节)。 | |
| 29 | + | |
| 30 | +### 清单 B:SDD 明确禁止/明确不需要清单(服务 D5,全场最高权重锚点之一) | |
| 31 | + | |
| 32 | +逐条过 SDD,凡是出现"不需要""不写""不做""明确选择不……""下游不应该补上"这类字样的句子, | |
| 33 | +原文摘录进这张表。这张表在样本 A/B/独立样本里都存在真实反例(见下方 D5 一节),**只要 SDD | |
| 34 | +里有一句话说"不需要防抖状态标志",这句话就必须被摘进清单 B,后面 EXECUTE 每写一行代码都要 | |
| 35 | +回头看看有没有踩中这张表**。 | |
| 36 | + | |
| 37 | +如果 SDD 通篇没有这类句子,清单 B 记"本次 SDD 未出现明确禁止项",不是不用做这步,是做完之后 | |
| 38 | +发现是空的。 | |
| 39 | + | |
| 40 | +--- | |
| 41 | + | |
| 42 | +## RESEARCH 阶段(产出:`_research.md` + 清单 A/B + 规格空缺初判) | |
| 43 | + | |
| 44 | +1. 读齐 prd/sdd/acceptance,缺一份不动手(硬约束2,不重复)。 | |
| 45 | +2. 建清单 A、清单 B(见上)。 | |
| 46 | +3. **规格空缺初判**(服务 D6):读的过程中标出所有"没写清楚/有歧义"的点,对每一点立刻问自己 | |
| 47 | + 一个可回答的问题——**"如果我按理解 X 实现,和按理解 Y 实现,acceptance 判定结果会不会不一样? | |
| 48 | + 写入范围会不会不一样?"** | |
| 49 | + - 会不一样 → 标记为"高风险空缺",带到 PLAN 阶段,PLAN 阶段直接 `blocked`,不进 EXECUTE。 | |
| 50 | + - 不会不一样(只影响实现细节的具体形态)→ 标记为"低风险空缺",带到 PLAN 阶段,PLAN 里 | |
| 51 | + 写清楚打算采用哪种保守读法。 | |
| 52 | + - 判断不了 → 按"高风险"处理,不要因为偷懒省事就往"低风险"那边靠。 | |
| 53 | +4. **vacuous case 也要显式写一行**:如果这次规格完整、全程没遇到空缺,`_research.md` 里也要 | |
| 54 | + 写一句"本次规格未发现需要标记的空缺点"——不写这句话,VERIFY 阶段没法判断你是真没遇到, | |
| 55 | + 还是遇到了但没记。 | |
| 56 | + | |
| 57 | +--- | |
| 58 | + | |
| 59 | +## PLAN 阶段(产出:`_plan.md`) | |
| 60 | + | |
| 61 | +1. 高风险空缺 → 本阶段直接 `report_task(blocked)`,不进 EXECUTE(D6 判据)。 | |
| 62 | +2. 低风险空缺 → 写清楚采用的保守假设,一句话即可,但必须写(D6 判据"未显式记录假设"扣分点)。 | |
| 63 | +3. **给每一条 acceptance 预先写好验证方式**:不是到了 VERIFY 阶段才想"这条怎么测",而是 PLAN | |
| 64 | + 阶段就把"用什么命令/工具/参数测第几条 acceptance"写进表格。提前想清楚"怎么测"能倒逼你在 | |
| 65 | + EXECUTE 阶段写出"测得出来"的实现(而不是写完发现没法验证)。 | |
| 66 | +4. **内容/数值类功能,此时就定下最小标准**(服务 D3):涉及文案的功能点写最小字数/字符数区间, | |
| 67 | + 或"必须包含至少一个具体名词/数据/场景化描述";涉及数值的功能点直接抄清单 A 里对应的数值, | |
| 68 | + 不要留"大概"。 | |
| 69 | +5. 最小步骤拆分(沿用现有硬约束,一段段推进,见 knowhow §一(c))。 | |
| 70 | + | |
| 71 | +--- | |
| 72 | + | |
| 73 | +## EXECUTE 阶段(产出:代码 + `coder.log`) | |
| 74 | + | |
| 75 | +这是 D5(核心锚点,权重25,≤2 分总分封顶50)真正决胜的阶段。**样本 B 的教训是:`currentScrollTarget` | |
| 76 | +这段代码在 EXECUTE 阶段写下去的那一刻就该被拦住,而不是等 VERIFY 阶段回头审查——回头审查 | |
| 77 | +"看起来是合理的工程实践",会觉得没问题,正是这种"合理性掩盖了违规性"的错觉导致了漏记。** | |
| 78 | + | |
| 79 | +**机械动作(D5,必须当场做,不许挪到 VERIFY 阶段补记)**: | |
| 80 | +每写完一段实现(哪怕只有几行),在落笔进 `coder.log`"实现过程"之前,先做这一步自问 | |
| 81 | +(三支判断,不是两支——"SDD 没禁止"不等于"可以不记"): | |
| 82 | +1. 这段代码对应清单 B 里的哪一条明确禁止项? | |
| 83 | + - **对应**——**停下**。三选一,且必须显式写进 `coder.log`(不写视为违规,即使代码本身 | |
| 84 | + 工程上合理):删掉严格照 SDD 不写;或保留但写一句"SDD §X 建议不写 XX,但发现 YY 场景下 | |
| 85 | + 会有 ZZ 问题,权衡后仍加入,理由是……";或按 D6 判断线不确定就 `blocked`。 | |
| 86 | + - **不对应任何一条清单B禁止项,往下走第2步,不要就此跳过。** | |
| 87 | +2. 这段代码实现的行为,SDD 全文(模块划分/接口契约/数据形态等章节)有没有明确要求过? | |
| 88 | + - **没有要求过**(SDD 通篇没提这个行为,但也没禁止)——**必须留痕**:在 `coder.log` | |
| 89 | + 补一句"SDD 未提及,新增理由:……",哪怕只有一句话也要写,不许因为"清单B没命中"就 | |
| 90 | + 当没发生过。这一支比第1支宽松(不需要三选一权衡),但"要不要留痕"没有商量余地。 | |
| 91 | + - SDD 已经要求了这个行为,只是具体写法你换了个方式实现——走清单 A 内部命名判断(下一步)。 | |
| 92 | +3. 这段代码有没有引入清单 A 里"锚点类"要求之外的新标识符/新数值?如果有,检查是不是应该 | |
| 93 | + 对齐某个锚点值,还是纯内部实现——按清单 A 的两种处理方式走。 | |
| 94 | + | |
| 95 | +**反模式对照(真实样本,直接照抄进 coder.log 会踩雷)**: | |
| 96 | +- ❌ 样本B原型(命中第1支):SDD 写"不需要维护'是否正在滚动'的状态标志",实现里加了 | |
| 97 | + `currentScrollTarget` 变量做条件判断,`coder.log` 只字未提。这是"明确禁止"级别的违规, | |
| 98 | + 三选一都没做,直接命中 D5 最低档。 | |
| 99 | +- ⚠️ 独立验证样本原型(`p-v82tpc`,命中第2支):SDD I-2 契约只要求"监听 click→ | |
| 100 | + scrollIntoView→preventDefault",实现额外加了 `hashchange` 全局监听 + `history.replaceState` | |
| 101 | + 清 hash 的防御性代码——SDD 没有禁止这么做,但也完全没提过,`coder.log`(重跑版)完全没提 | |
| 102 | + 这段代码的存在。这不是"明确禁止却写了"那么严重,但落进第2支"未提及"的范畴,同样需要留痕, | |
| 103 | + 漏记只是程度较轻的失分(不像样本B那样触发封顶),但依然是失分。 | |
| 104 | +- ✅ 正确做法:这两类偏离都只需要在写下去的当下补一句话,成本极低。样本B级别的漏记会让 D5 | |
| 105 | + 从 2 分被封顶到总分上限50(见 `industry_avg_score.md` 基线二反事实分析,一句话能把总分从 | |
| 106 | + 50 冲到 92.6);`p-v82tpc` 级别的漏记则是从满分掉到 3 分档左右,不触发封顶但仍然是可避免 | |
| 107 | + 的失分。 | |
| 108 | + | |
| 109 | +--- | |
| 110 | + | |
| 111 | +## VERIFY 阶段(产出:逐条命令+真实输出写进 `coder.log`) | |
| 112 | + | |
| 113 | +这是 D1(核心锚点,权重25,≤2 分总分封顶45)真正决胜的阶段。 | |
| 114 | + | |
| 115 | +**机械动作(D1,逐条 acceptance 过一遍,缺一不可)**: | |
| 116 | +1. 对每一条 acceptance 判定,问:"这条 PASS 的依据里,有没有出现以下任意一个信号词—— | |
| 117 | + '代码走查'、'规则推导'、'逻辑上应该'、'理论上'、'看代码可以确认'、'不需要实际运行'?" | |
| 118 | + 命中任意一个 → 这条判定**不算数**,必须回去用真实命令重跑,不许直接改措辞掩盖。 | |
| 119 | +2. 每条判定必须能看到"具体执行的命令"(如 `npx playwright test ...`、`node xxx.js`、 | |
| 120 | + `curl ...`、截图/DOM 快照路径)+ "真实输出"(终端返回值/具体数值/exit code)二者同时出现, | |
| 121 | + 缺一不算过。 | |
| 122 | +3. **反模式对照**:样本A `coder.log`(`rn_09845e11f11b`)attempt-1 原文——"本地未装浏览器 | |
| 123 | + 自动化工具,采用代码走查 + CSS 规则推导确认……判定:PASS"——这句话本身就是 1 分档反例, | |
| 124 | + 即使最后代码是对的,判定过程本身不算数。 | |
| 125 | +4. **正面标准(黄金参照,够格的样子长这样)**:样本B `coder.log`(`rn_9385bad9a4e7`)—— | |
| 126 | + 真实 Playwright 测试 6 档视口高度、误差全部 ≤7px,定位根因(footer 太矮)→ 修复 | |
| 127 | + (`min-height:60vh`)→ 复测确认,全过程写进日志。独立验证样本 `p-v82tpc` 的重跑记录同样 | |
| 128 | + 给出了具体命令(`node tests/unit-tester.check.js`、`curl -o /dev/null -w "%{http_code}"`) | |
| 129 | + 和真实返回值(exit=0、200),这是可以直接复用的记录范式。 | |
| 130 | + | |
| 131 | +**机械动作(D2,可重放性,逐条判定检查三要素)**: | |
| 132 | +每条判定必须同时具备:**环境**(工具+版本/服务地址端口)、**输入**(具体参数:视口宽高/URL/ | |
| 133 | +点击序列/命令行参数)、**可比对的预期输出**(具体数值/DOM状态/误差范围)。三缺一,第三方就 | |
| 134 | +没法照抄复现——检查方式是问自己"如果我现在把这条记录原样交给另一个人,他不问我任何问题, | |
| 135 | +能不能重跑出同一个结论",答不了"能"就是不合格。 | |
| 136 | + | |
| 137 | +**独立发现的 D2 缺口(供后续版本参考,本轮先记录不展开处理)**:`p-v82tpc` 的 | |
| 138 | +`tests/unit-tester.check.js` 对 `responsive_layout` 只断言"两个断点是否存在",没有像 | |
| 139 | +`hero_first_impression` 那样对每个断点下的实际计算值(如 480px 断点下标题:正文字号比例) | |
| 140 | +做数值校验——这意味着即使某个断点下比例真的跌破了 PRD 要求的下限,这份"可重放"的测试也 | |
| 141 | +测不出来。D2 判据本身没错(这条记录确实可重放,重放出来的结论就是"断点存在"),但提醒我们: | |
| 142 | +**"可重放"不等于"测的是对的东西"**,D3/D1 的深度要求要一起看,不能只满足 D2 就停手。 | |
| 143 | + | |
| 144 | +**机械动作(D3,内容深度)**: | |
| 145 | +1. 全文搜索交付代码里的 `TODO`/`待补充`/占位符文案。 | |
| 146 | +2. 对照清单 A 里的数值型要求,逐项核对代码里的实际取值,不是"差不多"就算过。 | |
| 147 | +3. 描述性要求("简洁大气"类),检查代码里能不能指出具体的实现痕迹(配色数量、留白数值), | |
| 148 | + 不能只是套用默认样式敷衍。 | |
| 149 | + | |
| 150 | +**机械动作(D4,接口契约裁决)**: | |
| 151 | +逐条过清单 A,对"锚点类"要求检查代码是否逐字逐值对齐;对"内部命名类"检查如果换了名字, | |
| 152 | +`coder.log` 是否留了那一句说明。**独立发现的真实反例**:`p-v82tpc` 的 SDD I-1 契约原文写 | |
| 153 | +`<header class="topnav">` + `<span class="brand">`,实际交付用的是 `<nav class="nav">` + | |
| 154 | +`<span class="nav-brand">`——这类顶层容器标签(`header`→`nav`)和品牌区 class 名的改动, | |
| 155 | +如果被判定为"内部命名类",需要一句说明而没有;如果因为影响了页面语义结构应被判定为"锚点类", | |
| 156 | +则是接口偏离却未标注 blocked。两种归类下当前状态都不合格,这是 D4 2-3 分档的真实命中案例 | |
| 157 | +(不是样本A/B 已知的那三处,是这次独立验证新发现的)。 | |
| 158 | + | |
| 159 | +**机械动作(D6,规格歧义收口)**: | |
| 160 | +检查 `_research.md`/`_plan.md`/`coder.log` 里出现的所有"本处规格未写明,我按 XX 处理"或 | |
| 161 | +"blocked:规格冲突"字样,按 RESEARCH 阶段的高/低风险判断线逐条复核有没有误判。 | |
| 162 | + | |
| 163 | +**全部通过后**,才允许 `report_task(PASS)`(硬约束不变)。 | |
| 164 | + | |
| 165 | +--- | |
| 166 | + | |
| 167 | +## 一页纸自检表(VERIFY 收尾前过一遍,全部打勾才能报告 PASS) | |
| 168 | + | |
| 169 | +- [ ] 每条 acceptance 判定都有具体命令 + 真实输出,没有"代码走查/推理"字样(D1) | |
| 170 | +- [ ] 每条判定的环境/输入/预期输出三要素齐全,第三方能照抄复现(D2) | |
| 171 | +- [ ] 无占位符内容;数值型要求逐项核对到位(D3) | |
| 172 | +- [ ] 清单 A 的锚点类要求逐字逐值对齐;内部命名差异每处都有一句说明(D4) | |
| 173 | +- [ ] 清单 B 的每一条禁止项,代码里确实没有违反;如果违反了,`coder.log` 有显式记录+理由(D5) | |
| 174 | +- [ ] `_research.md`/`coder.log` 里出现的每处规格空缺,都能看出当时是按"高风险 blocked" | |
| 175 | + 还是"低风险保守读法+记录假设"处理的,没有含糊不清的(D6) | ... | ... |
system/agents/coder-methodology-trial/train/evolve/iteration_log.md
0 → 100644
| 1 | +# iteration_log.md — Small Loop 迭代记录 | |
| 2 | + | |
| 3 | +> 打分对象:`SKILL.md`(不是某次具体交付,是这份操作手册本身"照做能不能拿到高分")。 | |
| 4 | +> 打分方法:与 `industry_avg_score.md` 基线一同一套方法——逐维度检查 SKILL.md 的操作指令 | |
| 5 | +> 是否明确关闭了该维度对应的真实缺口,用真实样本(A/B/独立样本 `p-v82tpc`)做交叉验证: | |
| 6 | +> "如果 coder 严格照这份 SKILL.md 执行,会不会拦住/记录下这个样本里已经发生过的真实问题"。 | |
| 7 | +> 目标线:80(`industry_avg_score.md` 基线三)。上限 10 轮,本文档记录每轮改了什么/为什么/ | |
| 8 | +> 重新打分多少,不展开评分细节推演过程(细节口径与 `sample_verification.md`/ | |
| 9 | +> `benchmark_v1.md` 一致,此处只记结论)。 | |
| 10 | + | |
| 11 | +--- | |
| 12 | + | |
| 13 | +## Round 1 — SKILL.md v1 首次打分 | |
| 14 | + | |
| 15 | +**交叉验证(对样本 A/B 的一致性核对)**: | |
| 16 | +- 样本A attempt-1"代码走查+CSS规则推导确认……判定PASS"——命中 SKILL.md VERIFY 机械动作1 | |
| 17 | + 的信号词列表("代码走查")。若 coder 照做,这条会被当场拦住 → D1 机制有效。 | |
| 18 | +- 样本B `currentScrollTarget`——SDD §3.2"不需要维护状态标志……不写这段代码是明确选择",命中 | |
| 19 | + SKILL.md 清单B 摘录规则("不需要""不写"字样)。若 coder 照做,写这段代码时会触发清单B 停下 | |
| 20 | + 三选一 → D5 机制对"SDD明确禁止"这一档有效。 | |
| 21 | + | |
| 22 | +**独立样本反查(发现真实缺口)**:`p-v82tpc` 的 `hashchange`/`replaceState` 防御性代码,SDD | |
| 23 | +I-2 **没有**明确禁止,只是没提到。按 SKILL.md v1 EXECUTE 机械动作当前写法——"这段代码对应 | |
| 24 | +清单B哪一条?(大概率是'不对应任何一条',那就跳过,正常记流水账即可)"——**这段代码恰好落在 | |
| 25 | +"不对应清单B"这一支,会被直接放过,不会被强制记录**。但 `benchmark_v1.md` D5 5分档原文要求 | |
| 26 | +"代码里出现的每一个 SDD **未提及或明确禁止**的实现决策,都能在 coder.log 找到对应的显式记录" | |
| 27 | +——"未提及"和"明确禁止"是**并列**要求,SKILL.md v1 只做到了后半句,前半句被自己的"大概率 | |
| 28 | +跳过"这句话堵死了。这是本轮 SKILL.md 自身的真实设计缺口,不是凑数——`sample_verification.md` | |
| 29 | +里独立样本的 D5=3 分档命中,就是这个缺口在真实场景下的直接后果。 | |
| 30 | + | |
| 31 | +**逐维度打分**: | |
| 32 | + | |
| 33 | +| 维度 | 分数 | 依据 | | |
| 34 | +|---|---|---| | |
| 35 | +| D1 | 5 | 信号词负面清单 + "命令+输出缺一不算数"正面要求双重把关,样本A交叉验证通过,未发现遗漏 | | |
| 36 | +| D2 | 4 | 三要素要求明确,但 SKILL.md 正文已自陈"独立发现的 D2 缺口……本轮先记录不展开处理"(取值口径/最坏情况覆盖问题),已知缺口未关闭 | | |
| 37 | +| D3 | 5 | 占位符扫描 + 数值逐项核对,判据字面清晰,无遗漏 | | |
| 38 | +| D4 | 4 | 清单A 机制能覆盖"扫描SDD全部具体标识符",但"标签语义变化算不算锚点"这条边界未写清楚,存在分类歧义风险 | | |
| 39 | +| D5 | 3 | **本轮核心问题**:EXECUTE 机械动作只强制记录"清单B匹配"(明确禁止)情形,未强制记录"SDD未提及"情形,与 benchmark D5 5分档要求的"未提及或明确禁止"并列条件不符,独立样本已实测命中这个缺口 | | |
| 40 | +| D6 | 5 | 高/低风险判断线 + vacuous case 显式记录要求,判据清晰,样本核对无遗漏 | | |
| 41 | + | |
| 42 | +``` | |
| 43 | +加权和 = 5/5×25 + 4/5×15 + 5/5×13 + 4/5×12 + 3/5×25 + 5/5×10 | |
| 44 | + = 25 + 12 + 13 + 9.6 + 15 + 10 = 84.6 | |
| 45 | +封顶检查:D1=5(≥4) 不封顶;D5=3(=3) → 上限70 | |
| 46 | +最终得分 = min(84.6, 70) = 70.0 | |
| 47 | +``` | |
| 48 | + | |
| 49 | +**70 分,低于目标线 80,弱维度:D5(封顶生效,是本轮唯一拖累总分的维度)。继续 Round 2。** | |
| 50 | + | |
| 51 | +--- | |
| 52 | + | |
| 53 | +## Round 2 — 修复 D5:EXECUTE 阶段补"SDD 未提及"分支 | |
| 54 | + | |
| 55 | +**改动**:`SKILL.md` EXECUTE 阶段机械动作原第1-2步只区分"对应清单B"与"不对应清单B"两支, | |
| 56 | +后者直接放过。改为三支判断: | |
| 57 | +1. 对应清单B(明确禁止)→ 停下三选一(不变)。 | |
| 58 | +2. **不对应清单B,但也不是 SDD 字面契约(模块划分/接口契约/数据形态等章节)明确要求的实现 | |
| 59 | + 内容——即"SDD 通篇没提过这个行为"**→ 新增分支:至少留一句"SDD 未提及,新增理由:……", | |
| 60 | + 不需要三选一决策(比清单B情形宽松),但必须留痕,不许直接跳过。 | |
| 61 | +3. 完全是 SDD 已要求内容的实现细节(换个变量名做同一件事)→ 走清单A 内部命名判断(不变)。 | |
| 62 | + | |
| 63 | +同时把"独立验证样本原型(`p-v82tpc`)"那条反模式对照从"❌ 反模式"移到这条新分支下面, | |
| 64 | +标注"这类偏离现在必须过第2支,留一句话即可过关,不再是'大概率跳过'"。 | |
| 65 | + | |
| 66 | +**改动为什么能关闭缺口**:新分支2 直接对应 benchmark D5 5分档"未提及"那半句要求,覆盖了此前 | |
| 67 | +"大概率跳过"留下的空子。用独立样本反查:`hashchange`/`replaceState` 代码不属于清单B(SDD未 | |
| 68 | +禁止),但也不属于"SDD已要求内容的实现细节"(SDD压根没让做这件事),落入新分支2,要求留痕 | |
| 69 | +——如果 coder 照新版执行,这处偏离会被记录,不再是"大概率跳过"的放过状态。 | |
| 70 | + | |
| 71 | +**重新打分(只重算 D5,其余维度本轮无改动,沿用 Round 1 分数)**: | |
| 72 | + | |
| 73 | +D5 新判据覆盖了"未提及"和"明确禁止"两种情形,且都要求留痕(前者要求相对宽松,一句话即可; | |
| 74 | +后者要求三选一决策),达到 benchmark D5 5分档的字面要求。是否给满分 5,还是保守给 4? | |
| 75 | +**保守给 4**——理由:新分支2 只要求"留一句话",没有像清单B情形那样要求"权衡利弊",这是刻意 | |
| 76 | +简化(避免对"SDD没说的所有代码"都要求重量级决策记录,防止 SKILL.md 变成不可执行的形式主义 | |
| 77 | +负担),但这个简化本身意味着"记录质量"可能参差(一句敷衍的"新增理由:需要"也满足字面要求, | |
| 78 | +但达不到 benchmark 5分档"有清晰说明为什么明知SDD不建议还是要加"的精神)。给 4 分是如实反映 | |
| 79 | +"机制已覆盖,但执行质量的把关还留有空间",不因为"补了一条规则"就直接跳到满分。 | |
| 80 | + | |
| 81 | +``` | |
| 82 | +D5 = 4/5×25 = 20.0(替换 Round 1 的 15.0) | |
| 83 | +加权和 = 25 + 12 + 13 + 9.6 + 20 + 10 = 89.6 | |
| 84 | +封顶检查:D1=5(≥4) 不封顶;D5=4(≥4) 不封顶 | |
| 85 | +最终得分 = 89.6 | |
| 86 | +``` | |
| 87 | + | |
| 88 | +**89.6 分,超过目标线 80。达标,停止迭代。** | |
| 89 | + | |
| 90 | +--- | |
| 91 | + | |
| 92 | +## 是否继续迭代到更高分(如 D2/D4 已知缺口)的决定 | |
| 93 | + | |
| 94 | +Round 2 已达标(89.6 ≥ 80),按任务书"低于目标线才继续迭代"的规则,**不再进行 Round 3**。 | |
| 95 | +D2(取值口径/最坏情况覆盖)与 D4(标签语义锚点边界)两处已知缺口**有意保留、不在本轮 | |
| 96 | +SKILL.md 里强行打满分掩盖**——理由: | |
| 97 | + | |
| 98 | +1. D2 的问题根源在 validator 侧的计算口径,不在 coder 侧 `coder.log` 本身,训练对象是 | |
| 99 | + coder 不是 validator,勉强塞进 SKILL.md 会做成"管别的节点的事"的越权指令。 | |
| 100 | +2. D4 的标签语义问题目前只有**一个**真实样本命中,样本量不足以确认这是普遍规律还是这次 | |
| 101 | + 独立样本的个案,`workgraph-planning-methodology-trial` 训练的教训是"单样本过拟合出的 | |
| 102 | + 规则"风险高,此处选择记录、不立即写死规则,等下次训练/复训有第二个真实样本佐证再决定 | |
| 103 | + 是否正式写入。 | |
| 104 | + | |
| 105 | +这两处已经写进 `sample_verification.md` 的"发现的规则问题"一节,留给 `benchmark_v1.md` | |
| 106 | +后续修订版和下一轮训练参考,不是遗漏,是有意识的止损点。 | |
| 107 | + | |
| 108 | +--- | |
| 109 | + | |
| 110 | +## 迭代汇总 | |
| 111 | + | |
| 112 | +| 轮次 | 改了什么 | 为什么 | 重新打分 | | |
| 113 | +|---|---|---|---| | |
| 114 | +| 1(首次) | — | 首次用 A/B/独立样本三方交叉验证打分 | 70.0(D5=3 封顶) | | |
| 115 | +| 2 | EXECUTE 阶段新增"SDD未提及"记录分支,关闭"大概率跳过"的字面漏洞 | 独立样本 `p-v82tpc` 的 hashchange 代码实测命中这个漏洞,不是假设性缺口 | 89.6(达标,停止) | | |
| 116 | + | |
| 117 | +共 2 轮,远低于 10 轮上限。 | ... | ... |
system/agents/coder-methodology-trial/train/evolve/sample_verification.md
0 → 100644
| 1 | +# sample_verification.md — 独立样本对照验证 | |
| 2 | + | |
| 3 | +> 目的:避免"用同一批样本(A/B)既定规则又验规则"的循环论证。本文档用一个**没有参与 | |
| 4 | +> `benchmark_v1.md` 推导/校准过程**的独立样本,逐维度核对 D1-D6 的判据能不能给出确定诊断, | |
| 5 | +> 如实记录哪些能、哪些不能,不为了证明规则有用而夸大问题,也不为了让规则显得好用而放水。 | |
| 6 | + | |
| 7 | +## 样本选取 | |
| 8 | + | |
| 9 | +首选 `p-v82tpc`(唯一带 `tests/` 目录的项目,任务 `T-mt2r6fz0-125b`)。已确认可用,未启用备选 | |
| 10 | +`p-bkhylu`。 | |
| 11 | + | |
| 12 | +- prd: `data/companies/e2e-demo/runs/run_0e9074815130/nodes/rn_43bdbfbbe6e6/prd.md`(75行,已通读) | |
| 13 | +- sdd: `data/companies/e2e-demo/runs/run_0e9074815130/nodes/rn_9e72db5d696e/sdd.md`(137行,已通读) | |
| 14 | +- coder 节点:`rn_e71be3641174`(`_research.md`/`_plan.md`/`coder.log`,53行,已通读) | |
| 15 | +- 代码:`data/companies/e2e-demo/projects/p-v82tpc/{index.html,styles.css,script.js,tests/unit-tester.check.js}` | |
| 16 | + (342行,已通读) | |
| 17 | +- 独立验证节点:`rn_60bb54fa74e0`(coder-validator,attempt-0~3,交叉参照用,未作为评分依据主体) | |
| 18 | + | |
| 19 | +**验证方式说明(自证,避免"用推理验证'不许推理'这条规则")**:本节所有结论不是单靠读 | |
| 20 | +`coder.log` 文本推断,而是我本人在本轮对话里**真实执行**了以下命令并核对了输出: | |
| 21 | +`node tests/unit-tester.check.js`(exit=0,输出与 `coder.log` 记录一致)、 | |
| 22 | +`grep -n "http"` 三个交付文件(无外部引用,与记录一致)、 | |
| 23 | +`grep -n "location.hash"` `script.js`(确认无赋值写入,与记录一致)、 | |
| 24 | +自起 `python3 -m http.server`(用不同端口 18923,非 `coder.log` 记录的 8792,避免"复用同一进程状态" | |
| 25 | +的假阳性)+ `curl` 三个资源文件(均 200,与记录一致)、 | |
| 26 | +以及独立用 Python 重新计算了 480px/375px 断点下 `hero-title`/`hero-tagline` 的 clamp 实际取值 | |
| 27 | +(发现与 D2 一节的问题,见下)。这五项是本次自我验证里真正做到"复现"而非"读日志相信"的部分; | |
| 28 | +其余维度(D3/D4/D6)因为判据本身是静态文本比对,读取 SDD 原文逐字核对代码即等同于"执行"这个 | |
| 29 | +判据定义的核对动作,不需要额外跑命令。 | |
| 30 | + | |
| 31 | +--- | |
| 32 | + | |
| 33 | +## D1 验证真实性 — 判定:**能给出确定结论,结论是合格** | |
| 34 | + | |
| 35 | +`coder.log`(重跑版)三条真实命令 + 真实输出:`node tests/unit-tester.check.js`(exit=0)、 | |
| 36 | +`grep -n "http" index.html styles.css script.js`(无匹配)、`python3 -m http.server` + 三次 | |
| 37 | +`curl` 返回 200。全部有具体命令 + 真实输出,没有"代码走查""规则推导""逻辑上应该"这类信号词。 | |
| 38 | +按 `benchmark_v1.md` D1 5 分档判据,本样本应记 **5 分**。 | |
| 39 | + | |
| 40 | +**局限(如实记录,不掩盖)**:本节点的 `coder.log` 是"重跑"版本,`_research.md` 第 13 行明确写 | |
| 41 | +"本节点私有目录已有上一轮的 `_plan.md`/`coder.log`/...(attempt-0.json verdict=no_prior_failure)", | |
| 42 | +但**当前 `coder.log` 文件已经是全量重写后的版本**,原始首次实现那一轮的验证记录已不可考(`stream.log` | |
| 43 | +全文 grep 也搜不到"topnav"/"nav-brand"/"currentTargetId"/"hashchange"等关键词,说明原始决策过程 | |
| 44 | +没有留下可追溯痕迹)。这意味着:D1 在"当前这一份记录"上能给出确定结论(5分),但"这份记录是否 | |
| 45 | +完整代表了该 coder 节点历史上全部验证行为"这件事,D1 本身的判据(逐条过 acceptance 判定)**回答 | |
| 46 | +不了**——它只能评价眼前这份记录,不能替代"记录是否完整保留"这个更底层的问题(这个问题实际属于 | |
| 47 | +D2 可重放性的边界,详见下节)。 | |
| 48 | + | |
| 49 | +## D2 验证可重放性 — 判定:**能给出确定结论,结论是部分合格,且发现一处真实问题** | |
| 50 | + | |
| 51 | +`coder.log` 三要素核对: | |
| 52 | +- `node tests/unit-tester.check.js`——环境(node,零依赖脚本不需要额外版本号)、输入(无参数)、 | |
| 53 | + 预期输出("PASS: 全部静态断言通过"字样 + exit=0)三要素齐全,我本人重跑后逐字一致。 | |
| 54 | +- `python3 -m http.server 8792` + `curl`——环境(python3 http.server,端口8792)、输入(三个文件 | |
| 55 | + 路径)、预期输出(200)三要素齐全,我本人用不同端口(18923,排除进程状态复用的假阳性)重跑后 | |
| 56 | + 一致。 | |
| 57 | + | |
| 58 | +这两条判 **5 分**(第三方不问 coder 本人就能照抄复现,且我本人已经复现成功)。 | |
| 59 | + | |
| 60 | +**真实发现的问题(不属于 coder.log 本身,但在"可重放性"这条主线上暴露)**:独立验证节点 | |
| 61 | +`rn_60bb54fa74e0` 的 `attempt-1.json`(`checks[3].detail`)写"480px 下 hero-title clamp 上限 | |
| 62 | +3rem(48px) vs hero-tagline 显式 1rem(16px),比例 3:1"。我用 Python 独立重算了同一个 CSS 规则 | |
| 63 | +(`.hero-title { font-size: clamp(2.2rem, 11vw, 3rem); }` @480px 断点内)在真实移动视口宽度 | |
| 64 | +375px/320px 下的**实际生效值**:375px 时 `11vw=41.25px`(落在 clamp 区间内,非上限),比例 | |
| 65 | +`41.25/16≈2.58:1`;320px 时 `11vw=35.2px`,比例 `35.2/16=2.2:1`——均低于 validator 记录的 | |
| 66 | +"3:1"。**这不是 coder.log 的问题(coder.log 本身没有讨论这个数值),是 validator 记录用了 | |
| 67 | +"clamp 表达式的上限值"而不是"该断点区间内的真实生效值"来代表整个断点,这是一处会误导"照抄 | |
| 68 | +复现"的计算口径问题**——如果第三方真的照 validator 的记录去复现,用 480px 视口宽度测(此时 | |
| 69 | +`11vw=52.8px`,超过 `3rem=48px` 上限,取值 48px,比例确实是 3:1),得到的结论和 validator 一致; | |
| 70 | +但如果按 PRD 异常表实际点名的"320px/375px 移动端"复现,会得到不一致的更低比例。**判据本身 | |
| 71 | +(三要素齐全就给分)不会拦住这种"要素齐全但取值口径选择性有利"的情况**——记为下方"规则本身 | |
| 72 | +的问题"。 | |
| 73 | + | |
| 74 | +综合:coder.log 本体两条记录扎实(5分档水准),但由此牵出的 validator 侧证据显示 D2 判据目前 | |
| 75 | +"三要素是否齐全"这条机械核对本身**不足以**发现"取值口径是否代表了真正的最坏情况",这是一个 | |
| 76 | +真实的判据缺口,不是本样本凑巧撞上的噪音——见文末"发现的规则问题"。 | |
| 77 | + | |
| 78 | +## D3 内容深度下限 — 判定:**能给出确定结论,结论是合格** | |
| 79 | + | |
| 80 | +`index.html` 三个 pitch 区块文案(如"规划、编码、验收、汇报,每个角色都是独立 Agent,按公司 | |
| 81 | +架构分工协同,像一支真正的团队一样并行推进任务。")均为具体场景化描述,非套话,且逐字对应 | |
| 82 | +PRD 补全的三条卖点内容(prd.md 第25-27行)。全文 grep 未发现 `TODO`/占位符/lorem ipsum。数值型 | |
| 83 | +要求(`.hero-visual{width:92vw}` ≥ SDD 要求的 90vw、`.pitch{padding:12vh 8vw}` 与 SDD §5 一致) | |
| 84 | +逐项核对到位。判 **5 分**,无异议,判据可直接机械核对,不存在模糊空间。 | |
| 85 | + | |
| 86 | +## D4 SDD 接口契约遵从度 — 判定:**能给出确定结论,且发现一处 A/B 样本里都没出现过的新反例** | |
| 87 | + | |
| 88 | +按 `benchmark_v1.md` D4 裁决规则(锚点类 vs 内部命名类)逐条核对 SDD I-1/I-2 契约: | |
| 89 | + | |
| 90 | +| SDD 契约(原文) | 实际交付 | 归类 | 是否留痕 | 结论 | | |
| 91 | +|---|---|---|---|---| | |
| 92 | +| `<button data-target="...">` 导航,不用 `<a href="#...">` | `<button class="nav-link" data-target="...">` | 锚点(行为相关,测试脚本直接断言 `nav-link` class 存在) | N/A,完全对齐 | 合格 | | |
| 93 | +| `id` 属性用于 `scrollIntoView` 定位(`section` id 命名未强制) | `id="section-1/2/3"` | 内部命名 | 无需留痕(SDD 本就未强制具体值) | 合格 | | |
| 94 | +| `<header class="topnav">` + `<span class="brand">` | `<nav class="nav">` + `<span class="nav-brand">` | **有争议**——容器标签从语义化的 `header`(页眉)换成 `nav`(导航地标),影响无障碍语义(屏幕阅读器 landmark 角色不同),应归入锚点类而非纯内部命名 | 无任何一份文档(`coder.log`/`_plan.md`/`_research.md`)提及这处改动或理由 | **不合格** | | |
| 95 | +| `scroll.js` I-2 契约:click→`scrollIntoView`→(若为 `<a>`)`preventDefault` 兜底,无其它逻辑 | `script.js` 额外加了 `currentTargetId` 变量(赋值后从未被读取,死代码)+ `hashchange` 全局监听 + `history.replaceState` 清 hash 逻辑 | SDD 未提及、也未明确禁止(不同于样本B的"明确禁止"),属于 D5 管辖范围更准,但从"实现是否超出契约声明的行为"看也是 D4 相关 | 无任何文档提及 | 影响归类判断,详见 D5 | | |
| 96 | + | |
| 97 | +**真实发现(新反例,独立于样本A/B已知的三处偏离)**:`<header class="topnav">`→`<nav class="nav">` | |
| 98 | +这处标签级改动,按 D4 现有裁决规则的字面标准("没被 SDD 声明为下游消费对象的内部标识符"才算 | |
| 99 | +内部命名)判断存疑——`class="topnav"`本身确实没被测试脚本引用,符合"内部命名"字面定义,可以 | |
| 100 | +判合格;但标签从 `header` 换成 `nav` 改变了页面的无障碍语义结构(HTML5 landmark role),这类 | |
| 101 | +改动是否也该算"内部命名",`benchmark_v1.md` 现有裁决规则**没有覆盖标签语义这一维**,只覆盖了 | |
| 102 | +"class名/属性/断点策略"。这是判据本身的一个真实缺口,不是本样本的偶然噪音——见文末。 | |
| 103 | + | |
| 104 | +按现有规则字面判定:class 名差异(`brand`→`nav-brand`、`topnav`→`nav`)属于内部命名类,允许 | |
| 105 | +自由发挥,但**没有一处留痕**,命中 D4 3 分档"存在 1 处接口锚点类偏离……`coder.log` 未做任何 | |
| 106 | +说明"的近似情形(严格说这不是锚点类,是内部命名类未留痕,按判据表最贴近的档位是 4 分"内部 | |
| 107 | +命名差异有留痕"的反面,即扣分但不到 3 分档的"接口锚点类偏离"那么重)。**保守判定:D4 = 4 分** | |
| 108 | +(内部命名类偏离本身允许,但完全没有一句说明,扣去满分的一档)。 | |
| 109 | + | |
| 110 | +## D5 隐性代码偏离记录完整性 — 判定:**能给出确定结论,且发现一处新反例** | |
| 111 | + | |
| 112 | +`script.js` 额外的 `hashchange` 监听 + `history.replaceState` 清 hash 逻辑,SDD I-2 契约 | |
| 113 | +(sdd.md 第75-88行)逐句核对:只声明了"监听 `[data-target]` click → `scrollIntoView` → | |
| 114 | +(如果元素是 `<a>`)`preventDefault` 兜底",**没有一句提到"监听全局 `hashchange` 事件"或 | |
| 115 | +"用 `history.replaceState` 清理地址栏 hash"**。这不属于"SDD 明确禁止却写了"(样本B那种更 | |
| 116 | +严重的情形),而是"SDD 未提及、超出契约声明范围"的实现决策——按 D5 判据表应落在 | |
| 117 | +**3 分档或 2 分档"多处未记录的中性偏离"**之间。 | |
| 118 | + | |
| 119 | +考虑该逻辑本身是防御性代码(防止外部脚本/浏览器扩展意外改 hash),功能上无害,且只有一处 | |
| 120 | +(不是"多处"),判 **D5 = 3 分**("存在 1 处 SDD 未提及但未被明确禁止的实现决策未被记录, | |
| 121 | +实质影响较小")。 | |
| 122 | + | |
| 123 | +**与样本B对比的价值**:样本B的 D5=2 反例是"SDD 明确写了'不要写',还是写了",是更严重的 | |
| 124 | +诚信问题;本样本的反例是"SDD 没说要写也没说不能写,写了但没提",是同一类判据(未留痕)下 | |
| 125 | +更轻微的子情形,恰好补全了 D5 判据表 3 分档和 2 分档之间的真实分界案例,不是重复样本B已发现 | |
| 126 | +的问题,是判据表覆盖范围内的一个新的、更轻的真实命中点,对判据表本身没有提出修正要求 | |
| 127 | +(3分档描述"实质影响较小"与本案例吻合)。 | |
| 128 | + | |
| 129 | +## D6 规格歧义处理判断线 — 判定:**vacuous case,特殊规则生效,给出确定结论** | |
| 130 | + | |
| 131 | +`_research.md`/`_plan.md`/`coder.log` 全文未出现任何"本处规格未写明"或"blocked:规格冲突" | |
| 132 | +字样,且通读 PRD/SDD 全文,两份文档对本次任务的边界定义得足够具体(连"320px 极窄视口如何 | |
| 133 | +处理"都在 SDD §7 给出了具体技术落点),未发现真实存在但未被处理的规格空缺。按 | |
| 134 | +`benchmark_v1.md` D6 特殊规则(vacuous case 计满分,但不适用不等于免检——已确认全文没有 | |
| 135 | +"我按XX处理"字样,检查过了,不是因为没检查才判空真),**D6 = 5 分**。 | |
| 136 | + | |
| 137 | +--- | |
| 138 | + | |
| 139 | +## 汇总打分(独立样本 `p-v82tpc`) | |
| 140 | + | |
| 141 | +| 维度 | 得分 | 依据类型 | | |
| 142 | +|---|---|---| | |
| 143 | +| D1 | 5 | 确定,本轮真实重跑复现 | | |
| 144 | +| D2 | 5(另牵出 validator 侧的口径问题,未拖累 coder.log 本身评分) | 确定,本轮真实重跑复现 | | |
| 145 | +| D3 | 5 | 确定,静态文本核对 | | |
| 146 | +| D4 | 4 | 确定,静态文本核对,发现新反例 | | |
| 147 | +| D5 | 3 | 确定,静态文本核对,发现新反例(同类型更轻) | | |
| 148 | +| D6 | 5(vacuous) | 确定,全文检索确认 | | |
| 149 | + | |
| 150 | +``` | |
| 151 | +加权和 = 5/5×25 + 5/5×15 + 5/5×13 + 4/5×12 + 3/5×25 + 5/5×10 | |
| 152 | + = 25 + 15 + 13 + 9.6 + 15 + 10 = 87.6 | |
| 153 | +封顶检查:D1=5(≥4)不封顶;D5=3(=3)→ 上限70 | |
| 154 | +最终得分 = min(87.6, 70) = 70.0 | |
| 155 | +``` | |
| 156 | + | |
| 157 | +**70 分,"合格"档**(65-79 区间)。这是独立样本第一次实测证明 D5=3 档位"上限70"这条封顶规则 | |
| 158 | +在真实数据上确实会生效(此前 `industry_avg_score.md` 只用了 D5=1/2/4/5 四个真实分档,D5=3 | |
| 159 | +这一档此前从未被真实样本命中过,本轮独立验证补上了这个空档)。 | |
| 160 | + | |
| 161 | +--- | |
| 162 | + | |
| 163 | +## 六维度是否给出"确定诊断"的逐条小结 | |
| 164 | + | |
| 165 | +| 维度 | 能否确定诊断 | 说明 | | |
| 166 | +|---|---|---| | |
| 167 | +| D1 | 能 | 判据字面清晰(信号词 + 命令/输出是否同时存在),本样本核对无歧义 | | |
| 168 | +| D2 | 能,但发现判据有缺口 | "三要素是否齐全"判据本身没问题,但没有要求"取值口径是否代表最坏情况",导致 validator 侧一处计算口径问题未被拦住(详见下节) | | |
| 169 | +| D3 | 能 | 判据字面清晰,静态核对无歧义 | | |
| 170 | +| D4 | 能,但发现判据有缺口 | 现有裁决规则只覆盖"class名/属性/断点策略",未覆盖"HTML 标签本身的语义变化"(`header`→`nav`),本样本命中了这个未覆盖场景,判定时需要额外推理才能归类,不是纯机械核对 | | |
| 171 | +| D5 | 能 | 判据字面清晰,且本样本证明了 3 分档在真实数据上确实存在(此前只有理论描述) | | |
| 172 | +| D6 | 能(vacuous) | 特殊规则本身清晰,但"vacuous case"依赖"确认过全文没有遗漏"这个前提,本质上要求评分者做一次全文检索,判据没有给出"检索到什么程度算检索过"的门槛(本次是靠人工通读,如果规格文档很长,这条的可操作性会下降) | | |
| 173 | + | |
| 174 | +**如实结论**:六个维度在本次独立样本上都能给出确定诊断,没有出现"给不出结论"的情况——这本身 | |
| 175 | +是对 `benchmark_v1.md` 判据可操作性的一个正面证据。但过程中发现了两处**判据表述层面**的真实 | |
| 176 | +缺口(D2 的取值口径、D4 的标签语义覆盖),既不是本样本编造出来凑数的问题,也不因为"六维度 | |
| 177 | +都打出了分"就认为判据已经完美——下面单独列出,交给下一版 SKILL.md/未来 benchmark 修订参考。 | |
| 178 | + | |
| 179 | +--- | |
| 180 | + | |
| 181 | +## 发现的规则问题(如实记录,不为了显得"规则好用"而回避) | |
| 182 | + | |
| 183 | +1. **D2 取值口径问题**:判据当前只检查"环境/输入/预期输出三要素是否齐全",不检查"选取的 | |
| 184 | + 输入参数是否代表了真正的最坏情况"。本样本的 validator 记录三要素齐全、可以照抄复现,但 | |
| 185 | + 复现出来的"预期输出"本身(480px 断点比例=3:1)是用 clamp 表达式的极限值而非实际移动端 | |
| 186 | + 视口宽度算出来的,与 PRD 异常表点名的 320px/375px 场景下的真实值(2.2-2.58:1)不符。 | |
| 187 | + **建议**:D2 判据补一句"输入参数如果是范围/区间类需求(如响应式断点),必须覆盖需求原文 | |
| 188 | + 点名的具体边界值(如 PRD 异常表提到的 320px/375px),不能只用样式规则本身的极限值代表 | |
| 189 | + 整个区间"。本次不在 SKILL.md 里直接加这条(因为这是 validator 侧的问题,不是 coder 侧 | |
| 190 | + `coder.log` 本身的问题,训练对象是 coder 不是 validator),但记录下来供 Digest 后续修订 | |
| 191 | + `benchmark_v1.md` 参考。 | |
| 192 | +2. **D4 标签语义覆盖问题**:现有裁决规则的"锚点类 vs 内部命名类"二分法针对的是"class名/ | |
| 193 | + 属性/断点策略",没有覆盖"HTML 标签本身从语义化标签换成另一个语义化标签"(`header`→`nav`) | |
| 194 | + 这种会改变无障碍语义但不改变 CSS selector 匹配的情况。本次评分时是人工判断"这类改动应该 | |
| 195 | + 偏向锚点类",但判据文本本身没有给出这条线,不同评分者可能会有不同倾向。**建议**: | |
| 196 | + D4 判据补一句"锚点类"定义,纳入"改变元素无障碍语义角色(如 landmark 标签类型)的改动"。 | |
| 197 | + 本次同样只记录,不在这轮 SKILL.md 里展开成新维度,因为只有一个真实样本命中,样本量不足以 | |
| 198 | + 支撑一条新判据线,避免像 `workgraph-planning-methodology-trial` 教训里"为单一样本量身定制 | |
| 199 | + 规则"那样过拟合。 | |
| 200 | + | |
| 201 | +**没有发现的问题(如实说明,不夸大)**:D1/D3/D5/D6 在本次独立样本上没有暴露判据表述层面的 | |
| 202 | +缺口——不是没认真找,是这四条维度的判据设计(信号词检测、静态数值比对、代码-日志比对、 | |
| 203 | +vacuous case 特殊规则)在应对一个全新样本时确实经受住了检验,字面判据和真实证据吻合, | |
| 204 | +不需要为了"显得发现了更多问题"而牵强附会。 | ... | ... |
system/agents/coder-methodology-trial/train/hunt/knowhow_v1.md
0 → 100644
| 1 | +# knowhow_v1.md — coder-methodology-trial · Hunt 阶段 | |
| 2 | + | |
| 3 | +训练目标:把"prd/sdd/acceptance 规格可靠转成能通过验收的可运行代码"这类执行类判据训练成 | |
| 4 | +`coder`(及其 org 版 `org-coder`)可操作的具体规则。本文档只做调研 + 证据采集,不产出训练方案 | |
| 5 | +(那是 Digest/后续阶段的事)。全部引用来源均标注出处;找不到可靠来源的一律标"未核实",不编。 | |
| 6 | + | |
| 7 | +--- | |
| 8 | + | |
| 9 | +## 一、Web Search 外部方法论(四个主题) | |
| 10 | + | |
| 11 | +### (a) TDD / ATDD —— 先写可验证的验收标准再写实现 | |
| 12 | + | |
| 13 | +ATDD(Acceptance Test-Driven Development):在实现功能代码之前先写验收测试用例,用 | |
| 14 | +Given/When/Then(Gherkin)语法把验收标准变成可执行的判定条件,客户/开发/测试三方协作定义。 | |
| 15 | +核心价值:提前把"怎么算做完"钉死,减少后期返工与"各凭想象"的解释分歧。 | |
| 16 | + | |
| 17 | +来源: | |
| 18 | +- [Acceptance Test Driven Development (ATDD) | Agile Alliance](https://agilealliance.org/glossary/atdd/) | |
| 19 | +- [Acceptance test-driven development | Wikipedia](https://en.wikipedia.org/wiki/Acceptance_test-driven_development) | |
| 20 | +- [Acceptance Test Driven Development | PMI](https://www.pmi.org/disciplined-agile/acceptance-test-driven-development) | |
| 21 | +- [Acceptance Test Driven Development: A Comprehensive Guide | AccelQ](https://www.accelq.com/blog/acceptance-test-driven-development/) | |
| 22 | + | |
| 23 | +**对本训练的映射**:仓库里 `coder/agent.md` 硬约束 4 已经隐含这条原则("acceptance 是判定标准, | |
| 24 | +不是参考资料"),但没有要求"先把 acceptance 转成可执行检查脚本再写实现代码"这个顺序动作—— | |
| 25 | +现状是"写完代码→再对着 acceptance 逐条自测",而不是"先有可执行的验收脚本→拿它反复驱动实现"。 | |
| 26 | +这是一个可以从外部方法论里补的具体判据缺口(细节见下文第二节 gap 分析)。 | |
| 27 | + | |
| 28 | +### (b) 规格歧义处理规范 —— 猜 vs 问 | |
| 29 | + | |
| 30 | +业界共识明确倾向"主动提问、不要靠假设推进": | |
| 31 | +- 提出有针对性的澄清问题是软件工程师的核心软技能,能在投入大量编码前暴露隐藏假设、消解冲突目标; | |
| 32 | +- 不澄清直接假设推进,会导致团队在不符合真实用户需求的方向上浪费资源,返工/超预算的代价远大于提前澄清的成本; | |
| 33 | +- 最佳实践:主动沟通干系人、文档化每次澄清结论、在需求梳理会上集体过一遍消除歧义(多角色视角能发现单人视角发现不了的歧义点)。 | |
| 34 | + | |
| 35 | +来源: | |
| 36 | +- [Posing thoughtful questions to clarify ambiguous requirements | DesignGurus](https://www.designgurus.io/answers/detail/posing-thoughtful-questions-to-clarify-ambiguous-requirements) | |
| 37 | +- [Best practices for handling incomplete or misleading requirements | DesignGurus](https://www.designgurus.io/answers/detail/best-practices-for-handling-incomplete-or-misleading-requirements) | |
| 38 | +- [Tackling Requirements Ambiguity | Number Analytics](https://www.numberanalytics.com/blog/ultimate-guide-requirements-ambiguity-software-engineering) | |
| 39 | + | |
| 40 | +**对本训练的映射**:`coder/soul.md` 原则 6 已经写了"不确定就问,问题只问一次问全",且明确"先去代码库和 | |
| 41 | +历史产物里找答案,真找不到才问"——这与外部方法论的落地建议(先自查、真不行再问、一次问全)高度一致, | |
| 42 | +是仓库里已经内化得不错的一条,训练时不必重造,但可以补充"猜测 vs 停下"的**具体判断线**(什么程度的 | |
| 43 | +不确定性算"能按保守读法实现",什么程度算"必须 blocked"),这条外部资料没有给出可直接抄的量化线, | |
| 44 | +标记为**训练阶段需要仓库自己定义的判据缺口**。 | |
| 45 | + | |
| 46 | +### (c) 最小可行步骤 / 增量交付 —— 小步快跑 vs 一次性大段代码 | |
| 47 | + | |
| 48 | +搜到的结果主要集中在"系统级迁移"(Incremental vs Big-Bang Modernization)语境,不是"单次编码任务 | |
| 49 | +内部该怎么切步骤"这个更细粒度的问题,按任务要求如实标注: | |
| 50 | + | |
| 51 | +- 增量方式的优势可迁移到编码场景:每一步都有明确产出、可验证、可回头调整,降低"隧道视野"(做了很久 | |
| 52 | + 才发现方向错了)的风险; | |
| 53 | +- Big Bang 方式的优势也可迁移:省去多次集成/切换的开销,但前提是"一次性做对"的把握很大,风险在于 | |
| 54 | + "一个 bug 可能打断整个交付",且需要更长的前期设计与更大的一次性验证面。 | |
| 55 | + | |
| 56 | +来源: | |
| 57 | +- [Incremental vs. Big-Bang Modernization: Which Works Best for Your Business? | Devox Software](https://devoxsoftware.com/blog/incremental-vs-big-bang-modernization-which-works-best-for-your-business/) | |
| 58 | +- [Pros and Cons of Incremental Change vs. the "Big Bang" Approach | WalkMe](https://www.walkme.com/blog/incremental-change/) | |
| 59 | + | |
| 60 | +**未核实**:没有搜到专门针对"单个编码任务内部代码分段粒度"(而非系统级迁移策略)的高权威来源, | |
| 61 | +这条主题的证据强度弱于 (a)(b)(d)。 | |
| 62 | + | |
| 63 | +**对本训练的映射**:`coder/agent.md` 的四段式生命周期(Research→Plan→Execute→Verify)本身就是一种 | |
| 64 | +强制小步骤(先勘察、先列计划、再动手),Execute 阶段要求"按 `_plan.md` 的最小步骤一段段推进,边写边记 | |
| 65 | +coder.log"。仓库内证据(见下文第三节样本 B coder.log 的"实现过程"分步记录)显示这条已被真实执行, | |
| 66 | +是训练中可以直接作为**正例**引用的现有实践,而非需要新引入的外部方法论。 | |
| 67 | + | |
| 68 | +### (d) "写完看起来对" vs "跑过验收命令确认对" —— 为什么后者才是唯一权威 | |
| 69 | + | |
| 70 | +- 自测(self-check)只有作者一人参与,无法捕捉"只有代码实际运行起来才会暴露"的问题——静态审查 | |
| 71 | + 本质上无法替代执行; | |
| 72 | +- 单测全绿不代表系统整体做对了事:真正有效的测试要走用户会走的真实路径、真实输入、真实边界、 | |
| 73 | + 真实失败模式,而不是停留在"看代码逻辑上通"; | |
| 74 | +- 测试覆盖不完整时,"通过了测试"不等于"改动是正确的";且大多数测试不反映性能是否劣化——即使 | |
| 75 | + "跑过"也不是万能保证,但仍然是比纯目视审查更接近真相的验证方式; | |
| 76 | +- 实践中经验丰富的工程师是"目视审查 + 有选择地真实执行"的混合策略,而不是二选一,但当需要深度验证时 | |
| 77 | + 最终一定落回"真的跑一遍"。 | |
| 78 | + | |
| 79 | +来源: | |
| 80 | +- [Code review can't keep up with AI. Build a verification layer instead. | DEV Community](https://dev.to/nhirschfeld/code-review-cant-keep-up-with-ai-build-a-verification-layer-instead-1oh4) | |
| 81 | +- [As a software engineer, when doing code reviews, do you checkout and run tests or just read visually? | Quora](https://www.quora.com/As-a-software-engineer-when-you-are-doing-code-reviews-do-you-typically-checkout-the-code-and-run-the-tests-or-do-you-just-go-over-the-code-visually-and-try-to-understand-it) | |
| 82 | +- [Self-testing code | Wikipedia](https://en.wikipedia.org/wiki/Self-testing_code) | |
| 83 | + | |
| 84 | +**对本训练的映射**:这是四个主题里外部资料与仓库真实证据吻合度最高的一条——第三节的样本 A 对比 | |
| 85 | +(attempt-1 代码走查声称 PASS → attempt-2 真实浏览器测试才发现"测的是僵尸进程里的旧内容")就是这条 | |
| 86 | +外部原则在仓库真实历史里的一次活生生复现,具体见下文。 | |
| 87 | + | |
| 88 | +--- | |
| 89 | + | |
| 90 | +## 二、仓库内权威源精读(比外部资料更权威) | |
| 91 | + | |
| 92 | +### 2.1 `system/agents/coder/agent.md` —— 硬约束逐条摘录 + 四段式各阶段产出要求 | |
| 93 | + | |
| 94 | +**硬约束 1-7(原文摘录,无改写)**: | |
| 95 | + | |
| 96 | +1. coder 是 e2e-demo 图里的**实现节点**,唯一职责是产出可运行代码。 | |
| 97 | +2. 开工前必须先读齐上游产物(prd/sdd/acceptance),缺一份不许动手;路径以任务描述「上游输入」段 | |
| 98 | + 为准,不写死相对路径(会指到空的私有目录,静默开工)。标 ⚠️ 的输入代表上游未产出,要汇报 | |
| 99 | + `blocked`,不许自己去别处翻。 | |
| 100 | +3. 必须交出两份产物:`artifact`(代码)+ `log`(`coder.log`,写清干了什么/跑了什么命令/输出是什么/ | |
| 101 | + 哪条 acceptance 过了)。这两处、且只有这两处会被引擎索引进 `graph_files`;写到别处等于没交付。 | |
| 102 | +4. **acceptance 是判定标准,不是参考资料**——交付前必须自己把验收清单每一条命令跑一遍,把真实输出 | |
| 103 | + 贴进 `coder.log`;没跑就汇报 = 黑盒交付,下游会打回。 | |
| 104 | +5. **不许改规格来迁就实现**——规格有错/做不到,不许偷偷改上游文件或换方案静默交付,要写进 | |
| 105 | + `coder.log` 并汇报 `blocked`,走 `input_underspecified` 打回规划节点。 | |
| 106 | +6. **失败重做是常态**——验收 fail 默认打回 coder 自己(只有"需求本身没说清"才回上游);打回时先读 | |
| 107 | + `fail_reason` 针对性修,不要重写全部。 | |
| 108 | +7. 四段式流转必须走命令行,**不许在同一轮对话里从读规格直冲写代码**。 | |
| 109 | + | |
| 110 | +**四段式生命周期,各阶段要求产出什么(原文摘录)**: | |
| 111 | + | |
| 112 | +| 阶段 | 手上只有什么 | 必须产出 | 下一步动作 | | |
| 113 | +|---|---|---|---| | |
| 114 | +| RESEARCH | 上游规格 + 既有代码库 | `_research.md`(不要凭空发明已有模块) | `task transition --phase plan` | | |
| 115 | +| PLAN | `_research.md` | `_plan.md`(要改/新建哪些文件、实现顺序、每步用哪条 acceptance 自检) | `task transition --phase execute` | | |
| 116 | +| EXECUTE | `_plan.md` | 代码 + `coder.log`(按 `_plan.md` 最小步骤一段段推进,边写边记) | `task transition --phase verify` | | |
| 117 | +| VERIFY | 代码 | 逐条跑验收清单,真实输出贴进 `coder.log`;有 fail → `_lessons.md` 打回自己修 | 全 pass 才 `report_task(PASS)` | | |
| 118 | + | |
| 119 | +**训练缺口初判**(现状已明确要求了什么、还缺什么可操作判据): | |
| 120 | + | |
| 121 | +- ✅ 已明确:**产出物形态**(两份、且只有两处)、**验收是唯一权威**(不许黑盒交付)、**四段式不许跳**、 | |
| 122 | + **不许悄悄改规格**、**打回先诊断不许推倒重写**。这五条已经是可操作的硬约束,不需要重新训练"要不要 | |
| 123 | + 做",训练重点应放在"做得够不够格"的判据上。 | |
| 124 | +- ❌ 未明确: | |
| 125 | + 1. "把验收清单每一条命令跑一遍"里的**"跑"字本身没有定义门槛**——第三节样本 A 证明了"代码走查 + | |
| 126 | + 规则推导"也可能被 coder 自己当成"跑过了"来汇报(第一轮 attempt 即如此),agent.md 没有一条 | |
| 127 | + 判据能拦住这种"用推理代替执行"的自我宽松解释。 | |
| 128 | + 2. **没有关于"实现是否偷工减料/占位内容"的判据**——soul.md 有"acceptance 不过就是没做完",但 | |
| 129 | + acceptance 本身覆盖不到的维度(比如文案内容深度、DOM 命名是否忠实 SDD 接口契约)目前完全没有 | |
| 130 | + 约束,全靠 coder 自觉。 | |
| 131 | + 3. **没有关于"SDD 接口契约的字面遵从度"的判据**——SDD 给的 class 名/属性/断点策略是不是必须逐字 | |
| 132 | + 照抄,还是允许 coder"精神上遵守、字面上自由发挥",agent.md 完全没提,样本 A 里出现了字面偏离 | |
| 133 | + (`feature-block` vs 实际的 `feature`)且没有被判定为问题,说明这条目前处于灰色地带。 | |
| 134 | + 4. **没有关于"未在 coder.log 里记录的隐性代码改动"的判据**——样本 B 里出现了 SDD 明确要求"不要写" | |
| 135 | + 的状态管理代码被悄悄写了、且没有出现在 `coder.log` 的"实现过程"记录里,这是 agent.md 硬约束 | |
| 136 | + 4/5 的字面要求之外的一个盲区:硬约束 4 只要求"验收命令的输出"要记录,没有要求"你做出的每一个 | |
| 137 | + 实现决策偏离设计文档时都要显式记录"。 | |
| 138 | + | |
| 139 | +### 2.2 `system/agents/coder/soul.md` —— 工作原则 1-6(原文摘录) | |
| 140 | + | |
| 141 | +1. **规格是唯一权威,代码服从规格**——发现规格错/矛盾/做不到,不许悄悄绕过去自创方案,要记下冲突 | |
| 142 | + 汇报 `blocked`。 | |
| 143 | +2. **acceptance 不过就是没做完,没有例外**——"逻辑上应该对""跑了一部分"都不算过,必须自己把每一条 | |
| 144 | + 验收命令跑一遍,把真实输出贴进日志。 | |
| 145 | +3. **四段式不许跳**——没读规格就写代码是脑补系统;没跑验收就汇报是假完成;每阶段产出要写给"失忆后的 | |
| 146 | + 自己"看得懂。 | |
| 147 | +4. **失败重做时先诊断,不要重写**——被打回先读 `fail_reason`,定位具体哪一步错了再改那一步。 | |
| 148 | +5. **交付边界不能越**——代码只写到写入边界内,节点私有产物只写到节点私有目录。 | |
| 149 | +6. **不确定就问,问题只问一次问全**——先去代码库和历史产物里找答案,真找不到、且不同理解会导致 | |
| 150 | + 实现方向完全不同时才问,不来回试探式追问。 | |
| 151 | + | |
| 152 | +### 2.3 `prd-planning` 类别 4 具体做法 —— "写虚了"训练成可操作判据的先例 | |
| 153 | + | |
| 154 | +来源:`system/agents/prd-planning/agent.md`「类别 4 的具体做法」一节 + `soul.md` 原则 7 | |
| 155 | +(2026-08-23 补,对应 `docs/todo/system-design/36-prd-agent-methodology-training-feasibility.md` | |
| 156 | +阶段二训练,真实案例 `run_c7d233619784/nodes/rn_42eed93342c5/prd.md`)。 | |
| 157 | + | |
| 158 | +**方法论本身(可迁移给 coder 训练借鉴的部分)**: | |
| 159 | + | |
| 160 | +1. **先找到一个"写全了但仍不合格"的真实事故案例作为训练锚点**——不是从抽象原则出发编判据,而是先 | |
| 161 | + 定位一个具体的失败模式(该案例中:正文写了"大图",验收线索表却一行没提图片,产出实测 0 个 | |
| 162 | + `<img>` 标签),再针对这个具体失败模式反推出可执行的检查步骤。 | |
| 163 | +2. **描述性语言扫描(把模糊词汇变成必须处理的清单项)**:逐句重读产出,标出所有描述性/形容词性用语, | |
| 164 | + 对每一个当场二选一——① 转成量化代理指标("大图"→"页面存在 ≥N 个宽度 ≥XXXpx 的图片元素,占卡片 | |
| 165 | + 可视面积 ≥M%");② 删词改写(形容词删掉换成具体规则)。做完的标准是"正文里找不到一个还没对应 | |
| 166 | + 量化判据、也没被删掉的形容词性词语"——**用"找不到"而不是"我觉得写清楚了"作为完成判据**,这是 | |
| 167 | + 可复用的训练模式:把主观的"够不够格"翻译成一个可以逐句机械核对的扫描动作。 | |
| 168 | +3. **内容深度下限**:凡涉及文案/说明性内容的功能,不能只写"不能为空",至少二选一——给最小字数/字符数 | |
| 169 | + 区间;或要求内容包含至少一个具体名词/数据/场景化描述("很棒的产品"这类不含具体信息的套话不算数)。 | |
| 170 | +4. **业务度量翻译**:回头对照上游的度量要求,凡出现某类关键表述(该案例是"转化/体验类"),问自己 | |
| 171 | + "功能清单里有没有一条能直接指出来的具体功能在承接这条度量",指不出来就要新增一条功能,不能指望 | |
| 172 | + 下游环节"兜底补救"。 | |
| 173 | + | |
| 174 | +**训练方法论的可迁移之处(供 coder-methodology-trial Digest 阶段参考)**: | |
| 175 | +- prd-planning 面对的是"文档写作",coder 面对的是"代码实现",但**"怎么把一个模糊质量要求变成可 | |
| 176 | + 执行判据"这套方法本身是通用的**:先定位一个真实失败案例 → 从案例反推具体失败模式 → 把失败模式 | |
| 177 | + 翻译成一个"能不能"而不是"好不好"的检查动作(能不能在正文里找到一个还没处理的形容词 / 能不能在 | |
| 178 | + coder.log 里找到一条没有真实命令输出支撑的 PASS 判定)。 | |
| 179 | +- 本次 Hunt 阶段第三节找到的样本 A "attempt-1 代码走查声称 PASS" 就是这样一个可以直接类比使用的 | |
| 180 | + 真实失败模式锚点——训练 coder 时可以直接借用"描述性语言扫描"的思路,改造成"验证方式扫描":逐条 | |
| 181 | + 过 `coder.log` 里对 acceptance 的判定,标出所有"未标注具体执行命令+真实输出、只有推理性描述"的 | |
| 182 | + 判定项,作为需要打回重做的信号。 | |
| 183 | + | |
| 184 | +--- | |
| 185 | + | |
| 186 | +## 三、历史真实证据 —— 样本 A vs 样本 B(coder 层独立于规格质量之外的实现质量) | |
| 187 | + | |
| 188 | +**结论先行**:两个样本的 prd/sdd 规格质量确实不同(样本 B 的 SDD 把每一处"简洁大气/大字体/留白"都 | |
| 189 | +量化到了具体 px 数值和检查点宽度集合,样本 A 的 SDD 相对粗一些),但**即使排除这个变量**,coder 层 | |
| 190 | +本身在两个样本里都表现出了独立于规格质量的问题——且问题的性质不同,说明"规格写得再细也堵不住某些 | |
| 191 | +coder 层特有的漏洞"。 | |
| 192 | + | |
| 193 | +### 样本 A(`p-pyjha7`,prd-planning 训练前,prd/sdd 见 `run_c7d233619784/nodes/{rn_42eed93342c5,rn_4618bc2aa72d}`) | |
| 194 | + | |
| 195 | +**发现 1(核心):coder 第一轮自测把"代码走查+规则推导"当成了"跑过"** —— `coder.log` | |
| 196 | +(`rn_09845e11f11b`)原文对 `responsive_no_overflow` 维度的判定依据是: | |
| 197 | + | |
| 198 | +> "本地未装浏览器自动化工具,采用代码走查 + CSS 规则推导确认……判定:PASS(对应 100 分档,走查 | |
| 199 | +> 依据见上)" | |
| 200 | + | |
| 201 | +这是"写完看起来对"当成"验证过"直接汇报 PASS 的真实案例,与 `coder/soul.md` 原则 2"跑了一部分不算 | |
| 202 | +过"精神相悖(虽然没有直接违反字面的"acceptance 不过就是没做完",因为这次确实"过"了,但判定过程本身 | |
| 203 | +不是执行验证,是推理)。直到 `attempt-2`(后续重跑)才真正装上 Playwright 跑了真实浏览器测试。 | |
| 204 | + | |
| 205 | +**发现 2(佐证 (d) 主题的价值):真实执行捕获了推理无法发现的环境错误**。`attempt-2` 里 coder 记录: | |
| 206 | + | |
| 207 | +> "发现上一轮的 python http.server 8934 是从错误目录起的旧僵尸进程(serving 另一份不同的 index.html, | |
| 208 | +> title 都对不上),已 kill 掉重新在项目根正确目录起服务,避免"测的不是这份代码"" | |
| 209 | + | |
| 210 | +这条是外部方法论主题 (d)"自测无法捕获只有真实运行才暴露的问题"在仓库真实历史里的直接印证——纯代码 | |
| 211 | +走查完全不可能发现"测试对象根本不是这次交付的文件"这种问题。 | |
| 212 | + | |
| 213 | +**发现 3:SDD 接口契约的字面遵从度松散,且未被判定为问题**。对照 `sdd.md` 的 I-2 段: | |
| 214 | + | |
| 215 | +- SDD 要求区块 class 用 `feature-block`,实际交付的 `index.html` 用的是 `feature`; | |
| 216 | +- SDD 要求 `nav-toggle` 按钮带 `aria-expanded="false" aria-controls="nav-list"`,实际交付缺失这两个 | |
| 217 | + 属性; | |
| 218 | +- SDD 建议用区间式媒体查询(`(min-width:768px) and (max-width:1023px)` 等多档),实际 `styles.css` | |
| 219 | + 只有一个 `@media (max-width: 768px)` 断点。 | |
| 220 | + | |
| 221 | +这三处都不影响 acceptance 判定通过(功能性测试跑得过),但说明**coder 对 SDD 接口契约的落实标准是 | |
| 222 | +"精神遵守、字面自由发挥",而不是逐字对齐**——目前 agent.md/soul.md 都没有对这条给出判据,是个灰色 | |
| 223 | +地带(详见 2.1 节训练缺口 3)。 | |
| 224 | + | |
| 225 | +**独立验证层的作用**:`unit-tester` 节点(`rn_9d48ea87f326`,`test.log`)明确写道"coder.log 里 coder | |
| 226 | +自己已用 Playwright 自测过并宣称四条 PASS,但那是实现者的自我汇报,本节点作为独立自测节点,不采信、 | |
| 227 | +全部重新真实跑过一遍"——最终质量保障不完全依赖 coder 的自律,而是有一层"不信任 coder 自我汇报、独立 | |
| 228 | +重跑"的下游节点兜底。这对训练目标有一个重要含义:**coder 层的训练判据不应该只看"coder 是否自称验证 | |
| 229 | +过",还要看"coder.log 记录的验证步骤是否精确到独立第三方能照着重跑一遍得到同样结论"**(样本 A 第一轮 | |
| 230 | +的"代码走查"记录恰恰做不到这点——没有可重放的命令)。 | |
| 231 | + | |
| 232 | +### 样本 B(`p-cgfdcr`,prd-planning 训练后,apple.com 风格官网首页任务,prd/sdd 见 | |
| 233 | +`run_fa4d7e2bec49/nodes/{rn_923042515de4,rn_e628e29ecf9d}`) | |
| 234 | + | |
| 235 | +样本 B 的 SDD 远比样本 A 精细(把"简洁大气"拆到"核心配色 ≤4 种"、把"大字体"拆到具体 px 阈值和字号 | |
| 236 | +比例、把"留白充足"拆到具体 margin/padding 数值),这是 prd-planning 训练见效的直接证据。**即便如此**, | |
| 237 | +coder 层依然独立出现了两类问题: | |
| 238 | + | |
| 239 | +**发现 4(正例,应作为训练中的"黄金标准"引用):真实执行捕获了 SDD 完全没有预见到的真实 bug**。 | |
| 240 | +`coder.log`(`rn_9385bad9a4e7`)"实现过程"第 4 步记录: | |
| 241 | + | |
| 242 | +> "EXECUTE 中段发现问题并修正:首次用 Playwright 实测点击 'arena'(最后一个卖点区块)滚动后,区块 | |
| 243 | +> 顶部未能贴合视口顶部(top≈76px @ 900px 高视口),根因是原 footer 太矮、最后一屏之后可滚动内容不足, | |
| 244 | +> scrollIntoView 无法把 arena 顶到最顶。修复:给 `.site-footer` 加 `min-height:60vh` + flex 居中…… | |
| 245 | +> 复测 h=600/720/800/900/1080/1440 六档视口高度,arena 顶部误差全部 ≤7px。" | |
| 246 | + | |
| 247 | +这是"最后一个区块滚不到顶"这个经典的 `scrollIntoView` 边界问题——SDD 再精细也不可能预先想到这一点 | |
| 248 | +(它是页面末尾内容高度和视口高度的动态关系决定的,纯读 SDD/PRD 文本推不出来),**只有真的用真实浏览器 | |
| 249 | +点击测试过才能发现**,且 coder 做到了"发现问题→定位根因→给出修复→用多档参数重新实测确认"的完整闭环, | |
| 250 | +过程和结论都写进了 `coder.log`。这条应作为 Digest/Evolve 阶段"什么叫真正做到了 VERIFY"的正面参照。 | |
| 251 | + | |
| 252 | +**发现 5(核心,独立于规格质量之外的负面问题):coder 静默写了 SDD 明确禁止的代码,且未记录**。 | |
| 253 | +SDD `rn_e628e29ecf9d` §3.2 原文: | |
| 254 | + | |
| 255 | +> "重复点击不做显式防抖——依赖浏览器原生行为,不写多余代码……不需要维护'是否正在滚动'的状态标志或 | |
| 256 | +> `AbortController` 之类的显式打断逻辑。**不写这段状态管理代码是本设计的明确选择**……下游 `org-coder` | |
| 257 | +> 不需要也不应该补上。" | |
| 258 | + | |
| 259 | +但实际交付的 `script.js`(样本 B)包含: | |
| 260 | + | |
| 261 | +```js | |
| 262 | +var currentScrollTarget = null; | |
| 263 | +function scrollToSection(sectionId) { | |
| 264 | + var found = document.getElementById(sectionId); | |
| 265 | + if (!found) return; | |
| 266 | + if (currentScrollTarget && currentScrollTarget !== found) { | |
| 267 | + window.scrollTo({ top: window.scrollY, left: 0, behavior: 'auto' }); | |
| 268 | + } | |
| 269 | + currentScrollTarget = found; | |
| 270 | + found.scrollIntoView({ behavior: supportsSmoothScroll() ? 'smooth' : 'auto', block: 'start' }); | |
| 271 | +} | |
| 272 | +``` | |
| 273 | + | |
| 274 | +这正是 SDD 明确点名"不要写"的"是否正在滚动"状态标志的变体实现(`currentScrollTarget` + 切换目标前 | |
| 275 | +先执行一次原地滚动)。更关键的是:`coder.log` 的"实现过程"四步记录里**完全没有提到这段代码**,也没有 | |
| 276 | +作为 `open_questions` 记录"我认为需要加这段防御性代码,理由是……"——这不是"改规格来迁就实现"(硬约束 | |
| 277 | +5 管的是那种情况),而是一种硬约束/soul.md 目前都没有覆盖的更隐蔽的问题:**悄悄多写了 SDD 明确禁止的 | |
| 278 | +代码,且没有在产出物里留下任何痕迹说明为什么这么做**。这条独立于规格写得好不好——哪怕规格已经写到 | |
| 279 | +"这一步明确不需要、也不应该做"这么具体的程度,coder 依然可能在实现时不知不觉加回去。 | |
| 280 | + | |
| 281 | +**发现 6(独立验证层的补强,佐证发现 3 的训练意义)**:`unit-tester` 节点(`rn_fc9155c598ef`, | |
| 282 | +`test.log`)不仅重新独立跑了四个维度的验收,还额外做了"动画真实性补测"——对 `arena` 按钮点击后每 | |
| 283 | +~50ms 采样一次 `scrollY`,用真实的渐进变化曲线(`t=0ms→2010` 分 12 个采样点连续变化)证明这是"真实 | |
| 284 | +平滑滚动"而不是"无动画瞬移",这是 rubric 里"50 分档瑕疵项"专门要拦的情况(貌似平滑滚动、实际是 | |
| 285 | +CSS/JS 配置问题导致的瞬间跳变)。这类"用时间序列采样区分真实动画 vs 伪装成动画的瞬移"的验证手法, | |
| 286 | +是纯代码走查和"跑一次读最终结果"都无法覆盖的更细粒度验证,值得记入训练时"什么叫真正验证到位"的 | |
| 287 | +判据库。 | |
| 288 | + | |
| 289 | +### 备用真实样本(供后续 Evolve 阶段自我验证挑选,本轮只记录路径,未深入分析) | |
| 290 | + | |
| 291 | +| 样本 | 项目根 | 任务 | prd | sdd | 备注 | | |
| 292 | +|---|---|---|---|---|---| | |
| 293 | +| p-bkhylu | `data/companies/e2e-demo/projects/p-bkhylu/`(`app.js`/`assets/`/`DELIVERY.md`/`index.html`/`styles.css`) | T-msyu6u9b-939c | `run_9168bd24f46c/nodes/rn_129f6b7d610a/prd.md` | `run_9168bd24f46c/nodes/rn_6bcda7e1fd6a/sdd.md` | 带 `DELIVERY.md` 交付说明,与另两个样本产物形态不同,可用于对比"是否需要独立交付文档"这类附加规范 | | |
| 294 | +| p-v82tpc | `data/companies/e2e-demo/projects/p-v82tpc/`(`index.html`/`script.js`/`styles.css`/`tests/unit-tester.check.js`) | T-mt2r6fz0-125b | `run_0e9074815130/nodes/rn_43bdbfbbe6e6/prd.md` | `run_0e9074815130/nodes/rn_9e72db5d696e/sdd.md` | 唯一带 `tests/` 目录的项目(`tests/unit-tester.check.js`),可用于对比"代码里自带测试脚本"与另两个样本"验证脚本只存在节点私有目录、不进 artifact"这两种模式的优劣 | | |
| 295 | + | |
| 296 | +--- | |
| 297 | + | |
| 298 | +## 四、给 Digest 阶段的判据缺口清单(汇总) | |
| 299 | + | |
| 300 | +1. **"跑过"没有门槛定义**——需要明确"用代码走查/规则推导代替实际执行"不算跑过,判据可以是 | |
| 301 | + "coder.log 里每条 acceptance 判定必须能看到具体执行的命令 + 真实输出,纯描述性/推理性文字不算数" | |
| 302 | + (样本 A attempt-1 反例,样本 A attempt-2/样本 B 正例)。 | |
| 303 | +2. **实现内容深度/是否偷工减料,目前完全没有独立于 acceptance 之外的判据**——可参考 prd-planning | |
| 304 | + "内容深度下限"的做法迁移。 | |
| 305 | +3. **SDD 接口契约的字面遵从度是灰色地带**——需要明确 class 名/属性/断点策略这类"技术落点"是硬约束 | |
| 306 | + 还是可自由发挥的实现细节,目前样本 A 的偏离没有被判定为问题,需要 Digest 阶段决定训练方向。 | |
| 307 | +4. **未记录的隐性代码偏离没有判据覆盖**——硬约束 5 只管"改规格",不管"悄悄写了规格明确禁止的代码但 | |
| 308 | + 不记录",样本 B 发现 5 是这条的真实反例,建议补一条"SDD 明确要求不写的代码,如果最终仍然写了, | |
| 309 | + 必须在 coder.log 里显式记录理由"。 | |
| 310 | +5. **验证记录的可重放性应作为独立判据**——不能只看"是否验证过",还要看"验证记录是否精确到独立第三方 | |
| 311 | + (如 unit-tester)能照着重跑得到同样结论",样本 A attempt-1 做不到,attempt-2/3 和样本 B 都做到了。 | |
| 312 | +6. **正面案例值得沉淀为训练素材**——样本 B 发现 4(真实执行捕获 SDD 未预见到的 bug,完整闭环记录) | |
| 313 | + 和样本 A/B 的 unit-tester 独立复测(不信任 coder 自我汇报)都是可以直接引用的"什么叫真正做到 | |
| 314 | + VERIFY"的正面范例。 | ... | ... |
system/agents/coder-methodology-trial/train/hunt/sources.json
0 → 100644
| 1 | +{ | |
| 2 | + "generated_at": "2026-08-24", | |
| 3 | + "task_id": "T-mt6yxpae", | |
| 4 | + "sources": [ | |
| 5 | + { | |
| 6 | + "id": "S-01", | |
| 7 | + "topic": "a. TDD/ATDD — 先写验收标准再写实现", | |
| 8 | + "type": "web", | |
| 9 | + "title": "Acceptance Test Driven Development (ATDD) | Agile Alliance", | |
| 10 | + "url": "https://agilealliance.org/glossary/atdd/", | |
| 11 | + "verified": true, | |
| 12 | + "note": "权威敏捷方法论词典,定义 ATDD 核心概念" | |
| 13 | + }, | |
| 14 | + { | |
| 15 | + "id": "S-02", | |
| 16 | + "topic": "a. TDD/ATDD — 先写验收标准再写实现", | |
| 17 | + "type": "web", | |
| 18 | + "title": "Acceptance test-driven development | Wikipedia", | |
| 19 | + "url": "https://en.wikipedia.org/wiki/Acceptance_test-driven_development", | |
| 20 | + "verified": true, | |
| 21 | + "note": "综述性定义 + 与 TDD/BDD 的关系" | |
| 22 | + }, | |
| 23 | + { | |
| 24 | + "id": "S-03", | |
| 25 | + "topic": "a. TDD/ATDD — 先写验收标准再写实现", | |
| 26 | + "type": "web", | |
| 27 | + "title": "Acceptance Test Driven Development | PMI", | |
| 28 | + "url": "https://www.pmi.org/disciplined-agile/acceptance-test-driven-development", | |
| 29 | + "verified": true, | |
| 30 | + "note": "PMI Disciplined Agile 对 ATDD 的定位说明" | |
| 31 | + }, | |
| 32 | + { | |
| 33 | + "id": "S-04", | |
| 34 | + "topic": "a. TDD/ATDD — 先写验收标准再写实现", | |
| 35 | + "type": "web", | |
| 36 | + "title": "Acceptance Test Driven Development: A Comprehensive Guide | AccelQ", | |
| 37 | + "url": "https://www.accelq.com/blog/acceptance-test-driven-development/", | |
| 38 | + "verified": true, | |
| 39 | + "note": "工作流程与 Gherkin 语法说明" | |
| 40 | + }, | |
| 41 | + { | |
| 42 | + "id": "S-05", | |
| 43 | + "topic": "b. 规格歧义处理规范 — 猜 vs 问", | |
| 44 | + "type": "web", | |
| 45 | + "title": "Posing thoughtful questions to clarify ambiguous requirements | DesignGurus", | |
| 46 | + "url": "https://www.designgurus.io/answers/detail/posing-thoughtful-questions-to-clarify-ambiguous-requirements", | |
| 47 | + "verified": true, | |
| 48 | + "note": "主张主动提问优于假设推进,给出具体沟通技巧" | |
| 49 | + }, | |
| 50 | + { | |
| 51 | + "id": "S-06", | |
| 52 | + "topic": "b. 规格歧义处理规范 — 猜 vs 问", | |
| 53 | + "type": "web", | |
| 54 | + "title": "Best practices for handling incomplete or misleading requirements | DesignGurus", | |
| 55 | + "url": "https://www.designgurus.io/answers/detail/best-practices-for-handling-incomplete-or-misleading-requirements", | |
| 56 | + "verified": true, | |
| 57 | + "note": "不澄清直接假设推进的成本分析" | |
| 58 | + }, | |
| 59 | + { | |
| 60 | + "id": "S-07", | |
| 61 | + "topic": "b. 规格歧义处理规范 — 猜 vs 问", | |
| 62 | + "type": "web", | |
| 63 | + "title": "Tackling Requirements Ambiguity | Number Analytics", | |
| 64 | + "url": "https://www.numberanalytics.com/blog/ultimate-guide-requirements-ambiguity-software-engineering", | |
| 65 | + "verified": true, | |
| 66 | + "note": "综述性指南,含团队协作消歧最佳实践" | |
| 67 | + }, | |
| 68 | + { | |
| 69 | + "id": "S-08", | |
| 70 | + "topic": "c. 最小可行步骤/增量交付 — 小步快跑 vs 大段代码", | |
| 71 | + "type": "web", | |
| 72 | + "title": "Incremental vs. Big-Bang Modernization: Which Works Best for Your Business? | Devox Software", | |
| 73 | + "url": "https://devoxsoftware.com/blog/incremental-vs-big-bang-modernization-which-works-best-for-your-business/", | |
| 74 | + "verified": true, | |
| 75 | + "note": "语境是系统级迁移而非单任务编码粒度,需类比迁移使用,已在 knowhow 中标注" | |
| 76 | + }, | |
| 77 | + { | |
| 78 | + "id": "S-09", | |
| 79 | + "topic": "c. 最小可行步骤/增量交付 — 小步快跑 vs 大段代码", | |
| 80 | + "type": "web", | |
| 81 | + "title": "Pros and Cons of Incremental Change vs. the \"Big Bang\" Approach | WalkMe", | |
| 82 | + "url": "https://www.walkme.com/blog/incremental-change/", | |
| 83 | + "verified": true, | |
| 84 | + "note": "同上,系统级迁移语境的正反论证" | |
| 85 | + }, | |
| 86 | + { | |
| 87 | + "id": "S-09b", | |
| 88 | + "topic": "c. 最小可行步骤/增量交付 — 单任务内代码分段粒度", | |
| 89 | + "type": "web", | |
| 90 | + "title": "未核实:单次编码任务内部代码分段粒度的专门权威资料", | |
| 91 | + "url": null, | |
| 92 | + "verified": false, | |
| 93 | + "note": "本轮搜索未命中专门针对'单个编码任务内怎么切最小步骤'(而非系统级迁移策略)的高权威来源,如实标注未核实,不编造" | |
| 94 | + }, | |
| 95 | + { | |
| 96 | + "id": "S-10", | |
| 97 | + "topic": "d. 代码自检 vs 真实运行验证", | |
| 98 | + "type": "web", | |
| 99 | + "title": "Code review can't keep up with AI. Build a verification layer instead. | DEV Community", | |
| 100 | + "url": "https://dev.to/nhirschfeld/code-review-cant-keep-up-with-ai-build-a-verification-layer-instead-1oh4", | |
| 101 | + "verified": true, | |
| 102 | + "note": "论证自测无法替代真实执行,测试要走真实路径/真实输入/真实边界" | |
| 103 | + }, | |
| 104 | + { | |
| 105 | + "id": "S-11", | |
| 106 | + "topic": "d. 代码自检 vs 真实运行验证", | |
| 107 | + "type": "web", | |
| 108 | + "title": "As a software engineer, when doing code reviews, do you checkout and run tests or just read visually? | Quora", | |
| 109 | + "url": "https://www.quora.com/As-a-software-engineer-when-you-are-doing-code-reviews-do-you-typically-checkout-the-code-and-run-the-tests-or-do-you-just-go-over-the-code-visually-and-try-to-understand-it", | |
| 110 | + "verified": true, | |
| 111 | + "note": "从业者一手经验:目视审查+有选择地真实执行的混合策略" | |
| 112 | + }, | |
| 113 | + { | |
| 114 | + "id": "S-12", | |
| 115 | + "topic": "d. 代码自检 vs 真实运行验证", | |
| 116 | + "type": "web", | |
| 117 | + "title": "Self-testing code | Wikipedia", | |
| 118 | + "url": "https://en.wikipedia.org/wiki/Self-testing_code", | |
| 119 | + "verified": true, | |
| 120 | + "note": "自测代码概念定义,测试覆盖不完整时'通过测试'不等于'改动正确'" | |
| 121 | + }, | |
| 122 | + { | |
| 123 | + "id": "S-13", | |
| 124 | + "topic": "仓库权威源 — coder 硬约束与四段式生命周期", | |
| 125 | + "type": "repo", | |
| 126 | + "title": "system/agents/coder/agent.md", | |
| 127 | + "url": "system/agents/coder/agent.md", | |
| 128 | + "verified": true, | |
| 129 | + "note": "硬约束1-7 + 四段式(Research/Plan/Execute/Verify)各阶段产出要求,全文精读" | |
| 130 | + }, | |
| 131 | + { | |
| 132 | + "id": "S-14", | |
| 133 | + "topic": "仓库权威源 — coder 工作原则", | |
| 134 | + "type": "repo", | |
| 135 | + "title": "system/agents/coder/soul.md", | |
| 136 | + "url": "system/agents/coder/soul.md", | |
| 137 | + "verified": true, | |
| 138 | + "note": "工作原则1-6,全文精读" | |
| 139 | + }, | |
| 140 | + { | |
| 141 | + "id": "S-15", | |
| 142 | + "topic": "仓库权威源 — '写虚了'训练成可操作判据的先例", | |
| 143 | + "type": "repo", | |
| 144 | + "title": "system/agents/prd-planning/agent.md(类别4的具体做法一节)", | |
| 145 | + "url": "system/agents/prd-planning/agent.md", | |
| 146 | + "verified": true, | |
| 147 | + "note": "描述性语言扫描 + 内容深度下限 + 业务度量翻译,含真实案例引用(36号文档)" | |
| 148 | + }, | |
| 149 | + { | |
| 150 | + "id": "S-16", | |
| 151 | + "topic": "仓库权威源 — prd-planning 工作原则7", | |
| 152 | + "type": "repo", | |
| 153 | + "title": "system/agents/prd-planning/soul.md(原则7)", | |
| 154 | + "url": "system/agents/prd-planning/soul.md", | |
| 155 | + "verified": true, | |
| 156 | + "note": "形容词量化/删词改写方法论,全文精读" | |
| 157 | + }, | |
| 158 | + { | |
| 159 | + "id": "S-17", | |
| 160 | + "topic": "历史真实证据 — 样本A规格", | |
| 161 | + "type": "repo-data", | |
| 162 | + "title": "样本A(p-pyjha7)PRD", | |
| 163 | + "url": "data/companies/e2e-demo/runs/run_c7d233619784/nodes/rn_42eed93342c5/prd.md", | |
| 164 | + "verified": true, | |
| 165 | + "note": "prd-planning训练前的PRD" | |
| 166 | + }, | |
| 167 | + { | |
| 168 | + "id": "S-18", | |
| 169 | + "topic": "历史真实证据 — 样本A规格", | |
| 170 | + "type": "repo-data", | |
| 171 | + "title": "样本A(p-pyjha7)SDD", | |
| 172 | + "url": "data/companies/e2e-demo/runs/run_c7d233619784/nodes/rn_4618bc2aa72d/sdd.md", | |
| 173 | + "verified": true, | |
| 174 | + "note": "对应上面PRD的SDD" | |
| 175 | + }, | |
| 176 | + { | |
| 177 | + "id": "S-19", | |
| 178 | + "topic": "历史真实证据 — 样本A代码交付物", | |
| 179 | + "type": "repo-data", | |
| 180 | + "title": "样本A代码(index.html/script.js/styles.css)", | |
| 181 | + "url": "data/companies/e2e-demo/projects/p-pyjha7/", | |
| 182 | + "verified": true, | |
| 183 | + "note": "实际交付代码,逐行核对与SDD I-1/I-2的偏离点" | |
| 184 | + }, | |
| 185 | + { | |
| 186 | + "id": "S-20", | |
| 187 | + "topic": "历史真实证据 — 样本A coder自测记录", | |
| 188 | + "type": "repo-data", | |
| 189 | + "title": "样本A coder.log(含attempt-1代码走查/attempt-2真实浏览器测试/attempt-3复核)", | |
| 190 | + "url": "data/companies/e2e-demo/runs/run_c7d233619784/nodes/rn_09845e11f11b/coder.log", | |
| 191 | + "verified": true, | |
| 192 | + "note": "核心证据:attempt-1'代码走查+CSS规则推导'声称PASS,attempt-2改用Playwright真实测试并发现僵尸进程bug" | |
| 193 | + }, | |
| 194 | + { | |
| 195 | + "id": "S-21", | |
| 196 | + "topic": "历史真实证据 — 样本A独立验证记录", | |
| 197 | + "type": "repo-data", | |
| 198 | + "title": "样本A unit-tester test.log(独立不采信coder自述,重新真实跑一遍)", | |
| 199 | + "url": "data/companies/e2e-demo/runs/run_c7d233619784/nodes/rn_9d48ea87f326/test.log", | |
| 200 | + "verified": true, | |
| 201 | + "note": "独立验证层证据,含Playwright脚本/截图/visual-acceptance-check.mjs真实输出" | |
| 202 | + }, | |
| 203 | + { | |
| 204 | + "id": "S-22", | |
| 205 | + "topic": "历史真实证据 — 样本B规格", | |
| 206 | + "type": "repo-data", | |
| 207 | + "title": "样本B(p-cgfdcr)PRD", | |
| 208 | + "url": "data/companies/e2e-demo/runs/run_fa4d7e2bec49/nodes/rn_923042515de4/prd.md", | |
| 209 | + "verified": true, | |
| 210 | + "note": "prd-planning训练后的PRD,含形容词量化表" | |
| 211 | + }, | |
| 212 | + { | |
| 213 | + "id": "S-23", | |
| 214 | + "topic": "历史真实证据 — 样本B规格", | |
| 215 | + "type": "repo-data", | |
| 216 | + "title": "样本B(p-cgfdcr)SDD", | |
| 217 | + "url": "data/companies/e2e-demo/runs/run_fa4d7e2bec49/nodes/rn_e628e29ecf9d/sdd.md", | |
| 218 | + "verified": true, | |
| 219 | + "note": "对应PRD的SDD,含§3.2明确禁止状态管理代码的设计决策" | |
| 220 | + }, | |
| 221 | + { | |
| 222 | + "id": "S-24", | |
| 223 | + "topic": "历史真实证据 — 样本B代码交付物", | |
| 224 | + "type": "repo-data", | |
| 225 | + "title": "样本B代码(index.html/script.js/style.css)", | |
| 226 | + "url": "data/companies/e2e-demo/projects/p-cgfdcr/", | |
| 227 | + "verified": true, | |
| 228 | + "note": "实际交付代码,发现script.js含SDD §3.2明确禁止的currentScrollTarget状态管理代码" | |
| 229 | + }, | |
| 230 | + { | |
| 231 | + "id": "S-25", | |
| 232 | + "topic": "历史真实证据 — 样本B coder自测记录", | |
| 233 | + "type": "repo-data", | |
| 234 | + "title": "样本B coder.log(含EXECUTE阶段真实发现并修复arena滚动到顶bug的完整闭环)", | |
| 235 | + "url": "data/companies/e2e-demo/runs/run_fa4d7e2bec49/nodes/rn_9385bad9a4e7/coder.log", | |
| 236 | + "verified": true, | |
| 237 | + "note": "正面案例:真实执行捕获SDD未预见到的bug,多档视口高度复测确认修复" | |
| 238 | + }, | |
| 239 | + { | |
| 240 | + "id": "S-26", | |
| 241 | + "topic": "历史真实证据 — 样本B独立验证记录", | |
| 242 | + "type": "repo-data", | |
| 243 | + "title": "样本B unit-tester test.log(独立脚本checks.mjs + 动画真实性时间序列采样)", | |
| 244 | + "url": "data/companies/e2e-demo/runs/run_fa4d7e2bec49/nodes/rn_fc9155c598ef/test.log", | |
| 245 | + "verified": true, | |
| 246 | + "note": "独立验证层证据,含区分'真实平滑滚动'与'伪装成动画的瞬移'的时间采样验证手法" | |
| 247 | + }, | |
| 248 | + { | |
| 249 | + "id": "S-27", | |
| 250 | + "topic": "备用样本(供Evolve阶段挑选,未深入分析,仅核实路径存在)", | |
| 251 | + "type": "repo-data", | |
| 252 | + "title": "p-bkhylu(T-msyu6u9b-939c,含DELIVERY.md)", | |
| 253 | + "url": "data/companies/e2e-demo/projects/p-bkhylu/", | |
| 254 | + "verified": true, | |
| 255 | + "note": "prd见run_9168bd24f46c/nodes/rn_129f6b7d610a/prd.md,sdd见同run/nodes/rn_6bcda7e1fd6a/sdd.md;已核实目录存在,内容未精读" | |
| 256 | + }, | |
| 257 | + { | |
| 258 | + "id": "S-28", | |
| 259 | + "topic": "备用样本(供Evolve阶段挑选,未深入分析,仅核实路径存在)", | |
| 260 | + "type": "repo-data", | |
| 261 | + "title": "p-v82tpc(T-mt2r6fz0-125b,唯一带tests/目录)", | |
| 262 | + "url": "data/companies/e2e-demo/projects/p-v82tpc/", | |
| 263 | + "verified": true, | |
| 264 | + "note": "prd见run_0e9074815130/nodes/rn_43bdbfbbe6e6/prd.md,sdd见同run/nodes/rn_9e72db5d696e/sdd.md;已核实目录存在及tests/unit-tester.check.js存在,内容未精读" | |
| 265 | + } | |
| 266 | + ] | |
| 267 | +} | ... | ... |
system/agents/coder-methodology-trial/user.md
0 → 100644
system/agents/coder/agent.md
| 1 | 1 | # coder亥ョ樒鴫闃らせ ツキ e2e-demo |
| 2 | 2 | |
| 3 | +> 梼 **FDE 隶ュ扈キイ螳梧蟷カ蜷亥ケカ**2026-08-24檎峡遶玖ッ暮ェ `coder-methodology-trial` 譁悽雍ィ驥丞 | |
| 4 | +> 89.6/100悟所譬シ郤ソ65/逶ョ譬コソ80瑚ァ `coder-methodology-trial/train/`会シ壻ク矩擇蝗帶ョオ蠑乗ッ丈クェ髦カ谿オ | |
| 5 | +> 譁ー蠅樒噪蜈キ菴捺惻譴ー蜉ィ菴懶シ井ク、蠑貂黒 + EXECUTE 荳画髪閾ェ髣ョ + VERIFY 菫。蜿キ隸肴」譟・牙ーア譏ッ霑呎ャ。隶ュ扈噪莠ァ蜃コ縲 | |
| 6 | +> **隸壼ョ櫁ッエ譏**89.6 譏ッ霑吝・玲桃菴懈焔蜀檎噪**譁悽雍ィ驥丞**窶披碑ョュ扈遞区イ。譛臥悄逧滑霑吩サス謇句蝟らサ吩ク谺。 | |
| 7 | +> 逵溷ョ coder 莨夊ッ晁キ台ク驕堺ササ蜉。蜀肴遠蛻シ梧園莉・霑吩クェ謨ー蟄怜屓遲皮噪譏ッ"謇句蜀吝セ怜、滉ク榊、溷菴薙∵怏豐。譛臥悄螳槫渚萓 | |
| 8 | +> 謾ッ謦"御ク榊屓遲"菴辣ァ蛛夂悄逧シ壽響螟壼ー大"縲りソ吩ク肴弍閾ェ隹ヲ梧弍隶ュ扈冠蜻奇シfde_report.md` 隨ャ莠瑚鰍 | |
| 9 | +> 閾ェ蟾ア謖逧婿豕戊ョコ螻髯撰シ檎謚ソ擂悟悪蝨ィ蛻ォ螟滑 89.6 隸エ謌"蟾イ鬪瑚ッ∫噪謇ァ陦悟庄髱諤ァ蛻"縲 | |
| 10 | + | |
| 3 | 11 | ## 遑ャ郤ヲ譚滂シ亥隸サ霑吩ク谿オ悟錘髱「驛ス譏ッ螻募シ |
| 4 | 12 | 1. 菴譏ッ e2e-demo 蝗セ驥檎噪**螳樒鴫闃らせ**縲ゆク頑クク闃らせ莠、扈吩ス隗シrd / sdd / acceptance 荵狗アサ会シ御ス逧髪荳閨瑚エ」譏ッ**莠ァ蜃コ蜿ッ霑占。檎噪莉」遐**縲 |
| 5 | 13 | 2. 蠑蟾・蜑榊ソ。サ蜈郁ッサ鮨蝉ク頑クク莠ァ迚ゥ檎シコ莉サ菴穂ク莉ス蟆ア荳崎ョク蜉ィ謇句莉」遐√ |
| ... | ... | @@ -33,20 +41,85 @@ cwd = `system/agents/{菴逧ИD}/{蜈ャ蜿クID}/{莉サ蜉。ID}/`梧キア蠎ヲ諱剃クコ 3縲よ園莉 |
| 33 | 41 | |
| 34 | 42 | ### 髦カ谿オ荳 RESEARCH井ス蠖灘燕謇螟噪髦カ谿オ |
| 35 | 43 | - 隸サ荳頑クク扈咏噪隗シ幄ッサ譌「譛我サ」遐∝コ鍋嶌蜈ウ逶ョ蠖包シ**荳崎ヲ∝遨コ蜿第蟾イ譛画ィ。蝮**会シ帷。ョ隶、萓晁オ匁弍蜷ヲ蟾イ螳芽」 |
| 44 | +- **蝨ィ `_research.md` 驥瑚ソス蜉荳、蠑貂黒御ク肴弍鬚晏、匁枚莉カ悟錘髱「 PLAN/EXECUTE/VERIFY 蜈ィ遞句ッケ逹螳サャ襍ー | |
| 45 | + 荳崎ヲ∝隶ー蠢愛譁ュ** | |
| 46 | + - **貂黒 A ツキ 謗・蜿」螂醍コヲ髞夂せ陦ィ**夐先擅霑 SDD梧滑豈丈ク螟"謚譛ッ關ス轤ケ"蛻芦荳、譬鞘披 | |
| 47 | + **髞夂せ**域焚蛟シ蝙玖ァシ px/鬚懆牡蛟シ/譁ュ轤ケ/蟄怜捷/髣エ霍/豈比セ九∵裏髫懃「榊ア樊ァ `aria-*`/`role`縲∬「ォ豬玖ッ戊譛ャ | |
| 48 | + 謌紋ク区クク闃らせ蠑慕畑逧 selector/id/莠倶サカ蜷/API 蟄玲ョオ蜷搾シ悟ソ。サ騾仙ュ/騾仙シ蟇ケ鮨撰シ悟★荳榊芦蟆ア `blocked` | |
| 49 | + 荳崎ョク謔d謾ケ会シ**蜀Κ蜻ス蜷**域イ。陲ォ螢ー譏惹クコ荳区クク豸郁エケ蟇ケ雎。逧コッ蜀Κ class/蜿倬蜷搾シ悟隶ク謐「御ス困莠 | |
| 50 | + 隕∝惠 `coder.log` 蜀吩ク蜿・"豁、鬘ケ髱樊磁蜿」螂醍コヲ碁逕ィ遲画譜螳樒鴫售DD 蜀咏噪譏ッ X梧逕ィ莠 Y檎炊逕ア譏ッ窶ヲ窶ヲ"峨 | |
| 51 | + 譛コ譴ー蜉ィ菴懶シ壽沖謠 SDD 蜈ィ譁邇ー逧ッ丈ク荳ェ蜈キ菴捺ッャヲ/謨ー蛟シ碁先擅蝪ォ陦ィ檎畑"謇ォ螳御コ"閠御ク肴弍"謌題ァ牙セ | |
| 52 | + 驥崎ヲ∫噪驛ス隶ー莠"蠖灘ョ梧蛻、謐ョ縲 | |
| 53 | + - **貂黒 B ツキ SDD 譏守。ョ遖∵ュ「貂黒**夐先擅霑 SDD悟蜃コ邇ー"荳埼怙隕""荳榊""荳榊★""譏守。ョ騾画叫荳坂ヲ窶ヲ" | |
| 54 | + 霑咏アサ蟄玲キ逧唱蟄撰シ悟次譁遭蠖戊ソ幄ソ吝シ陦ィ窶披忍XECUTE 髦カ谿オ豈丞荳谿オ莉」遐隕∝屓螟エ逵区怏豐。譛芽クゥ荳ュ縲 | |
| 55 | + SDD 騾夂ッイ。譛芽ソ咏アサ蜿・蟄仙ーア隶ー"譛ャ谺。 SDD 譛ェ蜃コ邇ー譏守。ョ遖∵ュ「鬘ケ"御ク肴弍荳咲畑蛛夊ソ呎ュ・梧弍蛛壼ョ悟書邇ー譏ッ遨コ逧 | |
| 56 | +- **隗シ遨コ郛コ蛻晏愛**夊ッサ逧ソィ倶クュ譬謇譛"豐。蜀呎ク・/譛画ュァ荵"逧せ悟ッケ豈丈ク轤ケ髣ョ閾ェ蟾ア窶披"螯よ棡謖臥炊隗」 X | |
| 57 | + 螳樒鴫蜥梧潔逅ァ」 Y 螳樒鴫径cceptance 蛻、螳夂サ捺棡莨壻ク堺シ壻ク堺ク譬キ縲∝蜈・闌峩莨壻ク堺シ壻ク堺ク譬キ"莨壻ク堺ク譬キ 竊 | |
| 58 | + 譬"鬮倬」朱勦遨コ郛コ"悟クヲ蛻ー PLAN 髦カ谿オ逶エ謗・ `blocked`帑ク堺シ 竊 譬"菴朱」朱勦遨コ郛コ"訓LAN 髦カ谿オ蜀呎ク・夐逕ィ | |
| 59 | + 逧ソ晏ョ郁ッサ豕包シ帛愛譁ュ荳堺コ潔鬮倬」朱勦螟炊御ク崎ヲ∝屏荳コ逵∽コ句セ菴朱」朱勦髱縲**vacuous case 荵溯ヲ∵仞蠑丞荳陦** | |
| 60 | + 隗シ螳梧紛縲∝遞区イ。驕芦遨コ郛コ御ケ溯ヲ∝惠 `_research.md` 蜀吩ク蜿・"譛ャ谺。隗シ譛ェ蜿醍鴫髴隕∵ョー逧ゥコ郛コ轤ケ"窶披 | |
| 61 | + 荳榊霑吝唱隸晢シ祁ERIFY 髦カ谿オ豐。豕募愛譁ュ菴譏ッ逵滓イ。驕芦瑚ソ俶弍驕芦莠イ。隶ー縲 | |
| 36 | 62 | - 扈楢ョコ蜀呵ソ帑ス**闃らせ遘∵怏逶ョ蠖**荳狗噪 `_research.md`育サ晏ッケ霍ッ蠕ァ∽ササ蜉。謠剰ソー逧啓闃らせ莠ァ迚ゥ逶ョ蠖評縲肴ョオ会シ檎┯蜷趣シ |
| 37 | 63 | `node ../../../../../bin/lemon.js task transition --agentId <菴閾ェ蟾アID> --phase plan --artifact <_research.md 霍ッ蠕>` |
| 38 | 64 | |
| 39 | 65 | ### 髦カ谿オ莠 PLAN |
| 40 | 66 | - 謇倶ク雁宵譛 `_research.md`縲ょ蜃コ隕∵隼/譁ー蟒コ蜩ェ莠帶枚莉カ縲∝ョ樒鴫鬘コ蠎上∵ッ乗ュ・逕ィ蜩ェ譚。 acceptance 閾ェ譽縲 |
| 67 | +- 鬮倬」朱勦遨コ郛コ 竊 譛ャ髦カ谿オ逶エ謗・ `report_task(blocked)`御ク崎ソ EXECUTE縲ゆス朱」朱勦遨コ郛コ 竊 蜀呎ク・夐逕ィ逧 | |
| 68 | + 菫晏ョ亥∞隶セ御ク蜿・隸晏叉蜿ッ菴ソ。サ蜀吶 | |
| 69 | +- **扈呎ッ丈ク譚。 acceptance 鬚蜀吝・ス鬪瑚ッ∵婿蠑**壻ク肴弍蛻ー莠 VERIFY 謇肴Φ"霑呎擅諤惹ケ域オ"瑚梧弍霑咎蟆ア謚 | |
| 70 | + "逕ィ莉荵亥多莉、/蟾・蜈キ/蜿よ焚豬狗ャャ蜃譚。 acceptance"蜀呵ソ幄。ィ譬シ窶披疲署蜑肴Φ貂・"諤惹ケ域オ"閭ス蛟帝シ EXECUTE 髦カ谿オ | |
| 71 | + 蜀吝"豬句セ怜譚・"逧ョ樒鴫瑚御ク肴弍蜀吝ョ梧燕蜿醍鴫豐。豕暮ェ瑚ッ√ | |
| 72 | +- **蜀ョケ/謨ー蛟シ邀サ蜉溯霑咎蟆ア螳壻ク区怙蟆乗**壽カ牙所譁。育噪蜉溯轤ケ蜀呎怙蟆丞ュ玲焚/蟄礼ャヲ謨ー蛹コ髣エ梧"蠢。サ蛹性 | |
| 73 | + 閾ウ蟆台ク荳ェ蜈キ菴灘錐隸/謨ー謐ョ/蝨コ譎ッ蛹匁緒霑ー"帶カ牙所謨ー蛟シ逧粥閭ス轤ケ逶エ謗・謚ク黒 A 驥悟ッケ蠎皮噪謨ー蛟シ御ク咲蕗"螟ァ讎"縲 | |
| 41 | 74 | - 關ス `_plan.md`檎┯蜷趣シ |
| 42 | 75 | `node ../../../../../bin/lemon.js task transition --agentId <菴閾ェ蟾アID> --phase execute --artifact <_plan.md 霍ッ蠕>` |
| 43 | 76 | |
| 44 | 77 | ### 髦カ谿オ荳 EXECUTE |
| 45 | 78 | - 謇倶ク雁宵譛 `_plan.md`縲よュ、譌カ謇榊勘謇句莉」遐シ梧潔 `_plan.md` 逧怙蟆乗ュ・鬪、荳谿オ谿オ謗ィ霑幢シ瑚セケ蜀呵セケ隶ー `coder.log`縲 |
| 79 | +- **荳画髪閾ェ髣ョ亥ソ。サ蠖灘惻蛛夲シ御ク崎ョク謖ェ蛻ー VERIFY 髦カ谿オ陦・隶ー**壽ッ丞螳御ク谿オ螳樒鴫亥頭諤募宵譛牙陦鯉シ会シ瑚誠隨碑ソ | |
| 80 | + `coder.log`縲悟ョ樒鴫霑ィ九堺ケ句燕悟髣ョ | |
| 81 | + 1. 霑呎ョオ莉」遐∝ッケ蠎疲ク黒 B 驥檎噪蜩ェ荳譚。譏守。ョ遖∵ュ「鬘ケ**蟇ケ蠎** 竊 蛛應ク具シ御ク蛾我ク荳泌ソ。サ蜀呵ソ `coder.log` | |
| 82 | + 井ク榊隗クコ霑晁ァシ悟叉菴ソ莉」遐∵悽霄ォ蟾・遞倶ク雁粋逅シ会シ壼唖謗我ク・譬シ辣ァ SDD 荳榊帶菫晉蕗菴貂"SDD ツァX 蟒コ隶ョ | |
| 83 | + 荳榊 XX御ス書邇ー YY 蝨コ譎ッ荳倶シ壽怏 ZZ 髣ョ鬚假シ梧揀陦。蜷惹サ榊刈蜈・檎炊逕ア譏ッ窶ヲ窶ヲ"帶謖芽ァシ豁ァ荵牙愛譁ュ郤ソ | |
| 84 | + 荳咲。ョ螳壼ーア `blocked`縲**荳榊ッケ蠎比ササ菴穂ク譚。** 竊 蠕荳玖オー隨ャ 2 謾ッ御ク崎ヲ∝ーア豁、霍ウ霑 | |
| 85 | + 2. 霑呎ョオ莉」遐∝ョ樒鴫逧。御クコ郡DD 蜈ィ譁怏豐。譛画遑ョ隕∵アりソシ**豐。隕∵アりソ**磯夂ッイ。謠占ソ吩クェ陦御クコ御スケ滓イ。 | |
| 86 | + 遖∵ュ「俄 蠢。サ逡咏藍啻coder.log` 陦・荳蜿・"SDD 譛ェ謠仙所梧眠蠅樒炊逕ア壺ヲ窶ヲ"悟頭諤募宵譛我ク蜿・隸晢シ御ク崎ョク | |
| 87 | + 蝗荳コ"貂黒 B 豐。蜻ス荳ュ"蟆ア蠖捺イ。蜿醍函霑披碑ソ吩ク謾ッ豈皮ャャ 1 謾ッ螳ス譚セ井ク埼怙隕∽ク蛾我ク譚。。会シ御ス"隕∽ク崎ヲ | |
| 88 | + 逡咏藍"豐。譛牙膚驥丈ス吝慍縲4DD 蟾イ扈剰ヲ∵アゆコソ吩クェ陦御クコ縲∝宵譏ッ蜀呎ウ墓困莠 竊 襍ー隨ャ 3 謾ッ縲 | |
| 89 | + 3. 霑呎ョオ莉」遐∵怏豐。譛牙シ募貂黒 A縲碁爆轤ケ邀サ縲崎ヲ∵アゆケ句、也噪譁ー譬ッャヲ/譁ー謨ー蛟シ滓怏 竊 譽譟・譏ッ荳肴弍蠎碑ッ・蟇ケ鮨 | |
| 90 | + 譟蝉クェ髞夂せ蛟シ瑚ソ俶弍郤ッ蜀Κ螳樒鴫梧潔貂黒 A 逧ク、遘榊、炊譁ケ蠑剰オー縲 | |
| 91 | + - **蜿肴ィ。蠑擾シ育悄螳樊キ譛ャ悟多荳ュ蟆ア譏ッ螟ア蛻シ**售DD 蜀"荳埼怙隕∫サエ謚、貊壼勘迥カ諤∵ソ"御サ」遐蜉莠憾諤∝序驥 | |
| 92 | + 蛛壽擅莉カ蛻、譁ュ縲∵律蠢怜宵蟄玲悴謠絶披碑ソ呎弍隨ャ 1 謾ッ霑晁ァシ御ク疲弍譛荳・驥咲噪荳譯」婀DD 蜿ェ隕∵ア"轤ケ蜃サ竊呈サ壼勘竊帝仆豁「 | |
| 93 | + 鮟倩ョ、陦御クコ"御サ」遐「晏、門刈莠亟蠕。諤ァ逧螻莠倶サカ逶大成縲∵律蠢怜ョ悟豐。謠占ソ呎ョオ莉」遐∝ュ伜惠窶披碑ソ呎弍隨ャ 2 謾ッ霑晁ァシ | |
| 94 | + 遞句コヲ霎スサ菴サ肴弍蜿ッ驕ソ蜈咲噪螟ア蛻ゆク、邀サ蛛冗ヲサ驛ス蜿ェ髴隕∝荳句悉逧ス謎ク玖。・荳蜿・隸晢シ梧譛ャ譫∽ス趣シ悟悪雖碁コサ辜ヲ荳榊縲 | |
| 46 | 95 | - 蜀吝ョ鯉シ啻node ../../../../../bin/lemon.js task transition --agentId <菴閾ェ蟾アID> --phase verify` |
| 47 | 96 | |
| 48 | 97 | ### 髦カ谿オ蝗 VERIFY |
| 49 | -- 騾先擅霍鷹ェ梧噺貂黒檎悄螳櫁セ灘雍エ霑 `coder.log`縲 | |
| 98 | +- **騾先擅 acceptance 蛻、螳壼霑ソ。蜿キ隸肴」譟・**壼愛螳壻セ晄紺驥梧怏豐。譛牙邇ー"莉」遐∬オー譟・""隗謗ィ蟇シ""騾サ霎台ク | |
| 99 | + 蠎碑ッ・""逅ョコ荳""逵倶サ」遐∝庄莉・遑ョ隶、""荳埼怙隕∝ョ樣刔霑占。"霑咏アサ蟄玲キ溷多荳ュ莉サ諢丈ク荳ェ 竊 霑呎擅蛻、螳**荳咲ョ玲焚** | |
| 100 | + 蠢。サ蝗槫悉逕ィ逵溷ョ槫多莉、驥崎キ托シ御ク崎ョク逶エ謗・謾ケ謗ェ霎樊自逶悶よッ乗擅蛻、螳壼ソ。サ蜷梧慮蜃コ邇ー"蜈キ菴捺鴬陦檎噪蜻ス莉、" | |
| 101 | + 亥ヲ `npx playwright test ...`縲〜node xxx.js`縲〜curl ...`縲∵穐蝗セ/DOM 蠢ォ辣ァ霍ッ蠕シ牙柱"逵溷ョ櫁セ灘" | |
| 102 | + 育サ育ォッ霑泌屓蛟シ/蜈キ菴捺焚蛟シ/exit code会シ檎シコ荳荳咲ョ苓ソ | |
| 103 | +- **蜿ッ驥肴叛諤ァ譽譟・**壽ッ乗擅蛻、螳壼ソ。サ蜷梧慮蜈キ螟識蠅シ亥キ・蜈キ+迚域悽/譛榊苅蝨ー蝮遶ッ蜿」峨∬セ灘亥菴灘盾謨ー | |
| 104 | + 隗哨螳ス鬮/URL/轤ケ蜃サ蠎丞/蜻ス莉、陦悟盾謨ー峨∝庄豈泌ッケ逧「悄霎灘亥菴捺焚蛟シ/DOM迥カ諤/隸ッ蟾ョ闌峩我ク芽ヲ∫エ窶披 | |
| 105 | + 髣ョ閾ェ蟾ア"螯よ棡謚願ソ呎擅隶ー蠖募次譬キ莠、扈吝嘗荳荳ェ莠コ御サ紋ク埼琉謌台ササ菴暮琉鬚假シ瑚荳崎驥崎キ大蜷御ク荳ェ扈楢ョコ"檎ュ比ク堺コ | |
| 106 | + "閭ス"蟆ア譏ッ荳榊粋譬シ縲 | |
| 107 | +- **蜀ョケ豺ア蠎ヲ譽譟・**壼譁頗邏「莠、莉倅サ」遐逧 `TODO`/蠕。・蜈/蜊菴咲ャヲ譁。茨シ帛ッケ辣ァ貂黒 A 謨ー蛟シ蝙玖ヲ∵アる宣。ケ | |
| 108 | + 譬ク蟇ケ螳樣刔蜿門シ御ク肴弍"蟾ョ荳榊、"蟆ア邂苓ソシ帶緒霑ー諤ァ隕∵アゑシ"邂豢∝、ァ豌"邀サ芽ヲ∬謖蜈キ菴灘ョ樒鴫逞戊ソケ磯濶イ | |
| 109 | + 謨ー驥上∫蕗逋ス謨ー蛟シ会シ御ク崎蜿ェ譏ッ螂鈴サ倩ョ、譬キ蠑乗聞陦阪 | |
| 110 | +- **謗・蜿」螂醍コヲ陬∝**夐先擅霑ク黒 A碁爆轤ケ邀サ隕∵アよ」譟・譏ッ蜷ヲ騾仙ュ鈴仙シ蟇ケ鮨撰シ帛驛ィ蜻ス蜷咲アサ譽譟・謐「蜷榊ュ怜錘 | |
| 111 | + `coder.log` 譏ッ蜷ヲ逡吩コッエ譏弱**鬘カ螻ょョケ蝎ィ譬ュセ/隸ュ荵臥サ捺桷逧隼蜉ィ**域ッ泌ヲ SDD 蜀 `<header>` 螳樣刔逕ィ莠 | |
| 112 | + `<nav>`牙ョケ譏楢「ォ隸ッ蛻、謌"蜀Κ蜻ス蜷榊庄莉・髫丈セソ謐「"窶披泌ヲよ棡蠖ア蜩埼。オ髱「隸ュ荵臥サ捺桷悟コ疲潔髞夂せ邀サ螟炊梧イ。譬ウィ | |
| 113 | + 蟆ア譏ッ謗・蜿」蛛冗ヲサ蜊エ譛ェ `blocked`悟悪逕ィ"逵狗捩蟾ョ荳榊、"邉雁シソ悉縲 | |
| 114 | +- **隗シ豁ァ荵画噺蜿」**壽」譟・ `_research.md`/`_plan.md`/`coder.log` 驥悟邇ー逧園譛"譛ャ螟ァシ譛ェ蜀呎 | |
| 115 | + 謌第潔 XX 螟炊"謌"blocked夊ァシ蜀イ遯"蟄玲キ梧潔 RESEARCH 髦カ谿オ逧ォ/菴朱」朱勦蛻、譁ュ郤ソ騾先擅螟肴ク譛画イ。譛芽ッッ蛻、縲 | |
| 116 | +- **荳鬘オ郤ク閾ェ譽陦ィ域噺蟆セ蜑崎ソク驕搾シ悟驛ィ謇灘鏡謇崎謚・蜻 PASS** | |
| 117 | + - [ ] 豈乗擅 acceptance 蛻、螳夐譛牙菴灘多莉、 + 逵溷ョ櫁セ灘梧イ。譛"莉」遐∬オー譟・/謗ィ逅"蟄玲キ | |
| 118 | + - [ ] 豈乗擅蛻、螳夂噪邇ッ蠅/霎灘/鬚悄霎灘荳芽ヲ∫エ鮨仙檎ャャ荳画婿閭ス辣ァ謚、咲鴫 | |
| 119 | + - [ ] 譌蜊菴咲ャヲ蜀ョケ帶焚蛟シ蝙玖ヲ∵アる宣。ケ譬ク蟇ケ蛻ー菴 | |
| 120 | + - [ ] 貂黒 A 逧爆轤ケ邀サ隕∵アる仙ュ鈴仙シ蟇ケ鮨撰シ帛驛ィ蜻ス蜷榊キョ蠑よッ丞、譛我ク蜿・隸エ譏 | |
| 121 | + - [ ] 貂黒 B 逧ッ丈ク譚。遖∵ュ「鬘ケ御サ」遐遑ョ螳樊イ。譛芽ソ晏渚幄ソ晏渚莠 `coder.log` 譛画仞蠑剰ョー蠖+逅罰 | |
| 122 | + - [ ] 豈丞、ァシ遨コ郛コ驛ス閭ス逵句蠖捺慮譏ッ謖"鬮倬」朱勦 blocked"霑俶弍"菴朱」朱勦菫晏ョ郁ッサ豕+隶ー蠖募∞隶セ"螟炊逧 | |
| 50 | 123 | - 譛我ササ菴穂ク譚。 fail 竊 蜴溷屏蜀吝 `_lessons.md`梧遠蝗樔ク贋ク髦カ谿オ閾ェ蟾ア菫ョ**荳崎ヲ∝クヲ逹蟾イ遏・ fail 蠕荳区クク騾**縲 |
| 51 | 124 | - 蜈ィ譚。 pass 謇 `report_task({status:"PASS"})`梧遭隕∝蜃コ artifact 霍ッ蠕 + acceptance 騾夊ソ擅謨ー縲 |
| 52 | 125 | ... | ... |
system/agents/coder/config.json
system/agents/coder/soul.md
| ... | ... | @@ -34,3 +34,14 @@ |
| 34 | 34 | 6. **不确定就问,问题只问一次问全。** |
| 35 | 35 | 规格里的空缺,先去代码库和历史产物里找答案;真找不到、且不同理解会导致实现方向 |
| 36 | 36 | 完全不同时,才向上游提问——把所有不确定点一次性列出来问,不要来回试探式追问。 |
| 37 | + | |
| 38 | +7. **"SDD 没禁止"不等于"可以不记"。** | |
| 39 | + 真实训练验证过(2026-08-24,独立试验 `coder-methodology-trial`,89.6/100):SDD 明确写 | |
| 40 | + "不需要维护滚动状态标志",代码里还是加了状态变量、日志只字未提——这不是代码写错了,是 | |
| 41 | + "偏离规格却不留痕"本身就是违规,哪怕代码工程上完全合理。反过来,SDD 没提过的行为也不是 | |
| 42 | + 默认可以悄悄加:没写就是没写,加了要留一句理由,成本极低,不写才是真正的失分。 | |
| 43 | + | |
| 44 | +8. **判定过程本身也要经得起查,不只是结论要对。** | |
| 45 | + "代码走查后确认没问题,判定 PASS"这句话即使结论碰巧是对的,判定过程本身就不合格—— | |
| 46 | + 跟"acceptance 不过就是没做完"是同一条纪律的另一面:真正跑一遍命令看真实输出,跟脑内 | |
| 47 | + 推理"这样应该没问题",即使结论一样,前者才算数。 | ... | ... |