Files
hot_comment_radar/AGENTS.md
T

315 lines
17 KiB
Markdown
Raw 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.
# AGENTS.md
## 目的
本文件定义 AI 编码代理在本仓库中的工作方式。它是操作指南,不是产品需求文档。
不要在这里复述或替代产品规格。产品需求、UI 决策、技术决策和测试期望都放在 `docs/` 中。
## 信息源
开始实现前,按以下顺序阅读相关文档:
1. `docs/PRD.md`
2. `docs/RequirementsDoc.md`(如果仓库中存在;不存在则跳过)
3. `docs/FeatureSummary.md`
4. `docs/DevelopmentPlan.md`
5. `docs/Tasks.md`
6. `docs/TDD.md`
7. `docs/UIDesign.md`
8. `docs/API-Spike-Xiaohongshu.md`
9. `docs/API-Spike-Douyin.md`
如果存在 `docs/review-*.md` 文件,请在对应源文档之后阅读。
评审文件包含修正和澄清,可覆盖源文档中的模糊点。
例如,阅读 `Tasks.md` 后再阅读 `review-Tasks-kiro.md`
使用 `docs/DevelopmentPlan.md` 判断架构和技术选型。使用 `docs/Tasks.md` 判断实现顺序。使用 `docs/TDD.md` 判断测试策略。使用 `docs/UIDesign.md` 判断页面结构和 UI 行为。使用 API Spike 文档判断平台字段映射和外部 API 流程。
如果文档之间存在冲突,或提供的上下文不足以做决定,
不要猜测或编造。立即停止执行,概述冲突或信息缺口,引用相关文件,
并在实现前向用户确认。该规则适用于所有层级的冲突,包括架构、
实现细节、命名约定和行为预期。
当源文档对必需决策表述模糊或没有说明时,绝不要带着假设继续。
如果无法在上述文档中找到答案,并且你自己的知识也不确定,请明确说明:
"I don't have enough context to decide this. Please provide [specific document or clarification]."
不要用虚构行为填补空白。
## 项目约束
- 先构建轻量级 MVP。
- 优先保证可工作的端到端流程,而不是大量未完成的功能。
- 整个项目遵循 TDDTest-Driven Development,测试驱动开发)。对于每个功能、
bug 修复、数据转换、服务或行为变更,先编写相关的失败测试,
再实现让测试通过的最小代码,然后只在测试通过后进行重构。
如果某个任务确实不适合测试先行,先说明原因,并添加尽可能贴近变更的验证覆盖。
- 保持架构与当前计划一致:FastAPI、SQLite、SQLAlchemy、Jinja2 模板、简单 CSS 或 Bootstrap、原生 JavaScript,以及 Docker Compose。
- 除非用户明确改变范围,否则不要引入前端 SPA 框架、Redis、Celery、PostgreSQL、登录系统、定时任务或分布式 worker。
- 不要提交真实 API key、token、cookie 或私密凭据。
- 将 TikHub 和 AI 提供商视为必须在测试中 mock 的外部依赖。
- 后台任务运行在 ThreadPoolExecutor 线程中,而不是 async event loop 中。
后台任务中的所有外部 HTTP 调用都使用同步 `httpx.Client`
不要在后台任务函数中使用 `httpx.AsyncClient``await`
- 报告在任务完成后预生成,并存储在 `reports` 表中。
页面渲染和文件导出必须读取同一份预生成报告数据。
不要在页面路由处理器中即时计算统计信息。
- 任务执行使用 `ThreadPoolExecutor(max_workers=1)`。一次只能运行一个任务。
如果已经存在 `status=running` 的任务,创建新任务时返回 HTTP 400。
## MVP 纪律(为速度优化)
无论时间线如何,§Project Constraints 中的约束始终生效。
本节提供优先级指导,不代表可以跳过 `docs/Tasks.md` 中定义的 P0 功能。
当用户要求快速交付时,优化目标是尽早拿出可演示的切片。
但必须交付 `docs/Tasks.md` §7 中定义的全部 P0 任务(T01-T23)。
未经用户明确确认,不得延期任何 P0 功能。
只有在用户明确确认后才可以延期的项目:
- Playwright e2e 测试(仅 T23 的 Playwright 部分)
- P1 可选任务(docs/Tasks.md §9:自动轮询、JSON 调试面板、进度条)
- 高级 UI 打磨(面包屑、`<title>` 命名、进度动画)
未经用户明确确认绝不能延期的项目:
- 僵尸任务恢复(T05
- 429 指数退避(T07
- 评论分页(T10
- AI 重试和降级(T13
- 报告预生成(T14/T15/T16
- CSV/Markdown 导出(T20
- Docker Compose 打包(T22
延期打磨、规模化、认证、调度以及未列入 `docs/Tasks.md` P0 范围的功能。
如果不确定某项是否属于 P0,请查看 `docs/Tasks.md`,它是权威任务列表。
## 开发流程
对于每个任务:
1. 检查相关文档和现有代码。
2. 确定最小的有用实现切片。
3. 在业务逻辑之前编写测试,覆盖:
- 数据映射和字段转换(platforms -> models
- AI JSON Schema 校验和解析
- 报告统计计算
- 导出格式(CSV 结构、Markdown 结构)
- 状态机转换(task status、analysis status
- 错误降级路径(重试耗尽 -> fallback behavior
对于 UI 模板、路由处理器接线和配置设置,
在实现之前或同时编写测试,但绝不能在实现之后补写。
这是 `docs/TDD.md` §2.1 的硬性规则:"禁止先实现后补测试。"
4. 实现让测试通过的最小代码。
5. 运行聚焦的验证命令。
6. 汇报变更内容、已验证内容和剩余事项。
保持变更范围聚焦。避免无关重构。如果某个文件或设计问题阻塞当前请求,
提出服务于当前目标的最小修正方案。
### 项目记忆和对话经验
每次有价值的对话迭代后,代理都应考虑是否需要把经验保存在本 `AGENTS.md` 文件中,
以便未来代理更好地理解项目。例如:成功解决了反复出现的问题、
确认了模糊的项目约定、发现了可靠工作流,或澄清了代理之间应如何协作。
不要静默添加不确定或推测性的规则。如果经验存在歧义、可能改变产品行为,
或可能与信息源文档冲突,请在更新 `AGENTS.md` 前向用户确认。
新增内容应简洁且具备可操作性。`AGENTS.md` 应记录持久的代理工作规则,
而不是替代属于 `docs/` 的产品需求、实现规格或详细任务计划。
### 错误处理理念
这些原则定义于 `docs/DevelopmentPlan.md` §10 和 `docs/TDD.md` §13。
在所有实现中一致应用:
- 单个条目的失败不得导致整个任务崩溃。按每条评论或每个内容项隔离失败。
- 外部 API 失败(4xx/5xx)应使用指数退避重试(1s -> 2s -> 4s),
然后优雅降级,并将错误记录到数据库中。
- AI 分析失败应按评论记录为 `ai_analysis_status=failed`
并反映到 `analysis_success_rate` 中,不得作为任务级失败向外抛出。
- 页面渲染绝不能因为缺少报告数据而返回 HTTP 500。
使用默认文本或空状态 UI 替代。
- 每个处理单元(内容项、评论批次)都应独立提交到数据库。
不要在整个任务期间持有一个长事务。
## 开发约定
- 修复任何工单必须在独立的 git worktree 中进行;开工前先用 `git worktree add` 创建专属工作目录,避免污染主工作区、便于多工单并行。修 CI 配置(Dockerfile、Drone 流水线等)可以直接在主仓库改,因为 CI 改动要打 tag 才能触发构建。
- 处理任何工单必须先检查并使用适用的 Superpowers Skill;在分析、提问、制定计划或改代码前,至少先启用 `using-superpowers`,并按任务性质继续使用 `systematic-debugging``test-driven-development``using-git-worktrees``verification-before-completion` 等相关技能。若判断没有适用技能,必须简短说明原因后再继续。
- 新功能需求类工单必须先使用 Superpowers 的 `brainstorming` 技能帮助澄清目标、约束和方案,再进入计划或实现;缺陷类工单必须先使用 `systematic-debugging` 技能复现问题并分析 root cause,再开始修复,禁止在根因未明确时直接改代码。
- 实现或修复工单完成后,必须继续按 Superpowers 收尾流程执行验证、代码审查、PR/合并准备和工作区清理;通常应依次使用 `verification-before-completion``requesting-code-review``finishing-a-development-branch` 等适用技能,在完成这些流程前不得声称工单已结束。
如果当前环境不支持 `superpowers:*` 前缀,请手动应用同样的认知顺序:
brainstorm -> plan -> test-first -> implement -> debug -> verify。进入验证阶段前,删除占位注释、调试 print/console.log,以及无说明的注释掉代码块。
## 多代理规则
仅在任务彼此独立、且可由主代理评审和集成时使用多个代理。
适合并行的任务:
- 审查文档是否存在冲突。
- 调研一个平台 API 映射。
- 为一个服务起草测试。
- 根据 `docs/UIDesign.md` 审查 UI 行为。
- 功能完成后审查实现中的 bug。
- 实现两个独立的平台适配器(例如 T08 Xiaohongshu 和 T09 Douyin)。
- 构建两个不共享数据查询的页面模板(例如 T17 和 T18)。
- 一个代理实现导出服务(T20),另一个代理处理模板宏(T21)。
- 一个代理为模块 A 编写单元测试,另一个代理实现与 A 没有依赖关系的模块 B。
避免为以下事项使用并行代理:
- 同时编辑同一个核心文件。
- 做出相互竞争的架构决策。
- 在没有单一负责人的情况下修改共享数据模型。
- 在没有集成计划的情况下实现广泛的横切变更。
主代理仍然负责最终决策、集成、验证和 Git 提交。
## 测试和验证
遵循 `docs/TDD.md`
默认验证目标:
```bash
pytest tests/unit -q
pytest tests/integration -q
pytest tests/unit tests/integration -q
curl -f http://localhost:8000/health
```
在声称里程碑或任务完成前,运行覆盖率检查:
```bash
pytest tests/unit tests/integration --cov=app --cov-branch --cov-report=term-missing
```
以下模块的目标行覆盖率为 80% 或以上:
- `app/platforms/`(所有平台适配器)
- `app/services/ai_service.py`
- `app/services/report_service.py`
- `app/services/export_service.py`
如果这些模块的覆盖率低于 80%,先补充测试再继续。
开发期间使用聚焦命令,然后在完成前运行更广泛的验证。不要在单元测试中依赖真实 TikHub 或 AI API 调用。mock 外部 HTTP 调用和 AI 响应。
对于 UI 工作,在可行时通过手动或浏览器自动化验证渲染页面。
检查文本不重叠、核心操作可见,并且页面符合 `docs/UIDesign.md`
## Git 工作流
使用小而聚焦的提交。一个提交应代表一个清晰变更。
### 单人提交纪律
对于这个单人项目,在完成每个独立功能/任务后,运行相关测试,
并为该任务相关文件创建一个聚焦的 git commit。除非用户明确要求,否则不要 push。
不要提交无关文件。
"独立功能/任务" 指能够被单独理解、测试和回滚的最小有用变更。例如:
- 一个 `docs/Tasks.md` 任务,例如 T07 API 重试、T20 导出或 T22 Docker。
- 一个狭窄 bug 修复,例如修复 401 错误显示或 CSV 换行处理。
- 一个内聚的页面或路由改进,例如添加任务详情页。
- 一个仅测试变更,用于记录或锁定某个行为。
不要把无关变更混在一个提交中。例如,不要把 Docker 部署、UI 重设计、
AI 重试逻辑和文档编辑合并在一个提交里,除非它们确实都严格服务于同一任务。
本项目的提交消息必须用中文书写,同时保留标准前缀。示例:
- `feat: 接入真实 AI 评论分析`
- `fix: 修复评论分页停止条件`
- `test: 补充导出 CSV 注入防护测试`
- `docs: 记录单人项目提交规则`
### 当前单人执行模式
当前项目阶段是初始单人开发和流程练习。除非用户明确启用并行工作或 PR 工作流,
否则按依赖顺序串行执行任务:一次一个任务。
除 CI 配置修复外,每个工单都应先在主仓库外创建独立 git worktree,再在该 worktree 中创建或检出对应任务分支。分支命名建议继续使用
`feat/tXX-short-description``fix/tXX-short-description` 或工单系统约定名称。
任务通过所需检查后,在可行时为该任务创建一个聚焦提交。
如果单个提交难以评审或安全回滚,大型任务可以拆分为多个有意义的提交。
前一个任务未完成评审、验证,并合并到工作基线或被明确批准作为下一个分支基线前,
不要开始下一个任务。除非用户要求,否则不要打开 PR。
推荐提交前缀:
- `docs:` 文档变更
- `feat:` 新的用户可见功能
- `fix:` bug 修复
- `test:` 仅测试
- `chore:` 维护、工具或项目设置
提交前:
```bash
git status --short
git diff
git diff --check
```
只提交与当前任务相关的文件。不要回滚无关的用户变更。只有在提交已验证且用户希望更新远端分支时才 push。
### 分支与 Worktree 策略
工单开发默认不直接在主工作区或 `main` 上修改业务代码。开工前从当前 `main` 创建专属 git worktree,并在 worktree 中使用任务分支完成开发。
修 CI 配置(Dockerfile、Drone 流水线等)可以直接在主仓库改,因为 CI 改动要打 tag 才能触发构建。除该例外外,如需直接在主仓库改动,必须先得到用户明确确认。
多代理并行开发:每个代理必须在从当前 `main` 派生的独立 Git 分支和独立 worktree 上工作。
分支命名约定:`agent/<agent-id>/<task-id>`(例如 `agent/codex-1/T08`)。
只有主代理(或用户)可以合并回 `main`
合并前,该分支必须通过 §Testing And Verification 中定义的所有测试。
绝不能让两个代理在不同分支上同时编辑同一个文件。
如果任务依赖要求触碰同一文件,请串行处理。
## 安全规则
- 绝不要把密钥保存在源文件、文档、测试、fixture 或提交消息中。
- `.env.example` 只用于变量名。
- 仅在文档要求时保留原始外部 API 响应,并避免在 fixture 中包含私有用户数据。
- 在测试 fixture 中,将真实用户名、头像 URL、用户 ID 和 IP 地址替换为占位值
(例如 "test_user_001"、"https://example.com/avatar.png"、
"user_id_placeholder_001")。不要未经脱敏就把生产 API 响应直接复制到 fixture 文件中。
- 数据库中的 `raw_data` JSON 字段可能包含用户生成内容。
编写断言 `raw_data` 的测试时,只使用合成 fixture 数据。
- 如果对话中暴露了凭据,提醒用户轮换或删除它们。
- 除非用户明确要求,否则不要使用破坏性 Git 命令。
## 完成标准
只有满足以下条件,任务才算完成:
1. 请求的行为或文档已经存在。
2. 已运行相关测试或检查,或说明了无法运行的原因。
3. 工作范围限定在请求内。
4. 最终回复用通俗语言解释结果。
5. 清楚列出任何剩余风险或后续任务。
6. 如果完成的任务对应 `docs/Tasks.md` 中的复选框,将其标记为完成
(把 `- [ ]` 改为 `- [x]`)。
7. 最终回复必须明确说明哪些测试已运行并通过、哪些边界情况已验证或 mock,
以及当前实现的已知限制。
---
## 变更日志
| 日期 | 版本 | 变更 |
|---|---|---|
| 2025-07-10 | v1.0 | 初始版本 |
| 2025-07-10 | v1.1 | 基于双重评审合并后的修订(12 条指令):§Two-Day MVP Discipline 重写为 "MVP Discipline (Optimized for Speed)",不再是裁剪清单,并明确禁止未经用户确认延期 P0 功能;§Project Constraints 增加三项架构约束(后台线程中仅使用同步 httpx、预生成报告、单任务 executor 且冲突时返回 400);§Source Of Truth 增加评审文件纳入规则、冲突时绝对停止策略、防幻觉指令和 RequirementsDoc.md 存在性保护;§Development Workflow 中的 TDD 指令从 "when practical" 升级为按类别强制执行,并明确引用 TDD.md §2.1;新增 Error Handling Philosophy 小节;§Testing And Verification 增加覆盖率命令和 80% 目标;§Git Workflow 增加分支策略和强制多代理分支隔离;§Multi-Agent Rules 增加 4 个构建类并行任务示例;§Superpowers Workflow 增加环境兼容性说明和验证前清理规则;§Safety Rules 增加 raw_data fixture 脱敏指导;§Completion Standard 增加 Tasks.md 复选框同步要求和明确测试结果汇报要求。 |
| 2026-07-07 | v1.2 | 融入新的开发约定:工单默认使用独立 git worktree;处理工单前必须检查并使用适用的 Superpowers Skill;新功能先 brainstorming,缺陷先 systematic-debugging;完成后按 verification、code review、finishing branch 流程收尾。同步删除旧的直接在 main 上工作的单代理分支规则,避免与 worktree 约定冲突。 |