创建与检查 card
card 是一次 scoped 构建会话。规划走完之后,你大部分时间都在这个循环里。
六个规划 gate 全过、或挂着对得上的 open debt 行,/flow card 才放行。被拒绝就跑 /flow,看它点名的 stage 去修。
切 card
Section titled “切 card”/flow card生成下一张 cards/C-NNN.md。写一行代码之前,先读它,把模板要的东西填上:
| 节 | 干什么用 |
|---|---|
## Allowed files |
这次会话唯一能碰的路径。这是爆炸半径。 |
implements: |
这张 card 认领的 PRD 需求 id(FRn)。 |
## Verify |
你真会跑的命令,不是愿望。 |
## Independent test |
用户可见的切片证据——真没有就写 infra / none。 |
## Evidence |
完成之前空着。真实世间证据贴这里。 |
risk / risk-reason |
风险类别,自治运行之前必须有。 |
## Independent test 里残留 [FILL],check 就挂,别跳过它。
先加载以前的知识
Section titled “先加载以前的知识”/flow recallopen debt、上次 retro、上张 card 的 scope、harness 摩擦、promote 过的 playbook。输出当上下文用,不是噪音。
可选:标成 in flight
Section titled “可选:标成 in flight”/flow card start C-001把 card 记成进行中,进可移植的 cards/.inflight 注册表,/flow status 里能看到。它不碰带 gate 的 status: 字段,完全可选——手改照样行。
三条规则绑住每次构建会话:
- 一次会话一张 card。 不两张,
/flow ready说安全之前也不并行两张。 - 只碰
## Allowed files。 出了这个清单,reviewer 第一个看的就是这个。 - contract 是接缝。 照着 stage 05 定好的 shape build。shape 错了,先改 contract,再改代码。
UI card 先批 mock card,再写前端代码,/flow design <file> 对它跑机械的 DESIGN.md 检查。
查哪些 card 可以并行跑
Section titled “查哪些 card 可以并行跑”/flow ready列出可构建的 todo card,按 allowed-files 重叠给并行安全提示。
检查 card
Section titled “检查 card”/flow check C-001机械层先验 card:状态合法性、残留 [FILL] 占位符、必填节、## Evidence 是不是真填了。过了才开始语义评审——diff 对 scope、allowed-files 漂移、contract shape 一致性、UI 的 DESIGN.md、证据是不是真是世间的。
你最常碰到的失败:
[x] status is 'done' but ## Evidence is empty (paste world-state proof: URL/curl/DB row)FAIL: C-001 has gate violations (above).代码写完、测试全绿也照样触发。“Tests pass” 和 “merged” 是中途状态。
贴算数的证据
Section titled “贴算数的证据”什么算数看项目类型:
| 项目类型 | 算数的证据 |
|---|---|
web |
上线的部署 URL 加真实 curl 输出 |
cli |
一次真实调用,带着实际输出和 exit code |
library |
公开 API 导得进来,示例跑得起来,覆盖率达标 |
skill |
装进 skill 家目录,一次真实运行达到自定完成定义 |
流程产物——合了的 PR、绿了的 CI 徽章、release notes——不是证据。机械地板打回纯流程散文,card 靠文书工作标不了完成。
完整规则在完成意味着世间的证据。
/flow check C-001PASS: C-001 is valid (status: done).或让 CLI 接管翻转:
/flow card done C-001card done 走和 check 一样的完成规则,gate 不过就回滚,所以它永远产不出空洞的完成。手改 status: done 再跑 check 一样有效。
把计划收敛回代码
Section titled “把计划收敛回代码”真实构建会漂:写了计划没要的代码,该干的悄悄没干。/flow converge 是收这个口子的。不是 next gate,自愿开。
对照计划(PRD FRn、contract 接口、constitution INV-n)评估现有代码。写 flow-converge/v1 payload 描述口子,然后跑:
/flow converge或 flow.sh converge --file <path>。
三条规则绑住这个动词:
- 只追加。 永远不改、不重编号、不删已有的
cards/C-*.md,不碰应用代码。产出 remainder card,晚点有 session 来 build。 - 全有或全无。 runner 是事务的:remainder card 要么全写,要么一个不写。不写一半。
CONVERGED等于什么都不写。 零发现(或没 payload)打印CONVERGED,cards/原样不动。
代码里有、计划没要的东西变成 review card(implements: none),永远不是删掉。删不删,操作者说了算。
payload 接受的口子类型:missing、partial、contradicts、unrequested。别的类型直接拒绝,什么都不写。
先写 .flow/converge-pending.md(运行态,gitignored,所以 CONVERGED 的运行不脏 cards/)。写任何 card 之前先摆出发现表。格式:
schema: flow-converge/v1findings: 2
---gap-type: missingseverity: HIGHimplements: FR2source-ref: 03-prd.md:FR2title: implement the mark-task-done endpointdeps: C-002allowed: src/app.py---gap-type: unrequestedseverity: LOWimplements: nonesource-ref: src/app.py:debug_dumptitle: the debug_dump surface no feature asked fordeps:allowed: src/app.py追加的 card 自带 [FILL] Verify 和 Evidence——还没 build。切它们,填它们,像别的 card 一样 check 它们。
口子分类和完整 payload schema 在skills/flow/references/converge.md。