Initial publish v0.1.0: standalone workflow core (corpus + examples + guards)
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
# 单门三维审查 checklist(review-dag)
|
||||
|
||||
> 单门 `review-dag` 替代 `review-design-space` + `review-iteration-plan` 双门(spec-02 §1 D-02)。
|
||||
> 门内分层三维:**TOPO**(拓扑)、**REQMAP**(需求映射)、**RELEASE**(滚动放行)。
|
||||
> 省的是编排开销,不省修订循环——三维各审独立风险面。
|
||||
>
|
||||
> **权威源**:本文件判据逐行复制 `dag-pipeline/spec-04` §1 三张表
|
||||
> (含 `NFR:` 前缀 / 里程碑边 / 里程碑节点豁免与 `estimated_sessions` 判据)。
|
||||
> 若本文件与 spec-04 §1 不一致,以 spec-04 §1 为唯一权威源。
|
||||
> (`spec-0N` 前身为 `dag-pipeline/03-design-0N-*`,2026-08-21 [org-internal #3072] phase 3
|
||||
> 升格迁移,旧名仅保留墓碑占位以维持旧 URL 可达。)
|
||||
|
||||
## TOPO — 拓扑维
|
||||
|
||||
| 检查项 | 判据 |
|
||||
|---|---|
|
||||
| 环检测 | 边方向图无环;有环 = BLOCKER |
|
||||
| 依赖正确性 | 每条边 `from→to` 方向正确(契约生产方先于消费方);缺边/错边 = MAJOR |
|
||||
| 大小均匀性 | 节点工作量分布均匀,无"巨型节点";巨型节点 = 单个 task 节点 `size_attrs.estimated_sessions ≥ 2` → MAJOR(需拆分;INFO 豁免不适用) |
|
||||
| **粒度下限** | 每个 task 节点预估实现时长由 `size_attrs.estimated_hours`/`estimated_sessions` 承载(冻结字段,见 spec-02 §2.1);判据一律以 `estimated_sessions` 为准(两字段一致性不变量见 spec-02 §2.1,完整分档见 spec-03 §3 规则 3):字段不一致(`|estimated_hours − 8 × estimated_sessions| > 2`)= MAJOR(需 `analyze-dag` 重填);`estimated_sessions < 0.25`(对应约 `estimated_hours < 2`)= 低于下限(MAJOR,≥3 处 = BLOCKER);`1 < estimated_sessions < 2` = 超出上限(MINOR,提示拆分;连续集成性工作不可拆分则 INFO);`estimated_sessions ≥ 2` = 巨型节点 → MAJOR(需拆分,见「大小均匀性」行,INFO 豁免不适用)(防工单元数据成本爆炸) |
|
||||
| 里程碑位置 | 每个 `cross_session_in ≥ 2` 汇聚点已焊入里程碑(spec-03 规则 2);缺失 = BLOCKER |
|
||||
| 可执行性 | 每个 task 节点可被单个 session 独立实现(EXE 折叠项;里程碑节点无实现工作、由 verify 承担,不参与本判据) |
|
||||
| 页尺寸自检信号 | 读 `{epic-slug}/dag` 页首 `> 页尺寸自检: 超限` 标志(spec-02 §2.6)→ 以 **INFO** finding 记录于 synthesis(`summary` = 页尺寸超限、子页已下沉 `{subpages}`),供 retrospective 统计与试点负责人核查;**不改变任何门判据、不触发重派生**(非 PASS/FAIL 判据) |
|
||||
|
||||
## REQMAP — 需求映射维
|
||||
|
||||
| 检查项 | 判据 |
|
||||
|---|---|
|
||||
| 需求覆盖 | **每需求至少一节点**:需求登记表每条 `REQ-F-{NNN}` 被 ≥1 节点的 `req_refs` 引用(无"有需求无节点"遗漏) |
|
||||
| 节点溯源 | **每 task 节点至少一需求**:每 task 节点 `req_refs` 非空且引用有效编号(无"有节点无需求"过度分解) |
|
||||
| 验收标准可证伪 | 每 task 节点 `acceptance_criteria` 可证伪且映射 `test_id`(CLR 折叠项:无"视情况而定";`NFR:` 前缀条目不参与本判据——其验证由 per-task review-code + 里程碑 verify 承担,见 spec-02 §2.9) |
|
||||
| **AC 路径覆盖** | 每 task 节点验收标准覆盖正常路径、错误路径、边界场景三类(`.octopus/archive/checklists/requirements-analysis.md` TST 8.3/8.7 等价);缺错误/边界路径 = MAJOR(`NFR:` 前缀条目不参与本判据——其验证由 per-task review-code + 里程碑 verify 承担,见 spec-02 §2.9) |
|
||||
| 契约↔节点一致性 | 每条 task 间跨 session 边的 `contract_ref` 与两端节点验收标准一致(里程碑边无 `contract_ref`、不参与本判据,见 spec-02 §2.1 / spec-03 §2) |
|
||||
|
||||
> **REQMAP 维仅审 task 节点**:milestone 节点无 `req_refs`/`acceptance_criteria`(只有 DoD,spec-03 §3 规则 2(b)),由 spec-05 里程碑 DoD 承担,非评审对象(spec-08 §2 里程碑行 `评审深度` 列 `—`)——故「每 task 节点」均不含里程碑行,含里程碑的 DAG 不会在 REQMAP 维产生误报。
|
||||
|
||||
> **AC 下沉子页的读取路径**:当节点 AC 细目因 `{epic-slug}/dag` 页尺寸预算超限下沉到 `{epic-slug}/dag-nodes/{node-id}` 子页时(spec-02 §2.6),reviewer 按 `{epic-slug}/dag` 页内 `{node-id} → {epic-slug}/dag-nodes/{node-id}` 指针读取子页核对「验收标准可证伪」「AC 路径覆盖」判据(子页 AC 与页内指针同源,均为冻结副本 `{epic-slug}/dag` 的一部分)。
|
||||
|
||||
## RELEASE — 滚动放行维
|
||||
|
||||
| 检查项 | 判据 |
|
||||
|---|---|
|
||||
| 就绪规则 | 节点 `ready` 当且仅当其所有跨 session 入边源节点均处于各自类型的终结态(task 源节点 `done`、里程碑源节点 `green`;同 session 边不阻塞就绪) |
|
||||
| 依赖批放行 | 按依赖层分批放行:一层内互不依赖的节点同批 `ready`(最大化并行,见 spec-05 里程碑) |
|
||||
| 契约冻结范围 | 仅 task 间的跨 session 边进入 `frozen`;同 session 边与里程碑边不冻结(spec-02 §1 D-05;里程碑边 `contract_state` 不适用,见 spec-02 §2.1 / spec-03 §2) |
|
||||
| 放行风险前移 | 高风险节点(breaking 契约 / 大 fan-out)前移至早期批次(RISK 折叠项)。**操作化锚点**:breaking 契约节点不得晚于其所在依赖层内其它非 breaking 节点的最早可用批次(同层内先于或等于);**大 fan-out** = 单节点跨 session 出边数 ≥ 3(取 `cross_session_edge_count` 阈值表 D3 档起点,spec-06 §2),此类节点同样适用「不晚于同层最早批次」规则——reviewer 按拓扑层序对批次划分做机械核对 |
|
||||
| 估算合理性 | 各 **task** 节点 `size_attrs.estimated_hours`/`estimated_sessions`(冻结字段)已填写、取值在 TOPO「粒度下限」「大小均匀性」界内(两字段一致性不变量见 spec-02 §2.1),并支撑批次划分——同批并行节点由跨 session 边拓扑可达性决定(「依赖批放行」行);容量/并发上限属 Orchestrator 执行期资源配置、单门不审(§2.1 PAR 4.4 丢弃行,EST 折叠项)——reviewer 对照冻结 node schema 逐 **task** 节点核验该字段存在且取值合理(里程碑节点无实现工作、不填,见 spec-02 §2.1 / spec-03 §3) |
|
||||
|
||||
## 门收敛规则
|
||||
|
||||
| 项 | 规则 |
|
||||
|---|---|
|
||||
| 轮次上限 | 由评审深度派生(spec-06):D1≤2,D2≤3,D3≤3,D4≤4 |
|
||||
| PASS | 三维均 0 BLOCKER 且 0 MAJOR |
|
||||
| WARN | 0 BLOCKER;MAJOR 在修订轮内关闭;MINOR/INFO 允许(收敛为 PASS) |
|
||||
| FAIL | 任一维存在 BLOCKER |
|
||||
| INFO 处理 | INFO 不阻塞,记录供 retrospective 统计与试点负责人核查(review-dag 因 `never_trim: true` 结构性不可裁剪——gate-trim 元进程已退役,该字段自足于 `dag:` 块,见 spec-07 §5) |
|
||||
| 部分重审 | **round 3 起**(round 2 仍全维重审——三维共享 DAG 形状/字段副作用面,先以一轮全维重审建立干净基线,再于 round 3 起缩窄;与共享 review-artifact skill「round 2 起部分重审」的差异是有意的,因本门仅 3 维且互为副作用面)轮间只重审上一轮的 FAIL / WARN(含未关闭 BLOCKER 或 MAJOR 的维)/ UNRESOLVED 维(不省修订循环);维度需重审 = 该维 verdict 为 FAIL / WARN(含未关闭 BLOCKER 或 MAJOR)/ UNRESOLVED,MINOR/INFO 维视为通过不复跑。任一维修订改变**共享 DAG 形状(节点/边集合)或共享字段(`size_attrs`、AC 文本、契约内容)**时,以该字段为判据输入的相关维随轮重验(三维互为副作用面) |
|
||||
| 输出 | 单门 synthesis(复用 `synthesis.schema.json`,`dimensions` 键为 TOPO/REQMAP/RELEASE)+ commit status `pipeline/review-dag` |
|
||||
Reference in New Issue
Block a user