@michaelxwb/code-flow 0.5.1
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 +157 -0
- package/package.json +16 -0
- package/src/adapters/claude/CLAUDE.md +51 -0
- package/src/adapters/claude/commands/cf-init.md +262 -0
- package/src/adapters/claude/commands/cf-inject.md +55 -0
- package/src/adapters/claude/commands/cf-learn.md +291 -0
- package/src/adapters/claude/commands/cf-stats.md +86 -0
- package/src/adapters/claude/commands/cf-task/align.md +283 -0
- package/src/adapters/claude/commands/cf-task/archive.md +131 -0
- package/src/adapters/claude/commands/cf-task/block.md +30 -0
- package/src/adapters/claude/commands/cf-task/graph.md +73 -0
- package/src/adapters/claude/commands/cf-task/note.md +239 -0
- package/src/adapters/claude/commands/cf-task/plan.md +270 -0
- package/src/adapters/claude/commands/cf-task/prd.md +138 -0
- package/src/adapters/claude/commands/cf-task/start.md +173 -0
- package/src/adapters/claude/commands/cf-task/status.md +59 -0
- package/src/adapters/claude/commands/cf-validate.md +73 -0
- package/src/adapters/claude/settings.local.json +60 -0
- package/src/adapters/codex/AGENTS.md +51 -0
- package/src/adapters/codex/config.toml +3 -0
- package/src/adapters/codex/hooks.json +48 -0
- package/src/adapters/codex/skills/cf-init/SKILL.md +271 -0
- package/src/adapters/codex/skills/cf-inject/SKILL.md +56 -0
- package/src/adapters/codex/skills/cf-learn/SKILL.md +296 -0
- package/src/adapters/codex/skills/cf-stats/SKILL.md +87 -0
- package/src/adapters/codex/skills/cf-task-align/SKILL.md +284 -0
- package/src/adapters/codex/skills/cf-task-archive/SKILL.md +132 -0
- package/src/adapters/codex/skills/cf-task-block/SKILL.md +31 -0
- package/src/adapters/codex/skills/cf-task-graph/SKILL.md +74 -0
- package/src/adapters/codex/skills/cf-task-note/SKILL.md +236 -0
- package/src/adapters/codex/skills/cf-task-plan/SKILL.md +271 -0
- package/src/adapters/codex/skills/cf-task-prd/SKILL.md +139 -0
- package/src/adapters/codex/skills/cf-task-start/SKILL.md +174 -0
- package/src/adapters/codex/skills/cf-task-status/SKILL.md +60 -0
- package/src/adapters/codex/skills/cf-validate/SKILL.md +74 -0
- package/src/adapters/costrict/CLAUDE.md +51 -0
- package/src/adapters/costrict/commands/cf-init.md +262 -0
- package/src/adapters/costrict/commands/cf-inject.md +55 -0
- package/src/adapters/costrict/commands/cf-learn.md +291 -0
- package/src/adapters/costrict/commands/cf-stats.md +86 -0
- package/src/adapters/costrict/commands/cf-task/align.md +283 -0
- package/src/adapters/costrict/commands/cf-task/archive.md +131 -0
- package/src/adapters/costrict/commands/cf-task/block.md +30 -0
- package/src/adapters/costrict/commands/cf-task/graph.md +73 -0
- package/src/adapters/costrict/commands/cf-task/note.md +239 -0
- package/src/adapters/costrict/commands/cf-task/plan.md +270 -0
- package/src/adapters/costrict/commands/cf-task/prd.md +138 -0
- package/src/adapters/costrict/commands/cf-task/start.md +173 -0
- package/src/adapters/costrict/commands/cf-task/status.md +59 -0
- package/src/adapters/costrict/commands/cf-validate.md +73 -0
- package/src/adapters/costrict/settings.local.json +60 -0
- package/src/adapters/opencode/AGENTS.md +51 -0
- package/src/adapters/opencode/commands/cf-init.md +275 -0
- package/src/adapters/opencode/commands/cf-inject.md +59 -0
- package/src/adapters/opencode/commands/cf-learn.md +295 -0
- package/src/adapters/opencode/commands/cf-stats.md +90 -0
- package/src/adapters/opencode/commands/cf-task/align.md +287 -0
- package/src/adapters/opencode/commands/cf-task/archive.md +135 -0
- package/src/adapters/opencode/commands/cf-task/block.md +34 -0
- package/src/adapters/opencode/commands/cf-task/graph.md +77 -0
- package/src/adapters/opencode/commands/cf-task/note.md +243 -0
- package/src/adapters/opencode/commands/cf-task/plan.md +274 -0
- package/src/adapters/opencode/commands/cf-task/prd.md +142 -0
- package/src/adapters/opencode/commands/cf-task/start.md +177 -0
- package/src/adapters/opencode/commands/cf-task/status.md +63 -0
- package/src/adapters/opencode/commands/cf-validate.md +77 -0
- package/src/adapters/opencode/opencode.json +4 -0
- package/src/adapters/opencode/plugins/code-flow/index.js +132 -0
- package/src/adapters/opencode/plugins/code-flow/package.json +6 -0
- package/src/cli.js +810 -0
- package/src/core/code-flow/config.yml +159 -0
- package/src/core/code-flow/scripts/cf_checks.py +306 -0
- package/src/core/code-flow/scripts/cf_core.py +954 -0
- package/src/core/code-flow/scripts/cf_feedback.py +56 -0
- package/src/core/code-flow/scripts/cf_inject_hook.py +178 -0
- package/src/core/code-flow/scripts/cf_log.py +146 -0
- package/src/core/code-flow/scripts/cf_post_hook.py +196 -0
- package/src/core/code-flow/scripts/cf_scan.py +293 -0
- package/src/core/code-flow/scripts/cf_session_hook.py +42 -0
- package/src/core/code-flow/scripts/cf_stats.py +439 -0
- package/src/core/code-flow/scripts/cf_stop_hook.py +191 -0
- package/src/core/code-flow/scripts/cf_user_prompt_hook.py +402 -0
- package/src/core/code-flow/specs/backend/_map.md +56 -0
- package/src/core/code-flow/specs/backend/code-quality-performance.md +47 -0
- package/src/core/code-flow/specs/backend/database.md +39 -0
- package/src/core/code-flow/specs/backend/directory-structure.md +42 -0
- package/src/core/code-flow/specs/backend/logging.md +38 -0
- package/src/core/code-flow/specs/backend/platform-rules.md +43 -0
- package/src/core/code-flow/specs/frontend/_map.md +52 -0
- package/src/core/code-flow/specs/frontend/component-specs.md +56 -0
- package/src/core/code-flow/specs/frontend/directory-structure.md +41 -0
- package/src/core/code-flow/specs/frontend/quality-standards.md +46 -0
- package/src/core/code-flow/specs/shared/_map.md +57 -0
- package/src/core/code-flow/specs/shared/design/design-frontend.md +247 -0
- package/src/core/code-flow/specs/shared/design/design-full.md +494 -0
- package/src/core/code-flow/specs/shared/design/design-lite.md +293 -0
- package/src/core/code-flow/specs/shared/prd-template.md +187 -0
- package/src/core/code-flow/tasks/.gitkeep +0 -0
- package/src/core/code-flow/validation.yml +48 -0
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
# {模块名称} 模块需求与设计简报
|
|
2
|
+
|
|
3
|
+
> **文档编号**: MOD-{模块代号}-{版本号}
|
|
4
|
+
> **文档版本**: v1.0
|
|
5
|
+
> **创建日期**: YYYY-MM-DD
|
|
6
|
+
> **文档状态**: 草稿 / 评审中 / 已批准
|
|
7
|
+
|
|
8
|
+
**评审边界说明**:
|
|
9
|
+
- **需求评审**: 第 2 章(需求分析)→ 通过后锁定需求基线
|
|
10
|
+
- **设计评审**: 第 3 章(技术设计)→ 通过后锁定设计基线
|
|
11
|
+
|
|
12
|
+
**ID 体系**: US(来自 PRD,可选)、FEAT(功能)、API(接口)、NFR(非功能指标)
|
|
13
|
+
场景编号:S-(正常)、E-(异常)、B-(边界,按需)
|
|
14
|
+
|
|
15
|
+
**适用场景**: 功能开发(简单) | CLI/脚本 | Bug修复 | 小型重构
|
|
16
|
+
**不适用**: 跨系统集成 | 性能优化 | 架构演进(请用 design-full.md)
|
|
17
|
+
|
|
18
|
+
**填写约定**: 表格内的数值/阈值(如 `≤200ms`、`≥99.9%`)均为**示例**,必须替换为真实目标或删除;无实测依据填"待定",**禁止照抄示例值**。接口章节按入口类型(API / CLI / 函数库)三选一,删除不适用形态。
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 目录
|
|
23
|
+
|
|
24
|
+
- [1. 文档控制](#1-文档控制)
|
|
25
|
+
- [1.1 责任人](#11-责任人)
|
|
26
|
+
- [1.2 修订历史](#12-修订历史)
|
|
27
|
+
- [2. 需求分析](#2-需求分析)
|
|
28
|
+
- [2.1 需求概述](#21-需求概述-必填)
|
|
29
|
+
- [2.2 功能方案](#22-功能方案-必填)
|
|
30
|
+
- [2.3 范围与边界](#23-范围与边界-必填)
|
|
31
|
+
- [2.4 验收条件](#24-验收条件-必填)
|
|
32
|
+
- [3. 技术设计](#3-技术设计)
|
|
33
|
+
- [3.1 技术选型](#31-技术选型-必填)
|
|
34
|
+
- [3.2 架构设计](#32-架构设计-必填)
|
|
35
|
+
- [3.3 接口设计](#33-接口设计-必填)
|
|
36
|
+
- [3.4 性能与容量考量](#34-性能与容量考量-按需)
|
|
37
|
+
- [4. 风险与依赖](#4-风险与依赖)
|
|
38
|
+
- [附录:术语表](#附录术语表)
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## 1. 文档控制
|
|
43
|
+
|
|
44
|
+
### 1.1 责任人
|
|
45
|
+
|
|
46
|
+
| 角色 | 姓名 | 职责范围 |
|
|
47
|
+
|------|------|---------|
|
|
48
|
+
| 开发负责人 | | 技术方案、代码实现 |
|
|
49
|
+
| 测试负责人 | | 测试策略、质量保证 |
|
|
50
|
+
|
|
51
|
+
### 1.2 修订历史
|
|
52
|
+
|
|
53
|
+
| 版本 | 日期 | 作者 | 变更描述 |
|
|
54
|
+
|------|------|------|---------|
|
|
55
|
+
| v0.1 | YYYY-MM-DD | | 初始草稿 |
|
|
56
|
+
| v1.0 | YYYY-MM-DD | | 评审通过 |
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## 2. 需求分析
|
|
61
|
+
|
|
62
|
+
### 2.1 需求概述 [必填]
|
|
63
|
+
|
|
64
|
+
| 项目 | 内容 |
|
|
65
|
+
|------|------|
|
|
66
|
+
| **模块名称** | |
|
|
67
|
+
| **需求类型** | 功能开发 / Bug修复 / 重构 / 优化 |
|
|
68
|
+
| **业务背景** | (简述需求来源、触发原因) |
|
|
69
|
+
| **核心目标** | (一句话说明要达成的目标) |
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
### 2.2 功能方案 [必填]
|
|
74
|
+
|
|
75
|
+
#### 2.2.1 功能清单
|
|
76
|
+
|
|
77
|
+
| 功能ID | 功能名称 | 功能描述 | 优先级 | 来源 |
|
|
78
|
+
|--------|---------|---------|--------|------|
|
|
79
|
+
| FEAT-01 | | | P0 | US-01 |
|
|
80
|
+
| FEAT-02 | | | P1 | US-02 |
|
|
81
|
+
|
|
82
|
+
> P0=核心必做,P1=重要
|
|
83
|
+
> 来源:引用 PRD 中的 US-XX(用户故事)或 FEAT-XX;无 PRD 时留空。
|
|
84
|
+
|
|
85
|
+
#### 2.2.2 字段约束 [按需]
|
|
86
|
+
|
|
87
|
+
> 涉及数据存储时填写。
|
|
88
|
+
|
|
89
|
+
**FEAT-01 字段约束**
|
|
90
|
+
|
|
91
|
+
| 字段名 | 字段类型 | 必填 | 约束 | 说明 |
|
|
92
|
+
|--------|---------|------|------|------|
|
|
93
|
+
| | | | | |
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
### 2.3 范围与边界 [必填]
|
|
98
|
+
|
|
99
|
+
| 类别 | 内容 |
|
|
100
|
+
|------|------|
|
|
101
|
+
| **范围(In Scope)** | 本次覆盖的功能场景 |
|
|
102
|
+
| **非范围(Out of Scope)** | 明确**不做**的功能 |
|
|
103
|
+
| **有意妥协 / 技术债** | 本次明知接受的取舍、欠债及后续偿还设想(无则填"无") |
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
### 2.4 验收条件 [必填]
|
|
108
|
+
|
|
109
|
+
#### 2.4.1 功能验收场景
|
|
110
|
+
|
|
111
|
+
> 每个 P0/P1 FEAT 至少 1 条正常 + 1 条异常场景;"操作步骤/预期结果"写到可直接转为自动化测试断言的粒度(明确输入与可观测输出)。场景 ID(S-/E-/B-)即测试用例编号,供 plan 拆解引用。
|
|
112
|
+
|
|
113
|
+
**正常场景**
|
|
114
|
+
|
|
115
|
+
| 场景ID | 功能ID | 优先级 | 操作步骤 | 预期结果 |
|
|
116
|
+
|--------|--------|--------|---------|---------|
|
|
117
|
+
| S-01 | FEAT-01 | P0 | 1. <步骤><br>2. <步骤> | <结果> |
|
|
118
|
+
|
|
119
|
+
**异常场景**
|
|
120
|
+
|
|
121
|
+
| 场景ID | 功能ID | 触发条件 | 系统行为 |
|
|
122
|
+
|--------|--------|---------|---------|
|
|
123
|
+
| E-01 | FEAT-01 | | |
|
|
124
|
+
|
|
125
|
+
#### 2.4.2 非功能指标 [按需]
|
|
126
|
+
|
|
127
|
+
| 指标ID | 指标名称 | 目标值 | 测量方法 |
|
|
128
|
+
|--------|---------|-------|---------|
|
|
129
|
+
| NFR-PERF-01 | 响应时间(P95) | ≤200ms | APM监控 |
|
|
130
|
+
| NFR-REL-01 | 可用性(SLA) | ≥99.9% | 年度可用时长 |
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## 3. 技术设计
|
|
135
|
+
|
|
136
|
+
### 3.1 技术选型 [按需]
|
|
137
|
+
|
|
138
|
+
> 新功能/重构必填;Bug 修复若沿用既有栈可省略。
|
|
139
|
+
|
|
140
|
+
| 类别 | 选型 | 版本 | 选型理由 |
|
|
141
|
+
|------|------|------|---------|
|
|
142
|
+
| 语言 | | | |
|
|
143
|
+
| 框架 | | | |
|
|
144
|
+
| 数据库 | | | |
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
### 3.2 架构设计
|
|
149
|
+
> mermaid 图规范:节点标签含 `.` `/` `+` 等特殊字符时必须加双引号(`A["label"]`);点线边标签用 `-.->|text|` 标准语法;避免 `&` 链式声明与紧凑式 `-.text.->`(多数渲染器解析失败)。
|
|
150
|
+
[按需]
|
|
151
|
+
|
|
152
|
+
> 新增模块/跨组件交互时必填;Bug 修复或局部改动可省略。
|
|
153
|
+
|
|
154
|
+
```mermaid
|
|
155
|
+
graph LR
|
|
156
|
+
A[前端] --> B[Handler] --> C[Service] --> D[(DB)]
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
| 层级 | 职责 |
|
|
160
|
+
|------|------|
|
|
161
|
+
| Handler | 参数校验、响应格式化 |
|
|
162
|
+
| Service | 核心业务逻辑 |
|
|
163
|
+
| DB | 数据持久化 |
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
### 3.3 接口设计 [按需]
|
|
168
|
+
|
|
169
|
+
> 涉及对外入口变更时必填;纯内部实现可省略。**按入口类型三选一**,删除不适用的形态。
|
|
170
|
+
|
|
171
|
+
#### 形态 B:CLI 命令 [CLI/脚本类选此]
|
|
172
|
+
|
|
173
|
+
| 命令 | 参数 / Flag | 说明 | 退出码 |
|
|
174
|
+
|------|------------|------|--------|
|
|
175
|
+
| `cmd sub` | `--flag` | | 0=成功 / 非 0=失败 |
|
|
176
|
+
|
|
177
|
+
> 明确 stdout / stderr 分工、错误文案、是否支持 `--json` 等机器可读输出。
|
|
178
|
+
|
|
179
|
+
#### 形态 C:函数 / 库接口 [库/内部模块选此]
|
|
180
|
+
|
|
181
|
+
| 函数签名 | 入参 | 返回 | 错误处理 |
|
|
182
|
+
|---------|------|------|---------|
|
|
183
|
+
| `fn(a: T) -> R` | | | 异常类型 / 错误码 |
|
|
184
|
+
|
|
185
|
+
#### 形态 A:HTTP API [Web 服务选此]
|
|
186
|
+
|
|
187
|
+
##### 接口清单
|
|
188
|
+
|
|
189
|
+
| 接口ID | 名称 | 方法 | 路径 | 详细 |
|
|
190
|
+
|--------|------|------|------|------|
|
|
191
|
+
| API-01 | | | | [详细 ↓](#api-01) |
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
#### API-01: {接口名称}
|
|
196
|
+
|
|
197
|
+
**接口契约**
|
|
198
|
+
|
|
199
|
+
```
|
|
200
|
+
POST /api/v1/xxx
|
|
201
|
+
Content-Type: application/json
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
**请求参数**
|
|
205
|
+
|
|
206
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
207
|
+
|------|------|------|------|
|
|
208
|
+
| | | | |
|
|
209
|
+
|
|
210
|
+
**请求示例**
|
|
211
|
+
|
|
212
|
+
```json
|
|
213
|
+
{}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
**响应参数**
|
|
217
|
+
|
|
218
|
+
| 参数 | 类型 | 说明 |
|
|
219
|
+
|------|------|------|
|
|
220
|
+
| code | int | 0=成功 |
|
|
221
|
+
| message | string | 提示信息 |
|
|
222
|
+
| data | object | 响应数据 |
|
|
223
|
+
|
|
224
|
+
**响应示例**
|
|
225
|
+
|
|
226
|
+
```json
|
|
227
|
+
{
|
|
228
|
+
"code": 0,
|
|
229
|
+
"message": "success",
|
|
230
|
+
"data": {}
|
|
231
|
+
}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
**错误码**
|
|
235
|
+
|
|
236
|
+
| 错误码 | 信息 | 场景 | HTTP状态码 |
|
|
237
|
+
|--------|------|------|----------|
|
|
238
|
+
| 40001 | 参数错误 | 校验失败 | 400 |
|
|
239
|
+
| 50000 | 服务器错误 | 系统异常 | 500 |
|
|
240
|
+
|
|
241
|
+
**处理逻辑**
|
|
242
|
+
|
|
243
|
+
```mermaid
|
|
244
|
+
flowchart TD
|
|
245
|
+
A[接收请求] --> B{参数校验}
|
|
246
|
+
B -->|失败| C[返回40001]
|
|
247
|
+
B -->|通过| D[业务处理]
|
|
248
|
+
D --> E{成功?}
|
|
249
|
+
E -->|否| F[返回50000]
|
|
250
|
+
E -->|是| G[返回成功]
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
### 3.4 性能与容量考量 [按需]
|
|
256
|
+
|
|
257
|
+
> 命中性能敏感点(写路径 / 高频 / 大数据量 / 并发)时填写;否则注明"无性能敏感点"。方案应在正确性基础上按最优性能设计,本节记录依据。
|
|
258
|
+
|
|
259
|
+
| 热点路径 | 预估负载 | 潜在瓶颈 | 应对策略 | 目标值 |
|
|
260
|
+
|---------|---------|---------|---------|--------|
|
|
261
|
+
| | (QPS/数据量,无实测填"待定") | | 索引/缓存/分页/批量/异步 | (如 P95≤200ms,无则"待定") |
|
|
262
|
+
|
|
263
|
+
> 性能依据:所选方案相比被放弃方案为什么更优(复杂度 / IO 次数 / 可缓存性)。
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## 4. 风险与依赖 [按需]
|
|
268
|
+
|
|
269
|
+
### 4.1 项目依赖
|
|
270
|
+
|
|
271
|
+
| 依赖模块 | 依赖内容 | 风险等级 |
|
|
272
|
+
|---------|---------|---------|
|
|
273
|
+
| | | |
|
|
274
|
+
|
|
275
|
+
### 4.2 风险识别
|
|
276
|
+
|
|
277
|
+
| 风险ID | 描述 | 影响 | 应对措施 |
|
|
278
|
+
|--------|------|------|---------|
|
|
279
|
+
| | | | |
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
## 附录:术语表
|
|
284
|
+
|
|
285
|
+
| 术语 | 定义 |
|
|
286
|
+
|------|------|
|
|
287
|
+
| NFR | Non-Functional Requirement,非功能性需求 |
|
|
288
|
+
| SLA | Service Level Agreement,服务等级协议 |
|
|
289
|
+
| P95 | 95th percentile,第95百分位响应时间 |
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
*文档结束*
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# PRD: {功能名称}
|
|
2
|
+
|
|
3
|
+
> **文档编号**: PRD-{日期}-{序号}
|
|
4
|
+
> **文档版本**: v1.0
|
|
5
|
+
> **创建日期**: YYYY-MM-DD
|
|
6
|
+
> **产品负责人**:
|
|
7
|
+
> **状态**: 草稿 / 评审中 / 已批准 / 开发中 / 已上线
|
|
8
|
+
|
|
9
|
+
**评审边界说明**:
|
|
10
|
+
- **需求基线**: 第 2-6 章(背景/用户/功能/非功能/范围)→ 通过后锁定
|
|
11
|
+
- **设计输入**: 第 3-6 章 → 为 `cf-task:align` 提供 US / FEAT / NFR / 范围
|
|
12
|
+
|
|
13
|
+
**ID 体系**: US(用户故事)、FEAT(功能)、NFR(非功能指标)
|
|
14
|
+
|
|
15
|
+
**适用场景**: 需求早期阶段,在设计之前
|
|
16
|
+
**不适用**: 已有明确技术方案(请直接用 cf-task:align)
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 目录
|
|
21
|
+
|
|
22
|
+
- [1. 文档控制](#1-文档控制)
|
|
23
|
+
- [1.1 责任人](#11-责任人)
|
|
24
|
+
- [1.2 修订历史](#12-修订历史)
|
|
25
|
+
- [2. 背景与目标](#2-背景与目标)
|
|
26
|
+
- [2.1 问题陈述](#21-问题陈述-必填)
|
|
27
|
+
- [2.2 目标与价值](#22-目标与价值-必填)
|
|
28
|
+
- [3. 用户与场景](#3-用户与场景)
|
|
29
|
+
- [3.1 目标用户](#31-目标用户-必填)
|
|
30
|
+
- [3.2 用户故事](#32-用户故事-必填)
|
|
31
|
+
- [4. 功能需求](#4-功能需求)
|
|
32
|
+
- [4.1 功能清单](#41-功能清单-必填)
|
|
33
|
+
- [4.2 边缘情况](#42-边缘情况-可选)
|
|
34
|
+
- [5. 非功能需求](#5-非功能需求-可选)
|
|
35
|
+
- [6. 范围与边界](#6-范围与边界-必填)
|
|
36
|
+
- [7. 依赖与风险](#7-依赖与风险-可选)
|
|
37
|
+
- [附录:术语表](#附录术语表)
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 1. 文档控制
|
|
42
|
+
|
|
43
|
+
### 1.1 责任人
|
|
44
|
+
|
|
45
|
+
| 角色 | 姓名 | 职责范围 |
|
|
46
|
+
|------|------|---------|
|
|
47
|
+
| 产品经理 | | 需求定义、业务验收 |
|
|
48
|
+
| 开发负责人 | | 技术方案确认 |
|
|
49
|
+
|
|
50
|
+
### 1.2 修订历史
|
|
51
|
+
|
|
52
|
+
| 版本 | 日期 | 作者 | 变更描述 |
|
|
53
|
+
|------|------|------|---------|
|
|
54
|
+
| v0.1 | YYYY-MM-DD | | 初始草稿 |
|
|
55
|
+
| v1.0 | YYYY-MM-DD | | 需求评审通过 |
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## 2. 背景与目标
|
|
60
|
+
|
|
61
|
+
### 2.1 问题陈述 [必填]
|
|
62
|
+
|
|
63
|
+
| 维度 | 内容 |
|
|
64
|
+
|------|------|
|
|
65
|
+
| **问题描述** | (用户遇到了 X 问题,导致 Y 后果) |
|
|
66
|
+
| **当前替代方案** | (现有解决方案是什么,为什么不够用) |
|
|
67
|
+
| **触发原因** | (需求来源、业务背景) |
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
### 2.2 目标与价值 [必填]
|
|
72
|
+
|
|
73
|
+
| 维度 | 内容 |
|
|
74
|
+
|------|------|
|
|
75
|
+
| **核心目标** | (一句话说明要达成的目标) |
|
|
76
|
+
| **预期价值** | (如"提升转化率X%"、"降低运维成本X%") |
|
|
77
|
+
|
|
78
|
+
**成功指标**
|
|
79
|
+
|
|
80
|
+
| 指标 | 当前值 | 目标值 | 衡量方式 |
|
|
81
|
+
|------|--------|--------|----------|
|
|
82
|
+
| | | | |
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 3. 用户与场景
|
|
87
|
+
|
|
88
|
+
### 3.1 目标用户 [必填]
|
|
89
|
+
|
|
90
|
+
| 维度 | 内容 |
|
|
91
|
+
|------|------|
|
|
92
|
+
| **用户画像** | (用户角色、规模) |
|
|
93
|
+
| **使用场景** | (典型使用场景描述) |
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
### 3.2 用户故事 [必填]
|
|
98
|
+
|
|
99
|
+
> 格式: As a [角色], I want to [操作], so that [价值]
|
|
100
|
+
|
|
101
|
+
| 编号 | 用户故事 | 优先级 |
|
|
102
|
+
|------|---------|--------|
|
|
103
|
+
| US-01 | 作为【角色】,我希望【操作】,以便【价值】 | P0 |
|
|
104
|
+
| US-02 | | P1 |
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## 4. 功能需求
|
|
109
|
+
|
|
110
|
+
### 4.1 功能清单 [必填]
|
|
111
|
+
|
|
112
|
+
| 功能ID | 功能名称 | 功能描述 | 优先级 | 来源用户故事 |
|
|
113
|
+
|--------|---------|---------|--------|-------------|
|
|
114
|
+
| FEAT-01 | | | P0 | US-01 |
|
|
115
|
+
| FEAT-02 | | | P1 | |
|
|
116
|
+
|
|
117
|
+
> P0=核心必做,P1=重要
|
|
118
|
+
|
|
119
|
+
#### FEAT-01: {功能名称}
|
|
120
|
+
|
|
121
|
+
- **描述**: <一句话说明>
|
|
122
|
+
- **验收标准**:
|
|
123
|
+
- [ ] <可验证的条件 1>
|
|
124
|
+
- [ ] <可验证的条件 2>
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
### 4.2 边缘情况 [可选]
|
|
129
|
+
|
|
130
|
+
| 场景 | 预期行为 |
|
|
131
|
+
|------|----------|
|
|
132
|
+
| | |
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## 5. 非功能需求 [可选]
|
|
137
|
+
|
|
138
|
+
| 指标ID | 类型 | 要求 |
|
|
139
|
+
|--------|------|------|
|
|
140
|
+
| NFR-PERF-01 | 性能 | <响应时间/吞吐量要求> |
|
|
141
|
+
| NFR-REL-01 | 可用性 | <SLA 要求> |
|
|
142
|
+
| NFR-SEC-01 | 安全 | <认证/授权/加密要求> |
|
|
143
|
+
| NFR-COMPAT-01 | 兼容性 | <支持版本> |
|
|
144
|
+
|
|
145
|
+
> 无 NFR 时整节可省略。design 模板的 3.5 质量实现方案 / 2.5.3 非功能指标将引用这些 NFR ID。
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## 6. 范围与边界 [必填]
|
|
150
|
+
|
|
151
|
+
| 类别 | 内容 |
|
|
152
|
+
|------|------|
|
|
153
|
+
| **范围(In Scope)** | 本次覆盖的功能场景 |
|
|
154
|
+
| **非范围(Out of Scope)** | 明确**不做**的功能 |
|
|
155
|
+
| **前置假设** | 设计依赖的前提条件 |
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## 7. 依赖与风险 [可选]
|
|
160
|
+
|
|
161
|
+
### 7.1 项目依赖
|
|
162
|
+
|
|
163
|
+
| 依赖方 | 依赖内容 | 最晚交付时间 | 风险等级 |
|
|
164
|
+
|--------|----------|--------------|---------|
|
|
165
|
+
| | | | |
|
|
166
|
+
|
|
167
|
+
### 7.2 风险识别
|
|
168
|
+
|
|
169
|
+
| 风险ID | 描述 | 影响 | 缓解方案 |
|
|
170
|
+
|--------|------|------|---------|
|
|
171
|
+
| | | | |
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## 附录:术语表
|
|
176
|
+
|
|
177
|
+
| 术语 | 定义 |
|
|
178
|
+
|------|------|
|
|
179
|
+
| PRD | Product Requirements Document,产品需求文档 |
|
|
180
|
+
| US | User Story,用户故事 |
|
|
181
|
+
| FEAT | Feature,功能项(US 的实现载体) |
|
|
182
|
+
| NFR | Non-Functional Requirement,非功能性需求 |
|
|
183
|
+
| SLA | Service Level Agreement,服务等级协议 |
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
*文档结束*
|
|
File without changes
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
validators:
|
|
2
|
+
- name: "Python 语法检查"
|
|
3
|
+
trigger: "**/*.py"
|
|
4
|
+
command: "python3 -m py_compile {files}"
|
|
5
|
+
timeout: 30000
|
|
6
|
+
on_fail: "检查语法错误"
|
|
7
|
+
|
|
8
|
+
- name: "TypeScript 类型检查"
|
|
9
|
+
trigger: "**/*.{ts,tsx}"
|
|
10
|
+
command: "npx tsc --noEmit"
|
|
11
|
+
timeout: 30000
|
|
12
|
+
on_fail: "检查类型定义,参见 specs/frontend/quality-standards.md"
|
|
13
|
+
|
|
14
|
+
- name: "Vue 类型检查"
|
|
15
|
+
trigger: "**/*.vue"
|
|
16
|
+
command: "npx vue-tsc --noEmit"
|
|
17
|
+
timeout: 30000
|
|
18
|
+
on_fail: "检查 Vue 组件类型定义,参见 specs/frontend/component-specs.md"
|
|
19
|
+
|
|
20
|
+
- name: "ESLint"
|
|
21
|
+
trigger: "**/*.{ts,tsx,js,jsx,vue}"
|
|
22
|
+
command: "npx eslint {files}"
|
|
23
|
+
timeout: 15000
|
|
24
|
+
on_fail: "运行 npx eslint --fix 自动修复,参见 specs/frontend/quality-standards.md"
|
|
25
|
+
|
|
26
|
+
- name: "Stylelint"
|
|
27
|
+
trigger: "**/*.{css,scss,less}"
|
|
28
|
+
command: "npx stylelint {files}"
|
|
29
|
+
timeout: 15000
|
|
30
|
+
on_fail: "运行 npx stylelint --fix 自动修复,参见 specs/frontend/component-specs.md"
|
|
31
|
+
|
|
32
|
+
- name: "前端单元测试"
|
|
33
|
+
trigger: "**/*.{ts,tsx,js,jsx,vue}"
|
|
34
|
+
command: "npx vitest run --reporter=dot"
|
|
35
|
+
timeout: 60000
|
|
36
|
+
on_fail: "前端测试失败,检查组件渲染和 mock 是否需要更新"
|
|
37
|
+
|
|
38
|
+
- name: "Python 类型检查"
|
|
39
|
+
trigger: "**/*.py"
|
|
40
|
+
command: "python3 -m mypy {files}"
|
|
41
|
+
timeout: 30000
|
|
42
|
+
on_fail: "检查类型注解,参见 specs/backend/code-quality-performance.md"
|
|
43
|
+
|
|
44
|
+
- name: "Pytest"
|
|
45
|
+
trigger: "**/*.py"
|
|
46
|
+
command: "python3 -m pytest --tb=short -q"
|
|
47
|
+
timeout: 60000
|
|
48
|
+
on_fail: "测试失败,检查断言和 mock 是否需要更新"
|