推进开发任务到 ready
让 AI 按 §1-§5 跑通你的开发包 —— 中间任何一步过不去都会被拦下
写完 PD / 架构 / 测试包之后,开发包要按一条流水线推进。Aiko Chat 不能跳步、不能假装"已完成"。
一句话流程
DoR → §1 实现 → §2 单测 → §3 写 E2E → §4 跑 E2E → §5 回填证据 → ready每跑完一段,你 / Aiko Chat 用 advance-node.sh 推进节点。没跑到的段会被 Validator 拒绝。
5 个阶段你具体在做什么
| 阶段 | tasks 段 | pipeline 节点 | 你要做的 | 测试层 |
|---|---|---|---|---|
| DoR | — | dor | 三包 validate 通过 | — |
| §1 实现 | ## §1 Implement capability | impl | 让 Aiko Chat 按 spec 写代码 | — |
| §2 单测 | ## §2 TDD | tdd | 写单测覆盖 spec scenario | L1 |
| §3 写 E2E | ## §3 Generate E2E | e2e_gen | 按 test-cases 生成 E2E 脚本 | — |
| §4 跑 E2E | ## §4 Run E2E | e2e_run | 本 group 全部 L2 用例 pass | L2 |
| §5 证据 | ## §5 Evidence | evidence | 截图 + 报告写入 test-evidence.md | L4 |
| ready | — | ready | pre-archive 校验,可归档 | — |
DoR 清单:开始写代码前必须满足
feature/* 分支拉出来写代码之前,这 4 条全过才能 advance 到 impl:
| # | 条件 | 在哪个文件 |
|---|---|---|
| 1 | acceptance 可测(每条 ACC 都有 Given/When/Then) | PD acceptance.md |
| 2 | 每条 ACC 至少 1 条 TC 覆盖 | Test test-cases.md |
| 3 | tasks.md 里 ACC ↔ TC ↔ §3/§4 映射齐全 | Dev tasks.md |
| 4 | 同 group 三包能 bundle resolve | 三包 references |
没满足 → dor 节点过不去。
怎么操作(命令速查)
# 第一步:初始化 pipeline
./scripts/pipeline/init-pipeline.sh --change add-coupon-discount --demo coupon
# 然后按顺序推进(每一段 Aiko Chat 跑完后你确认)
./scripts/pipeline/advance-node.sh --change add-coupon-discount --to impl
./scripts/pipeline/advance-node.sh --change add-coupon-discount --to tdd
./scripts/pipeline/advance-node.sh --change add-coupon-discount --to e2e_gen
./scripts/pipeline/advance-node.sh --change add-coupon-discount --to e2e_run
./scripts/pipeline/advance-node.sh --change add-coupon-discount --to evidence
./scripts/pipeline/advance-node.sh --change add-coupon-discount --to ready
# 任意时刻校验 tasks 与节点是否一致
./scripts/pipeline/check-pipeline-gate.sh --change add-coupon-discount --min-node e2e_run让 Aiko Chat 全自动跑
不想手动 advance?调 /aiko-apply-dev <feature>:
> /aiko-apply-dev add-coupon-discount
[pipeline: impl] 实现 DiscountEngine.calculate()...
✓ src/discount/engine.ts (+128 lines)
✓ src/discount/cache.ts (+47 lines)
[pipeline: tdd] 写单测...
✓ tests/unit/engine.test.ts (12 cases passed)
[pipeline: e2e_gen] 按 TC-007 / TC-008 写 E2E 脚本...
✓ tests/e2e/coupon_basic.spec.ts
✓ tests/e2e/coupon_stack.spec.ts
[pipeline: e2e_run] 跑 L2 全量...
✓ 14/14 passed
[pipeline: evidence] 回填 test-evidence.md...
✓ 截图 / 报告 / 链接已记录
[pipeline: ready] pre-archive 校验通过 ✓中途任何一步失败它会停下来等你修。
哪一步失败是什么意思
| Aiko Chat 卡在 | 多半是 | 你该做 |
|---|---|---|
impl | spec 写得不够具体 | 补 spec Scenario |
tdd | 实现有 bug 单测没过 | 修代码或改单测 |
e2e_gen | test-cases 缺关键字段 | 补 test-cases TC-* |
e2e_run | L2 用例真的没过 | 修代码(不要改用例) |
evidence | test-cases 引用的 ACC 不存在 | 补 ACC 或修 TC.satisfies |
ready | tasks 还有未勾选项 | 补完所有 §1-§5 task |
测试分四层在不同时机跑
| 层 | 防什么 | 你什么时候关心 |
|---|---|---|
| L1 单测 | 单 API / 单规则 | 你本地写代码时,§2 阶段 |
| L2 本 change E2E | ACC 链路 | 你的 feature 合 develop 之前,§4 阶段 |
| L3 集成回归 | 多 feature 合完后回归 | develop / release CI(你不用主动跑) |
| L4 正式证据 | release 签收 | release → main 之前 |
重点:feature → develop 合并必须 L2 全过;release → main 必须 L4 evidence 完整。
merge 分支挂的门禁
如果你的项目用默认 enterprise git path:
| 合并 | 你需要保证 |
|---|---|
| feature → develop | validate + L2 + CI E2E |
| develop → release | validate + bundle + L3 |
| release → main | L4 evidence + pre-archive + archive |
SaaS trunk 模式(feature → main 一步到位)会把 L2 + L3 都叠在合并前。看你项目的 gitPath 设置。
推进失败常见原因
报错:pipeline-gate.tasks_mismatch
→ tasks.md 里某段全部勾完了但你的 pipeline node 还在前一段。跑 advance-node 推进。
报错:pipeline-gate.node_skip
→ 你尝试从 impl 直接 advance 到 e2e_run。回到 tdd 跑完再来。
报错:pre-archive.tasks_incomplete
→ ready 节点要求 tasks 全勾完,还有 [ ] 没勾。
报错:pre-archive.evidence_missing
→ test-evidence.md 没填,或者引用了不存在的 TC。
归档:跑完 ready 之后
ready 节点通过后,你的 change 可以归档了。归档动作在 main 分支上做:
# main 上
# 调 /openspec-bulk-archive-change Skill它会:
- 把 delta spec merge 到
openspec/specs/ - 把整个 change 目录移到
openspec/changes/archive/ - 整 group 一起归(PD + 架构 + 测试 + 开发 四包)