@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.
- package/README.md +73 -152
- package/bin/code-flow.js +12 -0
- package/docs/README.md +19 -0
- package/docs/USAGE.md +156 -1417
- 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 +18 -21
- 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 +12 -12
- package/{src/core/code-flow/specs/shared/design → templates/workflow}/design-full.md +17 -19
- package/{src/core/code-flow/specs/shared/design → templates/workflow}/design-lite.md +12 -12
- 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/acceptance-contract.md +0 -217
- package/docs/ci/acceptance-evidence.md +0 -77
- package/docs/migrations/runtime-0.7.0.md +0 -41
- package/docs/migrations/runtime-0.8.0.md +0 -154
- package/docs/migrations/runtime-0.9.0.md +0 -40
- package/docs/migrations/spec-workflow-0.6.0.md +0 -42
- package/docs/spec-injection-hardening.md +0 -54
- package/docs/spec-injection-performance.json +0 -73
- package/docs/spec-optimization.md +0 -12
- package/src/adapters/claude/CLAUDE.md +0 -45
- package/src/adapters/claude/commands/cf-init.md +0 -262
- package/src/adapters/claude/commands/cf-learn.md +0 -291
- package/src/adapters/claude/commands/cf-spec.md +0 -87
- package/src/adapters/claude/commands/cf-stats.md +0 -96
- package/src/adapters/claude/commands/cf-sync.md +0 -39
- package/src/adapters/claude/commands/cf-task/align.md +0 -331
- package/src/adapters/claude/commands/cf-task/archive.md +0 -155
- package/src/adapters/claude/commands/cf-task/block.md +0 -49
- package/src/adapters/claude/commands/cf-task/graph.md +0 -92
- package/src/adapters/claude/commands/cf-task/note.md +0 -248
- package/src/adapters/claude/commands/cf-task/plan.md +0 -477
- package/src/adapters/claude/commands/cf-task/prd.md +0 -173
- package/src/adapters/claude/commands/cf-task/start.md +0 -317
- package/src/adapters/claude/commands/cf-task/status.md +0 -71
- package/src/adapters/claude/commands/cf-task/verify-e2e.md +0 -148
- package/src/adapters/claude/commands/cf-validate.md +0 -100
- 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 -54
- 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 -88
- package/src/adapters/codex/skills/cf-stats/SKILL.md +0 -97
- package/src/adapters/codex/skills/cf-sync/SKILL.md +0 -45
- package/src/adapters/codex/skills/cf-task-align/SKILL.md +0 -332
- package/src/adapters/codex/skills/cf-task-archive/SKILL.md +0 -156
- package/src/adapters/codex/skills/cf-task-block/SKILL.md +0 -50
- package/src/adapters/codex/skills/cf-task-graph/SKILL.md +0 -93
- package/src/adapters/codex/skills/cf-task-note/SKILL.md +0 -245
- package/src/adapters/codex/skills/cf-task-plan/SKILL.md +0 -478
- package/src/adapters/codex/skills/cf-task-prd/SKILL.md +0 -174
- package/src/adapters/codex/skills/cf-task-start/SKILL.md +0 -318
- package/src/adapters/codex/skills/cf-task-status/SKILL.md +0 -72
- package/src/adapters/codex/skills/cf-task-verify-e2e/SKILL.md +0 -145
- package/src/adapters/codex/skills/cf-validate/SKILL.md +0 -102
- package/src/adapters/commands.json +0 -115
- package/src/adapters/costrict/CLAUDE.md +0 -45
- package/src/adapters/costrict/commands/cf-init.md +0 -262
- package/src/adapters/costrict/commands/cf-learn.md +0 -291
- package/src/adapters/costrict/commands/cf-spec.md +0 -87
- package/src/adapters/costrict/commands/cf-stats.md +0 -96
- package/src/adapters/costrict/commands/cf-sync.md +0 -39
- package/src/adapters/costrict/commands/cf-task/align.md +0 -331
- package/src/adapters/costrict/commands/cf-task/archive.md +0 -155
- package/src/adapters/costrict/commands/cf-task/block.md +0 -49
- package/src/adapters/costrict/commands/cf-task/graph.md +0 -92
- package/src/adapters/costrict/commands/cf-task/note.md +0 -248
- package/src/adapters/costrict/commands/cf-task/plan.md +0 -477
- package/src/adapters/costrict/commands/cf-task/prd.md +0 -173
- package/src/adapters/costrict/commands/cf-task/start.md +0 -317
- package/src/adapters/costrict/commands/cf-task/status.md +0 -71
- package/src/adapters/costrict/commands/cf-task/verify-e2e.md +0 -148
- package/src/adapters/costrict/commands/cf-validate.md +0 -100
- package/src/adapters/costrict/settings.local.json +0 -50
- package/src/adapters/install-plan.json +0 -100
- 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 -91
- package/src/adapters/opencode/commands/cf-stats.md +0 -100
- package/src/adapters/opencode/commands/cf-sync.md +0 -44
- package/src/adapters/opencode/commands/cf-task/align.md +0 -331
- package/src/adapters/opencode/commands/cf-task/archive.md +0 -160
- package/src/adapters/opencode/commands/cf-task/block.md +0 -54
- package/src/adapters/opencode/commands/cf-task/graph.md +0 -97
- package/src/adapters/opencode/commands/cf-task/note.md +0 -253
- package/src/adapters/opencode/commands/cf-task/plan.md +0 -477
- package/src/adapters/opencode/commands/cf-task/prd.md +0 -178
- package/src/adapters/opencode/commands/cf-task/start.md +0 -317
- package/src/adapters/opencode/commands/cf-task/status.md +0 -76
- package/src/adapters/opencode/commands/cf-task/verify-e2e.md +0 -148
- package/src/adapters/opencode/commands/cf-validate.md +0 -105
- package/src/adapters/opencode/opencode.json +0 -3
- package/src/adapters/opencode/plugins/code-flow/index.js +0 -162
- package/src/adapters/opencode/plugins/code-flow/package.json +0 -6
- package/src/adapters/platform-bindings.json +0 -370
- package/src/cli.js +0 -1076
- package/src/core/code-flow/config.yml +0 -161
- package/src/core/code-flow/runtime-commands.json +0 -259
- package/src/core/code-flow/scripts/cf_acceptance_manifest.py +0 -10
- package/src/core/code-flow/scripts/cf_acceptance_runner.py +0 -10
- package/src/core/code-flow/scripts/cf_audit.py +0 -10
- package/src/core/code-flow/scripts/cf_codex_hook.py +0 -10
- package/src/core/code-flow/scripts/cf_design_lint.py +0 -10
- package/src/core/code-flow/scripts/cf_evidence_import.py +0 -10
- package/src/core/code-flow/scripts/cf_feedback.py +0 -10
- package/src/core/code-flow/scripts/cf_opencode_event.py +0 -10
- package/src/core/code-flow/scripts/cf_post_hook.py +0 -11
- package/src/core/code-flow/scripts/cf_pre_tool_hook.py +0 -11
- package/src/core/code-flow/scripts/cf_scenarios.py +0 -10
- package/src/core/code-flow/scripts/cf_spec_context.py +0 -10
- package/src/core/code-flow/scripts/cf_spec_gate.py +0 -10
- package/src/core/code-flow/scripts/cf_spec_session.py +0 -10
- package/src/core/code-flow/scripts/cf_stats.py +0 -10
- package/src/core/code-flow/scripts/cf_stop_hook.py +0 -11
- package/src/core/code-flow/scripts/cf_sync.py +0 -10
- package/src/core/code-flow/scripts/cf_task_index.py +0 -10
- package/src/core/code-flow/scripts/cf_task_parallel.py +0 -10
- package/src/core/code-flow/scripts/cf_task_workflow.py +0 -10
- package/src/core/code-flow/scripts/cf_user_prompt_hook.py +0 -11
- package/src/core/code-flow/scripts/cf_validation.py +0 -10
- package/src/core/code-flow/scripts/codeflow/__init__.py +0 -0
- package/src/core/code-flow/scripts/codeflow/acceptance/__init__.py +0 -0
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_evidence.py +0 -347
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_manifest_core.py +0 -660
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_plan.py +0 -202
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_registration.py +0 -60
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_risk.py +0 -73
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_schema.py +0 -282
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_acceptance_selection.py +0 -266
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_check_inputs.py +0 -172
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_check_registration.py +0 -326
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_checks.py +0 -333
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_plan_quality.py +0 -197
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_scenario_quality.py +0 -174
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_scenario_source.py +0 -300
- package/src/core/code-flow/scripts/codeflow/acceptance/cf_traceability.py +0 -502
- package/src/core/code-flow/scripts/codeflow/cli/__init__.py +0 -0
- package/src/core/code-flow/scripts/codeflow/cli/cf_acceptance_manifest.py +0 -347
- package/src/core/code-flow/scripts/codeflow/cli/cf_acceptance_runner.py +0 -1490
- package/src/core/code-flow/scripts/codeflow/cli/cf_audit.py +0 -533
- package/src/core/code-flow/scripts/codeflow/cli/cf_design_lint.py +0 -172
- package/src/core/code-flow/scripts/codeflow/cli/cf_evidence_import.py +0 -607
- package/src/core/code-flow/scripts/codeflow/cli/cf_feedback.py +0 -53
- package/src/core/code-flow/scripts/codeflow/cli/cf_scenarios.py +0 -58
- package/src/core/code-flow/scripts/codeflow/cli/cf_spec_context.py +0 -1175
- package/src/core/code-flow/scripts/codeflow/cli/cf_spec_gate.py +0 -60
- package/src/core/code-flow/scripts/codeflow/cli/cf_spec_session.py +0 -46
- package/src/core/code-flow/scripts/codeflow/cli/cf_stats.py +0 -540
- package/src/core/code-flow/scripts/codeflow/cli/cf_sync.py +0 -144
- package/src/core/code-flow/scripts/codeflow/cli/cf_task_index.py +0 -177
- package/src/core/code-flow/scripts/codeflow/cli/cf_task_parallel.py +0 -1142
- package/src/core/code-flow/scripts/codeflow/cli/cf_task_workflow.py +0 -742
- package/src/core/code-flow/scripts/codeflow/cli/cf_validation.py +0 -31
- package/src/core/code-flow/scripts/codeflow/core/__init__.py +0 -0
- package/src/core/code-flow/scripts/codeflow/core/cf_context_cache.py +0 -67
- package/src/core/code-flow/scripts/codeflow/core/cf_core.py +0 -609
- package/src/core/code-flow/scripts/codeflow/core/cf_exec_base.py +0 -325
- package/src/core/code-flow/scripts/codeflow/core/cf_fs.py +0 -57
- package/src/core/code-flow/scripts/codeflow/core/cf_git.py +0 -92
- package/src/core/code-flow/scripts/codeflow/core/cf_log.py +0 -160
- package/src/core/code-flow/scripts/codeflow/core/cf_markdown.py +0 -77
- package/src/core/code-flow/scripts/codeflow/core/cf_native_paths.py +0 -26
- package/src/core/code-flow/scripts/codeflow/core/cf_patch.py +0 -33
- package/src/core/code-flow/scripts/codeflow/core/cf_runtime_install.py +0 -32
- package/src/core/code-flow/scripts/codeflow/core/cf_session_state.py +0 -37
- package/src/core/code-flow/scripts/codeflow/core/cf_stop_guard.py +0 -53
- package/src/core/code-flow/scripts/codeflow/core/cf_task_state.py +0 -9
- package/src/core/code-flow/scripts/codeflow/core/cf_validators.py +0 -408
- package/src/core/code-flow/scripts/codeflow/core/cf_worktree_env.py +0 -253
- package/src/core/code-flow/scripts/codeflow/evidence/__init__.py +0 -0
- package/src/core/code-flow/scripts/codeflow/evidence/cf_evidence_store.py +0 -527
- package/src/core/code-flow/scripts/codeflow/hooks/__init__.py +0 -0
- package/src/core/code-flow/scripts/codeflow/hooks/cf_codex_hook.py +0 -95
- package/src/core/code-flow/scripts/codeflow/hooks/cf_opencode_event.py +0 -98
- package/src/core/code-flow/scripts/codeflow/hooks/cf_post_hook.py +0 -30
- package/src/core/code-flow/scripts/codeflow/hooks/cf_pre_tool_hook.py +0 -41
- package/src/core/code-flow/scripts/codeflow/hooks/cf_stop_hook.py +0 -292
- package/src/core/code-flow/scripts/codeflow/hooks/cf_user_prompt_hook.py +0 -161
- package/src/core/code-flow/scripts/codeflow/spec/__init__.py +0 -0
- package/src/core/code-flow/scripts/codeflow/spec/cf_active_task.py +0 -412
- package/src/core/code-flow/scripts/codeflow/spec/cf_context_refresh.py +0 -301
- package/src/core/code-flow/scripts/codeflow/spec/cf_edit_service.py +0 -149
- package/src/core/code-flow/scripts/codeflow/spec/cf_injection.py +0 -111
- package/src/core/code-flow/scripts/codeflow/spec/cf_rule_readiness.py +0 -114
- package/src/core/code-flow/scripts/codeflow/spec/cf_scan.py +0 -367
- package/src/core/code-flow/scripts/codeflow/spec/cf_spec_budget.py +0 -55
- package/src/core/code-flow/scripts/codeflow/spec/cf_spec_context_model.py +0 -477
- package/src/core/code-flow/scripts/codeflow/spec/cf_spec_impact.py +0 -119
- package/src/core/code-flow/scripts/codeflow/spec/cf_spec_metadata.py +0 -387
- package/src/core/code-flow/scripts/codeflow/spec/cf_spec_migrate.py +0 -529
- package/src/core/code-flow/scripts/codeflow/spec/cf_spec_optimize.py +0 -193
- package/src/core/code-flow/scripts/codeflow/spec/cf_spec_optimize_apply.py +0 -187
- package/src/core/code-flow/scripts/codeflow/spec/cf_spec_resolver.py +0 -369
- package/src/core/code-flow/scripts/codeflow/spec/cf_spec_router.py +0 -304
- package/src/core/code-flow/scripts/codeflow/spec/cf_spec_verify.py +0 -687
- package/src/core/code-flow/scripts/codeflow/spec/cf_stage_gate.py +0 -330
- package/src/core/code-flow/scripts/codeflow/spec/cf_task_projection.py +0 -83
- package/src/core/code-flow/scripts/codeflow/spec/cf_workflow_service.py +0 -755
- package/src/core/code-flow/scripts/codeflow/spec/cf_workflow_transaction.py +0 -110
- package/src/core/code-flow/scripts/codeflow/task/__init__.py +0 -0
- package/src/core/code-flow/scripts/codeflow/task/cf_requirement_verification.py +0 -867
- package/src/core/code-flow/scripts/codeflow/task/cf_task_doc.py +0 -178
- package/src/core/code-flow/scripts/codeflow/task/cf_task_merge.py +0 -635
- package/src/core/code-flow/scripts/codeflow/task/cf_task_plan.py +0 -251
- package/src/core/code-flow/scripts/codeflow/task/cf_task_runtime.py +0 -570
- package/src/core/code-flow/scripts/codeflow/task/cf_validation_service.py +0 -73
- package/src/core/code-flow/scripts/runtime-resources.json +0 -29
- 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/specs/shared/scenarios-template.md +0 -55
- package/src/core/code-flow/tasks/.gitkeep +0 -0
- package/src/core/code-flow/validation.yml +0 -59
- package/src/migrate/runtime.js +0 -213
- package/src/migrate/spec-workflow.js +0 -253
- 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
|
|
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
|
|
96
|
+
> **场景唯一源**:验收场景定义在 `<需求>.scenarios.md`。本节只保留场景引用和前端设计影响,不复制完整场景表;场景只记录人工验收所需的 step / expected / boundary / owner;没有可执行命令的场景标为 manual。
|
|
97
97
|
>
|
|
98
|
-
> **前端 E2E 精度**:表单交互、布局、文案、字段顺序、空态和错误提示用 component + mock API;E2E 只保留真实浏览器 + 真实后端 + 鉴权/DB
|
|
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
|
|
107
|
+
> 验收场景依赖的容量、硬件、外部依赖与 profile 参数必须在设计阶段写清;执行时缺少环境应由人工验收记录缺失项与 owner,不得伪装成产品失败。
|
|
108
108
|
|
|
109
109
|
| 维度 | 假设 | 验证方式 / 参数 | 不满足时 |
|
|
110
110
|
|------|------|----------------|---------|
|
|
111
|
-
| 容量 | (页面/组件规模、并发用户、浏览器矩阵;无实测填"待定") | Playwright projects / 基准 fixture |
|
|
112
|
-
| 硬件 | (CI runner / 设备 / 视口规格) |
|
|
113
|
-
| 依赖 | (后端 API / 浏览器版本 / 测试账号 / 字体与静态资源) |
|
|
114
|
-
|
|
|
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
|
-
>
|
|
241
|
+
> 从当前适用 Spec 与任务 `Spec-Refs` 读取 Rule,并逐条回填设计影响、设计落点与人工验收场景。
|
|
242
242
|
|
|
243
|
-
| Spec/Rule |
|
|
244
|
-
|
|
245
|
-
| `{spec-id}#RULE-{domain}-001` |
|
|
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
|
|
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
|
|
148
|
+
> **场景唯一源**:验收场景定义在 `<需求>.scenarios.md`。设计文档只引用全局场景 ID,并说明设计影响,不复制完整场景字段;场景只记录人工验收所需的 step / expected / boundary / owner;没有可执行命令的场景标为 manual。
|
|
149
149
|
>
|
|
150
|
-
> **E2E 精度**: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
|
|
184
|
+
> 验收场景依赖的容量、硬件、外部依赖与 profile 参数必须在设计阶段写清;执行时缺少环境应由人工验收记录缺失项与 owner,不得伪装成产品失败。
|
|
185
185
|
|
|
186
186
|
| 维度 | 假设 | 验证方式 / 参数 | 不满足时 |
|
|
187
187
|
|------|------|----------------|---------|
|
|
188
|
-
| 容量 |
|
|
189
|
-
| 硬件 | (CPU / 内存 / 磁盘 / 网络规格,如 8C16G) |
|
|
190
|
-
| 依赖 | (数据库 / 浏览器 / API / CI runner / 端口 / 测试账号) |
|
|
191
|
-
|
|
|
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
|
-
>
|
|
477
|
-
>
|
|
478
|
-
> 生成矩阵会列出每个场景的优先级、测试层级、执行方式、环境、输入、追溯 check、执行命令、owner 与状态;没有 check 且未显式标为 `aspirational` 的场景会让生成命令返回 block。
|
|
476
|
+
> 本节由设计者手工维护,用于把 PRD 用户故事、功能/接口 ID 与场景 ID 对齐。场景只是人工验收参照;`cf-task:plan` 将相关场景映射到任务段落。
|
|
479
477
|
|
|
480
|
-
| 用户故事 | 功能ID | 接口ID |
|
|
481
|
-
|
|
482
|
-
| US-01 | FEAT-01 | API-01 | S-01 |
|
|
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 时填"需求描述"
|
|
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
|
-
>
|
|
488
|
+
> 从当前适用 Spec 与任务 `Spec-Refs` 读取 Rule,并逐条回填设计影响、设计落点与人工验收场景。
|
|
491
489
|
|
|
492
|
-
| Spec/Rule |
|
|
493
|
-
|
|
494
|
-
| `{spec-id}#RULE-{domain}-001` |
|
|
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
|
|
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
|
|
116
|
+
> **场景唯一源**:验收场景定义在 `<需求>.scenarios.md`。设计文档只引用全局场景 ID,并说明设计影响,不复制完整场景字段;场景只记录人工验收所需的 step / expected / boundary / owner;没有可执行命令的场景标为 manual。
|
|
117
117
|
>
|
|
118
|
-
> **E2E 精度**:E2E
|
|
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
|
|
135
|
+
> 验收场景依赖的容量、硬件、外部依赖与 profile 参数必须在设计阶段写清;执行时缺少环境应由人工验收记录缺失项与 owner,不得伪装成产品失败。
|
|
136
136
|
|
|
137
137
|
| 维度 | 假设 | 验证方式 / 参数 | 不满足时 |
|
|
138
138
|
|------|------|----------------|---------|
|
|
139
|
-
| 容量 | (数据量、并发数、场景规模;无实测填"待定") | 基准 fixture / 压测命令 |
|
|
140
|
-
| 硬件 | (CPU / 内存 / 磁盘 / 网络规格) |
|
|
141
|
-
| 依赖 | (数据库 / 浏览器 / API / 端口 / 测试账号) |
|
|
142
|
-
|
|
|
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
|
-
>
|
|
297
|
+
> 从当前适用 Spec 与任务 `Spec-Refs` 读取 Rule,并逐条回填设计影响、设计落点与人工验收场景。
|
|
298
298
|
|
|
299
|
-
| Spec/Rule |
|
|
300
|
-
|
|
301
|
-
| `{spec-id}#RULE-{domain}-001` |
|
|
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
|
-
>
|
|
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
|
+
- 尚未执行
|