@haaaiawd/anws 1.0.1 → 1.2.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/lib/init.js +24 -0
- package/lib/update.js +55 -0
- package/package.json +1 -1
- package/templates/.agent/rules/agents.md +112 -90
- package/templates/.agent/skills/design-reviewer/SKILL.md +161 -0
- package/templates/.agent/skills/spec-writer/SKILL.md +50 -0
- package/templates/.agent/skills/spec-writer/references/prd_template.md +116 -113
- package/templates/.agent/skills/system-designer/SKILL.md +113 -19
- package/templates/.agent/skills/system-designer/references/system-design-detail-template.md +198 -0
- package/templates/.agent/skills/system-designer/references/system-design-template.md +118 -145
- package/templates/.agent/skills/task-planner/SKILL.md +60 -1
- package/templates/.agent/skills/task-planner/references/TASK_TEMPLATE.md +15 -4
- package/templates/.agent/skills/task-reviewer/SKILL.md +287 -0
- package/templates/.agent/workflows/blueprint.md +146 -11
- package/templates/.agent/workflows/challenge.md +113 -127
- package/templates/.agent/workflows/change.md +8 -0
- package/templates/.agent/workflows/craft.md +8 -0
- package/templates/.agent/workflows/design-system.md +88 -17
- package/templates/.agent/workflows/explore.md +9 -0
- package/templates/.agent/workflows/forge.md +95 -42
- package/templates/.agent/workflows/genesis.md +36 -2
- package/templates/.agent/workflows/quickstart.md +262 -0
- package/templates/.agent/workflows/scout.md +10 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# {System Name} 系统设计文档
|
|
1
|
+
# {System Name} 系统设计文档 (L0 — 导航层)
|
|
2
2
|
|
|
3
3
|
**System ID**: {system-id} (如: frontend-system, backend-api-system)
|
|
4
4
|
**Project**: [Project Name]
|
|
@@ -7,6 +7,11 @@
|
|
|
7
7
|
**Author**: [Author Name or Agent]
|
|
8
8
|
**Date**: [YYYY-MM-DD]
|
|
9
9
|
|
|
10
|
+
> **📖 文档层级说明**
|
|
11
|
+
> - **本文件 (L0)**: 导航层。包含架构图、操作契约表、设计决策。面向快速理解与任务规划。
|
|
12
|
+
> - **[{system}-detail.md](./{system-id}.detail.md) (L1)**: 实现层。包含完整伪代码、配置常量、边缘情况。仅在 `/forge` 任务明确引用时加载。
|
|
13
|
+
> - **L1 文件按需创建**:触发拆分规则 R1-R5 任意一条时,才需要创建对应的 `.detail.md`。
|
|
14
|
+
|
|
10
15
|
---
|
|
11
16
|
|
|
12
17
|
## 1. 概览 (Overview)
|
|
@@ -88,10 +93,10 @@ graph TD
|
|
|
88
93
|
### 4.2 Core Components (核心组件)
|
|
89
94
|
<!-- 每个组件的职责和技术栈 -->
|
|
90
95
|
|
|
91
|
-
| Component Name | Responsibility | Tech Stack | Notes
|
|
92
|
-
|
|
93
|
-
| [Component 1]
|
|
94
|
-
| [Component 2]
|
|
96
|
+
| Component Name | Responsibility | Tech Stack | Notes |
|
|
97
|
+
| -------------- | -------------- | ---------- | ------ |
|
|
98
|
+
| [Component 1] | [职责描述] | [技术] | [备注] |
|
|
99
|
+
| [Component 2] | [职责描述] | [技术] | [备注] |
|
|
95
100
|
|
|
96
101
|
### 4.3 Data Flow (数据流)
|
|
97
102
|
<!-- 描述数据如何在组件间流动 -->
|
|
@@ -119,135 +124,95 @@ sequenceDiagram
|
|
|
119
124
|
|
|
120
125
|
## 5. 接口设计 (Interface Design)
|
|
121
126
|
|
|
122
|
-
<!-- ⚠️
|
|
127
|
+
<!-- ⚠️ L0 写法原则:
|
|
128
|
+
- 后端 API: 只放 endpoint 路径 + 请求/响应结构摘要(无需完整 JSON 示例)
|
|
129
|
+
- Agent/游戏系统: 使用「操作契约表格」代替函数伪代码
|
|
130
|
+
- 完整参数细节、错误码列表 → {system}.detail.md §3
|
|
131
|
+
-->
|
|
123
132
|
|
|
124
|
-
### 5.1
|
|
133
|
+
### 5.1 操作契约表 (Operation Contracts)
|
|
125
134
|
|
|
126
|
-
|
|
127
|
-
|
|
135
|
+
<!-- ⭐ 核心格式:用表格代替函数伪代码。每行覆盖一个原子操作。 -->
|
|
136
|
+
<!-- 「detail 链接」填写 {system}.detail.md 的对应 §章节号 -->
|
|
128
137
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
"password": "password123"
|
|
134
|
-
}
|
|
135
|
-
```
|
|
138
|
+
| 操作 | [REQ-XXX] | 前置条件 | 消耗/输入 | 产出/副作用 | 实现细节 |
|
|
139
|
+
| -------------------- | :-------: | ------------ | --------- | ------------ | :-----------------: |
|
|
140
|
+
| `operation_a(param)` | [REQ-001] | 条件1; 条件2 | cost★ | 状态变化描述 | [§3.1](./detail.md) |
|
|
141
|
+
| `operation_b(param)` | [REQ-002] | 条件1 | cost★ | 状态变化描述 | [§3.2](./detail.md) |
|
|
136
142
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
"id": "550e8400-e29b-41d4-a716-446655440000",
|
|
143
|
-
"email": "user@example.com",
|
|
144
|
-
"name": "John Doe"
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
```
|
|
143
|
+
> **填写说明**:
|
|
144
|
+
> - **操作**: 使用函数签名风格 `func_name(key_params)`,参数只写关键入参类型,不写类型注解
|
|
145
|
+
> - **前置条件**: 简洁列举,以「;」分隔,不超过 3 个
|
|
146
|
+
> - **产出/副作用**: 描述状态变化,如「生成 Boat,承载 unit;原 unit 消失」
|
|
147
|
+
> - **实现细节**: 链接到 `.detail.md` 对应章节(如尚未创建,填「待补充」)
|
|
148
148
|
|
|
149
|
-
|
|
150
|
-
```json
|
|
151
|
-
{
|
|
152
|
-
"error": {
|
|
153
|
-
"code": "INVALID_CREDENTIALS",
|
|
154
|
-
"message": "Invalid email or password"
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
```
|
|
149
|
+
### 5.2 跨系统接口协议 (Cross-System Interface)
|
|
158
150
|
|
|
159
|
-
|
|
160
|
-
**Authentication**: None (public endpoint)
|
|
151
|
+
<!-- 与其他系统的边界协议:Protocol / ABC 接口签名,不含方法体 -->
|
|
161
152
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
**Props**:
|
|
169
|
-
```typescript
|
|
170
|
-
interface LoginFormProps {
|
|
171
|
-
onSuccess: (token: string) => void;
|
|
172
|
-
onError: (error: Error) => void;
|
|
173
|
-
isLoading?: boolean;
|
|
174
|
-
}
|
|
153
|
+
```python
|
|
154
|
+
# 示例:本系统暴露给其他系统调用的接口协议(Protocol/ABC)
|
|
155
|
+
class ISystemName(Protocol):
|
|
156
|
+
def method_a(self, param: Type) -> ReturnType: ...
|
|
157
|
+
def method_b(self, param: Type) -> ReturnType: ...
|
|
175
158
|
```
|
|
176
159
|
|
|
177
|
-
|
|
178
|
-
- `onSuccess(token: string)`: 登录成功时触发
|
|
179
|
-
- `onError(error: Error)`: 登录失败时触发
|
|
160
|
+
### 5.3 HTTP API 端点摘要 (如适用)
|
|
180
161
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
<LoginForm
|
|
184
|
-
onSuccess={(token) => saveToken(token)}
|
|
185
|
-
onError={(error) => showError(error.message)}
|
|
186
|
-
/>
|
|
187
|
-
```
|
|
162
|
+
<!-- 仅后端服务系统才需要此节,Agent/游戏核心系统跳过 -->
|
|
163
|
+
<!-- 只列 endpoint 清单,不写完整 JSON 示例(JSON 示例 → detail.md) -->
|
|
188
164
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
#### 5.3.1 Tool Call Message [REQ-XXX]
|
|
194
|
-
|
|
195
|
-
**Format**:
|
|
196
|
-
```json
|
|
197
|
-
{
|
|
198
|
-
"tool": "search_code",
|
|
199
|
-
"parameters": {
|
|
200
|
-
"query": "function authenticate",
|
|
201
|
-
"scope": "src/"
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
**Response**:
|
|
207
|
-
```json
|
|
208
|
-
{
|
|
209
|
-
"status": "success",
|
|
210
|
-
"results": [...]
|
|
211
|
-
}
|
|
212
|
-
```
|
|
165
|
+
| Method | Path | Auth | 用途 | [REQ-XXX] |
|
|
166
|
+
| ------ | ------------- | :---: | ------------------ | :-------: |
|
|
167
|
+
| POST | `/auth/login` | 否 | 用户登录,返回 JWT | [REQ-001] |
|
|
168
|
+
| GET | `/users/me` | JWT | 获取当前用户信息 | [REQ-002] |
|
|
213
169
|
|
|
214
170
|
---
|
|
215
171
|
|
|
216
172
|
## 6. 数据模型 (Data Model)
|
|
217
173
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
174
|
+
<!-- ⚠️ L0 写法原则 — 请严格遵守:
|
|
175
|
+
✅ 允许: @dataclass 属性字段声明
|
|
176
|
+
✅ 允许: Protocol 风格的方法签名 (def foo(self, x: T) -> R: ...)
|
|
177
|
+
❌ 禁止: 任何方法体 (哪怕只有 2 行)
|
|
178
|
+
❌ 禁止: 注释风格的方法列表 (# def foo... 这种)
|
|
179
|
+
❌ 禁止: 配置常量字典 (UNIT_CONFIG = {...})
|
|
180
|
+
→ 以上内容全部放入 {system}.detail.md §1 和 §2
|
|
181
|
+
-->
|
|
182
|
+
|
|
183
|
+
### 6.1 核心实体 (Core Entities)
|
|
184
|
+
|
|
185
|
+
```python
|
|
186
|
+
# ── 示例: 只放属性字段 + 签名 ──
|
|
187
|
+
@dataclass
|
|
188
|
+
class EntityName:
|
|
189
|
+
# 属性字段
|
|
190
|
+
id: str
|
|
191
|
+
field_a: TypeA
|
|
192
|
+
field_b: TypeB = default_value
|
|
193
|
+
|
|
194
|
+
# 方法签名 (不写方法体, 只写到 ...)
|
|
195
|
+
def some_method(self, param: Type) -> ReturnType: ...
|
|
196
|
+
def another_method(self) -> bool: ...
|
|
197
|
+
# 完整方法实现见 {system}.detail.md §2.1
|
|
230
198
|
```
|
|
231
199
|
|
|
232
|
-
### 6.2
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
-- Indexes
|
|
246
|
-
CREATE INDEX idx_users_email ON users(email);
|
|
247
|
-
CREATE INDEX idx_users_created_at ON users(created_at DESC);
|
|
200
|
+
### 6.2 实体关系图 (Entity Relationship)
|
|
201
|
+
|
|
202
|
+
```mermaid
|
|
203
|
+
classDiagram
|
|
204
|
+
class EntityA {
|
|
205
|
+
+id: str
|
|
206
|
+
+field_a: TypeA
|
|
207
|
+
}
|
|
208
|
+
class EntityB {
|
|
209
|
+
+id: str
|
|
210
|
+
+entity_a_id: str
|
|
211
|
+
}
|
|
212
|
+
EntityA "1" --> "0..*" EntityB : has
|
|
248
213
|
```
|
|
249
214
|
|
|
250
|
-
### 6.3 Data Flow Direction
|
|
215
|
+
### 6.3 数据流向 (Data Flow Direction)
|
|
251
216
|
[数据如何在系统间流动?存储在哪里?]
|
|
252
217
|
|
|
253
218
|
---
|
|
@@ -257,12 +222,12 @@ CREATE INDEX idx_users_created_at ON users(created_at DESC);
|
|
|
257
222
|
### 7.1 Core Technologies (核心技术)
|
|
258
223
|
<!-- 从ADR继承,或新增系统级技术决策 -->
|
|
259
224
|
|
|
260
|
-
| Domain
|
|
261
|
-
|
|
262
|
-
| Framework | FastAPI
|
|
263
|
-
| Database
|
|
264
|
-
| Cache
|
|
265
|
-
| ORM
|
|
225
|
+
| Domain | Choice | Rationale |
|
|
226
|
+
| --------- | ---------- | --------------------------------------- |
|
|
227
|
+
| Framework | FastAPI | 高性能、异步、类型安全、OpenAPI自动生成 |
|
|
228
|
+
| Database | PostgreSQL | ACID、JSON支持、成熟生态、团队熟悉 |
|
|
229
|
+
| Cache | Redis | 高性能、丰富数据结构、持久化选项 |
|
|
230
|
+
| ORM | SQLAlchemy | 类型安全、灵活、异步支持 |
|
|
266
231
|
|
|
267
232
|
### 7.2 Key Libraries/Dependencies (关键依赖)
|
|
268
233
|
- `pydantic ^2.0`: 数据验证、序列化
|
|
@@ -327,13 +292,13 @@ CREATE INDEX idx_users_created_at ON users(created_at DESC);
|
|
|
327
292
|
|
|
328
293
|
### 9.3 Security Risks & Mitigations (安全风险与缓解)
|
|
329
294
|
|
|
330
|
-
| Risk
|
|
331
|
-
|
|
332
|
-
| SQL注入
|
|
333
|
-
| XSS
|
|
334
|
-
| CSRF
|
|
335
|
-
| 密码暴力破解 |
|
|
336
|
-
| JWT伪造
|
|
295
|
+
| Risk | Severity | Mitigation |
|
|
296
|
+
| ------------ | :------: | -------------------------------------- |
|
|
297
|
+
| SQL注入 | 高 | 使用ORM参数化查询,禁止拼接SQL |
|
|
298
|
+
| XSS | 中 | 输入验证、输出转义、CSP头 |
|
|
299
|
+
| CSRF | 中 | CSRF Token(如适用) |
|
|
300
|
+
| 密码暴力破解 | 高 | Rate limiting (5次/分钟/IP) |
|
|
301
|
+
| JWT伪造 | 高 | 使用强密钥(HS256, 256-bit),定期轮换 |
|
|
337
302
|
|
|
338
303
|
---
|
|
339
304
|
|
|
@@ -503,31 +468,39 @@ CREATE INDEX idx_users_created_at ON users(created_at DESC);
|
|
|
503
468
|
|
|
504
469
|
### 14.3 Change Log (变更日志)
|
|
505
470
|
|
|
506
|
-
| Version | Date
|
|
507
|
-
|
|
508
|
-
| 1.0
|
|
471
|
+
| Version | Date | Changes | Author |
|
|
472
|
+
| ------- | ---------- | -------- | ------ |
|
|
473
|
+
| 1.0 | 2026-01-08 | 初始版本 | XXX |
|
|
509
474
|
|
|
510
475
|
---
|
|
511
476
|
|
|
512
477
|
<!-- ⚠️ CRITICAL 使用指南 -->
|
|
513
478
|
<!--
|
|
514
|
-
|
|
515
|
-
1.
|
|
516
|
-
2.
|
|
517
|
-
3.
|
|
518
|
-
4.
|
|
519
|
-
5.
|
|
479
|
+
**L0 文档撰写原则 (本文件)**:
|
|
480
|
+
1. **导航层定位**: 面向快速理解和任务规划,不展示实现细节
|
|
481
|
+
2. **操作契约表格**: §5.1 用表格代替函数伪代码,每行对应一个原子操作
|
|
482
|
+
3. **属性声明优先**: §6 只放字段声明,不放方法体
|
|
483
|
+
4. **追溯链**: 通过 [REQ-XXX] 引用PRD需求,不复制内容
|
|
484
|
+
5. **约束继承**: 从PRD和ADR继承约束和决策,不能放松
|
|
485
|
+
6. **Trade-offs说明**: 每个重要技术选型都说明「为什么选A不选B」
|
|
486
|
+
7. **Mermaid优先**: 架构图、数据流、决策树 → 用图
|
|
487
|
+
|
|
488
|
+
**L1 文件拆分规则 (触发任意一条即创建 .detail.md)**:
|
|
489
|
+
- R1: 单个代码块 > 30 行
|
|
490
|
+
- R2: 文档代码块总行数 > 200 行
|
|
491
|
+
- R3: 配置常量字典条目 > 5 个
|
|
492
|
+
- R4: 版本内联注释 (# vX.X 变更) 出现 > 5 处
|
|
493
|
+
- R5: 文档总行数 > 500 行
|
|
520
494
|
|
|
521
495
|
**章节使用指南**:
|
|
522
496
|
- **必需章节**: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
|
|
523
497
|
- **可选章节**: 12 (部署,小项目可简化), 13 (未来,可简化), 14 (附录)
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
-
|
|
531
|
-
-
|
|
532
|
-
- 但必须保留: 4 (架构), 5 (接口), 6 (数据模型), 11 (测试)
|
|
498
|
+
|
|
499
|
+
**L1 文件 ({system}.detail.md) 内容**:
|
|
500
|
+
- §1 配置常量 (UNIT_CONFIG 等)
|
|
501
|
+
- §2 完整类定义 (含方法体)
|
|
502
|
+
- §3 算法伪代码 (完整函数体)
|
|
503
|
+
- §4 决策树展开
|
|
504
|
+
- §5 边缘情况
|
|
505
|
+
- §6 测试辅助
|
|
533
506
|
-->
|
|
@@ -101,7 +101,7 @@ description: 使用WBS方法将系统设计文档分解为层次化任务。支
|
|
|
101
101
|
- [ ] **T1.1.1** [基础]: 设置 Vite + React 项目
|
|
102
102
|
- **描述**: 初始化前端项目,配置Vite、React、TypeScript
|
|
103
103
|
- **输入**: PRD (React技术栈要求)
|
|
104
|
-
- **输出**: 可运行的Hello World应用
|
|
104
|
+
- **输出**: 可运行的Hello World应用 (`src/App.tsx`, `vite.config.ts`)
|
|
105
105
|
- **验收标准**:
|
|
106
106
|
- [ ] `npm run dev` 正常启动
|
|
107
107
|
- [ ] 页面显示"Hello World"
|
|
@@ -111,6 +111,16 @@ description: 使用WBS方法将系统设计文档分解为层次化任务。支
|
|
|
111
111
|
- **优先级**: P0
|
|
112
112
|
```
|
|
113
113
|
|
|
114
|
+
### 接口追溯规则
|
|
115
|
+
|
|
116
|
+
> [!IMPORTANT]
|
|
117
|
+
> **任务间的输入/输出必须对齐。**
|
|
118
|
+
>
|
|
119
|
+
> 如果任务 B 依赖任务 A,则 B 的「输入」必须明确引用 A 的「输出」的具体产物(文件路径、接口名、数据格式)。
|
|
120
|
+
>
|
|
121
|
+
> - ✅ 好: B 输入 = “T1.1.1 产出的 `App.tsx` 组件 + `vite.config.ts` 配置”
|
|
122
|
+
> - ❌ 差: B 输入 = “前端项目”
|
|
123
|
+
|
|
114
124
|
---
|
|
115
125
|
|
|
116
126
|
## 📋 任务元数据完整性
|
|
@@ -338,6 +348,50 @@ graph TD
|
|
|
338
348
|
|
|
339
349
|
---
|
|
340
350
|
|
|
351
|
+
## 🎯 Sprint 退出标准与集成验证任务
|
|
352
|
+
|
|
353
|
+
### Sprint 退出标准
|
|
354
|
+
|
|
355
|
+
> [!IMPORTANT]
|
|
356
|
+
> **每个 Sprint/里程碑必须有明确的退出标准。**
|
|
357
|
+
>
|
|
358
|
+
> 退出标准定义"什么算做完",它不是模糊的"任务都打勾了",而是**可演示、可验证的具体状态**。
|
|
359
|
+
|
|
360
|
+
**Sprint 路线图格式**:
|
|
361
|
+
```markdown
|
|
362
|
+
| Sprint | 代号 | 核心任务 | 退出标准 | 预估 |
|
|
363
|
+
|--------|------|---------|---------|------|
|
|
364
|
+
| S1 | Hello World | 基础设施+数据 | headless 运行 2 国 5 回合 + 基本渲染可见 | 3-4d |
|
|
365
|
+
| S2 | 功能成型 | 实体+交互 | 完整功能可演示 + HUD 显示资源 | 5-6d |
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
**退出标准要求**:
|
|
369
|
+
- 必须是可客观验证的(可截图/录屏/日志证明)
|
|
370
|
+
- 必须涵盖跨系统集成(而非单个组件)
|
|
371
|
+
- 描述用户/开发者能观察到的行为,而非内部实现细节
|
|
372
|
+
|
|
373
|
+
### 集成验证任务 (INT Task)
|
|
374
|
+
|
|
375
|
+
每个 Sprint 末尾生成一个 **INT-S{N}** 任务,专门验证退出标准:
|
|
376
|
+
|
|
377
|
+
```markdown
|
|
378
|
+
- [ ] **INT-S{N}** [MILESTONE]: S{N} 集成验证 — {代号}
|
|
379
|
+
- **描述**: 验证 S{N} 退出标准
|
|
380
|
+
- **输入**: S{N} 所有任务的产出
|
|
381
|
+
- **输出**: 集成验证报告(通过/失败 + Bug 清单)
|
|
382
|
+
- **验收标准**:
|
|
383
|
+
- Given S{N} 所有任务已完成
|
|
384
|
+
- When 逐条执行退出标准中的检查
|
|
385
|
+
- Then 全部通过 → Sprint 完成; 有失败 → 记录 Bug
|
|
386
|
+
- **验证说明**: 按退出标准逐条执行,截图/录屏/日志确认
|
|
387
|
+
- **估时**: 2-4h
|
|
388
|
+
- **依赖**: S{N} 最后一个任务
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
INT 任务是该 Sprint 的"关门任务"。**未通过 INT 任务的 Sprint 不得标记为完成。**
|
|
392
|
+
|
|
393
|
+
---
|
|
394
|
+
|
|
341
395
|
## 💡 常见场景与模式
|
|
342
396
|
|
|
343
397
|
### 场景1: 新功能开发
|
|
@@ -427,6 +481,11 @@ Phase 3: 回归测试 (Regression)
|
|
|
427
481
|
- [ ] 所有Task关联PRD需求或标注为[基础]
|
|
428
482
|
- [ ] 跨系统集成任务已识别
|
|
429
483
|
|
|
484
|
+
### User Story 覆盖
|
|
485
|
+
- [ ] 每个 US-XXX 有足够的 tasks 覆盖其所有涉及系统
|
|
486
|
+
- [ ] 每个 US 的 task 链能形成可独立验证的闭环
|
|
487
|
+
- [ ] 高优先级 US (P0) 的 task 分布在靠前的 Sprint
|
|
488
|
+
|
|
430
489
|
---
|
|
431
490
|
|
|
432
491
|
## 🚀 快速上手示例
|
|
@@ -50,21 +50,32 @@
|
|
|
50
50
|
|
|
51
51
|
---
|
|
52
52
|
|
|
53
|
+
## 📊 Sprint 路线图
|
|
54
|
+
|
|
55
|
+
| Sprint | 代号 | 核心任务 | 退出标准 | 预估 |
|
|
56
|
+
|--------|------|---------|---------|------|
|
|
57
|
+
| S1 | Foundation | T001-T002 | DB 可连接 + 环境变量生效 | 1d |
|
|
58
|
+
| S2 | Core Logic | T003-T005 | 完整认证流程可运行 | 2d |
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
53
62
|
### Phase 3: Integration
|
|
54
63
|
|
|
55
64
|
#### T005 - Login Endpoint
|
|
56
65
|
- **User Story**: US01
|
|
57
66
|
- **Description**: Implement `POST /api/login` that validates credentials and returns JWT.
|
|
58
67
|
- **Dependencies**: T003 (User table populated), T004 (JWT generator ready)
|
|
68
|
+
- **Input**: T003 产出的 `users` 表 + T004 产出的 `generate_token()` 函数
|
|
69
|
+
- **Output**: `/api/login` 端点 (`src/routes/auth.js`)
|
|
59
70
|
- **Done When**:
|
|
60
71
|
1. Valid login returns `{token: "..."}`.
|
|
61
72
|
2. Invalid login returns 401.
|
|
62
73
|
|
|
63
|
-
####
|
|
74
|
+
#### INT-S2 - [MILESTONE] S2 集成验证 — Core Logic
|
|
64
75
|
- **User Story**: US01
|
|
65
|
-
- **Type**:
|
|
66
|
-
- **Description**:
|
|
67
|
-
- **Dependencies**: All
|
|
76
|
+
- **Type**: Integration Verification (Sprint Gate)
|
|
77
|
+
- **Description**: 验证 S2 退出标准:完整认证流程可运行
|
|
78
|
+
- **Dependencies**: All S2 tasks (T003-T005)
|
|
68
79
|
- **Done When**:
|
|
69
80
|
1. Run `npm run dev` or equivalent
|
|
70
81
|
2. Register a new user via `/api/register`
|