# 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。 - 优先保证可工作的端到端流程,而不是大量未完成的功能。 - 整个项目遵循 TDD(Test-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 打磨(面包屑、`` 命名、进度动画) 未经用户明确确认绝不能延期的项目: - 僵尸任务恢复(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 约定冲突。 |