Files

111 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AI 协作流程规范
> 版本: v1.0 | 更新: 2026-10-01
> 相关: [README.md](README.md) · [ai_agent_rules.md](ai_agent_rules.md) · `../ai_coding_knowledge.json`
定义 AI 在本项目中的**协作流程**:怎么规划、怎么验证、怎么收尾、怎么沉淀。目标 —— 产出可验证、经验可复利。
---
## §0 三条不可协商的原则
1. **不一次性生成大量代码** —— 任务必须可拆解(`anti_pattern:one-shot-big`)
2. **没有验收标准不开工** —— 否则无法判断何时完成(`method:acceptance-criteria`)
3. **不审查 diff 不算完成** —— AI 的自我描述可信度低于实际改动(`method:review-diff`)
## §1 主工作流:Explore → Plan → Implement → Verify
| 阶段 | 做什么 | 产出 |
|------|--------|------|
| **Explore** | 读相关源码 / 规格 / 知识图谱实体,确认现状与约束 | 现状结论 + 涉及文件清单 |
| **Plan** | 输出结构化步骤(步骤 + 依赖 + 验收标准);复杂任务**先给计划再动手** | 计划(TodoWrite 跟踪) |
| **Implement** | 按计划分步实现,**一步一验证**,不攒到最后一起验 | 可增量验证的改动 |
| **Verify** | 跑门禁;失败回到 Implement | 门禁通过证据 |
> 复杂任务(跨 3 个以上模块 / 涉及数据模型 / 涉及部署)**必须先出计划并等确认**。
## §2 任务拆解铁律
- **窄范围 > 大而模糊**:`修 /api/tools 分页 total 字段` 优于 `改进工具模块`
- 每步定义**输入**(依赖文件/数据)与**输出**(验收标准)
- 状态机驱动:`Pending → Running → Blocked → Done / Failed`
- 单任务改动建议 ≤15 个文件;超出则重新拆解
## §3 验收标准(每个任务开工前必须明确)
| 任务类型 | 验收标准 |
|---------|---------|
| 功能开发 | `npx tsc --noEmit` 零错误 + `npx vitest run` 全绿 + 新功能可用 + 无回归 |
| Bug 修复 | 复现路径通过 + 相关测试通过 |
| 重构 | 行为不变 + 测试全绿 + 无性能回归 |
| 数据/脚本 | 输出格式正确 + 样例验证通过 + 幂等可重跑 |
| 部署/运维 | 部署后自检清单全通过(见 project_rules.md §15.3) |
本项目**双门禁**:`npx tsc --noEmit` + `npx vitest run`(缺一不可)。
## §4 代码审查:看 diff 不看对话
- 用 `git diff` 逐行审查**实际改动**
- 对照 `§3 验收标准` 核验,而不是对照 AI 的说法
- 重点排查:臆造的 API/字段、被静默删除的逻辑、异常处理缺失、硬编码密钥
## §5 失败分型(先分型,再优化)
| 失败类型 | 表现 | 优化方向 |
|---------|------|---------|
| 规划失败 | 任务拆解不合理、范围失控 | 重新拆解任务 |
| 执行失败 | 命令/环境/依赖报错 | 修工具、环境、依赖 |
| 质量失败 | 结果不满足验收标准 | 收紧验收标准或加门禁 |
> 禁止把所有失败都归因为「模型不够强」(`anti_pattern:model-is-everything`)。
## §6 完成流程:自动记录(关键,不可跳过)
开发完成并通过门禁后,**必须**运行:
```bash
npm run knowledge:update
# 等价于:node scripts/update-knowledge.mjs(可加 --dry-run 预览,不写文件)
```
脚本自动捕获三类信息并沉淀:
| 捕获内容 | 来源 | 落盘位置 |
|---------|------|---------|
| **能力特征** | 扫描 `src/app/api/**/route.ts`、`src/app/**/page.tsx`、`src/components/**`、`prisma/schema.prisma`、`scripts/**`、`crontab.txt`、`package.json`、`data/bot-characters.json` | `.trae/knowledge/capabilities.json` |
| **开发过程** | `git log`(最近提交:hash/时间/主题/改动文件数) | `.trae/knowledge/dev_process.jsonl`(按提交追加) |
| **模型成果** | 本次交付物:新增迁移、新增/变更脚本、提交统计 | `.trae/knowledge/artifacts.jsonl`(追加) |
并**增量 upsert**(按实体名,同名替换 observations,未出现的旧实体原样保留,永不删除):
- `.trae/knowledge_graph.json`(渲染版,人类可读 + 权威)
- `.trae/knowledge_graph.jsonl`(MCP Knowledge Graph Memory 读取的源文件)
**自动化触发**:本机已装 `git post-commit` 钩子(`.git/hooks/post-commit`),每次提交后自动执行同一脚本(静默 + 后台,不阻断、不拖慢提交),无需手动记得。
> **换机 / 新克隆后重装钩子**(`.git/hooks/` 不随 git 传递)——在仓库根执行:
> ```bash
> printf '#!/bin/sh\nROOT=$(git rev-parse --show-toplevel) || exit 0\n[ -f "$ROOT/scripts/update-knowledge.mjs" ] || exit 0\ncommand -v node >/dev/null 2>&1 || exit 0\n( cd "$ROOT" && node scripts/update-knowledge.mjs --quiet >/dev/null 2>&1 & )\nexit 0\n' > .git/hooks/post-commit
> ```
> 卸载:删除 `.git/hooks/post-commit` 即可(脚本本身仍可手动运行)。
> 未运行记录脚本就结束任务,视为**流程未完成**。
## §7 反模式(禁止)
| 反模式 | 替代做法 |
|--------|---------|
| 一次性生成大量代码 | 任务拆解(§2) |
| 无验收标准 | 先定义验收标准(§3) |
| 不审查 AI 代码 | 看 diff + 双门禁(§4) |
| 一次性灌入冗余上下文 | 上下文预算,按需加载 |
| 把「模型更强」当「系统更稳」 | 模型 + 编排 + 门禁三层闭环 |
| 同一知识多份副本 | 单一事实源 + 引用 |
| 知识库只写不更新 | §6 自动记录 + 定期一致性巡检 |
## §8 版本历史
| 日期 | 版本 | 变更 |
|------|------|------|
| 2026-10-01 | v1.0 | 初始版本:Plan-first 四阶段 + 验收标准 + 完成自动记录(§6) |