job51-gitlab-cr-node-jt-1 2.6.1 → 2.6.3
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.
|
@@ -197,6 +197,21 @@
|
|
|
197
197
|
> - 对于 `@@ -0,0 +1,N @@`(新增文件):`绝对行号 = 编号`(因为 new_start=1)
|
|
198
198
|
> - 对于 `@@ -old_start,old_count +new_start,new_count @@`(修改文件):`绝对行号 = 编号 + new_start - 1`
|
|
199
199
|
> - **⚠️ 行号计算示例**(必读):
|
|
200
|
+
> - **示例 0:临时文件完整格式**(理解计数起点)
|
|
201
|
+
```
|
|
202
|
+
=== File Information === <-- 元数据行,忽略,不编号
|
|
203
|
+
New Path: b/src/Test.java <-- 元数据行,忽略,不编号
|
|
204
|
+
Old Path: a/src/Test.java <-- 元数据行,忽略,不编号
|
|
205
|
+
Block Index: 0 <-- 元数据行,忽略,不编号
|
|
206
|
+
New Start: 29 <-- 元数据行,忽略,不编号
|
|
207
|
+
New Count: 10 <-- 元数据行,忽略,不编号
|
|
208
|
+
=== Diff Content === <-- 元数据行,忽略,不编号
|
|
209
|
+
@@ -28,8 +29,10 @@ <-- @@ 行,不编号!从下一行才开始编号
|
|
210
|
+
public void method() { <-- 空格开头,编号=1,绝对行号=1+29-1=29
|
|
211
|
+
+ Object obj = getXxx(); <-- + 开头,编号=2,绝对行号=2+29-1=30 ← 问题在这,new_line=30
|
|
212
|
+
+ obj.toString(); <-- + 开头,编号=3,绝对行号=3+29-1=31 ← 问题在这,new_line=31
|
|
213
|
+
} <-- 空格开头,编号=4,绝对行号=4+29-1=32
|
|
214
|
+
```
|
|
200
215
|
> - **示例 1:新增文件** `@@ -0,0 +1,58 @@`(58 行新文件,new_start=1)
|
|
201
216
|
```
|
|
202
217
|
@@ -0,0 +1,58 @@
|
|
@@ -232,6 +247,15 @@
|
|
|
232
247
|
> - **正确做法**:放弃从完整文件读取的行号,重新基于 diff 块内容逐行计数
|
|
233
248
|
> - 示例:diff 块 `@@ -0,0 +1,56 @@` 范围是 [1, 56],如果你在完整文件中定位到第 60 行 → **该行不在 diff 块内,不能用**
|
|
234
249
|
> - **原因**:GitLab API 只能评论 diff 块范围内的行
|
|
250
|
+
> 5. **⚠️ 临时文件元数据行处理**(关键):
|
|
251
|
+
> - 临时文件格式包含 8 行元数据(7 行信息 + 1 行`@@`),这些都**不编号**
|
|
252
|
+
> - **必须从 `@@` 之后的第一行才开始编号为 1**
|
|
253
|
+
> - 验证方法:检查你的第一个行号是否等于 `new_start`。如果不是,说明你把元数据行算进去了
|
|
254
|
+
> - 示例:`@@ -0,0 +1,56 @@` 的第一个新增行(如 `+package`)的行号必须是 **1**
|
|
255
|
+
> - 错误示例:如果你返回的行号是 9、10、43 等,说明你把 8 行元数据算进去了,**必须重新计数**
|
|
256
|
+
> 6. **输出前最终验证**:
|
|
257
|
+
> - 对于每个问题的行号 X,问自己:"X - new_start + 1 是否等于我在 diff 块中从 `@@` 之后开始数的位置?"
|
|
258
|
+
> - 如果不等,说明计算错误,必须重新从 `@@` 之后逐行计数
|
|
235
259
|
> - 示例:`@@ -0,0 +1,56 @@` 的 diff 块,行号范围是 [1, 56],**不能返回 57、60 等超出范围的值**
|
|
236
260
|
> - 示例:`@@ -167,7 +167,6 @@` 的 diff 块,new_start=167, new_count=6,行号范围是 [167, 172]
|
|
237
261
|
> - **关键**:绝对行号必须通过 diff 块内计数计算,且结果必须在 diff 块范围 [new_start, new_start + new_count - 1] 内
|
|
@@ -18,6 +18,21 @@ description: 代码审查技能,审查变更代码并输出 REPORT 和 LINE_IN
|
|
|
18
18
|
- **必须**基于当前 diff 块内容,从 `@@ ... @@` 头**之后**的第一行开始逐行计数
|
|
19
19
|
- **忽略元数据行**:忽略 `=== File Information ===`、`=== Diff Content ===`、`New Path:`、`New Start:`、`New Count:`、`Block Index:` 等所有元数据行
|
|
20
20
|
- **⚠️ 关键**:`@@ ... @@` 这一行本身也不编号,从它**之后**的第一行才开始编号
|
|
21
|
+
- **⚠️ 临时文件格式示例**(理解计数起点):
|
|
22
|
+
```
|
|
23
|
+
=== File Information === <-- 元数据行,忽略,不编号
|
|
24
|
+
New Path: b/src/Test.java <-- 元数据行,忽略,不编号
|
|
25
|
+
Old Path: a/src/Test.java <-- 元数据行,忽略,不编号
|
|
26
|
+
Block Index: 0 <-- 元数据行,忽略,不编号
|
|
27
|
+
New Start: 29 <-- 元数据行,忽略,不编号
|
|
28
|
+
New Count: 10 <-- 元数据行,忽略,不编号
|
|
29
|
+
=== Diff Content === <-- 元数据行,忽略,不编号
|
|
30
|
+
@@ -28,8 +29,10 @@ <-- @@ 行,不编号!从下一行才开始编号
|
|
31
|
+
public void method() { <-- 空格开头,编号=1,绝对行号=1+29-1=29
|
|
32
|
+
+ Object obj = getXxx(); <-- + 开头,编号=2,绝对行号=2+29-1=30
|
|
33
|
+
+ obj.toString(); <-- + 开头,编号=3,绝对行号=3+29-1=31
|
|
34
|
+
} <-- 空格开头,编号=4,绝对行号=4+29-1=32
|
|
35
|
+
```
|
|
21
36
|
- **计数步骤**:
|
|
22
37
|
1. 找到 `@@ ... @@` 行(unified diff 的块头)
|
|
23
38
|
2. 从 `@@ ... @@` **之后**的第一行开始,按顺序给每一行编号(第 1 行、第 2 行、第 3 行...)
|
|
@@ -31,6 +46,10 @@ description: 代码审查技能,审查变更代码并输出 REPORT 和 LINE_IN
|
|
|
31
46
|
2. **逐个检查**每个问题的行号是否在该范围内
|
|
32
47
|
3. **如果任何行号超出范围,必须重新基于 diff 块计数**
|
|
33
48
|
4. **禁止**直接使用从完整文件读取的行号
|
|
49
|
+
5. **验证计算过程**:在输出前,必须在心中默念验证:
|
|
50
|
+
- "这个行号 X 是否在 [new_start, new_start + new_count - 1] 范围内?"
|
|
51
|
+
- "如果 X 超出范围,说明我计数错误,必须从 `@@` 行之后重新逐行编号"
|
|
52
|
+
- "临时文件的前 8 行(7 行元数据 + 1 行`@@`)都不能编号,从第 9 行(`@@`之后的第一行)才开始编号为 1"
|
|
34
53
|
- **示例**:
|
|
35
54
|
- `@@ -0,0 +1,56 @@` 的行号范围是 [1, 56],**不能返回 57、60 等超出范围的值**
|
|
36
55
|
- `@@ -167,7 +167,6 @@` 的行号范围是 [167, 172],**不能返回 <167 或 >172 的值**
|
|
@@ -849,6 +849,8 @@ npm run dev
|
|
|
849
849
|
|
|
850
850
|
| 版本 | 日期 | 变更说明 |
|
|
851
851
|
|------|------|----------|
|
|
852
|
+
| **2.6.2** | 2026-04-16 | **行号计算示例增强**:添加临时文件完整格式示例,明确展示元数据行和 `@@` 行不编号。问题根因:尽管规则已明确"从 `@@` 之后开始计数",但 AI 仍然错误地将元数据行和 `@@` 行算入编号,导致行号系统性偏差(如正确行号 29 返回 43、31 返回 45 等)。修复方案:(1) 在 `code-review-rules.md` 第 13 条添加**示例 0:临时文件完整格式**,逐行标注哪些行忽略、哪些行编号、编号如何计算;(2) 在 `SKILL.md` 第 3 步添加**临时文件格式示例**,展示完整的计数过程;(3) 示例中明确标注 `=== File Information ===` 等 7 行元数据 + `@@` 行共 8 行都必须忽略,从 `@@` 之后的第一行才开始编号为 1 |
|
|
853
|
+
| **2.6.1** | 2026-04-16 | 行号计数起点明确修复 - 补充示例 |
|
|
852
854
|
| **2.6.0** | 2026-04-16 | **行号计数起点明确修复**:修复 AI 返回的行号系统性偏差 +8 的问题。问题根因:AI 在计数时把 `@@ ... @@` 这一行也算进去了,导致所有行号都 +8(如正确行号 30 返回 38、34 返回 42、38 返回 46、48 返回 56、54 返回 62)。修复方案:(1) 更新 `SKILL.md` 第 3 步,明确"`@@ ... @@`这一行本身也不编号,从它**之后**的第一行才开始编号";(2) 更新 `code-review-rules.md` 第 13 条,明确"`@@ ... @@`这一行本身**不编号**,从它**之后**的第一行才开始编号";(3) 在计数步骤中细化为 6 步,第 1 步"找到 `@@ ... @@` 行",第 2 步"从`@@ ... @@`**之后**的第一行开始编号" |
|
|
853
855
|
| **2.5.9** | 2026-04-16 | **行号计算强制验证修复**:修复 AI 返回的行号与代码对不上的问题。问题根因:AI 读取完整文件后,没有基于 diff 块内容逐行计数,而是直接返回了错误的行号(如 43、45、60),这些行号既不是 diff 块内的行号,也不是完整文件中的正确行号。修复方案:(1) 更新 `SKILL.md` 第 3 步,添加**强制验证步骤**,要求输出前必须逐个检查行号是否在 diff 块范围内;(2) 在 `读取上下文` 步骤中添加强制要求:读取完整文件仅用于理解代码逻辑,**不得**直接使用完整文件中的行号;(3) 添加验证公式:`new_start <= 行号 <= new_start + new_count - 1`;(4) 明确如果行号超出范围,必须回到 diff 块内容重新基于 `@@` 头之后逐行计数 |
|
|
854
856
|
| **2.5.8** | 2026-04-16 | **行号计算规则修正**:修正行号定义为"文件的绝对行号",但强调必须通过 diff 块内计数计算。问题根因:(1) 规则第 13 条错误地将行号定义为"diff 块内的相对行号",与 GitLab API 需要的绝对行号冲突;(2) AI 读取完整文件后定位到 diff 块范围之外的行(如第 60 行),导致行号验证失败。修复方案:(1) 更新 `code-review-rules.md` 第 13 条,明确行号是**变更后文件中的绝对行号**;(2) 修正计算方法:`绝对行号 = 从 @@ 头之后的编号 + new_start - 1`;(3) 添加强制验证步骤:输出前必须检查 `new_start <= 行号 <= new_start + new_count - 1`;(4) 添加特别场景处理:读取完整文件后必须验证行号是否在 diff 块范围内,超出范围则必须放弃该行号,重新基于 diff 块计数;(5) 更新 `SKILL.md` 第 3 步,同步更新行号计算方法 |
|