@michaelxwb/code-flow 0.6.5 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +75 -110
- package/bin/code-flow.js +12 -0
- package/docs/README.md +19 -0
- package/docs/USAGE.md +268 -0
- package/docs/v1-design.md +1858 -0
- package/docs/v1-implementation.md +186 -0
- package/lib/adapters.js +126 -0
- package/lib/cli.js +258 -0
- package/lib/config.js +85 -0
- package/lib/doctor.js +283 -0
- package/lib/frontmatter.js +42 -0
- package/lib/fs.js +141 -0
- package/lib/glob.js +23 -0
- package/lib/hook.js +99 -0
- package/lib/init.js +132 -0
- package/lib/learn.js +170 -0
- package/lib/locks.js +52 -0
- package/lib/markdown.js +13 -0
- package/lib/process.js +116 -0
- package/lib/render.js +115 -0
- package/lib/repo.js +48 -0
- package/lib/runs.js +155 -0
- package/lib/session.js +40 -0
- package/lib/spec.js +80 -0
- package/lib/task.js +258 -0
- package/lib/taskdoc.js +308 -0
- package/lib/toml.js +140 -0
- package/lib/verify.js +168 -0
- package/lib/worktree.js +930 -0
- package/package.json +21 -9
- package/templates/adapters/opencode.mjs +65 -0
- package/templates/config.json +39 -0
- package/templates/instructions.md +13 -0
- package/templates/launcher/bridge.cjs +295 -0
- package/templates/launcher/hook.cmd +15 -0
- package/templates/launcher/hook.ps1 +10 -0
- package/templates/launcher/hook.sh +20 -0
- package/templates/skills/cf-check.md +19 -0
- package/templates/skills/cf-init.md +16 -0
- package/templates/skills/cf-spec.md +20 -0
- package/templates/skills/cf-task-align.md +19 -0
- package/templates/skills/cf-task-archive.md +20 -0
- package/templates/skills/cf-task-plan.md +31 -0
- package/templates/skills/cf-task-prd.md +14 -0
- package/templates/skills/cf-task-start.md +41 -0
- package/{src/core/code-flow/specs/shared/design → templates/workflow}/design-frontend.md +22 -19
- package/{src/core/code-flow/specs/shared/design → templates/workflow}/design-full.md +36 -28
- package/{src/core/code-flow/specs/shared/design → templates/workflow}/design-lite.md +27 -17
- package/{src/core/code-flow/specs/shared/prd-template.md → templates/workflow/prd.md} +1 -1
- package/templates/workflow/project-guidelines.md +48 -0
- package/templates/workflow/scenarios.md +67 -0
- package/templates/workflow/task.md +56 -0
- package/docs/migrations/spec-workflow-0.6.0.md +0 -42
- package/src/adapters/claude/CLAUDE.md +0 -45
- package/src/adapters/claude/commands/cf-init.md +0 -264
- package/src/adapters/claude/commands/cf-learn.md +0 -291
- package/src/adapters/claude/commands/cf-spec.md +0 -67
- package/src/adapters/claude/commands/cf-stats.md +0 -86
- package/src/adapters/claude/commands/cf-sync.md +0 -25
- package/src/adapters/claude/commands/cf-task/align.md +0 -309
- package/src/adapters/claude/commands/cf-task/archive.md +0 -161
- package/src/adapters/claude/commands/cf-task/block.md +0 -36
- package/src/adapters/claude/commands/cf-task/graph.md +0 -80
- package/src/adapters/claude/commands/cf-task/note.md +0 -236
- package/src/adapters/claude/commands/cf-task/plan.md +0 -363
- package/src/adapters/claude/commands/cf-task/prd.md +0 -162
- package/src/adapters/claude/commands/cf-task/start.md +0 -304
- package/src/adapters/claude/commands/cf-task/status.md +0 -59
- package/src/adapters/claude/commands/cf-task/verify-e2e.md +0 -115
- package/src/adapters/claude/commands/cf-validate.md +0 -75
- package/src/adapters/claude/settings.local.json +0 -50
- package/src/adapters/codex/AGENTS.md +0 -45
- package/src/adapters/codex/config.toml +0 -3
- package/src/adapters/codex/hooks.json +0 -50
- package/src/adapters/codex/skills/cf-init/SKILL.md +0 -273
- package/src/adapters/codex/skills/cf-learn/SKILL.md +0 -296
- package/src/adapters/codex/skills/cf-spec/SKILL.md +0 -60
- package/src/adapters/codex/skills/cf-stats/SKILL.md +0 -87
- package/src/adapters/codex/skills/cf-sync/SKILL.md +0 -30
- package/src/adapters/codex/skills/cf-task-align/SKILL.md +0 -310
- package/src/adapters/codex/skills/cf-task-archive/SKILL.md +0 -162
- package/src/adapters/codex/skills/cf-task-block/SKILL.md +0 -37
- package/src/adapters/codex/skills/cf-task-graph/SKILL.md +0 -81
- package/src/adapters/codex/skills/cf-task-note/SKILL.md +0 -233
- package/src/adapters/codex/skills/cf-task-plan/SKILL.md +0 -324
- package/src/adapters/codex/skills/cf-task-prd/SKILL.md +0 -163
- package/src/adapters/codex/skills/cf-task-start/SKILL.md +0 -305
- package/src/adapters/codex/skills/cf-task-status/SKILL.md +0 -60
- package/src/adapters/codex/skills/cf-task-verify-e2e/SKILL.md +0 -111
- package/src/adapters/codex/skills/cf-validate/SKILL.md +0 -76
- package/src/adapters/costrict/CLAUDE.md +0 -45
- package/src/adapters/costrict/commands/cf-init.md +0 -264
- package/src/adapters/costrict/commands/cf-learn.md +0 -291
- package/src/adapters/costrict/commands/cf-spec.md +0 -67
- package/src/adapters/costrict/commands/cf-stats.md +0 -86
- package/src/adapters/costrict/commands/cf-sync.md +0 -25
- package/src/adapters/costrict/commands/cf-task/align.md +0 -309
- package/src/adapters/costrict/commands/cf-task/archive.md +0 -161
- package/src/adapters/costrict/commands/cf-task/block.md +0 -36
- package/src/adapters/costrict/commands/cf-task/graph.md +0 -80
- package/src/adapters/costrict/commands/cf-task/note.md +0 -236
- package/src/adapters/costrict/commands/cf-task/plan.md +0 -363
- package/src/adapters/costrict/commands/cf-task/prd.md +0 -162
- package/src/adapters/costrict/commands/cf-task/start.md +0 -304
- package/src/adapters/costrict/commands/cf-task/status.md +0 -59
- package/src/adapters/costrict/commands/cf-task/verify-e2e.md +0 -115
- package/src/adapters/costrict/commands/cf-validate.md +0 -75
- package/src/adapters/costrict/settings.local.json +0 -50
- package/src/adapters/opencode/AGENTS.md +0 -45
- package/src/adapters/opencode/commands/cf-init.md +0 -281
- package/src/adapters/opencode/commands/cf-learn.md +0 -295
- package/src/adapters/opencode/commands/cf-spec.md +0 -59
- package/src/adapters/opencode/commands/cf-stats.md +0 -90
- package/src/adapters/opencode/commands/cf-sync.md +0 -29
- package/src/adapters/opencode/commands/cf-task/align.md +0 -314
- package/src/adapters/opencode/commands/cf-task/archive.md +0 -166
- package/src/adapters/opencode/commands/cf-task/block.md +0 -40
- package/src/adapters/opencode/commands/cf-task/graph.md +0 -84
- package/src/adapters/opencode/commands/cf-task/note.md +0 -240
- package/src/adapters/opencode/commands/cf-task/plan.md +0 -363
- package/src/adapters/opencode/commands/cf-task/prd.md +0 -167
- package/src/adapters/opencode/commands/cf-task/start.md +0 -309
- package/src/adapters/opencode/commands/cf-task/status.md +0 -63
- package/src/adapters/opencode/commands/cf-task/verify-e2e.md +0 -115
- package/src/adapters/opencode/commands/cf-validate.md +0 -79
- package/src/adapters/opencode/opencode.json +0 -3
- package/src/adapters/opencode/plugins/code-flow/index.js +0 -213
- package/src/adapters/opencode/plugins/code-flow/package.json +0 -6
- package/src/cli.js +0 -1023
- package/src/core/code-flow/config.yml +0 -158
- package/src/core/code-flow/scripts/cf_acceptance_evidence.py +0 -100
- package/src/core/code-flow/scripts/cf_acceptance_manifest.py +0 -294
- package/src/core/code-flow/scripts/cf_acceptance_runner.py +0 -192
- package/src/core/code-flow/scripts/cf_acceptance_schema.py +0 -83
- package/src/core/code-flow/scripts/cf_checks.py +0 -336
- package/src/core/code-flow/scripts/cf_core.py +0 -787
- package/src/core/code-flow/scripts/cf_exec_base.py +0 -112
- package/src/core/code-flow/scripts/cf_feedback.py +0 -56
- package/src/core/code-flow/scripts/cf_log.py +0 -154
- package/src/core/code-flow/scripts/cf_post_hook.py +0 -196
- package/src/core/code-flow/scripts/cf_pre_tool_hook.py +0 -104
- package/src/core/code-flow/scripts/cf_scan.py +0 -295
- package/src/core/code-flow/scripts/cf_session_state.py +0 -37
- package/src/core/code-flow/scripts/cf_spec_context.py +0 -1746
- package/src/core/code-flow/scripts/cf_spec_gate.py +0 -264
- package/src/core/code-flow/scripts/cf_spec_metadata.py +0 -384
- package/src/core/code-flow/scripts/cf_spec_migrate.py +0 -512
- package/src/core/code-flow/scripts/cf_spec_resolver.py +0 -347
- package/src/core/code-flow/scripts/cf_spec_router.py +0 -244
- package/src/core/code-flow/scripts/cf_spec_session.py +0 -119
- package/src/core/code-flow/scripts/cf_spec_verify.py +0 -559
- package/src/core/code-flow/scripts/cf_stats.py +0 -506
- package/src/core/code-flow/scripts/cf_stop_hook.py +0 -381
- package/src/core/code-flow/scripts/cf_sync.py +0 -140
- package/src/core/code-flow/scripts/cf_task_index.py +0 -148
- package/src/core/code-flow/scripts/cf_task_parallel.py +0 -394
- package/src/core/code-flow/scripts/cf_task_runtime.py +0 -304
- package/src/core/code-flow/scripts/cf_task_state.py +0 -3
- package/src/core/code-flow/scripts/cf_task_workflow.py +0 -205
- package/src/core/code-flow/scripts/cf_user_prompt_hook.py +0 -178
- package/src/core/code-flow/scripts/cf_validation.py +0 -81
- package/src/core/code-flow/scripts/cf_workflow_service.py +0 -366
- package/src/core/code-flow/scripts/cf_workflow_transaction.py +0 -96
- package/src/core/code-flow/specs/backend/_map.md +0 -56
- package/src/core/code-flow/specs/backend/code-quality-performance.md +0 -59
- package/src/core/code-flow/specs/backend/database.md +0 -51
- package/src/core/code-flow/specs/backend/directory-structure.md +0 -54
- package/src/core/code-flow/specs/backend/logging.md +0 -50
- package/src/core/code-flow/specs/backend/platform-rules.md +0 -55
- package/src/core/code-flow/specs/frontend/_map.md +0 -52
- package/src/core/code-flow/specs/frontend/component-specs.md +0 -68
- package/src/core/code-flow/specs/frontend/directory-structure.md +0 -53
- package/src/core/code-flow/specs/frontend/quality-standards.md +0 -58
- package/src/core/code-flow/specs/shared/_map.md +0 -57
- package/src/core/code-flow/tasks/.gitkeep +0 -0
- package/src/core/code-flow/validation.yml +0 -53
- package/src/migrate/spec-workflow.js +0 -238
|
@@ -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,5 +1,7 @@
|
|
|
1
1
|
# {模块名称} 前端模块需求与设计简报
|
|
2
2
|
|
|
3
|
+
> **生成约定**:产出文档的 frontmatter 声明 `design_template: frontend`。验收场景引用 `<需求>.scenarios.md` 的 S-/E-/B- 场景 ID;场景是人工验收参照,不生成集中验收清单或结果登记,不阻断 start/finish/archive。设计需要给出真实可执行的相关测试建议,由任务文档声明。
|
|
4
|
+
|
|
3
5
|
> **文档编号**: FE-{模块代号}-{版本号}
|
|
4
6
|
> **文档版本**: v1.0
|
|
5
7
|
> **创建日期**: YYYY-MM-DD
|
|
@@ -24,6 +26,7 @@
|
|
|
24
26
|
- [2.2 功能方案](#22-功能方案-必填)
|
|
25
27
|
- [2.3 范围与边界](#23-范围与边界-必填)
|
|
26
28
|
- [2.4 验收条件](#24-验收条件-必填)
|
|
29
|
+
- [2.4.1 验证环境假设](#241-验证环境假设-必填)
|
|
27
30
|
- [3. 前端技术设计](#3-前端技术设计)
|
|
28
31
|
- [3.1 技术选型](#31-技术选型-必填)
|
|
29
32
|
- [3.2 页面与路由结构](#32-页面与路由结构-必填)
|
|
@@ -90,25 +93,25 @@
|
|
|
90
93
|
|
|
91
94
|
### 2.4 验收条件 [必填]
|
|
92
95
|
|
|
93
|
-
>
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
| 场景ID | 功能ID | 优先级 | 测试层级 | 关键真实边界 | 操作步骤 | 预期 UI 结果 |
|
|
98
|
-
|--------|--------|--------|---------|-------------|---------|-------------|
|
|
99
|
-
| S-01 | FEAT-01 | P0 | E2E | Browser → Router → Service → UI | 1. <操作> | <可见结果> |
|
|
96
|
+
> **场景唯一源**:验收场景定义在 `<需求>.scenarios.md`。本节只保留场景引用和前端设计影响,不复制完整场景表;场景只记录人工验收所需的 step / expected / boundary / owner;没有可执行命令的场景标为 manual。
|
|
97
|
+
>
|
|
98
|
+
> **前端 E2E 精度**:表单交互、布局、文案、字段顺序、空态和错误提示用 component + mock API;E2E 只保留真实浏览器 + 真实后端 + 鉴权/DB 的关键用户旅程,并写清可观察结果。禁止源码字符串/CSS/宽度断言。
|
|
100
99
|
|
|
101
|
-
|
|
100
|
+
| 场景ID | 前端设计影响 / 备注 |
|
|
101
|
+
|--------|--------------------|
|
|
102
|
+
| S-01 | 正常交互路径;涉及的页面、组件与真实边界 |
|
|
103
|
+
| E-01 | 异常/空态路径;涉及的组件状态与用户可见反馈 |
|
|
102
104
|
|
|
103
|
-
|
|
104
|
-
|--------|--------|---------|-------------|---------|---------|
|
|
105
|
-
| E-01 | FEAT-01 | integration | Service → UI | (接口失败 / 空数据 / 校验不通过) | (错误提示 / 空态 / 字段定位) |
|
|
105
|
+
#### 2.4.1 验证环境假设 [必填]
|
|
106
106
|
|
|
107
|
-
|
|
107
|
+
> 验收场景依赖的容量、硬件、外部依赖与 profile 参数必须在设计阶段写清;执行时缺少环境应由人工验收记录缺失项与 owner,不得伪装成产品失败。
|
|
108
108
|
|
|
109
|
-
|
|
|
110
|
-
|
|
111
|
-
|
|
|
109
|
+
| 维度 | 假设 | 验证方式 / 参数 | 不满足时 |
|
|
110
|
+
|------|------|----------------|---------|
|
|
111
|
+
| 容量 | (页面/组件规模、并发用户、浏览器矩阵;无实测填"待定") | Playwright projects / 基准 fixture | 记录缺失项与 owner,拆分批次 |
|
|
112
|
+
| 硬件 | (CI runner / 设备 / 视口规格) | 人工检查 | 记录缺失项与 owner |
|
|
113
|
+
| 依赖 | (后端 API / 浏览器版本 / 测试账号 / 字体与静态资源) | 人工检查 | 记录缺失项与 owner |
|
|
114
|
+
| 测试预算 | (Task tests 的 unit/integration 范围;E2E 与全量回归留在 CI) | 人工核对任务文档 | 记录未覆盖风险与 owner |
|
|
112
115
|
|
|
113
116
|
---
|
|
114
117
|
|
|
@@ -235,11 +238,11 @@
|
|
|
235
238
|
|
|
236
239
|
## Spec Compliance Matrix
|
|
237
240
|
|
|
238
|
-
>
|
|
241
|
+
> 从当前适用 Spec 与任务 `Spec-Refs` 读取 Rule,并逐条回填设计影响、设计落点与人工验收场景。
|
|
239
242
|
|
|
240
|
-
| Spec/Rule |
|
|
241
|
-
|
|
242
|
-
| `{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 |
|
|
243
246
|
|
|
244
247
|
---
|
|
245
248
|
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# {模块名称} 模块需求与设计一体化文档
|
|
2
2
|
|
|
3
|
+
> **生成约定**:产出文档的 frontmatter 声明 `design_template: full`。验收场景引用 `<需求>.scenarios.md` 的 S-/E-/B- 场景 ID;场景是人工验收参照,不生成集中验收清单或结果登记,不阻断 start/finish/archive。设计需要给出真实可执行的相关测试建议,由任务文档声明。
|
|
4
|
+
|
|
3
5
|
> **文档编号**: MOD-{模块代号}-{版本号}
|
|
4
6
|
> **文档版本**: v1.0
|
|
5
7
|
> **创建日期**: YYYY-MM-DD
|
|
@@ -28,6 +30,7 @@
|
|
|
28
30
|
- [2.3 功能方案](#23-功能方案-必填)
|
|
29
31
|
- [2.4 范围与边界](#24-范围与边界-必填)
|
|
30
32
|
- [2.5 验收条件](#25-验收条件-必填)
|
|
33
|
+
- [2.5.4 验证环境假设](#254-验证环境假设-必填)
|
|
31
34
|
- [3. 技术设计](#3-技术设计)
|
|
32
35
|
- [3.1 方案选型](#31-方案选型-必填)
|
|
33
36
|
- [3.2 架构设计](#32-架构设计-必填)
|
|
@@ -131,6 +134,8 @@
|
|
|
131
134
|
|
|
132
135
|
### 2.5 验收条件 [必填]
|
|
133
136
|
|
|
137
|
+
> **场景唯一源**:验收场景定义在 `<需求>.scenarios.md`。本节只保留业务规则、设计影响和场景引用;不要在此复制完整全局场景表。
|
|
138
|
+
|
|
134
139
|
#### 2.5.1 业务规则与约束
|
|
135
140
|
|
|
136
141
|
| ID | 类型 | 描述 | 验证场景 |
|
|
@@ -140,27 +145,17 @@
|
|
|
140
145
|
|
|
141
146
|
#### 2.5.2 功能验收场景
|
|
142
147
|
|
|
143
|
-
>
|
|
148
|
+
> **场景唯一源**:验收场景定义在 `<需求>.scenarios.md`。设计文档只引用全局场景 ID,并说明设计影响,不复制完整场景字段;场景只记录人工验收所需的 step / expected / boundary / owner;没有可执行命令的场景标为 manual。
|
|
144
149
|
>
|
|
145
|
-
>
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
| 场景ID | 功能ID | 优先级 | 测试层级 | 关键真实边界 | 前置条件 | 操作步骤 | 预期结果 |
|
|
150
|
-
|--------|--------|--------|---------|-------------|---------|---------|---------|
|
|
151
|
-
| S-01 | FEAT-01 | P0 | E2E | API → Store → 最终输出 | | | |
|
|
152
|
-
|
|
153
|
-
**异常场景**
|
|
154
|
-
|
|
155
|
-
| 场景ID | 功能ID | 测试层级 | 关键真实边界 | 触发条件 | 系统行为 | 用户感知 |
|
|
156
|
-
|--------|--------|---------|-------------|---------|---------|---------|
|
|
157
|
-
| E-01 | FEAT-01 | integration | Service → Store | | | |
|
|
158
|
-
|
|
159
|
-
**边界场景** [按需]
|
|
150
|
+
> **E2E 精度**:E2E 只用于关键用户旅程,并写清真实边界与可观察结果。UI 布局/文案/字段顺序用 component,DTO/错误码用 contract,鉴权/事务/模块边界用 integration;不要把 E2E 当成所有用户可见结果的默认层级。
|
|
151
|
+
>
|
|
152
|
+
> ✅ CAS 409:contract 验响应、component 验表单保留、integration 用真实存储验并发;聚合补零与关系绑定同样优先采用相应低层组合。Cookie 隔离和 SSE 恢复保留必要的跨边界关键验证。❌ 设固定 E2E 数量或比例;比例和任务耗时仅作诊断,零 E2E 的完整覆盖合法。
|
|
160
153
|
|
|
161
|
-
| 场景ID |
|
|
162
|
-
|
|
163
|
-
|
|
|
154
|
+
| 场景ID | 设计影响 / 备注 |
|
|
155
|
+
|--------|----------------|
|
|
156
|
+
| S-01 | 正常路径;涉及的设计组件与真实边界 |
|
|
157
|
+
| E-01 | 异常路径;涉及的设计组件与失败表现 |
|
|
158
|
+
| B-01 | 边界条件;按需 |
|
|
164
159
|
|
|
165
160
|
#### 2.5.3 非功能指标 [按需]
|
|
166
161
|
|
|
@@ -184,6 +179,17 @@
|
|
|
184
179
|
| NFR-SEC-01 | 认证鉴权 | 未授权用户无法访问 |
|
|
185
180
|
| NFR-SEC-02 | 数据加密 | 敏感字段不可明文 |
|
|
186
181
|
|
|
182
|
+
#### 2.5.4 验证环境假设 [必填]
|
|
183
|
+
|
|
184
|
+
> 验收场景依赖的容量、硬件、外部依赖与 profile 参数必须在设计阶段写清;执行时缺少环境应由人工验收记录缺失项与 owner,不得伪装成产品失败。
|
|
185
|
+
|
|
186
|
+
| 维度 | 假设 | 验证方式 / 参数 | 不满足时 |
|
|
187
|
+
|------|------|----------------|---------|
|
|
188
|
+
| 容量 | (数据量、并发数、场景规模;无实测填"待定") | 基准 fixture / 压测命令 | 记录缺失项与 owner,拆分批次 |
|
|
189
|
+
| 硬件 | (CPU / 内存 / 磁盘 / 网络规格,如 8C16G) | 人工检查 | 记录缺失项与 owner |
|
|
190
|
+
| 依赖 | (数据库 / 浏览器 / API / CI runner / 端口 / 测试账号) | 人工检查 | 记录缺失项与 owner |
|
|
191
|
+
| 测试预算 | (Task tests 的 unit/integration 范围;E2E 与全量回归留在 CI) | 人工核对任务文档 | 记录未覆盖风险与 owner |
|
|
192
|
+
|
|
187
193
|
---
|
|
188
194
|
|
|
189
195
|
## 3. 技术设计
|
|
@@ -465,23 +471,25 @@ flowchart TD
|
|
|
465
471
|
|
|
466
472
|
---
|
|
467
473
|
|
|
468
|
-
## 6.
|
|
474
|
+
## 6. 需求追溯矩阵(生成式)
|
|
475
|
+
|
|
476
|
+
> 本节由设计者手工维护,用于把 PRD 用户故事、功能/接口 ID 与场景 ID 对齐。场景只是人工验收参照;`cf-task:plan` 将相关场景映射到任务段落。
|
|
469
477
|
|
|
470
|
-
| 用户故事 | 功能ID | 接口ID |
|
|
471
|
-
|
|
472
|
-
| 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 | 待实现 |
|
|
473
481
|
|
|
474
|
-
> 用户故事一列引用 PRD 中的 US-XX(无 PRD 时填"需求描述"
|
|
482
|
+
> 用户故事一列引用 PRD 中的 US-XX(无 PRD 时填"需求描述");场景 ID 引用 `<需求>.scenarios.md` 的 S-/E-/B-,不要另造编号。RULE 与高影响 RISK 应映射到场景;无法自动化时写明人工验证原因,不得留空。
|
|
475
483
|
|
|
476
484
|
---
|
|
477
485
|
|
|
478
486
|
## Spec Compliance Matrix
|
|
479
487
|
|
|
480
|
-
>
|
|
488
|
+
> 从当前适用 Spec 与任务 `Spec-Refs` 读取 Rule,并逐条回填设计影响、设计落点与人工验收场景。
|
|
481
489
|
|
|
482
|
-
| Spec/Rule |
|
|
483
|
-
|
|
484
|
-
| `{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 |
|
|
485
493
|
|
|
486
494
|
---
|
|
487
495
|
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# {模块名称} 模块需求与设计简报
|
|
2
2
|
|
|
3
|
+
> **生成约定**:产出文档的 frontmatter 声明 `design_template: lite`。验收场景引用 `<需求>.scenarios.md` 的 S-/E-/B- 场景 ID;场景是人工验收参照,不生成集中验收清单或结果登记,不阻断 start/finish/archive。设计需要给出真实可执行的相关测试建议,由任务文档声明。
|
|
4
|
+
|
|
3
5
|
> **文档编号**: MOD-{模块代号}-{版本号}
|
|
4
6
|
> **文档版本**: v1.0
|
|
5
7
|
> **创建日期**: YYYY-MM-DD
|
|
@@ -29,6 +31,7 @@
|
|
|
29
31
|
- [2.2 功能方案](#22-功能方案-必填)
|
|
30
32
|
- [2.3 范围与边界](#23-范围与边界-必填)
|
|
31
33
|
- [2.4 验收条件](#24-验收条件-必填)
|
|
34
|
+
- [2.4.3 验证环境假设](#243-验证环境假设-必填)
|
|
32
35
|
- [3. 技术设计](#3-技术设计)
|
|
33
36
|
- [3.1 技术选型](#31-技术选型-必填)
|
|
34
37
|
- [3.2 架构设计](#32-架构设计-必填)
|
|
@@ -106,23 +109,19 @@
|
|
|
106
109
|
|
|
107
110
|
### 2.4 验收条件 [必填]
|
|
108
111
|
|
|
112
|
+
> **场景唯一源**:验收场景定义在 `<需求>.scenarios.md`。本节只保留业务规则、设计影响和场景引用;不要在此复制完整全局场景表。
|
|
113
|
+
|
|
109
114
|
#### 2.4.1 功能验收场景
|
|
110
115
|
|
|
111
|
-
>
|
|
116
|
+
> **场景唯一源**:验收场景定义在 `<需求>.scenarios.md`。设计文档只引用全局场景 ID,并说明设计影响,不复制完整场景字段;场景只记录人工验收所需的 step / expected / boundary / owner;没有可执行命令的场景标为 manual。
|
|
112
117
|
>
|
|
113
|
-
>
|
|
114
|
-
|
|
115
|
-
**正常场景**
|
|
116
|
-
|
|
117
|
-
| 场景ID | 功能ID | 优先级 | 测试层级 | 关键真实边界 | 操作步骤 | 预期结果 |
|
|
118
|
-
|--------|--------|--------|---------|-------------|---------|---------|
|
|
119
|
-
| S-01 | FEAT-01 | P0 | E2E | API → Store → 最终输出 | 1. <步骤><br>2. <步骤> | <结果> |
|
|
118
|
+
> **E2E 精度**:E2E 只用于关键用户旅程,并写清真实边界与可观察结果。UI 布局/文案/字段顺序用 component,DTO/错误码用 contract,鉴权/事务/模块边界用 integration。
|
|
120
119
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
|
124
|
-
|
|
125
|
-
|
|
|
120
|
+
| 场景ID | 设计影响 / 备注 |
|
|
121
|
+
|--------|----------------|
|
|
122
|
+
| S-01 | 正常路径;涉及的设计组件与真实边界 |
|
|
123
|
+
| E-01 | 异常路径;涉及的设计组件与失败表现 |
|
|
124
|
+
| B-01 | 边界条件;按需 |
|
|
126
125
|
|
|
127
126
|
#### 2.4.2 非功能指标 [按需]
|
|
128
127
|
|
|
@@ -131,6 +130,17 @@
|
|
|
131
130
|
| NFR-PERF-01 | 响应时间(P95) | ≤200ms | APM监控 |
|
|
132
131
|
| NFR-REL-01 | 可用性(SLA) | ≥99.9% | 年度可用时长 |
|
|
133
132
|
|
|
133
|
+
#### 2.4.3 验证环境假设 [必填]
|
|
134
|
+
|
|
135
|
+
> 验收场景依赖的容量、硬件、外部依赖与 profile 参数必须在设计阶段写清;执行时缺少环境应由人工验收记录缺失项与 owner,不得伪装成产品失败。
|
|
136
|
+
|
|
137
|
+
| 维度 | 假设 | 验证方式 / 参数 | 不满足时 |
|
|
138
|
+
|------|------|----------------|---------|
|
|
139
|
+
| 容量 | (数据量、并发数、场景规模;无实测填"待定") | 基准 fixture / 压测命令 | 记录缺失项与 owner,拆分批次 |
|
|
140
|
+
| 硬件 | (CPU / 内存 / 磁盘 / 网络规格) | 人工检查 | 记录缺失项与 owner |
|
|
141
|
+
| 依赖 | (数据库 / 浏览器 / API / 端口 / 测试账号) | 人工检查 | 记录缺失项与 owner |
|
|
142
|
+
| 测试预算 | (Task tests 的 unit/integration 范围;E2E 与全量回归留在 CI) | 人工核对任务文档 | 记录未覆盖风险与 owner |
|
|
143
|
+
|
|
134
144
|
---
|
|
135
145
|
|
|
136
146
|
## 3. 技术设计
|
|
@@ -284,11 +294,11 @@ flowchart TD
|
|
|
284
294
|
|
|
285
295
|
## Spec Compliance Matrix
|
|
286
296
|
|
|
287
|
-
>
|
|
297
|
+
> 从当前适用 Spec 与任务 `Spec-Refs` 读取 Rule,并逐条回填设计影响、设计落点与人工验收场景。
|
|
288
298
|
|
|
289
|
-
| Spec/Rule |
|
|
290
|
-
|
|
291
|
-
| `{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 |
|
|
292
302
|
|
|
293
303
|
---
|
|
294
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
|
+
- 尚未执行
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
# Spec Workflow 0.6.0 Migration
|
|
2
|
-
|
|
3
|
-
0.6.0 replaces prompt-keyword/full injection with one Context-first runtime. It is a breaking, transactional migration; `code-flow init` will not overwrite a 0.4.2–0.5.x project before migration.
|
|
4
|
-
|
|
5
|
-
## Upgrade
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
code-flow migrate --spec-workflow --dry-run
|
|
9
|
-
code-flow migrate --spec-workflow --prepare
|
|
10
|
-
cf-spec migrate --plan .code-flow/migrations/<id>/migration-plan.json # only when unresolved exists
|
|
11
|
-
code-flow migrate --spec-workflow --apply --plan .code-flow/migrations/<id>/migration-plan.json
|
|
12
|
-
code-flow init --platform=<claude|codex|costrict|opencode>
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
`--dry-run` performs no project writes. `--prepare` creates `.code-flow/migrations/<id>/backup/`, empty staging, a source-hash-bound plan, and `journal.json`. Apply refuses unresolved decisions or source hash drift. `.code-flow/.version` is written as `0.6.0` only after every target hash is committed.
|
|
16
|
-
|
|
17
|
-
## Backup and rollback
|
|
18
|
-
|
|
19
|
-
The backup stores the exact bytes present at prepare time, including dirty working-tree and user-managed files. Keep it until the migrated project has passed its normal tests.
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
code-flow migrate --spec-workflow --rollback <id>
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
Rename/EXDEV failures automatically roll back. If interruption leaves `committing`, rerunning apply finishes only when every target hash is proven; otherwise it restores the backup. `recovery_required` must be resolved before Hooks or task commands continue.
|
|
26
|
-
|
|
27
|
-
## Unsupported older projects
|
|
28
|
-
|
|
29
|
-
Projects older than 0.4.2 must first bridge through the previous release:
|
|
30
|
-
|
|
31
|
-
```bash
|
|
32
|
-
npx @michaelxwb/code-flow@0.5.2 init --platform=<platform>
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
Then run the 0.6.0 migration. Do not delete `.inject-state`, old commands, or task files manually before prepare—the transaction needs the original bytes for recovery and residue validation.
|
|
36
|
-
|
|
37
|
-
## Runtime changes
|
|
38
|
-
|
|
39
|
-
- Active tasks inject only their persisted `spec-context.yml` TASK projection.
|
|
40
|
-
- Without an active task, explicit paths use `path_mapping`; only pathless exploration receives Catalog.
|
|
41
|
-
- `cf-inject`, full/tag fallback, `.inject-state`, and SessionStart reset are removed.
|
|
42
|
-
- `cf-spec context/refresh/doctor` is available on Claude, Codex, Costrict, and OpenCode.
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# Project Guidelines
|
|
2
|
-
|
|
3
|
-
## Team Identity
|
|
4
|
-
- Team: [team name]
|
|
5
|
-
- Project: [project name]
|
|
6
|
-
- Language: [primary language]
|
|
7
|
-
|
|
8
|
-
## Core Principles
|
|
9
|
-
- All changes must include tests
|
|
10
|
-
- Single responsibility per function (<= 50 lines)
|
|
11
|
-
- No loose typing or silent exception handling
|
|
12
|
-
- Handle errors explicitly
|
|
13
|
-
|
|
14
|
-
## Forbidden Patterns
|
|
15
|
-
- Hard-coded secrets or credentials
|
|
16
|
-
- Unparameterized SQL
|
|
17
|
-
- Network calls inside tight loops
|
|
18
|
-
|
|
19
|
-
<!-- code-flow:spec-loading schema=1 start -->
|
|
20
|
-
## Spec Workflow (schema 1)
|
|
21
|
-
|
|
22
|
-
- If `.code-flow/.active-task.json` exists, validate it and `spec-context.yml`, then use only the active TASK's `Spec-Refs`, Design refs, and Acceptance Contract. Never reselect Specs from Catalog.
|
|
23
|
-
- Without an active TASK, explicit file paths use deterministic `path_mapping` constraints; prompts without paths receive the Spec Catalog for exploration or creation of the next Context.
|
|
24
|
-
- PRD, Design, Plan, Start, Coding, and Done inherit one persisted Context. Required rules must be applied and verified before their stage gate passes.
|
|
25
|
-
- A corrupt marker, Context hash drift, or required scope expansion is `SPEC_WORKFLOW_BLOCKED`; run `cf-spec refresh/doctor` instead of falling back.
|
|
26
|
-
- Tier 0 `_map.md` files are navigation only. Rule constraints live in metadata-bearing Tier 1 Specs.
|
|
27
|
-
|
|
28
|
-
Do NOT ask the user which Specs to load—the Context-first router is authoritative.
|
|
29
|
-
<!-- code-flow:spec-loading schema=1 end -->
|
|
30
|
-
|
|
31
|
-
## 合规反馈协议(quality_loop)
|
|
32
|
-
|
|
33
|
-
1. 编辑代码后收到 **Spec 合规反馈 (auto-check)** 时,先按提示修正违规,再继续当前任务
|
|
34
|
-
2. 用户表示某条反馈是误报("这是误报"/"忽略这个检查")时,代为执行:
|
|
35
|
-
`python3 .code-flow/scripts/cf_feedback.py ignore <check-id>`
|
|
36
|
-
(check-id 见反馈中的 `规则: <spec>#<check-id>`;同一规则误报达阈值会自动停用)
|
|
37
|
-
3. 会话收尾被校验拦回(cf-stop 反馈未过项)时,修复后再结束;不要绕过
|
|
38
|
-
4. 新增/修改规范时优先用 ✅/❌ 代码对照示例表达(见 spec 模板 Examples 段)
|
|
39
|
-
|
|
40
|
-
## Task Documents (cf-task workflow)
|
|
41
|
-
|
|
42
|
-
- `.code-flow/specs/shared/` holds PRD/design templates(含前端 `design-frontend.md`)used by `/cf-task:prd` and `/cf-task:align`
|
|
43
|
-
- 一个需求的 prd / design / tasks 同放需求目录 `.code-flow/tasks/<日期>/<需求>/`;全栈需求可有 `<需求>.frontend.design.md` + `<需求>.backend.design.md`,`/cf-task:plan <需求目录>` 合并拆解,`/cf-task:archive` 按整个需求目录归档(旧扁平布局仍兼容)
|
|
44
|
-
- Workflow: `/cf-task:prd` → `.prd.md` → `/cf-task:align <.prd.md>` → `.design.md`(s) → `/cf-task:plan <需求目录>` → tasks
|
|
45
|
-
- Templates are read by the commands themselves; you do not need to pre-load them
|