workgraph-planning-methodology-trial · Hunt 调研笔记 v1
任务:验证「按任务复杂度裁剪 work graph 形状」这类元规划判据能否被训出来。 调研范围:块A 外部方法论 / 块B 仓库内部权威源 / 块C 历史真实案例。每条结论标来源。
块A · 外部方法论(Web Search)
A1. Cynefin 框架(复杂度分类需要不同应对方式)
来源:Cynefin framework - Wikipedia、 The Cynefin Framework | Untools、 ModelThinkers - Cynefin Framework
- 提出者 Dave Snowden(1999),"Cynefin" 是威尔士语,意为「栖息地/熟悉之处」。
- 五个域,按因果关系的可辨识程度划分:
- Clear/Simple/Obvious:因果关系直接、人人可见,"sense-categorize-respond",有标准最佳实践(best practice)。
- Complicated:因果关系存在但需要专家分析才能看清,"sense-analyse-respond",靠"good practice"(多个可行方案里选一个)。
- Complex:因果关系只能事后回溯地理解、不会重复出现,"probe-sense-respond",需要并行试验去找出模式(emergent practice)。
- Chaotic:因果关系不可辨识,必须先"act"稳定局面,再回头"sense-respond"。
- Disorder:不知道自己处在哪个域,第一步是把问题拆开、把各部分分别归类。
- 对本任务的映射:这正是"不能一套流程套所有任务"的理论根据——Simple/Complicated 域适合走 已验证的标准流程(对应骨架"照抄不裁剪"),Complex/Chaotic 域需要探测式、增量式推进(对应"裁剪+边观察边调整")。 Cynefin 本身不提供"如何把任务复杂度映射到具体流程步骤数"的量化方法,只提供定性分类, 这是它与 T-shirt sizing / INVEST 的互补关系(分类之后还需要一把可比较的尺子)。
A2. 敏捷估算:T-shirt sizing / Story Point(复杂度信号转可比较量表)
来源:T Shirt Sizing: Agile Estimation & Capacity Planning | Asana、 T-Shirt Sizing in Agile: Complete Guide | teachingagile
- T-shirt sizing 用 XS/S/M/L/XL 这类相对档位代替绝对工时估算,理由是"人类擅长相对比较(这个比那个大/小/差不多),不擅长绝对数字估算"。
- 常见做法是先用 T-shirt 档位做粗筛(适合早期、细节不足、只求方向不求准确工期的场景——路线图/发布规划), 再把档位映射到具体 Story Point 数值区间(如 S=1-2 分、M=3-5 分)用于冲刺内的细粒度规划。
- Story Point 度量的是"相对工作量/复杂度"而非工时,允许团队用比数字更多维的方式思考(时间+难度+不确定性一起打包进一个点数)。
- 对本任务的映射:这套方法论提供了"复杂度信号→档位→流程形状"这条链路的中间一环——
先给任务打一个粗档位(T-shirt size),再让档位决定要不要走全套骨架还是裁剪版。
当前
workgraph-planning/agent.md里没有类似的显式打分/分档步骤,裁剪判断完全依赖 LLM 一次性通读输入后的直觉判断(见块B)。
A3. INVEST 原则与 SPIDR 拆分模式(需求独立性/够小的判据)
来源:SPIDR: Five Simple but Powerful Ways to Split User Stories - Mountain Goat Software、 SPIDR – five simple techniques - itemis
- INVEST:好的用户故事应该是 Independent(独立)、Negotiable(可协商)、Valuable(有价值)、 Estimable(可估算)、Small(够小)、Testable(可测试)。"够小"的判据之一是"6-10 个故事应该能在一个 sprint 内做完"。
- SPIDR(Mike Cohn 提出)是拆分故事的五种具体手法:Spike(先用一次探索性任务摸清未知再拆)、 Path(按用户可达成目标的不同路径拆,如"信用卡支付"vs"Apple Pay支付")、Interface(按平台/设备拆)、 Data(按数据范围简化/限制来分批交付价值)、Rules(按业务规则的子集拆)。
- SPIDR 与 INVEST 是互补关系,不是替代关系:"可以把 SPIDR 当 INVEST 的补充,也可以反过来看"。
- 对本任务的映射:INVEST 的"Independent"和"Small"两条,是判断"这个 work graph 节点是否值得单独拆出一个节点"
的天然判据——对照
workgraph-planning/agent.md约束里"一个节点=一件能一句话说清「做完什么算成功」的事", 与 INVEST 的精神一致,但仓库现有文档里没有引用 INVEST/SPIDR 本身,这条映射是本次调研新做的类比,未见仓库内部提及。
A4. 精益 / YAGNI 视角(过度流程是浪费,但裁剪也可能矫枉过正)
来源:YAGNI (You Aren’t Gonna Need It) | Laws of Software Engineering、 YAGNI is about much more than avoiding premature optimization | Hacker News 讨论
- YAGNI 出自极限编程:不要在真正需要之前添加功能,"做能work的最简单的事"。
- 核心论据是维护成本:每一行代码/每一个流程步骤都要被理解、测试、调试、在需求变化时更新; "研究显示 64% 的功能很少或从未被使用"(引自 codeCake 对 YAGNI 的综述,二手数据未见原始出处,此点标注未核实—— 搜索结果里这条统计数字反复出现在多篇二手博客中,但没有一篇给出可验证的一手研究链接)。
- 关键限制/矫枉过正的风险(Hacker News 讨论 + Laws of Software Engineering 页面共同指出): YAGNI 与架构规划之间存在张力——"你不能靠以后加楼层来盖摩天大楼",YAGNI 适用于功能与抽象层, 不适用于地基级的架构决策;平衡靠持续重构、自动化测试、增量式设计来维持,而不是靠一次性把流程砍到最少。
- 对本任务的映射:这正是本次训练要验证的判据的另一半——裁剪不是单向"越少越好",
该保留的(比如"每个非入口节点必须有兜底边""数据契约必须声明")属于"地基级"约束,
不受任务复杂度高低影响,这与块B里
workgraph-planning/agent.md的"五项校验"(结构合法性)和 "裁剪授权"(内容取舍)是两个独立维度高度吻合——五项校验从不因任务简单而放松,裁剪只发生在节点数量/骨架选型上。
块A 小结:四套外部方法论覆盖了"识别复杂度类型(Cynefin)→ 打分定档(T-shirt/Story Point)→ 落到需求粒度的可执行判据(INVEST/SPIDR)→ 警惕两个方向的矫枉过正(YAGNI 的张力)"这条完整链路。 仓库现状(块B)目前只有 Cynefin 式的定性判断("宿主角色定义+任务描述→选骨架")和 YAGNI 式的裁剪授权, 缺 T-shirt sizing 式的显式复杂度打分环节,也没有引用或复刻 INVEST/SPIDR 的拆分判据—— 这是"元规划判据能否被训出来"这个问题里,外部方法论能提供但仓库尚未采纳的部分,留给 Digester/训练阶段参考。
块B · 仓库内部权威源精读(比外部资料更权威)
B1. system/agents/workgraph-planning/agent.md 全文精读
来源:system/agents/workgraph-planning/agent.md(664 行,全文已读,行号对照 2026-08-23 版本)
Step 2 · 读候选骨架(原文,L75-86)
每个模板的
whenToUse字段是选型的唯一依据——它写清楚了适用场景、典型信号词、 以及与其他模板的区别。拿宿主 org node 的角色定义 + 任务描述对照着读,不要凭id猜。这是起点集合,不是穷举枚举。目录里将来可能有更多文件,永远以
ls的实际结果为准。⚠️ 一条硬规则:宿主 org node 是
org-validator时,必须用validator.json骨架, 第一个节点必须是validator-triager。理由见 §硬性约束·约束五。
Step 4 · 规划(原文,L117-148,含裁剪授权原句)
综合 Step 1/2/3 三份输入,产出:节点列表 + 执行流边 + 边上的数据契约。
🚨 第三项不是可选的。 边上不声明数据契约(
produces/needs), 下游节点的提示词里就没有上游产物的路径,它会像第四次真跑那样直接失败。你被明确允许:
- 裁剪:骨架五个节点,这次任务只需要三个 → 砍掉两个(比如任务不需要 BRD,直接从 PRD 起步);
- 替换:把某个节点的本体换成更贴合本次任务的;
- 组合:拿
executor.json做主干,把planner.json的验收产出节点接进去;- 增删验收产出节点:
goal-benchmark/goal-test-data/goal-test-script三个是动态选入的 (27-E2E §十一),按本次task-goal的验收方式选一个、选几个、或一个都不选。你不被允许:
- 不加思考地照抄某个骨架原样交回(那说明你没做 Step 1 的判断,而且骨架里没有数据契约, 照抄出来的图每条边都不传数据);
- 留着
{{orgNode}}/{{implAgent}}这类占位符就交回(引擎落出来是一张引用不存在 agent 的废图);- 把不同职能塞进同一个节点(一个节点 = 一件能一句话说清「做完什么算成功」的事);
- 画出违反下面「五项校验」的图;
- 在节点内部再套一层四段式流转(约束四,最容易犯,务必读完)。
有
remediation_note时的重规划三选一(27-E2E §四 #4 的判断留在这一层做,不上升到 org 层):
判断 怎么画 上一轮图的形状就是错的(少了一步 / 拆错了) 重画一张新图 图没问题,只是某个节点干砸了 图形状照旧重画一张,把 remediation_note作为该节点的输入上下文写进规划记录归因是 infra_flake(进程超时 / 被杀)不用重规划,直接向引擎汇报「原地重跑即可」——这类不烧任何计数
⚠️ 重要观察:Step 4 唯一给出的裁剪具体例句就是"任务不需要 BRD,直接从 PRD 起步"—— 这恰好是块C要核实的三个案例(及补充发现的第四个 planner 类案例)理论上最贴近的场景。 块C 的实测结果见下方,直接检验了这句例句在真实运行里有没有被落实。
Step 5 · 落盘规划记录,五项校验自查(原文节选,L163-209)
文件至少包含七节结构(原文列出的 markdown 模板,字段名逐一摘录):
- 输入 2. 候选骨架评估(模板 / whenToUse摘要 / 是否采用 / 理由)
- 本体核实(节点 / 想要的本体 / 清单里有吗 / 最终用了什么)
- 最终图 5. 与骨架的差异及理由 6. 五项校验自查 7. 招聘结果(Step 6 之后回填)
这一步不能跳。 27-P3/P4 §八.8 写明:图的规划质量没有硬校验,五项只保证图结构合法, 保证不了它适合这个任务。这份 md 是人类事后发现图不合理时唯一的决策线索。
⚠️ 关键约束:五项校验(无环/单一入口/可达性/回退边标注/fail 兜底边)验的是"结构合法", 不验"是否适合这次任务的复杂度"——这句原文明确承认了"裁剪判断质量"目前没有任何自动化校验兜底, 完全依赖 LLM 单次判断,这与块A的 Cynefin/YAGNI 讨论里"矫枉过正"的风险直接对应: 裁剪多了/少了都不会被系统拦下来,只能靠事后人工审计规划记录发现。
约束一:五项校验原文(L405-424,逐条摘录)
- 无环(仅针对
edgeKind='forward')—— 三色 DFS。- 单一入口 —— 必须恰好有一个入度为 0 的 forward 节点,任务从这里进入。
- 可达性 —— 每个节点都必须从入口可达,孤立节点直接拒绝。
- 回退边必须显式标注 —— 任何指向"拓扑序更早节点"的边,
edgeKind必须是backward; 引擎独立复核,不信任标注(反向也查:没构成回路的边不许标backward)。- fail 兜底边 —— 除图的唯一入口节点外,每个节点都必须至少留一条
failReason为空的兜底边(2026-08-21 收紧,见约束三:不再要求"先有别的 fail 边"这个前提)。
手工验算法(原文表格,L417-423):
| # | 手工验算法 |
|---|---|
| 1 | 把所有 backward 边划掉,剩下的边必须能排出拓扑序 |
| 2 | 只数 forward 边的入度,入度为 0 的节点必须恰好一个 |
| 3 | 从入口沿 forward 边 BFS,必须覆盖 nodes 里每一个节点 |
| 4 | 任何 to 在拓扑序上早于 from 的边,必须带 "edgeKind": "backward" |
| 5 | 除了第 2 条找出的那个唯一入口,逐个点名图里其余每一个节点,确认每个都至少有一条 condition:"fail" 且没写 failReason 的边——不能只挑"已经有 fail 边"的节点抽查 |
其余硬性约束(二至九)速记(未逐字摘录,仅记要点,来源同文件):
- 约束二:
nodeName(图内唯一,带宿主 org 节点前缀)≠systemAgentId(跨图复用,不带前缀)。 - 约束三:除入口节点外每个节点都必须留一条兜底边(2026-08-21 收紧,判据不再要求"先有别的 fail 边")。
- 约束四:不许在节点内部再套一层 RESEARCH→PLAN→EXECUTE→VERIFY 四段式(会导致两层 Context Flush 互相清空对方上下文)。
- 约束五:宿主是
org-validator时归因节点(validator-triager)必须排第一位。 - 约束六:边不跨层,归因可以跨层(两件事)。
- 约束七/八:元 agent 与
workgraph-planning自己都不许入图。 - 约束九:forward 边上必须声明数据契约(
produces/needs,取值域仅 7 个 kind)。
B2. system/work-graph-templates/ 四份骨架 + README.md 精读
来源:system/work-graph-templates/{planner,executor,executor-fanout,validator}.json + README.md
| 骨架 | id | 宿主 org node | 节点链(whenToUse 摘要) | dataContractNotes 要点 |
|---|---|---|---|---|
planner.json |
planner | org-planner(规划类,产出文档/规格而非可运行产物) |
brd→prd→sdd→benchmark→validator(5节点) | 三份文档各自 produces 自己的 kind;prd 的产出方隔了一个节点给 benchmark,用 needs 中继;acceptance 是本图内唯一该沿边声明任务级共享 kind 的情形(产出方和消费方都在本图内) |
executor.json |
executor | 执行类(org-coder/org-writer/org-monitor),单交付物 |
impl→test→validator(3节点) | 交付物走 artifact,自测记录走 log;validator 既要看 log 也要看交付物本身,用 needs artifact 中继 |
executor-fanout.json |
executor-fanout | 执行类,任务能拆成互不依赖、可并行的分支 | split→(impl/test)×N→merge→integration→validator(8节点,本文件示例2分支) | 拆分节点产物声明成 contract 而非 artifact(避免被先跑完的分支产物顶掉);merge 的已知上限是索引按 kind 只回最新一份,需要提示词自己按目录找齐 |
validator.json |
validator | org-validator 专用,硬性约束 |
validator-triager→benchmark-validator→testdata-validator(3节点) | 两条 forward 边只写 needs,不写 produces——判词/评分文件刻意不进产物索引,写 produces 会造成假警报;被验产物不在本图,required:false 是数据契约规则的合规逃生口 |
四张骨架的共同形状(README 原文,L29):
四张图共享一个形状:做 → 自检 → 本层验收,验收失败沿
backward边退回重做。差异只在中段。
planner.json 五节点之间的 needs 依赖链(核实原文 JSON,system/work-graph-templates/planner.json):
org-planner-brd --success--> org-planner-prd produces:[brd]
org-planner-prd --success--> org-planner-sdd produces:[prd]
org-planner-sdd --success--> org-planner-benchmark produces:[sdd], needs:[prd]
org-planner-benchmark --success--> org-planner-validator produces:[acceptance], needs:[brd,prd,sdd]
如果砍掉 org-planner-brd("不需要 BRD,直接从 PRD 起步")会发生什么,逐条核实:
org-planner-prd → org-planner-sdd这条边只声明produces:["prd"],不 needs brd,砍掉 brd 节点不会破坏这条边;- 真正依赖
brd这个 kind 的只有org-planner-benchmark --> org-planner-validator这条边的needs:["brd","prd","sdd"]—— 砍掉 brd 节点后,这个needs里的brd就会在图里找不到产出方,触发 README 里明确写的规则 6(data-contract): 「needs的每个 kind 在图里都有产出方,否则rule=data-contract整张图被拒」; - 修法二选一(README 原文):把
org-planner-benchmark → org-planner-validator边上的needs从["brd","prd","sdd"]改成[{"kind":"brd","required":false}](brd 变成可选输入),或者干脆把benchmark/validator也从needs列表里去掉brd; - 结论:Step 4 例句里"骨架五个节点,这次任务只需要三个 → 砍掉两个(不需要 BRD 直接从 PRD 起步)"这句话
在技术上是可行的,但不是简单删掉一个节点就完事——必须同步改掉下游
needs声明,否则会触发rule=data-contract被引擎打回。这是"裁剪授权"原句里没有言明、但 README 数据契约规则里能推导出的一条隐藏成本, 值得在训练判据里显式化:裁剪一个节点前,先检查有没有下游节点的needs依赖它的产出。
README 里"当前模板"表(L20-28,逐字摘录节点链列):
| 文件 | id | 宿主 org node | 节点链 |
|---|---|---|---|
planner.json |
planner |
规划类(org-planner) |
brd → prd → sdd → benchmark → validator |
executor.json |
executor |
执行类(org-coder / org-writer / org-monitor),单交付物 |
impl → test → validator |
executor-fanout.json |
executor-fanout |
执行类,可并行拆分 | split → (impl/test)×N → merge → integration → validator |
validator.json |
validator |
org-validator 专用 |
validator-triager → benchmark-validator → testdata-validator |
块C · 历史真实案例核实(比外部方法论更重要)
⚠️ 首个重要发现:任务指定的三个案例(p-v82tpc / p-pyjha7 / p-iyshuc)经核实后,
没有一个是 org-planner 宿主节点——p-v82tpc 和 p-pyjha7 都是 org-validator(用 validator.json),
p-iyshuc 是 org-coder(用 executor.json,且有两版:首次规划 + infra_flake 重规划)。
也就是说,块B里 Step4 那句"不需要 BRD 直接从 PRD 起步"的裁剪例句,这三个指定样本天然无法验证——
它们的骨架本身就不含 BRD 节点(validator.json/executor.json 都是 3 节点骨架,没有 brd/prd/sdd 这类文档节点)。
为了不遗漏"planner 类骨架实际有没有被裁剪过"这个问题,调研额外核实了同一批项目里唯一存在的
org-planner 案例(p-v1mpcl / T-mt1qx0c4-95bf),补在 C4,来源:data/companies/e2e-demo/projects/p-v1mpcl/workgraph-plan-T-mt1qx0c4-95bf.md。
C1. p-v82tpc / T-mt2r6fz0-125b(宿主 org-validator)
来源:data/companies/e2e-demo/projects/p-v82tpc/workgraph-plan-T-mt2r6fz0-125b.md
- 实际图:
validator-triager → benchmark-validator → testdata-validator,与validator.json骨架 完全一致,节点数/边数一个不少不多(原文第4节:「与骨架validator.json完全一致,未裁剪未替换」)。 - 任务原文复杂度特征:任务本身是"apple.com 风格 lemonboss 官网首页"(单页静态站,无持久化,交付物单一), 但这个宿主节点是 org-validator(判定"整个任务达成了吗"的验收环节),它的职责与页面本身复不复杂无关—— 它固定要走归因→评分校验→测试数据校验三步,任务描述的简单/复杂程度不影响这个骨架的形状。
- 是否真的裁剪过:没有。规划记录第5节原文:「无差异。任务描述里没有额外要求跳过 benchmark 或 testdata 校验……标准三节点骨架已覆盖这个诉求,不需要增删节点」。
C2. p-pyjha7 / T-mt45nzvc-2235(宿主 org-validator)
来源:data/companies/e2e-demo/projects/p-pyjha7/workgraph-plan-T-mt45nzvc-2235.md
- 实际图:同样是
validator-triager → benchmark-validator → testdata-validator,与骨架完全一致。 - 任务原文复杂度特征:同一类"apple.com 风格 lemonboss 官网首页"任务,附带更细的验收要求
(三个卖点区块、导航平滑滚动不出现 # 锚点、任意宽度不出现横向溢出),上游还带着一个前序失败上下文
(
org-coderattempt-0 失败,fail_reason=body_not_ready)。 - 是否真的裁剪过:没有。规划记录第5节原文:「无差异,原样采用骨架三节点四边结构——本次验收任务
不需要额外验收产出节点……testdata-validator 按骨架保留(即使
goal-test-data/当前不存在,读取契约里 已标required:false,不会因缺失而报错)」。这一点值得注意:即便goal-test-data/这类下游依赖的 产物实际不存在,规划者也没有裁掉testdata-validator节点,而是依赖契约里的required:false逃生口让它 "跑但允许 skip",没有触发结构层面的裁剪判断。
C3. p-iyshuc / T-mt5d3mi9-57cf 与 -retry2(宿主 org-coder,两版对照)
来源:data/companies/e2e-demo/projects/p-iyshuc/workgraph-plan-T-mt5d3mi9-57cf.md
与同目录下 -retry2.md
- v1(首次规划)实际图:
org-coder-impl(coder) → org-coder-test(unit-tester) → org-coder-validator(coder-validator), 与executor.json骨架完全一致。规划记录第5节原文:「完全采用executor.json三节点串行骨架,未裁剪、 未增删节点:任务是单一页面交付物……不在本图内重复」,并明确排除了executor-fanout.json: 「首页三个卖点区块同属一个页面/一次实现,不是独立可并行的子任务」——这是唯一一处三个原始样本里 出现"骨架间比较+排除理由"的记录(其余两个案例只是确认必须用validator.json,没有真正对比过其他骨架)。 - retry2(infra_flake 重规划):归因是
infra_flake(进程被中断,非节点/图形状问题)。 规划记录第2节原文:「本次归因明确落在 infra_flake……图的形状没有被点名有问题……因此本轮不重新 设计图形状,直接复用上一份规划记录里验证过的同一张图……未做任何裁剪/替换/组合的变更」。 这直接对应块Bagent.mdStep4「重规划三选一」表格里的第三行(infra_flake→ 不用重规划, 原地重跑),是一次真实发生、且规划者显式引用了该判据文字("按 agent.md Step4「有 remediation_note 时的重规划三选一」")的落地案例——证明这条判据至少在这一实例中被正确执行。 - 是否真的裁剪过:两版都没有。两次都是完整 3 节点骨架,唯一的差异是 retry2 版本的判断依据是 "沿用上一轮"而非"重新评估骨架"。
C4.(补充,非任务原指定,但为回答"planner 类骨架是否被裁剪过"这一问题而额外核实)
p-v1mpcl / T-mt1qx0c4-95bf(宿主 org-planner)
来源:data/companies/e2e-demo/projects/p-v1mpcl/workgraph-plan-T-mt1qx0c4-95bf.md
- 任务原文:「读 lemonboss 仓库文档+代码,产出 apple.com 风格的静态官网,讲清 why/how/what,
含核心价值点、功能模块、独特性说明,至少 3-4 张界面截图/示意图配说明」——这正是块B
agent.mdStep4 例句所指的场景类型(规划类交付、单一静态站点、无持久化、无多角色评审)。 - 实际图:
org-planner-brd → org-planner-prd → org-planner-sdd → org-planner-benchmark → org-planner-validator, 完整 5 节点,一个没砍,与planner.json骨架逐字一致。 - 是否真的裁剪过:没有。规划记录第5节原文:「无差异,原样采用骨架——本次任务(读文档产出规格化的 静态网站)与骨架设计意图……完全吻合,不需要裁剪或替换」。
- ⚠️ 这是本次调研里唯一一个与块B Step4 裁剪例句"直接可比"的真实样本,结果是反例: 例句设想的场景(读文档产出规格化网站)与这个真实任务高度相似,但规划者保留了 BRD 节点, 没有执行例句里演示的裁剪动作。规划记录里给出的理由是"brd/prd/sdd 描述 why/how/what……完全对应骨架语义", 即规划者认为"讲清 why"就等于需要 BRD,而不是把"BRD 对应的信息量是否足够小到可以并入 PRD"作为裁剪判据。
块C 总体发现(跨 4 个样本,5 份规划记录)
- 裁剪发生次数 = 0/5。全公司当前可查到的全部 5 份 work graph 规划记录(覆盖
validator.json×2、executor.json×2、planner.json×1),没有一次真正执行过节点裁剪/替换/组合,全部是"骨架完整照搬"。 - "骨架间比较并排除"的记录只出现过一次(C3 排除
executor-fanout.json的理由), 其余样本的"候选骨架评估"表格虽然按 agent.md 规定的格式填了四行,但除了命中的那一行都是 "❌ 宿主不是XX"这类基于宿主类型的硬性排除(几乎不需要任务复杂度判断,选型规则是确定性的:org-validator→validator.json,org-coder→executor.json/executor-fanout.json,org-planner→planner.json), 真正需要在"同一骨架内部裁剪节点数量"这一层做判断的场景,目前 0 例真实发生。 - C4 的反例价值最高:它是唯一一个任务特征与 Step4 裁剪例句高度吻合、却仍然选择"完整保留"的真实案例,
说明当前
agent.md里的裁剪授权文字是"允许但从未被验证过是否会被正确执行"—— 这正是本次训练要验证的核心问题:"按任务复杂度裁剪 work graph 形状"这条元规划判据, 在真实数据里目前没有一次正样本,只有反复出现的"完整保留"负样本(如果把"该裁剪却没裁剪"算作负样本的话, 但也存在另一种解读:这四个真实任务客观上都不满足裁剪条件,规划者的"不裁剪"判断本身是正确的—— 这一点无法仅凭规划记录本身判定,需要人工进一步核实"C4 的 BRD 节点产出物是否事后被证明是冗余的", 本次调研未做这一步,如实标注为未核实)。 - executor-fanout.json 目前 0 个真实落地样本——四个真实规划记录里没有一个选用它, C3 是唯一一次"考虑过它但排除了"的记录,其余样本连候选骨架表格里都是机械排除(宿主类型不对)。 这意味着"能不能拆并行分支"这条裁剪/扩展判据同样缺乏正样本可供训练参考。
汇总:三块调研对训练判据的启示
| 判据环节 | 外部方法论怎么说(块A) | 仓库现状怎么写(块B) | 真实数据怎么做(块C) |
|---|---|---|---|
| 复杂度识别 | Cynefin:先分类(Simple/Complicated/Complex/Chaotic),再定应对策略 | 靠"宿主角色定义 + 任务描述"人工通读判断,无显式分类步骤 | 4/5 样本的骨架选型完全由宿主类型(org-planner/coder/validator)确定性决定,未见任务复杂度参与选型 |
| 复杂度打分 | T-shirt sizing/Story Point:先打粗档位,再细化 | 无对应机制 | 无对应机制,规划记录里没有任何"复杂度评分"字段 |
| 拆分/合并判据 | INVEST(独立/够小)+ SPIDR(5种拆分手法) | "一个节点=一件能一句话说清的事";裁剪/替换/组合三种授权 | 0 次裁剪,1 次"排除 fanout",其余为宿主类型的硬性匹配 |
| 矫枉过正的平衡 | YAGNI:警惕功能/流程的双向过度(多了浪费,少了架构塌方) | "五项校验"验结构合法性但不验"是否适合任务",原文明说"没有硬校验" | C4 疑似"该裁未裁"的一个反例,但未核实是否属实(需要看产出物是否冗余) |
给下一阶段(Digester/Trainer)的建议方向:
- 当前样本量对"裁剪判据"这一具体能力是信息量几乎为零的(0 正样本),继续等真实数据积累裁剪案例, 或者需要主动构造几个"任务足够简单、骨架该裁"的合成场景来补足训练信号;
- C4 反例值得单独立案追踪——建议找宿主(org-planner)事后确认「这次的 BRD 产出物内容, 是否本可以合并进 PRD 而不丢信息」,这能把"未核实"的猜测坐实成"确认过度设计"或"确认合理保留";
- 块B 发现的"裁剪节点必须同步检查下游 needs 依赖"这条隐藏规则,建议补进
agent.mdStep4 的裁剪授权段, 作为显式的裁剪前置检查清单项(目前只在 README 的 data-contract 规则里间接可推导,容易被漏看)。