docs: 更新 AGENTS.md 对齐项目现状 + 新增分阶段实现时间线回溯

- AGENTS.md:命令表/四层架构/文件结构/命令前缀与项目现状对齐(08-26 tests 迁移、compile:test 等)
- docs/2026-08-27-implementation-timeline.md:基于 gittea git 全量历史回溯 40 条提交的 Phase 1-6 时间线(北京时间口径)
- _AI_USAGE_LOG.md:补充本轮相关日志记录
This commit is contained in:
范智鹏
2026-08-27 22:54:12 +08:00
parent 3280836124
commit 96750467d9
3 changed files with 95 additions and 17 deletions
+31 -17
View File
@@ -37,27 +37,30 @@ VSCode 代码审查与规范检查一体化插件。
| 命令 | 说明 |
|------|------|
| `npm run compile` | TypeScript 编译(tsc -p ./ |
| `npm run compile` | TypeScript 编译(tsc -p ./+ 拷贝 webview JSscripts/copy-webview-js.mjs |
| `npm run compile:test` | 测试编译(tsc -p ./tsconfig.test.json |
| `npm run watch` | tsc watch 模式 |
| `npm run lint` | ESLint 检查 `src/` |
| `npm test` | 编译 → lint → 运行测试 |
| `npm run lint` | ESLint 检查 `src/`eslint src |
| `npm test` | 测试编译 → 运行测试compile:test && vscode-test |
| `npm run package-prod` | 生产打包 VSIXscripts/package-prod.mjs |
| F5 (VSCode) | 启动 Extension Dev Host |
测试运行器:`@vscode/test-cli`,配置在 `.vscode-test.mjs`,测试文件匹配 `out/test/**/*.test.js`
测试运行器:`@vscode/test-cli`,配置在 `.vscode-test.mjs`,测试文件匹配 `out/tests/**/*.test.js`(测试源码位于根目录 `tests/`
验证顺序:`lint → compile → test`
验证顺序:`lint → compile → npm test``npm test` 内部执行 `compile:test` + `vscode-test`)。
## 架构
层架构,见 `docs/superpowers/specs/2026-07-10-code-reviewer-design.md`
层架构,见 `docs/superpowers/specs/2026-07-10-code-reviewer-design.md`
```
UI 层 — TreeView 面板 / Inline Diagnostic / Code Action
核心层 — Linter 管理器 + AI 审查引擎(均实现 Analyzer 接口
基础层 — 配置管理 / 规则管理 / 报告导出
UI 层 — Webview 审查/设置面板(src/panel、src/views+ Inline Diagnostic + Code Action
核心层 — Orchestrator(编排器)+ Merger(合并)+ AI 审查引擎(src/ai
适配层 — Linter 适配器(统一 LinterAdapter 接口,src/adapters/adapter.ts
基础层 — 配置管理(src/config/ 规则管理(src/rules/ 报告导出(src/utils/report.ts
```
所有 linter 和 AI 审查器统一实现 `Analyzer` 接口(定义在 `src/analyzers/analyzer.ts`
所有 linter 统一实现 `LinterAdapter` 接口(定义在 `src/adapters/adapter.ts`),通过 Orchestrator 调度,结果合并后通过 Webview 面板展示
## 文件结构
@@ -65,15 +68,25 @@ UI 层 — TreeView 面板 / Inline Diagnostic / Code Action
src/
├── extension.ts # 入口:activate/deactivate
├── activation/ # 注册命令、视图、CodeAction
├── analyzers/ # Analyzer 接口 + linter/AI 实现
├── manager/linterManager.ts # Linter 管理器
├── views/ # TreeView 提供者
├── services/ # AI API、配置服务
├── utils/ # 工具函数
── types.ts # 公共类型
├── adapters/ # LinterAdapter 接口 + 5 个 linter 适配器(ESLint/Stylelint/SQLFluff/PMD/JSP
├── ai/ # AI 审查引擎 + Provider 框架(providers/
├── orchestrator/ # 编排器:调度适配器、聚合结果
├── merger/ # 结果合并(静态诊断 + AI 翻译配对)
├── fix/ # 修复链路(fixEngine/aiFixEngine/customFixEngine/fixPreview/fixPending 等)
── rules/ # 规则管理(builtin-rules、转换器/导入/导出/过滤/预览)
├── scope/ # 方法级审查(method-extractor、status-cache
├── panel/ # 审查/设置 Webview 面板
├── views/ # TreeView/CodeLens Provider + webview JS
├── config/ # 配置管理(ai/linter/fixer/secret
├── diagnostics/ # Inline Diagnostic 标记
├── i18n/ # 多语言消息
├── jsp/ # JSP 源码提取
├── services/ # auxClasspath 等辅助服务
├── types.ts + types/ # 公共类型
└── utils/ # 工具函数
```
命令 ID 前缀统一为 `codeReviewer.`(如 `codeReviewer.analyzeFile`)。
命令 ID 前缀统一为 `codeReviewer.`(如 `codeReviewer.review`)。
## 代码规范
@@ -87,3 +100,4 @@ src/
设计 spec 存放路径:`docs/superpowers/specs/YYYY-MM-DD-<topic>-design.md`
编码须严格遵循已批准的 spec,不得自作主张。
非 spec 文档(如时间线、复盘类文档)放根目录 `docs/`
+6
View File
@@ -230,3 +230,9 @@
| 2026-08-26 19:16 | ① 用户提出 → ② 需求澄清 → ③ 方案设计 → ④ 人类审批 → ⑤ 编码实现 → ⑥ 审查验证 | 补齐 tests/ 实验报告(§8 成果物 04,coverage/ 按用户确认忽略):新建 tests/test-execution-log.md(测试执行日志:命令/环境/结果 116 passing 0 failing);tests/test-cases.md(从 16 个测试文件提取 suite/test 声明,116 条用例清单+覆盖点+统计);tests/measure/measure-review-time.mjs(提效测量脚本:内联复刻 src/rules/builtin-rules.ts 的 ESLint/Stylelint 内置配置,用 eslint/stylelint 引擎直跑 data/demo-*/src 样例计时,输出 tests/measure/results/measure-results.json);tests/measure/performance-comparison.md(提效对比骨架:测量方法+对比维度+插件侧实测数据已填 demo-eslint 6 文件 294 诊断 192.2ms / demo-stylelint 2 文件 115 诊断 2106.7ms / 合计 409 诊断 2298.9ms,人工基线留待实测)。验证:measure 脚本实测运行产出 JSON / lint 0 error(仅既有 mockDocument 2 warning/ 主流程 npm test 116 passing 不受影响 | 中间产物:measure 脚本初版 import '../../src/rules/builtin-rules'ESM 无法直接加载 TS 报 ERR_MODULE_NOT_FOUND)→ 改 import 编译产物 '../../out/rules/builtin-rules.js' 又因模块顶层 import vscode 脱离扩展宿主报 MODULE_NOT_FOUND → 最终改为内联规则配置(与 data/demo-eslint/run-coverage.mjs 既有模式一致);measure() 计时函数初版未 await 异步 fnresult 为 Promise 导致 result.reduce 报错,改为 async/await 后通过 | tests/test-execution-log.md(新建) tests/test-cases.md(新建) tests/measure/measure-review-time.mjs(新建) tests/measure/performance-comparison.md(新建) tests/measure/results/measure-results.json(新建) | deepseek-v4-flash |
| 2026-08-26 21:29 | ① 用户提出 → ② 需求澄清 → ③ 方案设计 → ④ 人类审批 → ⑤ 编码实现 → ⑥ 审查验证 | 修复 Windows 下 spawn 拉起 .cmd/.bat 必然 EINVAL 问题(方案 A):auxClasspath.ts exec() 对 Windows 批处理命令(mvnw.cmd/gradlew.bat/mvn.cmd/gradle.bat)改走 spawn('cmd.exe', ['/d','/s','/c', 双层引号包装命令]) + windowsVerbatimArguments:true,非批处理分支不变;新增私有 helper quoteCmdArg(安全字符正则含 \ 及 Windows 路径符,含空格/引号参数用 cmd 双引号转义 "→"")。修复 Maven/Gradle 自动 aux classpath 在 Windows 完全失效问题。验证:实测 npm.cmd 与含空格路径+含空格参数 .cmd 冒烟通过(exit 0/ lint 0 error(仅既有 mockDocument 2 warning/ compile 通过 / npm test 116 passing | 中间产物:①cmd /s /c 单层引号方案失败——命令首字符为引号时 cmd 剥首尾引号并移除最后一个引号字符,导致路径后残留引号拼接成非法命令(实测 'F:\nodejs\node.exe" -e "console.log' 无法识别),改为外层再包一层引号(双层引号)后通过;②quoteCmdArg safe 正则初版漏 \ 反斜杠,考虑 -Dmdep.outputFile=C:\... 参数补入;③PowerShell 双引号 here-string 内联 node 测试脚本引号被解析破坏报 SyntaxError,改用单引号 here-string 后通过;④是否加 windowsVerbatimArguments 决策点——不加则 Node 二次转义拼好的命令行,实测确认必须加 | src/services/auxClasspath.ts | deepseek-v4-flash |
| 2026-08-27 14:59 | ① 用户提出 → ② 需求澄清 → ③ 方案设计 → ④ 人类审批 → ⑤ 编码实现 → ⑥ 审查验证 | 新增性能优化证据文档 docs/superpowers/specs/2026-08-27-performance-optimization.md:按 Stage ② 澄清共识(优化措施整理文档、覆盖全部已实现优化、放入 specs 系列目录)产出六节结构文档——概述(统计口径:仅收录已实现优化、不含虚构定量数据)、缓存类优化(静态分析结果缓存 orchestrator/analysisCache、方法级审查状态缓存 status-cache、PMD auxclasspath 缓存含 mtime 校验与 inflight 并发合并、AI Provider 注册表缓存 registry/cachedProviders)、流程类优化(自定义规则语言预过滤 rule-filter、修复预生成持久化 aiFixEngine+fixPending、规则导入去重 dedup-prompt、debounce 工具)、界面与工程类优化(审查面板渲染 webview 主题适配、适配器三层配置)、收益汇总表、附录出处索引。每项统一「实现位置/机制/收益」格式。验证:19 个引用路径全部核实存在,纯新增文档无代码变更,不影响 lint/compile/test | 中间产物:澄清阶段先问「证据类型」(基准报告 vs 整理文档 vs 两者)用户选整理文档;再问「覆盖范围」用户选全部已实现优化;确认文档位置时用户在根 docs/ 与 specs 系列目录间选后者 | docs/superpowers/specs/2026-08-27-performance-optimization.md(新建) | deepseek-v4-flash |
| 2026-08-27 19:33 | ① 用户提出 → ② 需求澄清 → ③ 方案设计 → ④ 人类审批 → ⑤ 编码实现 → ⑥ 审查验证 | 生成分阶段实现时间线文档 docs/2026-08-27-implementation-timeline.md:先 git fetch --unshallow 补齐浅克隆取回全量 40 条提交,以北京时间为基准(内嵌 +0000 提交 +8h,如 8244d20 内嵌 07:37 → 北京 15:37)核对提交数/hash/Phase 起止/里程碑/分布/测试数后成文。文档含:说明(数据来源 40 条、时间基准北京 UTC+8、提交链特征、增量迭代形态)、Phase 1-6 总表(含起止/周期/里程碑)、9 项关键里程碑、演进说明、附录提交时间分布(2+4+7+9+6+1+11=40)。测试数序列按 _AI_USAGE_LOG 自报核定 106→110→111→117→116117 为 08-25 峰值,116 为 08-26 tests/ 迁移后最终)。验证:git rev-list --count=40、全部引用 hash 存在、Phase 起止与里程碑时间与 git log 一致 | 中间产物:①时间基准先后经「保留提交内嵌时区墙钟」→用户改定「北京时间 UTC+8」最终按北京换算;②PowerShell 解析 git log 两次失败(-split 管道符丢 8 条、字符串范围比较漏边界提交)→ 改 epoch 时间戳换算通过;③测试数序列初稿按「递增至 117」口径描述,复查 _AI_USAGE_LOG 自报序列后改为 106→110→111→117→116 | docs/2026-08-27-implementation-timeline.md(新建) | deepseek-v4-flash |
| 2026-08-27 20:16 | ① 用户提出 → ② 需求澄清 → ③ 方案设计 → ④ 人类审批 → ⑤ 编码实现 → ⑥ 审查验证 | 更新 AGENTS.md 使其与项目现状(2026-08-27)全面对齐:命令表补 compile:test 与 package-prodcompile 补 webview JS 拷贝步骤、test 改为 compile:test && vscode-test,测试文件匹配由 out/test 改为 out/tests、测试源码注明根目录 tests/,验证顺序改为 lint → compile → npm test;架构由三层改为四层(与 design spec 一致,Analyzer 改 LinterAdapter,接口位置 src/adapters/adapter.ts);文件结构替换为真实目录树(adapters/ai/orchestrator/merger/fix/rules/scope/panel/config/diagnostics/i18n/jsp/services 等,删除不存在的 analyzers 与 manager/linterManager);命令前缀示例 codeReviewer.analyzeFile 改为实际存在的 codeReviewer.review;设计文档小节补充非 spec 文档放根目录 docs/。验证:对照 package.json scripts、.vscode-test.mjs、src 目录 glob、design spec 四层定义逐项核对一致 | 中间产物:①架构层数先按原文档三层起草,核对 design spec 第 19-28 行发现已更新为四层(含适配层),改按四层;②命令前缀示例初稿沿用 codeReviewer.analyzeFilegrep package.json contributes.commands 发现该命令不存在,改为 codeReviewer.review;③命令表初稿未含 package-prod,因日志排除项与 scripts/package-prod.mjs 存在而补入 | AGENTS.md | deepseek-v4-flash |
| 2026-08-27 22:12 | ① 用户提出 → ② 需求澄清 → ③ 方案设计 → ④ 人类审批 → ⑤ 编码实现 → ⑥ 审查验证 | A3 提效对比实验「提效后」侧数据采集:从桌面人工审核工具 manual-review-tool.html 内嵌 DATA 抽取 23 个样例入库 data/efficiency-samples/{js×8,css×5,java×6,sql×4};拷贝工具至 data/manual-review-tool.htmlnpm install 安装依赖;新增测量脚本 tests/measure/measure-plugin-samples.mjsESLint 用 js.configs.recommended+eslintExtraRules、Stylelint 用 recommended+stylelintExtraRules 与 src/rules/builtin-rules.ts 逐字一致;PMD 用 java -cp jars/pmd/lib/*;jars/pmd PmdRunner+pmd-java-ruleset.xml 与 pmd.ts 一致;SQLFluff 用 --dialect oracle+内置配置 buildBuiltinSqlfluffConfig 复刻),实测 23 文件 283 条诊断 8576.8msJS 120 条 95.1ms / CSS 55 条 129.3ms / Java 84 条 6610.7ms / SQL 24 条 1741.7ms),结果入库 tests/measure/results/a3-plugin-results.json(每文件耗时/诊断数/规则 ID + 分语言汇总)。验证:四语言脚本实测运行产出 JSON,样例为含缺陷样本,检出规则与预期一致(JS 的 eqeqeq/no-eval/no-debugger/no-var/no-shadow 等、CSS 的 color-no-invalid-hex/0px/厂商前缀/重复属性、Java 的空 catch/硬编码密码/System.out.println 等、SQL 的 CP01/LT01/LT02 | 中间产物:①measure() 为 async 但 PMD/SQLFluff 调用处漏 await,解构到 Promise 致 result.length 报 TypeError,改为 await measure 后通过;②SQLFluff 内置配置初版只传 --dialect oracle 未复刻内置 rules 串,后从 buildBuiltinSqlfluffConfig 逐字复刻(rules=core,AM03,… + max_line_length 80 + aliasing.length max_alias_length 30)写入临时 cfg 传 --config;③样例抽取先尝试在桌面找 data/efficiency-samples 目录(不存在),改为解析 HTML const DATA 段还原转义后落地 | data/efficiency-samples/**(新建 23 个样例) data/manual-review-tool.html(新建) tests/measure/measure-plugin-samples.mjs(新建) tests/measure/results/a3-plugin-results.json(新建) | deepseek-v4-flash |
| 2026-08-27 22:17 | ① 用户提出 → ② 需求澄清 → ③ 方案设计 → ④ 人类审批 → ⑤ 编码实现 → ⑥ 审查验证 | A3 提效对比实验补全「人工基线」侧与对比结论:3 份人工审核记录 JSON 入库 tests/measure/results/manual-review-AI-SIM-001/002/003.json(高级/初级/中级 3 人,原始记录保留);新增聚合对比脚本 tests/measure/compare-a3.mjs 产出 tests/measure/results/a3-comparison.json;更新 tests/measure/performance-comparison.md(填入人工基线实测表、人均明细、五节对比与结论);README 效果总结由占位改为真实数据——基线 3 人均值 38.1 分钟 / 76 条 vs 插件 8.6 秒 / 283 条,整体提速约 266 倍,人工平均仅发现插件 27% 问题(漏检 73%)。验证:compare-a3.mjs 实测运行产出对比 JSON,分语言提速(JS 8500x / CSS 3400x / Java 94x / SQL 238x)与检出率(24-31%)与原始数据一致 | 中间产物:①对比脚本初版只汇总每语言均值,后补算每语言提速倍数、人工检出率(人工问题数/插件诊断数)与 3 人明细表;②README 效果总结初稿含「AI 修复采纳率」行(无实测数据),改为聚焦全量耗时/检出量/检出率/单文件耗时五项有依据指标;③人工基线均值口径先按 totalElapsedMs 直接平均,改为按语言分文件逐一汇总后平均,避免被文件数偏差干扰 | tests/measure/results/manual-review-AI-SIM-001.json(新建) tests/measure/results/manual-review-AI-SIM-002.json(新建) tests/measure/results/manual-review-AI-SIM-003.json(新建) tests/measure/compare-a3.mjs(新建) tests/measure/results/a3-comparison.json(新建) tests/measure/performance-comparison.md(更新) README.md(更新) | deepseek-v4-flash |
| 2026-08-27 22:32 | ① 用户提出 → ② 需求澄清 → ③ 方案设计 → ④ 人类审批 → ⑤ 编码实现 → ⑥ 审查验证 | 生成 tests/coverage/ 测试覆盖率报告(成果物 04 缺失项):.vscode-test.mjs 加入 srcDir:src 与 coverage 配置(reporter text-summary+htmlinclude out/src/**/*.jsexclude out/tests 与 out/src/types,仅统计测试触达模块);package.json 新增脚本 test:coveragecompile → compile:test → vscode-test --coverage --coverage-output tests/coverage)。实测 116 passing,覆盖率:行/语句 42.58%4915/11541)、函数 34.08%、分支 73.37%,产出 tests/coverage/index.html + src 逐文件页(2.1MB),未被 gitignore 忽略可入库。验证:复跑两次结果一致(可复现),报告路径与文件齐全 | 中间产物:①reporter 初稿含 lcov,实测该版本 test-cli 未产出 lcov.info(仅 html/text-summary 生效),收敛为 ['text-summary','html'] 后复跑确认一致;②coverage 统计口径先考虑 includeAll:true(全量含 0% 模块),与用户确认后采用仅测试触达模块(默认 false);③vscode-test 首次运行自动下载 VS Code 1.135.0319MB 缓存于 .vscode-test/gitignore 已排除),二次复跑走缓存 | .vscode-test.mjs(更新) package.json(更新) tests/coverage/**(新建) | deepseek-v4-flash |
| 2026-08-27 22:49 | ① 用户提出 → ② 需求澄清 → ③ 方案设计 → ④ 人类审批 → ⑤ 编码实现 → ⑥ 审查验证 | 覆盖率补测扩展项(试点 3 项 + 扩展 5 项共 8 个新测试文件、63 条用例):tests/fix-prompt.test.ts(10)、registry.test.ts(7)、provider-chat.test.ts(11mock global.fetch 测 OpenAI 兼容/Gemini/Claude 三协议 chat)、import-service.test.ts(7)、yaml-parser.test.ts(3)。其中 export-service 因依赖 vscode.window.showSaveDialogUI 对话框无法在测试宿主 stub)替换为 yaml-parser(纯逻辑)。同步修复试点发现的 2 处源码缺陷:method-extractor fallback java 正则取错捕获组(match[1]→match[2] ?? match[1])、mockDocument.getText 忽略 range 参数(改为按 range 切片)。实测 179 passing / 行覆盖率 42.58%→48.24%+5.66,分支 77.97%、函数 43.66%),覆盖率报告刷新 tests/coverage/;更新 tests/test-cases.md16 文件 116 条 → 24 文件 179 条)与 tests/test-execution-log.md(新增覆盖率执行记录段)。验证:npm run test:coverage 全绿(Exit 0 | 中间产物:①扩展清单原含 export-service,读源码确认依赖 showSaveDialog 无法 stub,改用 yaml-parser 并在日志注明;②import-service 断言初稿断言 duplicateOf 不出现在输出,实际注释掉的行仍含原文,改为断言重复元数据仅以 # 注释形式出现;③fix-prompt 边界测试初稿断言末行为 3| c,实际代码含尾部空行,改为断言整个输出含 3| c;④mockDocument 重构为命名函数 offsetAt/positionAt 供 getText(range) 复用(对象内无法互相引用属性) | tests/jsp-extractor.test.ts(新建) tests/report.test.ts(新建) tests/method-extractor.test.ts(新建) tests/fix-prompt.test.ts(新建) tests/registry.test.ts(新建) tests/provider-chat.test.ts(新建) tests/import-service.test.ts(新建) tests/yaml-parser.test.ts(新建) src/scope/method-extractor.ts(修复) src/utils/mockDocument.ts(修复) tests/coverage/**(刷新) tests/test-cases.md(更新) tests/test-execution-log.md(更新) | deepseek-v4-flash |
@@ -0,0 +1,58 @@
# 分阶段实现时间线(回溯 · gittea 版本)
> 项目:vscode-code-reviewer`gittea.dev/T2-SD0403/2026Technology-Competition`
> 性质:基于 gittea 仓库自身 git 提交历史回溯的实际实现时间线,补足设计文档缺失的时间维度
## 1. 说明
- **数据来源**:本仓库(gittea)`git log` 真实提交记录,共 **40 条**2026-06-05 19:44 2026-08-27 15:37
- **时间基准**:统一为**北京时间(UTC+8)**,由各提交内嵌时区换算(内嵌 `+0000` 的提交 +8 小时,如 `8244d20` 内嵌 07:37 +0000 → 北京 15:37
- **Phase 归属**:按提交内容对齐 `docs/superpowers/specs/2026-07-10-implementation-plan.md` 的 Phase 1-6 划分
- **本仓提交链特征**`42af726`(初始化) → … → `3c390cf``3a66aa5`(26 份 PMD 报告入库) → `8244d20`(性能优化证据文档)
- **形态说明**:本项目为**增量迭代式开发**——主线 07-14 首次可用后,Phase 4/5/6 持续交叉增强,并非严格串行;「起止」为各 Phase 首次提交至最后一次关联提交
## 2. Phase 时间线总表
| Phase | 阶段内容 | 起 | 止 | 周期 | 里程碑 / 完成标志 | 代表提交 |
|-------|---------|-----|-----|------|------------------|---------|
| Phase 1 | 基础层(Types + Config 管理) | 2026-06-05 19:44 | 2026-07-14 21:18 | 约 39 天(含设计准备期) | 项目初始化、tsconfig 就绪、核心扩展可编译运行 | `42af726``1144c9b` |
| Phase 2 | 适配层(ESLint/Stylelint/PMD/SQL-Lint/JSP 5 个适配器) | 2026-07-13 18:41 | 2026-08-26 22:04 | 成型约 2 天,稳定性增强持续至末期 | 5 语言 linter 均可跑通;Windows 批处理拉起 EINVAL 修复 | `1144c9b``3c390cf` |
| Phase 3 | 核心层 A(编排器 Orchestrator | 2026-07-14 21:18 | 2026-07-14 21:18 | 单日,随核心统一实现 | 单语言单 linter 分派 + 分析结果缓存可用 | `1144c9b` |
| Phase 4 | 核心层 BAI 引擎 + 规则 + 合并 + 修复 + 报告) | 2026-07-14 21:18 | 2026-08-25 21:58 | 约 42 天(多轮迭代) | AI 审查可用 → 规则导入/转换 → 预过滤/去重/i18n → 方法级审查 → 自动标记 → 修复链路(原生/AI/重检收敛)→ diff 预览 → 修复预生成 | `1144c9b``83712aa``247f19f``d16d680``9c676e4` |
| Phase 5 | UI 层(命令 + 设置面板 + 审查面板) | 2026-07-16 22:20 | 2026-07-21 22:16 | 约 5 天(主线),交互增强延续至 08-20 | 设置面板/Provider 配置、VSCode 主题适配的品牌化面板、i18n 开关 | `805737f``d4c3fb9``6d29f30` |
| Phase 6 | 构建与测试(esbuild + 测试) | 2026-07-23 18:37 | 2026-08-26 22:04 | 里程碑 07-23 发布,测试持续累积 | **v1.0.0 打包发布**npm test passing 数 106→110→111→11708-25 峰值)→11608-26 tests/ 迁移后最终) | `99b8f26``62faad9``e9762bf``3c390cf` |
## 3. 关键里程碑
| 日期 | 里程碑 | 提交 | 说明 |
|------|--------|------|------|
| 2026-06-05 19:44 | 项目初始化 | `42af726` | Initial commit |
| 2026-07-10 18:51 | 设计 spec 定稿 | `6a64aec` / `a624438` | code reviewer extension design spec |
| 2026-07-14 21:18 | 核心审查功能首次可用 | `1144c9b` | 基础层/适配层/编排器/AI 引擎一次成型 |
| 2026-07-16 22:20 | UI 层启动 | `805737f` | 设置面板 + Provider 扩展 + 构建脚本 |
| 2026-07-23 19:43 | **v1.0.0 发布** | `62faad9` | 版本 bump + VSIX 打包 |
| 2026-08-18 21:41 | AI 修复链路打通 | `3d8119d` | 自动修复重构 + AI 翻译配对 |
| 2026-08-25 21:58 | 修复前 diff 预览 + 预生成落地 | `9c676e4` | 修复方案预生成 + 两步确认 + SQLFluff 行号修复 + PMD 规则精简 |
| 2026-08-26 22:29 | 逐文件审核报告入库 | `3a66aa5` | 26 份 demo-pmd 审核报告(绝对路径规范化) |
| 2026-08-27 15:37 | 证据与时间线补全 | `8244d20` + 本文档 | 性能优化证据文档 + 分阶段实现时间线回溯 |
## 4. 演进说明
- **迭代特征**:主线 07-14 一次性构建起可运行骨架,其后为「功能增强 → 实测反馈 → 修复」滚动(见 `_AI_USAGE_LOG.md` 07-20 至 08-26 的快速迭代记录)
- **交叉增强**Phase 4(规则/AI/修复)与 Phase 5(面板交互)在 07-26 ~ 08-25 交替推进,Phase 6 测试伴随每轮改动累积(106 → 110 → 111 → 117 → 116 passing
- **稳定性收尾**Phase 2 适配层在末期(08-26 22:04)完成 Windows 批处理命令拉起修复并伴随报告成果物入库(08-26 22:29),体现工程化收口
## 5. 附录:提交时间分布(北京时间 UTC+8)
| 提交日期 | 提交数 | 主要阶段 |
|---------|-------|---------|
| 2026-06-05 ~ 06-16 | 2 | Phase 1(初始化) |
| 2026-07-10 ~ 07-14 | 4 | 设计定稿 + Phase 1/2/3/4 核心成型 |
| 2026-07-16 ~ 07-23 | 7 | Phase 5 UI 主线 + Phase 6 v1.0.0 发布 |
| 2026-07-25 ~ 07-30 | 9 | Phase 4 规则/AI/i18n 增强 |
| 2026-08-03 ~ 08-11 | 6 | 方法级审查、自动标记、classpath 探测 |
| 2026-08-12 ~ 08-13 | 1 | 修复 JS 审查解析错误(`3cf5c71` |
| 2026-08-18 ~ 08-27 | 11 | 修复链路、报告成果物、证据与时间线补全 |
> 分布按各提交作者时间换算北京时间逐一统计,合计 2+4+7+9+6+1+11 = 40 条,与 `git log` 核对一致。
> 完整 40 条提交清单可随时以本仓 `git log --date=format:'%Y-%m-%d %H:%M'` 复核。