@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
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: cf-task-start
3
+ description: Start one TASK or the next dependency batch.
4
+ ---
5
+ <!-- code-flow:v1 -->
6
+ Use `code-flow task status --json` to locate the task document and IDs. Never infer a Task from its status.
7
+
8
+ Single Task:
9
+
10
+ ```bash
11
+ code-flow task start <task-document>.md --task TASK-001 --session <token>
12
+ ```
13
+
14
+ Batch (dependency layer):
15
+
16
+ 1. Read `Depends`, choose the next ready layer, and create worktrees:
17
+
18
+ ```bash
19
+ code-flow task parallel prepare --task-file <task-document>.md --tasks TASK-001,TASK-002 --run-id <id> --workers 2
20
+ ```
21
+
22
+ 2. Read `workers` and each worker `env` from the run ledger. Dispatch no more than `workers` workers at once (default 2), one worker per Task. Give each worker its ledger `CF_*` environment. Workers use the global CLI; prepare does not install tool files into them. Add `--init` only when a host session must run inside a worker.
23
+
24
+ 3. In each worker: start → implement → **finish**. `finish` is the only test entry and runs the Task's declared tests; do not run those tests a second time before finish.
25
+
26
+ ```bash
27
+ code-flow task start <task-document>.md --task TASK-001 --session <token>
28
+ code-flow task finish <task-document>.md --task TASK-001 --json
29
+ ```
30
+
31
+ Commit the worker's business changes and its own TASK section after `finish`.
32
+
33
+ 4. From the coordinator, collect, merge/integrate, then cleanup:
34
+
35
+ ```bash
36
+ code-flow task parallel collect --run-id <id> --json
37
+ code-flow task parallel merge --run-id <id> --json
38
+ code-flow task parallel cleanup --run-id <id> --json
39
+ ```
40
+
41
+ If merge or integration fails, stop and keep the worktrees, branches and ledger for inspection. Do not run `task archive` inside a worker; archive only in the coordinator worktree after the run is complete. E2E and full regression stay in CI.
@@ -1,6 +1,6 @@
1
1
  # {模块名称} 前端模块需求与设计简报
2
2
 
3
- > **生成约定**:产出文档的 frontmatter 声明 `design_template: frontend`。浏览器 E2E 必须有匹配的 env/components/boundary,expected 逐条用 expected_refs 关联步骤或断言;deferred 补原因、owner 与 target_phase。API/CLI/后台全链路用 system,容量用 capacity;非 E2E 不写 why_e2e。完成后运行 scenarios parse --quality 与 design lint;计划再校验真实测试登记/收集。完整示例见工具文档 `docs/acceptance-contract.md`。
3
+ > **生成约定**:产出文档的 frontmatter 声明 `design_template: frontend`。验收场景引用 `<需求>.scenarios.md` 的 S-/E-/B- 场景 ID;场景是人工验收参照,不生成集中验收清单或结果登记,不阻断 start/finish/archive。设计需要给出真实可执行的相关测试建议,由任务文档声明。
4
4
 
5
5
  > **文档编号**: FE-{模块代号}-{版本号}
6
6
  > **文档版本**: v1.0
@@ -93,9 +93,9 @@
93
93
 
94
94
  ### 2.4 验收条件 [必填]
95
95
 
96
- > **场景唯一源**:验收场景定义在 `<需求>.scenarios.md`。本节只保留场景引用和前端设计影响,不复制完整场景表;优先级、执行方式、环境、输入等执行元数据以 scenarios 源为准;没有可执行命令的场景必须显式标为 aspirational;plan 阶段投影到 manifest check;测试层级(unit / component / contract / integration / system / capacity / E2E / manual)与关键真实边界定义在 scenarios 源中。
96
+ > **场景唯一源**:验收场景定义在 `<需求>.scenarios.md`。本节只保留场景引用和前端设计影响,不复制完整场景表;场景只记录人工验收所需的 step / expected / boundary / owner;没有可执行命令的场景标为 manual。
97
97
  >
98
- > **前端 E2E 精度**:表单交互、布局、文案、字段顺序、空态和错误提示用 component + mock API;E2E 只保留真实浏览器 + 真实后端 + 鉴权/DB 的关键用户旅程。E2E 必须有 `why_e2e`、非 smoke 的 `trigger_paths` 和可观察结果,禁止源码字符串/CSS/宽度断言。
98
+ > **前端 E2E 精度**:表单交互、布局、文案、字段顺序、空态和错误提示用 component + mock API;E2E 只保留真实浏览器 + 真实后端 + 鉴权/DB 的关键用户旅程,并写清可观察结果。禁止源码字符串/CSS/宽度断言。
99
99
 
100
100
  | 场景ID | 前端设计影响 / 备注 |
101
101
  |--------|--------------------|
@@ -104,14 +104,14 @@
104
104
 
105
105
  #### 2.4.1 验证环境假设 [必填]
106
106
 
107
- > 验收场景依赖的容量、硬件、外部依赖与 profile 参数必须在设计阶段写清;执行期缺失时应返回 `env_blocked` 并列出 owner,不得伪装成产品失败。
107
+ > 验收场景依赖的容量、硬件、外部依赖与 profile 参数必须在设计阶段写清;执行时缺少环境应由人工验收记录缺失项与 owner,不得伪装成产品失败。
108
108
 
109
109
  | 维度 | 假设 | 验证方式 / 参数 | 不满足时 |
110
110
  |------|------|----------------|---------|
111
- | 容量 | (页面/组件规模、并发用户、浏览器矩阵;无实测填"待定") | Playwright projects / 基准 fixture | 标记 `incomplete` 或拆分批次 |
112
- | 硬件 | (CI runner / 设备 / 视口规格) | preflight 检查 | 返回 `env_blocked` |
113
- | 依赖 | (后端 API / 浏览器版本 / 测试账号 / 字体与静态资源) | `preflight` 命令(health check) | 返回 `env_blocked` 并列出缺失项 |
114
- | profile 参数 | (smoke / changed / full、浏览器矩阵、重试与超时) | `verify --layers e2e --profile ...` | 显式报 `incomplete`,不自动降级 |
111
+ | 容量 | (页面/组件规模、并发用户、浏览器矩阵;无实测填"待定") | Playwright projects / 基准 fixture | 记录缺失项与 owner,拆分批次 |
112
+ | 硬件 | (CI runner / 设备 / 视口规格) | 人工检查 | 记录缺失项与 owner |
113
+ | 依赖 | (后端 API / 浏览器版本 / 测试账号 / 字体与静态资源) | 人工检查 | 记录缺失项与 owner |
114
+ | 测试预算 | (Task tests 的 unit/integration 范围;E2E 与全量回归留在 CI) | 人工核对任务文档 | 记录未覆盖风险与 owner |
115
115
 
116
116
  ---
117
117
 
@@ -238,11 +238,11 @@
238
238
 
239
239
  ## Spec Compliance Matrix
240
240
 
241
- > 从需求目录 `spec-context.yml` 继承并逐 Rule 回填。required Rule 必须有具体设计落点和 verifier/验收场景;N/A 只接受逐项用户确认。
241
+ > 从当前适用 Spec 与任务 `Spec-Refs` 读取 Rule,并逐条回填设计影响、设计落点与人工验收场景。
242
242
 
243
- | Spec/Rule | enforcement | 设计影响 | 设计落点 | 验证场景 | 状态/N/A 理由 |
244
- |-----------|-------------|---------|---------|---------|----------------|
245
- | `{spec-id}#RULE-{domain}-001` | required / advisory | <对方案/交互的影响> | §<heading> / <item-id> | S-/E-/B- + verifier | applied / confirmed N/A |
243
+ | Spec/Rule | 设计影响 | 设计落点 | 验收场景 | 状态/N/A 理由 |
244
+ |-----------|---------|---------|---------|----------------|
245
+ | `{spec-id}#RULE-{domain}-001` | <对方案/交互的影响> | §<heading> / <item-id> | S-/E-/B- | applied / confirmed N/A |
246
246
 
247
247
  ---
248
248
 
@@ -1,6 +1,6 @@
1
1
  # {模块名称} 模块需求与设计一体化文档
2
2
 
3
- > **生成约定**:产出文档的 frontmatter 声明 `design_template: full`。浏览器 E2E 必须有匹配的 env/components/boundary,expected 逐条用 expected_refs 关联步骤或断言;deferred 补原因、owner 与 target_phase。API/CLI/后台全链路用 system,容量用 capacity;非 E2E 不写 why_e2e。完成后运行 scenarios parse --quality 与 design lint;计划再校验真实测试登记/收集。完整示例见工具文档 `docs/acceptance-contract.md`。
3
+ > **生成约定**:产出文档的 frontmatter 声明 `design_template: full`。验收场景引用 `<需求>.scenarios.md` 的 S-/E-/B- 场景 ID;场景是人工验收参照,不生成集中验收清单或结果登记,不阻断 start/finish/archive。设计需要给出真实可执行的相关测试建议,由任务文档声明。
4
4
 
5
5
  > **文档编号**: MOD-{模块代号}-{版本号}
6
6
  > **文档版本**: v1.0
@@ -145,9 +145,9 @@
145
145
 
146
146
  #### 2.5.2 功能验收场景
147
147
 
148
- > **场景唯一源**:验收场景定义在 `<需求>.scenarios.md`。设计文档只引用全局场景 ID,并说明设计影响,不复制完整场景字段;优先级、执行方式、环境、输入等执行元数据以 scenarios 源为准;没有可执行命令的场景必须显式标为 aspirational;plan 阶段投影到 manifest check;测试层级(unit / component / contract / integration / system / capacity / E2E / manual)与关键真实边界定义在 scenarios 源中。
148
+ > **场景唯一源**:验收场景定义在 `<需求>.scenarios.md`。设计文档只引用全局场景 ID,并说明设计影响,不复制完整场景字段;场景只记录人工验收所需的 step / expected / boundary / owner;没有可执行命令的场景标为 manual。
149
149
  >
150
- > **E2E 精度**:E2E 只用于 P0/P1 关键用户旅程,且必须有 `why_e2e`(低层测试为什么不够)、非 smoke 的 `trigger_paths`(哪些源码变化才触发)和可观察结果。UI 布局/文案/字段顺序用 component,DTO/错误码用 contract,鉴权/事务/模块边界用 integration;不要用 E2E 覆盖所有用户可见结果。
150
+ > **E2E 精度**:E2E 只用于关键用户旅程,并写清真实边界与可观察结果。UI 布局/文案/字段顺序用 component,DTO/错误码用 contract,鉴权/事务/模块边界用 integration;不要把 E2E 当成所有用户可见结果的默认层级。
151
151
  >
152
152
  > ✅ CAS 409:contract 验响应、component 验表单保留、integration 用真实存储验并发;聚合补零与关系绑定同样优先采用相应低层组合。Cookie 隔离和 SSE 恢复保留必要的跨边界关键验证。❌ 设固定 E2E 数量或比例;比例和任务耗时仅作诊断,零 E2E 的完整覆盖合法。
153
153
 
@@ -181,14 +181,14 @@
181
181
 
182
182
  #### 2.5.4 验证环境假设 [必填]
183
183
 
184
- > 验收场景依赖的容量、硬件、外部依赖与 profile 参数必须在设计阶段写清;执行期缺失时应由 runner 返回 `env_blocked` 并列出 owner,不得伪装成产品失败。
184
+ > 验收场景依赖的容量、硬件、外部依赖与 profile 参数必须在设计阶段写清;执行时缺少环境应由人工验收记录缺失项与 owner,不得伪装成产品失败。
185
185
 
186
186
  | 维度 | 假设 | 验证方式 / 参数 | 不满足时 |
187
187
  |------|------|----------------|---------|
188
- | 容量 | (数据量、并发数、场景规模,如 119 任务 / 62 E2E;无实测填"待定") | 基准 fixture / 压测命令 | 标记 `incomplete` 或拆分批次 |
189
- | 硬件 | (CPU / 内存 / 磁盘 / 网络规格,如 8C16G) | preflight 检查 | 返回 `env_blocked` 并列出缺失项 |
190
- | 依赖 | (数据库 / 浏览器 / API / CI runner / 端口 / 测试账号) | `preflight` 命令(health check、端口探测) | 返回 `env_blocked` 并列出 owner |
191
- | profile 参数 | (smoke / changed / full 选择、deadline、并行度、重试与超时) | `verify --layers ... --profile ... --deadline ...` | 显式报 `incomplete`,不自动降级 |
188
+ | 容量 | (数据量、并发数、场景规模;无实测填"待定") | 基准 fixture / 压测命令 | 记录缺失项与 owner,拆分批次 |
189
+ | 硬件 | (CPU / 内存 / 磁盘 / 网络规格,如 8C16G) | 人工检查 | 记录缺失项与 owner |
190
+ | 依赖 | (数据库 / 浏览器 / API / CI runner / 端口 / 测试账号) | 人工检查 | 记录缺失项与 owner |
191
+ | 测试预算 | (Task tests 的 unit/integration 范围;E2E 与全量回归留在 CI) | 人工核对任务文档 | 记录未覆盖风险与 owner |
192
192
 
193
193
  ---
194
194
 
@@ -473,25 +473,23 @@ flowchart TD
473
473
 
474
474
  ## 6. 需求追溯矩阵(生成式)
475
475
 
476
- > 本节由 `cf_traceability.py --design <design.md> --manifest <.acceptance-manifest.json>` 从 §2.5 与 manifest **生成,不手工维护**;不要直接编辑下面的表格,提交前用生成结果替换。
477
- >
478
- > 生成矩阵会列出每个场景的优先级、测试层级、执行方式、环境、输入、追溯 check、执行命令、owner 与状态;没有 check 且未显式标为 `aspirational` 的场景会让生成命令返回 block。
476
+ > 本节由设计者手工维护,用于把 PRD 用户故事、功能/接口 ID 与场景 ID 对齐。场景只是人工验收参照;`cf-task:plan` 将相关场景映射到任务段落。
479
477
 
480
- | 用户故事 | 功能ID | 接口ID | 测试用例ID | 测试层级 | 执行方式 | 追溯 check | 状态 |
481
- |---------|--------|--------|-----------|---------|---------|-----------|------|
482
- | US-01 | FEAT-01 | API-01 | S-01 | E2E | auto | CHK-xxxx | 待实现 |
478
+ | 用户故事 | 功能ID | 接口ID | 场景ID | 测试层级 | 执行方式 | 负责 TASK | 状态 |
479
+ |---------|--------|--------|--------|---------|---------|----------|------|
480
+ | US-01 | FEAT-01 | API-01 | S-01 | e2e | manual | TASK-001 | 待实现 |
483
481
 
484
- > 用户故事一列引用 PRD 中的 US-XX(无 PRD 时填"需求描述");测试用例 ID 列引用 §2.5.2 的场景 ID(S-/E-/B-),不要另造编号。RULE 与高影响 RISK 必须映射到场景;无法自动化时写明手动验证原因,不得留空。
482
+ > 用户故事一列引用 PRD 中的 US-XX(无 PRD 时填"需求描述");场景 ID 引用 `<需求>.scenarios.md` 的 S-/E-/B-,不要另造编号。RULE 与高影响 RISK 应映射到场景;无法自动化时写明人工验证原因,不得留空。
485
483
 
486
484
  ---
487
485
 
488
486
  ## Spec Compliance Matrix
489
487
 
490
- > 从需求目录 `spec-context.yml` 继承并逐 Rule 回填。required Rule 必须有具体设计落点和 verifier/验收场景;N/A 只接受逐项用户确认。
488
+ > 从当前适用 Spec 与任务 `Spec-Refs` 读取 Rule,并逐条回填设计影响、设计落点与人工验收场景。
491
489
 
492
- | Spec/Rule | enforcement | 设计影响 | 设计落点 | 验证场景 | 状态/N/A 理由 |
493
- |-----------|-------------|---------|---------|---------|----------------|
494
- | `{spec-id}#RULE-{domain}-001` | required / advisory | <对方案的影响> | §<heading> / <item-id> | S-/E-/B- + verifier | applied / confirmed N/A |
490
+ | Spec/Rule | 设计影响 | 设计落点 | 验收场景 | 状态/N/A 理由 |
491
+ |-----------|---------|---------|---------|----------------|
492
+ | `{spec-id}#RULE-{domain}-001` | <对方案的影响> | §<heading> / <item-id> | S-/E-/B- | applied / confirmed N/A |
495
493
 
496
494
  ---
497
495
 
@@ -1,6 +1,6 @@
1
1
  # {模块名称} 模块需求与设计简报
2
2
 
3
- > **生成约定**:产出文档的 frontmatter 声明 `design_template: lite`。浏览器 E2E 必须有匹配的 env/components/boundary,expected 逐条用 expected_refs 关联步骤或断言;deferred 补原因、owner 与 target_phase。API/CLI/后台全链路用 system,容量用 capacity;非 E2E 不写 why_e2e。完成后运行 scenarios parse --quality 与 design lint;计划再校验真实测试登记/收集。完整示例见工具文档 `docs/acceptance-contract.md`。
3
+ > **生成约定**:产出文档的 frontmatter 声明 `design_template: lite`。验收场景引用 `<需求>.scenarios.md` 的 S-/E-/B- 场景 ID;场景是人工验收参照,不生成集中验收清单或结果登记,不阻断 start/finish/archive。设计需要给出真实可执行的相关测试建议,由任务文档声明。
4
4
 
5
5
  > **文档编号**: MOD-{模块代号}-{版本号}
6
6
  > **文档版本**: v1.0
@@ -113,9 +113,9 @@
113
113
 
114
114
  #### 2.4.1 功能验收场景
115
115
 
116
- > **场景唯一源**:验收场景定义在 `<需求>.scenarios.md`。设计文档只引用全局场景 ID,并说明设计影响,不复制完整场景字段;优先级、执行方式、环境、输入等执行元数据以 scenarios 源为准;没有可执行命令的场景必须显式标为 aspirational;plan 阶段投影到 manifest check;测试层级(unit / component / contract / integration / system / capacity / E2E / manual)与关键真实边界定义在 scenarios 源中。
116
+ > **场景唯一源**:验收场景定义在 `<需求>.scenarios.md`。设计文档只引用全局场景 ID,并说明设计影响,不复制完整场景字段;场景只记录人工验收所需的 step / expected / boundary / owner;没有可执行命令的场景标为 manual。
117
117
  >
118
- > **E2E 精度**:E2E 只用于 P0/P1 关键用户旅程,且必须有 `why_e2e`、非 smoke 的 `trigger_paths` 和可观察结果。UI 布局/文案/字段顺序用 component,DTO/错误码用 contract,鉴权/事务/模块边界用 integration。
118
+ > **E2E 精度**:E2E 只用于关键用户旅程,并写清真实边界与可观察结果。UI 布局/文案/字段顺序用 component,DTO/错误码用 contract,鉴权/事务/模块边界用 integration。
119
119
 
120
120
  | 场景ID | 设计影响 / 备注 |
121
121
  |--------|----------------|
@@ -132,14 +132,14 @@
132
132
 
133
133
  #### 2.4.3 验证环境假设 [必填]
134
134
 
135
- > 验收场景依赖的容量、硬件、外部依赖与 profile 参数必须在设计阶段写清;执行期缺失时应返回 `env_blocked` 并列出 owner,不得伪装成产品失败。
135
+ > 验收场景依赖的容量、硬件、外部依赖与 profile 参数必须在设计阶段写清;执行时缺少环境应由人工验收记录缺失项与 owner,不得伪装成产品失败。
136
136
 
137
137
  | 维度 | 假设 | 验证方式 / 参数 | 不满足时 |
138
138
  |------|------|----------------|---------|
139
- | 容量 | (数据量、并发数、场景规模;无实测填"待定") | 基准 fixture / 压测命令 | 标记 `incomplete` 或拆分批次 |
140
- | 硬件 | (CPU / 内存 / 磁盘 / 网络规格) | preflight 检查 | 返回 `env_blocked` |
141
- | 依赖 | (数据库 / 浏览器 / API / 端口 / 测试账号) | `preflight` 命令 | 返回 `env_blocked` 并列出缺失项 |
142
- | profile 参数 | (smoke / changed / full、deadline、并行度、重试) | `verify --profile ... --deadline ...` | 显式报 `incomplete`,不自动降级 |
139
+ | 容量 | (数据量、并发数、场景规模;无实测填"待定") | 基准 fixture / 压测命令 | 记录缺失项与 owner,拆分批次 |
140
+ | 硬件 | (CPU / 内存 / 磁盘 / 网络规格) | 人工检查 | 记录缺失项与 owner |
141
+ | 依赖 | (数据库 / 浏览器 / API / 端口 / 测试账号) | 人工检查 | 记录缺失项与 owner |
142
+ | 测试预算 | (Task tests 的 unit/integration 范围;E2E 与全量回归留在 CI) | 人工核对任务文档 | 记录未覆盖风险与 owner |
143
143
 
144
144
  ---
145
145
 
@@ -294,11 +294,11 @@ flowchart TD
294
294
 
295
295
  ## Spec Compliance Matrix
296
296
 
297
- > 从需求目录 `spec-context.yml` 继承并逐 Rule 回填。required Rule 必须有具体设计落点和 verifier/验收场景;N/A 只接受逐项用户确认。
297
+ > 从当前适用 Spec 与任务 `Spec-Refs` 读取 Rule,并逐条回填设计影响、设计落点与人工验收场景。
298
298
 
299
- | Spec/Rule | enforcement | 设计影响 | 设计落点 | 验证场景 | 状态/N/A 理由 |
300
- |-----------|-------------|---------|---------|---------|----------------|
301
- | `{spec-id}#RULE-{domain}-001` | required / advisory | <对方案的影响> | §<heading> / <item-id> | S-/E-/B- + verifier | applied / confirmed N/A |
299
+ | Spec/Rule | 设计影响 | 设计落点 | 验收场景 | 状态/N/A 理由 |
300
+ |-----------|---------|---------|---------|----------------|
301
+ | `{spec-id}#RULE-{domain}-001` | <对方案的影响> | §<heading> / <item-id> | S-/E-/B- | applied / confirmed N/A |
302
302
 
303
303
  ---
304
304
 
@@ -175,7 +175,7 @@
175
175
 
176
176
  ## 8. Existing Spec Constraints
177
177
 
178
- > 仅列出 `stages` 含 `prd` 且已绑定到 `spec-context.yml` 的 Rule。required Rule 必须明确落到范围、FEAT 验收或 NFR;不适用必须逐条记录用户确认,不能由 Agent 自行填写 N/A。
178
+ > 仅列出当前适用 Spec 中与需求范围相关的 Rule。Rule 必须明确落到范围、FEAT 验收或 NFR;不适用必须逐条记录用户确认,不能由 Agent 自行填写 N/A。
179
179
 
180
180
  | Spec/Rule | 约束 | 对范围/验收的影响 | 状态 |
181
181
  |-----------|------|------------------|------|
@@ -0,0 +1,48 @@
1
+ # 项目规范(starter)
2
+
3
+ > 这是项目自己的规范说明,位于 `.code-flow/templates/project-guidelines.md`。
4
+ > 把它复制/改写为项目内容,写入 `CLAUDE.md` / `AGENTS.md` 的 code-flow 托管块之外。
5
+ > 不要修改 `<!-- code-flow:v1 start --> ... <!-- code-flow:v1 end -->` 托管块,也不要覆盖用户已有内容。
6
+
7
+ ## 项目身份
8
+
9
+ - 项目:
10
+ - 主要语言 / 运行时:
11
+ - 包管理器 / 版本约束:
12
+ - 代码风格 / 格式化:
13
+
14
+ ## 架构与边界
15
+
16
+ - 入口与核心模块:
17
+ - 数据与持久化:
18
+ - 外部服务 / 依赖:
19
+ - 不应跨越的模块边界:
20
+
21
+ ## 开发命令
22
+
23
+ - 安装:
24
+ - 单元 / 集成测试:
25
+ - 完整回归 / E2E(CI):
26
+ - 构建 / 发布:
27
+
28
+ ## 规范来源(模型必须阅读)
29
+
30
+ - `.code-flow/specs/` 是本项目的规范事实源;实现前读取当前 Task 的 `Spec-Refs`。
31
+ - `.code-flow/config.json` 的 `always` / `paths` 决定哪些 Spec 会被注入;新增 Spec 后同步更新引用。
32
+ - Task 文档的 `### Tests` 声明相关测试;`task finish` 执行声明测试,通过后才写 done。
33
+ - 设计文档(PRD/design/scenarios)是项目资产,不是 prompt 输入;`workflow: hook`(默认)不要求它们,`workflow: full` 或复杂需求才使用。
34
+
35
+ ## Spec 编写约定
36
+
37
+ - 路径身份:`.code-flow/specs/<path>.md`,引用时不带 `.md`;不要用标签或相似度匹配。
38
+ - JSON frontmatter:`{"description":"...","next_rule":<当前最大数字 ID + 1>}`。
39
+ - 在 `## Rules` 下使用稳定的 `RULE-NNN` 或语义 ID;每条规则写清触发条件、可验证的 ✅/❌ 示例。
40
+ - 共享基础规则放 `always`;领域规则放 `paths` 的文件 glob;Task 通过 `Spec-Refs` 引用。
41
+ - 数字 ID 从 `next_rule` 单调分配,删除后不复用;保留 `## Applied Deltas` 记录,保证重试安全。
42
+ - 规范要可执行:避免“注意质量”这类口号,写成可检查的约束和边界。
43
+
44
+ ## 完成标准
45
+
46
+ - Task 的 tests 只声明有意义的 unit/integration;完整回归 / E2E 留在 CI。
47
+ - 测试失败、超时或中断时保持 in-progress,不写 done。
48
+ - 归档只应用 Spec Delta 并移动需求,不执行测试。
@@ -0,0 +1,67 @@
1
+ ---
2
+ id: scenarios-template
3
+ description: Manual acceptance scenarios referenced by designs and tasks
4
+ ---
5
+
6
+ # {需求名} 验收场景
7
+
8
+ > 本文件是设计、计划与人工验收共同引用的场景清单。场景不生成集中验收清单、不登记执行结果,也不阻断 `task finish` 或 `task archive`。`cf-task:plan` 只把场景 ID 写入 Task 的 `Scenarios` 字段。
9
+
10
+ ```yaml
11
+ schema: 1
12
+ requirement: {需求名}
13
+ scenarios:
14
+ - id: S-01
15
+ title: 正常完成主流程
16
+ level: manual
17
+ boundary: 真实入口与真实依赖
18
+ preconditions:
19
+ - 已准备可复现的测试数据
20
+ steps:
21
+ - 执行用户会执行的主要操作
22
+ expected:
23
+ - 出现可观察且可断言的预期结果
24
+ exec: manual
25
+ owner: TASK-001
26
+ - id: E-01
27
+ title: 关键依赖失败时明确报错
28
+ level: integration
29
+ boundary: 外部服务超时或返回错误
30
+ preconditions: []
31
+ steps:
32
+ - 触发依赖失败
33
+ expected:
34
+ - 返回明确错误,不产生部分写入
35
+ exec: manual
36
+ owner: TASK-001
37
+ - id: B-01
38
+ title: 边界输入保持稳定
39
+ level: manual
40
+ boundary: 空值、最大长度或并发边界
41
+ preconditions: []
42
+ steps:
43
+ - 输入边界值
44
+ expected:
45
+ - 行为符合设计约束,错误信息可理解
46
+ exec: manual
47
+ owner: TASK-002
48
+ ```
49
+
50
+ 字段说明:
51
+
52
+ | 字段 | 说明 |
53
+ |---|---|
54
+ | id | S-/E-/B- 编号,需求内唯一 |
55
+ | title | 场景标题 |
56
+ | level | unit / component / contract / integration / system / e2e / manual |
57
+ | boundary | 关键真实边界;manual 场景写清人工步骤 |
58
+ | preconditions / steps / expected | 人工验收可复现的输入与可观察结果 |
59
+ | exec | manual / local / ci;e2e 可写 `ci:<job>` |
60
+ | owner | 负责 TASK 或人工验收人 |
61
+
62
+ 约束:
63
+
64
+ - 场景是人工执行标准和追溯资产,不是测试清单或执行证明。
65
+ - 不创建集中验收清单、check 注册表或证据缓存。
66
+ - `tests` 只声明快速 unit/integration;E2E 和全量回归留在 CI。
67
+ - `finish` 只跑 Task 的 `tests`,不解析本文件;`archive` 也不解析。
@@ -0,0 +1,56 @@
1
+ ---
2
+ {"version":1,"requirement":"{requirement}"}
3
+ ---
4
+ # Tasks: {requirement}
5
+
6
+ <!--
7
+ 一个需求一份任务文档。每个 TASK 使用一个 `## TASK-NNN: 标题` 段。
8
+ 不要把 TASK 拆成单独文件。
9
+ -->
10
+
11
+ ## TASK-001: {title}
12
+
13
+ - **Status**: draft
14
+ - **Depends**:
15
+ - **Source**: {design}.design.md#{section}
16
+ - **Scenarios**: {S-01, E-01}
17
+ - **Spec-Refs**: {spec/path}
18
+ - **Paths**: {src/**, test/**}
19
+ - **E2E**: {ci:e2e or empty}
20
+ - **Skip-Tests**:
21
+ - **Skip-Reason**:
22
+
23
+ ### Tests
24
+
25
+ ```json
26
+ [
27
+ {
28
+ "id": "unit",
29
+ "argv": ["node", "--test", "test/example.test.js"],
30
+ "timeout": 120,
31
+ "parallel": true
32
+ }
33
+ ]
34
+ ```
35
+
36
+ ### Description
37
+
38
+ {实现目标}
39
+
40
+ ### Checklist
41
+
42
+ - [ ] {可验证的步骤}
43
+
44
+ ### Spec Delta
45
+
46
+ ```json
47
+ []
48
+ ```
49
+
50
+ ### Log
51
+
52
+ - [{date}] created
53
+
54
+ ### Verification
55
+
56
+ - 尚未执行