@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.
@@ -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
- <!-- ⚠️ CRITICAL: 根据系统类型选择合适的小节 -->
127
+ <!-- ⚠️ L0 写法原则:
128
+ - 后端 API: 只放 endpoint 路径 + 请求/响应结构摘要(无需完整 JSON 示例)
129
+ - Agent/游戏系统: 使用「操作契约表格」代替函数伪代码
130
+ - 完整参数细节、错误码列表 → {system}.detail.md §3
131
+ -->
123
132
 
124
- ### 5.1 API Design (如果是后端系统)
133
+ ### 5.1 操作契约表 (Operation Contracts)
125
134
 
126
- #### 5.1.1 POST /auth/login [REQ-001]
127
- **Purpose**: 用户登录认证
135
+ <!-- 核心格式:用表格代替函数伪代码。每行覆盖一个原子操作。 -->
136
+ <!-- 「detail 链接」填写 {system}.detail.md 的对应 §章节号 -->
128
137
 
129
- **Request**:
130
- ```json
131
- {
132
- "email": "user@example.com",
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
- **Response (Success - 200)**:
138
- ```json
139
- {
140
- "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
141
- "user": {
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
- **Response (Error - 401)**:
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
- **Rate Limit**: 5 requests/minute/IP
160
- **Authentication**: None (public endpoint)
151
+ <!-- 与其他系统的边界协议:Protocol / ABC 接口签名,不含方法体 -->
161
152
 
162
- ---
163
-
164
- ### 5.2 Component Interface (如果是前端系统)
165
-
166
- #### 5.2.1 LoginForm Component [REQ-001]
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
- **Events**:
178
- - `onSuccess(token: string)`: 登录成功时触发
179
- - `onError(error: Error)`: 登录失败时触发
160
+ ### 5.3 HTTP API 端点摘要 (如适用)
180
161
 
181
- **Usage**:
182
- ```jsx
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
- ### 5.3 Message Format (如果是Agent/消息系统)
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
- ### 6.1 Data Structures (数据结构)
219
-
220
- #### User Entity
221
- ```typescript
222
- interface User {
223
- id: string; // UUID v4
224
- email: string; // Unique, RFC 5322 compliant
225
- passwordHash: string; // bcrypt hash (rounds=10)
226
- name: string;
227
- createdAt: Date;
228
- updatedAt: Date;
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 Database Schema (如适用)
233
-
234
- #### Users Table
235
- ```sql
236
- CREATE TABLE users (
237
- id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
238
- email VARCHAR(255) UNIQUE NOT NULL,
239
- password_hash VARCHAR(255) NOT NULL,
240
- name VARCHAR(255),
241
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
242
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
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 | Choice | Rationale |
261
- |--------|--------|-----------|
262
- | Framework | FastAPI | 高性能、异步、类型安全、OpenAPI自动生成 |
263
- | Database | PostgreSQL | ACID、JSON支持、成熟生态、团队熟悉 |
264
- | Cache | Redis | 高性能、丰富数据结构、持久化选项 |
265
- | ORM | SQLAlchemy | 类型安全、灵活、异步支持 |
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 | Severity | Mitigation |
331
- |------|:--------:|-----------|
332
- | SQL注入 | | 使用ORM参数化查询,禁止拼接SQL |
333
- | XSS | | 输入验证、输出转义、CSP头 |
334
- | CSRF | | CSRF Token(如适用) |
335
- | 密码暴力破解 | | Rate limiting (5次/分钟/IP) |
336
- | JWT伪造 | | 使用强密钥(HS256, 256-bit),定期轮换 |
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 | Changes | Author |
507
- |---------|------|---------|--------|
508
- | 1.0 | 2026-01-08 | 初始版本 | XXX |
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. **追溯链**: 通过[REQ-XXX]引用PRD需求,而不是复制内容
517
- 3. **约束继承**: 从PRD和ADR继承约束和决策
518
- 4. **Trade-offs说明**: 每个重要技术选型都要说明"为什么选A不选B"
519
- 5. **可视化**: 使用Mermaid图表,一图胜千言
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
- - **根据系统类型选择Interface Design小节**:
525
- - 后端系统 → 5.1 API Design
526
- - 前端系统 5.2 Component Interface
527
- - Agent系统 5.3 Message Format
528
-
529
- **小项目简化策略**:
530
- - 可省略: 13 (未来考虑), 14 (附录)
531
- - 可简化: 8 (Trade-offs, 只保留关键决策), 12 (部署, 简化为部署命令)
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
- #### T005-CHK - [Verification] Verify US01 - User Authentication
74
+ #### INT-S2 - [MILESTONE] S2 集成验证 Core Logic
64
75
  - **User Story**: US01
65
- - **Type**: Checkpoint (Story Milestone)
66
- - **Description**: Validate entire authentication flow works end-to-end.
67
- - **Dependencies**: All US01 tasks (T001-T005)
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`