@zhanlucode/zl-darwin-arm64 1.6.4-moma.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.
Files changed (91) hide show
  1. package/LICENSE +22 -0
  2. package/bin/rg +0 -0
  3. package/bin/tree-sitter/tree-sitter-bash.wasm +0 -0
  4. package/bin/tree-sitter/tree-sitter-c.wasm +0 -0
  5. package/bin/tree-sitter/tree-sitter-c_sharp.wasm +0 -0
  6. package/bin/tree-sitter/tree-sitter-cpp.wasm +0 -0
  7. package/bin/tree-sitter/tree-sitter-css.wasm +0 -0
  8. package/bin/tree-sitter/tree-sitter-dart.wasm +0 -0
  9. package/bin/tree-sitter/tree-sitter-elisp.wasm +0 -0
  10. package/bin/tree-sitter/tree-sitter-elixir.wasm +0 -0
  11. package/bin/tree-sitter/tree-sitter-elm.wasm +0 -0
  12. package/bin/tree-sitter/tree-sitter-embedded_template.wasm +0 -0
  13. package/bin/tree-sitter/tree-sitter-go.wasm +0 -0
  14. package/bin/tree-sitter/tree-sitter-html.wasm +0 -0
  15. package/bin/tree-sitter/tree-sitter-java.wasm +0 -0
  16. package/bin/tree-sitter/tree-sitter-javascript.wasm +0 -0
  17. package/bin/tree-sitter/tree-sitter-json.wasm +0 -0
  18. package/bin/tree-sitter/tree-sitter-kotlin.wasm +0 -0
  19. package/bin/tree-sitter/tree-sitter-lua.wasm +0 -0
  20. package/bin/tree-sitter/tree-sitter-objc.wasm +0 -0
  21. package/bin/tree-sitter/tree-sitter-ocaml.wasm +0 -0
  22. package/bin/tree-sitter/tree-sitter-php.wasm +0 -0
  23. package/bin/tree-sitter/tree-sitter-python.wasm +0 -0
  24. package/bin/tree-sitter/tree-sitter-ql.wasm +0 -0
  25. package/bin/tree-sitter/tree-sitter-rescript.wasm +0 -0
  26. package/bin/tree-sitter/tree-sitter-ruby.wasm +0 -0
  27. package/bin/tree-sitter/tree-sitter-rust.wasm +0 -0
  28. package/bin/tree-sitter/tree-sitter-scala.wasm +0 -0
  29. package/bin/tree-sitter/tree-sitter-solidity.wasm +0 -0
  30. package/bin/tree-sitter/tree-sitter-swift.wasm +0 -0
  31. package/bin/tree-sitter/tree-sitter-systemrdl.wasm +0 -0
  32. package/bin/tree-sitter/tree-sitter-tlaplus.wasm +0 -0
  33. package/bin/tree-sitter/tree-sitter-toml.wasm +0 -0
  34. package/bin/tree-sitter/tree-sitter-tsx.wasm +0 -0
  35. package/bin/tree-sitter/tree-sitter-typescript.wasm +0 -0
  36. package/bin/tree-sitter/tree-sitter-vue.wasm +0 -0
  37. package/bin/tree-sitter/tree-sitter-yaml.wasm +0 -0
  38. package/bin/tree-sitter/tree-sitter-zig.wasm +0 -0
  39. package/bin/tree-sitter/tree-sitter.wasm +0 -0
  40. package/bin/zhanlu-plugins/bundle-index.json +60 -0
  41. package/bin/zhanlu-plugins/lingji-alpha-assistant/.claude-plugin/plugin.json +42 -0
  42. package/bin/zhanlu-plugins/lingji-alpha-assistant/README.md +29 -0
  43. package/bin/zhanlu-plugins/lingji-alpha-assistant/mcps/sast_fixer_mcp/README.md +10 -0
  44. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-check/SKILL.md +179 -0
  45. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-check/config/gitlab_config.json +5 -0
  46. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-check/prompts/step1_preparation.md +167 -0
  47. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-check/prompts/step2_consistency_check.md +446 -0
  48. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-check/scripts/gitlab_clone.py +213 -0
  49. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-check/scripts/read_excel_requirements.py +144 -0
  50. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/GITLAB_USAGE.md +160 -0
  51. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/QUICK_REFERENCE.md +149 -0
  52. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/README.md +134 -0
  53. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/SKILL.md +151 -0
  54. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/assets/review_standards.md +144 -0
  55. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/prompts/file_review_prompt.md +160 -0
  56. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/prompts/output_requirements.md +35 -0
  57. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/prompts/step1_project_preprocessing.md +106 -0
  58. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/prompts/step2_file_review.md +83 -0
  59. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/prompts/step3_report_generation.md +319 -0
  60. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/code-review/scripts/gitlab_clone.py +213 -0
  61. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/manual-test-case-generator/SKILL.md +366 -0
  62. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/manual-test-case-generator/references/generation-rules.md +214 -0
  63. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/manual-test-case-generator/references/query-rules.md +60 -0
  64. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/manual-test-case-generator/references/review-rules.md +117 -0
  65. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/manual-test-case-generator/references/save-rules.md +367 -0
  66. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/quality_scan/SKILL.md +195 -0
  67. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/requirement-analysis/SKILL.md +346 -0
  68. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/requirement-review/SKILL.md +267 -0
  69. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/requirements-gather/SKILL.md +187 -0
  70. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/sast_scan/SKILL.md +312 -0
  71. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/story-decomposer/SKILL.md +77 -0
  72. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/story-decomposer/evals/evals.json +34 -0
  73. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/story-decomposer/references/epic-to-story-methodology.md +122 -0
  74. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/story-decomposer/references/epic-to-story-template.md +93 -0
  75. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/story-decomposer/references/epic-to-story-to-task-template.md +221 -0
  76. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/story-decomposer/references/story-to-task-methodology.md +139 -0
  77. package/bin/zhanlu-plugins/lingji-alpha-assistant/skills/story-decomposer/references/story-to-task-template.md +89 -0
  78. package/bin/zhanlu-plugins/lingji-beta-assistant/.claude-plugin/plugin.json +19 -0
  79. package/bin/zhanlu-plugins/lingji-beta-assistant/README.md +21 -0
  80. package/bin/zhanlu-plugins/lingji-beta-assistant/skills/.gitkeep +1 -0
  81. package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirement-analysis/SKILL.md +383 -0
  82. package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirement-decomposer/SKILL.md +348 -0
  83. package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirement-decomposer/references/epic-to-story-methodology.md +122 -0
  84. package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirement-decomposer/references/epic-to-story-template.md +93 -0
  85. package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirement-decomposer/references/epic-to-story-to-task-template.md +221 -0
  86. package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirement-decomposer/references/story-to-task-methodology.md +139 -0
  87. package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirement-decomposer/references/story-to-task-template.md +89 -0
  88. package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirement-review/SKILL.md +350 -0
  89. package/bin/zhanlu-plugins/lingji-beta-assistant/skills/beta-requirements-gather/SKILL.md +244 -0
  90. package/bin/zl +4 -0
  91. package/package.json +18 -0
@@ -0,0 +1,446 @@
1
+ # 步骤2:需求代码一致性校验与报告生成
2
+
3
+ 本指南详细说明如何对需求文档和代码进行一致性校验,并生成结构化评审报告。
4
+
5
+ ---
6
+
7
+ ## 一、角色定位
8
+
9
+ 你是拥有10年以上后端开发与架构评审经验的**高级代码评审工程师**,精通需求-代码对齐校验、业务逻辑完整性验证与代码规范审查。本次需基于提供的需求文档与项目代码,开展需求与代码一致性专项评审。
10
+
11
+ ---
12
+
13
+ ## 二、评审核心目标
14
+
15
+ 1. 验证代码实现与需求文档的**功能点100%对齐**,无遗漏、无反向实现、无理解偏差
16
+ 2. 核查业务逻辑、边界处理、参数校验等关键环节的完整性与合规性
17
+ 3. 识别超出需求定义的额外功能、不符合架构规范的代码问题
18
+ 4. 按问题严重程度分级输出结论,明确影响范围与可落地的修复建议
19
+
20
+ ---
21
+
22
+ ## 三、全量评审维度与判定标准
23
+
24
+ | 一级维度 | 二级子项 | 核心检查要点 | 问题分级 |
25
+ | :--- | :--- | :--- | :--- |
26
+ | **1. 核心功能实现完整性** | 功能点全覆盖 | 核对需求文档中所有功能点(含核心流程、分支流程)是否在代码中完整实现。代码需实现需求定义的全部功能,无遗漏、无简化、无反向实现 | 严重问题:核心功能缺失、实现与需求完全相反<br>一般性问题:非核心小需求未完成 |
27
+ | | 方法/接口匹配 | 检查代码中是否实现了需求明确要求的所有接口、方法、回调。需求指定的方法/接口必须完整实现,无缺失、无签名偏差 | 严重问题:核心业务方法缺失<br>一般性问题:辅助方法未实现 |
28
+ | **2. 业务逻辑与校验完整性** | 业务逻辑完整性 | 核查核心业务逻辑、数据转换逻辑、回调逻辑是否完整实现。需求定义的所有业务规则、转换规则、回调分支均需实现,无逻辑断层 | 严重问题:关键业务逻辑缺失导致流程不可用<br>一般性问题:边缘分支逻辑未实现 |
29
+ | | 参数与数据校验 | 检查是否实现需求要求的参数校验、非空校验、格式校验等。所有必填参数、敏感数据需按需求完成校验,无校验缺失、校验规则不符 | 严重问题:核心参数校验缺失导致数据安全风险<br>一般性问题:非核心参数校验不全 |
30
+ | **3. 边界与异常处理合规性** | 边界场景处理 | 核查边界条件(如参数极值、空值、满值)是否按需求处理。所有需求明确的边界场景均需实现对应处理逻辑,无遗漏 | 严重问题:核心边界场景未处理导致功能崩溃<br>一般性问题:边缘边界场景处理不全 |
31
+ | | 异常场景处理 | 检查异常分支、错误处理逻辑是否符合需求定义。需求定义的异常场景需有明确的捕获、处理与返回逻辑,无裸奔代码 | 严重问题:关键异常未处理导致系统不稳定<br>一般性问题:非核心异常处理不全 |
32
+ | **4. 调用与参数传递正确性** | 服务/接口调用 | 检查内部服务、外部接口的调用方式、调用时机是否符合需求。调用方式(同步/异步)、调用链路、依赖顺序需与需求一致,无错误调用 | 严重问题:核心依赖调用错误导致流程失败<br>一般性问题:非核心调用方式不规范 |
33
+ | | 参数传递 | 核查参数传递的完整性、正确性,是否遗漏必填参数。所有必填参数需完整传递,参数类型、格式需与接口定义/需求一致 | 严重问题:核心参数传递错误/缺失导致功能失效<br>一般性问题:非核心参数传递不规范 |
34
+ | **5. 代码结构与实现合理性** | 代码层级与位置 | 检查代码是否放置在正确的模块、层级与类中。代码需遵循项目架构规范,按业务/技术分层放置,无跨层调用、位置不当 | 一般性问题:代码层级放置不规范 |
35
+ | | 实现方式合规性 | 核查功能实现方式是否符合项目最佳实践与技术规范。实现逻辑需采用合理的技术方案,无硬编码、无低效实现、无反模式 | 一般性问题:实现方式不符合最佳实践 |
36
+ | **6. 额外功能管控** | 未定义功能排查 | 检查代码中是否存在需求文档未定义的额外功能、分支逻辑。代码仅能实现需求明确指定的功能,无超出范围的冗余实现 | 一般性问题:存在未定义的额外功能实现 |
37
+
38
+ ---
39
+
40
+ ## 四、各维度详细检查要点
41
+
42
+ ### 维度1:核心功能实现完整性
43
+
44
+ #### 1.1 功能点全覆盖
45
+
46
+ **检查要点**:
47
+ - 核对需求文档中所有功能点(含核心流程、分支流程)是否在代码中完整实现
48
+ - 代码需实现需求定义的全部功能,无遗漏、无简化、无反向实现
49
+
50
+ **判定标准**:
51
+ - 严重问题:核心功能缺失、实现与需求完全相反
52
+ - 一般性问题:非核心小需求未完成
53
+
54
+ **检查方法**:
55
+ 1. 读取需求文档,提取所有功能点列表
56
+ 2. 扫描代码,查找对应的功能实现
57
+ 3. 对比实现与需求的差异
58
+ 4. 记录任何遗漏、简化或反向实现
59
+
60
+ #### 1.2 方法/接口匹配
61
+
62
+ **检查要点**:
63
+ - 检查代码中是否实现了需求明确要求的所有接口、方法、回调
64
+ - 需求指定的方法/接口必须完整实现,无缺失、无签名偏差
65
+
66
+ **判定标准**:
67
+ - 严重问题:核心业务方法缺失
68
+ - 一般性问题:辅助方法未实现
69
+
70
+ **检查方法**:
71
+ 1. 从需求文档提取所有定义的接口、方法、回调列表
72
+ 2. 在代码中搜索对应的方法签名
73
+ 3. 检查方法参数、返回值类型是否匹配
74
+ 4. 验证方法实现逻辑是否正确
75
+
76
+ ### 维度2:业务逻辑与校验完整性
77
+
78
+ #### 2.1 业务逻辑完整性
79
+
80
+ **检查要点**:
81
+ - 核查核心业务逻辑、数据转换逻辑、回调逻辑是否完整实现
82
+ - 需求定义的所有业务规则、转换规则、回调分支均需实现,无逻辑断层
83
+
84
+ **判定标准**:
85
+ - 严重问题:关键业务逻辑缺失导致流程不可用
86
+ - 一般性问题:边缘分支逻辑未实现
87
+
88
+ **检查方法**:
89
+ 1. 识别需求中的核心业务场景
90
+ 2. 追踪代码中的业务逻辑实现路径
91
+ 3. 检查数据转换、状态流转、分支处理
92
+ 4. 验证回调机制的完整性
93
+
94
+ #### 2.2 参数与数据校验
95
+
96
+ **检查要点**:
97
+ - 检查是否实现需求要求的参数校验、非空校验、格式校验等
98
+ - 所有必填参数、敏感数据需按需求完成校验,无校验缺失、校验规则不符
99
+
100
+ **判定标准**:
101
+ - 严重问题:核心参数校验缺失导致数据安全风险
102
+ - 一般性问题:非核心参数校验不全
103
+
104
+ **检查方法**:
105
+ 1. 从需求中提取所有参数校验规则
106
+ 2. 检查代码中的校验逻辑实现
107
+ 3. 验证校验规则与需求的一致性
108
+ 4. 检查敏感数据保护措施
109
+
110
+ ### 维度3:边界与异常处理合规性
111
+
112
+ #### 3.1 边界场景处理
113
+
114
+ **检查要点**:
115
+ - 核查边界条件(如参数极值、空值、满值)是否按需求处理
116
+ - 所有需求明确的边界场景均需实现对应处理逻辑,无遗漏
117
+
118
+ **判定标准**:
119
+ - 严重问题:核心边界场景未处理导致功能崩溃
120
+ - 一般性问题:边缘边界场景处理不全
121
+
122
+ **检查方法**:
123
+ 1. 从需求中提取所有边界场景定义
124
+ 2. 检查代码中的边界条件处理
125
+ 3. 测试边界值的实际表现
126
+ 4. 验证边界处理逻辑的完整性
127
+
128
+ #### 3.2 异常场景处理
129
+
130
+ **检查要点**:
131
+ - 检查异常分支、错误处理逻辑是否符合需求定义
132
+ - 需求定义的异常场景需有明确的捕获、处理与返回逻辑,无裸奔代码
133
+
134
+ **判定标准**:
135
+ - 严重问题:关键异常未处理导致系统不稳定
136
+ - 一般性问题:非核心异常处理不全
137
+
138
+ **检查方法**:
139
+ 1. 识别需求中定义的所有异常场景
140
+ 2. 检查代码中的异常捕获逻辑
141
+ 3. 验证异常处理是否符合预期
142
+ 4. 检查是否有未捕获的异常可能导致系统崩溃
143
+
144
+ ### 维度4:调用与参数传递正确性
145
+
146
+ #### 4.1 服务/接口调用
147
+
148
+ **检查要点**:
149
+ - 检查内部服务、外部接口的调用方式、调用时机是否符合需求
150
+ - 调用方式(同步/异步)、调用链路、依赖顺序需与需求一致,无错误调用
151
+
152
+ **判定标准**:
153
+ - 严重问题:核心依赖调用错误导致流程失败
154
+ - 一般性问题:非核心调用方式不规范
155
+
156
+ **检查方法**:
157
+ 1. 从需求中提取所有服务/接口调用定义
158
+ 2. 检查代码中的调用实现
159
+ 3. 验证调用方式、时机、顺序
160
+ 4. 检查是否有遗漏或错误的依赖调用
161
+
162
+ #### 4.2 参数传递
163
+
164
+ **检查要点**:
165
+ - 核查参数传递的完整性、正确性,是否遗漏必填参数
166
+ - 所有必填参数需完整传递,参数类型、格式需与接口定义/需求一致
167
+
168
+ **判定标准**:
169
+ - 严重问题:核心参数传递错误/缺失导致功能失效
170
+ - 一般性问题:非核心参数传递不规范
171
+
172
+ **检查方法**:
173
+ 1. 提取所有接口/方法的参数定义
174
+ 2. 检查调用处的参数传递
175
+ 3. 验证参数类型、格式、必填性
176
+ 4. 检查是否有遗漏或错误的参数传递
177
+
178
+ ### 维度5:代码结构与实现合理性
179
+
180
+ #### 5.1 代码层级与位置
181
+
182
+ **检查要点**:
183
+ - 检查代码是否放置在正确的模块、层级与类中
184
+ - 代码需遵循项目架构规范,按业务/技术分层放置,无跨层调用、位置不当
185
+
186
+ **判定标准**:
187
+ - 一般性问题:代码层级放置不规范
188
+
189
+ **检��方法**:
190
+ 1. 了解项目的架构分层规范
191
+ 2. 检查代码文件的放置位置
192
+ 3. 验证分层是否合理
193
+ 4. 检查是否有跨层调用等不规范设计
194
+
195
+ #### 5.2 实现方式合规性
196
+
197
+ **检查要点**:
198
+ - 核查功能实现方式是否符合项目最佳实践与技术规范
199
+ - 实现逻辑需采用合理的技术方案,无硬编码、无低效实现、无反模式
200
+
201
+ **判定标准**:
202
+ - 一般性问题:实现方式不符合最佳实践
203
+
204
+ **检查方法**:
205
+ 1. 检查代码实现方式
206
+ 2. 识别硬编码、低效实现
207
+ 3. 检查是否违反最佳实践
208
+ 4. 验证技术方案的合理性
209
+
210
+ ### 维度6:额外功能管控
211
+
212
+ #### 6.1 未定义功能排查
213
+
214
+ **检查要点**:
215
+ - 检查代码中是否存在需求文档未定义的额外功能、分支逻辑
216
+ - 代码仅能实现需求明确指定的功能,无超出范围的冗余实现
217
+
218
+ **判定标准**:
219
+ - 一般性问题:存在未定义的额外功能实现
220
+
221
+ **检查方法**:
222
+ 1. 扫描代码中的所有功能点
223
+ 2. 对比需求文档的定义
224
+ 3. 识别未定义的额外功能
225
+ 4. 评估额外功能的影响和必要性
226
+
227
+ ---
228
+
229
+ ## 五、评审执行指南
230
+
231
+ ### 读取需求文档
232
+ 首先从 `{工作目录}\doc\` 读取所有需求文档文件(requirement_*.md),识别出所有需要评审的需求编号列表
233
+
234
+ ### 扫描代码结构
235
+ 1. 识别项目的技术栈和框架
236
+ 2. 分析项目目录结构
237
+ 3. 确定核心代码文件和模块
238
+
239
+ ### 多需求评审流程
240
+
241
+ 对于每个需求编号,依次执行以下步骤:
242
+
243
+ 1. **读取需求文档**:从 `{工作目录}\doc\requirement_[需求编号].md` 读取该需求的完整内容
244
+ 2. **逐维度检查**:按照6大维度11个评审点逐项检查该需求
245
+ 3. **记录评审结果**:
246
+ - 记录该需求的所有问题(严重问题/一般性问题)
247
+ - 记录该需求的合规项
248
+ - 记录该需求的优化建议
249
+ - 计算该需求的一致性符合度
250
+ 4. **继续下一个需求**:重复上述步骤直到所有需求评审完成
251
+
252
+ ### 汇总评审结果
253
+
254
+ 所有需求评审完成后:
255
+ 1. 汇总所有需求的问题清单
256
+ 2. 统计总体问题数量
257
+ 3. 计算平均一致性符合度
258
+ 4. 生成综合报告
259
+
260
+ ### 记录发现
261
+ 1. 记录所有发现的问题
262
+ 2. 按严重程度分级(严重问题/一般性问题)
263
+ 3. 包含问题位置、描述、影响分析、修复建议
264
+
265
+ ---
266
+
267
+ ## 六、评审输出规范
268
+
269
+ 请严格按以下结构输出评审结果,确保信息完整、逻辑清晰。报告保存为 `{工作目录}\需求代码一致性评审报告.md`。
270
+
271
+ ### 报告模板
272
+
273
+ #### 标题
274
+ # 需求代码一致性评审报告
275
+
276
+ #### 基本信息
277
+ - **评审编号**:[自动生成,如 RC-20260518-001]
278
+ - **需求列表**:[REQ-2024-001, REQ-2024-002, ...]
279
+ - **代码仓库**:[GitLab仓库URL]
280
+ - **评审日期**:[自动生成,如 2026-05-18]
281
+ - **评审人**:需求代码一致性校验Skill
282
+
283
+ ---
284
+
285
+ ### 评审概述
286
+
287
+ - **评审范围**:共 X 个需求,涉及 XXX 模块的 main 分支代码
288
+ - **整体结论**:平均一致性符合度 XX%,发现严重问题 X 个、一般性问题 X 个
289
+ - **评审维度覆盖**:6大维度11个评审点
290
+
291
+ > **示例**:
292
+ > - 评审范围:本报告基于 3 个需求文档(REQ-2024-001, REQ-2024-002, REQ-2024-003),对 XXX 模块的 main 分支代码进行评审
293
+ > - 整体结论:平均一致性符合度为 85%,发现 5 个严重问题、12 个一般性问题,需要重点关注参数校验缺失问题
294
+
295
+ ---
296
+
297
+ ## 需求1:[REQ-2024-001] 评审结果
298
+
299
+ ### 需求概述
300
+ [简要描述该需求的核心功能点,可从需求文档中提取关键信息]
301
+
302
+ ### 问题清单
303
+
304
+ #### 严重问题
305
+
306
+ 【严重问题-001】[问题名称]
307
+ - 问题位置:[文件路径] + [代码行号]/[模块名]
308
+ - 问题描述:[明确说明与需求的偏差点,引用需求原文与代码片段对比]
309
+ - 影响分析:[对业务流程、系统稳定性、数据安全的影响]
310
+ - 修复建议:[明确对齐需求的修改方向与可落地的实现方案]
311
+
312
+ ---
313
+
314
+ 【严重问题-002】[问题名称]
315
+ - 问题位置:[文件路径] + [代码行号]/[模块名]
316
+ - 问题描述:[...]
317
+ - 影响分析:[...]
318
+ - 修复建议:[...]
319
+
320
+ #### 一般性问题
321
+
322
+ 【一般问题-001】[问题名称]
323
+ - 问题位置:[文件路径] + [代码行号]/[模块名]
324
+ - 问题描述:[...]
325
+ - 影响分析:[...]
326
+ - 修复建议:[...]
327
+
328
+ 【一般问题-002】[问题名称]
329
+ - ...
330
+
331
+ ---
332
+
333
+ ### 合规项说明
334
+
335
+ 列出该需求下完全符合需求定义的核心功能与模块,说明对齐情况,增强报告可信度。
336
+
337
+ > **示例**:
338
+ > - 用户注册功能:完整实现了需求中定义的手机号校验、验证码校验、用户信息入库逻辑,无偏差。
339
+ > - 订单创建流程:核心业务流程、状态流转逻辑均与需求文档完全对齐,边界场景处理完整。
340
+
341
+ ---
342
+
343
+ ### 优化建议(可选)
344
+
345
+ 对该需求实现方式、代码结构中虽不影响一致性但可优化的点给出建议,提升代码质量。
346
+
347
+ > **示例**:
348
+ > - 订单状态判断逻辑可使用枚举类替代硬编码字符串,提升可维护性。
349
+ > - 部分重复的参数校验逻辑可抽取为公共工具类,减少代码冗余。
350
+
351
+ ---
352
+
353
+ ### 一致性符合度
354
+
355
+ | 指标 | 数值 | 说明 |
356
+ |------|------|------|
357
+ | 符合度 | XX% | 综合评估整体一致性,考虑问题严重程度(每个严重问题扣5-10%,一般问题扣1-3%) |
358
+ | 核心功能覆盖率 | XX% | 需求定义的核心功能点在代码中的实现比例(已实现功能数/总功能数) |
359
+ | 严重问题数 | X | 影响核心功能或系统稳定性的严重问题数量 |
360
+ | 一般性问题数 | X | 不影响核心功能的一般性问题数量 |
361
+
362
+ > **指标说明**:
363
+ > - **符合度**:反映整体实现质量,值越低表示问题越多或越严重
364
+ > - **核心功能覆盖率**:反映功能完整性,100%表示所有核心功能都已实现(但不代表实现质量好)
365
+ > - **两者关系**:覆盖率100%但符合度低 = 功能齐全但质量差;覆盖率低但符合度高 = 已实现部分质量好但有功能缺失
366
+
367
+ ---
368
+
369
+ ## 需求2:[REQ-2024-002] 评审结果
370
+
371
+ [结构与需求1相同,依次展示每个需求的评审结果]
372
+
373
+ ---
374
+
375
+ ## [后续需求...]
376
+
377
+ [如有更多需求,按相同结构继续添加章节]
378
+
379
+ ---
380
+
381
+ ## 多需求一致性汇总
382
+
383
+ | 需求编号 | 符合度 | 核心功能覆盖率 | 严重问题数 | 一般性问题数 | 合规项数 | 修复优先级 |
384
+ |----------|--------|----------------|------------|--------------|----------|------------|
385
+ | REQ-2024-001 | XX% | XX% | X | X | X | 高/中/低 |
386
+ | REQ-2024-002 | XX% | XX% | X | X | X | 高/中/低 |
387
+ | ... | ... | ... | ... | ... | ... | ... |
388
+ | **平均值** | **XX%** | **XX%** | **X** | **X** | **X** | - |
389
+
390
+ > **说明**:
391
+ > - **符合度**:综合评估整体一致性,考虑问题数量和严重程度(每个严重问题扣5-10%,一般问题扣1-3%)
392
+ > - **核心功能覆盖率**:需求定义的核心功能点在代码中的实现比例(已实现功能数/总功能数)
393
+ > - **修复优先级**:高(存在严重问题或符合度<70%)、中(仅一般性问题且符合度70%-85%)、低(无明显问题且符合度>85%)
394
+
395
+ ---
396
+
397
+ ## 总体问题统计
398
+
399
+ | 类别 | 数量 |
400
+ |------|------|
401
+ | 严重问题总计 | X |
402
+ | 一般性问题总计 | X |
403
+ | 合规项总计 | X |
404
+ | 优化建议总计 | X |
405
+ | **问题总数** | **X** |
406
+
407
+ ---
408
+
409
+ ## 修复建议优先级
410
+
411
+ 根据所有需求的问题严重程度,建议按以下顺序修复:
412
+
413
+ 1. **[高优先级]** [列出需要优先处理的严重问题,按影响程度排序]
414
+ - [问题1描述]
415
+ - [问题2描述]
416
+
417
+ 2. **[中优先级]** [列出次要问题]
418
+ - [问题3描述]
419
+ - [问题4描述]
420
+
421
+ 3. **[低优先级]** [优化建议和轻微问题]
422
+ - [优化建议1]
423
+ - [优化建议2]
424
+
425
+ ---
426
+
427
+ ## 七、输出要求
428
+
429
+ 1. **客观准确**:每个问题需给出明确判定依据
430
+ 2. **风险分级**:清晰区分严重问题与一般性问题
431
+ 3. **格式规范**:严格按照上述模板格式输出
432
+ 4. **禁止乱码**:禁止输出任何乱码、不可见字符、问号乱码串、特殊控制符、零宽空格
433
+
434
+ ---
435
+
436
+ ## 八、终端输出
437
+
438
+ 报告生成完成后,在终端输出:
439
+ ```
440
+ ✅ 步骤2+3完成:一致性校验与评审报告已生成并保存至 {完整文件路径}
441
+ - 报告文件:需求代码一致性评审报告.md
442
+ - 评审需求数:X 个
443
+ - 严重问题总计:X 个
444
+ - 一般性问题总计:X 个
445
+ - 平均一致性符合度:XX%
446
+ ```
@@ -0,0 +1,213 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ GitLab 代码拉取脚本(跨平台版)
4
+ 用法: python gitlab_clone.py --url <url> --path <path> [--branch <branch>]
5
+ """
6
+
7
+ import argparse
8
+ import json
9
+ import os
10
+ import shutil
11
+ import subprocess
12
+ import sys
13
+ from pathlib import Path
14
+
15
+ if sys.platform == "win32":
16
+ import io
17
+ sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8", errors="replace")
18
+ sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding="utf-8", errors="replace")
19
+
20
+
21
+ def load_config(script_dir: Path) -> dict:
22
+ config_file = script_dir.parent / "config" / "gitlab_config.json"
23
+ if not config_file.exists():
24
+ print(f"[ERROR] 配置文件不存在: {config_file}")
25
+ print("请先创建配置文件并设置 GitLab Token")
26
+ sys.exit(1)
27
+
28
+ try:
29
+ with open(config_file, "r", encoding="utf-8") as f:
30
+ return json.load(f)
31
+ except json.JSONDecodeError as e:
32
+ print(f"[ERROR] 配置文件格式错误: {e}")
33
+ sys.exit(1)
34
+
35
+
36
+ def validate_url(url: str) -> bool:
37
+ return url.startswith("http://") or url.startswith("https://")
38
+
39
+
40
+ def get_git_command(config: dict) -> str:
41
+ return config.get("git_path", "git")
42
+
43
+
44
+ def check_git_available(git_cmd: str) -> bool:
45
+ try:
46
+ result = subprocess.run(
47
+ [git_cmd, "--version"],
48
+ capture_output=True,
49
+ text=True
50
+ )
51
+ if result.returncode == 0:
52
+ print(f"[OK] Git 版本: {result.stdout.strip()}")
53
+ return True
54
+ except FileNotFoundError:
55
+ pass
56
+
57
+ print("[ERROR] 未找到 Git 命令,请确保已安装 Git 并添加到系统 PATH")
58
+ return False
59
+
60
+
61
+ def create_directory(path: str) -> bool:
62
+ path_obj = Path(path)
63
+
64
+ if path_obj.exists():
65
+ if any(path_obj.iterdir()):
66
+ print(f"[WARNING] 目录 {path} 不为空")
67
+ print(" 继续操作可能会覆盖现有文件")
68
+ confirm = input(" 是否继续?(y/n): ").strip().lower()
69
+ if confirm != 'y':
70
+ print("操作已取消")
71
+ return False
72
+
73
+ path_obj.mkdir(parents=True, exist_ok=True)
74
+ print(f"[OK] 目录已存在: {path}")
75
+ else:
76
+ path_obj.mkdir(parents=True, exist_ok=True)
77
+ print(f"[OK] 创建目录: {path}")
78
+
79
+ return True
80
+
81
+
82
+ def clone_repository(git_cmd: str, url: str, path: str, branch: str, token: str) -> bool:
83
+ if url.startswith("https://"):
84
+ authenticated_url = url.replace("https://", f"https://oauth2:{token}@")
85
+ else:
86
+ authenticated_url = url.replace("http://", f"http://oauth2:{token}@")
87
+
88
+ project_name = Path(url).stem.replace(".git", "")
89
+
90
+ print("")
91
+ print("开始拉取代码...")
92
+ print(f" 仓库: {project_name}")
93
+ print(f" URL: {url}")
94
+ print(f" 分支: {branch}")
95
+ print(f" 保存路径: {path}")
96
+ print("")
97
+
98
+ try:
99
+ print("正在克隆仓库...")
100
+
101
+ result = subprocess.run(
102
+ [git_cmd, "clone", "--depth", "1", "--branch", branch, authenticated_url, path],
103
+ capture_output=True,
104
+ text=True,
105
+ cwd=path
106
+ )
107
+
108
+ if result.returncode == 0:
109
+ print("")
110
+ print("=" * 40)
111
+ print(" [SUCCESS] 代码拉取成功!")
112
+ print("=" * 40)
113
+ print("")
114
+ print(f"本地路径: {path}")
115
+ print("")
116
+ print("现在可以对此项目进行代码评审")
117
+ print("")
118
+ return True
119
+ else:
120
+ print_error(result.stderr or result.stdout, path)
121
+ return False
122
+
123
+ except Exception as e:
124
+ print(f"[ERROR] {e}")
125
+ print_error(str(e), path)
126
+ return False
127
+
128
+
129
+ def print_error(error_msg: str, path: str):
130
+ print("")
131
+ print("=" * 40)
132
+ print(" [FAILED] 代码拉取失败")
133
+ print("=" * 40)
134
+ print("")
135
+ print(f"错误信息: {error_msg}")
136
+ print("")
137
+ print("可能的原因:")
138
+ print(" 1. GitLab Token 无效或已过期")
139
+ print(" 2. 仓库地址不正确或无访问权限")
140
+ print(" 3. 网络连接问题")
141
+ print(" 4. 指定的分支不存在")
142
+ print("")
143
+ print("建议:")
144
+ print(" - 检查 config/gitlab_config.json 中的 Token 是否正确")
145
+ print(" - 确认仓库地址和分支名称是否正确")
146
+ print(" - 尝试在浏览器中访问该仓库确认是否有权限")
147
+ print("")
148
+
149
+ try:
150
+ path_obj = Path(path)
151
+ if path_obj.exists() and not any(path_obj.iterdir()):
152
+ path_obj.rmdir()
153
+ print(f"已清理空目录: {path}")
154
+ except Exception:
155
+ pass
156
+
157
+
158
+ def main():
159
+ parser = argparse.ArgumentParser(
160
+ description="GitLab 代码拉取工具(跨平台版)",
161
+ formatter_class=argparse.RawDescriptionHelpFormatter,
162
+ epilog="""
163
+ 示例:
164
+ python gitlab_clone.py --url https://gitlab.com/group/project.git --path ./code
165
+ python gitlab_clone.py -u https://gitlab.com/group/project.git -p D:\\code\\review -b develop
166
+ """
167
+ )
168
+
169
+ parser.add_argument("-u", "--url", required=True, help="GitLab 仓库 URL")
170
+ parser.add_argument("-p", "--path", required=True, help="本地保存路径")
171
+ parser.add_argument("-b", "--branch", default="", help="分支名称(默认使用配置文件中的 default_branch)")
172
+ parser.add_argument("-c", "--config", default="", help="配置文件路径(可选)")
173
+
174
+ args = parser.parse_args()
175
+
176
+ print("=" * 40)
177
+ print(" GitLab 代码拉取工具")
178
+ print("=" * 40)
179
+ print("")
180
+
181
+ if not validate_url(args.url):
182
+ print("[ERROR] GitLab URL 格式不正确,必须以 http:// 或 https:// 开头")
183
+ sys.exit(1)
184
+
185
+ script_dir = Path(__file__).parent.resolve()
186
+ config = load_config(script_dir)
187
+
188
+ token = config.get("gitlab_token")
189
+ if not token or token == "YOUR_GITLAB_TOKEN_HERE":
190
+ print("[ERROR] GitLab Token 未配置")
191
+ print("请在 config/gitlab_config.json 中设置您的 GitLab Token")
192
+ sys.exit(1)
193
+
194
+ branch = args.branch
195
+ if not branch:
196
+ branch = config.get("default_branch", "main")
197
+
198
+ git_cmd = get_git_command(config)
199
+
200
+ if not check_git_available(git_cmd):
201
+ sys.exit(1)
202
+
203
+ if not create_directory(args.path):
204
+ sys.exit(0)
205
+
206
+ if clone_repository(git_cmd, args.url, args.path, branch, token):
207
+ sys.exit(0)
208
+ else:
209
+ sys.exit(1)
210
+
211
+
212
+ if __name__ == "__main__":
213
+ main()