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
+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 |