工作台 (Workbench)
在开发 sidebar 跑 pipeline
写 spec + tasks,让 Aiko Chat 按流水线把代码 + 测试 + 证据全跑出来
如果你是开发,dev sidebar 是你的主战场。4 件 dev 文档 + 一条 aiko.pipeline 流水线,让 Aiko Chat 替你跑 §1-§5。
你要起草的 4 件 + 1 个 pipeline
| 文件 | 写啥 | 谁写 |
|---|---|---|
proposal.md | 这次工程 change 启动原因 | 你 |
specs/**/*.md | capability 行为契约(EARS + Gherkin) | 你 |
design.md | capability 内部怎么实现 | 你 |
tasks.md | 实施步骤(按 pipeline 五段) | 你 |
aiko.pipeline.yaml | 控制状态机推进 | 脚本自动管 |
不同档位写多少
| 档位 | proposal | specs/ | design | tasks |
|---|---|---|---|---|
| xs | ✅ | ⚪ | ⚪ | ✅ |
| s | ✅ | ✅ | ⚪ | ✅ |
| tech | ✅ | ✅ | ✅ | ✅ |
| m / l | ✅ | ✅ | ✅ | ✅ |
specs/ 怎么写:EARS + Gherkin
每个 capability 在 specs/<name>.md:
## Requirement: 折扣计算引擎 [satisfies: REQ-FN-007]
When a 购物车包含可叠加优惠券, the system shall 按优先级矩阵计算
最终折扣金额, returning 折扣后的订单总价.
### Scenario: 单张满减券生效
Given 购物车总价 200 元
And 用户持有"满 100 减 20"券
When 用户选中该券
Then 订单总价显示 180 元
And 折扣明细记录该券的 coupon_id
### Scenario: 满减券 + 折扣券叠加
Given 购物车总价 300 元
And 用户持有"满 100 减 20"券 + "9 折券"
When 用户选中两张券
Then 按优先级先满减再折扣
And 订单总价显示 252 元每个 Requirement 必须有 satisfies 指向 PD 的 REQ-FN-*。scenario-quality Validator 守门:GWT 结构 / 名不重复。
tasks.md 怎么写:按 pipeline 五段分节
## §1 Implement capability [pipeline: impl]
- [ ] T-001 实现 DiscountEngine.calculate() 主流程
- [ ] T-002 接入 Redis 缓存层
- [ ] T-003 写规则编译器
## §2 TDD [pipeline: tdd]
- [ ] T-101 单测 DiscountEngine 所有规则
- [ ] T-102 单测 缓存命中 / 穿透 / 击穿
## §3 Generate E2E [pipeline: e2e_gen]
- [ ] T-201 按 test-cases TC-007 生成 tests/e2e/coupon_basic.spec.ts
- [ ] T-202 按 TC-008 生成叠加场景脚本
## §4 Run E2E [pipeline: e2e_run]
- [ ] T-301 跑通本 group L2 全部用例
## §5 Evidence [pipeline: evidence]
- [ ] T-401 截图 + 报告 → test-evidence.md每段头部的 [pipeline: <node>] 标签必须有。pipeline-gate Validator 守门:tasks 段勾完但 node 没推进 → ERROR。
让 Aiko Chat 全自动跑
最省事的姿势:调 /aiko-apply-dev,让 Aiko Chat 把 §1-§5 一口气跑完:
> /aiko-apply-dev add-coupon-discount
[pipeline: impl] 实现 DiscountEngine.calculate()...
✓ src/discount/engine.ts (+128 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
[pipeline: e2e_run] 跑 L2 全量...
✓ 14/14 passed
[pipeline: evidence] 回填 test-evidence.md...
[pipeline: ready] pre-archive 校验通过 ✓中间出错它停下来,你修完它接着跑。
也可以手动一步一步跑
# 初始化
./scripts/pipeline/init-pipeline.sh --change add-coupon-discount --demo coupon
# 顺次推进
./scripts/pipeline/advance-node.sh --change add-coupon-discount --to impl
# Aiko Chat 写代码,你 diff approval...
./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详细看 推进开发任务到 ready。
开始前必须满足的 DoR
feature/* 分支拉出来之前,这 4 条全过才能开始写代码:
| # | 条件 | 谁负责 |
|---|---|---|
| 1 | acceptance 可测(每条 ACC 有 GWT) | PD |
| 2 | 每条 ACC 至少 1 条 TC 覆盖 | QA |
| 3 | tasks.md 里 ACC ↔ TC ↔ §3/§4 映射齐全 | 你 |
| 4 | 同 group 三包能 bundle resolve | 你跑 validate |
没过 → dor 节点不让你推进到 impl。
design.md 写啥(tech / m / l 才必填)
capability 内部实现细节:
- 关键算法(不写 RFC 级伪代码,写关键路径)
- 数据流(图 + 步骤)
- 边界处理 / 异常分支
- 性能 / 缓存 / 重试策略
不写系统级架构(归 architecture.md)。
写完之后
跑 ./scripts/aiko-validate.sh 全过 → 走合并流程。
合并门禁取决于 gitPath:
| 合并 | 默认要求 |
|---|---|
| feature → develop | validate + L2 全过 + CI E2E |
| develop → release | validate + bundle + L3 |
| release → main | L4 evidence + pre-archive |
关联
- 推进开发任务到 ready — pipeline 节点详细
- 测试 sidebar — test-cases 是你 §3 / §4 的输入
- Aiko Chat — 谁来真正写代码
- 校验报错了怎么办