jsharness 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/.harness/README.md +199 -0
- package/.harness/agents/code-reviewer/contract.yaml +64 -0
- package/.harness/agents/developer/contract.yaml +72 -0
- package/.harness/agents/gate-controller/contract.yaml +64 -0
- package/.harness/agents/project-manager/contract.yaml +77 -0
- package/.harness/agents/prompt-templates.md +352 -0
- package/.harness/agents/requirements-analyst/contract.yaml +64 -0
- package/.harness/agents/solution-designer/contract.yaml +75 -0
- package/.harness/agents/tester/contract.yaml +92 -0
- package/.harness/config/models.yaml +67 -0
- package/.harness/dev-map/backend/api-definition.md +131 -0
- package/.harness/dev-map/backend/auth-security.md +131 -0
- package/.harness/dev-map/backend/conventions-java.md +471 -0
- package/.harness/dev-map/backend/conventions.md +192 -0
- package/.harness/dev-map/backend/database.md +106 -0
- package/.harness/dev-map/backend/structure.md +140 -0
- package/.harness/dev-map/decisions.md +275 -0
- package/.harness/dev-map/frontend/api-integration.md +139 -0
- package/.harness/dev-map/frontend/components.md +178 -0
- package/.harness/dev-map/frontend/conventions.md +416 -0
- package/.harness/dev-map/frontend/state-management.md +170 -0
- package/.harness/dev-map/frontend/structure.md +103 -0
- package/.harness/dev-map/overview.md +267 -0
- package/.harness/docs/integration-test-plan.md +248 -0
- package/.harness/docs/team-guidelines/README.md +161 -0
- package/.harness/docs/team-guidelines/arch-team.md +811 -0
- package/.harness/docs/team-guidelines/collaboration.md +556 -0
- package/.harness/docs/team-guidelines/pm-team.md +337 -0
- package/.harness/docs/team-guidelines/qa-team.md +562 -0
- package/.harness/docs/team-guidelines/rd-team.md +714 -0
- package/.harness/docs/training-materials.md +280 -0
- package/.harness/gate/baseline.js +220 -0
- package/.harness/gate/checks/build-gates-frontend.js +152 -0
- package/.harness/gate/checks/build-gates-java.js +155 -0
- package/.harness/gate/checks/build-gates.js +119 -0
- package/.harness/gate/checks/engineering-consistency.js +138 -0
- package/.harness/gate/checks/security-quality.js +129 -0
- package/.harness/gate/checks/static-compliance.js +313 -0
- package/.harness/gate/checks/test-compliance.js +114 -0
- package/.harness/gate/index.js +315 -0
- package/.harness/mcp/config.yaml +435 -0
- package/.harness/rules/global/coding-standard.md +232 -0
- package/.harness/rules/global/commit-convention.md +165 -0
- package/.harness/rules/global/process-discipline.md +192 -0
- package/.harness/rules/global/security-baseline.md +306 -0
- package/.harness/rules/project/frontend-vue3.md +293 -0
- package/.harness/rules/project/java-backend.md +460 -0
- package/.harness/rules/project/web-specific.md +231 -0
- package/.harness/skills/build.md +192 -0
- package/.harness/skills/code-review.md +251 -0
- package/.harness/skills/docker-build.md +227 -0
- package/.harness/skills/docs-update.md +164 -0
- package/.harness/skills/java-build.md +261 -0
- package/.harness/skills/lint-check.md +482 -0
- package/.harness/skills/task-board-maintenance.md +105 -0
- package/.harness/skills/test-api.md +461 -0
- package/.harness/skills/test-e2e.md +431 -0
- package/.harness/skills/test-unit.md +649 -0
- package/.harness/skills/vue-frontend-build.md +344 -0
- package/.harness/specs/quality-feedback/implementation-guide.md +350 -0
- package/.harness/task-board.md +121 -0
- package/.harness/workflow/definition.yaml +504 -0
- package/.harness/workflow/validate.js +320 -0
- package/.harness/workflow/variants.yaml +253 -0
- package/README.md +237 -0
- package/bin/jsharness.js +53 -0
- package/lib/index.mjs +778 -0
- package/package.json +1 -0
|
@@ -0,0 +1,811 @@
|
|
|
1
|
+
# 架构与技术方案组 Harness 使用规范
|
|
2
|
+
|
|
3
|
+
> **适用角色**: 架构师、技术负责人、高级工程师、方案设计师
|
|
4
|
+
> **对应 Agent**: 方案设计师 Agent (solution-designer) + 闸门总控 Agent (gate-controller)
|
|
5
|
+
> **模型档位**: Standard(方案设计)/ Strong(闸门评估)
|
|
6
|
+
> **参考契约**: `.harness/agents/solution-designer/contract.yaml` + `.harness/agents/gate-controller/contract.yaml`
|
|
7
|
+
> **核心产出**: 设计文档 / API 定义 / ADR 决策记录 / 可行性报告
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 一、角色定位:你是技术方向的掌舵人
|
|
12
|
+
|
|
13
|
+
### 1.1 双重身份
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
┌──────────────────────────────────────────────────┐
|
|
17
|
+
│ 架构/技术负责人的双重身份 │
|
|
18
|
+
├────────────────────┬─────────────────────────────┤
|
|
19
|
+
│ 📐 方案设计师 │ 🚧 闸门总控 │
|
|
20
|
+
│ (Solution Designer)│ (Gate Controller) │
|
|
21
|
+
├────────────────────┼─────────────────────────────┤
|
|
22
|
+
│ 输出技术方案 │ 评估可行性 │
|
|
23
|
+
│ 定义接口和数据模型 │ 识别和分类风险 │
|
|
24
|
+
│ 做技术选型决策 │ 做 PASS/BLOCK/HOLD 裁决 │
|
|
25
|
+
│ 撰写 ADR │ 保护系统安全性和稳定性 │
|
|
26
|
+
│ 指导开发实现 │ 把控技术债务 │
|
|
27
|
+
└────────────────────┴─────────────────────────────┘
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**重要原则**:
|
|
31
|
+
- 方案设计师负责「怎么做好」,闸门总控负责「能不能做」
|
|
32
|
+
- 两个角色应由不同人员担任,避免自我审查
|
|
33
|
+
- 闸门裁决具有强制力,方案设计师必须服从 BLOCK 结论
|
|
34
|
+
|
|
35
|
+
### 1.2 绝对禁止做的事
|
|
36
|
+
|
|
37
|
+
| # | 禁止行为 | 适用角色 | 后果 |
|
|
38
|
+
|---|---------|---------|------|
|
|
39
|
+
| 1 | **在不做可行性评估的情况下批准高风险方案** | 闸门总控 | 事故追责 |
|
|
40
|
+
| 2 | **BLOCK 裁决不给解除条件** | 闸门总控 | 裁决无效 |
|
|
41
|
+
| 3 | **方案设计不考虑 dev-map 现有约定** | 方案设计师 | 打回重做 |
|
|
42
|
+
| 4 | **接口定义不够详细就让开发开始** | 方案设计师 | 开发返工 |
|
|
43
|
+
| 5 | **技术选型不做对比分析就直接决定** | 方案设计师 | 需要 ADR 补充 |
|
|
44
|
+
| 6 | **出于个人偏好否决可行方案** | 闸门总控 | 申诉复核 |
|
|
45
|
+
| 7 | **忽略安全红线通过方案** | 两者均适用 | 安全事故连带责任 |
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## 二、方案设计师工作规范
|
|
50
|
+
|
|
51
|
+
### 2.1 ② 方案设计阶段 — 标准工作流
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
收到需求文档 + 验收标准
|
|
55
|
+
│
|
|
56
|
+
▼
|
|
57
|
+
① 深度阅读需求(理解业务目标和约束)
|
|
58
|
+
│
|
|
59
|
+
▼
|
|
60
|
+
② 研究 dev-map(现有架构、模式、约束)
|
|
61
|
+
│
|
|
62
|
+
▼
|
|
63
|
+
③ 技术调研(新技术/新方案需要 POC)
|
|
64
|
+
│
|
|
65
|
+
▼
|
|
66
|
+
④ 设计方案(架构 + 接口 + 数据模型)
|
|
67
|
+
│
|
|
68
|
+
▼
|
|
69
|
+
⑤ 编写设计文档(design-{id}.md)
|
|
70
|
+
│
|
|
71
|
+
▼
|
|
72
|
+
⑥ 编写 API 定义(api-definition.yaml)
|
|
73
|
+
│
|
|
74
|
+
▼
|
|
75
|
+
⑦ 编写数据模型设计(data-model.md)
|
|
76
|
+
│
|
|
77
|
+
▼
|
|
78
|
+
⑧ 如有新技术决策 → 编写 ADR
|
|
79
|
+
│
|
|
80
|
+
▼
|
|
81
|
+
⑨ 影响面分析和风险评估
|
|
82
|
+
│
|
|
83
|
+
▼
|
|
84
|
+
⑩ 自审后提交 → 进入闸门评估
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### 2.2 设计文档模板
|
|
88
|
+
|
|
89
|
+
```markdown
|
|
90
|
+
# 技术设计文档: {任务名称}
|
|
91
|
+
|
|
92
|
+
## 元信息
|
|
93
|
+
- **文档版本**: v1.0
|
|
94
|
+
- **作者**: {姓名}
|
|
95
|
+
- **日期**: YYYY-MM-DD
|
|
96
|
+
- **关联需求**: requirements-{id}.md
|
|
97
|
+
- **状态**: 草稿/评审中/已批准/已废弃
|
|
98
|
+
|
|
99
|
+
## 1. 背景与目标
|
|
100
|
+
|
|
101
|
+
### 1.1 业务背景
|
|
102
|
+
{为什么要做这个功能?解决什么业务问题?}
|
|
103
|
+
|
|
104
|
+
### 1.2 技术目标
|
|
105
|
+
{技术上要达成什么?性能?可用性?可扩展性?}
|
|
106
|
+
|
|
107
|
+
### 1.3 约束条件
|
|
108
|
+
- 时间约束: {上线时间要求}
|
|
109
|
+
- 资源约束: {人力/硬件/预算}
|
|
110
|
+
- 兼容性约束: {必须兼容的系统/浏览器}
|
|
111
|
+
- 技术债务约束: {需要同时处理的技术债}
|
|
112
|
+
|
|
113
|
+
## 2. 整体架构设计
|
|
114
|
+
|
|
115
|
+
### 2.1 架构图
|
|
116
|
+
```mermaid
|
|
117
|
+
graph TB
|
|
118
|
+
subgraph Frontend["前端层"]
|
|
119
|
+
A[页面组件]
|
|
120
|
+
B[状态管理]
|
|
121
|
+
C[API Client]
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
subgraph Backend["后端层"]
|
|
125
|
+
D[Controller]
|
|
126
|
+
E[Service]
|
|
127
|
+
F[Repository]
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
subgraph Data["数据层"]
|
|
131
|
+
G[(MySQL)]
|
|
132
|
+
H[(Redis)]
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
A --> B --> C --> D --> E --> F --> G
|
|
136
|
+
E --> H
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### 2.2 技术选型(如有新技术)
|
|
140
|
+
| 选型项 | 选择方案 | 替代方案 | 选择理由 |
|
|
141
|
+
|-------|---------|---------|---------|
|
|
142
|
+
| 状态管理 | Zustand | Redux Toolkit | 更轻量,适合当前规模 |
|
|
143
|
+
| ... | ... | ... | ... |
|
|
144
|
+
|
|
145
|
+
> 详细选型分析见 ADR-{编号}
|
|
146
|
+
|
|
147
|
+
### 2.3 模块划分
|
|
148
|
+
| 模块 | 职责 | 涉及文件 |
|
|
149
|
+
|-----|------|---------|
|
|
150
|
+
| auth | 认证授权 | src/features/auth/** |
|
|
151
|
+
| user | 用户管理 | src/features/user/** |
|
|
152
|
+
|
|
153
|
+
## 3. 接口设计
|
|
154
|
+
|
|
155
|
+
### 3.1 API 定义(详见 api-definition.yaml)
|
|
156
|
+
|
|
157
|
+
### 3.2 数据流
|
|
158
|
+
```mermaid
|
|
159
|
+
sequenceDiagram
|
|
160
|
+
participant FE as 前端
|
|
161
|
+
participant API as API Gateway
|
|
162
|
+
participant SVC as 业务服务
|
|
163
|
+
participant DB as 数据库
|
|
164
|
+
|
|
165
|
+
FE->>API: POST /api/users
|
|
166
|
+
API->>SVC: createUser(req)
|
|
167
|
+
SVC->>DB: INSERT INTO users...
|
|
168
|
+
DB-->>SVC: 用户数据
|
|
169
|
+
SVC-->>API: UserDTO
|
|
170
|
+
API-->>FE: 201 + UserResponse
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## 4. 数据模型设计
|
|
174
|
+
|
|
175
|
+
### 4.1 ER 图 / 表结构
|
|
176
|
+
(详见 data-model.md)
|
|
177
|
+
|
|
178
|
+
### 4.2 状态机(如有)
|
|
179
|
+
```mermaid
|
|
180
|
+
stateDiagram-v2
|
|
181
|
+
[*] --> Pending: 创建
|
|
182
|
+
Pending --> Active: 激活
|
|
183
|
+
Active --> Suspended: 暂停
|
|
184
|
+
Suspended --> Active: 恢复
|
|
185
|
+
Active --> [*]: 关闭
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## 5. 关键实现逻辑
|
|
189
|
+
|
|
190
|
+
### 5.1 核心算法/流程
|
|
191
|
+
{用文字描述关键的实现思路,不含具体代码}
|
|
192
|
+
|
|
193
|
+
### 5.2 异常处理策略
|
|
194
|
+
| 异常类型 | 处理方式 | 用户提示 |
|
|
195
|
+
|---------|---------|---------|
|
|
196
|
+
| 参数校验失败 | 400 + 错误详情 | 请检查输入 |
|
|
197
|
+
| 未授权 | 401 | 请先登录 |
|
|
198
|
+
| 并发冲突 | 409 + 重试提示 | 请稍后重试 |
|
|
199
|
+
| 服务不可用 | 503 + 降级策略 | 服务繁忙 |
|
|
200
|
+
|
|
201
|
+
## 6. 影响面分析
|
|
202
|
+
|
|
203
|
+
### 6.1 影响的现有模块
|
|
204
|
+
| 模块 | 影响类型 | 影响程度 | 兼容措施 |
|
|
205
|
+
|-----|---------|---------|---------|
|
|
206
|
+
| 用户模块 | 接口变更 | 高 | 版本化 API |
|
|
207
|
+
| 订单模块 | 数据依赖 | 中 | 数据迁移脚本 |
|
|
208
|
+
|
|
209
|
+
### 6.2 需要同步修改的内容
|
|
210
|
+
- [ ] 前端路由配置
|
|
211
|
+
- [ ] API 文档
|
|
212
|
+
- [ ] 数据库迁移脚本
|
|
213
|
+
- [ ] dev-map 更新
|
|
214
|
+
|
|
215
|
+
## 7. 安全考虑
|
|
216
|
+
|
|
217
|
+
### 7.1 认证与授权
|
|
218
|
+
- 接口鉴权方式: JWT Bearer Token
|
|
219
|
+
- 权限控制: RBAC(角色:admin/user/guest)
|
|
220
|
+
- 敏感操作: 需要二次确认/MFA
|
|
221
|
+
|
|
222
|
+
### 7.2 数据安全
|
|
223
|
+
- 敏感字段加密: 密码 bcrypt、手机号脱敏
|
|
224
|
+
- 传输加密: HTTPS 强制
|
|
225
|
+
- 日志脱敏: 不记录敏感字段原文
|
|
226
|
+
|
|
227
|
+
### 7.3 安全测试要求
|
|
228
|
+
- [ ] OWASP Top 10 检查
|
|
229
|
+
- [ ] 权限越权测试
|
|
230
|
+
- [ ] SQL 注入/XSS 测试
|
|
231
|
+
|
|
232
|
+
## 8. 性能考量
|
|
233
|
+
|
|
234
|
+
### 8.1 性能目标
|
|
235
|
+
| 指标 | 目标值 | 测量方法 |
|
|
236
|
+
|-----|-------|---------|
|
|
237
|
+
| API P99 响应时间 | < 200ms | APM 监控 |
|
|
238
|
+
| 页面首屏加载 | < 1.5s | Lighthouse |
|
|
239
|
+
| 并发支持 | 100 QPS | 压测工具 |
|
|
240
|
+
|
|
241
|
+
### 8.2 优化策略
|
|
242
|
+
- 缓存策略: Redis 热点数据缓存
|
|
243
|
+
- 数据库优化: 索引设计 + 查询优化
|
|
244
|
+
- 前端优化: 懒加载 + 虚拟滚动
|
|
245
|
+
|
|
246
|
+
## 9. 测试策略
|
|
247
|
+
|
|
248
|
+
### 9.1 单元测试要点
|
|
249
|
+
- 核心业务逻辑 100% 覆盖
|
|
250
|
+
- 工具函数 90%+ 覆盖
|
|
251
|
+
|
|
252
|
+
### 9.2 集成测试要点
|
|
253
|
+
- API 契约测试
|
|
254
|
+
- 数据库事务测试
|
|
255
|
+
|
|
256
|
+
### 9.3 E2E 测试要点
|
|
257
|
+
- 核心用户路径全覆盖
|
|
258
|
+
|
|
259
|
+
## 10. 部署计划
|
|
260
|
+
|
|
261
|
+
### 10.1 部署步骤
|
|
262
|
+
1. 数据库迁移执行
|
|
263
|
+
2. 后端服务灰度发布
|
|
264
|
+
3. 前端资源部署
|
|
265
|
+
4. 全量切流量
|
|
266
|
+
|
|
267
|
+
### 10.2 回滚方案
|
|
268
|
+
- 前端: CDN 版本回退
|
|
269
|
+
- 后端: K8s 回滚到上一版本
|
|
270
|
+
- 数据库: 回滚 migration(如需要)
|
|
271
|
+
|
|
272
|
+
## 11. 风险与缓解
|
|
273
|
+
|
|
274
|
+
| 风险 | 概率 | 影响 | 缓解措施 | 负责人 |
|
|
275
|
+
|-----|------|------|---------|-------|
|
|
276
|
+
| 技术方案复杂度高 | 中 | 高 | 先做 POC 验证 | {姓名} |
|
|
277
|
+
| 第三方 API 变更 | 低 | 中 | 抽象适配层 | {姓名} |
|
|
278
|
+
| 数据迁移量大 | 中 | 中 | 分批迁移 + 验证 | {姓名} |
|
|
279
|
+
|
|
280
|
+
## 12. 开放问题
|
|
281
|
+
(如有未解决的问题,在此列出)
|
|
282
|
+
- [ ] 问题1:{描述} — 决策截止:{日期}
|
|
283
|
+
- [ ] 问题2:{描述} — 决策截止:{日期}
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## 附录
|
|
288
|
+
- A. API 完整定义: api-definition.yaml
|
|
289
|
+
- B. 数据模型: data-model.md
|
|
290
|
+
- C. ADR 列表: ADR-XXX
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### 2.3 API 定义规范(OpenAPI YAML 格式)
|
|
294
|
+
|
|
295
|
+
```yaml
|
|
296
|
+
openapi: 3.0.3
|
|
297
|
+
info:
|
|
298
|
+
title: {任务名称} API
|
|
299
|
+
version: 1.0.0
|
|
300
|
+
description: {简述}
|
|
301
|
+
|
|
302
|
+
paths:
|
|
303
|
+
/api/v1/users:
|
|
304
|
+
get:
|
|
305
|
+
operationId: listUsers
|
|
306
|
+
summary: 获取用户列表
|
|
307
|
+
tags:
|
|
308
|
+
- Users
|
|
309
|
+
parameters:
|
|
310
|
+
- name: page
|
|
311
|
+
in: query
|
|
312
|
+
required: false
|
|
313
|
+
schema:
|
|
314
|
+
type: integer
|
|
315
|
+
minimum: 1
|
|
316
|
+
default: 1
|
|
317
|
+
- name: pageSize
|
|
318
|
+
in: query
|
|
319
|
+
required: false
|
|
320
|
+
schema:
|
|
321
|
+
type: integer
|
|
322
|
+
minimum: 1
|
|
323
|
+
maximum: 100
|
|
324
|
+
default: 20
|
|
325
|
+
responses:
|
|
326
|
+
'200':
|
|
327
|
+
description: 成功
|
|
328
|
+
content:
|
|
329
|
+
application/json:
|
|
330
|
+
schema:
|
|
331
|
+
$ref: '#/components/schemas/UserListResponse'
|
|
332
|
+
'401':
|
|
333
|
+
$ref: '#/components/responses/Unauthorized'
|
|
334
|
+
'500':
|
|
335
|
+
$ref: '#/components/responses/InternalServerError'
|
|
336
|
+
|
|
337
|
+
post:
|
|
338
|
+
operationId: createUser
|
|
339
|
+
summary: 创建用户
|
|
340
|
+
tags:
|
|
341
|
+
- Users
|
|
342
|
+
requestBody:
|
|
343
|
+
required: true
|
|
344
|
+
content:
|
|
345
|
+
application/json:
|
|
346
|
+
schema:
|
|
347
|
+
$ref: '#/components/schemas/CreateUserRequest'
|
|
348
|
+
responses:
|
|
349
|
+
'201':
|
|
350
|
+
description: 创建成功
|
|
351
|
+
content:
|
|
352
|
+
application/json:
|
|
353
|
+
schema:
|
|
354
|
+
$ref: '#/components/schemas/UserResponse'
|
|
355
|
+
'400':
|
|
356
|
+
$ref: '#/components/responses/BadRequest'
|
|
357
|
+
'409':
|
|
358
|
+
description: 用户已存在
|
|
359
|
+
|
|
360
|
+
components:
|
|
361
|
+
schemas:
|
|
362
|
+
UserResponse:
|
|
363
|
+
type: object
|
|
364
|
+
required:
|
|
365
|
+
- id
|
|
366
|
+
- username
|
|
367
|
+
- email
|
|
368
|
+
- createdAt
|
|
369
|
+
properties:
|
|
370
|
+
id:
|
|
371
|
+
type: string
|
|
372
|
+
format: uuid
|
|
373
|
+
example: "550e8400-e29b-41d4-a716-446655440000"
|
|
374
|
+
username:
|
|
375
|
+
type: string
|
|
376
|
+
minLength: 3
|
|
377
|
+
maxLength: 32
|
|
378
|
+
pattern: "^[a-zA-Z0-9_]+$"
|
|
379
|
+
email:
|
|
380
|
+
type: string
|
|
381
|
+
format: email
|
|
382
|
+
createdAt:
|
|
383
|
+
type: string
|
|
384
|
+
format: date-time
|
|
385
|
+
|
|
386
|
+
CreateUserRequest:
|
|
387
|
+
type: object
|
|
388
|
+
required:
|
|
389
|
+
- username
|
|
390
|
+
- email
|
|
391
|
+
- password
|
|
392
|
+
properties:
|
|
393
|
+
username:
|
|
394
|
+
type: string
|
|
395
|
+
minLength: 3
|
|
396
|
+
maxLength: 32
|
|
397
|
+
email:
|
|
398
|
+
type: string
|
|
399
|
+
format: email
|
|
400
|
+
password:
|
|
401
|
+
type: string
|
|
402
|
+
minLength: 8
|
|
403
|
+
format: password
|
|
404
|
+
description: 至少8位,包含大小写字母和数字
|
|
405
|
+
|
|
406
|
+
UserListResponse:
|
|
407
|
+
type: object
|
|
408
|
+
properties:
|
|
409
|
+
data:
|
|
410
|
+
type: array
|
|
411
|
+
items:
|
|
412
|
+
$ref: '#/components/schemas/UserResponse'
|
|
413
|
+
pagination:
|
|
414
|
+
$ref: '#/components/schemas/PaginationInfo'
|
|
415
|
+
|
|
416
|
+
responses:
|
|
417
|
+
Unauthorized:
|
|
418
|
+
description: 未授权
|
|
419
|
+
content:
|
|
420
|
+
application/json:
|
|
421
|
+
schema:
|
|
422
|
+
$ref: '#/components/schemas/ErrorResponse'
|
|
423
|
+
BadRequest:
|
|
424
|
+
description: 请求参数错误
|
|
425
|
+
content:
|
|
426
|
+
application/json:
|
|
427
|
+
schema:
|
|
428
|
+
$ref: '#/components/schemas/ErrorResponse'
|
|
429
|
+
InternalServerError:
|
|
430
|
+
description: 服务器内部错误
|
|
431
|
+
content:
|
|
432
|
+
application/json:
|
|
433
|
+
schema:
|
|
434
|
+
$ref: '#/components/schemas/ErrorResponse'
|
|
435
|
+
|
|
436
|
+
ErrorResponse:
|
|
437
|
+
type: object
|
|
438
|
+
properties:
|
|
439
|
+
code:
|
|
440
|
+
type: string
|
|
441
|
+
message:
|
|
442
|
+
type: string
|
|
443
|
+
details:
|
|
444
|
+
type: array
|
|
445
|
+
items:
|
|
446
|
+
type: string
|
|
447
|
+
PaginationInfo:
|
|
448
|
+
type: object
|
|
449
|
+
properties:
|
|
450
|
+
page:
|
|
451
|
+
type: integer
|
|
452
|
+
pageSize:
|
|
453
|
+
type: integer
|
|
454
|
+
total:
|
|
455
|
+
type: integer
|
|
456
|
+
totalPages:
|
|
457
|
+
type: integer
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
### 2.4 ADR(Architecture Decision Record)模板
|
|
461
|
+
|
|
462
|
+
```markdown
|
|
463
|
+
# ADR-{编号}: {决策标题}
|
|
464
|
+
|
|
465
|
+
## 状态
|
|
466
|
+
{提议/已采纳/已废弃/已被替代}
|
|
467
|
+
|
|
468
|
+
## 上下文
|
|
469
|
+
{描述驱动这个决策的情况和问题}
|
|
470
|
+
|
|
471
|
+
## 决策
|
|
472
|
+
{我们决定了什么,简洁明了}
|
|
473
|
+
|
|
474
|
+
## 备选方案
|
|
475
|
+
|
|
476
|
+
### 方案 A: {名称}
|
|
477
|
+
- 优点: ...
|
|
478
|
+
- 缺点: ...
|
|
479
|
+
|
|
480
|
+
### 方案 B: {名称} ← 选中
|
|
481
|
+
- 优点: ...
|
|
482
|
+
- 缺点: ...
|
|
483
|
+
|
|
484
|
+
### 方案 C: {名称}
|
|
485
|
+
- 优点: ...
|
|
486
|
+
- 缺点: ...
|
|
487
|
+
|
|
488
|
+
## 理由
|
|
489
|
+
{为什么选择了方案 B 而不是其他方案}
|
|
490
|
+
|
|
491
|
+
## 后果
|
|
492
|
+
### 正面影响
|
|
493
|
+
...
|
|
494
|
+
|
|
495
|
+
### 负面风险
|
|
496
|
+
...(以及如何缓解)
|
|
497
|
+
|
|
498
|
+
### 中立
|
|
499
|
+
...
|
|
500
|
+
|
|
501
|
+
## 相关决策
|
|
502
|
+
- ADR-{编号}: {相关决策}
|
|
503
|
+
|
|
504
|
+
---
|
|
505
|
+
- **决策日期**: YYYY-MM-DD
|
|
506
|
+
- **决策人**: {姓名}
|
|
507
|
+
- **参与者**: {相关人员名单}
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
---
|
|
511
|
+
|
|
512
|
+
## 三、闸门总控工作规范
|
|
513
|
+
|
|
514
|
+
### 3.2 ③ 闸门评估阶段 — 标准工作流
|
|
515
|
+
|
|
516
|
+
```
|
|
517
|
+
收到需求文档 + 设计文档
|
|
518
|
+
│
|
|
519
|
+
▼
|
|
520
|
+
① 全面阅读需求 + 设计
|
|
521
|
+
│
|
|
522
|
+
▼
|
|
523
|
+
② 运行 Gate 快速检查(如有)
|
|
524
|
+
│
|
|
525
|
+
▼
|
|
526
|
+
③ 可行性评估
|
|
527
|
+
│
|
|
528
|
+
├─ 技术可行性
|
|
529
|
+
├─ 资源可行性
|
|
530
|
+
├─ 时间可行性
|
|
531
|
+
└─ 风险可行性
|
|
532
|
+
│
|
|
533
|
+
▼
|
|
534
|
+
④ 风险识别与分类
|
|
535
|
+
│
|
|
536
|
+
├─ 阻塞风险(BLOCK 条件)
|
|
537
|
+
├─ 暂停风险(HOLD 条件)
|
|
538
|
+
└─ 一般风险(需缓解措施)
|
|
539
|
+
│
|
|
540
|
+
▼
|
|
541
|
+
⑤ 做出裁决
|
|
542
|
+
│
|
|
543
|
+
├── PASS → 进入开发实现
|
|
544
|
+
├── BLOCK-to-design → 打回方案设计修改
|
|
545
|
+
├── BLOCK-to-requirements → 打回需求澄清
|
|
546
|
+
├── BLOCK-cancel → 取消需求
|
|
547
|
+
└── HOLD → 暂停等待
|
|
548
|
+
│
|
|
549
|
+
▼
|
|
550
|
+
⑥ 输出可行性报告 + 裁决决定
|
|
551
|
+
```
|
|
552
|
+
|
|
553
|
+
### 3.3 裁决标准详述
|
|
554
|
+
|
|
555
|
+
#### PASS(放行)—— 必须满足全部条件
|
|
556
|
+
|
|
557
|
+
| # | 条件 | 检查方式 |
|
|
558
|
+
|---|------|---------|
|
|
559
|
+
| 1 | 无阻塞风险 | 风险评估表 |
|
|
560
|
+
| 2 | 所有中高风险都有缓解措施 | 风险缓解计划 |
|
|
561
|
+
| 3 | 验收标准清晰可测 | 需求文档审查 |
|
|
562
|
+
| 4 | 技术方案覆盖所有需求 | 设计 vs 需求对照 |
|
|
563
|
+
| 5 | 安全红线无违反 | 安全检查清单 |
|
|
564
|
+
| 6 | 资源估算合理 | 工作量评估 |
|
|
565
|
+
| 7 | 无根本性架构冲突 | 架构评审 |
|
|
566
|
+
|
|
567
|
+
#### BLOCK(阻止推进)—— 任一即触发
|
|
568
|
+
|
|
569
|
+
##### BLOCK-to-design(方案有问题)
|
|
570
|
+
|
|
571
|
+
| 触发条件 | 示例 |
|
|
572
|
+
|---------|------|
|
|
573
|
+
| 方案存在明显的架构缺陷 | 单点故障无冗余设计 |
|
|
574
|
+
| 性能目标在技术上无法达成 | 要求 1ms 响应但网络延迟就有 10ms |
|
|
575
|
+
| 安全设计有重大遗漏 | 无认证机制的设计 |
|
|
576
|
+
| 技术选型缺乏论证 | 引入全新技术栈但无 POC |
|
|
577
|
+
|
|
578
|
+
**必须附带解除条件**:
|
|
579
|
+
```markdown
|
|
580
|
+
## BLOCK 裁决: 方案需修改
|
|
581
|
+
|
|
582
|
+
### 裁决理由
|
|
583
|
+
方案中使用 WebSocket 做实时推送,但在移动端弱网环境下
|
|
584
|
+
可靠性不足,且没有离线消息队列机制。
|
|
585
|
+
|
|
586
|
+
### 解除条件
|
|
587
|
+
1. 补充离线消息存储 + 重连恢复机制的设计
|
|
588
|
+
2. 或者改为 SSE + 轮询降级的混合方案
|
|
589
|
+
3. 补充弱网环境下的测试策略
|
|
590
|
+
|
|
591
|
+
### 重新评估触发条件
|
|
592
|
+
修改完成后重新提交闸门评估
|
|
593
|
+
```
|
|
594
|
+
|
|
595
|
+
##### BLOCK-to-requirements(需求有问题)
|
|
596
|
+
|
|
597
|
+
| 触发条件 | 示例 |
|
|
598
|
+
|---------|------|
|
|
599
|
+
| 需求本身矛盾或不可实现 | 同时要求"实时"和"零延迟"但无预算上专用通道 |
|
|
600
|
+
| 需求范围不清导致无法评估 | "做一个好的搜索功能"太模糊 |
|
|
601
|
+
| 验收标准不可测试 | "用户体验好"不是可测的标准 |
|
|
602
|
+
| 商业目标与技术现实冲突 | "一周内从零搭建一个淘宝" |
|
|
603
|
+
|
|
604
|
+
##### BLOCK-cancel(根本不可行)
|
|
605
|
+
|
|
606
|
+
| 触发条件 | 示例 |
|
|
607
|
+
|---------|------|
|
|
608
|
+
| 技术上永远不可能 | 违反物理定律的需求 |
|
|
609
|
+
| 资源永远不可能满足 | 需要 100 人月但只有 2 人 |
|
|
610
|
+
| 与战略方向根本冲突 | 要做的产品公司已经决定不做 |
|
|
611
|
+
|
|
612
|
+
#### HOLD(暂停等待)
|
|
613
|
+
|
|
614
|
+
| 触发条件 | 典型场景 | 等待什么 |
|
|
615
|
+
|---------|---------|---------|
|
|
616
|
+
| 需要 POC 验证 | 引入未知的新技术 | POC 结果 |
|
|
617
|
+
| 等待外部审批 | 涉及第三方合同 | 审批结果 |
|
|
618
|
+
| 等待资源到位 | 核心开发人员被借调 | 人员释放 |
|
|
619
|
+
| 优先级调整 | 有更高优先进来了 | PM 确认优先级 |
|
|
620
|
+
|
|
621
|
+
### 3.4 可行性报告模板
|
|
622
|
+
|
|
623
|
+
```markdown
|
|
624
|
+
# 可行性评估报告: {任务名称}
|
|
625
|
+
|
|
626
|
+
## 基本信息
|
|
627
|
+
- **任务ID**: TASK-YYYY-NNN
|
|
628
|
+
- **闸门评估人**: {姓名}
|
|
629
|
+
- **评估日期**: YYYY-MM-DD
|
|
630
|
+
- **裁决结果**: ✅ PASS / 🚫 BLOCK / ⏸️ HOLD
|
|
631
|
+
|
|
632
|
+
## 一、需求理解确认
|
|
633
|
+
|
|
634
|
+
### 1.1 业务目标
|
|
635
|
+
{确认理解的业务目标}
|
|
636
|
+
|
|
637
|
+
### 1.2 核心需求清单
|
|
638
|
+
| # | 需求 | 优先级 | 复杂度 | 方案覆盖 |
|
|
639
|
+
|---|------|-------|-------|---------|
|
|
640
|
+
|
|
641
|
+
### 1.2 疑点记录(如有)
|
|
642
|
+
{对需求的疑问和假设}
|
|
643
|
+
|
|
644
|
+
## 二、方案评审
|
|
645
|
+
|
|
646
|
+
### 2.1 架构合理性评估
|
|
647
|
+
- [ ] 整体架构清晰合理
|
|
648
|
+
- [ ] 模块划分粒度适当
|
|
649
|
+
- [ ] 接口定义完整准确
|
|
650
|
+
- [ ] 数据模型设计合理
|
|
651
|
+
- [ ] 符合 dev-map 现有约定
|
|
652
|
+
|
|
653
|
+
### 2.2 技术选型评估
|
|
654
|
+
| 选型项 | 方案选择 | 评价 | 风险 |
|
|
655
|
+
|-------|---------|------|------|
|
|
656
|
+
| ... | ... | ... | ... |
|
|
657
|
+
|
|
658
|
+
### 2.3 扩展性与可维护性
|
|
659
|
+
- [ ] 支持未来可能的扩展方向
|
|
660
|
+
- [ ] 代码组织便于维护
|
|
661
|
+
- [ ] 技术债务可控
|
|
662
|
+
|
|
663
|
+
## 三、风险评估
|
|
664
|
+
|
|
665
|
+
### 3.1 风险清单
|
|
666
|
+
| ID | 风险描述 | 概率 | 影响 | 等级 | 缓解措施 | 负责人 |
|
|
667
|
+
|----|---------|------|------|------|---------|-------|
|
|
668
|
+
| R1 | ... | 高/中/低 | 高/中/低 | 高/中/低 | ... | ... |
|
|
669
|
+
|
|
670
|
+
### 3.2 阻塞风险(BLOCK 条件)
|
|
671
|
+
(如有,详细列出)
|
|
672
|
+
|
|
673
|
+
### 3.3 技术债务评估
|
|
674
|
+
- 现有技术债务是否会影响此方案?
|
|
675
|
+
- 此方案是否会增加新的技术债务?
|
|
676
|
+
|
|
677
|
+
## 四、资源评估
|
|
678
|
+
|
|
679
|
+
### 4.1 工作量估算
|
|
680
|
+
| 阶段 | 估时 | 人力 | 依赖 |
|
|
681
|
+
|-----|------|------|------|
|
|
682
|
+
| 方案设计 | X天 | X人 | - |
|
|
683
|
+
| 开发实现 | X天 | X人 | 设计完成 |
|
|
684
|
+
| 测试验证 | X天 | X人 | 开发完成 |
|
|
685
|
+
| **总计** | **X天** | | |
|
|
686
|
+
|
|
687
|
+
### 4.2 资源缺口(如有)
|
|
688
|
+
| 资源类型 | 需求 | 现状 | 缺口 | 解决方案 |
|
|
689
|
+
|---------|------|------|------|---------|
|
|
690
|
+
|
|
691
|
+
## 五、安全评估
|
|
692
|
+
|
|
693
|
+
### 5.1 安全检查清单
|
|
694
|
+
| 检查项 | 状态 | 备注 |
|
|
695
|
+
|-------|------|------|
|
|
696
|
+
| 认证机制完备 | ✅/❌ | |
|
|
697
|
+
| 授权控制合理 | ✅/❌ | |
|
|
698
|
+
| 数据加密传输 | ✅/❌ | |
|
|
699
|
+
| 敏感数据保护 | ✅/❌ | |
|
|
700
|
+
| 注入防护 | ✅/❌ | |
|
|
701
|
+
| 依赖安全 | ✅/❌ | CVE 检查结果 |
|
|
702
|
+
| 日志脱敏 | ✅/❌ | |
|
|
703
|
+
|
|
704
|
+
### 5.2 合规要求(如有)
|
|
705
|
+
- GDPR / 等保 / PCI-DSS 等
|
|
706
|
+
|
|
707
|
+
## 六、裁决结论
|
|
708
|
+
|
|
709
|
+
### 裁决: ✅ PASS / 🚫 BLOCK / ⏸️ HOLD
|
|
710
|
+
|
|
711
|
+
### 裁决理由
|
|
712
|
+
{详细的书面理由}
|
|
713
|
+
|
|
714
|
+
### 解除/下一步条件(BLOCK/HOLD 时必填)
|
|
715
|
+
{如果 BLOCK 或 HOLD,必须给出明确的解除条件}
|
|
716
|
+
|
|
717
|
+
### 风险告知
|
|
718
|
+
{向 PM 和团队明确传达的关键风险}
|
|
719
|
+
|
|
720
|
+
---
|
|
721
|
+
|
|
722
|
+
**签署**
|
|
723
|
+
- 闸门评估人: _______________ 日期: _______
|
|
724
|
+
```
|
|
725
|
+
|
|
726
|
+
---
|
|
727
|
+
|
|
728
|
+
## 四、dev-map 维护责任
|
|
729
|
+
|
|
730
|
+
### 4.1 架构组的特殊维护义务
|
|
731
|
+
|
|
732
|
+
除了常规的代码同步更新外,架构组还负责:
|
|
733
|
+
|
|
734
|
+
| 维护项 | 频率 | 内容 |
|
|
735
|
+
|-------|------|------|
|
|
736
|
+
| ADR 记录 | 每次技术决策时 | 记录决策背景、选项、理由 |
|
|
737
|
+
| overview.md 更新 | 架构变更后 | 更新技术栈总览和架构图 |
|
|
738
|
+
| decisions.md 维护 | 每次决策后 | 追加新的 ADR 索引 |
|
|
739
|
+
| 架构原则文档 | 季度 Review | 更新设计原则和最佳实践 |
|
|
740
|
+
|
|
741
|
+
### 4.2 架构治理
|
|
742
|
+
|
|
743
|
+
每季度执行架构 Review:
|
|
744
|
+
- [ ] 技术债务盘点
|
|
745
|
+
- [ ] 架构偏离度检查(实际 vs 设计)
|
|
746
|
+
- [ ] 技术栈健康度评估
|
|
747
|
+
- [ ] dev-map 准确性抽查
|
|
748
|
+
- [ ] Rule/Skill 配置优化
|
|
749
|
+
|
|
750
|
+
---
|
|
751
|
+
|
|
752
|
+
## 五、绩效考核关联指标
|
|
753
|
+
|
|
754
|
+
| 指标 | 目标值 | 权重 | 数据来源 |
|
|
755
|
+
|-----|-------|------|---------|
|
|
756
|
+
| 方案设计质量(开发返工率) | 返工率 < 10% | 20% | 开发反馈 |
|
|
757
|
+
| 闸门裁决准确性(漏判率) | 漏判率 < 5% | 25%(关键) | 线上故障追溯 |
|
|
758
|
+
| ADR 覆盖率(重大决策记录率) | 100% | 10% | ADR 抽查 |
|
|
759
|
+
| 技术债务控制 | 不超过阈值 | 15% | 技术债务盘点 |
|
|
760
|
+
| 文档质量(下游满意度) | ≥ 4.0/5.0 | 15% | 开发/QA 问卷 |
|
|
761
|
+
| 安全评估完整性 | 100% | 15%(一票否决) | 安全审计 |
|
|
762
|
+
|
|
763
|
+
---
|
|
764
|
+
|
|
765
|
+
## 六、常用命令与工具
|
|
766
|
+
|
|
767
|
+
```bash
|
|
768
|
+
# === Workflow 校验 ===
|
|
769
|
+
node .harness/workflow/validate.js # 检查流程完整性
|
|
770
|
+
|
|
771
|
+
# === Gate 检查(闸门评估时使用)===
|
|
772
|
+
node .harness/gate/index.js # 完整质量门禁
|
|
773
|
+
node .harness/gate/index.js --report # 生成报告(用于评估参考)
|
|
774
|
+
node .harness/gate/index.js --save-baseline # 项目基线建立时
|
|
775
|
+
|
|
776
|
+
# === 参考文档 ===
|
|
777
|
+
cat .harness/agents/solution-designer/contract.yaml # 方案设计契约
|
|
778
|
+
cat .harness/agents/gate-controller/contract.yaml # 闸门契约
|
|
779
|
+
cat .harness/rules/global/security-baseline.md # 安全红线
|
|
780
|
+
cat .harness/dev-map/decisions.md # ADR 决策记录
|
|
781
|
+
cat .harness/dev-map/overview.md # 架构总览
|
|
782
|
+
```
|
|
783
|
+
|
|
784
|
+
---
|
|
785
|
+
|
|
786
|
+
## 七、架构师自查清单
|
|
787
|
+
|
|
788
|
+
### 方案设计提交前
|
|
789
|
+
- [ ] 设计文档覆盖了所有需求点
|
|
790
|
+
- [ ] API 定义足够详细(可供开发和测试直接使用)
|
|
791
|
+
- [ ] 数据模型完整(含索引、约束)
|
|
792
|
+
- [ ] 影响面分析全面
|
|
793
|
+
- [ ] 风险识别充分且有缓解措施
|
|
794
|
+
- [ ] 安全考虑到位
|
|
795
|
+
- [ ] 技术选型有对比分析(如有新选型)
|
|
796
|
+
- [ ] dev-map 现有约定已参考和遵循
|
|
797
|
+
- [ ] ADR 已编写(如有新决策)
|
|
798
|
+
- [ ] 工作量估算合理
|
|
799
|
+
|
|
800
|
+
### 闸门评估做出裁决前
|
|
801
|
+
- [ ] 需求和设计都已仔细阅读
|
|
802
|
+
- [ ] 风险评估已覆盖所有维度
|
|
803
|
+
- [ ] 安全检查清单已逐项确认
|
|
804
|
+
- [ ] 资源评估已考虑
|
|
805
|
+
- [ ] 裁决理由充分且书面化
|
|
806
|
+
- [ ] BLOCK/HOLD 时解除条件明确
|
|
807
|
+
- [ ] 无个人偏好干扰客观判断
|
|
808
|
+
|
|
809
|
+
---
|
|
810
|
+
|
|
811
|
+
*本规范是架构和技术方案组在 Harness 体系中的完整操作指南。请记住:你的每一个决策都直接影响系统的长期健康。*
|