@michaelxwb/code-flow 0.8.1 → 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.
Files changed (268) hide show
  1. package/README.md +73 -152
  2. package/bin/code-flow.js +12 -0
  3. package/docs/README.md +19 -0
  4. package/docs/USAGE.md +156 -1417
  5. package/docs/v1-design.md +1858 -0
  6. package/docs/v1-implementation.md +186 -0
  7. package/lib/adapters.js +126 -0
  8. package/lib/cli.js +258 -0
  9. package/lib/config.js +85 -0
  10. package/lib/doctor.js +283 -0
  11. package/lib/frontmatter.js +42 -0
  12. package/lib/fs.js +141 -0
  13. package/lib/glob.js +23 -0
  14. package/lib/hook.js +99 -0
  15. package/lib/init.js +132 -0
  16. package/lib/learn.js +170 -0
  17. package/lib/locks.js +52 -0
  18. package/lib/markdown.js +13 -0
  19. package/lib/process.js +116 -0
  20. package/lib/render.js +115 -0
  21. package/lib/repo.js +48 -0
  22. package/lib/runs.js +155 -0
  23. package/lib/session.js +40 -0
  24. package/lib/spec.js +80 -0
  25. package/lib/task.js +258 -0
  26. package/lib/taskdoc.js +308 -0
  27. package/lib/toml.js +140 -0
  28. package/lib/verify.js +168 -0
  29. package/lib/worktree.js +930 -0
  30. package/package.json +18 -21
  31. package/templates/adapters/opencode.mjs +65 -0
  32. package/templates/config.json +39 -0
  33. package/templates/instructions.md +13 -0
  34. package/templates/launcher/bridge.cjs +295 -0
  35. package/templates/launcher/hook.cmd +15 -0
  36. package/templates/launcher/hook.ps1 +10 -0
  37. package/templates/launcher/hook.sh +20 -0
  38. package/templates/skills/cf-check.md +19 -0
  39. package/templates/skills/cf-init.md +16 -0
  40. package/templates/skills/cf-spec.md +20 -0
  41. package/templates/skills/cf-task-align.md +19 -0
  42. package/templates/skills/cf-task-archive.md +20 -0
  43. package/templates/skills/cf-task-plan.md +31 -0
  44. package/templates/skills/cf-task-prd.md +14 -0
  45. package/templates/skills/cf-task-start.md +41 -0
  46. package/{src/core/code-flow/specs/shared/design → templates/workflow}/design-frontend.md +12 -12
  47. package/{src/core/code-flow/specs/shared/design → templates/workflow}/design-full.md +17 -19
  48. package/{src/core/code-flow/specs/shared/design → templates/workflow}/design-lite.md +12 -12
  49. package/{src/core/code-flow/specs/shared/prd-template.md → templates/workflow/prd.md} +1 -1
  50. package/templates/workflow/project-guidelines.md +48 -0
  51. package/templates/workflow/scenarios.md +67 -0
  52. package/templates/workflow/task.md +56 -0
  53. package/docs/acceptance-contract.md +0 -217
  54. package/docs/ci/acceptance-evidence.md +0 -77
  55. package/docs/migrations/runtime-0.7.0.md +0 -41
  56. package/docs/migrations/runtime-0.8.0.md +0 -154
  57. package/docs/migrations/runtime-0.9.0.md +0 -40
  58. package/docs/migrations/spec-workflow-0.6.0.md +0 -42
  59. package/docs/spec-injection-hardening.md +0 -54
  60. package/docs/spec-injection-performance.json +0 -73
  61. package/docs/spec-optimization.md +0 -12
  62. package/src/adapters/claude/CLAUDE.md +0 -45
  63. package/src/adapters/claude/commands/cf-init.md +0 -262
  64. package/src/adapters/claude/commands/cf-learn.md +0 -291
  65. package/src/adapters/claude/commands/cf-spec.md +0 -87
  66. package/src/adapters/claude/commands/cf-stats.md +0 -96
  67. package/src/adapters/claude/commands/cf-sync.md +0 -39
  68. package/src/adapters/claude/commands/cf-task/align.md +0 -331
  69. package/src/adapters/claude/commands/cf-task/archive.md +0 -155
  70. package/src/adapters/claude/commands/cf-task/block.md +0 -49
  71. package/src/adapters/claude/commands/cf-task/graph.md +0 -92
  72. package/src/adapters/claude/commands/cf-task/note.md +0 -248
  73. package/src/adapters/claude/commands/cf-task/plan.md +0 -477
  74. package/src/adapters/claude/commands/cf-task/prd.md +0 -173
  75. package/src/adapters/claude/commands/cf-task/start.md +0 -317
  76. package/src/adapters/claude/commands/cf-task/status.md +0 -71
  77. package/src/adapters/claude/commands/cf-task/verify-e2e.md +0 -148
  78. package/src/adapters/claude/commands/cf-validate.md +0 -100
  79. package/src/adapters/claude/settings.local.json +0 -50
  80. package/src/adapters/codex/AGENTS.md +0 -45
  81. package/src/adapters/codex/config.toml +0 -3
  82. package/src/adapters/codex/hooks.json +0 -54
  83. package/src/adapters/codex/skills/cf-init/SKILL.md +0 -273
  84. package/src/adapters/codex/skills/cf-learn/SKILL.md +0 -296
  85. package/src/adapters/codex/skills/cf-spec/SKILL.md +0 -88
  86. package/src/adapters/codex/skills/cf-stats/SKILL.md +0 -97
  87. package/src/adapters/codex/skills/cf-sync/SKILL.md +0 -45
  88. package/src/adapters/codex/skills/cf-task-align/SKILL.md +0 -332
  89. package/src/adapters/codex/skills/cf-task-archive/SKILL.md +0 -156
  90. package/src/adapters/codex/skills/cf-task-block/SKILL.md +0 -50
  91. package/src/adapters/codex/skills/cf-task-graph/SKILL.md +0 -93
  92. package/src/adapters/codex/skills/cf-task-note/SKILL.md +0 -245
  93. package/src/adapters/codex/skills/cf-task-plan/SKILL.md +0 -478
  94. package/src/adapters/codex/skills/cf-task-prd/SKILL.md +0 -174
  95. package/src/adapters/codex/skills/cf-task-start/SKILL.md +0 -318
  96. package/src/adapters/codex/skills/cf-task-status/SKILL.md +0 -72
  97. package/src/adapters/codex/skills/cf-task-verify-e2e/SKILL.md +0 -145
  98. package/src/adapters/codex/skills/cf-validate/SKILL.md +0 -102
  99. package/src/adapters/commands.json +0 -115
  100. package/src/adapters/costrict/CLAUDE.md +0 -45
  101. package/src/adapters/costrict/commands/cf-init.md +0 -262
  102. package/src/adapters/costrict/commands/cf-learn.md +0 -291
  103. package/src/adapters/costrict/commands/cf-spec.md +0 -87
  104. package/src/adapters/costrict/commands/cf-stats.md +0 -96
  105. package/src/adapters/costrict/commands/cf-sync.md +0 -39
  106. package/src/adapters/costrict/commands/cf-task/align.md +0 -331
  107. package/src/adapters/costrict/commands/cf-task/archive.md +0 -155
  108. package/src/adapters/costrict/commands/cf-task/block.md +0 -49
  109. package/src/adapters/costrict/commands/cf-task/graph.md +0 -92
  110. package/src/adapters/costrict/commands/cf-task/note.md +0 -248
  111. package/src/adapters/costrict/commands/cf-task/plan.md +0 -477
  112. package/src/adapters/costrict/commands/cf-task/prd.md +0 -173
  113. package/src/adapters/costrict/commands/cf-task/start.md +0 -317
  114. package/src/adapters/costrict/commands/cf-task/status.md +0 -71
  115. package/src/adapters/costrict/commands/cf-task/verify-e2e.md +0 -148
  116. package/src/adapters/costrict/commands/cf-validate.md +0 -100
  117. package/src/adapters/costrict/settings.local.json +0 -50
  118. package/src/adapters/install-plan.json +0 -100
  119. package/src/adapters/opencode/AGENTS.md +0 -45
  120. package/src/adapters/opencode/commands/cf-init.md +0 -281
  121. package/src/adapters/opencode/commands/cf-learn.md +0 -295
  122. package/src/adapters/opencode/commands/cf-spec.md +0 -91
  123. package/src/adapters/opencode/commands/cf-stats.md +0 -100
  124. package/src/adapters/opencode/commands/cf-sync.md +0 -44
  125. package/src/adapters/opencode/commands/cf-task/align.md +0 -331
  126. package/src/adapters/opencode/commands/cf-task/archive.md +0 -160
  127. package/src/adapters/opencode/commands/cf-task/block.md +0 -54
  128. package/src/adapters/opencode/commands/cf-task/graph.md +0 -97
  129. package/src/adapters/opencode/commands/cf-task/note.md +0 -253
  130. package/src/adapters/opencode/commands/cf-task/plan.md +0 -477
  131. package/src/adapters/opencode/commands/cf-task/prd.md +0 -178
  132. package/src/adapters/opencode/commands/cf-task/start.md +0 -317
  133. package/src/adapters/opencode/commands/cf-task/status.md +0 -76
  134. package/src/adapters/opencode/commands/cf-task/verify-e2e.md +0 -148
  135. package/src/adapters/opencode/commands/cf-validate.md +0 -105
  136. package/src/adapters/opencode/opencode.json +0 -3
  137. package/src/adapters/opencode/plugins/code-flow/index.js +0 -162
  138. package/src/adapters/opencode/plugins/code-flow/package.json +0 -6
  139. package/src/adapters/platform-bindings.json +0 -370
  140. package/src/cli.js +0 -1076
  141. package/src/core/code-flow/config.yml +0 -161
  142. package/src/core/code-flow/runtime-commands.json +0 -259
  143. package/src/core/code-flow/scripts/cf_acceptance_manifest.py +0 -10
  144. package/src/core/code-flow/scripts/cf_acceptance_runner.py +0 -10
  145. package/src/core/code-flow/scripts/cf_audit.py +0 -10
  146. package/src/core/code-flow/scripts/cf_codex_hook.py +0 -10
  147. package/src/core/code-flow/scripts/cf_design_lint.py +0 -10
  148. package/src/core/code-flow/scripts/cf_evidence_import.py +0 -10
  149. package/src/core/code-flow/scripts/cf_feedback.py +0 -10
  150. package/src/core/code-flow/scripts/cf_opencode_event.py +0 -10
  151. package/src/core/code-flow/scripts/cf_post_hook.py +0 -11
  152. package/src/core/code-flow/scripts/cf_pre_tool_hook.py +0 -11
  153. package/src/core/code-flow/scripts/cf_scenarios.py +0 -10
  154. package/src/core/code-flow/scripts/cf_spec_context.py +0 -10
  155. package/src/core/code-flow/scripts/cf_spec_gate.py +0 -10
  156. package/src/core/code-flow/scripts/cf_spec_session.py +0 -10
  157. package/src/core/code-flow/scripts/cf_stats.py +0 -10
  158. package/src/core/code-flow/scripts/cf_stop_hook.py +0 -11
  159. package/src/core/code-flow/scripts/cf_sync.py +0 -10
  160. package/src/core/code-flow/scripts/cf_task_index.py +0 -10
  161. package/src/core/code-flow/scripts/cf_task_parallel.py +0 -10
  162. package/src/core/code-flow/scripts/cf_task_workflow.py +0 -10
  163. package/src/core/code-flow/scripts/cf_user_prompt_hook.py +0 -11
  164. package/src/core/code-flow/scripts/cf_validation.py +0 -10
  165. package/src/core/code-flow/scripts/codeflow/__init__.py +0 -0
  166. package/src/core/code-flow/scripts/codeflow/acceptance/__init__.py +0 -0
  167. package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_evidence.py +0 -347
  168. package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_manifest_core.py +0 -660
  169. package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_plan.py +0 -202
  170. package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_registration.py +0 -60
  171. package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_risk.py +0 -73
  172. package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_schema.py +0 -282
  173. package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_selection.py +0 -266
  174. package/src/core/code-flow/scripts/codeflow/acceptance/cf_check_inputs.py +0 -172
  175. package/src/core/code-flow/scripts/codeflow/acceptance/cf_check_registration.py +0 -326
  176. package/src/core/code-flow/scripts/codeflow/acceptance/cf_checks.py +0 -333
  177. package/src/core/code-flow/scripts/codeflow/acceptance/cf_plan_quality.py +0 -197
  178. package/src/core/code-flow/scripts/codeflow/acceptance/cf_scenario_quality.py +0 -174
  179. package/src/core/code-flow/scripts/codeflow/acceptance/cf_scenario_source.py +0 -300
  180. package/src/core/code-flow/scripts/codeflow/acceptance/cf_traceability.py +0 -502
  181. package/src/core/code-flow/scripts/codeflow/cli/__init__.py +0 -0
  182. package/src/core/code-flow/scripts/codeflow/cli/cf_acceptance_manifest.py +0 -347
  183. package/src/core/code-flow/scripts/codeflow/cli/cf_acceptance_runner.py +0 -1490
  184. package/src/core/code-flow/scripts/codeflow/cli/cf_audit.py +0 -533
  185. package/src/core/code-flow/scripts/codeflow/cli/cf_design_lint.py +0 -172
  186. package/src/core/code-flow/scripts/codeflow/cli/cf_evidence_import.py +0 -607
  187. package/src/core/code-flow/scripts/codeflow/cli/cf_feedback.py +0 -53
  188. package/src/core/code-flow/scripts/codeflow/cli/cf_scenarios.py +0 -58
  189. package/src/core/code-flow/scripts/codeflow/cli/cf_spec_context.py +0 -1175
  190. package/src/core/code-flow/scripts/codeflow/cli/cf_spec_gate.py +0 -60
  191. package/src/core/code-flow/scripts/codeflow/cli/cf_spec_session.py +0 -46
  192. package/src/core/code-flow/scripts/codeflow/cli/cf_stats.py +0 -540
  193. package/src/core/code-flow/scripts/codeflow/cli/cf_sync.py +0 -144
  194. package/src/core/code-flow/scripts/codeflow/cli/cf_task_index.py +0 -177
  195. package/src/core/code-flow/scripts/codeflow/cli/cf_task_parallel.py +0 -1142
  196. package/src/core/code-flow/scripts/codeflow/cli/cf_task_workflow.py +0 -742
  197. package/src/core/code-flow/scripts/codeflow/cli/cf_validation.py +0 -31
  198. package/src/core/code-flow/scripts/codeflow/core/__init__.py +0 -0
  199. package/src/core/code-flow/scripts/codeflow/core/cf_context_cache.py +0 -67
  200. package/src/core/code-flow/scripts/codeflow/core/cf_core.py +0 -609
  201. package/src/core/code-flow/scripts/codeflow/core/cf_exec_base.py +0 -325
  202. package/src/core/code-flow/scripts/codeflow/core/cf_fs.py +0 -57
  203. package/src/core/code-flow/scripts/codeflow/core/cf_git.py +0 -92
  204. package/src/core/code-flow/scripts/codeflow/core/cf_log.py +0 -160
  205. package/src/core/code-flow/scripts/codeflow/core/cf_markdown.py +0 -77
  206. package/src/core/code-flow/scripts/codeflow/core/cf_native_paths.py +0 -26
  207. package/src/core/code-flow/scripts/codeflow/core/cf_patch.py +0 -33
  208. package/src/core/code-flow/scripts/codeflow/core/cf_runtime_install.py +0 -32
  209. package/src/core/code-flow/scripts/codeflow/core/cf_session_state.py +0 -37
  210. package/src/core/code-flow/scripts/codeflow/core/cf_stop_guard.py +0 -53
  211. package/src/core/code-flow/scripts/codeflow/core/cf_task_state.py +0 -9
  212. package/src/core/code-flow/scripts/codeflow/core/cf_validators.py +0 -408
  213. package/src/core/code-flow/scripts/codeflow/core/cf_worktree_env.py +0 -253
  214. package/src/core/code-flow/scripts/codeflow/evidence/__init__.py +0 -0
  215. package/src/core/code-flow/scripts/codeflow/evidence/cf_evidence_store.py +0 -527
  216. package/src/core/code-flow/scripts/codeflow/hooks/__init__.py +0 -0
  217. package/src/core/code-flow/scripts/codeflow/hooks/cf_codex_hook.py +0 -95
  218. package/src/core/code-flow/scripts/codeflow/hooks/cf_opencode_event.py +0 -98
  219. package/src/core/code-flow/scripts/codeflow/hooks/cf_post_hook.py +0 -30
  220. package/src/core/code-flow/scripts/codeflow/hooks/cf_pre_tool_hook.py +0 -41
  221. package/src/core/code-flow/scripts/codeflow/hooks/cf_stop_hook.py +0 -292
  222. package/src/core/code-flow/scripts/codeflow/hooks/cf_user_prompt_hook.py +0 -161
  223. package/src/core/code-flow/scripts/codeflow/spec/__init__.py +0 -0
  224. package/src/core/code-flow/scripts/codeflow/spec/cf_active_task.py +0 -412
  225. package/src/core/code-flow/scripts/codeflow/spec/cf_context_refresh.py +0 -301
  226. package/src/core/code-flow/scripts/codeflow/spec/cf_edit_service.py +0 -149
  227. package/src/core/code-flow/scripts/codeflow/spec/cf_injection.py +0 -111
  228. package/src/core/code-flow/scripts/codeflow/spec/cf_rule_readiness.py +0 -114
  229. package/src/core/code-flow/scripts/codeflow/spec/cf_scan.py +0 -367
  230. package/src/core/code-flow/scripts/codeflow/spec/cf_spec_budget.py +0 -55
  231. package/src/core/code-flow/scripts/codeflow/spec/cf_spec_context_model.py +0 -477
  232. package/src/core/code-flow/scripts/codeflow/spec/cf_spec_impact.py +0 -119
  233. package/src/core/code-flow/scripts/codeflow/spec/cf_spec_metadata.py +0 -387
  234. package/src/core/code-flow/scripts/codeflow/spec/cf_spec_migrate.py +0 -529
  235. package/src/core/code-flow/scripts/codeflow/spec/cf_spec_optimize.py +0 -193
  236. package/src/core/code-flow/scripts/codeflow/spec/cf_spec_optimize_apply.py +0 -187
  237. package/src/core/code-flow/scripts/codeflow/spec/cf_spec_resolver.py +0 -369
  238. package/src/core/code-flow/scripts/codeflow/spec/cf_spec_router.py +0 -304
  239. package/src/core/code-flow/scripts/codeflow/spec/cf_spec_verify.py +0 -687
  240. package/src/core/code-flow/scripts/codeflow/spec/cf_stage_gate.py +0 -330
  241. package/src/core/code-flow/scripts/codeflow/spec/cf_task_projection.py +0 -83
  242. package/src/core/code-flow/scripts/codeflow/spec/cf_workflow_service.py +0 -755
  243. package/src/core/code-flow/scripts/codeflow/spec/cf_workflow_transaction.py +0 -110
  244. package/src/core/code-flow/scripts/codeflow/task/__init__.py +0 -0
  245. package/src/core/code-flow/scripts/codeflow/task/cf_requirement_verification.py +0 -867
  246. package/src/core/code-flow/scripts/codeflow/task/cf_task_doc.py +0 -178
  247. package/src/core/code-flow/scripts/codeflow/task/cf_task_merge.py +0 -635
  248. package/src/core/code-flow/scripts/codeflow/task/cf_task_plan.py +0 -251
  249. package/src/core/code-flow/scripts/codeflow/task/cf_task_runtime.py +0 -570
  250. package/src/core/code-flow/scripts/codeflow/task/cf_validation_service.py +0 -73
  251. package/src/core/code-flow/scripts/runtime-resources.json +0 -29
  252. package/src/core/code-flow/specs/backend/_map.md +0 -56
  253. package/src/core/code-flow/specs/backend/code-quality-performance.md +0 -59
  254. package/src/core/code-flow/specs/backend/database.md +0 -51
  255. package/src/core/code-flow/specs/backend/directory-structure.md +0 -54
  256. package/src/core/code-flow/specs/backend/logging.md +0 -50
  257. package/src/core/code-flow/specs/backend/platform-rules.md +0 -55
  258. package/src/core/code-flow/specs/frontend/_map.md +0 -52
  259. package/src/core/code-flow/specs/frontend/component-specs.md +0 -68
  260. package/src/core/code-flow/specs/frontend/directory-structure.md +0 -53
  261. package/src/core/code-flow/specs/frontend/quality-standards.md +0 -58
  262. package/src/core/code-flow/specs/shared/_map.md +0 -57
  263. package/src/core/code-flow/specs/shared/scenarios-template.md +0 -55
  264. package/src/core/code-flow/tasks/.gitkeep +0 -0
  265. package/src/core/code-flow/validation.yml +0 -59
  266. package/src/migrate/runtime.js +0 -213
  267. package/src/migrate/spec-workflow.js +0 -253
  268. package/src/runtime.js +0 -219
@@ -1,245 +0,0 @@
1
- ---
2
- name: cf-task-note
3
- description: Discuss #NOTES annotations in task files or design briefs, propose solutions with context, resolve questions collaboratively, and merge conclusions back removing the #NOTES marker. Use when files have unresolved #NOTES markers.
4
- ---
5
-
6
- > **命令面状态(0.8)**:alias — 等价于 `cf-task-status --notes`;保留一个 minor,0.9.0 移除。
7
-
8
- ## 背景
9
-
10
- 用户在 review 文件时,直接在有问题的位置**就地标注** `#NOTES`,格式:
11
-
12
- 任务文件中:
13
- ```markdown
14
- ### Checklist
15
- - [ ] 实现用户注册接口
16
- - [ ] 密码加密存储 #NOTES 用 bcrypt 还是 argon2?
17
- - [ ] 编写单元测试
18
-
19
- ### Description
20
- 实现 JWT 认证 #NOTES token 过期时间设多少合适?
21
- ```
22
-
23
- 设计简报中:
24
- ```markdown
25
- ## Database Design
26
-
27
- ### users 表
28
- | Column | Type | Constraints | Notes |
29
- |--------|------|-------------|-------|
30
- | email | VARCHAR(255) | UNIQUE NOT NULL | 登录凭证 #NOTES 需要支持手机号登录吗? |
31
-
32
- ## API Design
33
-
34
- ### POST /auth/register
35
- - Request: `{ email: string, password: string }` #NOTES 需要用户名字段吗?
36
- ```
37
-
38
- `#NOTES` 是临时讨论标记,解决后必须消失,结论直接融入原文。
39
-
40
- ## 输入
41
-
42
- - `cf-task-note <file>` — 讨论指定文件中所有 `#NOTES`
43
- - `cf-task-note <file> TASK-001` — 只讨论指定子任务中的 `#NOTES`(仅限任务文件)
44
-
45
- 其中 `<file>` 可省略日期目录前缀和 `.md` 后缀。
46
-
47
- 查找逻辑:用 `rg --files` 或 `find` 搜索 `.code-flow/tasks/**/<file>.md` 和 `.code-flow/tasks/**/<file>*.design.md`(`*` 兼容旧 `<file>.design.md` 与域后缀 `<file>.frontend.design.md` / `<file>.backend.design.md`),从结果中排除包含 `archived/` 的路径。如果匹配到多个结果(如全栈需求的前后端 design),输出警告列出所有匹配项,让用户指定要讨论的具体文件;如果只有一个结果,直接使用。
48
-
49
- ## 执行步骤
50
-
51
- ### 0. 判断文件类型
52
-
53
- 读取匹配到的文件后,判断类型:
54
- - 文件路径以 `.design.md` 结尾 → **设计简报模式**
55
- - 其他 → **任务文件模式**
56
-
57
- ---
58
-
59
- ## 任务文件模式
60
-
61
- ### 1. 扫描 #NOTES 标记
62
-
63
- 1. 用 `rg --files` 或 `find` 定位任务文件,读取全文
64
- 2. 用正则扫描所有包含 `#NOTES` 的行,记录:
65
- - 所在的子任务(`## TASK-xxx`)
66
- - 所在的段落(Description / Checklist / 其他)
67
- - 原始行内容
68
- - `#NOTES` 后的问题描述
69
- 3. 如果没有找到 `#NOTES`,提示"无待讨论的标记",结束
70
-
71
- 输出扫描结果:
72
- ```
73
- 找到 3 个 #NOTES 标记:
74
-
75
- TASK-001:
76
- 1. [Checklist] 密码加密存储 #NOTES 用 bcrypt 还是 argon2?
77
- 2. [Description] 实现 JWT 认证 #NOTES token 过期时间设多少合适?
78
-
79
- TASK-002:
80
- 3. [Checklist] 调用支付 SDK #NOTES 用哪个版本的 SDK?
81
-
82
- 开始逐条讨论...
83
- ```
84
-
85
- ### 2. 加载上下文
86
-
87
- 1. 读取当前子任务的 `Source` 字段,解析章节引用
88
- 2. 按行号范围读取详设文档的对应章节
89
- 3. 将详设上下文作为讨论背景
90
-
91
- ### 3. 逐条讨论
92
-
93
- 对每个 `#NOTES`,展示上下文并给出建议方案,与用户对话:
94
-
95
- ```
96
- --- #NOTES 1/3 ---
97
- 位置: TASK-001 / Checklist
98
- 原文: 密码加密存储 #NOTES 用 bcrypt 还是 argon2?
99
-
100
- 详设参考 (§3.1 L95-L98):
101
- "用户密码必须加密存储,推荐使用行业标准算法"
102
-
103
- 分析:
104
- - bcrypt: 成熟稳定,生态支持好,Node.js 原生支持
105
- - argon2: 更现代,抗 GPU 攻击更强,但依赖 C 编译
106
-
107
- 建议: bcrypt(项目技术栈为 Node.js,无需额外编译依赖)
108
-
109
- 是否采纳?或提出你的方案:
110
- ```
111
-
112
- 等待用户回应。
113
-
114
- ### 4. 沉淀结论并清除标记
115
-
116
- 用户确认方案后:
117
-
118
- 1. 用 apply_patch 将该行中的 `#NOTES xxx` 删除,并将结论融入原文
119
- - 修改前:`- [ ] 密码加密存储 #NOTES 用 bcrypt 还是 argon2?`
120
- - 修改后:`- [ ] 密码使用 bcrypt 加密存储`
121
- 2. 如果结论需要新增步骤 → 用 apply_patch 追加 Checklist 条目或补充 Description
122
- 3. 在 `### Log` 追加:`- [<当前日期>] resolved #NOTES: <结论摘要>`
123
-
124
- **apply_patch 边界约束(必须遵守)**:
125
- - `old_string` 必须严格限定在当前 TASK 段落内,**绝对禁止**匹配到 `---` 分隔线或下一个 `## TASK-xxx` 标题
126
- - Log 追加时,`old_string` 只匹配 Log 段落的最后一行内容,不要向下延伸到段落外
127
- - 如果 Log 是当前 TASK 的最后一个段落,其内容到 `---` 分隔线之前结束;`old_string` 不得包含 `---` 及其后的任何内容
128
- - 示例(正确):`old_string = "- [2026-03-23] created (draft)"` → 只匹配 Log 末行
129
- - 示例(错误):`old_string = "- [2026-03-23] created (draft)\n\n---\n\n## TASK-003"` → 越界,会删除下一个 TASK 标题
130
-
131
- ### 5. 完成检查
132
-
133
- 所有 `#NOTES` 讨论完毕后:
134
-
135
- 1. 再次扫描文件,确认无残留 `#NOTES` 标记
136
- 2. 如果子任务之前因 `#NOTES` 被标记为 `blocked`,清除当前阻塞条目后调用 `code-flow task resume --root "$PWD" --task-dir "<需求目录>" --task TASK-001 --json`。命令检查依赖和残留 Notes,同步 marker 与任务状态;不得从历史 Log 猜测状态后只改 Markdown。失败保留 blocked 并报告原因。
137
- 3. 更新文件头 `Updated` 日期
138
-
139
- ### 6. 输出摘要
140
-
141
- ```
142
- #NOTES 讨论完成: auth-module
143
-
144
- 已解决:
145
- 1. TASK-001 密码加密 → 使用 bcrypt
146
- 2. TASK-001 token 过期 → 设为 7 天,支持 refresh
147
- 3. TASK-002 SDK 版本 → 使用 v3.2.1
148
-
149
- 文件已更新,所有 #NOTES 标记已清除。
150
- 可执行 cf-task-start auth-module 开始编码。
151
- ```
152
-
153
- ---
154
-
155
- ## 设计简报模式
156
-
157
- ### 1. 扫描 #NOTES 标记
158
-
159
- 1. 读取 `.design.md` 全文
160
- 2. 用正则扫描所有包含 `#NOTES` 的行,记录:
161
- - 所在的章节(`## Goal` / `## Database Design` / `## API Design` 等)
162
- - 原始行内容
163
- - `#NOTES` 后的问题描述
164
- 3. 如果没有找到 `#NOTES`,提示"无待讨论的标记",结束
165
-
166
- 输出扫描结果:
167
- ```
168
- 找到 2 个 #NOTES 标记 (设计简报):
169
-
170
- [Database Design]:
171
- 1. email 字段 #NOTES 需要支持手机号登录吗?
172
-
173
- [API Design / POST /auth/register]:
174
- 2. Request schema #NOTES 需要用户名字段吗?
175
-
176
- 开始逐条讨论...
177
- ```
178
-
179
- ### 2. 加载上下文
180
-
181
- 设计简报本身就是设计文档,无需加载外部 Source。上下文来自:
182
-
183
- 1. 读取 `.design.md` 中该 `#NOTES` 所在章节的完整内容
184
- 2. 扫描代码库中与该问题相关的现有实现(如用 `rg` 搜索现有 model/route/middleware)
185
- 3. 将代码库上下文 + 设计文档上下文作为讨论背景
186
-
187
- ### 3. 逐条讨论
188
-
189
- 对每个 `#NOTES`,展示上下文并给出建议方案,与用户对话:
190
-
191
- ```
192
- --- #NOTES 1/2 ---
193
- 位置: Database Design / users 表
194
- 原文: email 字段 #NOTES 需要支持手机号登录吗?
195
-
196
- 当前设计: users 表仅有 email 字段作为登录凭证
197
- 代码库参考: 现有 User model 无手机号字段,mailer 模块仅支持邮件
198
-
199
- 分析:
200
- - 仅邮箱: 与现有 mailer 模块一致,MVP 足够
201
- - 支持手机号: 需新增 phone 字段、SMS 服务依赖、双凭证登录逻辑
202
-
203
- 建议: 仅邮箱(与 Non-goals 中"保持 MVP 精简"一致,手机号可后续迭代)
204
-
205
- 是否采纳?或提出你的方案:
206
- ```
207
-
208
- ### 4. 沉淀结论并清除标记
209
-
210
- 用户确认方案后:
211
-
212
- 1. 用 apply_patch 将该行中的 `#NOTES xxx` 删除,并将结论融入原文
213
- - 修改前:`| email | VARCHAR(255) | UNIQUE NOT NULL | 登录凭证 #NOTES 需要支持手机号登录吗? |`
214
- - 修改后:`| email | VARCHAR(255) | UNIQUE NOT NULL | 登录凭证(仅邮箱,手机号后续迭代) |`
215
- 2. 如果结论影响其他章节(如 Database Design 的结论影响 API Design),同步更新相关章节
216
-
217
- ### 5. 完成检查
218
-
219
- 所有 `#NOTES` 讨论完毕后:
220
-
221
- 1. 再次扫描文件,确认无残留 `#NOTES` 标记
222
- 2. 无 Log 段落需更新(设计简报没有 Log)
223
-
224
- ### 6. 输出摘要
225
-
226
- ```
227
- #NOTES 讨论完成: user-auth.design.md
228
-
229
- 已解决:
230
- 1. [Database Design] 登录凭证 → 仅邮箱,手机号后续迭代
231
- 2. [API Design] 注册接口 → 不加 username 字段,保持 email + password
232
-
233
- 文件已更新,所有 #NOTES 标记已清除。
234
- 可执行 cf-task-plan .code-flow/tasks/2026-04-06/user-auth.design.md 拆解任务。
235
- ```
236
-
237
- <!-- code-flow:runtime-commands start -->
238
-
239
- 运行时命令示例(由命令契约生成;实际参数见各命令 --help):
240
-
241
- ```bash
242
- code-flow task resume --help
243
- ```
244
-
245
- <!-- code-flow:runtime-commands end -->