@michaelxwb/code-flow 0.6.5 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +75 -110
- package/bin/code-flow.js +12 -0
- package/docs/README.md +19 -0
- package/docs/USAGE.md +268 -0
- package/docs/v1-design.md +1858 -0
- package/docs/v1-implementation.md +186 -0
- package/lib/adapters.js +126 -0
- package/lib/cli.js +258 -0
- package/lib/config.js +85 -0
- package/lib/doctor.js +283 -0
- package/lib/frontmatter.js +42 -0
- package/lib/fs.js +141 -0
- package/lib/glob.js +23 -0
- package/lib/hook.js +99 -0
- package/lib/init.js +132 -0
- package/lib/learn.js +170 -0
- package/lib/locks.js +52 -0
- package/lib/markdown.js +13 -0
- package/lib/process.js +116 -0
- package/lib/render.js +115 -0
- package/lib/repo.js +48 -0
- package/lib/runs.js +155 -0
- package/lib/session.js +40 -0
- package/lib/spec.js +80 -0
- package/lib/task.js +258 -0
- package/lib/taskdoc.js +308 -0
- package/lib/toml.js +140 -0
- package/lib/verify.js +168 -0
- package/lib/worktree.js +930 -0
- package/package.json +21 -9
- package/templates/adapters/opencode.mjs +65 -0
- package/templates/config.json +39 -0
- package/templates/instructions.md +13 -0
- package/templates/launcher/bridge.cjs +295 -0
- package/templates/launcher/hook.cmd +15 -0
- package/templates/launcher/hook.ps1 +10 -0
- package/templates/launcher/hook.sh +20 -0
- package/templates/skills/cf-check.md +19 -0
- package/templates/skills/cf-init.md +16 -0
- package/templates/skills/cf-spec.md +20 -0
- package/templates/skills/cf-task-align.md +19 -0
- package/templates/skills/cf-task-archive.md +20 -0
- package/templates/skills/cf-task-plan.md +31 -0
- package/templates/skills/cf-task-prd.md +14 -0
- package/templates/skills/cf-task-start.md +41 -0
- package/{src/core/code-flow/specs/shared/design → templates/workflow}/design-frontend.md +22 -19
- package/{src/core/code-flow/specs/shared/design → templates/workflow}/design-full.md +36 -28
- package/{src/core/code-flow/specs/shared/design → templates/workflow}/design-lite.md +27 -17
- package/{src/core/code-flow/specs/shared/prd-template.md → templates/workflow/prd.md} +1 -1
- package/templates/workflow/project-guidelines.md +48 -0
- package/templates/workflow/scenarios.md +67 -0
- package/templates/workflow/task.md +56 -0
- package/docs/migrations/spec-workflow-0.6.0.md +0 -42
- package/src/adapters/claude/CLAUDE.md +0 -45
- package/src/adapters/claude/commands/cf-init.md +0 -264
- package/src/adapters/claude/commands/cf-learn.md +0 -291
- package/src/adapters/claude/commands/cf-spec.md +0 -67
- package/src/adapters/claude/commands/cf-stats.md +0 -86
- package/src/adapters/claude/commands/cf-sync.md +0 -25
- package/src/adapters/claude/commands/cf-task/align.md +0 -309
- package/src/adapters/claude/commands/cf-task/archive.md +0 -161
- package/src/adapters/claude/commands/cf-task/block.md +0 -36
- package/src/adapters/claude/commands/cf-task/graph.md +0 -80
- package/src/adapters/claude/commands/cf-task/note.md +0 -236
- package/src/adapters/claude/commands/cf-task/plan.md +0 -363
- package/src/adapters/claude/commands/cf-task/prd.md +0 -162
- package/src/adapters/claude/commands/cf-task/start.md +0 -304
- package/src/adapters/claude/commands/cf-task/status.md +0 -59
- package/src/adapters/claude/commands/cf-task/verify-e2e.md +0 -115
- package/src/adapters/claude/commands/cf-validate.md +0 -75
- package/src/adapters/claude/settings.local.json +0 -50
- package/src/adapters/codex/AGENTS.md +0 -45
- package/src/adapters/codex/config.toml +0 -3
- package/src/adapters/codex/hooks.json +0 -50
- package/src/adapters/codex/skills/cf-init/SKILL.md +0 -273
- package/src/adapters/codex/skills/cf-learn/SKILL.md +0 -296
- package/src/adapters/codex/skills/cf-spec/SKILL.md +0 -60
- package/src/adapters/codex/skills/cf-stats/SKILL.md +0 -87
- package/src/adapters/codex/skills/cf-sync/SKILL.md +0 -30
- package/src/adapters/codex/skills/cf-task-align/SKILL.md +0 -310
- package/src/adapters/codex/skills/cf-task-archive/SKILL.md +0 -162
- package/src/adapters/codex/skills/cf-task-block/SKILL.md +0 -37
- package/src/adapters/codex/skills/cf-task-graph/SKILL.md +0 -81
- package/src/adapters/codex/skills/cf-task-note/SKILL.md +0 -233
- package/src/adapters/codex/skills/cf-task-plan/SKILL.md +0 -324
- package/src/adapters/codex/skills/cf-task-prd/SKILL.md +0 -163
- package/src/adapters/codex/skills/cf-task-start/SKILL.md +0 -305
- package/src/adapters/codex/skills/cf-task-status/SKILL.md +0 -60
- package/src/adapters/codex/skills/cf-task-verify-e2e/SKILL.md +0 -111
- package/src/adapters/codex/skills/cf-validate/SKILL.md +0 -76
- package/src/adapters/costrict/CLAUDE.md +0 -45
- package/src/adapters/costrict/commands/cf-init.md +0 -264
- package/src/adapters/costrict/commands/cf-learn.md +0 -291
- package/src/adapters/costrict/commands/cf-spec.md +0 -67
- package/src/adapters/costrict/commands/cf-stats.md +0 -86
- package/src/adapters/costrict/commands/cf-sync.md +0 -25
- package/src/adapters/costrict/commands/cf-task/align.md +0 -309
- package/src/adapters/costrict/commands/cf-task/archive.md +0 -161
- package/src/adapters/costrict/commands/cf-task/block.md +0 -36
- package/src/adapters/costrict/commands/cf-task/graph.md +0 -80
- package/src/adapters/costrict/commands/cf-task/note.md +0 -236
- package/src/adapters/costrict/commands/cf-task/plan.md +0 -363
- package/src/adapters/costrict/commands/cf-task/prd.md +0 -162
- package/src/adapters/costrict/commands/cf-task/start.md +0 -304
- package/src/adapters/costrict/commands/cf-task/status.md +0 -59
- package/src/adapters/costrict/commands/cf-task/verify-e2e.md +0 -115
- package/src/adapters/costrict/commands/cf-validate.md +0 -75
- package/src/adapters/costrict/settings.local.json +0 -50
- package/src/adapters/opencode/AGENTS.md +0 -45
- package/src/adapters/opencode/commands/cf-init.md +0 -281
- package/src/adapters/opencode/commands/cf-learn.md +0 -295
- package/src/adapters/opencode/commands/cf-spec.md +0 -59
- package/src/adapters/opencode/commands/cf-stats.md +0 -90
- package/src/adapters/opencode/commands/cf-sync.md +0 -29
- package/src/adapters/opencode/commands/cf-task/align.md +0 -314
- package/src/adapters/opencode/commands/cf-task/archive.md +0 -166
- package/src/adapters/opencode/commands/cf-task/block.md +0 -40
- package/src/adapters/opencode/commands/cf-task/graph.md +0 -84
- package/src/adapters/opencode/commands/cf-task/note.md +0 -240
- package/src/adapters/opencode/commands/cf-task/plan.md +0 -363
- package/src/adapters/opencode/commands/cf-task/prd.md +0 -167
- package/src/adapters/opencode/commands/cf-task/start.md +0 -309
- package/src/adapters/opencode/commands/cf-task/status.md +0 -63
- package/src/adapters/opencode/commands/cf-task/verify-e2e.md +0 -115
- package/src/adapters/opencode/commands/cf-validate.md +0 -79
- package/src/adapters/opencode/opencode.json +0 -3
- package/src/adapters/opencode/plugins/code-flow/index.js +0 -213
- package/src/adapters/opencode/plugins/code-flow/package.json +0 -6
- package/src/cli.js +0 -1023
- package/src/core/code-flow/config.yml +0 -158
- package/src/core/code-flow/scripts/cf_acceptance_evidence.py +0 -100
- package/src/core/code-flow/scripts/cf_acceptance_manifest.py +0 -294
- package/src/core/code-flow/scripts/cf_acceptance_runner.py +0 -192
- package/src/core/code-flow/scripts/cf_acceptance_schema.py +0 -83
- package/src/core/code-flow/scripts/cf_checks.py +0 -336
- package/src/core/code-flow/scripts/cf_core.py +0 -787
- package/src/core/code-flow/scripts/cf_exec_base.py +0 -112
- package/src/core/code-flow/scripts/cf_feedback.py +0 -56
- package/src/core/code-flow/scripts/cf_log.py +0 -154
- package/src/core/code-flow/scripts/cf_post_hook.py +0 -196
- package/src/core/code-flow/scripts/cf_pre_tool_hook.py +0 -104
- package/src/core/code-flow/scripts/cf_scan.py +0 -295
- package/src/core/code-flow/scripts/cf_session_state.py +0 -37
- package/src/core/code-flow/scripts/cf_spec_context.py +0 -1746
- package/src/core/code-flow/scripts/cf_spec_gate.py +0 -264
- package/src/core/code-flow/scripts/cf_spec_metadata.py +0 -384
- package/src/core/code-flow/scripts/cf_spec_migrate.py +0 -512
- package/src/core/code-flow/scripts/cf_spec_resolver.py +0 -347
- package/src/core/code-flow/scripts/cf_spec_router.py +0 -244
- package/src/core/code-flow/scripts/cf_spec_session.py +0 -119
- package/src/core/code-flow/scripts/cf_spec_verify.py +0 -559
- package/src/core/code-flow/scripts/cf_stats.py +0 -506
- package/src/core/code-flow/scripts/cf_stop_hook.py +0 -381
- package/src/core/code-flow/scripts/cf_sync.py +0 -140
- package/src/core/code-flow/scripts/cf_task_index.py +0 -148
- package/src/core/code-flow/scripts/cf_task_parallel.py +0 -394
- package/src/core/code-flow/scripts/cf_task_runtime.py +0 -304
- package/src/core/code-flow/scripts/cf_task_state.py +0 -3
- package/src/core/code-flow/scripts/cf_task_workflow.py +0 -205
- package/src/core/code-flow/scripts/cf_user_prompt_hook.py +0 -178
- package/src/core/code-flow/scripts/cf_validation.py +0 -81
- package/src/core/code-flow/scripts/cf_workflow_service.py +0 -366
- package/src/core/code-flow/scripts/cf_workflow_transaction.py +0 -96
- package/src/core/code-flow/specs/backend/_map.md +0 -56
- package/src/core/code-flow/specs/backend/code-quality-performance.md +0 -59
- package/src/core/code-flow/specs/backend/database.md +0 -51
- package/src/core/code-flow/specs/backend/directory-structure.md +0 -54
- package/src/core/code-flow/specs/backend/logging.md +0 -50
- package/src/core/code-flow/specs/backend/platform-rules.md +0 -55
- package/src/core/code-flow/specs/frontend/_map.md +0 -52
- package/src/core/code-flow/specs/frontend/component-specs.md +0 -68
- package/src/core/code-flow/specs/frontend/directory-structure.md +0 -53
- package/src/core/code-flow/specs/frontend/quality-standards.md +0 -58
- package/src/core/code-flow/specs/shared/_map.md +0 -57
- package/src/core/code-flow/tasks/.gitkeep +0 -0
- package/src/core/code-flow/validation.yml +0 -53
- package/src/migrate/spec-workflow.js +0 -238
|
@@ -1,236 +0,0 @@
|
|
|
1
|
-
# cf-task:note
|
|
2
|
-
|
|
3
|
-
与用户协作讨论文件中的 `#NOTES` 标记,对齐最优解后将结论沉淀回原文,删除标记。
|
|
4
|
-
|
|
5
|
-
支持两种文件类型:
|
|
6
|
-
- **任务文件**(`.md`):讨论任务中的实现细节问题
|
|
7
|
-
- **设计简报**(`.design.md`):讨论设计方案中的缺陷或待确认项
|
|
8
|
-
|
|
9
|
-
## 背景
|
|
10
|
-
|
|
11
|
-
用户在 review 文件时,直接在有问题的位置**就地标注** `#NOTES`,格式:
|
|
12
|
-
|
|
13
|
-
任务文件中:
|
|
14
|
-
```markdown
|
|
15
|
-
### Checklist
|
|
16
|
-
- [ ] 实现用户注册接口
|
|
17
|
-
- [ ] 密码加密存储 #NOTES 用 bcrypt 还是 argon2?
|
|
18
|
-
- [ ] 编写单元测试
|
|
19
|
-
|
|
20
|
-
### Description
|
|
21
|
-
实现 JWT 认证 #NOTES token 过期时间设多少合适?
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
设计简报中:
|
|
25
|
-
```markdown
|
|
26
|
-
## Database Design
|
|
27
|
-
|
|
28
|
-
### users 表
|
|
29
|
-
| Column | Type | Constraints | Notes |
|
|
30
|
-
|--------|------|-------------|-------|
|
|
31
|
-
| email | VARCHAR(255) | UNIQUE NOT NULL | 登录凭证 #NOTES 需要支持手机号登录吗? |
|
|
32
|
-
|
|
33
|
-
## API Design
|
|
34
|
-
|
|
35
|
-
### POST /auth/register
|
|
36
|
-
- Request: `{ email: string, password: string }` #NOTES 需要用户名字段吗?
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
`#NOTES` 是临时讨论标记,解决后必须消失,结论直接融入原文。
|
|
40
|
-
|
|
41
|
-
## 输入
|
|
42
|
-
|
|
43
|
-
- `/cf-task:note <file>` — 讨论指定文件中所有 `#NOTES`
|
|
44
|
-
- `/cf-task:note <file> TASK-001` — 只讨论指定子任务中的 `#NOTES`(仅限任务文件)
|
|
45
|
-
|
|
46
|
-
其中 `<file>` 可省略日期目录前缀和 `.md` 后缀。
|
|
47
|
-
|
|
48
|
-
查找逻辑:用 Glob 搜索 `.code-flow/tasks/**/<file>.md` 和 `.code-flow/tasks/**/<file>*.design.md`(`*` 兼容旧 `<file>.design.md` 与域后缀 `<file>.frontend.design.md` / `<file>.backend.design.md`),从结果中排除包含 `archived/` 的路径。如果匹配到多个结果(如全栈需求的前后端 design),输出警告列出所有匹配项,让用户指定要讨论的具体文件;如果只有一个结果,直接使用。
|
|
49
|
-
|
|
50
|
-
## 执行步骤
|
|
51
|
-
|
|
52
|
-
### 0. 判断文件类型
|
|
53
|
-
|
|
54
|
-
Read 读取匹配到的文件后,判断类型:
|
|
55
|
-
- 文件路径以 `.design.md` 结尾 → **设计简报模式**
|
|
56
|
-
- 其他 → **任务文件模式**
|
|
57
|
-
|
|
58
|
-
---
|
|
59
|
-
|
|
60
|
-
## 任务文件模式
|
|
61
|
-
|
|
62
|
-
### 1. 扫描 #NOTES 标记
|
|
63
|
-
|
|
64
|
-
1. 用 Glob 定位任务文件,Read 读取全文
|
|
65
|
-
2. 用正则扫描所有包含 `#NOTES` 的行,记录:
|
|
66
|
-
- 所在的子任务(`## TASK-xxx`)
|
|
67
|
-
- 所在的段落(Description / Checklist / 其他)
|
|
68
|
-
- 原始行内容
|
|
69
|
-
- `#NOTES` 后的问题描述
|
|
70
|
-
3. 如果没有找到 `#NOTES`,提示"无待讨论的标记",结束
|
|
71
|
-
|
|
72
|
-
输出扫描结果:
|
|
73
|
-
```
|
|
74
|
-
找到 3 个 #NOTES 标记:
|
|
75
|
-
|
|
76
|
-
TASK-001:
|
|
77
|
-
1. [Checklist] 密码加密存储 #NOTES 用 bcrypt 还是 argon2?
|
|
78
|
-
2. [Description] 实现 JWT 认证 #NOTES token 过期时间设多少合适?
|
|
79
|
-
|
|
80
|
-
TASK-002:
|
|
81
|
-
3. [Checklist] 调用支付 SDK #NOTES 用哪个版本的 SDK?
|
|
82
|
-
|
|
83
|
-
开始逐条讨论...
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
### 2. 加载上下文
|
|
87
|
-
|
|
88
|
-
1. 读取当前子任务的 `Source` 字段,解析章节引用
|
|
89
|
-
2. 用 Read 按行号范围读取详设文档的对应章节
|
|
90
|
-
3. 将详设上下文作为讨论背景
|
|
91
|
-
|
|
92
|
-
### 3. 逐条讨论
|
|
93
|
-
|
|
94
|
-
对每个 `#NOTES`,展示上下文并给出建议方案,与用户对话:
|
|
95
|
-
|
|
96
|
-
```
|
|
97
|
-
--- #NOTES 1/3 ---
|
|
98
|
-
位置: TASK-001 / Checklist
|
|
99
|
-
原文: 密码加密存储 #NOTES 用 bcrypt 还是 argon2?
|
|
100
|
-
|
|
101
|
-
详设参考 (§3.1 L95-L98):
|
|
102
|
-
"用户密码必须加密存储,推荐使用行业标准算法"
|
|
103
|
-
|
|
104
|
-
分析:
|
|
105
|
-
- bcrypt: 成熟稳定,生态支持好,Node.js 原生支持
|
|
106
|
-
- argon2: 更现代,抗 GPU 攻击更强,但依赖 C 编译
|
|
107
|
-
|
|
108
|
-
建议: bcrypt(项目技术栈为 Node.js,无需额外编译依赖)
|
|
109
|
-
|
|
110
|
-
是否采纳?或提出你的方案:
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
等待用户回应。
|
|
114
|
-
|
|
115
|
-
### 4. 沉淀结论并清除标记
|
|
116
|
-
|
|
117
|
-
用户确认方案后:
|
|
118
|
-
|
|
119
|
-
1. 用 Edit 将该行中的 `#NOTES xxx` 删除,并将结论融入原文
|
|
120
|
-
- 修改前:`- [ ] 密码加密存储 #NOTES 用 bcrypt 还是 argon2?`
|
|
121
|
-
- 修改后:`- [ ] 密码使用 bcrypt 加密存储`
|
|
122
|
-
2. 如果结论需要新增步骤 → 用 Edit 追加 Checklist 条目或补充 Description
|
|
123
|
-
3. 在 `### Log` 追加:`- [<当前日期>] resolved #NOTES: <结论摘要>`
|
|
124
|
-
|
|
125
|
-
**Edit 边界约束(必须遵守)**:
|
|
126
|
-
- `old_string` 必须严格限定在当前 TASK 段落内,**绝对禁止**匹配到 `---` 分隔线或下一个 `## TASK-xxx` 标题
|
|
127
|
-
- Log 追加时,`old_string` 只匹配 Log 段落的最后一行内容,不要向下延伸到段落外
|
|
128
|
-
- 如果 Log 是当前 TASK 的最后一个段落,其内容到 `---` 分隔线之前结束;`old_string` 不得包含 `---` 及其后的任何内容
|
|
129
|
-
- 示例(正确):`old_string = "- [2026-03-23] created (draft)"` → 只匹配 Log 末行
|
|
130
|
-
- 示例(错误):`old_string = "- [2026-03-23] created (draft)\n\n---\n\n## TASK-003"` → 越界,会删除下一个 TASK 标题
|
|
131
|
-
|
|
132
|
-
### 5. 完成检查
|
|
133
|
-
|
|
134
|
-
所有 `#NOTES` 讨论完毕后:
|
|
135
|
-
|
|
136
|
-
1. 再次扫描文件,确认无残留 `#NOTES` 标记
|
|
137
|
-
2. 如果子任务之前因 `#NOTES` 被标记为 `blocked`,清除当前阻塞条目后调用 `python3 .code-flow/scripts/cf_task_workflow.py resume --root "$PWD" --task-dir "<需求目录>" --task TASK-001 --json`。命令检查依赖和残留 Notes,同步 marker 与任务状态;不得从历史 Log 猜测状态后只改 Markdown。失败保留 blocked 并报告原因。
|
|
138
|
-
3. 更新文件头 `Updated` 日期
|
|
139
|
-
|
|
140
|
-
### 6. 输出摘要
|
|
141
|
-
|
|
142
|
-
```
|
|
143
|
-
#NOTES 讨论完成: auth-module
|
|
144
|
-
|
|
145
|
-
已解决:
|
|
146
|
-
1. TASK-001 密码加密 → 使用 bcrypt
|
|
147
|
-
2. TASK-001 token 过期 → 设为 7 天,支持 refresh
|
|
148
|
-
3. TASK-002 SDK 版本 → 使用 v3.2.1
|
|
149
|
-
|
|
150
|
-
文件已更新,所有 #NOTES 标记已清除。
|
|
151
|
-
可执行 /cf-task:start auth-module 开始编码。
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
---
|
|
155
|
-
|
|
156
|
-
## 设计简报模式
|
|
157
|
-
|
|
158
|
-
### 1. 扫描 #NOTES 标记
|
|
159
|
-
|
|
160
|
-
1. Read 读取 `.design.md` 全文
|
|
161
|
-
2. 用正则扫描所有包含 `#NOTES` 的行,记录:
|
|
162
|
-
- 所在的章节(`## Goal` / `## Database Design` / `## API Design` 等)
|
|
163
|
-
- 原始行内容
|
|
164
|
-
- `#NOTES` 后的问题描述
|
|
165
|
-
3. 如果没有找到 `#NOTES`,提示"无待讨论的标记",结束
|
|
166
|
-
|
|
167
|
-
输出扫描结果:
|
|
168
|
-
```
|
|
169
|
-
找到 2 个 #NOTES 标记 (设计简报):
|
|
170
|
-
|
|
171
|
-
[Database Design]:
|
|
172
|
-
1. email 字段 #NOTES 需要支持手机号登录吗?
|
|
173
|
-
|
|
174
|
-
[API Design / POST /auth/register]:
|
|
175
|
-
2. Request schema #NOTES 需要用户名字段吗?
|
|
176
|
-
|
|
177
|
-
开始逐条讨论...
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
### 2. 加载上下文
|
|
181
|
-
|
|
182
|
-
设计简报本身就是设计文档,无需加载外部 Source。上下文来自:
|
|
183
|
-
|
|
184
|
-
1. 读取 `.design.md` 中该 `#NOTES` 所在章节的完整内容
|
|
185
|
-
2. 扫描代码库中与该问题相关的现有实现(如 Glob 搜索现有 model/route/middleware)
|
|
186
|
-
3. 将代码库上下文 + 设计文档上下文作为讨论背景
|
|
187
|
-
|
|
188
|
-
### 3. 逐条讨论
|
|
189
|
-
|
|
190
|
-
对每个 `#NOTES`,展示上下文并给出建议方案,与用户对话:
|
|
191
|
-
|
|
192
|
-
```
|
|
193
|
-
--- #NOTES 1/2 ---
|
|
194
|
-
位置: Database Design / users 表
|
|
195
|
-
原文: email 字段 #NOTES 需要支持手机号登录吗?
|
|
196
|
-
|
|
197
|
-
当前设计: users 表仅有 email 字段作为登录凭证
|
|
198
|
-
代码库参考: 现有 User model 无手机号字段,mailer 模块仅支持邮件
|
|
199
|
-
|
|
200
|
-
分析:
|
|
201
|
-
- 仅邮箱: 与现有 mailer 模块一致,MVP 足够
|
|
202
|
-
- 支持手机号: 需新增 phone 字段、SMS 服务依赖、双凭证登录逻辑
|
|
203
|
-
|
|
204
|
-
建议: 仅邮箱(与 Non-goals 中"保持 MVP 精简"一致,手机号可后续迭代)
|
|
205
|
-
|
|
206
|
-
是否采纳?或提出你的方案:
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
### 4. 沉淀结论并清除标记
|
|
210
|
-
|
|
211
|
-
用户确认方案后:
|
|
212
|
-
|
|
213
|
-
1. 用 Edit 将该行中的 `#NOTES xxx` 删除,并将结论融入原文
|
|
214
|
-
- 修改前:`| email | VARCHAR(255) | UNIQUE NOT NULL | 登录凭证 #NOTES 需要支持手机号登录吗? |`
|
|
215
|
-
- 修改后:`| email | VARCHAR(255) | UNIQUE NOT NULL | 登录凭证(仅邮箱,手机号后续迭代) |`
|
|
216
|
-
2. 如果结论影响其他章节(如 Database Design 的结论影响 API Design),同步更新相关章节
|
|
217
|
-
|
|
218
|
-
### 5. 完成检查
|
|
219
|
-
|
|
220
|
-
所有 `#NOTES` 讨论完毕后:
|
|
221
|
-
|
|
222
|
-
1. 再次扫描文件,确认无残留 `#NOTES` 标记
|
|
223
|
-
2. 无 Log 段落需更新(设计简报没有 Log)
|
|
224
|
-
|
|
225
|
-
### 6. 输出摘要
|
|
226
|
-
|
|
227
|
-
```
|
|
228
|
-
#NOTES 讨论完成: user-auth.design.md
|
|
229
|
-
|
|
230
|
-
已解决:
|
|
231
|
-
1. [Database Design] 登录凭证 → 仅邮箱,手机号后续迭代
|
|
232
|
-
2. [API Design] 注册接口 → 不加 username 字段,保持 email + password
|
|
233
|
-
|
|
234
|
-
文件已更新,所有 #NOTES 标记已清除。
|
|
235
|
-
可执行 /cf-task:plan .code-flow/tasks/2026-04-06/user-auth.design.md 拆解任务。
|
|
236
|
-
```
|
|
@@ -1,363 +0,0 @@
|
|
|
1
|
-
# cf-task:plan
|
|
2
|
-
|
|
3
|
-
从设计文档或设计简报拆解需求,生成结构化任务文件。
|
|
4
|
-
|
|
5
|
-
## 输入
|
|
6
|
-
|
|
7
|
-
- `/cf-task:plan <设计文档路径>` — 指定文档路径
|
|
8
|
-
- `/cf-task:plan` — 交互式选择(从 `docs/` 目录列出候选)
|
|
9
|
-
- `/cf-task:plan <设计文档路径> --explore` — 仅输出分析报告,不生成文件
|
|
10
|
-
- `/cf-task:plan <设计文档路径> --quick` — 跳过缺口分析,直接拆解(保持原有行为)
|
|
11
|
-
- `/cf-task:plan <设计文档路径> --draft` — 仅生成任务草案,必须经过 `--verify-plan` 后才能启动
|
|
12
|
-
- `/cf-task:plan <任务文件> --verify-plan` — 执行完整 Acceptance Coverage 与 Spec Rule 门禁
|
|
13
|
-
- `/cf-task:plan <.design.md 路径>` — 从 cf-task:align 产出的设计简报拆解(自动跳过缺口分析)
|
|
14
|
-
|
|
15
|
-
## 执行步骤
|
|
16
|
-
|
|
17
|
-
### 1. 获取输入文件
|
|
18
|
-
|
|
19
|
-
如果用户提供的是**需求目录**(`.code-flow/tasks/<日期>/<需求>/`):用 Glob 搜索 `<目录>/*.design.md` 发现目录内**全部设计简报**(前端 + 后端可并存),逐个 Read,合并为本次拆解的输入;各子任务的 Source 指向其来源 design。
|
|
20
|
-
|
|
21
|
-
如果用户提供的是单个文件路径:直接用 Read 读取。
|
|
22
|
-
|
|
23
|
-
如果未提供路径:
|
|
24
|
-
1. 用 Glob 搜索 `docs/**/*.md` 列出所有文档
|
|
25
|
-
2. 用 Glob 搜索 `.code-flow/tasks/**/*.design.md` 列出设计简报(排除 `archived/`)
|
|
26
|
-
3. 合并展示列表,让用户选择(同一需求目录的多份 design 可一起选)
|
|
27
|
-
4. Read 读取选中的文件
|
|
28
|
-
|
|
29
|
-
### 2. 判断输入类型
|
|
30
|
-
|
|
31
|
-
读取文件后,判断输入类型以决定后续流程:
|
|
32
|
-
|
|
33
|
-
**设计简报(`.design.md`)**:文件路径以 `.design.md` 结尾,且位于 `.code-flow/tasks/` 目录下。
|
|
34
|
-
→ **先检查有无残留 `#NOTES` 标记**。若有,提示用户先执行 `/cf-task:note` 解决后再拆解,并列出待解决的 `#NOTES` 列表。用户可选择:继续(忽略 `#NOTES`)或中断去处理。
|
|
35
|
-
→ 跳过章节索引和缺口分析,直接进入**步骤 3**拆解子任务。
|
|
36
|
-
→ 从 §2 需求分析 / §3 技术设计(接口设计 / 数据设计)/ 验收条件 推导任务。
|
|
37
|
-
→ Source 字段引用 design 文件的真实中文章节名(如 `<name>.design.md#3.4 接口设计`),无需行号索引;**多 design 合并时,各子任务 Source 标明其来源 design**(如 `<需求>.frontend.design.md#3.3 组件设计` / `<需求>.backend.design.md#3.4 接口设计`)。
|
|
38
|
-
→ 多份 design 合并拆解为**一份**任务文件,写入该需求目录(见步骤 5)。
|
|
39
|
-
|
|
40
|
-
**设计文档(其他 .md 文件)**:
|
|
41
|
-
→ 继续**步骤 2.1**建立章节索引。
|
|
42
|
-
|
|
43
|
-
### 2.1. 建立章节索引
|
|
44
|
-
|
|
45
|
-
Read 设计文档后,**先扫描文档结构**,建立章节索引表:
|
|
46
|
-
|
|
47
|
-
```
|
|
48
|
-
章节索引:
|
|
49
|
-
§1 概述 (L1-L25)
|
|
50
|
-
§2 需求分析 (L26-L80)
|
|
51
|
-
§2.1 用户故事 (L28-L55)
|
|
52
|
-
§2.2 非功能需求 (L56-L80)
|
|
53
|
-
§3 详细设计 (L81-L200)
|
|
54
|
-
§3.1 数据模型 (L83-L110)
|
|
55
|
-
§3.2 API 接口 (L111-L155)
|
|
56
|
-
§3.3 业务逻辑 (L156-L200)
|
|
57
|
-
...
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
此索引用于后续步骤中精确记录每个子任务的来源章节。
|
|
61
|
-
|
|
62
|
-
### 2.4.1. Draft / Verify Plan 模式
|
|
63
|
-
|
|
64
|
-
`--draft` 只生成任务结构、依赖、Source 和初步验收映射,产物状态必须保持 `draft`,不得直接进入 `start`。用户确认拆分后执行 `--verify-plan`,完成全部场景覆盖、唯一 Rule owner、verifier、测试层级和真实边界校验;默认模式仍执行完整校验。
|
|
65
|
-
|
|
66
|
-
`--verify-plan` 的执行命令为:
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
python3 .code-flow/scripts/cf_acceptance_manifest.py \
|
|
70
|
-
--verify-plan --task-dir <需求目录> --task-file <任务文件>
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
### 2.5. Explore 模式(--explore)
|
|
74
|
-
|
|
75
|
-
如果用户传入 `--explore`,在建立章节索引后,输出以下分析报告,**不生成任务文件**:
|
|
76
|
-
|
|
77
|
-
```
|
|
78
|
-
探索分析报告
|
|
79
|
-
============
|
|
80
|
-
|
|
81
|
-
文档: docs/xxx设计说明书.md
|
|
82
|
-
章节数: N | 预估子任务数: M
|
|
83
|
-
|
|
84
|
-
功能域识别:
|
|
85
|
-
- 用户认证 (§3.1-§3.3) — 核心功能,建议 P0
|
|
86
|
-
- 支付集成 (§3.4-§3.6) — 依赖第三方 SDK,存在阻塞风险
|
|
87
|
-
- 通知系统 (§3.7) — 独立模块,可并行
|
|
88
|
-
|
|
89
|
-
关键依赖:
|
|
90
|
-
- §3.2 API 接口依赖 §3.1 数据模型
|
|
91
|
-
- §3.5 支付回调依赖 §3.4 订单模型
|
|
92
|
-
|
|
93
|
-
风险点:
|
|
94
|
-
- §3.4 中提到的第三方 SDK 版本未确定
|
|
95
|
-
- §3.6 缺少错误码定义
|
|
96
|
-
|
|
97
|
-
建议: 确认风险点后,运行 /cf-task:plan docs/xxx.md 生成任务文件
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
输出后结束,不进入后续步骤。
|
|
101
|
-
|
|
102
|
-
### 2.7. 缺口分析(设计文档模式,--quick 跳过)
|
|
103
|
-
|
|
104
|
-
> 仅当输入为设计文档(非 .design.md)且未传入 `--quick` 时执行。
|
|
105
|
-
|
|
106
|
-
AI 从设计文档中识别关键缺口,输出结构化分析并与用户交互讨论:
|
|
107
|
-
|
|
108
|
-
```
|
|
109
|
-
缺口分析
|
|
110
|
-
========
|
|
111
|
-
文档: docs/auth-design.md
|
|
112
|
-
章节数: 7
|
|
113
|
-
|
|
114
|
-
1. 目标与非目标
|
|
115
|
-
目标: 注册、登录、JWT、token 刷新
|
|
116
|
-
非目标: 社交登录、2FA
|
|
117
|
-
|
|
118
|
-
2. 范围边界
|
|
119
|
-
纳入: §3.1-§3.5
|
|
120
|
-
排除: §3.6 通知系统 (文档标注 Phase 2)
|
|
121
|
-
|
|
122
|
-
3. 关键决策 (需确认)
|
|
123
|
-
? §3.1 数据库: 文档提到 PostgreSQL,当前项目用 SQLite — 是否迁移?
|
|
124
|
-
? §3.3 密码哈希: 文档说"行业标准",未指定算法
|
|
125
|
-
? §3.4 JWT 库: 文档未指定
|
|
126
|
-
|
|
127
|
-
4. 风险与依赖
|
|
128
|
-
- §3.4 第三方 SDK 版本未确定
|
|
129
|
-
|
|
130
|
-
5. 验收标准 (从文档推断)
|
|
131
|
-
- 用户可注册、登录、访问受保护资源
|
|
132
|
-
- 密码不以明文存储
|
|
133
|
-
|
|
134
|
-
输入 'ok' 全部采纳 | 编号讨论具体项 | 'skip' 跳过
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
**交互方式**:
|
|
138
|
-
- `ok` — 采纳所有默认判断,进入拆解
|
|
139
|
-
- 编号(如 `3`)— 讨论具体编号的项,AI 给出分析和建议,用户确认
|
|
140
|
-
- 自由文本 — 如 "保持 SQLite,§3.6 也做"
|
|
141
|
-
- `skip` — 等效 `--quick`,跳过缺口分析直接拆解
|
|
142
|
-
|
|
143
|
-
缺口分析中做出的决策记录在后续生成的任务文件 Proposal 的 `### Alignment` 子节中。
|
|
144
|
-
|
|
145
|
-
### 3. 分析文档,拆解子任务
|
|
146
|
-
|
|
147
|
-
阅读设计文档内容,按以下原则拆解:
|
|
148
|
-
|
|
149
|
-
**拆解粒度**:
|
|
150
|
-
- 每个子任务应是一个可独立编码和验证的原子单元
|
|
151
|
-
- 一个子任务对应 1-3 个文件的修改
|
|
152
|
-
- 预估编码时间 15-60 分钟
|
|
153
|
-
|
|
154
|
-
**提取内容**:
|
|
155
|
-
- 功能需求 → 子任务标题 + 描述(提炼重点,不必复制全文)
|
|
156
|
-
- 实现要点 → Checklist 条目
|
|
157
|
-
- 模块依赖 → Depends 字段
|
|
158
|
-
- 紧急程度 → Priority(P0 核心功能 / P1 重要功能 / P2 优化项)
|
|
159
|
-
|
|
160
|
-
**Source 字段引用**:
|
|
161
|
-
|
|
162
|
-
设计文档模式:记录**具体章节和行号范围**。
|
|
163
|
-
引用格式:`文件路径#章节标题(L起始-L结束)`,多个章节用逗号分隔。
|
|
164
|
-
验证方法:记录引用后,用 Read 工具按行号范围回读验证,确保引用内容与子任务描述一致。如不一致,修正行号。
|
|
165
|
-
|
|
166
|
-
设计简报模式:记录**章节名**,无需行号。
|
|
167
|
-
引用格式:`<name>.design.md#3.3 数据设计`, `<name>.design.md#3.4 接口设计` 等(章节名须与模板真实标题一致)。
|
|
168
|
-
|
|
169
|
-
**验收契约拆解(硬约束)**:
|
|
170
|
-
|
|
171
|
-
1. 从全部 design 提取 P0/P1 的 S-/E-/B- 场景,以及 RULE 和高影响 RISK 到场景的映射。
|
|
172
|
-
2. 优先沿用 design 指定的测试层级与关键真实边界。旧 design 未填写时,跨 API、存储、运行时生成、渲染或最终用户可见结果的场景推断为 `E2E`,局部模块协作推断为 `integration`,纯函数约束才可用 `unit`。
|
|
173
|
-
3. 每个场景必须分配给一个负责的 TASK,并写入 `Acceptance-Refs`;同一场景可被多个任务引用,但必须有且仅有一个最终验收负责人。
|
|
174
|
-
4. `manual` 只允许用于无法自动化的外部条件,必须记录原因并经用户明确确认。agent 不得把 design 的 E2E 自行降级为 unit/integration。
|
|
175
|
-
5. Checklist 禁止使用泛化的“编写测试”。必须写成 `[场景ID][测试层级] + 真实边界 + 关键断言`,并为新功能/缺陷修复安排先写测试和 RED 记录。
|
|
176
|
-
6. 如果场景缺测试层级、真实边界或 RULE/高影响 RISK 没有验证场景,先以 `#NOTES` 列为设计缺口;未解决前不得开始编码。
|
|
177
|
-
|
|
178
|
-
**Spec 责任拆解(硬约束)**:
|
|
179
|
-
|
|
180
|
-
1. 先执行 Context `refresh`,读取 Design `Spec Compliance Matrix` 与每个 design-stage/plan-stage Rule 的 `verifier_ref`,继承已有 applied refs,禁止重新选择或降级。
|
|
181
|
-
2. 每条 plan-stage required Rule 必须有且仅有一个责任 TASK;该 TASK 的 `Spec-Refs` 写完整 `{spec-id}#{rule-ref}`,Checklist 写具体 verifier 命令/输入,Acceptance Contract 写测试层级、不得 Mock 的真实边界和关键断言。
|
|
182
|
-
3. Rule 可被其他 TASK 引用为依赖,但 Acceptance Coverage 只能有一个最终负责人。E2E 层级**不得降级**;manual 仍仅限经用户确认的外部边界。
|
|
183
|
-
4. 缺 `verifier_ref`、责任 TASK 为 0/多个、Checklist/Contract 不含 Rule-specific 验证责任时,任务文件只能保留为缺口草稿,不能启动。
|
|
184
|
-
|
|
185
|
-
### 4. 生成任务文件方案
|
|
186
|
-
|
|
187
|
-
将拆解结果按以下格式组织,展示给用户确认:
|
|
188
|
-
|
|
189
|
-
```markdown
|
|
190
|
-
# Tasks: <功能/模块名称>
|
|
191
|
-
|
|
192
|
-
- **Source**: <设计文档或设计简报路径;多份 design 合并时填需求目录,或逗号分隔的多个 design 路径>
|
|
193
|
-
- **Created**: <当前日期>
|
|
194
|
-
- **Updated**: <当前日期>
|
|
195
|
-
|
|
196
|
-
## Proposal
|
|
197
|
-
|
|
198
|
-
<2-3 句话说明变更意图:为什么做这个变更?解决什么问题?期望达成什么效果?>
|
|
199
|
-
|
|
200
|
-
这段由 AI 从设计文档中提炼生成,帮助编码阶段快速理解全局意图,而不必重读整篇详设。
|
|
201
|
-
|
|
202
|
-
### Alignment
|
|
203
|
-
|
|
204
|
-
(仅在执行了缺口分析时出现此子节)
|
|
205
|
-
|
|
206
|
-
- **Scope**: <纳入和排除的范围>
|
|
207
|
-
- **Decisions**:
|
|
208
|
-
- <决策 1>
|
|
209
|
-
- <决策 2>
|
|
210
|
-
- **Non-goals**: <排除项>
|
|
211
|
-
- **Acceptance**: <验收标准>
|
|
212
|
-
|
|
213
|
-
---
|
|
214
|
-
|
|
215
|
-
## Acceptance Coverage
|
|
216
|
-
|
|
217
|
-
| 场景ID | 来源设计 | 测试层级 | 关键真实边界 | 负责任务 | 状态 |
|
|
218
|
-
|--------|---------|---------|-------------|---------|------|
|
|
219
|
-
| S-01 | xxx.design.md#2.5 验收条件 | E2E | API → Store → Renderer | TASK-001 | planned |
|
|
220
|
-
| E-01 | xxx.design.md#2.5 验收条件 | integration | Service → Store | TASK-001 | planned |
|
|
221
|
-
|
|
222
|
-
> 本表必须覆盖 design 中全部 P0/P1 场景,以及 RULE/高影响 RISK 映射的场景;存在缺口时不生成可启动任务。
|
|
223
|
-
|
|
224
|
-
---
|
|
225
|
-
|
|
226
|
-
## TASK-001: <子任务标题>
|
|
227
|
-
|
|
228
|
-
- **Status**: draft
|
|
229
|
-
- **Priority**: P0
|
|
230
|
-
- **Depends**:
|
|
231
|
-
- **Source**: docs/xxx.md#§3.1 数据模型(L83-L110)
|
|
232
|
-
- **Spec-Refs**: product-rules#RULE-product-001
|
|
233
|
-
- **Acceptance-Refs**: S-01, E-01, RULE-01
|
|
234
|
-
|
|
235
|
-
### Description
|
|
236
|
-
<从设计文档提取的需求重点,不必复制全文>
|
|
237
|
-
|
|
238
|
-
### Checklist
|
|
239
|
-
- [ ] <具体实现步骤1>
|
|
240
|
-
- [ ] <具体实现步骤2>
|
|
241
|
-
- [ ] [S-01][E2E] 编写 E2E 验收测试并登记可单独执行的命令(真实边界:API → Store → Renderer);不在编码期执行 RED/GREEN,统一留给 verify-e2e
|
|
242
|
-
- [ ] [S-01] 断言 <最终可观测结果 1> 与 <最终可观测结果 2>
|
|
243
|
-
- [ ] [E-01][integration] 覆盖 <异常输入> 与 <可观测失败行为>
|
|
244
|
-
- [ ] 运行验收命令并填写 Acceptance Evidence
|
|
245
|
-
|
|
246
|
-
### Acceptance Contract
|
|
247
|
-
|
|
248
|
-
| 场景ID | 测试层级 | 不得 Mock 的真实边界 | 关键断言 | 测试文件 / 用例 | 执行命令 | 状态 |
|
|
249
|
-
|--------|---------|--------------------|---------|----------------|---------|------|
|
|
250
|
-
| S-01 | E2E | API、Store、Renderer | <断言列表> | planned | planned | planned |
|
|
251
|
-
| E-01 | integration | Service、Store | <断言列表> | planned | planned | planned |
|
|
252
|
-
|
|
253
|
-
### Acceptance Evidence
|
|
254
|
-
|
|
255
|
-
> `cf-task-start` 在编码期填写 functional/manual 的 RED/GREEN 结果、每个关键断言的位置和真实组件证据;E2E 仅登记测试与命令,执行统一留给 verify-e2e。全部 functional 状态 verified 后任务才可 done。
|
|
256
|
-
|
|
257
|
-
### Log
|
|
258
|
-
- [<当前日期>] created (draft)
|
|
259
|
-
|
|
260
|
-
---
|
|
261
|
-
|
|
262
|
-
## TASK-002: <子任务标题>
|
|
263
|
-
|
|
264
|
-
- **Status**: draft
|
|
265
|
-
- **Priority**: P1
|
|
266
|
-
- **Depends**: TASK-001
|
|
267
|
-
- **Source**: docs/xxx.md#§3.2 API 接口(L111-L155), docs/xxx.md#§3.3 业务逻辑(L156-L180)
|
|
268
|
-
|
|
269
|
-
### Description
|
|
270
|
-
...
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
**展示格式**(供用户审阅):
|
|
274
|
-
|
|
275
|
-
```
|
|
276
|
-
拆解结果(共 N 个子任务):
|
|
277
|
-
|
|
278
|
-
TASK-001: <标题> [P0]
|
|
279
|
-
来源: §3.1 数据模型 (L83-L110)
|
|
280
|
-
验收: S-01(E2E), E-01(integration)
|
|
281
|
-
描述: ...
|
|
282
|
-
Checklist: N 项
|
|
283
|
-
依赖: 无
|
|
284
|
-
|
|
285
|
-
TASK-002: <标题> [P1]
|
|
286
|
-
来源: §3.2 API 接口 (L111-L155), §3.3 业务逻辑 (L156-L180)
|
|
287
|
-
描述: ...
|
|
288
|
-
Checklist: N 项
|
|
289
|
-
依赖: TASK-001
|
|
290
|
-
|
|
291
|
-
确认写入?可以调整:
|
|
292
|
-
- 修改某个子任务的内容
|
|
293
|
-
- 删除不需要的子任务
|
|
294
|
-
- 合并过于细碎的子任务
|
|
295
|
-
- 调整依赖关系和章节引用
|
|
296
|
-
```
|
|
297
|
-
|
|
298
|
-
等待用户确认或调整。
|
|
299
|
-
|
|
300
|
-
### 5. 写入文件
|
|
301
|
-
|
|
302
|
-
用户确认后:
|
|
303
|
-
1. 文件名取需求名(kebab-case),如 `auth-module`;多份 design 合并产出**一份** `<需求>.md`
|
|
304
|
-
2. 如果输入为需求目录或其中的 .design.md → 写入**该需求目录** `.code-flow/tasks/<日期>/<需求>/<需求>.md`
|
|
305
|
-
3. 如果输入为 docs/ 设计文档(无需求目录)→ 按当前日期创建需求目录 `.code-flow/tasks/<YYYY-MM-DD>/<需求>/` 并写入其中
|
|
306
|
-
4. 用 Write 写入
|
|
307
|
-
|
|
308
|
-
写入后用 `bind --stage plan` 的 `applications` 将每条 required Rule 指向任务文件内唯一 TASK item,并执行:
|
|
309
|
-
|
|
310
|
-
```bash
|
|
311
|
-
python3 .code-flow/scripts/cf_spec_gate.py --task-dir <需求目录> --stage plan --artifact <任务文件> --json
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
通过 Plan Gate 后,锁定验收基线:
|
|
315
|
-
|
|
316
|
-
```bash
|
|
317
|
-
python3 .code-flow/scripts/cf_acceptance_manifest.py \
|
|
318
|
-
--task-file <任务文件> \
|
|
319
|
-
--output <需求目录>/.acceptance-manifest.json
|
|
320
|
-
```
|
|
321
|
-
|
|
322
|
-
Manifest 锁定场景 ID、来源、测试层级、真实边界和责任 TASK。编码阶段不得静默修改这些字段;如发生范围变化,必须重新执行 plan 验证。
|
|
323
|
-
|
|
324
|
-
验收类型按测试层级归类:
|
|
325
|
-
- `unit/integration` → `functional`(Done Gate 自动执行)
|
|
326
|
-
- `E2E` → `e2e`(延迟至所有任务完成后,需 `--include-e2e` 显式执行)
|
|
327
|
-
- `manual` → `manual`(用户手动验证,永不自动执行)
|
|
328
|
-
|
|
329
|
-
E2E 场景依赖外部环境(数据库、API、浏览器),在编码阶段默认跳过(状态 `e2e_deferred`),不阻断 Done Gate。所有子任务完成后,执行:
|
|
330
|
-
|
|
331
|
-
```bash
|
|
332
|
-
python3 .code-flow/scripts/cf_acceptance_runner.py \
|
|
333
|
-
--manifest <需求目录>/.acceptance-manifest.json \
|
|
334
|
-
--root . \
|
|
335
|
-
--include-e2e \
|
|
336
|
-
--write-evidence
|
|
337
|
-
```
|
|
338
|
-
|
|
339
|
-
不得为了提速降低 design 指定的 E2E 层级。
|
|
340
|
-
|
|
341
|
-
只有 Context Plan 状态与任务结构校验都 `decision=pass` 才输出 Start 下一步;缺唯一 owner、`verifier_ref`、测试层级或真实边界时必须回到拆解修复。
|
|
342
|
-
|
|
343
|
-
### 6. 输出摘要
|
|
344
|
-
|
|
345
|
-
```
|
|
346
|
-
已生成任务文件: .code-flow/tasks/2026-03-15/auth-module.md
|
|
347
|
-
- 子任务数: N
|
|
348
|
-
- P0: x 个, P1: y 个, P2: z 个
|
|
349
|
-
- 依赖链深度: N 层
|
|
350
|
-
- 详设引用覆盖: §3.1, §3.2, §3.3, §3.5 (共 4 个章节)
|
|
351
|
-
- 验收覆盖: P0/P1 场景 x/x,RULE/高影响 RISK 映射 y/y,E2E 场景 z 个
|
|
352
|
-
|
|
353
|
-
建议执行顺序:
|
|
354
|
-
1. TASK-001 (无依赖)
|
|
355
|
-
2. TASK-003 (无依赖) ← 可与 TASK-001 并行
|
|
356
|
-
3. TASK-002 (依赖: TASK-001)
|
|
357
|
-
...
|
|
358
|
-
|
|
359
|
-
下一步:
|
|
360
|
-
- 审阅任务: 直接阅读 .code-flow/tasks/2026-03-15/auth-module.md
|
|
361
|
-
- 添加批注: /cf-task:note auth-module TASK-001 "批注内容"
|
|
362
|
-
- 开始编码: /cf-task:start auth-module
|
|
363
|
-
```
|