本文用于把当前项目交给 AI 继续开发、修复、重构或改写文档。目标不是让 AI 一次性重写整个仓库,而是让它在充分理解现状和约束后,做范围明确、可验证、可回退的修改。
适用任务包括:
AI 不应只读取用户点名的单个文件。推荐按以下顺序建立上下文:
CLAUDE.md:项目硬约束、红线和验证要求。ROADMAP.md:当前阶段、已完成事项、阻塞和最近验证。docs/design.md:系统结构、功能设计和当前权衡。README.md 与 docs/user-guide.md:外部功能口径和用户行为。发生冲突时,以源码和测试为当前事实,以 CLAUDE.md 为不可降低的约束。文档与源码冲突时,先指出差异,再判断应该改代码还是改文档,不能静默选择。
blocks.idx。127.0.0.1:18080。| 任务 | 优先查看 |
|---|---|
| Log 上传、队列、状态 | task/TaskService.java、task/TaskRunner.java、task/AnalysisTask.java |
| 结构化日志 | parser/StructuredLogParser.java、对应测试 |
| 旧版日志 | parser/LegacyLogParser.java、BalancedDocumentExtractor.java、对应测试 |
| 查询模式 | parser/QueryPatternNormalizer.java |
| 慢查询统计 | analysis/AnalysisAccumulator.java、DurationDistribution.java、TopSlowQueryCollector.java |
| 运行诊断 | analysis/diagnostics/DiagnosticAccumulator.java、LogDiagnostics.java |
| Log 持久化 | storage/FileTaskRepository.java |
| Markdown 报告 | report/MarkdownReportService.java |
| Log REST | web/TaskController.java、GlobalExceptionHandler.java |
| FTDC 上传与建索引 | task/ftdc/FtdcTaskService.java、FtdcTaskRunner.java |
| FTDC 格式解析 | parser/ftdc/ |
| FTDC 索引 | storage/ftdc/FtdcIndexWriter.java、FtdcIndexReader.java |
| FTDC 查询和降采样 | analysis/ftdc/FtdcSeriesService.java、FtdcMetricDecoder.java |
| FTDC 分组 | analysis/ftdc/FtdcMetricGroups.java |
| FTDC REST | web/FtdcTaskController.java |
| 全局清理和内存 | task/ApplicationMaintenanceService.java、web/SystemController.java |
| Log 前端 | web/src/App.vue、web/src/components/、web/src/api/tasks.js |
| Metric 前端 | web/src/components/ftdc/、web/src/api/ftdcTasks.js |
| 前端竞态 | web/tests/task-races.test.js、web/tests/ftdc-races.test.js |
AI 必须先判断目标属于「公开能力」还是「内部代码」。当前产品公开:
以下代码存在且有测试,但没有 REST 路由和前端入口:
除非用户明确要求发布这些能力,否则不要顺手暴露接口或添加页面。
Namespace + 操作 + 归一化模式 分组。summary.json 和旧 API 的统计口径。min、max、avg 和全零判断基于全部有效点。null 断线。AI 在动手前应把自然语言请求写成以下结构:
目标:用户最终能观察到什么变化。
范围:允许修改哪些模块和文档。
不变项:哪些统计、接口、存储或隐私行为不能改变。
输入:正常输入、无效输入和边界输入。
输出:成功结果、错误结果和历史兼容行为。
验证:新增哪些测试,运行哪些命令,如何确认结果。
示例:
目标:Log 结果页新增按客户端筛选 Top 5000 的能力。
范围:慢查询分页接口、前端筛选表单、相关测试和文档。
不变项:Top 5000 选取规则、summary.json、报告和历史任务格式不变。
输入:空筛选、IPv4、IPv6、大小写差异和无匹配值。
输出:在已保留的 Top 5000 内筛选,页数和 total 与筛选结果一致。
验证:Controller 集成测试、前端交互测试、全量后端与前端测试。
在修改前完成:
git status,区分用户已有改动和本次任务。不要在调查阶段顺手格式化、升级依赖或重构相邻代码。
按数据流从入口向下列出改动点:
用户操作
→ 前端组件
→ API 封装
→ Controller 参数和响应
→ Service/Runner
→ Parser/Analysis
→ Repository/持久化
→ 自动化测试
→ 用户文档与设计文档
没有经过这条链路的层不要默认修改。只改后端而不检查前端,或只改模型而不检查历史 JSON 兼容,都属于不完整方案。
修 bug 或改变行为时,优先添加能稳定复现问题的测试:
data。如果只是文档修正,不需要为了形式新增业务测试,但必须核对源码、相对链接和文档内部一致性。
推荐从快到慢运行:
mvn test。npm test -- --run。npm run build。mvn clean package。验证失败时修根因,不能注释测试、降低断言或添加跳过标记让结果变绿。
代码、接口、限制、数据目录或用户操作变化时,检查:
README.mdREADME.en.mddocs/user-guide.mddocs/user-guide.en.mddocs/design.mddocs/ai-rewrite-guide.mdCLAUDE.md只有已经实现并验证的事项才能写入 ROADMAP.md 的「已完成」或「最近验证」。尚未验证的内容写「待确认」,不能用推测补齐。
检查清单:
attr 字段。ParsedLogEntry 变化是否破坏历史 JSON 读取。禁止只根据 MongoDB 版本号启用字段;应按字段实际存在和类型能力解析。
检查清单:
getMore 是否需要读取 originatingCommand。PARTIAL、FAILED 还是 SKIPPED。不要用宽泛正则从任意文本中猜耗时或命令字段。
先回答四个问题:
以下口径不能混用:
summary.json 改变兼容口径。这是高风险区域,必须逐层核对:
blocks.idx 写入和读取字段顺序。索引格式字段发生变化时,必须明确是否升级 magic/version,以及旧任务如何失败或兼容。不能让旧索引被错误解释成新格式。
至少覆盖:
raw 和 delta。不能为了图表方便先把全部点存入 List<Long>,再做二次处理。
每个请求都要回答:
新增请求时优先复用现有的版本号、pending 和 AbortController 模式,不引入新的全局状态库。
MarkdownReportServiceTest 中的正向内容和禁止出现内容。| 改动范围 | 最低验证 | 建议追加 |
|---|---|---|
| 纯 Markdown 文档 | 相对链接、路径、git diff --check |
与源码关键常量交叉检索 |
| 单个 Log 解析规则 | 对应 Parser 测试 | mvn test |
| Log 聚合或报告 | 对应 Analysis/Report 测试 | Controller 集成测试、mvn test |
| FTDC 格式或索引 | Parser/Index 测试 | Series、集成、真实样本条件测试 |
| FTDC 查询或降采样 | FtdcSeriesServiceTest |
Controller 集成测试、真实样本条件测试 |
| 后端 API | Controller 集成测试 | 前端 API/组件测试、mvn test |
| 前端展示 | 相关 Vitest 文件 | 全量前端测试和生产构建 |
| 前端竞态 | race 测试 | 浏览器快速切换手工验收 |
| 构建/发布 | 全量测试 | mvn clean package 和 JAR 启动 |
| 删除/清理 | 临时目录集成测试 | 权限和符号链接边界 |
错误结果:耗时分布、平均值或模式频次只基于保留明细。
正确做法:聚合在流式读取阶段完成,Top 5000 只影响持久化明细。
错误结果:用户无法区分「指标确实为零」和「日志没有提供」。
正确做法:后端使用可空字段,前端显示「日志未提供」或 —。
错误结果:混合版本日志、版本缺失或字段提前/延后出现时统计错误。
正确做法:按字段存在、类型和可解析性判断,版本号只做数据质量信息。
错误结果:大文件或多文件任务内存随「指标数 × 样本数」增长。
正确做法:索引定位 Block,只解码时间列和选中组的列。
错误结果:尖峰、低谷、平均值和全零判断失真。
正确做法:遍历全部点计算统计,同时只把有界代表点写入响应。
错误结果:极值降采样造成不规则时间间距,被误判为真实断裂。
正确做法:后端基于完整时间序列判断并插入 null,前端只负责渲染。
错误结果:README 或用户指南声称支持单指标分页或 CSV 导出,但用户没有入口。
正确做法:以 Controller 路由和前端入口共同判断公开能力。
错误结果:ROADMAP.md 与仓库实际状态不一致。
正确做法:实现、验证完成后同步路线图;未验证事项不能标为完成。
复制以下模板,并用本次任务信息替换占位内容:
项目:MongoDB Log & Metric Analyzer
目标:
<用户可观察的最终结果>
当前行为:
<如何复现,实际结果是什么>
期望行为:
<正常输入、边界输入、错误输入分别是什么结果>
允许修改:
<文件或模块范围>
禁止改变:
- Log 全量聚合与 Top 5000/Top 50 的口径。
- FTDC 流式、有界、串行和源文件完整性约束。
- 本地离线与隐私边界。
- 未点名的公开 API 和存储格式。
必读:
- CLAUDE.md
- ROADMAP.md
- docs/design.md
- 与任务相关的源码和测试
验证:
<必须运行的目标测试、全量测试、构建或浏览器验收>
交付:
<代码、测试、文档、ROADMAP 更新和汇报格式>
先读取 CLAUDE.md、ROADMAP.md 和 docs/design.md,再调查这个问题。先用现有输入或最小测试稳定复现,给出根因和最小修改面;确认属于实现任务后,先补失败测试,再做最小修复。不要修改无关代码,不要改变现有统计口径、FTDC 资源边界、存储格式或公开 API。修复后运行相关测试和全量测试,并只在验证通过后更新 ROADMAP.md。最终汇报根因、改动文件、验证结果和仍存在的边界。
问题:<粘贴问题>
先读取 CLAUDE.md、ROADMAP.md、docs/design.md 和相关测试,把需求转换成可验证目标。列出用户流程、输入边界、接口变化、持久化影响、内存上限、历史兼容和隐私影响。只实现明确要求的最小功能,先写失败测试,不增加未要求的依赖、配置和兼容层。完成后同步用户文档、设计文档和 ROADMAP.md,并运行相关全量验证。
需求:<粘贴需求>
这是行为保持型重构。先读取 CLAUDE.md、ROADMAP.md 和 docs/design.md,明确当前可观察行为和现有测试覆盖。只重构指定模块,不改变 REST 路由、JSON 字段、排序、错误消息、存储格式、资源上限和 UI 行为。先运行重构前测试建立基线,再小步修改,每步复跑目标测试。若发现必须改变行为,停止并单独说明,不要把行为变更混入重构。
范围:<粘贴类或组件>
目的:<粘贴维护性问题>
先读取 CLAUDE.md、ROADMAP.md、docs/design.md,并从 Controller、Service、核心常量、前端入口和测试交叉核对事实。只记录当前已经实现的行为,明确区分公开功能、内部组件、精确统计和近似统计。以当前源码和测试为准,不要根据类名猜功能。完成后检查所有相对链接、文件路径、接口路径、数值上限和中英文口径;运行 git diff --check,并在验证通过后更新 ROADMAP.md。
文档目标:<粘贴目标>
按 CLAUDE.md 和 docs/design.md 审查本次 diff。优先寻找会导致统计错误、全量物化、内存无界、竞态覆盖、半成品发布、越界删除、敏感信息泄露、历史任务不兼容和公开能力误判的问题。每条问题必须指出具体文件和行、可复现条件、实际影响和最小修复方向。没有证据的问题不要写成结论。只做审查,不直接改代码。
ROADMAP.md 只记录已经验证的完成项。git diff --check 通过。结论:<任务是否完成,用户现在得到什么>
改动:
- <文件或模块>:<具体变化及原因>
验证:
- <命令>:<通过数量或关键结果>
- <未执行项>:<原因和影响>
边界:
- <仍然不支持或需要用户注意的事项>
汇报只写已发生的事实。不要把「应该通过」「理论上可用」写成「已验证」。