From 96750467d9f32abcbee2a211fffa11ee4529d293 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8C=83=E6=99=BA=E9=B9=8F?= Date: Thu, 27 Aug 2026 22:54:12 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=20AGENTS.md=20?= =?UTF-8?q?=E5=AF=B9=E9=BD=90=E9=A1=B9=E7=9B=AE=E7=8E=B0=E7=8A=B6=20+=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=88=86=E9=98=B6=E6=AE=B5=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E7=BA=BF=E5=9B=9E=E6=BA=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - AGENTS.md:命令表/四层架构/文件结构/命令前缀与项目现状对齐(08-26 tests 迁移、compile:test 等) - docs/2026-08-27-implementation-timeline.md:基于 gittea git 全量历史回溯 40 条提交的 Phase 1-6 时间线(北京时间口径) - _AI_USAGE_LOG.md:补充本轮相关日志记录 --- AGENTS.md | 48 +++++++++++------- _AI_USAGE_LOG.md | 6 +++ docs/2026-08-27-implementation-timeline.md | 58 ++++++++++++++++++++++ 3 files changed, 95 insertions(+), 17 deletions(-) create mode 100644 docs/2026-08-27-implementation-timeline.md diff --git a/AGENTS.md b/AGENTS.md index d77032a..6305a11 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -37,27 +37,30 @@ VSCode 代码审查与规范检查一体化插件。 | 命令 | 说明 | |------|------| -| `npm run compile` | TypeScript 编译(tsc -p ./) | +| `npm run compile` | TypeScript 编译(tsc -p ./)+ 拷贝 webview JS(scripts/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` | 生产打包 VSIX(scripts/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--design.md` 编码须严格遵循已批准的 spec,不得自作主张。 +非 spec 文档(如时间线、复盘类文档)放根目录 `docs/`。 diff --git a/_AI_USAGE_LOG.md b/_AI_USAGE_LOG.md index 691ab0b..8bb2f37 100644 --- a/_AI_USAGE_LOG.md +++ b/_AI_USAGE_LOG.md @@ -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 异步 fn,result 为 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→116(117 为 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-prod,compile 补 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.analyzeFile,grep 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.html;npm install 安装依赖;新增测量脚本 tests/measure/measure-plugin-samples.mjs(ESLint 用 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.8ms(JS 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+html,include out/src/**/*.js,exclude out/tests 与 out/src/types,仅统计测试触达模块);package.json 新增脚本 test:coverage(compile → 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.0(319MB 缓存于 .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(11,mock global.fetch 测 OpenAI 兼容/Gemini/Claude 三协议 chat)、import-service.test.ts(7)、yaml-parser.test.ts(3)。其中 export-service 因依赖 vscode.window.showSaveDialog(UI 对话框无法在测试宿主 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.md(16 文件 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 | diff --git a/docs/2026-08-27-implementation-timeline.md b/docs/2026-08-27-implementation-timeline.md new file mode 100644 index 0000000..9be8c92 --- /dev/null +++ b/docs/2026-08-27-implementation-timeline.md @@ -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 | 核心层 B(AI 引擎 + 规则 + 合并 + 修复 + 报告) | 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→117(08-25 峰值)→116(08-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'` 复核。