@ohos-graphics/stability-code-review 0.1.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 +169 -0
- package/SKILL.md +518 -0
- package/bin/install.js +165 -0
- package/config/rules.yaml +445 -0
- package/config/whitelist.yaml +52 -0
- package/package.json +40 -0
- package/references/BoundaryCondition/StabilityCodeReview_BoundaryCondition_001.md +275 -0
- package/references/BoundaryCondition/StabilityCodeReview_BoundaryCondition_002.md +273 -0
- package/references/BoundaryCondition/StabilityCodeReview_BoundaryCondition_003.md +305 -0
- package/references/BoundaryCondition/StabilityCodeReview_BoundaryCondition_004.md +350 -0
- package/references/BoundaryCondition/StabilityCodeReview_BoundaryCondition_005.md +301 -0
- package/references/BoundaryCondition/StabilityCodeReview_BoundaryCondition_006.md +320 -0
- package/references/BoundaryCondition/StabilityCodeReview_BoundaryCondition_007.md +432 -0
- package/references/BoundaryCondition/StabilityCodeReview_BoundaryCondition_008.md +394 -0
- package/references/BoundaryCondition/StabilityCodeReview_BoundaryCondition_009.md +425 -0
- package/references/BoundaryCondition/StabilityCodeReview_BoundaryCondition_010.md +472 -0
- package/references/BoundaryCondition/StabilityCodeReview_BoundaryCondition_011.md +204 -0
- package/references/BoundaryCondition/StabilityCodeReview_BoundaryCondition_012.md +210 -0
- package/references/BoundaryCondition/StabilityCodeReview_BoundaryCondition_013.md +226 -0
- package/references/BoundaryCondition/StabilityCodeReview_BoundaryCondition_014.md +222 -0
- package/references/BoundaryCondition/StabilityCodeReview_BoundaryCondition_015.md +256 -0
- package/references/BoundaryCondition/StabilityCodeReview_BoundaryCondition_016.md +269 -0
- package/references/BoundaryCondition/StabilityCodeReview_BoundaryCondition_017.md +222 -0
- package/references/BoundaryCondition/StabilityCodeReview_BoundaryCondition_018.md +336 -0
- package/references/ConcurrencyStability/StabilityCodeReview_ConcurrencyStability_001.md +414 -0
- package/references/ConcurrencyStability/StabilityCodeReview_ConcurrencyStability_002.md +335 -0
- package/references/ConcurrencyStability/StabilityCodeReview_ConcurrencyStability_003.md +284 -0
- package/references/ConcurrencyStability/StabilityCodeReview_ConcurrencyStability_004.md +313 -0
- package/references/ConcurrencyStability/StabilityCodeReview_ConcurrencyStability_005.md +364 -0
- package/references/ExceptionHandling/StabilityCodeReview_ExceptionHandling_001.md +142 -0
- package/references/ExceptionHandling/StabilityCodeReview_ExceptionHandling_002.md +222 -0
- package/references/ExceptionHandling/StabilityCodeReview_ExceptionHandling_003.md +383 -0
- package/references/GraphicsStability/StabilityCodeReview_GraphicsStability_001.md +258 -0
- package/references/GraphicsStability/StabilityCodeReview_GraphicsStability_002.md +131 -0
- package/references/GraphicsStability/StabilityCodeReview_GraphicsStability_003.md +220 -0
- package/references/GraphicsStability/StabilityCodeReview_GraphicsStability_004.md +224 -0
- package/references/GraphicsStability/StabilityCodeReview_GraphicsStability_005.md +250 -0
- package/references/GraphicsStability/StabilityCodeReview_GraphicsStability_006.md +153 -0
- package/references/GraphicsStability/StabilityCodeReview_GraphicsStability_007.md +169 -0
- package/references/GraphicsStability/StabilityCodeReview_GraphicsStability_008.md +153 -0
- package/references/GraphicsStability/StabilityCodeReview_GraphicsStability_009.md +144 -0
- package/references/GraphicsStability/StabilityCodeReview_GraphicsStability_010.md +152 -0
- package/references/GraphicsStability/StabilityCodeReview_GraphicsStability_011.md +221 -0
- package/references/GraphicsStability/StabilityCodeReview_GraphicsStability_012.md +318 -0
- package/references/InitializationOrder/StabilityCodeReview_InitializationOrder_001.md +411 -0
- package/references/Lifecycle/StabilityCodeReview_Lifecycle_001.md +255 -0
- package/references/Lifecycle/StabilityCodeReview_Lifecycle_002.md +177 -0
- package/references/MemoryStability/StabilityCodeReview_MemoryStability_001.md +332 -0
- package/references/MemoryStability/StabilityCodeReview_MemoryStability_002.md +261 -0
- package/references/MemoryStability/StabilityCodeReview_MemoryStability_003.md +428 -0
- package/references/MemoryStability/StabilityCodeReview_MemoryStability_004.md +400 -0
- package/references/MemoryStability/StabilityCodeReview_MemoryStability_005.md +364 -0
- package/references/MemoryStability/StabilityCodeReview_MemoryStability_006.md +359 -0
- package/references/MemoryStability/StabilityCodeReview_MemoryStability_007.md +279 -0
- package/references/PROBLEM_TEMPLATE.md +65 -0
- package/references/PerformanceStability/StabilityCodeReview_PerformanceStability_001.md +380 -0
- package/references/PerformanceStability/StabilityCodeReview_PerformanceStability_002.md +437 -0
- package/references/REPORT_TEMPLATE.csv +5 -0
- package/references/REPORT_TEMPLATE.md +132 -0
- package/references/RULE_DEVELOPMENT_GUIDE.md +711 -0
- package/references/RULE_INDEX.md +101 -0
- package/references/RULE_TEMPLATE.md +192 -0
- package/references/ResourceManagement/StabilityCodeReview_ResourceManagement_001.md +334 -0
- package/references/ResourceManagement/StabilityCodeReview_ResourceManagement_002.md +425 -0
- package/references/ResourceManagement/StabilityCodeReview_ResourceManagement_003.md +420 -0
- package/references/ResourceManagement/StabilityCodeReview_ResourceManagement_004.md +409 -0
- package/references/ResourceManagement/StabilityCodeReview_ResourceManagement_005.md +445 -0
- package/references/ResourceManagement/StabilityCodeReview_ResourceManagement_006.md +384 -0
- package/references/ResourceManagement/StabilityCodeReview_ResourceManagement_007.md +395 -0
- package/scripts/add-rule.py +423 -0
package/SKILL.md
ADDED
|
@@ -0,0 +1,518 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ohos-dev-graphics-stability-code-review
|
|
3
|
+
description: >
|
|
4
|
+
C/C++ 稳定性代码审查框架,包含可扩展规则体系,覆盖 9 个稳定性分类:
|
|
5
|
+
异常处理、并发稳定性、性能稳定性、资源管理、初始化顺序、边界条件、生命周期、内存稳定性、图形稳定性。
|
|
6
|
+
触发场景:稳定性专项全仓扫描、代码上库前本地检视、稳定性审计、故障预防检视、代码审查、OpenHarmony 稳定性扫描、
|
|
7
|
+
以及用户要求检查 C/C++ 代码稳定性风险时均应使用此技能。
|
|
8
|
+
metadata:
|
|
9
|
+
author: openharmony
|
|
10
|
+
scope: domain
|
|
11
|
+
stage: development
|
|
12
|
+
domain: graphics
|
|
13
|
+
capability: stability-code-review
|
|
14
|
+
version: 0.1.0
|
|
15
|
+
status: trial
|
|
16
|
+
tags:
|
|
17
|
+
- cpp
|
|
18
|
+
- stability
|
|
19
|
+
- review
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# OpenHarmony Stability Code Review
|
|
23
|
+
|
|
24
|
+
这是一个**可扩展的稳定性规则检视框架**,用于对 C/C++ 代码库(特别是 OpenHarmony 组件)执行稳定性风险检视并生成结构化报告。框架采用"规则即文档"设计,所有规则以 Markdown 文档形式存放在 `references/` 目录,AI 模型直接读取规则文档进行代码检视,输出中文检视报告到 `./report/` 目录。
|
|
25
|
+
|
|
26
|
+
当前框架包含 **57 条稳定性规则**,覆盖 **9 个稳定性分类**,后续可持续扩展新规则。
|
|
27
|
+
|
|
28
|
+
## 触发场景
|
|
29
|
+
|
|
30
|
+
当用户需要进行以下操作时,应使用此技能:
|
|
31
|
+
|
|
32
|
+
- **稳定性专项全仓扫描**:对 C/C++ 代码库执行**稳定性审计**或**风险检视**
|
|
33
|
+
- **指定规则扫描**:用户明确指定规则 ID 或分类进行针对性检视(如"用 ExceptionHandling_001 规则检视"、"只检视 HIGH 级别规则")
|
|
34
|
+
- **代码上库前本地检视**:在代码提交前进行稳定性检视,确保上库代码的可靠性
|
|
35
|
+
- 检测稳定性风险(异常处理不当、并发死锁、性能退化、资源泄漏等)
|
|
36
|
+
- 审查生命周期管理(对象生命周期、异步任务管理)
|
|
37
|
+
- 对代码库进行批量稳定性检视并生成结构化报告
|
|
38
|
+
- 用户明确要求检查代码稳定性时
|
|
39
|
+
|
|
40
|
+
**触发示例**:
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
# 全量扫描(遍历所有规则)
|
|
44
|
+
稳定性全量扫描 ./rosen/
|
|
45
|
+
代码稳定性检视 ./src/
|
|
46
|
+
|
|
47
|
+
# 指定规则扫描(遍历指定的所有规则)
|
|
48
|
+
用 ExceptionHandling_001 规则检视 ./src/
|
|
49
|
+
用 ExceptionHandling_001,ExceptionHandling_002,ConcurrencyStability_001 规则检视 ./rosen/
|
|
50
|
+
|
|
51
|
+
# 按级别过滤扫描(遍历指定级别的所有规则)
|
|
52
|
+
对 ./rosen/ 做稳定性扫描,只检视 HIGH 级别的规则
|
|
53
|
+
对 ./src/ 进行稳定性扫描,检视 CRITICAL 和 HIGH 级别规则
|
|
54
|
+
|
|
55
|
+
# 指定分类扫描(遍历该分类下的所有规则)
|
|
56
|
+
对 ./src/ 做稳定性扫描,只检视异常处理分类的规则
|
|
57
|
+
用ConcurrencyStability和MemoryStability分类的规则检视 ./rosen/
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## 绝不能做
|
|
61
|
+
|
|
62
|
+
在使用此技能时:
|
|
63
|
+
|
|
64
|
+
1. **永远不要修改被扫描的源代码**
|
|
65
|
+
- 你的工作只是检视代码,识别稳定性风险
|
|
66
|
+
- 禁止对源代码文件进行任何修改操作
|
|
67
|
+
|
|
68
|
+
2. **不要输出非必要的过程中间件**
|
|
69
|
+
- 除了目标输出的中文检视报告之外,请不要输出其它非必要的过程中间文件或临时文件
|
|
70
|
+
- 保持输出目录的整洁,只在 `./report/` 目录下输出最终报告
|
|
71
|
+
|
|
72
|
+
## 项目结构
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
├── SKILL.md # skill 技能说明(本文件)
|
|
76
|
+
├── README.md # 项目说明
|
|
77
|
+
├── config/
|
|
78
|
+
│ ├── rules.yaml # 规则配置
|
|
79
|
+
│ └── whitelist.yaml # 白名单配置
|
|
80
|
+
├── references/ # 规则参考文档(核心)和报告输出格式示例
|
|
81
|
+
│ ├── RULE_INDEX.md # 规则总索引
|
|
82
|
+
│ ├── RULE_DEVELOPMENT_GUIDE.md # 规则开发完整指南
|
|
83
|
+
│ ├── RULE_TEMPLATE.md # 规则文档模板
|
|
84
|
+
│ ├── PROBLEM_TEMPLATE.md # 检出问题格式模板
|
|
85
|
+
│ ├── REPORT_TEMPLATE.md # 报告输出格式模板(Markdown格式)
|
|
86
|
+
│ ├── REPORT_TEMPLATE.csv # 报告输出格式模板(CSV格式)
|
|
87
|
+
│ ├── ExceptionHandling/ # 异常处理 规则目录(3条)
|
|
88
|
+
│ ├── ConcurrencyStability/ # 并发稳定性 规则目录(5条)
|
|
89
|
+
│ ├── PerformanceStability/ # 性能稳定性 规则目录(2条)
|
|
90
|
+
│ ├── ResourceManagement/ # 资源管理 规则目录(7条)
|
|
91
|
+
│ ├── InitializationOrder/ # 初始化顺序 规则目录(1条)
|
|
92
|
+
│ ├── BoundaryCondition/ # 边界条件 规则目录(18条)
|
|
93
|
+
│ ├── Lifecycle/ # 生命周期 规则目录(2条)
|
|
94
|
+
│ ├── MemoryStability/ # 内存稳定性 规则目录(7条)
|
|
95
|
+
│ └── GraphicsStability/ # 图形稳定性 规则目录(12条)
|
|
96
|
+
└── scripts/
|
|
97
|
+
└── add-rule.py # 规则脚手架工具
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## 工作流程
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
┌──────────────────────────────────────────────────────────────────────┐
|
|
104
|
+
│ 用户输入 (opencode) │
|
|
105
|
+
│ │
|
|
106
|
+
│ "稳定性全量扫描 ./rosen/" / "用 ExceptionHandling_001 检视 ./src/" │
|
|
107
|
+
└───────────────────────────────────┬──────────────────────────────────┘
|
|
108
|
+
│
|
|
109
|
+
▼
|
|
110
|
+
┌──────────────────────────────────────────────────────────────────────┐
|
|
111
|
+
│ 步骤 1:规则加载与遍历准备 │
|
|
112
|
+
│ │
|
|
113
|
+
│ 加载 config/rules.yaml ──→ 确定启用的规则列表 │
|
|
114
|
+
│ │
|
|
115
|
+
│ ┌────────────────────────────────────────────────────────────────┐ │
|
|
116
|
+
│ │ 规则遍历策略: │ │
|
|
117
|
+
│ │ │ │
|
|
118
|
+
│ │ 情况 1:用户指定检测规则 │ │
|
|
119
|
+
│ │ - 解析用户指定的规则 ID 列表或规则级别过滤条件 │ │
|
|
120
|
+
│ │ - 遍历用户指定的所有规则,确保无遗漏 │ │
|
|
121
|
+
│ │ - 验证指定的规则 ID 是否存在 │ │
|
|
122
|
+
│ │ │ │
|
|
123
|
+
│ │ 情况 2:用户未指定检测规则 │ │
|
|
124
|
+
│ │ - 加载 config/rules.yaml 中所有启用的规则 │ │
|
|
125
|
+
│ │ - 遍历所有启用的规则,确保无遗漏 │ │
|
|
126
|
+
│ │ - 默认包含所有 57 条规则(覆盖 9 个稳定性分类) │ │
|
|
127
|
+
│ └────────────────────────────────────────────────────────────────┘ │
|
|
128
|
+
│ │
|
|
129
|
+
│ 根据规则 reference 字段 ──→ 加载 references/ 下对应的规则文档 │
|
|
130
|
+
│ 按稳定性分类组织规则 ──→ 准备分发给对应的 subagent │
|
|
131
|
+
│ │
|
|
132
|
+
│ 示例:加载 references/ExceptionHandling/StabilityCodeReview_ExceptionHandling_001.md │
|
|
133
|
+
└───────────────────────────────────┬──────────────────────────────────┘
|
|
134
|
+
│
|
|
135
|
+
▼
|
|
136
|
+
┌──────────────────────────────────────────────────────────────────────┐
|
|
137
|
+
│ 步骤 2:白名单配置加载 │
|
|
138
|
+
│ │
|
|
139
|
+
│ 加载 config/whitelist.yaml ──→ 初始化白名单过滤规则 │
|
|
140
|
+
│ │
|
|
141
|
+
│ ┌────────────────────────────────────────────────────────────────┐ │
|
|
142
|
+
│ │ 白名单类型: │ │
|
|
143
|
+
│ │ │ │
|
|
144
|
+
│ │ 1. 全局路径白名单(global.paths) │ │
|
|
145
|
+
│ │ - test/, tests/, unittest/, mock/, build/, out/, .git/ 等 │ │
|
|
146
|
+
│ │ - 包含这些路径的文件将被跳过 │ │
|
|
147
|
+
│ │ │ │
|
|
148
|
+
│ │ 2. 全局文件模式白名单(global.patterns) │ │
|
|
149
|
+
│ │ - *_test.cpp, *_unittest.h, *_fuzztest.cpp, *.pb.cc 等 │ │
|
|
150
|
+
│ │ - 匹配这些模式的文件将被跳过 │ │
|
|
151
|
+
│ │ │ │
|
|
152
|
+
│ │ 3. 规则级白名单(rules.RULE_ID.patterns) │ │
|
|
153
|
+
│ │ - 针对特定规则的误报排除模式 │ │
|
|
154
|
+
│ │ - 仅对该规则生效,不影响其他规则检视 │ │
|
|
155
|
+
│ └────────────────────────────────────────────────────────────────┘ │
|
|
156
|
+
└───────────────────────────────────┬──────────────────────────────────┘
|
|
157
|
+
│
|
|
158
|
+
▼
|
|
159
|
+
┌──────────────────────────────────────────────────────────────────────┐
|
|
160
|
+
│ 步骤 3:并行分类型代码检视(Subagent 模式) │
|
|
161
|
+
│ │
|
|
162
|
+
│ 主 Agent 根据稳定性分类启动多个 Subagent,每个 Subagent 负责一个分类 │
|
|
163
|
+
│ **重要:每个 Subagent 必须遍历该分类下的所有规则,不得遗漏** │
|
|
164
|
+
│ **重要:每个 Subagent 必须按照 references/PROBLEM_TEMPLATE.md 格式输出问题** │
|
|
165
|
+
│ │
|
|
166
|
+
│ ┌────────────────────────────────────────────────────────────────┐ │
|
|
167
|
+
│ │ Subagent 1: 异常处理分类检视 │ │
|
|
168
|
+
│ │ - 遍历 ExceptionHandling_001~003 所有规则(共 3 条) │ │
|
|
169
|
+
│ │ - 根据规则文档执行代码检视 │ │
|
|
170
|
+
│ │ - 按照检出问题格式模板输出该分类的 issues 列表 │ │
|
|
171
|
+
│ └────────────────────────────────────────────────────────────────┘ │
|
|
172
|
+
│ ┌────────────────────────────────────────────────────────────────┐ │
|
|
173
|
+
│ │ Subagent 2: 并发稳定性分类检视 │ │
|
|
174
|
+
│ │ - 遍历 ConcurrencyStability_001~005 所有规则(共 5 条) │ │
|
|
175
|
+
│ │ - 根据规则文档执行代码检视 │ │
|
|
176
|
+
│ │ - 按照检出问题格式模板输出该分类的 issues 列表 │ │
|
|
177
|
+
│ └────────────────────────────────────────────────────────────────┘ │
|
|
178
|
+
│ ┌────────────────────────────────────────────────────────────────┐ │
|
|
179
|
+
│ │ Subagent 3: 性能稳定性分类检视 │ │
|
|
180
|
+
│ │ - 遍历 PerformanceStability_001~002 所有规则(共 2 条) │ │
|
|
181
|
+
│ │ - 根据规则文档执行代码检视 │ │
|
|
182
|
+
│ │ - 按照检出问题格式模板输出该分类的 issues 列表 │ │
|
|
183
|
+
│ └────────────────────────────────────────────────────────────────┘ │
|
|
184
|
+
│ ... (其他分类:资源管理、初始化顺序、边界条件、生命周期、 │
|
|
185
|
+
│ 内存稳定性、图形稳定性) │
|
|
186
|
+
│ │
|
|
187
|
+
│ 每个分类对应的 Subagent 数量:共 9 个 Subagent(覆盖 9 个稳定性分类) │
|
|
188
|
+
│ 每个 Subagent 的检视流程: │
|
|
189
|
+
│ │
|
|
190
|
+
│ ┌────────────────────────────────────────────────────────────────┐ │
|
|
191
|
+
│ │ 对每个代码文件,按规则文档要求执行检视: │ │
|
|
192
|
+
│ │ │ │
|
|
193
|
+
│ │ 1. 白名单过滤(优先执行) │ │
|
|
194
|
+
│ │ 检查文件路径是否匹配白名单配置: │ │
|
|
195
|
+
│ │ - 全局路径白名单:test/, unittest/, build/ 等 │ │
|
|
196
|
+
│ │ - 全局文件模式白名单:*_test.cpp, *.pb.cc 等 │ │
|
|
197
|
+
│ │ - 规则级白名单:特定规则的排除模式 │ │
|
|
198
|
+
│ │ 匹配则跳过该文件,不进行后续检视 │ │
|
|
199
|
+
│ │ │ │ │
|
|
200
|
+
│ │ ▼ │ │
|
|
201
|
+
│ │ 2. 遍历该分类下的所有规则(必须遍历,不得遗漏) │ │
|
|
202
|
+
│ │ 按顺序检查每一条规则: │ │
|
|
203
|
+
│ │ - 规则 1 → 规则 2 → 规则 3 → ... → 规则 N │ │
|
|
204
|
+
│ │ │ │ │
|
|
205
|
+
│ │ ▼ │ │
|
|
206
|
+
│ │ 3. 识别 RISK_PATTERN(稳定性风险模式) │ │
|
|
207
|
+
│ │ 根据规则文档中的检测范围和检测要点 │ │
|
|
208
|
+
│ │ │ │ │
|
|
209
|
+
│ │ ▼ │ │
|
|
210
|
+
│ │ 4. 分析 CONTEXT(上下文:异常处理、资源管理、并发等) │ │
|
|
211
|
+
│ │ 判断是否存在安全防护 │ │
|
|
212
|
+
│ │ │ │ │
|
|
213
|
+
│ │ ▼ │ │
|
|
214
|
+
│ │ 5. 评估 IMPACT(稳定性影响:服务中断、性能退化、资源耗尽等) │ │
|
|
215
|
+
│ │ 根据规则文档中的 RiskFlow 和 ImpactAnalysis │ │
|
|
216
|
+
│ │ │ │ │
|
|
217
|
+
│ │ ▼ │ │
|
|
218
|
+
│ │ 6. 安全写法排除 │ │
|
|
219
|
+
│ │ 参考规则文档中的误报排除表格 │ │
|
|
220
|
+
│ │ NOPROTECT 标记、安全防护代码等 │ │
|
|
221
|
+
│ │ │ │ │
|
|
222
|
+
│ │ ▼ │ │
|
|
223
|
+
│ │ 7. 构建检出结果(严格按照 references/PROBLEM_TEMPLATE.md 格式)│ │
|
|
224
|
+
│ │ - 问题标题、分类、规则、位置、函数名、严重程度 │ │
|
|
225
|
+
│ │ - 关键源码片段(5-20行) │ │
|
|
226
|
+
│ │ - 问题描述(说明违反的规则和存在的风险) │ │
|
|
227
|
+
│ │ - 风险流分析(RiskFlow) │ │
|
|
228
|
+
│ │ - 影响分析(ImpactAnalysis) │ │
|
|
229
|
+
│ │ - 修复建议(描述+代码示例) │ │
|
|
230
|
+
│ └────────────────────────────────────────────────────────────────┘ │
|
|
231
|
+
│ │
|
|
232
|
+
│ 每个 Subagent 输出:符合 references/PROBLEM_TEMPLATE.md 格式的 issues 列表 │
|
|
233
|
+
└───────────────────────────────────┬──────────────────────────────────┘
|
|
234
|
+
│
|
|
235
|
+
▼
|
|
236
|
+
┌──────────────────────────────────────────────────────────────────────┐
|
|
237
|
+
│ 步骤 4:主 Agent 汇总检测结果 │
|
|
238
|
+
│ │
|
|
239
|
+
│ 主 Agent 收集所有 Subagent 的检测结果并进行汇总整理: │
|
|
240
|
+
│ **重要:所有 Subagent 输出必须符合 references/PROBLEM_TEMPLATE.md 格式** │
|
|
241
|
+
│ │
|
|
242
|
+
│ ┌────────────────────────────────────────────────────────────────┐ │
|
|
243
|
+
│ │ 汇总流程: │ │
|
|
244
|
+
│ │ │ │
|
|
245
|
+
│ │ 1. 收集所有 Subagent 的输出 │ │
|
|
246
|
+
│ │ - Subagent 1 (异常处理) issues 列表 │ │
|
|
247
|
+
│ │ - Subagent 2 (并发稳定性) issues 列表 │ │
|
|
248
|
+
│ │ - ... (其他 7 个分类) │ │
|
|
249
|
+
│ │ - Subagent 9 (图形稳定性) issues 列表 │ │
|
|
250
|
+
│ │ │ │
|
|
251
|
+
│ │ 2. 验证规则遍历完整性 │ │
|
|
252
|
+
│ │ - 检查用户指定的规则是否全部遍历 │ │
|
|
253
|
+
│ │ - 或检查所有启用的规则是否全部遍历 │ │
|
|
254
|
+
│ │ │ │
|
|
255
|
+
│ │ 3. 格式验证 │ │
|
|
256
|
+
│ │ - 验证每个检出问题是否符合 references/PROBLEM_TEMPLATE.md 格式 │
|
|
257
|
+
│ │ - 验证问题格式的完整性和规范性 │ │
|
|
258
|
+
│ │ - 确保包含问题标题、分类、规则、位置、函数名、严重程度等必需字段 │
|
|
259
|
+
│ │ │ │
|
|
260
|
+
│ │ 4. 去重合并 │ │
|
|
261
|
+
│ │ - 合并所有 issues 列表 │ │
|
|
262
|
+
│ │ - 按分类组织检测结果 │ │
|
|
263
|
+
│ │ - 同位置问题去重合并 │ │
|
|
264
|
+
│ │ │ │
|
|
265
|
+
│ │ 5. 分组排序 │ │
|
|
266
|
+
│ │ - 按 references/REPORT_TEMPLATE.md **检出问题详情**章节格式组织报告结构 │
|
|
267
|
+
│ │ - 按严重程度分组排序:CRITICAL → HIGH → MEDIUM → LOW │ │
|
|
268
|
+
│ │ - 统计问题数量、分类分布、严重程度分布 │ │
|
|
269
|
+
│ └────────────────────────────────────────────────────────────────┘ │
|
|
270
|
+
│ │
|
|
271
|
+
│ 汇总输出:符合 references/REPORT_TEMPLATE.md **检出问题详情**章节格式要求的问题列表 │
|
|
272
|
+
└───────────────────────────────────┬──────────────────────────────────┘
|
|
273
|
+
│
|
|
274
|
+
▼
|
|
275
|
+
┌──────────────────────────────────────────────────────────────────────┐
|
|
276
|
+
│ 步骤 5:报告生成 │
|
|
277
|
+
│ │
|
|
278
|
+
│ **重要:报告必须输出到 ./report/ 目录** │
|
|
279
|
+
│ **禁止输出到其他路径**(如 .opencode/tmp/、./output/ 等) │
|
|
280
|
+
│ │
|
|
281
|
+
│ **重要:必须按照 references/REPORT_TEMPLATE.md 格式生成Markdown报告** │
|
|
282
|
+
│ **重要:必须按照 references/REPORT_TEMPLATE.csv 格式生成CSV报告** │
|
|
283
|
+
│ **禁止偏离模板定义的格式** │
|
|
284
|
+
│ │
|
|
285
|
+
│ **必须执行的输出流程**: │
|
|
286
|
+
│ │
|
|
287
|
+
│ 1. 检查 ./report/ 目录是否存在 │
|
|
288
|
+
│ 使用 Bash 工具执行:ls ./report/ │
|
|
289
|
+
│ 或使用 Glob 工具检查:pattern="./report/*" │
|
|
290
|
+
│ │
|
|
291
|
+
│ 2. 如果 ./report/ 不存在,必须先创建目录 │
|
|
292
|
+
│ 使用 Bash 工具执行:mkdir ./report │
|
|
293
|
+
│ **禁止在目录不存在时直接输出** │
|
|
294
|
+
│ │
|
|
295
|
+
│ 3. 严格按 references/REPORT_TEMPLATE.md 格式生成Markdown报告 │
|
|
296
|
+
│ 严格按 references/REPORT_TEMPLATE.csv 格式生成CSV报告 │
|
|
297
|
+
│ **禁止增减报告章节或修改报告格式** │
|
|
298
|
+
│ │
|
|
299
|
+
│ 4. 输出报告到 ./report/ 目录(必须使用 Write 工具) │
|
|
300
|
+
│ ├── ./report/report_{target}_{timestamp}.md ← 详细报告 │
|
|
301
|
+
│ └── ./report/report_{target}_{timestamp}.csv ← 表格报告 │
|
|
302
|
+
│ **target**: 检视目标名称(如文件名、目录名) │
|
|
303
|
+
│ **timestamp**: 时间戳格式 `YYYYMMDD_HHMMSS` │
|
|
304
|
+
│ │
|
|
305
|
+
│ 5. 验证报告已成功输出 │
|
|
306
|
+
│ 使用 Bash 工具执行:ls ./report/ │
|
|
307
|
+
└──────────────────────────────────────────────────────────────────────┘
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
## 工作流说明
|
|
311
|
+
|
|
312
|
+
### 关键原则
|
|
313
|
+
|
|
314
|
+
1. **规则遍历完整性**:
|
|
315
|
+
- 用户指定检测规则时:必须遍历用户指定的所有规则,不得遗漏任何一条规则
|
|
316
|
+
- 用户未指定检测规则时:必须遍历所有启用的规则,不得遗漏任何一条规则
|
|
317
|
+
- 主 Agent 必须验证所有指定或启用的规则已全部遍历
|
|
318
|
+
|
|
319
|
+
2. **模板格式严格遵守**:
|
|
320
|
+
- Subagent 输出:每个 Subagent 必须严格按照 `references/PROBLEM_TEMPLATE.md` 格式输出问题
|
|
321
|
+
- 主 Agent 输出:主 Agent 必须严格按照 `references/REPORT_TEMPLATE.md` 和 `references/REPORT_TEMPLATE.csv` 格式生成报告
|
|
322
|
+
- 格式验证:主 Agent 在汇总时验证每个问题的格式完整性和规范性
|
|
323
|
+
- 禁止偏离:任何输出不得偏离模板定义的格式和章节结构
|
|
324
|
+
|
|
325
|
+
3. **Subagent 并行检视**:
|
|
326
|
+
- 针对每个稳定性分类,必须启动独立的 Subagent 进行检视
|
|
327
|
+
- 共 9 个稳定性分类,对应 9 个 Subagent 并行工作
|
|
328
|
+
- 每个 Subagent 负责遍历该分类下的所有规则,不得遗漏
|
|
329
|
+
- 所有 Subagent 完成后,由主 Agent 汇总检测结果
|
|
330
|
+
|
|
331
|
+
### 详细流程
|
|
332
|
+
|
|
333
|
+
1. **规则加载与遍历准备**:
|
|
334
|
+
- 根据 config/rules.yaml 加载启用的规则列表
|
|
335
|
+
- **用户指定规则时**:解析用户指定的规则 ID 或过滤条件,确保遍历所有指定规则
|
|
336
|
+
- **用户未指定规则时**:加载所有启用的规则,确保遍历所有规则
|
|
337
|
+
- 验证规则 ID 的有效性,按稳定性分类组织规则
|
|
338
|
+
|
|
339
|
+
2. **白名单配置加载**:
|
|
340
|
+
- 加载 config/whitelist.yaml,初始化全局路径白名单、文件模式白名单和规则级白名单
|
|
341
|
+
- 将白名单配置传递给所有 Subagent
|
|
342
|
+
|
|
343
|
+
3. **并行分类型代码检视(Subagent 模式)**:
|
|
344
|
+
- 主 Agent 根据稳定性分类启动 9 个 Subagent(覆盖 9 个分类)
|
|
345
|
+
- 每个 Subagent 的职责:
|
|
346
|
+
- 遍历该分类下的所有规则(例如:异常处理分类遍历 ExceptionHandling_001~003 共 3 条规则)
|
|
347
|
+
- 根据规则文档执行代码检视,应用白名单过滤
|
|
348
|
+
- 输出该分类的 issues 列表
|
|
349
|
+
- **重要**:每个 Subagent 必须遍历该分类下的所有规则,不得遗漏任何一条规则
|
|
350
|
+
- Subagent 分类列表:
|
|
351
|
+
- Subagent 1: 异常处理(ExceptionHandling,3 条规则)
|
|
352
|
+
- Subagent 2: 并发稳定性(ConcurrencyStability,5 条规则)
|
|
353
|
+
- Subagent 3: 性能稳定性(PerformanceStability,2 条规则)
|
|
354
|
+
- Subagent 4: 资源管理(ResourceManagement,7 条规则)
|
|
355
|
+
- Subagent 5: 初始化顺序(InitializationOrder,1 条规则)
|
|
356
|
+
- Subagent 6: 边界条件(BoundaryCondition,18 条规则)
|
|
357
|
+
- Subagent 7: 生命周期(Lifecycle,2 条规则)
|
|
358
|
+
- Subagent 8: 内存稳定性(MemoryStability,7 条规则)
|
|
359
|
+
- Subagent 9: 图形稳定性(GraphicsStability,12 条规则)
|
|
360
|
+
|
|
361
|
+
4. **主 Agent 汇总检测结果**:
|
|
362
|
+
- 收集所有 9 个 Subagent 的输出
|
|
363
|
+
- 格式验证:验证每个问题的格式完整性和规范性
|
|
364
|
+
- 去重合并:合并所有 issues 列表,同位置问题合并
|
|
365
|
+
- 分组排序:按分类组织,按严重程度分组(CRITICAL → HIGH → MEDIUM → LOW)
|
|
366
|
+
- 验证规则遍历完整性:
|
|
367
|
+
- 检查用户指定的规则是否全部遍历
|
|
368
|
+
- 或检查所有启用的规则是否全部遍历
|
|
369
|
+
- 记录每条规则的检查状态作为内部验证
|
|
370
|
+
|
|
371
|
+
5. **报告输出(强制要求)**:
|
|
372
|
+
- **必须**先检查 `./report/` 目录是否存在
|
|
373
|
+
- 如果不存在,**必须**先使用 Bash 工具执行 `mkdir ./report` 创建目录
|
|
374
|
+
- **必须**使用 Write 工具输出 Markdown 和 CSV 报告到 `./report/` 目录
|
|
375
|
+
- **必须**严格按照 `references/REPORT_TEMPLATE.md` 格式生成Markdown报告
|
|
376
|
+
- **必须**同时按照 `references/REPORT_TEMPLATE.csv` 格式生成CSV报告
|
|
377
|
+
- Markdown报告必须包含以下章节:
|
|
378
|
+
- 检视概览(代码信息、问题统计、分类问题分布)
|
|
379
|
+
- 检出问题详情(按严重程度分组,每个问题严格遵循 `references/PROBLEM_TEMPLATE.md`)
|
|
380
|
+
- 修复优先级建议
|
|
381
|
+
- 附录(白名单过滤、检视工具版本)
|
|
382
|
+
- CSV报告必须包含以下内容:
|
|
383
|
+
- 首行标题包含:问题序号、稳定性类别、规则名称、规则ID、问题描述、文件路径
|
|
384
|
+
- 后续每行列出一个检出问题
|
|
385
|
+
- 问题描述和文件路径**禁止**包含 `,` 字符
|
|
386
|
+
- **禁止**输出到其他路径(如 `.opencode/tmp/` 等)
|
|
387
|
+
- **禁止**偏离模板定义的格式
|
|
388
|
+
- 如果报告未输出到 `./report/` 目录或格式不符合模板,视为**检视流程不完整**,需要重新执行输出步骤
|
|
389
|
+
|
|
390
|
+
## 核心概念
|
|
391
|
+
|
|
392
|
+
### 稳定性分类
|
|
393
|
+
|
|
394
|
+
框架包含 9 个稳定性分类,总计 57 条规则:
|
|
395
|
+
|
|
396
|
+
| 分类 | 英文名 | 规则数量 | 描述 | 规则ID范围 |
|
|
397
|
+
|------|--------|----------|------|------------|
|
|
398
|
+
| 异常处理 | ExceptionHandling | 3条 | 检测异常未捕获、空catch块、异常处理不当等 | ExceptionHandling_001~003 |
|
|
399
|
+
| 并发稳定性 | ConcurrencyStability | 5条 | 检测死锁风险、线程池耗尽、任务堆积等 | ConcurrencyStability_001~005 |
|
|
400
|
+
| 性能稳定性 | PerformanceStability | 2条 | 检测无限循环风险、大循环、递归深度等 | PerformanceStability_001~002 |
|
|
401
|
+
| 资源管理 | ResourceManagement | 7条 | 检测文件句柄泄漏、数据库连接泄漏等 | ResourceManagement_001~007 |
|
|
402
|
+
| 初始化顺序 | InitializationOrder | 1条 | 检测静态初始化顺序问题、未初始化使用等 | InitializationOrder_001 |
|
|
403
|
+
| 边界条件 | BoundaryCondition | 18条 | 检测空容器操作、极端输入处理等 | BoundaryCondition_001~018 |
|
|
404
|
+
| 生命周期 | Lifecycle | 2条 | 检测对象生命周期管理、异步任务生命周期等 | Lifecycle_001~002 |
|
|
405
|
+
| 内存稳定性 | MemoryStability | 7条 | 检测内存泄漏、OOM风险、内存碎片化等 | MemoryStability_001~007 |
|
|
406
|
+
| 图形稳定性 | GraphicsStability | 12条 | 检测图形资源泄漏、渲染异常、UI线程阻塞等 | GraphicsStability_001~012 |
|
|
407
|
+
|
|
408
|
+
所有规则以 Markdown 文档形式存放在 `references/` 目录,按文件夹分类
|
|
409
|
+
|
|
410
|
+
### 严重程度等级
|
|
411
|
+
|
|
412
|
+
| 等级 | 定义 | 适用场景 | 典型后果 |
|
|
413
|
+
|------|------|----------|----------|
|
|
414
|
+
| **CRITICAL** | 极高风险,可能导致系统崩溃、安全漏洞,必须立即修复 | 空指针解引用、use-after-free、double-free、内存越界访问、Parcel数据安全风险、除零崩溃 | 程序崩溃(SIGSEGV)、安全漏洞、内存损坏 |
|
|
415
|
+
| **HIGH** | 高风险,可能导致服务中断、资源耗尽、严重稳定性问题 | 内存泄漏、资源泄漏、线程安全问题、并发死锁、递归栈溢出、GPU资源管理问题 | OOM、资源耗尽、服务中断、性能严重退化 |
|
|
416
|
+
| **MEDIUM** | 中等风险,可能导致功能异常、数据错误,但不直接导致崩溃 | 编码规范违规、类型转换问题、初始化顺序问题、JSON处理不当、std::atomic时序问题 | 功能异常、数据错误、性能轻微退化 |
|
|
417
|
+
|
|
418
|
+
### 规则文档结构
|
|
419
|
+
|
|
420
|
+
每条规则文档包含以下核心内容:
|
|
421
|
+
- **问题描述**:稳定性风险的具体描述和危害
|
|
422
|
+
- **检测示例**:问题代码和修复方案对比
|
|
423
|
+
- **检测范围**:需要检查的 API、函数、模式
|
|
424
|
+
- **检测要点**:具体的检测步骤
|
|
425
|
+
- **风险流分析(RiskFlow)**:风险来源、风险类型、传播路径、影响点
|
|
426
|
+
- **影响分析(ImpactAnalysis)**:触发条件、传播方式、后果、缓解建议
|
|
427
|
+
- **误报排除**:安全场景识别表格
|
|
428
|
+
- **测试用例**:包含触发用例(错误写法)和安全用例(正确写法)
|
|
429
|
+
|
|
430
|
+
规则文档格式详见示例[references/RULE_TEMPLATE.md](references/RULE_TEMPLATE.md)
|
|
431
|
+
|
|
432
|
+
### 规则遍历机制
|
|
433
|
+
|
|
434
|
+
框架采用**严格遍历机制**,确保规则检视的完整性:
|
|
435
|
+
|
|
436
|
+
1. **用户指定规则时**:
|
|
437
|
+
- 解析用户指定的规则 ID 列表或过滤条件
|
|
438
|
+
- 按列表顺序遍历所有指定规则,不得遗漏
|
|
439
|
+
- 验证规则 ID 的有效性
|
|
440
|
+
- 内部验证所有指定规则已遍历
|
|
441
|
+
|
|
442
|
+
2. **用户未指定规则时**:
|
|
443
|
+
- 加载 config/rules.yaml 中所有启用的规则
|
|
444
|
+
- 默认遍历所有启用的规则
|
|
445
|
+
- 按分类组织规则遍历流程
|
|
446
|
+
- 内部验证所有启用规则已遍历
|
|
447
|
+
|
|
448
|
+
### Subagent 并行检视机制
|
|
449
|
+
|
|
450
|
+
框架采用**分类并行检视**机制,提升检视效率:
|
|
451
|
+
|
|
452
|
+
1. **分类型并行**:
|
|
453
|
+
- 主 Agent 根据 9 个稳定性分类启动 9 个 Subagent
|
|
454
|
+
- 每个 Subagent 负责一个稳定性分类的规则检视
|
|
455
|
+
- Subagent 之间并行工作,互不干扰
|
|
456
|
+
|
|
457
|
+
2. **Subagent 职责**:
|
|
458
|
+
- 接收主 Agent 分配的稳定性分类
|
|
459
|
+
- 遍历该分类下的所有规则(例如:异常处理分类遍历 3 条规则)
|
|
460
|
+
- 对每个代码文件执行规则检视
|
|
461
|
+
- 应用白名单过滤
|
|
462
|
+
- 输出该分类的 issues 列表
|
|
463
|
+
|
|
464
|
+
3. **主 Agent 汇总**:
|
|
465
|
+
- 收集所有 9 个 Subagent 的检测结果
|
|
466
|
+
- 格式验证:验证每个问题的格式完整性和规范性
|
|
467
|
+
- 去重合并:合并 issues 列表,同位置问题合并
|
|
468
|
+
- 分组排序:按分类组织,按严重程度分组
|
|
469
|
+
- 验证规则遍历完整性
|
|
470
|
+
- 生成最终报告
|
|
471
|
+
|
|
472
|
+
### 规则遍历完整性验证
|
|
473
|
+
|
|
474
|
+
为确保规则遍历不遗漏,框架要求以下验证机制:
|
|
475
|
+
|
|
476
|
+
1. **检视前验证**:
|
|
477
|
+
- 用户指定规则时:验证所有指定规则 ID 是否存在
|
|
478
|
+
- 用户未指定规则时:加载所有启用的规则 ID 列表
|
|
479
|
+
- 按分类统计规则数量,准备分发给 Subagent
|
|
480
|
+
|
|
481
|
+
2. **检视中验证**:
|
|
482
|
+
- 每个 Subagent 必须遍历该分类下的所有规则,不得遗漏
|
|
483
|
+
- Subagent 输出应包含已遍历的规则 ID 列表
|
|
484
|
+
|
|
485
|
+
3. **检视后验证**:
|
|
486
|
+
- 主 Agent 验证每个分类的规则遍历完整性
|
|
487
|
+
- 标注每条规则的遍历状态作为过程验证
|
|
488
|
+
- **不要**单开章节输出完整性验证到报告中
|
|
489
|
+
|
|
490
|
+
### 报告输出
|
|
491
|
+
|
|
492
|
+
1. **模板文件**:
|
|
493
|
+
- **Subagent 输出格式**:[检出问题格式模板](references/PROBLEM_TEMPLATE.md)
|
|
494
|
+
- 每个 Subagent 必须严格按照此模板格式输出检出的每个问题
|
|
495
|
+
- 包含:问题标题、分类、规则、位置、函数、严重程度、关键源码片段、问题描述、风险流分析、影响分析、修复建议
|
|
496
|
+
- **主 Agent 输出格式**:[报告输出格式模板(Markdown)](references/REPORT_TEMPLATE.md)
|
|
497
|
+
- 主 Agent 必须严格按照此模板格式生成最终稳定性代码审查报告(Markdown格式)
|
|
498
|
+
- 包含:检视概览、检出问题详情(按严重程度分组)、修复优先级建议、附录
|
|
499
|
+
- **主 Agent 输出格式**:[报告输出格式模板(CSV)](references/REPORT_TEMPLATE.csv)
|
|
500
|
+
- 主 Agent 必须严格按照此模板格式生成检出问题列表报告(CSV格式)
|
|
501
|
+
- 首行标题包含:问题序号、稳定性类别、规则名称、规则ID、问题描述、文件路径
|
|
502
|
+
- 问题描述和文件路径**禁止**包含 `,` 字符
|
|
503
|
+
|
|
504
|
+
2. **格式遵守要求**:
|
|
505
|
+
- Subagent 输出问题前,必须参考 `references/PROBLEM_TEMPLATE.md` 确保格式完整
|
|
506
|
+
- 主 Agent 汇总问题时,必须验证每个问题的格式完整性和规范性
|
|
507
|
+
- 主 Agent 生成报告前,必须参考 `references/REPORT_TEMPLATE.md` 和 `references/REPORT_TEMPLATE.csv` 确保格式完整
|
|
508
|
+
- 禁止偏离模板定义的格式和章节结构
|
|
509
|
+
|
|
510
|
+
## 添加新规则
|
|
511
|
+
|
|
512
|
+
1. **定义规则信息**:确定规则 ID、名称、分类、严重程度
|
|
513
|
+
2. **创建规则文档**:按 [references/RULE_TEMPLATE.md](references/RULE_TEMPLATE.md) 格式编写规则文档
|
|
514
|
+
3. **更新配置**:在 [config/rules.yaml](config/rules.yaml) 中添加规则配置
|
|
515
|
+
4. **更新文档**:新增规则后,需同步更新 [README.md](README.md)、[SKILL.md](SKILL.md)、[references/RULE_INDEX.md](references/RULE_INDEX.md) 中的相关说明
|
|
516
|
+
5. **验证规则有效性**:使用 Agent 检视代码验证规则检出准确性,根据结果优化规则文档
|
|
517
|
+
|
|
518
|
+
更多规则开发指导详见 [references/RULE_DEVELOPMENT_GUIDE.md](references/RULE_DEVELOPMENT_GUIDE.md)
|