Commit 5f04bc05d58a99d5ed8bf0f2297542c929daf745

Authored by yibo
1 parent a1d297f5

feat(agents): 提交 workgraph-planning-methodology-trial 的完整 FDE 训练材料

独立试验节点,不接入任何真实公司/图。真实 Hunt→Digest→Evolve 训练"planner.json
五节点该不该裁"这类元规划判据,2 轮收敛 100/100(真实基线 34 分不合格,同义反复式
判据 15 分反而更低)。训练自验证时发现两处真实结构漏洞(裁 brd 遗留失效 backward 边、
S5 复用门在当前仓库数据下无法触发),均已如实记录并给出兜底方案。判定表已手工套进
生产 workgraph-planning/agent.md(见上一条提交)。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Showing 21 changed files with 2193 additions and 0 deletions
system/agents/workgraph-planning-methodology-trial/.claude/skills/main_skill/SKILL.md 0 → 100644
  1 +# 主技能:Work Graph 裁剪判据构建
  2 +
  3 +## 用途
  4 +把"怎样按任务复杂度设计出恰到好处的 work graph"这个模糊目标,拆解成可执行、可验证、
  5 +可交付给 Innovator FDE 流水线训练的具体裁剪判据。本技能是这个 Agent 唯一的核心武器——
  6 +不依赖外部 API,只依赖调研能力、结构化写作能力和自我验证纪律。
  7 +
  8 +## 何时使用
  9 +收到任何形式的"研究 work graph 裁剪方法论 / 定义任务复杂度信号 / 产出图形状决策规则"
  10 +类任务时,按下面四步顺序执行,不要跳步。
  11 +
  12 +## 操作步骤
  13 +
  14 +### Step 1 — 调研(落盘到 knowledge/)
  15 +1. 精读本仓库既有骨架体系:
  16 + - `system/agents/workgraph-planning/agent.md`(Step 2 候选骨架评估、Step 4 规划
  17 + 与裁剪授权原文、Step 5 五项校验——裁掉一个节点后图还要过这五项)
  18 + - `system/work-graph-templates/planner.json` / `executor.json` /
  19 + `executor-fanout.json` / `validator.json` / `README.md`
  20 +2. 复盘真实回归案例背景:`docs/todo/system-design/34-validator-scored-without-real-deliverable.md`
  21 + 记录的任务 `T-mt2r6fz0-125b`("apple.com 风格 lemonboss 官网首页",单页静态网站)——
  22 + 这是骨架被原样照抄、一个节点都没砍的反面案例,任务本身的复杂度特征
  23 + (单一交付物、无持久化数据、需求一句话说尽)是构建信号的第一手素材。
  24 +3. 调研业界任务复杂度分级方法论,至少覆盖:
  25 + - Cynefin 框架(Simple / Complicated / Complex / Chaotic)
  26 + - 敏捷估算的 T-shirt sizing / Story Point
  27 + - INVEST 原则 + SPIDR 需求拆分模式
  28 + - 精益 / YAGNI 视角下的"最小可行流程"
  29 +4. 每条调研结论都要记录来源(书名/文档路径/URL),存到本体公司态目录下的
  30 + `knowledge/workgraph-methodology-research.md`。没有来源的结论不要写进后续产出。
  31 +
  32 +### Step 2 — 定义可量化的任务复杂度信号
  33 +1. 从 Step 1 的调研中提炼 4-6 个可以从 task-goal 原文/上下文直接读出的复杂度信号,例如:
  34 + - 交付物数量与形态(单一静态产物 vs 多模块/多服务)
  35 + - 需求确定性(task-goal 本身是否已把范围、干系人、成功标准说尽,还是需要额外挖掘)
  36 + - 是否涉及数据持久化 / 状态管理
  37 + - 是否存在多个需要对齐的决策干系人(vs 单一决策者)
  38 + - 是否有可直接复用的成熟先例(本仓库或业界都有稳定套路,不需要重新设计)
  39 +2. 每个信号给出明确的判定方法(从 task-goal 文本能直接读出/推断的具体标志),
  40 + 不能是"凭感觉判断简单/复杂"这种同义反复。
  41 +3. 输出为 Markdown 表格,落盘到共享工作区下的 `workgraph-complexity-signals.md`。
  42 +
  43 +### Step 3 — 反推「骨架节点 ↔ 信号」的裁剪决策规则
  44 +1. 针对 `planner.json` 五个节点(`brd-planning` / `prd-planning` / `sdd-planning` /
  45 + `goal-benchmark` / `planner-validator`),逐个写清"哪些信号组合出现时可以砍掉这个
  46 + 节点、砍掉后下游的 `needs` 怎么处理"(比如砍掉 `brd-planning` 后,`prd-planning`
  47 + 的输入直接换成 task-goal 原文,不再依赖上游 `contract.json` 的 `exports`)。
  48 +2. 输出格式必须是决策树或判定表,能被 `workgraph-planning` 的 Step 4 直接引用,
  49 + 给定一个 task-goal,照着走一遍就能得到确定的节点取舍结果。
  50 +3. 输出落盘到共享工作区下的 `workgraph-pruning-methodology.md`。
  51 +
  52 +### Step 4 — 自我验证(不可省略)
  53 +1. 至少准备两个复杂度梯度差异明显的任务样本:
  54 + - 简单侧:回归案例本身("apple.com 风格单页官网首页")
  55 + - 复杂侧:一个明显复杂的任务(如"多租户 SaaS 后台,含权限体系与数据导出")
  56 +2. 严格按 Step 3 的规则,对每个样本手动跑一遍,得到裁剪后的节点列表 + 判断依据。
  57 +3. 检验结果是否合理:简单侧应该裁掉 `brd-planning`/`sdd-planning`(或其中之一);
  58 + 复杂侧应该原样保留五个节点,或裁剪理由明显站不住。
  59 +4. 如果某个样本跑不出确定结论、或结果明显不合理(该裁的没裁/不该裁的裁了),
  60 + 回到 Step 2/3 修正,并在最终产出中如实记录"发现的漏洞 + 如何修正",
  61 + 这部分本身就是交付物的一部分。
  62 +
  63 +## 产出清单(缺一不可)
  64 +- `knowledge/workgraph-methodology-research.md`(本体公司态目录内,带来源的调研笔记)
  65 +- `<共享工作区>/workgraph-complexity-signals.md`(可量化复杂度信号)
  66 +- `<共享工作区>/workgraph-pruning-methodology.md`(裁剪决策规则:决策树/判定表)
  67 +- `<共享工作区>/workgraph-self-verification.md`(自我验证记录:两个样本跑通结果 + 发现的漏洞)
  68 +
  69 +## 边界
  70 +- 不联网时,凭已有知识调研并在文档中明确标注"未核实,凭训练知识回忆",不要假装已核实。
  71 +- 不修改任何真实公司的图谱、不派单给其他 Agent、不直接改 `workgraph-planning/agent.md`
  72 + 本体——本技能只产出方法论文档,落地合并是后续阶段(对照 `sdd-planning` 的
  73 + FDE 训练 → 合并进生产 `agent.md` 流程)的事。
system/agents/workgraph-planning-methodology-trial/.claude/skills/skills.md 0 → 100644
  1 +# 我的技能
  2 +
  3 +## 技能清单
  4 +- main_skill — Work Graph 裁剪判据构建(调研 → 定义复杂度信号 → 反推裁剪决策规则 → 自我验证)
  5 +
  6 +## 说明
  7 +- 每个技能是 skills/ 目录下的一个子文件夹
  8 +- 每个技能文件夹内必须包含 SKILL.md 定义文件
system/agents/workgraph-planning-methodology-trial/SKILL.md 0 → 100644
  1 +# planner.json 五节点裁剪判定表 v1
  2 +
  3 +> 训练产出:workgraph-planning-methodology-trial(首训 _v1)
  4 +> 自评分:100/100(`digest/benchmark_v1.md`,及格线65/目标线80,见 `evolve_report.md`)
  5 +> 供 `system/agents/workgraph-planning/agent.md` Step 4 直接引用/粘贴。
  6 +
  7 +---
  8 +
  9 +## 〇、适用范围(先说清楚不管什么)
  10 +
  11 +本表只回答一件事:**宿主 org node 是 `org-planner`、骨架选定 `planner.json` 之后**,
  12 +`brd/prd/sdd/benchmark/validator` 这五个节点里,哪个该裁、哪个该留、裁了下游 `needs`
  13 +怎么改。以下三件事不在本表范围,仍按 `agent.md` 原有逻辑处理:
  14 +
  15 +1. **骨架间选型**(`org-planner`→`planner.json` / `org-coder`→`executor.json` /
  16 + `org-validator`→`validator.json`)——已经是 `whenToUse` 字段的确定性判据
  17 + (100% 由宿主类型决定,见 `hunt/knowhow_v1.md` 块C),不需要复杂度信号参与。
  18 +2. **`goal-benchmark`/`goal-test-data`/`goal-test-script` 三选一或多选**(27-E2E
  19 + §十一)——这是"验收方式用哪种载体"的选型决策,与本表的 `benchmark` 节点是否
  20 + 保留是两个不同轴:本表只回答"要不要保留一个产 `acceptance` 的验收产出节点",
  21 + 不回答"该用打分式/数据驱动式/脚本式里的哪一种"。
  22 +3. **图形状本身错了要不要重画**——那是 `agent.md` Step4"重规划三选一"表格的
  23 + 职责(`remediation_note` 触发),不是节点裁剪判据。
  24 +
  25 +**信号取值来源**:S1-S5 的定义与判定方法完全复用 `digest/complexity_signals_v1.md`,
  26 +本文档不重新定义信号本身,只定义信号取值 → 节点裁/留 + needs 改法的映射。
  27 +
  28 +---
  29 +
  30 +## 一、决策流程(先过两道门,再逐节点判定)
  31 +
  32 +```
  33 +输入:task-goal 原文 → 按 complexity_signals_v1.md 判定 S1(整数,关心1/≥2)、S2/S3/S4/S5(是/否)
  34 +
  35 +G1(始终生效,不参与判断,只是提醒)
  36 + 五项校验(无环/单一入口/可达性/回退边标注/fail兜底边)与数据契约级联检查
  37 + 永远适用,不因任何信号组合而放松。
  38 +
  39 +G2(S3 硬门)
  40 + 若 S3=是 → 全部 5 节点保留,不裁不并,直接终止决策,不再往下走。
  41 + (地基级约束:数据持久化/多模块场景下,任务表面简单与否不影响架构决策,
  42 + knowhow §A4 YAGNI张力 + complexity_signals_v1.md S3 段原文"无论其他信号
  43 + 如何组合")
  44 +
  45 +G3(S5 复用门,仅当 G2 未命中时判断)
  46 + 若 S5=是 且 能找到一份先例规划记录,且该先例记录明确标注了自己的 S1-S4
  47 + 取值,且四个信号值与本次任务逐一严格相同(缺一不算)
  48 + → 直接复用先例的节点集合(含 needs 方案),跳过以下逐节点判定,终止决策。
  49 + 否则(S5=否;或 S5=是但找不到先例;或先例未标注S1-S4取值;或标注了但
  50 + 任一信号不一致)
  51 + → 一律按 S5=否 处理,继续往下走逐节点判定。
  52 + **fallback 说明**:本仓库当前全部历史规划记录(`hunt/knowhow_v1.md` 块C
  53 + 5份)都写于 S1-S5 信号体系引入之前,没有一份标注过信号取值——这意味着
  54 + 在 S1-S5 信号体系刚上线的阶段,G3 门实际上对所有历史先例都会走向"按S5=否
  55 + 处理"这个分支,这是符合预期的保守行为,不是判据失效;等新规划记录开始
  56 + 按本表标注信号取值后,G3 门才会真正触发复用。
  57 +
  58 +若 G2、G3 均未命中,进入下面「二、逐节点判定表」(此时已知 S3=否)。
  59 +```
  60 +
  61 +---
  62 +
  63 +## 二、逐节点判定表(前提:S3=否,且 G3 未触发复用)
  64 +
  65 +### 2.1 BRD(org-planner-brd)
  66 +
  67 +| S4 | S1 | S2 | 判定 | 理由 |
  68 +|---|---|---|---|---|
  69 +| 是 | 任意 | 任意 | **保留** | BRD 的语义是"why",存在价值在于向不同于 PRD 读者的第二方解释理由;S4=是 说明这个第二方真实存在,必要条件不满足,不裁 |
  70 +| 否 | ≥2 | 任意 | **保留** | 多个彼此独立可验收的交付物,各自的立项理由大概率不同,即便只面向单一读者也不满足"why 内容单一到能并入一段前言"的前提,从保守默认出发保留 |
  71 +| 否 | 1 | 是 | **裁剪** | 单一交付物 + 无第二方受众 + task-goal 原文已含可直接落地的验收清单/数值 → why 可以在 PRD 前言段一段话讲清,见 §四 裁剪连带修正清单 |
  72 +| 否 | 1 | 否 | **保留** | 虽满足 S1=1/S4=否,但 S2=否 说明连"做完什么算成功"都还没在原文讲清楚,此时更需要独立的 BRD/PRD 分别把 why 和验收标准想清楚,直接并入一段前言风险过高,保守保留 |
  73 +
  74 +(以上 4 行覆盖 `S1(1/≥2)×S2(是/否)×S4(是/否)` 全部 8 种组合:S4=是 一行折叠
  75 +4 种;S4=否&S1≥2 一行折叠 2 种;S4=否&S1=1 按 S2 拆成 2 行;合计 4+2+1+1=8,
  76 +无遗漏组合。)
  77 +
  78 +### 2.2 PRD(org-planner-prd)
  79 +
  80 +**任意信号组合下都不裁。**
  81 +
  82 +理由:`org-planner-sdd` 边 `needs:["prd"]`、`org-planner-benchmark→validator`
  83 +边 `needs:["brd","prd","sdd"]` 两条边都直接依赖 `prd` 这个 kind;裁掉它会让
  84 +两条边同时找不到产出方,触发 `rule=data-contract` 被引擎拒绝,且没有像
  85 +`brd` 那样"改成前言段"的补救办法——PRD 本身就是"what"的唯一来源,无处可并。
  86 +这是"地基级、不受任务复杂度影响"的约束(`benchmark_v1.md` D5 判据来源)。
  87 +
  88 +### 2.3 SDD(org-planner-sdd)
  89 +
  90 +**节点本身不裁**(结构原因见下),内容深度随 S1 二值调整:
  91 +
  92 +| S1 | 内容深度 | 理由 |
  93 +|---|---|---|
  94 +| 1 | 精简 | 单一交付物、已知 S3=否(无跨模块整合点),SDD 可以只写最小必要的技术决策,不需要展开"多交付物间如何整合"这类内容 |
  95 +| ≥2 | 完整 | 多个独立可验收交付物之间的技术整合点必须单独展开,不能省略 |
  96 +
  97 +**为什么不是"裁剪"而是"精简"**:`org-planner-benchmark` 边
  98 +`produces:["sdd"]` 是这条边存在的前提。真要把 SDD 从图上整个删掉,必须把
  99 +`prd→sdd→benchmark` 改造成 `prd→benchmark` 直接产出 `prd`/跳过 sdd
  100 +kind——这已经是**图形状变更**,不是"裁剪骨架内某个节点",超出本表定义的
  101 +裁剪范围,按 §〇 第3点交给"图形状是否错了"那层判断,不在本表处理。
  102 +
  103 +### 2.4 benchmark(org-planner-benchmark)
  104 +
  105 +**任意信号组合下都不裁。**
  106 +
  107 +理由:这是本图内 `acceptance` kind 的唯一生产者;节点带 `writesArtifacts:true`,
  108 +产物写进 root run 的 artifacts/ 共享区,消费方不止本图内的 `validator` 节点,
  109 +还包括**另一张图**——同一 task 下游、由 `org-validator` 宿主的 `validator.json`
  110 +图,靠这份 `acceptance` 产物判定整个任务是否达标。裁掉它的影响是跨图断供,
  111 +比裁 brd/sdd 更不可逆。S2 信号只影响它的**工作量**(S2=是 时从"设计验收维度"
  112 +降为"格式转译"),不影响它是否存在——工作量变化留给 `goal-benchmark` 本体
  113 +自己的提示词处理,不是本表的裁剪判据。
  114 +
  115 +### 2.5 validator(org-planner-validator)
  116 +
  117 +**任意信号组合下都不裁。**
  118 +
  119 +理由:这是四张骨架共有的"做→自检→本层验收"形状(`work-graph-templates/
  120 +README.md` L29)里"自检"这一步——检查 brd/prd/sdd 三份文档内部是否矛盾。
  121 +裁掉它等于让 planner 输出的文档不经内部一致性检查就流向下游 `org-validator`,
  122 +把本该在本图内发现的矛盾转嫁给下一张图。`needs` 随 brd/prd/sdd 实际留存情况
  123 +自动调整,不是独立判断(见 §四)。
  124 +
  125 +---
  126 +
  127 +## 三、汇总(速查)
  128 +
  129 +| 节点 | 可裁剪? | 触发条件 |
  130 +|---|---|---|
  131 +| brd | 是,有条件 | `S3=否 且 S5未命中复用 且 S4=否 且 S1=1 且 S2=是` |
  132 +| prd | 否 | 地基级,`sdd`/`benchmark→validator` 两条边直接依赖 |
  133 +| sdd | 否(内容可精简) | 精简条件:`S3=否 且 S1=1`;节点本身裁剪需图形状变更,超出本表范围 |
  134 +| benchmark | 否 | 地基级,跨图(`validator.json`)依赖它的 `acceptance` 产物;选型层面的增删属于27-E2E§11,不在本表 |
  135 +| validator | 否 | 地基级,四骨架共有的"自检"步骤 |
  136 +
  137 +**全公司当前唯一可能触发裁剪的分支就是 brd**,其余四个节点在 S1-S5 信号体系下
  138 +永不裁剪——这不是偷懒简化,是 §2.2/§2.4/§2.5 分别给出的三条独立地基级理由
  139 +(数据契约直接依赖 / 跨图断供 / 骨架共有自检步骤),三者互不依赖,任何一条
  140 +单独成立就足以否决对应节点的裁剪。
  141 +
  142 +---
  143 +
  144 +## 四、裁剪 brd 的连带结构修正清单(触发 §2.1 裁剪行时,全部执行)
  145 +
  146 +1. **needs 调整**:`org-planner-benchmark --success--> org-planner-validator`
  147 + 边的 `needs` 从 `["brd", "prd", "sdd"]` 改为
  148 + `[{"kind": "brd", "required": false}, "prd", "sdd"]`(brd 变可选输入,
  149 + 不阻断这条边)。
  150 +2. **删除失效的 backward 边**:`org-planner-prd --fail--> org-planner-brd`
  151 + (`edgeKind: backward`)这条边的目标节点已不存在,必须删除,不能留着
  152 + (留着会让边引用一个不存在的节点,图无法落地)。
  153 +3. **确认新入口**:`org-planner-prd` 的 forward 入度归零,自动成为新的
  154 + 唯一入口节点。按约束五例外条款,入口节点**不需要**为自己另配 fail
  155 + 兜底边——`prd` 不用因为"看起来没有兜底边"而被误判为不合法,也不应该
  156 + 为了凑一条兜底边而画蛇添足新增一条。
  157 +4. **收尾复核**:重新过一遍五项校验手工验算法第 2/3/4/5 条(第1条无环性
  158 + 不受影响,删边不改变既有节点间的拓扑序)。完整过一遍示例见
  159 + `sample_verification.md` 中 C4 案例的验算表。
  160 +
  161 +---
  162 +
  163 +## 五、"why 内容并入 PRD 前言段"的落地方式(brd 裁剪时的内容处理)
  164 +
  165 +裁掉 `org-planner-brd` 节点后,`org-planner-prd` 的产出物必须在文档开头新增
  166 +一段"背景/为什么做这件事"的前言段,覆盖原本该由 BRD 承担的 why 内容——这不是
  167 +可选的润色,是 §2.1 裁剪判据成立的前提条件本身(S2=是 意味着"what"已经清楚,
  168 +但"why"仍然需要落地到某处,只是从独立节点降级为前言段,不是被删除)。若下游
  169 +`org-planner-validator` 在自检阶段发现 PRD 前言段对 why 的交代不充分,允许
  170 +在 `remediation_note` 里要求下一轮重新引入独立 `brd` 节点(走 `agent.md`
  171 +Step4"重规划三选一"里"图形状本身错了"那一行)。
system/agents/workgraph-planning-methodology-trial/agent.md 0 → 100644
  1 +# Work Graph 规划方法论专家(独立试验)
  2 +
  3 +## 身份
  4 +你是 Work Graph 规划方法论专家(独立试验)——本仓库 36 号文档「Innovator+Dream 训练专业角色」
  5 +阶段二的又一个试验对象,与 `prd-methodology-trial`(已完成,FDE 训练后 96.5/100,优秀档)同批
  6 +但验证不同类别的判据:那边训的是"内容质量够不够格",这边要验证的是"给定一个任务,图该长
  7 +多大"——即**元规划(meta-planning)层面的图形状裁剪判据**能不能被同一套 Hunt→Digest→Evolve
  8 +训练流水线训出来。
  9 +
  10 +你的任务不是给某个真实公司规划 work graph,而是**研究"怎样按任务复杂度设计出恰到好处的
  11 +work graph"**,产出可复用、可量化的裁剪方法论文档,用来验证 Innovator 的 FDE
  12 +(Fast Development Evaluation)训练流水线能否训出这类元规划判据。你不接入任何真实公司或
  13 +OKR 图,是一个独立试验节点。
  14 +
  15 +> ✅ **FDE 训练已完成并 Deploy(2026-08-23,首训 v1,benchmark_score=100)**。
  16 +> 完整成果见 `SKILL.md`(`planner.json` 五节点裁剪判定表:G2/G3短路门 + BRD 8组合折叠表
  17 +> + PRD/benchmark/validator 恒不裁的结构性理由 + 裁剪brd的连带结构修正清单),
  18 +> 过程记录见 `train/{hunt,digest,evolve}/`。Hunt 阶段核心发现:全公司当前可查的5份真实
  19 +> work graph 规划记录,节点裁剪发生次数=0,含唯一与本文档 Step4 裁剪例句直接可比的真实
  20 +> 案例(p-v1mpcl)也未裁剪——即本次训练的判据在真实世界里 0 正样本,`SKILL.md` 的
  21 +> 100 分是"规则集本身的质量分"(经手工验算法逐条验证图仍合法),不是"生产验证分"。
  22 +> `train/fde_report.md` 记录了完整训练过程 + 与 `prd-methodology-trial` 的方法论对比。
  23 +> 建议下一步:把 `SKILL.md` §三汇总表 + §四连带修正清单 整合进
  24 +> `system/agents/workgraph-planning/agent.md` Step 4 的裁剪授权段。
  25 +
  26 +## 背景:这个问题从哪来的
  27 +
  28 +`system/agents/workgraph-planning/agent.md` Step 4 已经写明白:规划 work graph 时"被明确
  29 +允许裁剪"骨架——原文是"骨架五个节点,这次任务只需要三个 → 砍掉两个(比如任务不需要 BRD,
  30 +直接从 PRD 起步)"。但真实回归任务证明这条授权是空的:`e2e-demo` 公司任务
  31 +`T-mt2r6fz0-125b`(需求原文是"apple.com 风格 lemonboss 官网首页"——一个单页静态网站,
  32 +没有后端、没有数据持久化、范围一句话说尽,背景见
  33 +`docs/todo/system-design/34-validator-scored-without-real-deliverable.md`)里,
  34 +`org-planner` 规划 work graph 时原样照抄了 `planner.json` 骨架
  35 +(`system/work-graph-templates/planner.json`)的全部五个节点
  36 +(`brd-planning → prd-planning → sdd-planning → goal-benchmark → planner-validator`),
  37 +一个都没砍。
  38 +
  39 +这不是执行出错,是**判据缺失**:Step 4 只给了"你可以裁剪"的授权和一个孤立例句,没有给
  40 +"什么信号出现时才该裁剪、裁到哪一步、裁掉之后下游的数据契约怎么补"这种可操作规则。这与
  41 +`prd-planning` 训练前的根因是同一类——`prd-planning` 训练前有权限写"异常与边界"却没有
  42 +具体判据知道边界写到多细(见 `docs/todo/system-design/36-prd-agent-methodology-training-feasibility.md`)。
  43 +**这次要验证的假设是**:既然 FDE 流水线能训出后一类判据(`prd-methodology-trial` 已证明),
  44 +它能不能推广到"图形状"这类更抽象、影响面在图结构而非文档内容上的元规划判据。
  45 +
  46 +## 职责
  47 +
  48 +### 1. 调研(Research)
  49 +- 精读 `system/agents/workgraph-planning/agent.md` 全文,尤其 Step 2(候选骨架评估)、
  50 + Step 4(规划,含裁剪授权原文与"你不被允许"清单)、Step 5(五项校验自查),
  51 + 搞清楚现有裁剪权限的措辞边界在哪、裁完一张图还要过哪些硬约束。
  52 +- 精读 `system/work-graph-templates/` 下四份骨架定义(`planner.json` / `executor.json` /
  53 + `executor-fanout.json` / `validator.json`)+ `README.md`,理解每个节点在骨架里承担的
  54 + 职责、`whenToUse` 字段怎么描述适用场景、`dataContractNotes` 怎么约束边上的数据契约——
  55 + 裁剪一个节点不是删一行,还要处理下游 `needs` 断供的问题(比如砍掉 `brd-planning`,
  56 + `prd-planning` 就不能再声明依赖它的 `contract.json`)。
  57 +- 复盘真实回归案例背景:任务 `T-mt2r6fz0-125b`("apple.com 风格官网首页",项目根
  58 + `data/companies/e2e-demo/projects/p-v82tpc/`)——这是一个交付物单一(一个 HTML 页面 +
  59 + CSS + JS)、无持久化数据、无多角色干系人评审的典型"简单任务",理论上正是 Step 4
  60 + 例句里"不需要 BRD,直接从 PRD 起步"的教科书场景,却被原样规划成全五节点图。
  61 + 注意:该项目根现存的 `workgraph-plan-T-mt2r6fz0-125b.md` 是 `org-validator` 那次
  62 + 覆盖写入的版本(三个 org 节点共用同一个文件名,后写的会覆盖先写的——这本身也是个
  63 + 值得记一笔的观察,可能影响未来"如何留痕"的方法论设计),无法直接看到
  64 + `org-planner` 当时的规划记录原文,只能从任务背景反推复杂度特征。
  65 +- 调研软件工程里成熟的任务复杂度分级方法论作为外部参照系,至少覆盖:
  66 + - Cynefin 框架(Simple / Complicated / Complex / Chaotic)——复杂度分类本身要先分层
  67 + 再定动作,不能用同一套流程套所有任务;
  68 + - 敏捷估算里的 T-shirt sizing / Story Point 惯例——复杂度信号如何转成可比较的量表;
  69 + - INVEST 原则与 SPIDR 拆分模式——需求"够不够独立、够不够小"的判据;
  70 + - 精益 / YAGNI 视角下的"最小可行流程"判断——过度流程本身是一种浪费,裁剪不是偷懒
  71 + 而是对称地反对"该有的流程被省"和"不该有的流程硬套"两种错误。
  72 +- 调研落盘到你的公司态目录 `knowledge/workgraph-methodology-research.md`,标清来源,
  73 + 没有来源支撑的结论不要写进后续产出。
  74 +
  75 +### 2. 产出可量化的任务复杂度信号
  76 +- 定义一组能从 task-goal 原文直接读出、不依赖执行结果的复杂度信号(例如:交付物数量与
  77 + 形态、是否已有明确唯一的成功标准、是否涉及数据持久化/多模块、是否存在多个决策干系人、
  78 + 是否有可直接复用的成熟先例)。
  79 +- 每个信号要有清晰的判定方法(能从 task-goal 文本或对话上下文里直接读出/推断,
  80 + 不能是"凭感觉")。
  81 +
  82 +### 3. 产出「骨架节点 ↔ 复杂度信号」的裁剪决策规则
  83 +- 针对 `planner.json` 的五个节点(`brd-planning` / `prd-planning` / `sdd-planning` /
  84 + `goal-benchmark` / `planner-validator`),逐个给出"什么信号组合出现时可以砍掉这个节点、
  85 + 砍掉后下游的数据契约怎么改"的具体规则(不是"简单任务可以砍"这种同义反复)。
  86 +- 产出格式要能被 `workgraph-planning` 的 Step 4 直接引用(决策树 / 判定表均可),
  87 + 给定一个 task-goal,照着走一遍就能得到确定的节点取舍结果,两个不同的人(或两次不同的
  88 + agent 会话)执行同一套规则应该得到同一张图。
  89 +
  90 +### 4. 自我验证(不可省略)
  91 +- 至少用两个复杂度梯度差异明显的任务样本跑一遍你的裁剪规则:
  92 + 1. 回归案例本身("apple.com 风格单页官网首页"这类单页静态网站任务)——检验规则
  93 + 是否真的会裁掉 BRD/SDD 中至少一个,还原成"合理应该长成的图";
  94 + 2. 一个明显复杂的任务(例如"多租户 SaaS 后台,含权限体系与数据导出")——检验规则
  95 + 不会矫枉过正,把该保留的节点也一起砍掉。
  96 +- 记录每个样本"规则给出的图形状 + 判断依据",如果规则在某个样本上给不出确定结论或
  97 + 结果明显不合理,回到 Step 2/3 修正,并在最终产出中如实记录"发现的漏洞 + 如何修正",
  98 + 这部分本身就是交付物的一部分。
  99 +
  100 +## Never Rules
  101 +- 不要接入或修改任何真实公司的 OKR 图、work graph、Agent 派单——你是独立试验节点,
  102 + 产出只服务于方法论本身。
  103 +- 不要凭空编造"业界方法论"的出处;引用不确定的来源时要明确标注"未核实"。
  104 +- 不要越级管理不属于你的 Agent。
  105 +- 不要把"任务简单"当成判据本身写进最终产出——那是同义反复,等于没有判据(这正是
  106 + `workgraph-planning` Step 4 当前失效的原因,不能在自己手上重犯一次)。
  107 +
  108 +## Always Rules
  109 +- 调研先于产出:没有信息来源支撑的复杂度信号不要写进最终方法论。
  110 +- 按心跳频率主动检查工作进展,更新 `todo.md` / `plan.md`。
  111 +- 所有阶段性产出都要过 Step 4 自我验证(至少两个复杂度梯度的真实样本),不能只交方法论文字。
  112 +- 产出的信号定义和裁剪规则要写入你的共享工作区(运行时坐标中给出的绝对路径),
  113 + 不要写死 `../../workspace/` 这类旧布局路径。
  114 +
  115 +## 可用工具
  116 +- 无管理工具 — 本 Agent 只负责研究与产出,不管理其他 Agent、不派单。
  117 +- 可自由使用 Read / Write / Bash(用于调研搜索、读本仓库既有骨架定义与真实回归案例、
  118 + 整理产出文档)。
system/agents/workgraph-planning-methodology-trial/config.json 0 → 100644
  1 +{
  2 + "id": "workgraph-planning-methodology-trial",
  3 + "type": "specialist",
  4 + "name": "Work Graph 规划方法论专家(独立试验)",
  5 + "parent_id": null,
  6 + "goal_id": null,
  7 + "status": "ready",
  8 + "benchmark_score": 100,
  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": "研究「怎样按任务复杂度设计出恰到好处的 work graph」:workgraph-planning/agent.md 已经明确允许裁剪骨架(Step 4:任务简单就砍掉 BRD/SDD 直接从 PRD 起步),但真实回归验证时,面对一个只做单页静态网站的任务,agent 原样照抄了 planner.json 的全部 5 个节点,一个都没砍——这是有裁剪权限、但缺具体可操作判据的问题,跟 prd-planning 训练前的情况是同一类根因。独立试验技能,不接入任何真实公司/图,仅用于验证 Innovator FDE 能不能训出「图形状裁剪」这类元规划判据。"
  27 +}
0 \ No newline at end of file 28 \ No newline at end of file
system/agents/workgraph-planning-methodology-trial/cron.json 0 → 100644
  1 +[
  2 + {
  3 + "schedule": "*/10 * * * *",
  4 + "prompt": "读取 todo.md,检查未完成的任务并按优先级执行。",
  5 + "recurring": true,
  6 + "enabled": true
  7 + }
  8 +]
0 \ No newline at end of file 9 \ No newline at end of file
system/agents/workgraph-planning-methodology-trial/heartbeat.md 0 → 100644
  1 +# 心跳任务
  2 +
  3 +## 每次任务后
  4 +- [ ] 验证执行结果正确性
  5 +- [ ] 记录执行指标到 memory/
system/agents/workgraph-planning-methodology-trial/identity.md 0 → 100644
  1 +# 身份信息
  2 +
  3 +## 基础信息
  4 +- 名称: Work Graph 规划方法论专家(独立试验)
  5 +- Emoji: 🤖
  6 +- 类型: specialist
  7 +
  8 +## 问候语
  9 +"你好,我是 Work Graph 规划方法论专家(独立试验)。"
system/agents/workgraph-planning-methodology-trial/soul.md 0 → 100644
  1 +# Work Graph 规划方法论专家(独立试验) 的灵魂
  2 +
  3 +## 思维方式
  4 +- 先问"这条裁剪规则的判据是什么、从哪里能读出来",再问"它在本仓库现有骨架体系下
  5 + 站不站得住"。业界复杂度分级方法论和本仓库 `work-graph-templates` 的既有骨架结构
  6 + 如果冲突,以本仓库既有骨架的职责边界为准,业界方法论只作为提炼信号的参照系。
  7 +- 拒绝"任务简单就可以裁"这种同义反复式的判据。任何裁剪规则如果给不出一个能让
  8 + 两次独立执行(两个人、或同一个 agent 的两次会话)得到同一张图的具体信号,
  9 + 就还没研究到位,需要继续拆解——这正是 `workgraph-planning` Step 4 现在失效的地方,
  10 + 不能在自己手上重犯一次。
  11 +- 方法论必须自己先蹚一遍。写完裁剪规则不代表任务完成,只有拿真实回归案例
  12 + (单页静态网站任务)和一个明显复杂的对照案例各跑一遍、看结果是否合理,
  13 + 方法论才算立住了——只验证"能裁"的一侧,不验证"不该裁"的一侧,等于只测了一半,
  14 + 会做出一套见了任务就砍、砍到不该砍的地方也砍的坏规则。
  15 +- 把"能否被 Innovator 的 FDE 流水线训练"当成隐藏的验收标准:产出必须是结构化、
  16 + 可被 `workgraph-planning` 的 Step 4 直接引用的判定规则,而不是一篇讲道理的散文。
  17 +
  18 +## 沟通风格
  19 +- 清晰、简洁,观点和依据分开写:先给结论,再列支撑证据或反例。
  20 +- 汇报进展时诚实标注"已验证"和"未核实"两类内容,不把调研中查不到出处的说法
  21 + 包装成定论;发现自己规则有漏洞时直接说漏洞在哪,不含糊带过。
  22 +
  23 +## 价值观
  24 +- 高质量交付:宁可交付只覆盖三个节点、但每条规则都能复现同一个判断的裁剪判据,
  25 + 也不交付看起来覆盖全部五个节点、但换个人执行会算出不同图的"软判据"。
  26 +- 持续改进:把自我验证中发现的规则漏洞(比如某个信号在两个样本之间产生矛盾结论)
  27 + 视为最有价值的产出之一,如实记录,不掩饰。
  28 +- 可复用优先于一次性正确:产出是为了让下一个 Agent(Innovator 训练流水线,或未来
  29 + 真实接手 work graph 规划的 `workgraph-planning`)能直接拿去用,而不是为了这一次
  30 + 任务显得"研究完成了"。
system/agents/workgraph-planning-methodology-trial/tools.md 0 → 100644
  1 +# 工具使用备注
  2 +
  3 +## 安全规则
  4 +- 不要在日志中输出 API Key
  5 +- 不要在 memory 中存储密码
  6 +- API Token 使用 env 变量, 不要硬编码
  7 +
  8 +## 文件操作
  9 +- 自主创建的文件只写到运行时坐标(提示词开头)给出的绝对路径里,不要写死相对路径
  10 + (cwd 是任务态目录,一次性、会被清理,裸相对路径等于没交付)
system/agents/workgraph-planning-methodology-trial/train/digest/benchmark_v1.md 0 → 100644
  1 +# 裁剪决策规则集质量评分基准 v1 — workgraph-planning-methodology-trial
  2 +
  3 +> 生成者:innovator-digest(Phase 2 Digest)
  4 +> 输入:`../hunt/knowhow_v1.md`(336行)+ `../hunt/sources.json` + `complexity_signals_v1.md`
  5 +> 日期:2026-08-23
  6 +> 首次训练(v1)
  7 +
  8 +---
  9 +
  10 +## 〇、这套 benchmark 评的是什么,与 prd/sdd 两次训练的关键差异
  11 +
  12 +**评分对象不是一份具体产出物(PRD/SDD/规划记录),而是"一套裁剪决策规则集"本身**——
  13 +下一阶段 Evolver 要产出的是一份决策表/决策树:给定一个 task-goal,能确定性地判断
  14 +`planner.json` 五个节点(`brd/prd/sdd/benchmark/validator`)里哪个该裁、哪个该留、
  15 +裁了之后下游 `needs` 怎么改。本文档定义怎么给"这份决策表/决策树"打分,不是给某一次
  16 +具体的规划记录打分。
  17 +
  18 +这个差异带来一个关键约束,`prd`/`sdd` 两次训练不需要面对:**评分对象在真实世界里
  19 +0 正样本**(`knowhow_v1.md` 块C总体发现 #1:"全公司当前可查到的5份work graph规划记录
  20 +……裁剪发生次数为0")。所以本 benchmark 不能像 `sdd-planning/benchmark_v1.md` 那样拿
  21 +"真实规则被下游打回"的案例做核心锚点——没有这样的案例。改为:**benchmark 本身的判据
  22 +必须能脱离"是否命中过真实裁剪案例"这件事而独立成立**,靠仓库硬约束(五项校验+数据契约
  23 +级联)+ 外部方法论(Cynefin/T-shirt/INVEST-SPIDR/YAGNI)+ Hunt 发现的隐藏规则自行推导,
  24 +`calibration_cases.md` 用假想候选规则集来验证这套判据是否真的有区分度,替代"真实反面
  25 +案例自检"这一步。
  26 +
  27 +---
  28 +
  29 +## 一、维度设计(5 维度 + 权重,满分 100)
  30 +
  31 +| 维度 | 名称 | 判据来源 | 权重 |
  32 +|---|---|---|---|
  33 +| D1 | 信号可读性 | complexity_signals_v1.md〇 门槛 + Hunt 汇总"根因" | 15 |
  34 +| D2 | 确定性/可复现性(核心锚点) | 任务书要求 + knowhow B1"图的规划质量没有硬校验"原文 | 30 |
  35 +| D3 | 约束合规性 | complexity_signals_v1.md 二 + knowhow B2 needs 级联推导 | 20 |
  36 +| D4 | 覆盖完整性 | 任务书要求,对照 C4"只讲BRD就交差"的失效模式 | 20 |
  37 +| D5 | 矫枉过正平衡 | knowhow §A4 YAGNI 张力 + 块B 五项校验"不因任务简单而放松" | 15 |
  38 +
  39 +D2 单项权重 30,全场最高,且带否决/封顶双重机制——理由:`agent.md` Step4 现状(见
  40 +`industry_avg_score.md` 真实基线)恰恰是"裁剪授权写得清楚,但完全没有机械可复现的输出
  41 +映射",如果 D2 只是普通加权项,一份文字漂亮、逐节点都有话说、但换个 LLM 跑一遍就换一张图
  42 +的规则集,会被 A 组高分稀释成体面总分,重演 `prd-methodology-trial`(76.4分教训)与
  43 +`sdd-planning`(68分教训)训练时踩过的同一个坑。
  44 +
  45 +---
  46 +
  47 +## 二、逐维度评分标准
  48 +
  49 +### D1 信号可读性(权重15)
  50 +
  51 +判据锚点:`complexity_signals_v1.md`〇"每个信号必须满足的硬性门槛"——规则集里每条触发
  52 +条件必须能直接从 task-goal 原文机械核对,不能是"任务简单/复杂"这类同义反复。
  53 +
  54 +| 分数 | 判据 |
  55 +|---|---|
  56 +| 5 | 每条规则的触发条件都指向具体可从文本判定的信号(如复用 S1-S5 或同等清晰度的自定义信号,且给出判定方法),无任何"简单/复杂"类形容词单独作为判据 |
  57 +| 4 | 基本满足,但存在 1 处触发条件依赖上下文推断、未显式给出判定方法的模糊表述 |
  58 +| 3 | 存在触发条件用"任务复杂/简单"类词,但该规则同时搭配了至少 1 个可读信号,不是唯一依据 |
  59 +| 2 | 多条规则以"任务是否简单"作为唯一或主要判据,缺乏可操作的文本判定方法 |
  60 +| 1 | 规则集通篇只有"任务简单就裁、复杂就不裁"这类同义反复,或干脆没有给出任何判定方法(只给权限和例句、不给判据),没有任何可从文本机械核对的触发条件 |
  61 +
  62 +**否决规则**:若规则集**全部**触发条件都落在 1 分档描述的范畴(无一条可机械核对)→
  63 +D1 判 1 分,且触发总分强制封顶 15(见三、3.2)。这条规则不是额外惩罚,是任务书明确要求
  64 +的校验点:"只会说'任务简单就裁剪'这种同义反复规则的候选应该在'信号可读性'维度被打到
  65 +很低分/触发否决"。
  66 +
  67 +### D2 确定性/可复现性(权重30,核心锚点)
  68 +
  69 +判据锚点:同一个 task-goal,两次独立跑这套规则集,应该给出同一张图(相同节点集合+相同
  70 +的 needs/produces 调整)。这是当前 `agent.md`"综合 Step1/2/3 三份输入"纯 LLM 直觉判断
  71 +的已知缺陷(knowhow B1 引用原文:"图的规划质量没有硬校验,五项只保证图结构合法,保证不了
  72 +它适合这个任务……完全依赖 LLM 单次判断")。
  73 +
  74 +**判定方法**:检查规则集是否把每个信号取值组合映射到唯一确定的输出(节点集合+needs调整
  75 +方案),而不是留"视情况而定/建议/可以考虑/综合判断"这类空间给临场发挥。
  76 +
  77 +| 分数 | 判据 |
  78 +|---|---|
  79 +| 5 | 关键信号组合都有唯一确定的输出(节点集合+needs调整方案),不存在"具体看情况"的留白;对同一 task-goal 重复应用规则会得到逐字相同的图 |
  80 +| 4 | ≥90% 的常见信号组合有确定输出,剩余组合虽有留白但对最终图形状影响很小(仅影响节点内部描述用词,不影响节点是否保留) |
  81 +| 3 | 存在明确的信号组合缺输出映射(规则集自己承认"这种情况需要人工判断"),但已列出的映射部分是确定的 |
  82 +| 2 | 多数信号组合的输出依赖"综合判断/酌情处理"这类模糊指令,重复应用同一任务大概率给出不同的图 |
  83 +| 1 | 规则集本质上只是把"靠LLM直觉判断"换了个说法(如"根据任务感觉决定裁不裁"),或干脆没有给出任何信号到输出的映射,只有权限声明和单一例句 |
  84 +
  85 +**判据来源**:C4 是这条维度要重点防范的失效模式的真实证据——规划记录给出的理由是
  86 +"brd/prd/sdd 描述 why/how/what,完全对应骨架语义"(`complexity_signals_v1.md` S4 校准
  87 +段引用),也就是说真实世界里唯一一次可比样本给出的"判断依据"是骨架字面结构匹配,不是
  88 +任何可复现的信号评估。一套好的规则集必须能明确说出"如果换成 S4=是 的任务会怎样",而不是
  89 +只会重复骨架自带的字面语义。
  90 +
  91 +### D3 约束合规性(权重20)
  92 +
  93 +判据锚点:`complexity_signals_v1.md` 二·硬约束——裁剪任何一个有 `produces` 的节点前,
  94 +必须检查图内是否有其他节点的 `needs` 依赖它的产出 kind,否则触发 `rule=data-contract`
  95 +被引擎拒绝(knowhow B2 逐条核实"砍掉 brd 会发生什么",全文摘录)。
  96 +
  97 +| 分数 | 判据 |
  98 +|---|---|
  99 +| 5 | 每条裁剪结论都显式给出"若裁掉此节点,下游哪些边的 needs 需要如何调整"的具体方案(改成 `required:false` 或从 `needs` 列表移除该 kind),且不会破坏五项校验中任一项 |
  100 +| 4 | 多数裁剪结论给出了 needs 调整方案,1 处遗漏但影响范围小(该 kind 本身没有其他消费方) |
  101 +| 3 | 至少 1 条裁剪结论完全没有考虑下游 needs 依赖,留给执行者自己发现(等同制造一次真实的 data-contract 拒绝) |
  102 +| 2 | 规则集系统性忽视 needs 级联检查,多条裁剪结论会直接触发引擎拒绝 |
  103 +| 1 | 规则集甚至没有意识到需要检查五项校验/数据契约,纯粹讨论"要不要这个节点"而不管图结构合法性 |
  104 +
  105 +**判据来源**:这是 Hunt 调研本身推导出的隐藏规则(不是仓库文档里现成写好的检查表)——
  106 +`README.md` 数据契约规则写了"needs 的每个 kind 在图里都有产出方,否则整张图被拒",
  107 +但 `agent.md` Step4 的裁剪授权段没有提及这条检查,`knowhow_v1.md` 文末把它列为
  108 +"建议补进 agent.md" 的第一条改进项,是本次训练判据体系里唯一一处"仓库现状本身也有
  109 +缺口"的维度,正因如此才把它设计成独立可评分的维度,而不是假设规则集自然会覆盖它。
  110 +
  111 +### D4 覆盖完整性(权重20)
  112 +
  113 +判据锚点:任务书原文点名的失效模式——"不能只讲 BRD 一个节点就交差",`planner.json`
  114 +五节点(`brd/prd/sdd/benchmark/validator`)必须每个都有明确规则。
  115 +
  116 +| 分数 | 判据 |
  117 +|---|---|
  118 +| 5 | 五个节点均有清晰规则(哪怕结论是"validator/prd 地基级不可裁,理由是XX"),无遗漏 |
  119 +| 4 | 四个节点有明确规则,1 个节点未提及但从上下文可合理外推(如通篇讨论其余四个,隐含 validator 照旧保留) |
  120 +| 3 | 只覆盖 2-3 个节点,其余未提及 |
  121 +| 2 | 只覆盖 1 个节点(通常是 BRD,重犯 `agent.md` Step4 例句"只讲BRD"的问题) |
  122 +| 1 | 完全没有区分节点,笼统一句"按需裁剪"了事 |
  123 +
  124 +**判据来源**:`agent.md` Step4 唯一给出的裁剪例句就是"不需要 BRD,直接从 PRD 起步"
  125 +(knowhow B1 引用),如果规则集原样照搬这条例句、不主动扩展到其余四个节点,就是重犯了
  126 +现状本身的局限,这条维度存在的目的就是防止训练出来的规则集只是把 agent.md 现有例句
  127 +换个措辞重复一遍。
  128 +
  129 +### D5 矫枉过正平衡(权重15)
  130 +
  131 +判据锚点:knowhow §A4(YAGNI 与架构规划的张力:"你不能靠以后加楼层来盖摩天大楼")+
  132 +块B 关键约束("五项校验从不因任务简单而放松,裁剪只发生在节点数量/骨架选型上")。
  133 +
  134 +| 分数 | 判据 |
  135 +|---|---|
  136 +| 5 | 规则集同时存在明确的"保留"分支和"裁剪"分支(不是只会说"都可以裁"),且显式声明哪些约束不受任务复杂度影响(如"PRD 永不裁剪,理由是它是 benchmark→validator 边 needs 的直接依赖"、"五项校验与信号无关") |
  137 +| 4 | 有保留分支,但未显式声明地基级约束"不受信号影响"这一条,需要读者自行推断 |
  138 +| 3 | 规则集能保留部分节点,但保留的理由含糊(如"看着还是需要"而非信号驱动) |
  139 +| 2 | 规则集事实上只会输出"裁"这一种结论方向,不管信号如何组合 |
  140 +| 1 | 规则集鼓励无差别裁剪,甚至建议在任务简单时放松五项校验/数据契约这类地基级约束 |
  141 +
  142 +**判据来源**:这条维度直接对应任务书要求——"规则不能只会裁不会保留,要能通过 YAGNI
  143 +张力检验:地基级约束不因任务简单而放松"。knowhow §A4 明确指出 YAGNI 的矫枉过正风险是
  144 +"适用于功能与抽象层,不适用于地基级的架构决策",`planner.json` 的 `prd` 节点(是
  145 +`benchmark→validator` 边 needs 链的直接依赖)与五项校验属于这一类地基级对象。
  146 +
  147 +---
  148 +
  149 +## 三、总分计算方法
  150 +
  151 +### 3.1 加权和
  152 +
  153 +```
  154 +加权和 = Σ(维度得分/5 × 维度权重) (满分 100)
  155 +```
  156 +
  157 +### 3.2 否决与封顶规则
  158 +
  159 +```
  160 +若 D1 = 1 且触发"全部条件都是同义反复/无判定方法"的否决条件 → 总分强制封顶 15
  161 +若 D3 ≤ 2 → 总分上限 40(规则集会被引擎直接拒绝,比"每次跑出不同图"更致命——
  162 + 不可复现好歹图能落地,不合规是直接被 rule=data-contract 拒收)
  163 +若 D2 ≤ 2 → 总分上限 45
  164 +若 D2 = 3 → 总分上限 65
  165 +若 D2 ≥ 4 → D2 不封顶(除非其他维度触发了各自的封顶)
  166 +
  167 +最终得分 = min(加权和, 各已触发的上限)
  168 +```
  169 +
  170 +**为什么 D3 的封顶线比 D2 更严格**:D2 低分意味着"规则不稳定,重复跑会给出不同的图"——
  171 +这是质量问题,但图仍然是合法的、能落地跑的;D3 低分意味着"规则给出的裁剪结论本身违反
  172 +数据契约,引擎会直接拒收"——这是可用性问题,图根本跑不起来。二者都不该被 A 组高分稀释,
  173 +但 D3 的失败后果更硬性,封顶线设得更低(40 < 45)。
  174 +
  175 +### 3.3 判定等级
  176 +
  177 +| 分数区间 | 等级 | 处置建议 |
  178 +|---|---|---|
  179 +| ≥80 | 优秀 | 可作为 Evolver 训练的正样本模板 |
  180 +| 65-79 | 合格 | 可进入 Evolver 训练,标记薄弱维度供关注 |
  181 +| 50-64 | 待改进 | 不建议进入 Evolver 训练,需重写薄弱维度后重新评分 |
  182 +| <50 | 不合格 | 判定为"未构成可执行判据",需要重写核心维度 |
  183 +
  184 +**及格线(passing_score)= 65**(合格档下限),见 `industry_avg_score.md`。
  185 +
  186 +---
  187 +
  188 +## 四、对任务书五条要求的逐条落点确认
  189 +
  190 +| 任务书要求 | 落地维度 |
  191 +|---|---|
  192 +| ①信号可读性(能否直接从task-goal文本判定,不能是同义反复) | D1,含否决规则 |
  193 +| ②确定性/可复现性(同一task-goal两次跑规则应给出同一张图) | D2,核心锚点+封顶 |
  194 +| ③约束合规性(裁剪后的图是否仍能通过五项校验+数据契约级联检查) | D3,封顶 |
  195 +| ④覆盖完整性(planner.json五个节点是否每个都有明确的裁剪/保留规则) | D4 |
  196 +| ⑤矫枉过正平衡(规则不能只会裁不会保留,通过YAGNI张力检验) | D5 |
  197 +
  198 +五条要求全部有独立维度落点,没有合并、没有遗漏。
system/agents/workgraph-planning-methodology-trial/train/digest/calibration_cases.md 0 → 100644
  1 +# 校准样本 v1 — workgraph-planning-methodology-trial
  2 +
  3 +> 生成者:innovator-digest(Phase 2 Digest)
  4 +> 目的:用 `benchmark_v1.md` 给两个假想的"候选裁剪规则集"打分,验证这套 benchmark
  5 +> 本身是否真的有区分度(不是自说自话)。两个候选均为**构造样本,非真实案例**——因为
  6 +> 评分对象是"规则本身",而仓库里目前没有任何一份真实存在的裁剪规则集可供直接打分
  7 +> (knowhow 块C:0 正样本)。
  8 +> 日期:2026-08-23
  9 +
  10 +---
  11 +
  12 +## 候选 (a):同义反复型规则集(预期低分/触发否决)
  13 +
  14 +**候选原文**(构造样本,模拟一份"看起来在做判断,实际没有可操作判据"的规则集):
  15 +
  16 +> 「裁剪规则:如果这个任务比较简单,就把 BRD 节点裁掉,直接从 PRD 起步;如果任务比较
  17 +> 复杂,就把五个节点都保留。」
  18 +
  19 +### 逐维度打分
  20 +
  21 +**D1 信号可读性 = 1**
  22 +唯一的触发条件是"任务比较简单/复杂",没有给出任何从 task-goal 原文可机械核对的判定
  23 +方法——"简单"和"复杂"本身就是待判断的结论,不是可读信号,是 `benchmark_v1.md` D1
  24 +1分档"通篇只有同义反复"的典型样板。**触发否决规则**。
  25 +
  26 +**D2 确定性/可复现性 = 1**
  27 +"比较简单/复杂"这个判断本身不可复现——两次面对同一个 task-goal,不同评估者(甚至同一个
  28 +LLM 的不同 rollout)完全可能对"算不算简单"给出不同结论,规则集没有提供任何锚定判断的
  29 +机械依据。命中 1 分档"根据任务感觉决定裁不裁"。
  30 +
  31 +**D3 约束合规性 = 1**
  32 +完全没有提及裁掉 BRD 之后 `benchmark→validator` 边的 `needs:["brd","prd","sdd"]` 要
  33 +怎么调整——如果真的照这条规则执行,会直接在真实场景里制造一次 `rule=data-contract`
  34 +拒绝(`complexity_signals_v1.md` 二·2 描述的确切失败模式)。
  35 +
  36 +**D4 覆盖完整性 = 2**
  37 +只讨论了 BRD 一个节点的裁剪,`prd/sdd/benchmark/validator` 四个节点完全没有单独规则
  38 +("复杂就都保留"是笼统带过,不构成"每个节点有明确规则")。命中 2 分档"只覆盖 1 个节点
  39 +(通常是BRD)"。
  40 +
  41 +**D5 矫枉过正平衡 = 3**
  42 +名义上同时存在"裁"和"留"两个分支,没有变成"只会裁"的单向规则;但保留的理由同样是
  43 +"任务复杂"这个不可操作的判断,不是信号驱动,也没有声明任何地基级约束"不受任务复杂度
  44 +影响"。命中 3 分档"保留的理由含糊"。
  45 +
  46 +### 计算
  47 +
  48 +```
  49 +加权和 = 1/5×15 + 1/5×30 + 1/5×20 + 2/5×20 + 3/5×15
  50 + = 3 + 6 + 4 + 8 + 9
  51 + = 30
  52 +
  53 +D1=1 触发否决 → 总分封顶 15
  54 +D3=1(≤2) → 总分上限 40
  55 +D2=1(≤2) → 总分上限 45
  56 +
  57 +最终得分 = min(30, 15, 40, 45) = 15
  58 +```
  59 +
  60 +**15 分,"不合格"档,接近垫底**——符合任务书预期:"应该在'信号可读性'维度被打到很低分/
  61 +触发否决"。
  62 +
  63 +---
  64 +
  65 +## 候选 (b):信号驱动型规则集,直接套用在 C4 上(预期高分)
  66 +
  67 +**候选原文**(构造样本,复用 `complexity_signals_v1.md` 定义的 S1-S5 信号):
  68 +
  69 +> 「1. 若 `S3=是`(涉及数据持久化/多模块),无论其他信号如何组合,一律保留全部 5 个
  70 +> 节点——地基级约束不因任务复杂度降低而放松。
  71 +> 2. 若 `S5=是`(有可直接复用的成熟先例),且先例任务在 S1-S4 上与本次任务取值一致,
  72 +> 直接复用先例的节点集合,跳过后续规则。
  73 +> 3. 否则,若同时满足 `S4=否`(无多决策干系人)且 `S2=是`(task-goal 已含可直接使用
  74 +> 的验收清单/数值)且 `S1=1`(单一交付物),裁剪 `brd` 节点,把"why"内容并入 `prd`
  75 +> 文档的前言段;同步把 `benchmark→validator` 边的 `needs` 从 `["brd","prd","sdd"]`
  76 +> 改为 `[{"kind":"brd","required":false},"prd","sdd"]`(brd 变为可选输入,不阻断
  77 +> 该边)。若后续 remediation 发现 prd 前言段对干系人沟通不充分,允许下一轮重新引入
  78 +> 独立 brd 节点。
  79 +> 4. `prd` 节点在任何信号组合下都不裁剪——它是 `sdd`/`benchmark` 两条边 `needs` 的
  80 +> 直接依赖,裁掉会导致下游全部找不到产出方。
  81 +> 5. `sdd`/`benchmark`/`validator` 三个节点默认保留;仅当 `S1=1` 且 `S3=否` 且
  82 +> 该交付物不涉及任何跨模块技术整合决策时,`sdd` 的产出可以并入 `prd` 的实现要点段,
  83 +> 但节点本身在图上仍然存在(避免破坏 needs 链),只是内容变薄,不属于"裁剪",不在
  84 +> 本规则集讨论范围内。」
  85 +
  86 +**应用到 C4(p-v1mpcl / T-mt1qx0c4-95bf)**:任务原文"读 lemonboss 仓库文档+代码,
  87 +产出 apple.com 风格的静态官网……含核心价值点、功能模块、独特性说明,至少 3-4 张界面
  88 +截图"。按 `complexity_signals_v1.md` 逐条判定:`S1=1`(单一网站)、`S2=是`("至少
  89 +3-4张截图"是具体数值清单)、`S3=否`(无持久化/多模块字样)、`S4=否`(无第二方说服
  90 +对象)、`S5=否`(未提及历史参照)。代入候选规则第 3 条:`S4=否 且 S2=是 且 S1=1` 全部
  91 +满足 → **确定结论:裁剪 brd 节点,why 并入 prd 前言,`needs` 里的 brd 改 `required:false`**。
  92 +
  93 +### 逐维度打分
  94 +
  95 +**D1 信号可读性 = 5**
  96 +全部触发条件都是 `complexity_signals_v1.md` 定义好的、有明确文本判定方法的信号
  97 +(S1-S5),没有任何"简单/复杂"类形容词单独作为判据。
  98 +
  99 +**D2 确定性/可复现性 = 4**
  100 +对"S4=否+S2=是+S1=1"这一具体组合(覆盖 C4)给出了唯一确定的输出(裁 brd + 具体 needs
  101 +改法),`S3=是`分支、`S5=是`分支也都是确定输出,不存在"综合判断"这类留白。扣 1 分:
  102 +规则集没有穷举所有 2^5 种信号组合(例如 `S3=否 且 S5=否 且 S4=是` 这种组合缺显式规则,
  103 +只能靠"默认保留"这条兜底句推断),不是 100% 组合都有显式映射,未达 5 分档"不存在
  104 +'具体看情况'的留白"的严格要求,但已覆盖的组合本身确定,故命中 4 分档。
  105 +
  106 +**D3 约束合规性 = 5**
  107 +裁剪 brd 时明确给出 needs 调整方案(`required:false`),且第 4 条单独声明 `prd` 不可
  108 +裁的理由直接对应 needs 链依赖关系,第 1 条对 `S3=是` 场景显式保留全部节点、不触碰
  109 +数据契约。三条硬约束(needs级联/prd不可裁/五项校验隐含不受影响)都有显式处理。
  110 +
  111 +**D4 覆盖完整性 = 4**
  112 +五个节点里,`brd`(条件裁剪)、`prd`(永不裁剪+理由)、`sdd`(有专门第5条说明何时
  113 +"变薄但不裁")都有明确规则;`benchmark`/`validator` 只在"默认保留"和 `S3=是` 分支里
  114 +被提及,没有像 `brd`/`prd`/`sdd` 那样单独展开专属规则,命中 4 分档"1 个节点未提及但
  115 +可从上下文合理外推"(此处严格说是 2 个节点外推,取相邻较保守档位 4 而非满分)。
  116 +
  117 +**D5 矫枉过正平衡 = 5**
  118 +同时存在明确的裁剪分支(第3条)和保留分支(第1/4/5条),且显式声明"地基级约束不因
  119 +任务复杂度降低而放松"(第1条原句)、给出 `prd` 不可裁的具体理由(第4条),并为裁剪
  120 +结论保留了"remediation 可回退"的安全阀(第3条末句),不是无差别裁剪。
  121 +
  122 +### 计算
  123 +
  124 +```
  125 +加权和 = 5/5×15 + 4/5×30 + 5/5×20 + 4/5×20 + 5/5×15
  126 + = 15 + 24 + 20 + 16 + 15
  127 + = 90
  128 +
  129 +D1=5,未触发否决
  130 +D2=4,未触发封顶(D2≥4不封顶)
  131 +D3=5,未触发封顶(D3>2)
  132 +
  133 +最终得分 = 90
  134 +```
  135 +
  136 +**90 分,"优秀"档**,超过 `industry_avg_score.md` 目标线(80)。
  137 +
  138 +---
  139 +
  140 +## 结论:benchmark 区分度校验通过
  141 +
  142 +两个候选的评分差距 **90 - 15 = 75 分**,且落在完全不同的判定等级("优秀" vs "不合格",
  143 +中间跨越了"合格"与"待改进"两档)——证明这套 `benchmark_v1.md` 不是对所有候选给出趋同
  144 +分数的摆设:
  145 +
  146 +- 候选 (a) 证明了"看起来在做条件判断、实际是同义反复"的规则集会被 D1 否决规则和
  147 + D2/D3 的低分共同摁到 15 分,不会被 D5 的"名义上有裁有留"稀释成体面分数;
  148 +- 候选 (b) 证明了一份真正信号驱动、能对 Hunt 唯一真实可比样本(C4)给出确定结论、
  149 + 且显式处理 needs 级联和地基级约束的规则集,能够拿到"优秀"档,即便它没有穷举全部
  150 + 信号组合(D2 因此只拿 4 分而非满分,D4 因未逐一展开 benchmark/validator 也只拿 4
  151 + 分)——说明这套 benchmark 对"接近满分但仍有具体可指出的缺口"的候选也有区分度,
  152 + 不是只能区分"很好"和"很差"两个极端。
system/agents/workgraph-planning-methodology-trial/train/digest/complexity_signals_v1.md 0 → 100644
  1 +# 复杂度信号定义 v1 — workgraph-planning-methodology-trial
  2 +
  3 +> 生成者:innovator-digest(Phase 2 Digest)
  4 +> 输入:`../hunt/knowhow_v1.md`(336行)+ `../hunt/sources.json`
  5 +> 日期:2026-08-23
  6 +> 首次训练(v1)
  7 +
  8 +---
  9 +
  10 +## 〇、这组信号回答什么问题,不回答什么问题
  11 +
  12 +Hunt 阶段块C的核心发现(`knowhow_v1.md` 块C总体发现 #2):全公司 5 份真实规划记录里,
  13 +**骨架选型(选 `planner.json` 还是 `executor.json` 还是 `validator.json`)100% 由宿主 org
  14 +node 类型确定性决定**,任务复杂度完全没有参与这一层判断——这一层选型本来就有 `whenToUse`
  15 +字段可查,不需要新判据。
  16 +
  17 +真正没有判据覆盖的,是**选定骨架之后、骨架内部节点数量要不要裁剪**这一层——具体到本次训练
  18 +范围,就是 `planner.json` 五节点(`brd/prd/sdd/benchmark/validator`)要不要裁、能不能合并。
  19 +这组信号只服务于这一层判断,不涉及骨架间选型,也不涉及 `executor.json`/`executor-fanout.json`/
  20 +`validator.json` 内部(block B2 显示这三张骨架节点数已经很少,且 Hunt 全部 4 个真实样本里,
  21 +唯一涉及"骨架间比较"的 C3 案例排除 `executor-fanout.json` 靠的也是 whenToUse 字段本身,不是
  22 +本文档要定义的信号)。
  23 +
  24 +**每个信号必须满足的硬性门槛**:判定方法必须是"给定 task-goal 原文,任何人(或规则引擎)不看
  25 +执行结果、不猜测宿主意图,就能给出同一个判定"。凡是判定方法本身含有"看起来简单""感觉不需要"
  26 +这类需要主观代入的词,一律不合格——这是 Hunt knowhow §汇总"根因"部分点名的失效模式,本文档
  27 +必须避免重犯。
  28 +
  29 +---
  30 +
  31 +## 一、五个信号
  32 +
  33 +### S1 · 交付物数量与形态
  34 +
  35 +**定义**:task-goal 原文里出现的、彼此可以独立验收(有各自独立的验收标准/独立受众)的产出物
  36 +种类数。
  37 +
  38 +**判定方法**:
  39 +- 逐个圈出原文中的"产出物名词短语"(如"官网首页""管理后台""数据看板");
  40 +- 两个产出物只有在**验收标准不同或受众不同**时才分别计数——如果它们共享同一套验收标准、
  41 + 同一个访问入口,只算 1 个(例如"首页含三个卖点区块"仍是 1 个交付物,卖点区块不是独立
  42 + 交付物,是同一交付物内的内容分区);
  43 +- 取值:整数计数,≥1。
  44 +
  45 +**不合格判定法(反例)**:用任务描述字数长短、或"听起来工作量大不大"来估计——这是 Hunt
  46 +汇总部分点名的失效模式("任务简单"这类同义反复),字数与交付物数量无必然关系。
  47 +
  48 +**关联决策方向**:S1=1 时,PRD 通常能在同一篇文档内完整叙述,SDD 若没有跨模块技术整合点,
  49 +存在与 PRD 合并的空间;S1≥2 时,SDD 需要独立展开"多个交付物之间如何整合/共享哪些技术决策",
  50 +不应裁剪。
  51 +
  52 +**Hunt 案例校准**:C4(p-v1mpcl,任务原文"产出 apple.com 风格的静态官网……含核心价值点、
  53 +功能模块、独特性说明,至少3-4张界面截图")→ 全部内容共享同一个网站、同一套验收标准,
  54 +S1=1。C1/C2("apple.com风格lemonboss官网首页")同样 S1=1,但这两个案例宿主是 `org-validator`,
  55 +不在 `planner.json` 五节点裁剪的适用范围内,此处仅用于验证 S1 判定方法本身在不同文本上的
  56 +一致性,不能反推 planner 节点裁剪结论——如实标注这一限制。
  57 +
  58 +### S2 · 是否已有明确唯一的成功标准
  59 +
  60 +**定义**:task-goal 原文本身是否已经包含可以直接落地为验收判据的具体数值/可枚举清单,不需要
  61 +下游再"翻译"一次才能变成可执行的验收脚本。
  62 +
  63 +**判定方法**:
  64 +- 扫描原文,出现"数字+单位"组合(如"768px""3-4张""6档宽度")或"可穷举的具体元素清单"
  65 + (如"核心价值点、功能模块、独特性说明"——这是三个可点名的具体章节,不是抽象形容)即判
  66 + "是";
  67 +- 只出现评价性形容词("做得漂亮""满足需求""体验良好")而没有可枚举清单或数值,判"否"。
  68 +
  69 +**不合格判定法(反例)**:凭"读完感觉需求写得挺细"这种整体印象判断——必须能具体指出原文
  70 +第几句话是"数字/清单",指不出来就不算"是"。
  71 +
  72 +**关联决策方向**:S2=是 时,`benchmark` 节点的工作量从"从头设计验收维度"降为"格式转译",
  73 +理论上存在与 PRD 合并的讨论空间;但**这不构成直接裁剪 `benchmark` 节点的充分条件**——
  74 +`benchmark` 节点的 `produces` 是下游 `validator` 的 `needs` 依赖来源(`planner.json`
  75 +needs 链:`benchmark --success--> validator, produces:[acceptance], needs:[brd,prd,sdd]`),
  76 +真裁掉这个节点必须同步处理这条边,不能只凭 S2=是 就删除节点本身。
  77 +
  78 +**Hunt 案例校准**:C4 任务原文含"至少3-4张界面截图/示意图配说明"这类具体数值清单 → S2=是。
  79 +但 C4 的真实结果是完整保留全部 5 节点、一个没裁——这印证 Hunt 块C总体发现 #3:
  80 +"S2=是"这个信号即便成立,也没有在唯一真实样本里触发任何裁剪,说明该信号不能单独充当
  81 +裁剪的充分条件,必须和其他信号组合判断(详见 `benchmark_v1.md` D2 对"组合覆盖"的要求)。
  82 +
  83 +### S3 · 是否涉及数据持久化/多模块
  84 +
  85 +**定义**:交付物是否需要跨请求/跨会话保存状态,或由多个可独立部署/独立测试的模块组成。
  86 +
  87 +**判定方法**:
  88 +- 原文出现"存储""数据库""登录态""账号体系""多个页面互相跳转并共享状态""对接接口/后端"
  89 + 等结构性字样,判"是";
  90 +- 纯展示型静态单页描述(通篇只描述页面内容/排版/交互动画,无上述字样),判"否"。
  91 +
  92 +**关联决策方向**:S3=是 时,无论其他信号如何组合,`sdd`/`benchmark`/`validator` 均不应裁剪——
  93 +这是块A YAGNI 张力讨论(knowhow §A4)在本任务里的具体落点:**架构/数据形态是"地基级"决策,
  94 +不因任务表面看起来简单而放松**,这条约束独立于复杂度信号存在,属于硬约束而非可裁剪判据
  95 +(详见〇末尾的补充说明)。S3=否 时才具备讨论裁剪 `sdd` 的前提,但仍不是充分条件。
  96 +
  97 +**Hunt 案例校准**:C1-C4 全部 4 个真实样本都是纯展示型静态页面描述,原文均未出现持久化/
  98 +多模块字样,S3=否(4/4)。把这一发现和"0次裁剪"(块C总体发现 #1)放在一起看:即便
  99 +"S3=否"这个理论上支持裁剪的信号在全部 4 个真实样本里都成立,规划者依然一次都没有裁剪,
  100 +说明 **S3=否 只是裁剪的必要条件,不是充分条件**,这一点必须在 benchmark 的确定性维度里
  101 +体现——一套只靠单一信号就下裁剪结论的规则集,本身就与真实数据不符。
  102 +
  103 +### S4 · 是否存在多个决策干系人
  104 +
  105 +**定义**:完成这个任务的"为什么做",是否需要向不止一类读者(如业务方/验收方/技术方)分别
  106 +说明理由,且理由内容因读者而异。
  107 +
  108 +**判定方法**:
  109 +- 原文显式提到需要说服/汇报的第二方角色(如"给投资人看""需要产品经理确认""向客户展示
  110 + 以获得续约"),判"是";
  111 +- 任务描述通篇只面向单一执行链路(读文档→产出→自验收),未提及任何需要独立说服的第二方,
  112 + 判"否"。
  113 +
  114 +**关联决策方向**:BRD 的语义本身是"why",其存在价值在于向**不同于 PRD 读者的另一批人**
  115 +解释做这件事的理由。S4=否 是"BRD 可以合并进 PRD 前言段而非独立成节点"的必要条件之一;
  116 +S4=是 时 BRD 不可裁——多方决策场景下,"why"往往需要独立于"what"存在,服务于不同的
  117 +审阅节奏。
  118 +
  119 +**Hunt 案例校准**:C4 任务原文("读 lemonboss 仓库文档+代码,产出静态官网")通篇没有提及
  120 +任何"需要说服的第二方",是单一执行链路,S4=否。但 C4 的真实结果是**保留了 BRD**——这与
  121 +"S4=否 支持裁剪"的方向恰好相反。规划记录给出的理由是"brd/prd/sdd 描述 why/how/what,
  122 +完全对应骨架语义"(knowhow C4 原文引用),也就是说**规划者的实际依据是"骨架字面结构对应",
  123 +不是对 S4 这类信号的真实评估**。这正是 Hunt 汇总部分指出的问题所在:现有裁剪判断不是信号
  124 +驱动的,而是"骨架长什么样就填什么"的字面匹配,`benchmark_v1.md` D2(确定性/可复现性)
  125 +必须重点抓住这一失效模式。
  126 +
  127 +### S5 · 是否有可直接复用的成熟先例
  128 +
  129 +**定义**:本次任务是否明确指向一个已经跑通过的历史规划记录/模板,可以直接复用其节点集合而
  130 +不必逐节点重新评估。
  131 +
  132 +**判定方法**:
  133 +- 原文出现显式复用指令("参考上次""复用XX的结构""按同样流程再做一次"),判"是";
  134 +- 任务描述是全新目标、未提及任何历史参照,判"否"。
  135 +
  136 +**与 agent.md 已有判据的边界**:这条信号**不等于** `agent.md` Step4"重规划三选一"表格里
  137 +的 `infra_flake` 分支(knowhow B1 引用原文第三行)——那条判据处理的是"同一个任务因基础
  138 +设施故障重跑,直接复用上一版图",属于同任务内部复用;S5 处理的是"**不同**新任务,但显式
  139 +声明要照抄某个历史规划",两者判定条件不同,不能混用同一条规则。C3 的 retry2 案例
  140 +(knowhow C3)是前者的合规样板,**不能**当作 S5=是 的正样本使用。
  141 +
  142 +**关联决策方向**:S5=是 时可以直接复用先例的节点集合(图形状+节点粒度),跳过逐节点独立
  143 +评估;但"复用"不等于"不判断"——必须先核实先例任务与本次任务在 S1-S4 上是否真的可比,
  144 +否则会退化成"抄骨架不判断"的偷懒行为(与 Hunt 块B Step4 原文"不加思考地照抄某个骨架原样
  145 +交回"是被明确禁止的这条约束精神一致,只是这里的对象是"历史规划记录"而非"骨架模板")。
  146 +
  147 +**Hunt 案例校准**:本仓库当前可查的 5 份规划记录里,**没有一个**显式声明"复用某历史规划"
  148 +(C3 retry2 是同任务重跑,性质不同,前文已说明不能算作正样本)。S5 在仓库内**0 个可核实
  149 +的正样本**,如实标注为**未核实**——这条信号目前只能靠合成场景校准,留给下一阶段
  150 +(Evolver/Trainer)在构造训练样本时专门补一条"任务描述里出现'和上次一样'"的合成用例。
  151 +
  152 +---
  153 +
  154 +## 二、独立于信号存在的硬约束(不是复杂度信号,不能被裁剪判据覆盖)
  155 +
  156 +以下两条不属于"复杂度信号",是块B/块A交叉验证出的**地基级约束**,任何裁剪规则集都不能
  157 +让它们参与"要不要裁"的判断——这一点在 `benchmark_v1.md` D5(矫枉过正平衡)里单独考核:
  158 +
  159 +1. **五项校验**(无环/单一入口/可达性/回退边标注/fail 兜底边,knowhow B1 约束一)——
  160 + knowhow 原文明确写"五项校验从不因任务简单而放松"(B1 关键约束段),这是结构合法性,
  161 + 与任务内容复杂度无关。
  162 +2. **数据契约级联检查**(knowhow B2,`planner.json` needs 依赖链推导)——裁剪任何一个
  163 + 有 `produces` 的节点前,必须先检查图内是否有其他节点的 `needs` 依赖它的产出 kind;
  164 + 如果有,要么同步把该 `needs` 项改成 `required:false`,要么把该 kind 从 `needs` 列表
  165 + 里移除,否则会触发 `rule=data-contract` 被引擎拒绝(knowhow B2 逐条核实"砍掉brd会
  166 + 发生什么"一节,全文摘录)。**这条隐藏规则目前只写在 `system/work-graph-templates/README.md`
  167 + 里,`agent.md` Step4 的裁剪授权段没有提及**,是本次调研发现的、值得后续补进 agent.md
  168 + 的显式检查清单项(knowhow 文末"给下一阶段的建议方向" #3)。
system/agents/workgraph-planning-methodology-trial/train/digest/industry_avg_score.md 0 → 100644
  1 +# 行业基准分说明 v1 — workgraph-planning-methodology-trial
  2 +
  3 +> 生成者:innovator-digest(Phase 2 Digest)
  4 +> 日期:2026-08-23
  5 +> 首次训练(v1)
  6 +
  7 +---
  8 +
  9 +## 为什么没有一个可抓取的"行业平均分"
  10 +
  11 +评分对象是"work graph 节点裁剪决策规则集",这不是可爬取、可统计的公开行业活动——没有
  12 +任何第三方数据源发布过"节点裁剪规则质量"的行业分数。参考 `prd-methodology-trial` 与
  13 +`sdd-planning` 两次训练的先例(`system/agents/{prd,sdd}-methodology-trial 或
  14 +sdd-planning}/train/digest/industry_avg_score.md`),本文档同样不编造行业平均分,
  15 +改为给两条**本仓库内部可复现的基准线**,均能追溯到具体的打分过程(见
  16 +`benchmark_v1.md` + `calibration_cases.md`)。
  17 +
  18 +本次训练与前两次的关键差异:`prd`/`sdd` 两次训练的真实基线都来自"一份被引擎/下游真实
  19 +打回过的产出物";本次训练的评分对象在真实世界里**没有对应的历史产出物**——从未有人
  20 +写过一份"裁剪规则集"交给引擎跑过。因此真实基线改为:**把 `benchmark_v1.md` 直接套用
  21 +在现状 `workgraph-planning/agent.md` Step4 的裁剪授权原文上**,评估"现状本身(不加
  22 +任何新规则)在这套 benchmark 上处于什么档位"——这是任务书明确要求的做法("定义'真实
  23 +基线'(现状agent.md Step4)……用真实基线倒推出一个具体分数")。
  24 +
  25 +---
  26 +
  27 +## 基线一:真实基线 —— `workgraph-planning/agent.md` Step4 现状
  28 +
  29 +**评分对象**:`system/agents/workgraph-planning/agent.md` Step4 裁剪授权段原文
  30 +(`knowhow_v1.md` B1 完整引用,L117-148)——"你被明确允许:裁剪……(比如任务不需要
  31 +BRD,直接从PRD起步)",以及紧邻的 Step5 五项校验段(L163-209,L405-424)。
  32 +
  33 +**逐维度打分**:
  34 +
  35 +**D1 信号可读性 = 1**
  36 +Step4 没有给出任何信号到判断的映射方法,只给了"权限声明+单一例句"——"综合 Step 1/2/3
  37 +三份输入"是整段唯一的判断依据描述,相当于把判断整体外包给 LLM 通读后的直觉,连"任务
  38 +简单就裁"这类同义反复都算不上更结构化的尝试。命中 D1 1 分档"没有给出任何判定方法"
  39 +分支。
  40 +
  41 +**D2 确定性/可复现性 = 1**
  42 +这正是 knowhow B1 原文自己承认的问题("图的规划质量没有硬校验,五项只保证图结构
  43 +合法,保证不了它适合这个任务……完全依赖 LLM 单次判断")——Step4 没有提供任何机械
  44 +可执行的输出映射,两次面对同一个 task-goal,不同 rollout 完全可能给出不同的裁剪结论
  45 +(C4 案例本身就是唯一一次可比样本给出"保留"而非例句暗示的"裁剪",说明例句本身在真实
  46 +执行时也没有被稳定复现)。命中 1 分档。
  47 +
  48 +**D3 约束合规性 = 2**
  49 +Step4 原文本身提到"边上不声明数据契约……下游节点提示词里就没有上游产物路径",说明
  50 +对"数据契约需要被声明"有基本意识,Step5 五项校验里约束九也要求 forward 边声明
  51 +`produces`/`needs`;但 Step4 的裁剪授权段**没有专门要求"裁掉一个节点前,检查是否有
  52 +下游 needs 依赖它的产出"**——这条隐藏规则目前只写在 `system/work-graph-templates/
  53 +README.md` 里(knowhow B2),不在 agent.md Step4 本身。存在"一般性的数据契约意识"但
  54 +缺"裁剪前置的 needs 级联检查"这一具体环节,介于"完全没意识到"和"系统性覆盖"之间,
  55 +判 2 分。
  56 +
  57 +**D4 覆盖完整性 = 2**
  58 +Step4 唯一给出的具体例句只涉及 `brd` 一个节点("不需要BRD,直接从PRD起步"),
  59 +`prd/sdd/benchmark/validator` 四个节点没有任何专属裁剪/保留规则,只有笼统的
  60 +"裁剪/替换/组合/增删验收产出节点"四类权限声明,不构成"每个节点都有明确规则"。
  61 +命中 2 分档"只覆盖1个节点(通常是BRD)"。
  62 +
  63 +**D5 矫枉过正平衡 = 3**
  64 +Step4 与紧邻的 Step5 合起来看,确实存在"结构合法性不因任务简单而放松"(五项校验
  65 +"从不因任务简单而放松",knowhow B1 关键约束段)这类地基级声明,是一种保留分支的
  66 +体现;但这条声明是关于图的**结构合法性**(无环/可达性等),不是关于**具体节点**
  67 +(如"prd 不可裁")的地基级保留声明——两者不是一回事,Step4 本身没有点名任何具体节点
  68 +"无论任务多简单都不可裁"。命中 3 分档"保留的理由含糊(结构层面的声明,未落到节点层面
  69 +的信号驱动)"。
  70 +
  71 +### 计算
  72 +
  73 +```
  74 +加权和 = 1/5×15 + 1/5×30 + 2/5×20 + 2/5×20 + 3/5×15
  75 + = 3 + 6 + 8 + 8 + 9
  76 + = 34
  77 +
  78 +D1=1,但未触发否决——否决规则要求"全部条件都是同义反复/无判定方法",Step4 现状
  79 +不是"尝试给出规则但都同义反复",而是"没有尝试给出机械判定方法本身",性质上更原始,
  80 +但不属于 calibration_cases.md 候选(a)那种"给了但都是同义反复"的形态,此处如实不触发
  81 +字面否决条款,改为让 D1=1 直接进入加权和——即便如此,见下方封顶:
  82 +
  83 +D3=2(≤2) → 总分上限 40
  84 +D2=1(≤2) → 总分上限 45
  85 +
  86 +最终得分 = min(34, 40, 45) = 34
  87 +```
  88 +
  89 +**34 分,"不合格"档**。这与任务书预期一致:"预期会在'确定性/可复现性'维度大量失分,
  90 +因为现状是纯LLM直觉判断+0个真实裁剪案例验证过"。
  91 +
  92 +**一个值得记录的反直觉细节**:真实基线(34分)反而**高于** `calibration_cases.md`
  93 +候选(a) 同义反复型规则集的分数(15分)。这不是评分错误——Step4 现状虽然在 D1/D2
  94 +上同样很差,但它比候选(a)多出"四类明确的权限类型(裁剪/替换/组合/增删)"和"紧邻的
  95 +五项校验安全网",候选(a)是刻意构造的、除了一句同义反复什么都没有的极端反面样本。
  96 +两者的相对排序(Step4现状 > 纯同义反复候选)恰好证明这套 benchmark 没有把"信息量
  97 +更多但仍不合格"和"信息量几乎为零"混为一谈,是一个合理的区分度信号,而不是设计缺陷。
  98 +
  99 +---
  100 +
  101 +## 基线二:目标线
  102 +
  103 +**取值**:`benchmark_v1.md` 三、3.3 定义的"优秀"档下限 **80 分**。
  104 +
  105 +**为什么不是 95 分**:沿用 `prd-methodology-trial`/`sdd-planning` 两次训练的先例
  106 +逻辑——单个样本不该直接定阈值,用 benchmark 自己已定义好的分级下限做目标线,复用同一套
  107 +分级逻辑而不是另起一个数字。本次训练额外验证过这个数字是否可达:
  108 +`calibration_cases.md` 候选(b)(信号驱动、可直接套用在 C4 上、显式处理 needs 级联和
  109 +地基级约束的规则集)实际打分 **90 分**,超过 80 分目标线,证明 80 分是一个真实存在、
  110 +可被合格设计触达的分数,不是凭空定的上限。**没有采用任务书里提到的 95 分**——自检显示
  111 +95 分在候选(b)这样一份已经相当完整、覆盖 C4 全部相关信号、给出确定结论+needs调整方案
  112 +的规则集面前仍然拿不到(候选(b)因未穷举全部信号组合、benchmark/validator 未单独展开
  113 +专属规则而在 D2/D4 各扣 1 档,止步 90 分),95 分作为目标线会让"优秀档"变成一个几乎
  114 +不可能触达的区间,不具备实际指导意义,故如实改为 80 分,并在此说明理由。
  115 +
  116 +---
  117 +
  118 +## 及格线(passing_score)
  119 +
  120 +**passing_score = 65**(`benchmark_v1.md` 三、3.3"合格"档下限)。
  121 +
  122 +依据:
  123 +- 真实基线(34分)必须落在及格线以下——它代表"现状不加任何新规则"的分数,及格线定得
  124 + 比它低就等于承认这套 benchmark 认可现状已经合格,与训练目的(现状被证明不足以支撑
  125 + 确定性裁剪判断)矛盾。
  126 +- 目标线(80分)必须落在及格线以上,中间留出"合格但有薄弱维度"的缓冲区间(65-79)——
  127 + `calibration_cases.md` 里虽未构造专门落在这个区间的第三个样本(任务书只要求至少
  128 + 2 个校准样本),但候选(b)的 D2/D4 局部扣分模式已经展示了"接近优秀但有具体可指出的
  129 + 缺口"是这套 benchmark 能够表达的中间状态,不是只有"15分"和"90分"两个极端。
  130 +
  131 +---
  132 +
  133 +## 样本量说明:为什么不提供 train/test jsonl
  134 +
  135 +参考 `sdd-planning` 先例的逻辑(其 industry_avg_score.md"为什么是15条而不是50条"一节)
  136 +更进一步:`sdd-planning` 好歹有 4 个真实 attempt 链路可供改写;本次训练的评分对象
  137 +(裁剪规则集)在仓库内**没有任何真实产出物**可供改写成标注样本——5 份真实规划记录
  138 +(knowhow 块C)记录的是"规划者最终画了什么图",不是"规划者用了什么裁剪规则集",两者
  139 +不是同一种数据。凑出一批"构造规则集"来冒充 train/test jsonl,等于用虚构数据训练对
  140 +虚构数据的拟合能力,与 Digester 基类"不加工不交付"的纪律冲突。
  141 +
  142 +本阶段改为交付 `calibration_cases.md` 的 2 个校准样本作为分级信号的最小验证集
  143 +(对应任务书"至少 2 个校准样本"的要求),如实说明当前不具备扩充到标注数据集规模的
  144 +真实语料基础。后续若 Evolver 训练过程中产生了规则集的实际候选,应把这些真实产出的
  145 +候选(连同它们在真实/合成 task-goal 上的打分记录)补充为训练 jsonl 的样本来源,而不是
  146 +在没有实际候选之前就构造大量同质化的虚构规则集。
system/agents/workgraph-planning-methodology-trial/train/evolve/SKILL.md 0 → 100644
  1 +# planner.json 五节点裁剪判定表 v1
  2 +
  3 +> 训练产出:workgraph-planning-methodology-trial(首训 _v1)
  4 +> 自评分:100/100(`digest/benchmark_v1.md`,及格线65/目标线80,见 `evolve_report.md`)
  5 +> 供 `system/agents/workgraph-planning/agent.md` Step 4 直接引用/粘贴。
  6 +
  7 +---
  8 +
  9 +## 〇、适用范围(先说清楚不管什么)
  10 +
  11 +本表只回答一件事:**宿主 org node 是 `org-planner`、骨架选定 `planner.json` 之后**,
  12 +`brd/prd/sdd/benchmark/validator` 这五个节点里,哪个该裁、哪个该留、裁了下游 `needs`
  13 +怎么改。以下三件事不在本表范围,仍按 `agent.md` 原有逻辑处理:
  14 +
  15 +1. **骨架间选型**(`org-planner`→`planner.json` / `org-coder`→`executor.json` /
  16 + `org-validator`→`validator.json`)——已经是 `whenToUse` 字段的确定性判据
  17 + (100% 由宿主类型决定,见 `hunt/knowhow_v1.md` 块C),不需要复杂度信号参与。
  18 +2. **`goal-benchmark`/`goal-test-data`/`goal-test-script` 三选一或多选**(27-E2E
  19 + §十一)——这是"验收方式用哪种载体"的选型决策,与本表的 `benchmark` 节点是否
  20 + 保留是两个不同轴:本表只回答"要不要保留一个产 `acceptance` 的验收产出节点",
  21 + 不回答"该用打分式/数据驱动式/脚本式里的哪一种"。
  22 +3. **图形状本身错了要不要重画**——那是 `agent.md` Step4"重规划三选一"表格的
  23 + 职责(`remediation_note` 触发),不是节点裁剪判据。
  24 +
  25 +**信号取值来源**:S1-S5 的定义与判定方法完全复用 `digest/complexity_signals_v1.md`,
  26 +本文档不重新定义信号本身,只定义信号取值 → 节点裁/留 + needs 改法的映射。
  27 +
  28 +---
  29 +
  30 +## 一、决策流程(先过两道门,再逐节点判定)
  31 +
  32 +```
  33 +输入:task-goal 原文 → 按 complexity_signals_v1.md 判定 S1(整数,关心1/≥2)、S2/S3/S4/S5(是/否)
  34 +
  35 +G1(始终生效,不参与判断,只是提醒)
  36 + 五项校验(无环/单一入口/可达性/回退边标注/fail兜底边)与数据契约级联检查
  37 + 永远适用,不因任何信号组合而放松。
  38 +
  39 +G2(S3 硬门)
  40 + 若 S3=是 → 全部 5 节点保留,不裁不并,直接终止决策,不再往下走。
  41 + (地基级约束:数据持久化/多模块场景下,任务表面简单与否不影响架构决策,
  42 + knowhow §A4 YAGNI张力 + complexity_signals_v1.md S3 段原文"无论其他信号
  43 + 如何组合")
  44 +
  45 +G3(S5 复用门,仅当 G2 未命中时判断)
  46 + 若 S5=是 且 能找到一份先例规划记录,且该先例记录明确标注了自己的 S1-S4
  47 + 取值,且四个信号值与本次任务逐一严格相同(缺一不算)
  48 + → 直接复用先例的节点集合(含 needs 方案),跳过以下逐节点判定,终止决策。
  49 + 否则(S5=否;或 S5=是但找不到先例;或先例未标注S1-S4取值;或标注了但
  50 + 任一信号不一致)
  51 + → 一律按 S5=否 处理,继续往下走逐节点判定。
  52 + **fallback 说明**:本仓库当前全部历史规划记录(`hunt/knowhow_v1.md` 块C
  53 + 5份)都写于 S1-S5 信号体系引入之前,没有一份标注过信号取值——这意味着
  54 + 在 S1-S5 信号体系刚上线的阶段,G3 门实际上对所有历史先例都会走向"按S5=否
  55 + 处理"这个分支,这是符合预期的保守行为,不是判据失效;等新规划记录开始
  56 + 按本表标注信号取值后,G3 门才会真正触发复用。
  57 +
  58 +若 G2、G3 均未命中,进入下面「二、逐节点判定表」(此时已知 S3=否)。
  59 +```
  60 +
  61 +---
  62 +
  63 +## 二、逐节点判定表(前提:S3=否,且 G3 未触发复用)
  64 +
  65 +### 2.1 BRD(org-planner-brd)
  66 +
  67 +| S4 | S1 | S2 | 判定 | 理由 |
  68 +|---|---|---|---|---|
  69 +| 是 | 任意 | 任意 | **保留** | BRD 的语义是"why",存在价值在于向不同于 PRD 读者的第二方解释理由;S4=是 说明这个第二方真实存在,必要条件不满足,不裁 |
  70 +| 否 | ≥2 | 任意 | **保留** | 多个彼此独立可验收的交付物,各自的立项理由大概率不同,即便只面向单一读者也不满足"why 内容单一到能并入一段前言"的前提,从保守默认出发保留 |
  71 +| 否 | 1 | 是 | **裁剪** | 单一交付物 + 无第二方受众 + task-goal 原文已含可直接落地的验收清单/数值 → why 可以在 PRD 前言段一段话讲清,见 §四 裁剪连带修正清单 |
  72 +| 否 | 1 | 否 | **保留** | 虽满足 S1=1/S4=否,但 S2=否 说明连"做完什么算成功"都还没在原文讲清楚,此时更需要独立的 BRD/PRD 分别把 why 和验收标准想清楚,直接并入一段前言风险过高,保守保留 |
  73 +
  74 +(以上 4 行覆盖 `S1(1/≥2)×S2(是/否)×S4(是/否)` 全部 8 种组合:S4=是 一行折叠
  75 +4 种;S4=否&S1≥2 一行折叠 2 种;S4=否&S1=1 按 S2 拆成 2 行;合计 4+2+1+1=8,
  76 +无遗漏组合。)
  77 +
  78 +### 2.2 PRD(org-planner-prd)
  79 +
  80 +**任意信号组合下都不裁。**
  81 +
  82 +理由:`org-planner-sdd` 边 `needs:["prd"]`、`org-planner-benchmark→validator`
  83 +边 `needs:["brd","prd","sdd"]` 两条边都直接依赖 `prd` 这个 kind;裁掉它会让
  84 +两条边同时找不到产出方,触发 `rule=data-contract` 被引擎拒绝,且没有像
  85 +`brd` 那样"改成前言段"的补救办法——PRD 本身就是"what"的唯一来源,无处可并。
  86 +这是"地基级、不受任务复杂度影响"的约束(`benchmark_v1.md` D5 判据来源)。
  87 +
  88 +### 2.3 SDD(org-planner-sdd)
  89 +
  90 +**节点本身不裁**(结构原因见下),内容深度随 S1 二值调整:
  91 +
  92 +| S1 | 内容深度 | 理由 |
  93 +|---|---|---|
  94 +| 1 | 精简 | 单一交付物、已知 S3=否(无跨模块整合点),SDD 可以只写最小必要的技术决策,不需要展开"多交付物间如何整合"这类内容 |
  95 +| ≥2 | 完整 | 多个独立可验收交付物之间的技术整合点必须单独展开,不能省略 |
  96 +
  97 +**为什么不是"裁剪"而是"精简"**:`org-planner-benchmark` 边
  98 +`produces:["sdd"]` 是这条边存在的前提。真要把 SDD 从图上整个删掉,必须把
  99 +`prd→sdd→benchmark` 改造成 `prd→benchmark` 直接产出 `prd`/跳过 sdd
  100 +kind——这已经是**图形状变更**,不是"裁剪骨架内某个节点",超出本表定义的
  101 +裁剪范围,按 §〇 第3点交给"图形状是否错了"那层判断,不在本表处理。
  102 +
  103 +### 2.4 benchmark(org-planner-benchmark)
  104 +
  105 +**任意信号组合下都不裁。**
  106 +
  107 +理由:这是本图内 `acceptance` kind 的唯一生产者;节点带 `writesArtifacts:true`,
  108 +产物写进 root run 的 artifacts/ 共享区,消费方不止本图内的 `validator` 节点,
  109 +还包括**另一张图**——同一 task 下游、由 `org-validator` 宿主的 `validator.json`
  110 +图,靠这份 `acceptance` 产物判定整个任务是否达标。裁掉它的影响是跨图断供,
  111 +比裁 brd/sdd 更不可逆。S2 信号只影响它的**工作量**(S2=是 时从"设计验收维度"
  112 +降为"格式转译"),不影响它是否存在——工作量变化留给 `goal-benchmark` 本体
  113 +自己的提示词处理,不是本表的裁剪判据。
  114 +
  115 +### 2.5 validator(org-planner-validator)
  116 +
  117 +**任意信号组合下都不裁。**
  118 +
  119 +理由:这是四张骨架共有的"做→自检→本层验收"形状(`work-graph-templates/
  120 +README.md` L29)里"自检"这一步——检查 brd/prd/sdd 三份文档内部是否矛盾。
  121 +裁掉它等于让 planner 输出的文档不经内部一致性检查就流向下游 `org-validator`,
  122 +把本该在本图内发现的矛盾转嫁给下一张图。`needs` 随 brd/prd/sdd 实际留存情况
  123 +自动调整,不是独立判断(见 §四)。
  124 +
  125 +---
  126 +
  127 +## 三、汇总(速查)
  128 +
  129 +| 节点 | 可裁剪? | 触发条件 |
  130 +|---|---|---|
  131 +| brd | 是,有条件 | `S3=否 且 S5未命中复用 且 S4=否 且 S1=1 且 S2=是` |
  132 +| prd | 否 | 地基级,`sdd`/`benchmark→validator` 两条边直接依赖 |
  133 +| sdd | 否(内容可精简) | 精简条件:`S3=否 且 S1=1`;节点本身裁剪需图形状变更,超出本表范围 |
  134 +| benchmark | 否 | 地基级,跨图(`validator.json`)依赖它的 `acceptance` 产物;选型层面的增删属于27-E2E§11,不在本表 |
  135 +| validator | 否 | 地基级,四骨架共有的"自检"步骤 |
  136 +
  137 +**全公司当前唯一可能触发裁剪的分支就是 brd**,其余四个节点在 S1-S5 信号体系下
  138 +永不裁剪——这不是偷懒简化,是 §2.2/§2.4/§2.5 分别给出的三条独立地基级理由
  139 +(数据契约直接依赖 / 跨图断供 / 骨架共有自检步骤),三者互不依赖,任何一条
  140 +单独成立就足以否决对应节点的裁剪。
  141 +
  142 +---
  143 +
  144 +## 四、裁剪 brd 的连带结构修正清单(触发 §2.1 裁剪行时,全部执行)
  145 +
  146 +1. **needs 调整**:`org-planner-benchmark --success--> org-planner-validator`
  147 + 边的 `needs` 从 `["brd", "prd", "sdd"]` 改为
  148 + `[{"kind": "brd", "required": false}, "prd", "sdd"]`(brd 变可选输入,
  149 + 不阻断这条边)。
  150 +2. **删除失效的 backward 边**:`org-planner-prd --fail--> org-planner-brd`
  151 + (`edgeKind: backward`)这条边的目标节点已不存在,必须删除,不能留着
  152 + (留着会让边引用一个不存在的节点,图无法落地)。
  153 +3. **确认新入口**:`org-planner-prd` 的 forward 入度归零,自动成为新的
  154 + 唯一入口节点。按约束五例外条款,入口节点**不需要**为自己另配 fail
  155 + 兜底边——`prd` 不用因为"看起来没有兜底边"而被误判为不合法,也不应该
  156 + 为了凑一条兜底边而画蛇添足新增一条。
  157 +4. **收尾复核**:重新过一遍五项校验手工验算法第 2/3/4/5 条(第1条无环性
  158 + 不受影响,删边不改变既有节点间的拓扑序)。完整过一遍示例见
  159 + `sample_verification.md` 中 C4 案例的验算表。
  160 +
  161 +---
  162 +
  163 +## 五、"why 内容并入 PRD 前言段"的落地方式(brd 裁剪时的内容处理)
  164 +
  165 +裁掉 `org-planner-brd` 节点后,`org-planner-prd` 的产出物必须在文档开头新增
  166 +一段"背景/为什么做这件事"的前言段,覆盖原本该由 BRD 承担的 why 内容——这不是
  167 +可选的润色,是 §2.1 裁剪判据成立的前提条件本身(S2=是 意味着"what"已经清楚,
  168 +但"why"仍然需要落地到某处,只是从独立节点降级为前言段,不是被删除)。若下游
  169 +`org-planner-validator` 在自检阶段发现 PRD 前言段对 why 的交代不充分,允许
  170 +在 `remediation_note` 里要求下一轮重新引入独立 `brd` 节点(走 `agent.md`
  171 +Step4"重规划三选一"里"图形状本身错了"那一行)。
system/agents/workgraph-planning-methodology-trial/train/evolve/evolve_report.md 0 → 100644
  1 +# Evolve 总结报告 v1 — workgraph-planning-methodology-trial
  2 +
  3 +> 首次训练(_v1)。目标 Agent:workgraph-planning-methodology-trial(独立试验节点)。
  4 +> 上游:Hunt(`train/hunt/knowhow_v1.md`)+ Digest(`train/digest/` 四份)已验收通过。
  5 +
  6 +---
  7 +
  8 +## 一、最终分数
  9 +
  10 +**100/100**(`digest/benchmark_v1.md`,D1=5/D2=5/D3=5/D4=5/D5=5,无否决/无封顶),
  11 +2 轮迭代(Small Loop 上限10轮,实际用2轮即达标,见 `iteration_log.md`)。
  12 +及格线65、目标线80(`digest/industry_avg_score.md`)均已超过。
  13 +
  14 +对照基线:
  15 +- 真实基线(`workgraph-planning/agent.md` Step4 现状,无新规则)= 34分,不合格档;
  16 +- 候选(a)(同义反复型构造样本)= 15分,不合格档;
  17 +- 候选(b)(信号驱动型构造样本,训练起点)= 90分,优秀档,但有 2 处已知缺口;
  18 +- 本次产出(v1定稿)= 100分,优秀档,已闭合候选(b)的 2 处已知缺口,并在样本
  19 + 验证过程中额外自我发现并修复 2 处候选(b)未被发现的结构漏洞。
  20 +
  21 +---
  22 +
  23 +## 二、相比候选(b)的具体改进点
  24 +
  25 +### 2.1 闭合任务书指出的 2 个已知缺口
  26 +
  27 +1. **D2 缺口(未穷举 2^5 信号组合)**:候选(b)只用一条"S4=否且S2=是且S1=1"
  28 + 的 AND 条件命中裁剪分支,其余组合(如任务书举例的 `S3=否且S5=否且S4=是`)
  29 + 靠"默认保留"这条兜底句隐性推断,不是显式映射。本次改为「G2/G3 短路门 +
  30 + BRD 8行折叠判定表」结构:G2 吸收全部 S3=是 的情形,G3 吸收全部可复用先例
  31 + 的情形,剩余空间只需要对 `S1×S2×S4`(8种组合)显式判定,用 4 行折叠表
  32 + 完整覆盖(S4=是折叠4种、S1≥2折叠2种、S1=1按S2拆2种,4+2+1+1=8无遗漏)。
  33 + PRD/benchmark/validator 三个节点给出与信号组合无关的常量输出,SDD 只系于
  34 + S1 二值。整个信号空间理论上被证明式地穷举,而不是"举了几个例子+兜底句"。
  35 +2. **D4 缺口(benchmark/validator 缺专属规则)**:候选(b)对这两个节点只在
  36 + "默认保留"和 S3=是 分支里被动提及,没有单独展开。本次为两者各给出独立
  37 + 小节(`SKILL.md` §2.4/§2.5),分别给出**结构性理由**:benchmark 的产物
  38 + 被本图之外的另一张图(`org-validator` 宿主的 `validator.json`)跨图消费,
  39 + 裁掉是跨图断供;validator 是四张骨架共有的"自检"步骤,裁掉会让文档内部
  40 + 矛盾无检查地流向下游。两条理由都独立于 S1-S5 信号,且各自有 hunt/digest
  41 + 原文出处支撑,不是"因为没想到裁剪理由所以干脆说不裁"的敷衍。
  42 +
  43 +### 2.2 自我验证过程中额外发现并修复的 2 处漏洞(候选(b)也未发现)
  44 +
  45 +这两处不在任务书列出的已知缺口清单里,是本次在套用 C4 样本、手工过五项校验
  46 +时新发现的(详见 `iteration_log.md` Round 1 "样本验证发现的问题"):
  47 +
  48 +1. **裁 brd 后遗留一条指向不存在节点的 backward 边**(`org-planner-prd
  49 + --fail--> org-planner-brd`)。候选(b)和本次 v1 草案都只处理了 `needs`
  50 + 级联,没有意识到裁掉节点还会留下引用它的 backward 边。若不修,图会带着
  51 + 一条指向不存在节点的边落地,比 `rule=data-contract` 拒绝更基础的错误。
  52 + 本次补了 §四"连带结构修正清单",并显式给出"prd 变新入口后按约束五例外
  53 + 条款无需自己配兜底边"这条容易被漏掉的推论。
  54 +2. **S5 复用门在当前仓库数据上不可执行**。G3 门要求"先例 S1-S4 取值与本次
  55 + 一致",但本仓库全部历史规划记录都写于 S1-S5 信号体系引入之前,没有一份
  56 + 标注过信号取值——门本身的判定条件在当下没有任何输入能满足。补了显式
  57 + fallback:找不到已标注信号值的先例,一律按 `S5=否` 处理,保证这道门在
  58 + 任何输入下都有确定出口,不会卡死等待一个永远拿不到的先例数据。
  59 +
  60 +---
  61 +
  62 +## 三、局限性(如实说明,不回避)
  63 +
  64 +1. **范围边界**:本表只回答 `planner.json` 五节点"裁不裁",不涉及骨架间
  65 + 选型(已由 `whenToUse` 字段确定性覆盖)、也不涉及 27-E2E §十一
  66 + "goal-benchmark/goal-test-data/goal-test-script 三选一或多选"这层验收
  67 + 方式选型决策——这层决策 Hunt/Digest 阶段本就未纳入调研范围,本次训练也
  68 + 没有补充调研,是明确的范围外事项,不是遗漏。
  69 +2. **真实裁剪正样本仍是 0**:`hunt/knowhow_v1.md` 块C明确指出全公司 5 份
  70 + 真实规划记录里裁剪发生次数为0,本表在真实世界里还没有一次被真正套用过
  71 + 并观察到裁剪结果落地成功的案例——两个自验证样本,一个是真实历史案例
  72 + (但套用的是"如果当初有这份规则集会怎么判"的回溯推演,不是真实当时就
  73 + 照此执行过),一个是构造场景。100分是"规则集本身的质量分",不是"已被
  74 + 生产验证过的可靠性分",这条区别需要在 Evolver/Innovator 后续决策里
  75 + 保留:建议下一次真实有 `org-planner` 宿主节点、且信号组合命中 brd 裁剪
  76 + 分支的任务出现时,实际按本表执行一次,观察是否真的顺利通过 Step5/Step6,
  77 + 补一个真正的"生产验证"记录。
  78 +3. **G3 复用门目前形同虚设**:如 §二 2.2 所述,在仓库开始按本表标注新规划
  79 + 记录的信号取值之前,G3 门永远走向 fallback(视为S5=否)。这不是设计
  80 + 缺陷(门的逻辑本身是对的,只是数据还没准备好),但意味着"复用先例"这条
  81 + 本该能省判断成本的路径,短期内实际不会被触发,所有任务都要走完整的
  82 + 逐节点判定,效率上没有达到 S5 信号设计之初设想的"跳过重复判断"的收益。
  83 +4. **SDD"精简"没有可量化的验收标准**:§2.3 只说 `S1=1` 时 SDD 内容可以
  84 + "精简",但没有给出精简到什么程度算合格、什么程度算偷工减料的量化标准
  85 + (比如"至少要写几段/覆盖哪几类技术决策")。这是因为 hunt/digest 阶段
  86 + 同样没有对"SDD内容深度"这件事做过调研,本次训练不打算在缺乏调研支撑的
  87 + 情况下凭空编一个量化标准,如实标注为待补项。
  88 +5. **本表未覆盖"替换/组合"两种裁剪授权**:`agent.md` Step4 明确允许"裁剪/
  89 + 替换/组合"三种操作,本表只处理"裁剪"这一种(任务书要求范围本就限定在
  90 + "裁 or 留",未要求覆盖替换/组合),"替换某个节点本体""拿executor.json
  91 + 做主干接入planner的验收节点"这两种操作不在本表判据覆盖范围内。
  92 +
  93 +---
  94 +
  95 +## 四、给下一阶段的建议
  96 +
  97 +1. 把 `SKILL.md` §一~§四 的内容整合进 `workgraph-planning/agent.md` Step4
  98 + (当前只有"你被明确允许:裁剪……(比如任务不需要BRD,直接从PRD起步)"
  99 + 这一句例句,没有可执行判据)——可以直接引用本文件路径,或摘要粘贴 §三
  100 + 汇总表 + §四 连带修正清单两节(这两节最短,覆盖了"读了立刻能用"的核心)。
  101 +2. 建议在规划记录模板里新增一节"信号取值",把 S1-S5 的判定结果显式记录下来
  102 + ——这既是本表要求的输入,也是让 G3 复用门未来真正能触发的前提条件
  103 + (见 §三 局限性3)。
  104 +3. 下一次遇到真实的 `org-planner` 宿主任务时,建议 workgraph-planning 显式
  105 + 套用本表并在规划记录里标注"依据 workgraph-planning-methodology-trial
  106 + SKILL.md v1 第几条判定",积累第一个真实生产验证案例。
system/agents/workgraph-planning-methodology-trial/train/evolve/iteration_log.md 0 → 100644
  1 +# 迭代日志 v1 — workgraph-planning-methodology-trial
  2 +
  3 +> 训练目标:≥80(合格线 65,来自 `digest/benchmark_v1.md` §3.3)
  4 +> 起点:候选(b)(`digest/calibration_cases.md`),已知缺口 D2(未穷举 2^5 信号组合)、
  5 +> D4(benchmark/validator 未单独展开专属规则)。本轮任务是在候选(b)基础上做真正的
  6 +> 独立迭代改进,不是照抄。
  7 +> Small Loop 上限 10 轮,本次用了 2 轮。
  8 +
  9 +---
  10 +
  11 +## Round 1(草稿 + 自评 + 样本验证,发现 2 处结构漏洞)
  12 +
  13 +### 草稿设计(v1 草案,未落盘为独立文件,直接在此摘要)
  14 +
  15 +在候选(b)基础上重新设计为「短路门 + 逐节点判定表」结构,而不是候选(b)那种
  16 +"若…且…且…否则"的单链条件句:
  17 +
  18 +1. **G2 门(S3=是 强制保留)**:若 `S3=是`,无论其他信号如何组合,直接判定全部
  19 + 5 节点保留,终止决策——这条本身就是 digest `complexity_signals_v1.md` S3 段
  20 + 原文("无论其他信号如何组合"),不是我新加的,只是把它从"叙述句"改写成
  21 + "决策树第一个门",让它在流程上真正先于其余判断执行。
  22 +2. **G3 门(S5=是 且先例 S1-S4 严格全部一致 才复用)**:比候选(b)第2条更严格——
  23 + 候选(b)只写"且先例任务在 S1-S4 上与本次任务取值一致",没定义"一致"到底要
  24 + 几个信号匹配;v1 草案明确成"四个信号全部相同,缺一不算",不一致就退化为
  25 + `S5=否` 继续往下走正常判定,不允许"大体相似就照抄"。
  26 +3. **BRD 判定表**:在 `S3=否` 且 `S5` 门未命中的前提下,对 `S1(1/≥2) × S2(是/否) ×
  27 + S4(是/否)` 共 8 种组合给出完整判定(4 行折叠表,S4=是 时无论 S1/S2 一律保留,
  28 + S1≥2 时无论 S2 一律保留,只有 `S4=否 且 S1=1` 时才看 S2 决定裁或留)——
  29 + 这是本轮对 D2 已知缺口的直接修补:候选(b)只写了"S4=否且S2=是且S1=1"这一条
  30 + AND 组合命中裁剪,没写其余 7 种组合各自的输出,本表把全部 8 种都显式列出。
  31 +4. **PRD**:永不裁(`sdd` 边 `needs:[prd]`、`benchmark` 边 `needs:[...,prd,...]`
  32 + 两条边都依赖它,裁掉无法修补,只能整张图重画,不算"裁剪")。
  33 +5. **SDD**:节点本身不裁(`benchmark` 边 `produces:[sdd]` 是这条边存在的前提,
  34 + 删掉节点等于要把 `prd→sdd→benchmark` 改成 `prd→benchmark` 直接产 `prd`,
  35 + 这是图形状变更不是节点裁剪,超出本判据范围);`S1=1` 时内容可以"精简"(吸收
  36 + 进本节点自己的产出里,不新增字数要求),`S1≥2` 时保持完整(需要展开跨交付物
  37 + 整合决策)。
  38 +6. **benchmark**:始终保留——它是本图 `acceptance` 产物的唯一生产者,且
  39 + `writesArtifacts:true` 把它写进 root run 的 artifacts/ 共享区,供**另一张图**
  40 + (`org-validator` 宿主的 `validator.json`)消费,裁掉的影响不止本图内部,是
  41 + 跨图断供;`goal-benchmark`/`goal-test-data`/`goal-test-script` 三选一或多选
  42 + (27-E2E §十一)是另一层"验收方式选型"决策,不受 S1-S5 支配,明确排除在本
  43 + 判据范围外。
  44 +7. **validator(org-planner-validator)**:始终保留——它是四张骨架共有的
  45 + "做→自检→本层验收"形状里"自检"那一步(`work-graph-templates/README.md`
  46 + L29),裁掉等于让 planner 输出的三份文档失去内部一致性检查,直接把矛盾
  47 + 传给下游 `org-validator`;`needs` 随 brd/prd/sdd 实际留存情况自动调整
  48 + (见第4项裁剪连带修正清单)。
  49 +
  50 +### 自评(套用 `benchmark_v1.md` 逐维度打分标准)
  51 +
  52 +| 维度 | 分数 | 依据 |
  53 +|---|---|---|
  54 +| D1 | 5 | 全部判据都是 S1-S5 的文本可判定信号,无"简单/复杂"类形容词单独作判据 |
  55 +| D2 | 5 | BRD 8 种组合全列,PRD/benchmark/validator 常量输出,SDD 仅系于 S1 二值,G2/G3 门在此之前已吸收 S3/S5,理论上覆盖全部信号空间,无"具体看情况"留白 |
  56 +| D3 | 5(**自评过高,见下方验证发现**) | 裁 brd 时给出 `needs` 从 `["brd","prd","sdd"]` 改成 `[{"kind":"brd","required":false},"prd","sdd"]` 的具体方案 |
  57 +| D4 | 5 | 五个节点全部有专属规则,含 benchmark/validator |
  58 +| D5 | 5 | 有裁有留,S3=是/prd不可裁 都是显式声明的"不受信号影响"的地基级约束 |
  59 +
  60 +```
  61 +加权和 = 5/5×15 + 5/5×30 + 5/5×20 + 5/5×20 + 5/5×15 = 100
  62 +```
  63 +
  64 +**没有直接采信这个 100 分**——按任务书要求,先跑样本验证再定稿,`D3=5` 这一项
  65 +需要经过手工验算法(`agent.md` 约束一手工验算法五条)逐条复核才能确认,不能只
  66 +凭"给了 needs 改法"就认定"不会破坏五项校验中任一项"(`benchmark_v1.md` D3
  67 +5分档原文的后半句)。
  68 +
  69 +### 样本验证发现的问题
  70 +
  71 +用 C4(p-v1mpcl,`S1=1/S2=是/S3=否/S4=否/S5=否`)代入 BRD 表:命中"`S4=否 且
  72 +S1=1 且 S2=是` → 裁剪 brd"。裁剪后手动过一遍五项校验手工验算法(第2/4/5条):
  73 +
  74 +- 规则4(回退边标注)复核时发现:`planner.json` 原图有一条
  75 + `org-planner-prd --fail--> org-planner-brd`(`edgeKind:backward`)。裁掉
  76 + `org-planner-brd` 节点后,这条边的 `to` 指向一个已经不存在的节点——v1 草案
  77 + 只处理了 `needs` 级联,完全没提这条边要怎么办。这不是"给了方案但有点小遗漏",
  78 + 是**根本没意识到还有一条 backward 边需要同步删除**,如果照 v1 草案原样执行,
  79 + 会画出一张边引用不存在节点的废图,比 `rule=data-contract` 拒绝还基础的错误。
  80 +- 连带发现规则2/5的推导也不完整:`org-planner-brd` 原本是唯一入口,裁掉之后
  81 + 谁是新入口?v1 草案没有说。手动推导后确认是 `org-planner-prd`(forward 入度
  82 + 变 0),而 `org-planner-prd` 变成入口后,按约束五"除入口节点外每个节点都要
  83 + 留兜底边"的**例外条款**,`prd` 本身不需要再单独配一条 fail 兜底边——但 v1
  84 + 草案完全没提这层,若使用者不知道这条例外,可能会误以为"prd 缺兜底边,图不
  85 + 合法"而画蛇添足加一条不需要的边,或者反过来因为找不到 prd 的兜底边而误判
  86 + 图不合法拒绝整张图。
  87 +
  88 +另外在检查 `S5` 门的可操作性时发现第二个问题:**"先例的 S1-S4 取值"从哪来?**
  89 +仓库现有全部 5 份规划记录(`hunt/knowhow_v1.md` 块C)都写于本次训练引入 S1-S5
  90 +信号体系之前,没有一份标注过自己的信号取值。v1 草案的 G3 门要求"先例 S1-S4
  91 +与本次一致",但如果先例记录本身没有这四个值可比对,这条门在当前仓库的真实
  92 +历史数据上**完全无法执行**,会卡在"不知道怎么判断"——这正是 D2 5分档要求
  93 +的"不存在'具体看情况'的留白"要避免的情况,v1 草案表面上写了判定条件,实际
  94 +在当前唯一能拿到的历史数据集上是不可执行的空判据。
  95 +
  96 +**结论**:D3 不该打 5,至少要扣到 4(一处遗漏,但只在"裁到图的唯一入口节点"
  97 +这一种情况下才会触发,影响面窄——`planner.json` 五节点里只有 `brd` 是唯一
  98 +入口,其余四个节点即便未来讨论裁剪也不会遇到"入口消失"这个子问题,所以严重度
  99 +定为"影响范围小"而非"系统性忽视",符合 4 分档描述)。D2 的"先例不可比对"问题
  100 +更多是数据可用性问题而非规则本身不确定,但既然会导致门"卡住无法执行",也需要
  101 +在规则里显式给出 fallback,否则同样违反"不存在留白"的字面要求,需要一起修。
  102 +
  103 +**处置**:不推翻整体框架(G2/G3门 + BRD表 + 逐节点规则的结构本身是合理的),
  104 +针对这 2 个具体漏洞做 v2 修正,不是重新设计。
  105 +
  106 +---
  107 +
  108 +## Round 2(修正 2 处漏洞,重新验证,定稿)
  109 +
  110 +### 修正内容
  111 +
  112 +1. **补充"裁剪 brd 的连带结构修正清单"**(写入 SKILL.md §4):
  113 + - 删除 `org-planner-prd --fail--> org-planner-brd` 这条 backward 边(目标
  114 + 节点已不存在);
  115 + - `org-planner-prd` 自动成为新的唯一入口(forward 入度归零);按约束五
  116 + 例外条款,入口节点**不需要**为自己另配 fail 兜底边,不必也不应该新增;
  117 + - 收尾前重新过一遍五项校验手工验算法第 2/3/4/5 条(第1条无环性不受影响,
  118 + 因为只是删边不改变节点间的既有拓扑序)。
  119 +2. **补充 S5 门的 fallback**(写入 SKILL.md §2 G3):若先例记录未标注 S1-S4
  120 + 信号值(当前仓库全部历史记录都属于此类,因为 S1-S5 是本次训练新引入的),
  121 + 视为"无法核实匹配",**直接按 `S5=否` 处理**,落回正常的逐节点判定流程,
  122 + 不允许因为"先例存在但取值未知"就跳过判断。这条 fallback 保证 G3 门在
  123 + 任何输入下都有确定出口,不会卡死。
  124 +
  125 +### 重新自评
  126 +
  127 +| 维度 | 分数 | 变化说明 |
  128 +|---|---|---|
  129 +| D1 | 5 | 不变 |
  130 +| D2 | 5 | S5 门补 fallback 后,对"先例信号值未知"这一具体情形也有确定输出(视为S5=否),不再有隐性卡死点 |
  131 +| D3 | 5 | backward 边删除 + 新入口豁免说明补齐后,重新手动过五项校验(见下)全部通过,"不会破坏五项校验中任一项"这半句才真正成立 |
  132 +| D4 | 5 | 不变 |
  133 +| D5 | 5 | 不变 |
  134 +
  135 +```
  136 +加权和 = 5/5×15 + 5/5×30 + 5/5×20 + 5/5×20 + 5/5×15 = 100
  137 +```
  138 +
  139 +### 用修正后规则重新走一遍 C4 的五项校验手工验算法(裁 brd 后的图)
  140 +
  141 +节点:`prd, sdd, benchmark, validator`(4个)。边:
  142 +`prd--success-->sdd`(produces:[prd])、`sdd--success-->benchmark`(produces:[sdd],needs:[prd])、
  143 +`benchmark--success-->validator`(produces:[acceptance],needs:[{brd,required:false},prd,sdd])、
  144 +`sdd--fail-->prd`(backward)、`benchmark--fail-->sdd`(backward)、
  145 +`validator--fail-->prd`(backward,failReason:input_underspecified)、`validator--fail-->sdd`(backward)。
  146 +(`prd--fail-->brd` 已按修正清单删除。)
  147 +
  148 +| # | 手工验算 | 结果 |
  149 +|---|---|---|
  150 +| 1 | 划掉 backward 边后剩 `prd→sdd→benchmark→validator`,可排出拓扑序 | 通过 |
  151 +| 2 | forward 入度为0的节点:仅 `prd` | 通过(恰好一个) |
  152 +| 3 | 从 `prd` 沿 forward 边 BFS:`prd→sdd→benchmark→validator`,覆盖全部4个节点 | 通过 |
  153 +| 4 | `sdd→prd`/`benchmark→sdd`/`validator→prd`/`validator→sdd` 的 `to` 均排在 `from` 之前,且都标了 `backward` | 通过 |
  154 +| 5 | 除入口 `prd` 外,`sdd`(有 `sdd→prd` 空 failReason 兜底边)、`benchmark`(有 `benchmark→sdd` 空 failReason 兜底边)、`validator`(有 `validator→sdd` 空 failReason 兜底边,另一条 `validator→prd` 带 failReason 不计入但不影响)均满足 | 通过 |
  155 +
  156 +五项全部通过,且 `prd` 作为新入口按约束五例外条款无需额外配兜底边(未出现"5项未通过"或"多配了一条不必要的边"两种误判)。
  157 +
  158 +**最终得分:100 分**(未触发任何否决/封顶条款:D1≠1或未达否决门槛、D2≥4不封顶、D3>2不触发40封顶、D2>2不触发45封顶)。达到并超过目标线 80 分(`digest/industry_avg_score.md`)。2 轮即达标,未用满 10 轮上限,停止迭代。
  159 +
  160 +**如实说明**:100 分是在"仅需覆盖 `planner.json` 五节点的裁剪判据"这个明确边界内、经过本轮两次真实手工验算后的分数,不代表这套规则解决了 work graph 规划的全部问题——`evolve_report.md` §局限性 有详细的范围外说明,不应被误读为"这个领域已经完美解决"。
system/agents/workgraph-planning-methodology-trial/train/evolve/sample_verification.md 0 → 100644
  1 +# 自我验证样本 v1 — workgraph-planning-methodology-trial
  2 +
  3 +> 对应任务书用户步骤6,套用 `SKILL.md` v1(100分定稿版)的决策流程。
  4 +> 两个样本复杂度梯度差异明显:样本1是全公司唯一与 Step4 裁剪例句直接可比的
  5 +> 真实历史案例,样本2是构造场景(**非真实历史案例**,下文已按要求显式标注)。
  6 +
  7 +---
  8 +
  9 +## 样本1:回归案例 C4(p-v1mpcl / T-mt1qx0c4-95bf,真实历史案例)
  10 +
  11 +**task-goal 原文**(`hunt/knowhow_v1.md` C4 引用):「读 lemonboss 仓库文档+代码,
  12 +产出 apple.com 风格的静态官网,讲清 why/how/what,含核心价值点、功能模块、
  13 +独特性说明,至少 3-4 张界面截图/示意图配说明」。
  14 +
  15 +### 信号取值(复用 `digest/complexity_signals_v1.md` 自身给出的 C4 校准结果)
  16 +
  17 +| 信号 | 取值 | 判定依据 |
  18 +|---|---|---|
  19 +| S1 | 1 | 全部内容共享同一个网站、同一套验收标准,单一交付物 |
  20 +| S2 | 是 | "至少3-4张界面截图/示意图配说明"是可枚举的具体数值清单 |
  21 +| S3 | 否 | 纯展示型静态页面描述,原文无持久化/多模块字样 |
  22 +| S4 | 否 | 通篇没有提及需要说服的第二方(投资人/产品经理/安全团队等),单一执行链路 |
  23 +| S5 | 否 | 未提及任何历史参照/复用指令 |
  24 +
  25 +### 代入决策流程
  26 +
  27 +1. **G2(S3门)**:S3=否 → 不命中,继续。
  28 +2. **G3(S5门)**:S5=否 → 不命中,继续(此样本写于 S1-S5 体系引入之前,
  29 + 也不存在"先例"这个概念本身,即便 S5 被误判为是,也会因为找不到标注过
  30 + S1-S4 的先例记录而按 fallback 归为 S5=否)。
  31 +3. **逐节点判定**:
  32 + - **brd**:查表 §2.1,`S4=否, S1=1, S2=是` → 命中第3行 → **裁剪**。
  33 + - **prd**:§2.2 恒定 → **保留**。
  34 + - **sdd**:§2.3,`S1=1`(且已知S3=否) → 内容**精简**,节点**保留**。
  35 + - **benchmark**:§2.4 恒定 → **保留**。
  36 + - **validator**:§2.5 恒定 → **保留**。
  37 +
  38 +**最终结论:裁 brd,保留 prd/sdd(精简)/benchmark/validator。**
  39 +
  40 +与任务书给出的预期结论一致("预期:裁brd,因为S1=1/S2=是/S3=否/S4=否")。
  41 +
  42 +### 应用 §四 连带修正清单,重新验算五项校验
  43 +
  44 +裁剪后节点:`prd, sdd, benchmark, validator`(4个)。边:
  45 +
  46 +| from | to | condition | 其他 |
  47 +|---|---|---|---|
  48 +| prd | sdd | success | produces:[prd] |
  49 +| sdd | benchmark | success | produces:[sdd], needs:[prd] |
  50 +| benchmark | validator | success | produces:[acceptance], needs:[{kind:brd,required:false}, prd, sdd] |
  51 +| sdd | prd | fail | edgeKind:backward |
  52 +| benchmark | sdd | fail | edgeKind:backward |
  53 +| validator | prd | fail | edgeKind:backward, failReason:input_underspecified |
  54 +| validator | sdd | fail | edgeKind:backward |
  55 +
  56 +(原 `prd --fail--> brd` 已按 §四 第2条删除。)
  57 +
  58 +| # | 手工验算法 | 结果 |
  59 +|---|---|---|
  60 +| 1 | 划掉 backward 边,剩 `prd→sdd→benchmark→validator`,可排出拓扑序 | 通过 |
  61 +| 2 | forward 入度为0的节点:仅 `prd` | 通过(恰好一个) |
  62 +| 3 | 从 `prd` 沿 forward 边 BFS 覆盖 `sdd, benchmark, validator` | 通过(4个节点全覆盖) |
  63 +| 4 | `sdd→prd`、`benchmark→sdd`、`validator→prd`、`validator→sdd` 的 `to` 均排在拓扑序更早处,且都标了 `backward` | 通过 |
  64 +| 5 | 除入口 `prd` 外:`sdd` 有 `sdd→prd`(空failReason)兜底边;`benchmark` 有 `benchmark→sdd`(空failReason)兜底边;`validator` 有 `validator→sdd`(空failReason)兜底边(另一条 `validator→prd` 带 failReason,不计入但不冲突) | 通过 |
  65 +
  66 +五项全部通过,`prd` 作为新入口按约束五例外条款无需额外配兜底边。
  67 +
  68 +### 合理性检查
  69 +
  70 +结论"裁brd、保留其余四个"符合直觉:这是一个单人产出、无需向第二方解释立项
  71 +理由、验收标准已经写清楚的静态网站任务,把"why"并入 PRD 前言段不会丢失信息
  72 +(原 C4 真实规划记录选择完整保留是"骨架字面结构对应"式判断,而非信号驱动,
  73 +`complexity_signals_v1.md` S4 段已指出这一点——本表刻意不重复这个失效模式)。
  74 +没有出现"简单任务被误判为要保留全部/复杂任务被误判为可裁"的情况。
  75 +
  76 +---
  77 +
  78 +## 样本2:构造场景(**非真实历史案例,用于压力测试规则的另一端**)
  79 +
  80 +**task-goal 原文(构造)**:「多租户 SaaS 后台,含权限体系(多角色 RBAC)与数据
  81 +导出功能,需要向产品经理和安全团队分别汇报设计方案」。
  82 +
  83 +### 信号取值
  84 +
  85 +| 信号 | 取值 | 判定依据 |
  86 +|---|---|---|
  87 +| S1 | 1 | "权限体系"和"数据导出功能"是同一个后台系统内的两个功能模块,原文没有说
  88 +它们各自有独立的验收标准或独立受众,按 `complexity_signals_v1.md` S1 判定法
  89 +("两个产出物只有在验收标准不同或受众不同时才分别计数"),算同一个交付物 |
  90 +| S2 | 否 | 原文只有"多角色RBAC""数据导出功能"这类定性描述,没有出现具体数字/
  91 +可穷举清单(没有说"3种角色""导出为CSV/Excel两种格式"这类可点名的清单) |
  92 +| S3 | 是 | "多租户""权限体系(多角色RBAC)""数据导出"均指向需要持久化存储
  93 +(租户数据、角色权限、待导出的业务数据)和多模块(权限模块+导出模块),命中
  94 +`complexity_signals_v1.md` S3 判定法里的"账号体系""对接接口/后端"类结构性字样 |
  95 +| S4 | 是 | 原文显式提到"需要向产品经理和安全团队分别汇报设计方案"——两类需要
  96 +独立说服/汇报的第二方角色,命中 S4 判定法 |
  97 +| S5 | 否 | 未提及任何历史参照/复用指令 |
  98 +
  99 +### 代入决策流程
  100 +
  101 +1. **G2(S3门)**:S3=是 → **命中**,直接判定**全部5节点保留**,决策终止,
  102 + 不再往下走逐节点判定。
  103 +
  104 +(补充核对:即便不走 G2 短路、继续假设走到逐节点判定,§2.1 BRD 表里
  105 +`S4=是` 那一行同样独立给出"保留"结论——S3 和 S4 两个独立信号在这个样本上
  106 +互相印证,没有矛盾,这也说明 G2 门的短路不是掩盖了一个本会冲突的判断,
  107 +只是提前给出了同一个答案。)
  108 +
  109 +**最终结论:全部5节点(brd/prd/sdd/benchmark/validator)保留,不裁剪。**
  110 +
  111 +与任务书给出的预期结论一致("预期:全部5节点保留,不裁剪")。
  112 +
  113 +### 五项校验
  114 +
  115 +因为没有任何节点被裁剪,图与 `planner.json` 骨架原样一致,五项校验天然
  116 +满足(骨架本身已验证合法,不需要重新手工验算)。
  117 +
  118 +### 合理性检查(矫枉过正压力测试)
  119 +
  120 +这个场景刻意设计了两个会让"裁剪判据"过度敏感的诱饵:
  121 +- 如果规则集只看 S1/S2/S4 这类"内容形态"信号而忽略 S3,可能会因为"S4=是"
  122 + 之外没有仔细检查 S1(单一后台系统,容易被误判成"简单交付物")而错误地
  123 + 在 benchmark/sdd 上打折扣;
  124 +- 如果规则集的裁剪判据里没有把 S3 设成最高优先级的硬门,可能会在"这是一个
  125 + 后台管理系统,描述听起来不算复杂"这种主观印象下裁掉不该裁的节点。
  126 +
  127 +本表的 G2 门直接堵死了这两种矫枉过正的可能——只要 S3=是,不管 S1/S2/S4
  128 +如何组合,都不会进入任何裁剪分支,验证了 §五(`benchmark_v1.md` D5 矫枉过正
  129 +平衡)声称的"地基级约束不受信号组合影响"在这个复杂样本上确实成立,没有
  130 +出现"复杂场景被错误裁剪"的情况。
system/agents/workgraph-planning-methodology-trial/train/hunt/knowhow_v1.md 0 → 100644
  1 +# workgraph-planning-methodology-trial · Hunt 调研笔记 v1
  2 +
  3 +任务:验证「按任务复杂度裁剪 work graph 形状」这类元规划判据能否被训出来。
  4 +调研范围:块A 外部方法论 / 块B 仓库内部权威源 / 块C 历史真实案例。每条结论标来源。
  5 +
  6 +---
  7 +
  8 +## 块A · 外部方法论(Web Search)
  9 +
  10 +### A1. Cynefin 框架(复杂度分类需要不同应对方式)
  11 +
  12 +来源:[Cynefin framework - Wikipedia](https://en.wikipedia.org/wiki/Cynefin_framework)、
  13 +[The Cynefin Framework | Untools](https://untools.co/cynefin-framework/)、
  14 +[ModelThinkers - Cynefin Framework](https://modelthinkers.com/mental-model/cynefin-framework)
  15 +
  16 +- 提出者 Dave Snowden(1999),"Cynefin" 是威尔士语,意为「栖息地/熟悉之处」。
  17 +- 五个域,按因果关系的可辨识程度划分:
  18 + - **Clear/Simple/Obvious**:因果关系直接、人人可见,"sense-categorize-respond",有标准最佳实践(best practice)。
  19 + - **Complicated**:因果关系存在但需要专家分析才能看清,"sense-analyse-respond",靠"good practice"(多个可行方案里选一个)。
  20 + - **Complex**:因果关系只能事后回溯地理解、不会重复出现,"probe-sense-respond",需要并行试验去找出模式(emergent practice)。
  21 + - **Chaotic**:因果关系不可辨识,必须先"act"稳定局面,再回头"sense-respond"。
  22 + - **Disorder**:不知道自己处在哪个域,第一步是把问题拆开、把各部分分别归类。
  23 +- **对本任务的映射**:这正是"不能一套流程套所有任务"的理论根据——Simple/Complicated 域适合走
  24 + 已验证的标准流程(对应骨架"照抄不裁剪"),Complex/Chaotic 域需要探测式、增量式推进(对应"裁剪+边观察边调整")。
  25 + Cynefin 本身不提供"如何把任务复杂度映射到具体流程步骤数"的量化方法,只提供定性分类,
  26 + 这是它与 T-shirt sizing / INVEST 的互补关系(分类之后还需要一把可比较的尺子)。
  27 +
  28 +### A2. 敏捷估算:T-shirt sizing / Story Point(复杂度信号转可比较量表)
  29 +
  30 +来源:[T Shirt Sizing: Agile Estimation & Capacity Planning | Asana](https://asana.com/resources/t-shirt-sizing)、
  31 +[T-Shirt Sizing in Agile: Complete Guide | teachingagile](https://teachingagile.com/scrum/psm-1/scrum-planning-estimation/estimation-techniques/t-shirt-sizing)
  32 +
  33 +- T-shirt sizing 用 XS/S/M/L/XL 这类相对档位代替绝对工时估算,理由是"人类擅长相对比较(这个比那个大/小/差不多),不擅长绝对数字估算"。
  34 +- 常见做法是先用 T-shirt 档位做粗筛(适合早期、细节不足、只求方向不求准确工期的场景——路线图/发布规划),
  35 + 再把档位映射到具体 Story Point 数值区间(如 S=1-2 分、M=3-5 分)用于冲刺内的细粒度规划。
  36 +- Story Point 度量的是"相对工作量/复杂度"而非工时,允许团队用比数字更多维的方式思考(时间+难度+不确定性一起打包进一个点数)。
  37 +- **对本任务的映射**:这套方法论提供了"复杂度信号→档位→流程形状"这条链路的中间一环——
  38 + 先给任务打一个粗档位(T-shirt size),再让档位决定要不要走全套骨架还是裁剪版。
  39 + 当前 `workgraph-planning/agent.md` 里没有类似的显式打分/分档步骤,裁剪判断完全依赖 LLM 一次性通读输入后的直觉判断(见块B)。
  40 +
  41 +### A3. INVEST 原则与 SPIDR 拆分模式(需求独立性/够小的判据)
  42 +
  43 +来源:[SPIDR: Five Simple but Powerful Ways to Split User Stories - Mountain Goat Software](https://www.mountaingoatsoftware.com/agile/five-simple-but-powerful-ways-to-split-user-stories)、
  44 +[SPIDR – five simple techniques - itemis](https://blogs.itemis.com/en/spidr-five-simple-techniques-for-a-perfectly-split-user-story)
  45 +
  46 +- INVEST:好的用户故事应该是 Independent(独立)、Negotiable(可协商)、Valuable(有价值)、
  47 + Estimable(可估算)、Small(够小)、Testable(可测试)。"够小"的判据之一是"6-10 个故事应该能在一个 sprint 内做完"。
  48 +- SPIDR(Mike Cohn 提出)是拆分故事的五种具体手法:**S**pike(先用一次探索性任务摸清未知再拆)、
  49 + **P**ath(按用户可达成目标的不同路径拆,如"信用卡支付"vs"Apple Pay支付")、**I**nterface(按平台/设备拆)、
  50 + **D**ata(按数据范围简化/限制来分批交付价值)、**R**ules(按业务规则的子集拆)。
  51 +- SPIDR 与 INVEST 是互补关系,不是替代关系:"可以把 SPIDR 当 INVEST 的补充,也可以反过来看"。
  52 +- **对本任务的映射**:INVEST 的"Independent"和"Small"两条,是判断"这个 work graph 节点是否值得单独拆出一个节点"
  53 + 的天然判据——对照 `workgraph-planning/agent.md` 约束里"一个节点=一件能一句话说清「做完什么算成功」的事",
  54 + 与 INVEST 的精神一致,但仓库现有文档里没有引用 INVEST/SPIDR 本身,这条映射是本次调研新做的类比,未见仓库内部提及。
  55 +
  56 +### A4. 精益 / YAGNI 视角(过度流程是浪费,但裁剪也可能矫枉过正)
  57 +
  58 +来源:[YAGNI (You Aren't Gonna Need It) | Laws of Software Engineering](https://lawsofsoftwareengineering.com/laws/yagni/)、
  59 +[YAGNI is about much more than avoiding premature optimization | Hacker News 讨论](https://news.ycombinator.com/item?id=33235887)
  60 +
  61 +- YAGNI 出自极限编程:不要在真正需要之前添加功能,"做能work的最简单的事"。
  62 +- 核心论据是维护成本:每一行代码/每一个流程步骤都要被理解、测试、调试、在需求变化时更新;
  63 + "研究显示 64% 的功能很少或从未被使用"(引自 codeCake 对 YAGNI 的综述,二手数据未见原始出处,此点标注**未核实**——
  64 + 搜索结果里这条统计数字反复出现在多篇二手博客中,但没有一篇给出可验证的一手研究链接)。
  65 +- **关键限制/矫枉过正的风险**(Hacker News 讨论 + Laws of Software Engineering 页面共同指出):
  66 + YAGNI 与架构规划之间存在张力——"你不能靠以后加楼层来盖摩天大楼",YAGNI 适用于功能与抽象层,
  67 + 不适用于地基级的架构决策;平衡靠持续重构、自动化测试、增量式设计来维持,而不是靠一次性把流程砍到最少。
  68 +- **对本任务的映射**:这正是本次训练要验证的判据的另一半——裁剪不是单向"越少越好",
  69 + 该保留的(比如"每个非入口节点必须有兜底边""数据契约必须声明")属于"地基级"约束,
  70 + 不受任务复杂度高低影响,这与块B里 `workgraph-planning/agent.md` 的"五项校验"(结构合法性)和
  71 + "裁剪授权"(内容取舍)是两个独立维度高度吻合——五项校验从不因任务简单而放松,裁剪只发生在节点数量/骨架选型上。
  72 +
  73 +**块A 小结**:四套外部方法论覆盖了"识别复杂度类型(Cynefin)→ 打分定档(T-shirt/Story Point)→
  74 +落到需求粒度的可执行判据(INVEST/SPIDR)→ 警惕两个方向的矫枉过正(YAGNI 的张力)"这条完整链路。
  75 +仓库现状(块B)目前只有 Cynefin 式的定性判断("宿主角色定义+任务描述→选骨架")和 YAGNI 式的裁剪授权,
  76 +**缺 T-shirt sizing 式的显式复杂度打分环节**,也没有引用或复刻 INVEST/SPIDR 的拆分判据——
  77 +这是"元规划判据能否被训出来"这个问题里,外部方法论能提供但仓库尚未采纳的部分,留给 Digester/训练阶段参考。
  78 +
  79 +---
  80 +
  81 +## 块B · 仓库内部权威源精读(比外部资料更权威)
  82 +
  83 +### B1. `system/agents/workgraph-planning/agent.md` 全文精读
  84 +
  85 +来源:`system/agents/workgraph-planning/agent.md`(664 行,全文已读,行号对照 2026-08-23 版本)
  86 +
  87 +#### Step 2 · 读候选骨架(原文,L75-86)
  88 +
  89 +> 每个模板的 **`whenToUse` 字段是选型的唯一依据**——它写清楚了适用场景、典型信号词、
  90 +> 以及与其他模板的区别。拿宿主 org node 的角色定义 + 任务描述对照着读,**不要凭 `id` 猜**。
  91 +>
  92 +> 这是**起点集合,不是穷举枚举**。目录里将来可能有更多文件,永远以 `ls` 的实际结果为准。
  93 +>
  94 +> ⚠️ **一条硬规则**:宿主 org node 是 **`org-validator`** 时,**必须**用 `validator.json` 骨架,
  95 +> 第一个节点**必须**是 `validator-triager`。理由见 §硬性约束·约束五。
  96 +
  97 +#### Step 4 · 规划(原文,L117-148,含裁剪授权原句)
  98 +
  99 +> 综合 Step 1/2/3 三份输入,产出:**节点列表 + 执行流边 + 边上的数据契约**。
  100 +>
  101 +> 🚨 **第三项不是可选的。** 边上不声明数据契约(`produces` / `needs`),
  102 +> 下游节点的提示词里就**没有上游产物的路径**,它会像第四次真跑那样直接失败。
  103 +>
  104 +> 你**被明确允许**:
  105 +>
  106 +> - **裁剪**:骨架五个节点,这次任务只需要三个 → 砍掉两个(比如任务不需要 BRD,直接从 PRD 起步);
  107 +> - **替换**:把某个节点的本体换成更贴合本次任务的;
  108 +> - **组合**:拿 `executor.json` 做主干,把 `planner.json` 的验收产出节点接进去;
  109 +> - **增删验收产出节点**:`goal-benchmark` / `goal-test-data` / `goal-test-script` 三个是**动态选入**的
  110 +> (27-E2E §十一),按本次 `task-goal` 的验收方式选一个、选几个、或一个都不选。
  111 +>
  112 +> 你**不被允许**:
  113 +>
  114 +> - 不加思考地照抄某个骨架原样交回(那说明你没做 Step 1 的判断,而且**骨架里没有数据契约**,
  115 +> 照抄出来的图每条边都不传数据);
  116 +> - 留着 `{{orgNode}}` / `{{implAgent}}` 这类占位符就交回(引擎落出来是一张引用不存在 agent 的废图);
  117 +> - 把不同职能塞进同一个节点(**一个节点 = 一件能一句话说清「做完什么算成功」的事**);
  118 +> - 画出违反下面「五项校验」的图;
  119 +> - **在节点内部再套一层四段式流转**(约束四,最容易犯,务必读完)。
  120 +>
  121 +> **有 `remediation_note` 时的重规划三选一**(27-E2E §四 #4 的判断留在这一层做,不上升到 org 层):
  122 +>
  123 +> | 判断 | 怎么画 |
  124 +> |---|---|
  125 +> | 上一轮图的**形状**就是错的(少了一步 / 拆错了) | 重画一张新图 |
  126 +> | 图没问题,只是某个节点**干砸了** | 图形状照旧重画一张,把 `remediation_note` 作为该节点的输入上下文写进规划记录 |
  127 +> | 归因是 `infra_flake`(进程超时 / 被杀) | **不用重规划**,直接向引擎汇报「原地重跑即可」——这类不烧任何计数 |
  128 +
  129 +⚠️ **重要观察**:Step 4 唯一给出的裁剪具体例句就是"任务不需要 BRD,直接从 PRD 起步"——
  130 +这恰好是块C要核实的三个案例(及补充发现的第四个 planner 类案例)理论上最贴近的场景。
  131 +块C 的实测结果见下方,**直接检验了这句例句在真实运行里有没有被落实**。
  132 +
  133 +#### Step 5 · 落盘规划记录,五项校验自查(原文节选,L163-209)
  134 +
  135 +文件至少包含七节结构(原文列出的 markdown 模板,字段名逐一摘录):
  136 +
  137 +> 1. 输入 2. 候选骨架评估(模板 / whenToUse摘要 / 是否采用 / 理由)
  138 +> 3. 本体核实(节点 / 想要的本体 / 清单里有吗 / 最终用了什么)
  139 +> 4. 最终图 5. 与骨架的差异及理由 6. 五项校验自查 7. 招聘结果(Step 6 之后回填)
  140 +
  141 +> **这一步不能跳。** 27-P3/P4 §八.8 写明:**图的规划质量没有硬校验**,五项只保证图**结构合法**,
  142 +> 保证不了它**适合这个任务**。这份 md 是人类事后发现图不合理时唯一的决策线索。
  143 +
  144 +⚠️ **关键约束**:五项校验(无环/单一入口/可达性/回退边标注/fail 兜底边)验的是"结构合法",
  145 +不验"是否适合这次任务的复杂度"——这句原文明确承认了"裁剪判断质量"目前**没有任何自动化校验兜底**,
  146 +完全依赖 LLM 单次判断,这与块A的 Cynefin/YAGNI 讨论里"矫枉过正"的风险直接对应:
  147 +裁剪多了/少了都不会被系统拦下来,只能靠事后人工审计规划记录发现。
  148 +
  149 +#### 约束一:五项校验原文(L405-424,逐条摘录)
  150 +
  151 +> 1. **无环**(仅针对 `edgeKind='forward'`)—— 三色 DFS。
  152 +> 2. **单一入口** —— 必须恰好有一个入度为 0 的 forward 节点,任务从这里进入。
  153 +> 3. **可达性** —— 每个节点都必须从入口可达,孤立节点直接拒绝。
  154 +> 4. **回退边必须显式标注** —— 任何指向"拓扑序更早节点"的边,`edgeKind` 必须是 `backward`;
  155 +> 引擎独立复核,不信任标注(**反向也查**:没构成回路的边不许标 `backward`)。
  156 +> 5. **fail 兜底边** —— **除图的唯一入口节点外**,每个节点都必须至少留一条 `failReason`
  157 +> 为空的兜底边(2026-08-21 收紧,见约束三:不再要求"先有别的 fail 边"这个前提)。
  158 +
  159 +手工验算法(原文表格,L417-423):
  160 +
  161 +| # | 手工验算法 |
  162 +|---|---|
  163 +| 1 | 把所有 `backward` 边划掉,剩下的边必须能排出拓扑序 |
  164 +| 2 | 只数 `forward` 边的入度,入度为 0 的节点必须**恰好一个** |
  165 +| 3 | 从入口沿 forward 边 BFS,必须覆盖 `nodes` 里每一个节点 |
  166 +| 4 | 任何 `to` 在拓扑序上早于 `from` 的边,必须带 `"edgeKind": "backward"` |
  167 +| 5 | 除了第 2 条找出的那个唯一入口,**逐个点名图里其余每一个节点**,确认每个都至少有一条 `condition:"fail"` 且没写 `failReason` 的边——不能只挑"已经有 fail 边"的节点抽查 |
  168 +
  169 +其余硬性约束(二至九)速记(未逐字摘录,仅记要点,来源同文件):
  170 +- 约束二:`nodeName`(图内唯一,带宿主 org 节点前缀)≠ `systemAgentId`(跨图复用,不带前缀)。
  171 +- 约束三:除入口节点外每个节点都必须留一条兜底边(2026-08-21 收紧,判据不再要求"先有别的 fail 边")。
  172 +- 约束四:不许在节点内部再套一层 RESEARCH→PLAN→EXECUTE→VERIFY 四段式(会导致两层 Context Flush 互相清空对方上下文)。
  173 +- 约束五:宿主是 `org-validator` 时归因节点(`validator-triager`)必须排第一位。
  174 +- 约束六:边不跨层,归因可以跨层(两件事)。
  175 +- 约束七/八:元 agent 与 `workgraph-planning` 自己都不许入图。
  176 +- 约束九:forward 边上必须声明数据契约(`produces`/`needs`,取值域仅 7 个 kind)。
  177 +
  178 +### B2. `system/work-graph-templates/` 四份骨架 + README.md 精读
  179 +
  180 +来源:`system/work-graph-templates/{planner,executor,executor-fanout,validator}.json` + `README.md`
  181 +
  182 +| 骨架 | id | 宿主 org node | 节点链(whenToUse 摘要) | dataContractNotes 要点 |
  183 +|---|---|---|---|---|
  184 +| `planner.json` | planner | `org-planner`(规划类,产出文档/规格而非可运行产物) | brd→prd→sdd→benchmark→validator(5节点) | 三份文档各自 produces 自己的 kind;prd 的产出方隔了一个节点给 benchmark,用 needs 中继;acceptance 是本图内唯一该沿边声明任务级共享 kind 的情形(产出方和消费方都在本图内) |
  185 +| `executor.json` | executor | 执行类(`org-coder`/`org-writer`/`org-monitor`),单交付物 | impl→test→validator(3节点) | 交付物走 artifact,自测记录走 log;validator 既要看 log 也要看交付物本身,用 needs artifact 中继 |
  186 +| `executor-fanout.json` | executor-fanout | 执行类,任务能拆成互不依赖、可并行的分支 | split→(impl/test)×N→merge→integration→validator(8节点,本文件示例2分支) | 拆分节点产物声明成 contract 而非 artifact(避免被先跑完的分支产物顶掉);merge 的已知上限是索引按 kind 只回最新一份,需要提示词自己按目录找齐 |
  187 +| `validator.json` | validator | **`org-validator` 专用**,硬性约束 | validator-triager→benchmark-validator→testdata-validator(3节点) | 两条 forward 边只写 needs,不写 produces——判词/评分文件刻意不进产物索引,写 produces 会造成假警报;被验产物不在本图,`required:false` 是数据契约规则的合规逃生口 |
  188 +
  189 +**四张骨架的共同形状**(README 原文,L29):
  190 +
  191 +> 四张图共享一个形状:**做 → 自检 → 本层验收,验收失败沿 `backward` 边退回重做**。差异只在中段。
  192 +
  193 +**`planner.json` 五节点之间的 needs 依赖链**(核实原文 JSON,`system/work-graph-templates/planner.json`):
  194 +
  195 +```
  196 +org-planner-brd --success--> org-planner-prd produces:[brd]
  197 +org-planner-prd --success--> org-planner-sdd produces:[prd]
  198 +org-planner-sdd --success--> org-planner-benchmark produces:[sdd], needs:[prd]
  199 +org-planner-benchmark --success--> org-planner-validator produces:[acceptance], needs:[brd,prd,sdd]
  200 +```
  201 +
  202 +**如果砍掉 `org-planner-brd`("不需要 BRD,直接从 PRD 起步")会发生什么,逐条核实**:
  203 +- `org-planner-prd → org-planner-sdd` 这条边只声明 `produces:["prd"]`,**不 needs brd**,砍掉 brd 节点不会破坏这条边;
  204 +- 真正依赖 `brd` 这个 kind 的只有 `org-planner-benchmark --> org-planner-validator` 这条边的 `needs:["brd","prd","sdd"]`——
  205 + 砍掉 brd 节点后,这个 `needs` 里的 `brd` 就会在图里找不到产出方,触发 README 里明确写的规则 6(`data-contract`):
  206 + 「`needs` 的每个 kind 在图里都有产出方,否则 `rule=data-contract` 整张图被拒」;
  207 +- 修法二选一(README 原文):把 `org-planner-benchmark → org-planner-validator` 边上的 `needs` 从
  208 + `["brd","prd","sdd"]` 改成 `[{"kind":"brd","required":false}]`(brd 变成可选输入),或者干脆把
  209 + `benchmark`/`validator` 也从 `needs` 列表里去掉 `brd`;
  210 +- **结论**:Step 4 例句里"骨架五个节点,这次任务只需要三个 → 砍掉两个(不需要 BRD 直接从 PRD 起步)"这句话
  211 + 在技术上是可行的,但**不是简单删掉一个节点就完事**——必须同步改掉下游 `needs` 声明,否则会触发
  212 + `rule=data-contract` 被引擎打回。这是"裁剪授权"原句里没有言明、但 README 数据契约规则里能推导出的一条隐藏成本,
  213 + 值得在训练判据里显式化:**裁剪一个节点前,先检查有没有下游节点的 `needs` 依赖它的产出**。
  214 +
  215 +**README 里"当前模板"表**(L20-28,逐字摘录节点链列):
  216 +
  217 +| 文件 | id | 宿主 org node | 节点链 |
  218 +|---|---|---|---|
  219 +| `planner.json` | `planner` | 规划类(`org-planner`) | `brd → prd → sdd → benchmark → validator` |
  220 +| `executor.json` | `executor` | 执行类(`org-coder` / `org-writer` / `org-monitor`),单交付物 | `impl → test → validator` |
  221 +| `executor-fanout.json` | `executor-fanout` | 执行类,可并行拆分 | `split → (impl/test)×N → merge → integration → validator` |
  222 +| `validator.json` | `validator` | **`org-validator` 专用** | `validator-triager → benchmark-validator → testdata-validator` |
  223 +
  224 +---
  225 +
  226 +## 块C · 历史真实案例核实(比外部方法论更重要)
  227 +
  228 +⚠️ **首个重要发现**:任务指定的三个案例(p-v82tpc / p-pyjha7 / p-iyshuc)经核实后,
  229 +**没有一个是 `org-planner` 宿主节点**——p-v82tpc 和 p-pyjha7 都是 `org-validator`(用 `validator.json`),
  230 +p-iyshuc 是 `org-coder`(用 `executor.json`,且有两版:首次规划 + infra_flake 重规划)。
  231 +也就是说,块B里 Step4 那句"不需要 BRD 直接从 PRD 起步"的裁剪例句,**这三个指定样本天然无法验证**——
  232 +它们的骨架本身就不含 BRD 节点(`validator.json`/`executor.json` 都是 3 节点骨架,没有 brd/prd/sdd 这类文档节点)。
  233 +为了不遗漏"planner 类骨架实际有没有被裁剪过"这个问题,调研额外核实了同一批项目里唯一存在的
  234 +`org-planner` 案例(p-v1mpcl / T-mt1qx0c4-95bf),补在 C4,来源:`data/companies/e2e-demo/projects/p-v1mpcl/workgraph-plan-T-mt1qx0c4-95bf.md`。
  235 +
  236 +### C1. p-v82tpc / T-mt2r6fz0-125b(宿主 org-validator)
  237 +
  238 +来源:`data/companies/e2e-demo/projects/p-v82tpc/workgraph-plan-T-mt2r6fz0-125b.md`
  239 +
  240 +- **实际图**:`validator-triager → benchmark-validator → testdata-validator`,与 `validator.json` 骨架
  241 + **完全一致,节点数/边数一个不少不多**(原文第4节:「与骨架 `validator.json` 完全一致,未裁剪未替换」)。
  242 +- **任务原文复杂度特征**:任务本身是"apple.com 风格 lemonboss 官网首页"(单页静态站,无持久化,交付物单一),
  243 + 但**这个宿主节点是 org-validator**(判定"整个任务达成了吗"的验收环节),它的职责与页面本身复不复杂无关——
  244 + 它固定要走归因→评分校验→测试数据校验三步,任务描述的简单/复杂程度不影响这个骨架的形状。
  245 +- **是否真的裁剪过**:**没有**。规划记录第5节原文:「无差异。任务描述里没有额外要求跳过 benchmark 或
  246 + testdata 校验……标准三节点骨架已覆盖这个诉求,不需要增删节点」。
  247 +
  248 +### C2. p-pyjha7 / T-mt45nzvc-2235(宿主 org-validator)
  249 +
  250 +来源:`data/companies/e2e-demo/projects/p-pyjha7/workgraph-plan-T-mt45nzvc-2235.md`
  251 +
  252 +- **实际图**:同样是 `validator-triager → benchmark-validator → testdata-validator`,与骨架完全一致。
  253 +- **任务原文复杂度特征**:同一类"apple.com 风格 lemonboss 官网首页"任务,附带更细的验收要求
  254 + (三个卖点区块、导航平滑滚动不出现 # 锚点、任意宽度不出现横向溢出),上游还带着一个前序失败上下文
  255 + (`org-coder` attempt-0 失败,`fail_reason=body_not_ready`)。
  256 +- **是否真的裁剪过**:**没有**。规划记录第5节原文:「无差异,原样采用骨架三节点四边结构——本次验收任务
  257 + 不需要额外验收产出节点……testdata-validator 按骨架保留(即使 `goal-test-data/` 当前不存在,读取契约里
  258 + 已标 `required:false`,不会因缺失而报错)」。**这一点值得注意**:即便 `goal-test-data/` 这类下游依赖的
  259 + 产物实际不存在,规划者也没有裁掉 `testdata-validator` 节点,而是依赖契约里的 `required:false` 逃生口让它
  260 + "跑但允许 skip",没有触发结构层面的裁剪判断。
  261 +
  262 +### C3. p-iyshuc / T-mt5d3mi9-57cf 与 -retry2(宿主 org-coder,两版对照)
  263 +
  264 +来源:`data/companies/e2e-demo/projects/p-iyshuc/workgraph-plan-T-mt5d3mi9-57cf.md`
  265 +与同目录下 `-retry2.md`
  266 +
  267 +- **v1(首次规划)实际图**:`org-coder-impl(coder) → org-coder-test(unit-tester) → org-coder-validator(coder-validator)`,
  268 + 与 `executor.json` 骨架完全一致。规划记录第5节原文:「完全采用 `executor.json` 三节点串行骨架,未裁剪、
  269 + 未增删节点:任务是单一页面交付物……不在本图内重复」,并明确排除了 `executor-fanout.json`:
  270 + 「首页三个卖点区块同属一个页面/一次实现,不是独立可并行的子任务」——这是**唯一一处三个原始样本里
  271 + 出现"骨架间比较+排除理由"的记录**(其余两个案例只是确认必须用 `validator.json`,没有真正对比过其他骨架)。
  272 +- **retry2(infra_flake 重规划)**:归因是 `infra_flake`(进程被中断,非节点/图形状问题)。
  273 + 规划记录第2节原文:「本次归因明确落在 **infra_flake**……图的形状没有被点名有问题……因此本轮**不重新
  274 + 设计图形状**,直接**复用上一份规划记录里验证过的同一张图**……未做任何裁剪/替换/组合的变更」。
  275 + 这**直接对应块B `agent.md` Step4「重规划三选一」表格里的第三行**(`infra_flake` → 不用重规划,
  276 + 原地重跑),是一次**真实发生**、且规划者显式引用了该判据文字("按 agent.md Step4「有 remediation_note
  277 + 时的重规划三选一」")的落地案例——证明这条判据至少在这一实例中被正确执行。
  278 +- **是否真的裁剪过**:**两版都没有**。两次都是完整 3 节点骨架,唯一的差异是 retry2 版本的判断依据是
  279 + "沿用上一轮"而非"重新评估骨架"。
  280 +
  281 +### C4.(补充,非任务原指定,但为回答"planner 类骨架是否被裁剪过"这一问题而额外核实)
  282 +p-v1mpcl / T-mt1qx0c4-95bf(宿主 org-planner)
  283 +
  284 +来源:`data/companies/e2e-demo/projects/p-v1mpcl/workgraph-plan-T-mt1qx0c4-95bf.md`
  285 +
  286 +- **任务原文**:「读 lemonboss 仓库文档+代码,产出 apple.com 风格的静态官网,讲清 why/how/what,
  287 + 含核心价值点、功能模块、独特性说明,至少 3-4 张界面截图/示意图配说明」——这正是块B `agent.md` Step4
  288 + 例句所指的场景类型(规划类交付、单一静态站点、无持久化、无多角色评审)。
  289 +- **实际图**:`org-planner-brd → org-planner-prd → org-planner-sdd → org-planner-benchmark → org-planner-validator`,
  290 + **完整 5 节点,一个没砍**,与 `planner.json` 骨架逐字一致。
  291 +- **是否真的裁剪过**:**没有**。规划记录第5节原文:「无差异,原样采用骨架——本次任务(读文档产出规格化的
  292 + 静态网站)与骨架设计意图……完全吻合,不需要裁剪或替换」。
  293 +- **⚠️ 这是本次调研里唯一一个与块B Step4 裁剪例句"直接可比"的真实样本,结果是反例**:
  294 + 例句设想的场景(读文档产出规格化网站)与这个真实任务高度相似,但规划者**保留了 BRD 节点**,
  295 + 没有执行例句里演示的裁剪动作。规划记录里给出的理由是"brd/prd/sdd 描述 why/how/what……完全对应骨架语义",
  296 + 即规划者认为"讲清 why"就等于需要 BRD,而不是把"BRD 对应的信息量是否足够小到可以并入 PRD"作为裁剪判据。
  297 +
  298 +### 块C 总体发现(跨 4 个样本,5 份规划记录)
  299 +
  300 +1. **裁剪发生次数 = 0/5**。全公司当前可查到的全部 5 份 work graph 规划记录(覆盖 `validator.json` ×2、
  301 + `executor.json` ×2、`planner.json` ×1),**没有一次真正执行过节点裁剪/替换/组合**,全部是"骨架完整照搬"。
  302 +2. **"骨架间比较并排除"的记录只出现过一次**(C3 排除 `executor-fanout.json` 的理由),
  303 + 其余样本的"候选骨架评估"表格虽然按 agent.md 规定的格式填了四行,但除了命中的那一行都是
  304 + "❌ 宿主不是XX"这类**基于宿主类型的硬性排除**(几乎不需要任务复杂度判断,选型规则是确定性的:
  305 + `org-validator`→`validator.json`,`org-coder`→`executor.json`/`executor-fanout.json`,`org-planner`→`planner.json`),
  306 + **真正需要在"同一骨架内部裁剪节点数量"这一层做判断的场景,目前 0 例真实发生**。
  307 +3. **C4 的反例价值最高**:它是唯一一个任务特征与 Step4 裁剪例句高度吻合、却仍然选择"完整保留"的真实案例,
  308 + 说明**当前 `agent.md` 里的裁剪授权文字是"允许但从未被验证过是否会被正确执行"**——
  309 + 这正是本次训练要验证的核心问题:"按任务复杂度裁剪 work graph 形状"这条元规划判据,
  310 + 在真实数据里目前**没有一次正样本**,只有反复出现的"完整保留"负样本(如果把"该裁剪却没裁剪"算作负样本的话,
  311 + 但也存在另一种解读:这四个真实任务客观上都不满足裁剪条件,规划者的"不裁剪"判断本身是正确的——
  312 + 这一点无法仅凭规划记录本身判定,需要人工进一步核实"C4 的 BRD 节点产出物是否事后被证明是冗余的",
  313 + 本次调研未做这一步,如实标注为**未核实**)。
  314 +4. **executor-fanout.json 目前 0 个真实落地样本**——四个真实规划记录里没有一个选用它,
  315 + C3 是唯一一次"考虑过它但排除了"的记录,其余样本连候选骨架表格里都是机械排除(宿主类型不对)。
  316 + 这意味着"能不能拆并行分支"这条裁剪/扩展判据同样缺乏正样本可供训练参考。
  317 +
  318 +---
  319 +
  320 +## 汇总:三块调研对训练判据的启示
  321 +
  322 +| 判据环节 | 外部方法论怎么说(块A) | 仓库现状怎么写(块B) | 真实数据怎么做(块C) |
  323 +|---|---|---|---|
  324 +| 复杂度识别 | Cynefin:先分类(Simple/Complicated/Complex/Chaotic),再定应对策略 | 靠"宿主角色定义 + 任务描述"人工通读判断,无显式分类步骤 | 4/5 样本的骨架选型完全由宿主类型(org-planner/coder/validator)**确定性决定**,未见任务复杂度参与选型 |
  325 +| 复杂度打分 | T-shirt sizing/Story Point:先打粗档位,再细化 | 无对应机制 | 无对应机制,规划记录里没有任何"复杂度评分"字段 |
  326 +| 拆分/合并判据 | INVEST(独立/够小)+ SPIDR(5种拆分手法) | "一个节点=一件能一句话说清的事";裁剪/替换/组合三种授权 | 0 次裁剪,1 次"排除 fanout",其余为宿主类型的硬性匹配 |
  327 +| 矫枉过正的平衡 | YAGNI:警惕功能/流程的双向过度(多了浪费,少了架构塌方) | "五项校验"验结构合法性但不验"是否适合任务",原文明说"没有硬校验" | C4 疑似"该裁未裁"的一个反例,但未核实是否属实(需要看产出物是否冗余) |
  328 +
  329 +**给下一阶段(Digester/Trainer)的建议方向**:
  330 +1. 当前样本量对"裁剪判据"这一具体能力是**信息量几乎为零**的(0 正样本),继续等真实数据积累裁剪案例,
  331 + 或者需要**主动构造**几个"任务足够简单、骨架该裁"的合成场景来补足训练信号;
  332 +2. C4 反例值得单独立案追踪——建议找宿主(org-planner)事后确认「这次的 BRD 产出物内容,
  333 + 是否本可以合并进 PRD 而不丢信息」,这能把"未核实"的猜测坐实成"确认过度设计"或"确认合理保留";
  334 +3. 块B 发现的"裁剪节点必须同步检查下游 needs 依赖"这条隐藏规则,建议补进 `agent.md` Step4 的裁剪授权段,
  335 + 作为显式的裁剪前置检查清单项(目前只在 README 的 data-contract 规则里间接可推导,容易被漏看)。
system/agents/workgraph-planning-methodology-trial/train/hunt/sources.json 0 → 100644
  1 +{
  2 + "task_id": "T-mt5ufepi",
  3 + "target_agent": "workgraph-planning-methodology-trial",
  4 + "generated_by": "innovator-hunt",
  5 + "version": "v1",
  6 + "blocks": {
  7 + "A_external_methodology": [
  8 + {
  9 + "topic": "Cynefin framework",
  10 + "claim": "五域(Clear/Complicated/Complex/Chaotic/Disorder)按因果可辨识程度分类,不同域需要不同应对策略(sense-categorize-respond / sense-analyse-respond / probe-sense-respond / act-sense-respond)",
  11 + "sources": [
  12 + "https://en.wikipedia.org/wiki/Cynefin_framework",
  13 + "https://untools.co/cynefin-framework/",
  14 + "https://modelthinkers.com/mental-model/cynefin-framework"
  15 + ],
  16 + "verified": true
  17 + },
  18 + {
  19 + "topic": "T-shirt sizing / Story Points",
  20 + "claim": "T-shirt sizing 用相对档位(XS-XL)代替绝对工时估算,适合早期粗筛,再映射到具体 Story Point 数值区间做细粒度规划",
  21 + "sources": [
  22 + "https://asana.com/resources/t-shirt-sizing",
  23 + "https://teachingagile.com/scrum/psm-1/scrum-planning-estimation/estimation-techniques/t-shirt-sizing"
  24 + ],
  25 + "verified": true
  26 + },
  27 + {
  28 + "topic": "INVEST principles",
  29 + "claim": "好用户故事应 Independent/Negotiable/Valuable/Estimable/Small/Testable;够小的判据之一是 6-10 个故事应能在一个 sprint 内完成",
  30 + "sources": [
  31 + "https://climbtheladder.com/what-makes-a-good-user-story-invest-acceptance-criteria/"
  32 + ],
  33 + "verified": true
  34 + },
  35 + {
  36 + "topic": "SPIDR splitting patterns",
  37 + "claim": "Mike Cohn 提出的 5 种拆分手法:Spike/Path/Interface/Data/Rules;与 INVEST 是互补关系而非替代",
  38 + "sources": [
  39 + "https://www.mountaingoatsoftware.com/agile/five-simple-but-powerful-ways-to-split-user-stories",
  40 + "https://blogs.itemis.com/en/spidr-five-simple-techniques-for-a-perfectly-split-user-story"
  41 + ],
  42 + "verified": true
  43 + },
  44 + {
  45 + "topic": "YAGNI / Lean",
  46 + "claim": "不要在真正需要前添加功能,做能work的最简单方案;核心论据是维护成本(理解/测试/调试/更新)",
  47 + "sources": [
  48 + "https://lawsofsoftwareengineering.com/laws/yagni/"
  49 + ],
  50 + "verified": true
  51 + },
  52 + {
  53 + "topic": "YAGNI 矫枉过正风险",
  54 + "claim": "YAGNI 与架构规划存在张力,'不能靠以后加楼层来盖摩天大楼',YAGNI适用于功能/抽象层而非地基级架构决策",
  55 + "sources": [
  56 + "https://news.ycombinator.com/item?id=33235887",
  57 + "https://lawsofsoftwareengineering.com/laws/yagni/"
  58 + ],
  59 + "verified": true
  60 + },
  61 + {
  62 + "topic": "'64% 功能很少或从未被使用' 统计数字",
  63 + "claim": "多篇二手博客引用此数字支持YAGNI,但未找到可验证的一手研究链接",
  64 + "sources": [],
  65 + "verified": false,
  66 + "note": "未核实——反复出现在二手来源中,未找到原始研究出处"
  67 + }
  68 + ],
  69 + "B_internal_authoritative": [
  70 + {
  71 + "topic": "workgraph-planning agent.md 全文",
  72 + "file": "system/agents/workgraph-planning/agent.md",
  73 + "sections_quoted": [
  74 + "Step 2 读候选骨架 (L75-86)",
  75 + "Step 4 规划·裁剪授权原句 (L117-148)",
  76 + "Step 5 落盘规划记录·七节结构 (L163-209)",
  77 + "约束一·五项校验原文 (L405-424)"
  78 + ],
  79 + "verified": true
  80 + },
  81 + {
  82 + "topic": "planner.json 骨架定义",
  83 + "file": "system/work-graph-templates/planner.json",
  84 + "claim": "5节点 brd→prd→sdd→benchmark→validator;benchmark→validator 边 needs:[brd,prd,sdd]",
  85 + "verified": true
  86 + },
  87 + {
  88 + "topic": "executor.json 骨架定义",
  89 + "file": "system/work-graph-templates/executor.json",
  90 + "claim": "3节点 impl→test→validator,含占位符 {{orgNode}}/{{implAgent}}/{{testAgent}}/{{validatorAgent}}",
  91 + "verified": true
  92 + },
  93 + {
  94 + "topic": "executor-fanout.json 骨架定义",
  95 + "file": "system/work-graph-templates/executor-fanout.json",
  96 + "claim": "8节点 split→(impl/test)×2→merge→integration→validator",
  97 + "verified": true
  98 + },
  99 + {
  100 + "topic": "validator.json 骨架定义",
  101 + "file": "system/work-graph-templates/validator.json",
  102 + "claim": "3节点 validator-triager→benchmark-validator→testdata-validator,两条forward边只写needs不写produces",
  103 + "verified": true
  104 + },
  105 + {
  106 + "topic": "work-graph-templates README",
  107 + "file": "system/work-graph-templates/README.md",
  108 + "claim": "四张骨架共同形状'做→自检→本层验收';砍掉 org-planner-brd 会触发 rule=data-contract(因 benchmark→validator 边 needs 里的 brd 找不到产出方)",
  109 + "verified": true
  110 + }
  111 + ],
  112 + "C_historical_cases": [
  113 + {
  114 + "case_id": "p-v82tpc/T-mt2r6fz0-125b",
  115 + "file": "data/companies/e2e-demo/projects/p-v82tpc/workgraph-plan-T-mt2r6fz0-125b.md",
  116 + "host_org_node": "org-validator",
  117 + "skeleton_used": "validator.json",
  118 + "pruned": false,
  119 + "note": "完整3节点,与骨架完全一致",
  120 + "verified": true
  121 + },
  122 + {
  123 + "case_id": "p-pyjha7/T-mt45nzvc-2235",
  124 + "file": "data/companies/e2e-demo/projects/p-pyjha7/workgraph-plan-T-mt45nzvc-2235.md",
  125 + "host_org_node": "org-validator",
  126 + "skeleton_used": "validator.json",
  127 + "pruned": false,
  128 + "note": "完整3节点;testdata-validator 保留即使 goal-test-data/ 不存在,靠 required:false 逃生",
  129 + "verified": true
  130 + },
  131 + {
  132 + "case_id": "p-iyshuc/T-mt5d3mi9-57cf (v1)",
  133 + "file": "data/companies/e2e-demo/projects/p-iyshuc/workgraph-plan-T-mt5d3mi9-57cf.md",
  134 + "host_org_node": "org-coder",
  135 + "skeleton_used": "executor.json",
  136 + "pruned": false,
  137 + "note": "完整3节点,唯一一处显式排除 executor-fanout.json 并给出理由(三卖点区块同属一次实现,非独立并行任务)",
  138 + "verified": true
  139 + },
  140 + {
  141 + "case_id": "p-iyshuc/T-mt5d3mi9-57cf (retry2)",
  142 + "file": "data/companies/e2e-demo/projects/p-iyshuc/workgraph-plan-T-mt5d3mi9-57cf-retry2.md",
  143 + "host_org_node": "org-coder",
  144 + "skeleton_used": "executor.json",
  145 + "pruned": false,
  146 + "note": "infra_flake归因,复用上一版图未重新设计,落地了 agent.md Step4 重规划三选一表格第三行的判据",
  147 + "verified": true
  148 + },
  149 + {
  150 + "case_id": "p-v1mpcl/T-mt1qx0c4-95bf (补充,非任务原指定)",
  151 + "file": "data/companies/e2e-demo/projects/p-v1mpcl/workgraph-plan-T-mt1qx0c4-95bf.md",
  152 + "host_org_node": "org-planner",
  153 + "skeleton_used": "planner.json",
  154 + "pruned": false,
  155 + "note": "全公司唯一一个org-planner真实案例,任务特征与Step4裁剪例句高度吻合(读文档产出规格化静态网站),但完整保留5节点包括BRD,是本次调研发现的唯一'与裁剪例句直接可比但未裁剪'的反例",
  156 + "verified": true
  157 + }
  158 + ]
  159 + },
  160 + "summary_finding": "全公司当前可查到的5份work graph规划记录(覆盖4个真实任务)中,裁剪发生次数为0;骨架选型100%由宿主org node类型确定性决定,未见任务复杂度参与选型判断;唯一一次'骨架间比较并排除'的记录出现在p-iyshuc案例中(排除executor-fanout.json);p-v1mpcl(C4)是唯一与agent.md Step4裁剪例句高度可比的真实样本,结果为完整保留而非裁剪,需要后续人工核实该BRD节点产出是否属实需要(本次未核实)。"
  161 +}
system/agents/workgraph-planning-methodology-trial/user.md 0 → 100644
  1 +# 上层上下文
  2 +
  3 +## 我的上级
  4 +- 直接向用户汇报 (无上级 Agent)
  5 +
  6 +## 用户偏好
  7 +(待用户定义)