data: 自定义规则导入验证(3 场景 23 轮)+ 团队风格规则演示(5 规则全检出)

This commit is contained in:
范智鹏
2026-09-08 19:51:34 +08:00
parent 4efe8ea512
commit ad576e807f
41 changed files with 2946 additions and 0 deletions
@@ -0,0 +1,97 @@
# 自定义规则导入 — 手动验证结果报告
## 验证信息
| 项 | 值 |
|---|---|
| 验证日期 | 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 注入)→ errorPromise 未挂 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`