job51-gitlab-cr-node-jt-1 2.8.8 → 2.9.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.
@@ -16,19 +16,26 @@
16
16
  > - **示例**:判空检查后再进行值比较的逻辑(如:先检查对象非空,再访问其属性)— 已判空后再操作,是安全编码,**禁止报告任何问题**
17
17
  > - **自检问题**:输出前问自己"如果这段代码是安全的,我为什么要报告它?"
18
18
 
19
- 1. **审查范围限制**(关键规则):
19
+ 2. **审查范围限制**(关键规则):
20
20
  > - **只审查当前 diff 块内的新增代码**(+ 开头的行)
21
21
  > - **只报告当前 diff 块内能直接发现的问题**
22
+ > - **⚠️ 禁止对上下文行(空格开头的行)报告问题**:
23
+ > - 上下文行是未变更的代码,不在本次审查范围内
24
+ > - GitLab无法为上下文行创建有效的diff评论定位(line_code错误)
25
+ > - 即使上下文行看起来有问题,也不应报告,因为不在当前变更范围内
26
+ > - **⚠️ 问题行号必须指向新增代码行**(+ 开头的行):
27
+ > - LINE_INFO中的行号必须是实际新增或修改的行
28
+ > - 禁止对上下文行(空格开头)或删除行(-开头)报告问题
22
29
  > - **不要追踪方法调用链去其他文件中报告问题**(如"XX 方法返回 null,导致其他地方空指针")
23
30
  > - 可以分析方法返回值是否可能为 null,但**问题只能报告在当前调用处**
24
31
 
25
- 2. **同一问题只报告一次**:
32
+ 3. **同一问题只报告一次**:
26
33
  > - 同一个空指针问题可能在多处出现(import 行、依赖注入行、方法调用行)
27
34
  > - **只在真正会执行出错的代码行上报告一次**
28
35
  > - 示例:依赖注入的字段声明和后续的方法调用行都存在空指针风险
29
36
  > - **正确做法**:只在实际方法调用处报告(如调用 SDK 对象方法的位置),**禁止**在依赖注入行报告
30
37
 
31
- 3. **禁止报告问题的位置**:
38
+ 4. **禁止报告问题的位置**:
32
39
  > - import 导入语句行
33
40
  > - 类定义、package 声明行
34
41
  > - 方法签名行(除非签名本身有安全问题)
@@ -36,14 +43,14 @@
36
43
  > - 仅定义变量但未使用的行
37
44
  > - 其他不会直接导致运行时错误的位置
38
45
 
39
- 4. **深度分析但精准报告**:
46
+ 5. **深度分析但精准报告**:
40
47
  > - **报告运行时异常风险前,必须先用 Read 工具追踪读取相关方法/函数的实现代码**
41
48
  > - 适用场景:空指针/空引用异常、类型转换异常、集合越界等所有运行时异常
42
49
  > - 示例:看到方法调用链式访问对象属性时(如:调用服务方法获取对象,再访问该对象属性),**必须先读取**该服务方法的源码,确认其返回值是否可能为 null
43
50
  > - 如果方法/函数内部已有防护措施(如返回默认对象、空对象模式、边界检查等),则**禁止报告**该问题
44
51
  > - **禁止仅凭代码表面形式判断运行时异常风险**
45
52
 
46
- 5. **⚠️ 特别强调**:当前 CR 流程处于版本开发的最后合并阶段,代码逻辑已经过开发自测和 QA 测试验证。审查时应**基于项目原有的代码风格**,不得强制要求添加项目惯例中不存在的内容。
53
+ 6. **⚠️ 特别强调**:当前 CR 流程处于版本开发的最后合并阶段,代码逻辑已经过开发自测和 QA 测试验证。审查时应**基于项目原有的代码风格**,不得强制要求添加项目惯例中不存在的内容。
47
54
  > - **⚠️ 风格一致性原则**:参数校验、异常处理、注解使用等应与项目原有风格匹配,**不得报告"建议添加 XX 注解/XX 校验/XX 异常处理"** 这类问题。
48
55
  > - **⚠️ Controller/Client 接口参数校验放宽**:
49
56
  > - Controller 接口方法、Client 接口方法的参数校验**以项目原有风格为准**
@@ -27,6 +27,46 @@
27
27
 
28
28
  ## 版本历史
29
29
 
30
+ ### v2.8.7 (2026-04-29)
31
+
32
+ **当前版本**: 审查规则增强 - 文件路径格式保留与上下文行限制
33
+
34
+ **新增规则**:
35
+ - **文件路径格式保留强制规则**(规则0):防止AI"纠正"文件路径命名格式
36
+ - 问题现象:AI在LINE_INFO中错误修改文件路径格式,如将连字符`-`改成下划线`_`(例如:`51job-dev-boot-anteros` → `51job_dev_boot_anteros`)
37
+ - 根本原因:AI认为下划线更规范,主动"纠正"正确的路径命名
38
+ - 修复方案:
39
+ - 在规则文件中新增规则0:**文件路径必须保持原样**
40
+ - LINE_INFO中的`new_path`和`old_path`必须与diff块实际路径完全一致
41
+ - 禁止AI"纠正"或"规范化"文件路径命名
42
+ - 要求输出前验证路径是否与临时文件元数据完全匹配
43
+ - 影响:
44
+ - 防止AI路径格式幻觉,确保评论发布到正确文件位置
45
+ - 避免因路径不匹配被AI幻觉检测机制拦截
46
+ - 提高评论发布成功率
47
+ - 修复文件:
48
+ - `.claude/rules/code-review-rules.md:6-11`:新增规则0,文件路径格式保留强制要求
49
+
50
+ - **上下文行禁止报告规则**(规则1):防止对未变更代码报告问题导致GitLab API错误
51
+ - 问题现象:AI对上下文行(空格开头的未变更代码)报告问题,GitLab返回`400 Bad request - Note {:line_code=>["不能为空字符", "must be a valid line code"]}`
52
+ - 根本原因:
53
+ - GitLab Discussions API只能为实际变更的代码行(+开头的行)创建精准的diff评论定位
54
+ - 上下文行是未变更代码,GitLab无法为其生成有效的`line_code`
55
+ - AI忽略了这个约束,对未变更的上下文代码报告问题
56
+ - 修复方案:
57
+ - 在规则文件中规则1新增两条强制要求:
58
+ - **禁止对上下文行(空格开头的行)报告问题**
59
+ - **问题行号必须指向新增代码行**(+开头的行)
60
+ - 明确说明上下文行不在本次审查范围内
61
+ - 解释GitLab无法为上下文行创建有效的diff评论定位
62
+ - 影响:
63
+ - 避免GitLab API 400错误(line_code错误)
64
+ - 减少无效降级为一般讨论的情况
65
+ - 提高精准diff评论发布成功率
66
+ - 确保只审查实际变更的代码,符合审查范围限制原则
67
+ - 修复文件:
68
+ - `.claude/rules/code-review-rules.md:19-27`:规则1新增上下文行禁止报告和行号指向要求
69
+
30
70
  ### v2.8.4 (2026-04-28)
31
71
 
32
72
  **当前版本**: AI 幻觉检测功能新增
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "job51-gitlab-cr-node-jt-1",
3
- "version": "2.8.8",
3
+ "version": "2.9.0",
4
4
  "description": "GitLab merge request code review tool with AI-powered analysis and project context support",
5
5
  "main": "index.js",
6
6
  "bin": {