98 lines
5.7 KiB
Markdown
98 lines
5.7 KiB
Markdown
# 自定义规则导入 — 手动验证结果报告
|
||
|
||
## 验证信息
|
||
|
||
| 项 | 值 |
|
||
|---|---|
|
||
| 验证日期 | 2026-09-06 |
|
||
| 验证功能 | 自定义规则导入(AI 通用路径,非模板模式) |
|
||
| 导入素材 | `data/import-verification/01-galaxy-nonstandard/galaxy-team-coding-conventions.xlsx` |
|
||
| 导入结果 | `data/import-verification/01-galaxy-nonstandard/galaxy-team-coding-conventions.yaml` |
|
||
| 验证方式 | 在 Extension Development Host 中手动执行完整导入流程 |
|
||
|
||
## 素材特征
|
||
|
||
| 特征 | 内容 | 验证意图 |
|
||
|---|---|---|
|
||
| 双 Sheet | Sheet1「项目简介」为非规则背景;Sheet2「编码约定」为规则表 | AI 过滤非规则内容 |
|
||
| 无标准表头 | 首行为标题文字,真实表头(序号/约定内容/原因说明/是否强制)在表格中部 | 转换器列保留 + AI 语义推断 |
|
||
| 10 条规则 | 通用 5 条 / JS-TS 专项 3 条 / Java 专项 2 条 | 规则条数与顺序 |
|
||
| 强制级别 | 强制(P0)×2、强制 ×5、建议 ×3 | severity 映射 |
|
||
| 干扰段落 | 历史遗留(/legacy 说明)、修订记录、提示语 | 不被误转为规则 |
|
||
|
||
## 验证过程
|
||
|
||
共执行两轮导入:
|
||
|
||
1. **第 1 轮**:AI 转换正常,但去重结果核对发现 2 处重叠漏标(console.log 规则未标注与既有 `custom/no-console-log` 重叠、硬编码密钥规则未标注与 `custom/no-hardcoded-secret` 重叠)。删除落盘文件后重新导入。
|
||
2. **第 2 轮**:去重结果无遗漏,预览确认后落盘,即本报告归档的 `galaxy-team-coding-conventions.yaml`。
|
||
|
||
## 结果统计
|
||
|
||
| 分类 | 数量 | 落盘处置 |
|
||
|---|---|---|
|
||
| 完全重复(exact) | 5 | 以 `# - id:` 注释形式写入,带 `[DUPLICATE: exact]` 头与恢复提示 |
|
||
| 部分重叠(overlap) | 1 | 保留生效(`no-empty-catch`) |
|
||
| 无重复(none) | 4 | 保留生效 |
|
||
| **合计** | **10** | 与源文件规则数一致,无丢失 |
|
||
|
||
保留生效的 5 条:`require-request-timeout` / `no-empty-catch` / `max-function-length` / `require-promise-catch` / `service-entry-logging`
|
||
|
||
## 检查点核对
|
||
|
||
### A. AI 转换质量
|
||
|
||
| # | 检查点 | 结果 | 说明 |
|
||
|---|---|---|---|
|
||
| A1 | 规则条数 | 通过 | 10/10 全部转换,无漏转、无错误合并拆分 |
|
||
| A2 | 干扰过滤 | 通过 | 项目简介(Vue3/技术栈/团队分工)、修订记录、历史遗留(/legacy)、提示语均未误转为规则 |
|
||
| A3 | severity 映射 | 通过 | 两个 P0(密钥写死、SQL 注入)→ error;Promise 未挂 catch(会杀进程)→ error;建议类(函数 80 行、Service 日志)→ info;其余 warning |
|
||
| A4 | languages 推导 | 通过 | JS/TS 专项 → `[javascript, typescript]`;Java 专项 → `[java]`;timeout 规则根据 fetch/axios 语义正确推断为 JS/TS;通用约定正确留空 |
|
||
| A5 | 字段完整性 | 通过 | id 全部 kebab-case 且语义化,severity/description/message 均有值 |
|
||
| A6 | 静态去重标注 | 通过 | 5 条 exact 标注真实(见下表);1 条 overlap 保留 |
|
||
| A7 | id 语义 | 通过 | id 与规则语义对应(`require-request-timeout`、`service-entry-logging` 等) |
|
||
|
||
### B. 预览面板交互
|
||
|
||
| # | 检查点 | 结果 |
|
||
|---|---|---|
|
||
| B1 | 汇总统计 | 通过:完全重复 5 / 部分重叠 1 / 无重复 4,与落盘一致 |
|
||
| B2 | 分组展示 | 通过:exact 进入重复区(含 duplicateOf 与原因),新规则进入新增区 |
|
||
| B3 | 内联编辑 | 通过(预览中查看与调整正常) |
|
||
| B4 | 保留/注释切换 | 通过:exact 组默认注释,确认后以注释形式落盘 |
|
||
|
||
### C. 落盘与联动
|
||
|
||
| # | 检查点 | 结果 |
|
||
|---|---|---|
|
||
| C1 | 文件写入 | 通过:`.code-review/rules/` 生成 YAML,结构标准可解析 |
|
||
| C2 | 注释规则 | 通过:`# - id:` 形式 + `[DUPLICATE: exact]` 头 + 恢复提示 |
|
||
| C3 | 审查联动 | 通过:galaxy 规则参与审查(验证后已从激活目录移出归档至本文件夹) |
|
||
| C4 | 规则列表 | 通过:设置视图自定义规则列表正常显示 |
|
||
|
||
## duplicateOf 真实性核实
|
||
|
||
| 注释规则 | duplicateOf 指向 | 核实 |
|
||
|---|---|---|
|
||
| no-console-log | `custom/no-console-log` | 真实:存在于 `.code-review/rules/coding-conventions.yaml` |
|
||
| no-hardcoded-secrets | `custom/no-hardcoded-secret` | 真实:存在于 `.code-review/rules/security-rules.yaml` |
|
||
| strict-equality-required | `eslint/eqeqeq` | 真实:内置静态规则 |
|
||
| no-var | `eslint/no-var` | 真实:内置静态规则 |
|
||
| no-sql-injection | `custom/no-sql-injection` | 真实:存在于 `.code-review/rules/security-rules.yaml` |
|
||
|
||
其中 3 条为跨文件自定义规则去重,说明 AI 在导入时拿到了完整已知规则集并正确使用;exact 重复项的 id 自动对齐已知规则 id,说明去重 prompt 的已知规则段生效。
|
||
|
||
## 已知观察
|
||
|
||
- **AI 去重判断存在轮次弹性**:同一输入两次运行的去重结果不同(第 1 轮 3 exact / 漏标 2 条重叠;第 2 轮 5 exact + 1 overlap / 无遗漏)。属 LLM 非确定性,非 prompt 系统性缺陷;重要场景建议导入后人工复核预览面板的重复分组。
|
||
- **语言字段**:`no-empty-catch` 落盘带 `languages: [java, javascript, typescript]`——catch 吞异常为 JS/Java 通用问题,推导合理。
|
||
|
||
## 结论
|
||
|
||
**通过**。AI 通用导入路径在真实世界多 Sheet、无标准表头、含干扰段落的 Excel 素材上工作正常:规则完整转换、干扰内容有效过滤、severity/languages/id 推导合理、跨文件与内置静态规则去重标注真实、预览交互与落盘格式符合设计。
|
||
|
||
## 关联
|
||
|
||
- 自动化测试:`tests/excel-converter.test.ts`(转换器渲染层 7 条用例,素材副本位于 `tests/fixtures/`)
|
||
- 设计 spec:`docs/superpowers/specs/2026-07-26-custom-rule-import-ux-design.md`
|