跳转到内容

创建与检查 card

card 是一次 scoped 构建会话。规划走完之后,你大部分时间都在这个循环里。

六个规划 gate 全过、或挂着对得上的 open debt 行,/flow card 才放行。被拒绝就跑 /flow,看它点名的 stage 去修。

/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 就挂,别跳过它。

/flow recall

open debt、上次 retro、上张 card 的 scope、harness 摩擦、promote 过的 playbook。输出当上下文用,不是噪音。

/flow card start C-001

把 card 记成进行中,进可移植的 cards/.inflight 注册表,/flow status 里能看到。它不碰带 gate 的 status: 字段,完全可选——手改照样行。

三条规则绑住每次构建会话:

  1. 一次会话一张 card。 不两张,/flow ready 说安全之前也不并行两张。
  2. 只碰 ## Allowed files。 出了这个清单,reviewer 第一个看的就是这个。
  3. contract 是接缝。 照着 stage 05 定好的 shape build。shape 错了,先改 contract,再改代码。

UI card 先批 mock card,再写前端代码,/flow design <file> 对它跑机械的 DESIGN.md 检查。

/flow ready

列出可构建的 todo card,按 allowed-files 重叠给并行安全提示。

/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” 是中途状态。

什么算数看项目类型:

项目类型 算数的证据
web 上线的部署 URL 加真实 curl 输出
cli 一次真实调用,带着实际输出和 exit code
library 公开 API 导得进来,示例跑得起来,覆盖率达标
skill 装进 skill 家目录,一次真实运行达到自定完成定义

流程产物——合了的 PR、绿了的 CI 徽章、release notes——不是证据。机械地板打回纯流程散文,card 靠文书工作标不了完成。

完整规则在完成意味着世间的证据。

/flow check C-001
PASS: C-001 is valid (status: done).

或让 CLI 接管翻转:

/flow card done C-001

card done 走和 check 一样的完成规则,gate 不过就回滚,所以它永远产不出空洞的完成。手改 status: done 再跑 check 一样有效。

真实构建会漂:写了计划没要的代码,该干的悄悄没干。/flow converge 是收这个口子的。不是 next gate,自愿开。

对照计划(PRD FRn、contract 接口、constitution INV-n)评估现有代码。写 flow-converge/v1 payload 描述口子,然后跑:

/flow converge

或 flow.sh converge --file <path>。

三条规则绑住这个动词:

  1. 只追加。 永远不改、不重编号、不删已有的 cards/C-*.md,不碰应用代码。产出 remainder card,晚点有 session 来 build。
  2. 全有或全无。 runner 是事务的:remainder card 要么全写,要么一个不写。不写一半。
  3. CONVERGED 等于什么都不写。 零发现(或没 payload)打印 CONVERGED,cards/ 原样不动。

代码里有、计划没要的东西变成 review card(implements: none),永远不是删掉。删不删,操作者说了算。

payload 接受的口子类型:missing、partial、contradicts、unrequested。别的类型直接拒绝,什么都不写。

先写 .flow/converge-pending.md(运行态,gitignored,所以 CONVERGED 的运行不脏 cards/)。写任何 card 之前先摆出发现表。格式:

schema: flow-converge/v1
findings: 2
---
gap-type: missing
severity: HIGH
implements: FR2
source-ref: 03-prd.md:FR2
title: implement the mark-task-done endpoint
deps: C-002
allowed: src/app.py
---
gap-type: unrequested
severity: LOW
implements: none
source-ref: src/app.py:debug_dump
title: the debug_dump surface no feature asked for
deps:
allowed: src/app.py

追加的 card 自带 [FILL] Verify 和 Evidence——还没 build。切它们,填它们,像别的 card 一样 check 它们。

口子分类和完整 payload schema 在skills/flow/references/converge.md。