- TaskBonusPanel 重写:每日任务/新手任务分组、五态按钮、真实「去完成」跳转(first_report→诊断落地页;report_feedback/share_report→报告结果页)、40311/40310 文案、panel_view/task_tap 埋点 - ReportPdfPage 分享成功→静默 claim share_report;ReportResultPage SUCCEEDED 展示→静默 claim first_report(后端 40910 幂等兜底,老用户首进补发一次属预期回填) - ChatPage/ReportResultPage 修 bonus_granted 类型误写(boolean→number) - docs:T2b 任务书(验收 11 条)+ 产品方案 §3.2 任务目录定稿(签到对话+10/日、报告反馈发型+2/日、分享换装+3/日、首测重生成+1/终身;邀请好友砍) 偏差说明:share_report 落点为报告结果页而非 PDF 预览页(该页强依赖本地 pdfPath,直达需下迭代加持久化)。
多 Agent 并行开发·协作规程
版本:v1.2 | 2026-08-14 | 前两批(T1
T5、T6T11)已全部合并;本版适用第三批 T12~T14 每个 agent 开工前必须先读本文件,再读自己的任务文档。
1. 本轮架构决策(为什么这样切)
六个任务按文件所有权切分:每个文件只属于一个任务。协调者(主会话)已提前在 main 分支做了一个「协调提交」,把所有共享文件的改动一次性做完(kb 七表迁移、ORM 模型、配置项、错误码、路由注册、依赖、gitignore)。因此:
- 你不需要碰任何共享文件。如果你的任务文档说某配置/错误码/表已就绪,它就真的已就绪——直接用。
- 禁改清单见你的任务文档。改了禁改文件 = 合并时被整体丢弃。
2. 环境操作手册(Windows 宿主 + WSL 仓库)
你的工作目录是 WSL 里的一个 git worktree(不是主仓库):
| 任务 | worktree 路径(WSL) | 分支 |
|---|---|---|
| T12 | /home/xsl/meida_backend-t12 |
task/t12-admin-console |
| T13 | /home/xsl/meida_backend-t13 |
task/t13-golden-ci |
| T14 | /home/xsl/meida_backend-t14 |
task/t14-retrieval-cache |
- 读写文件:用 Read / Write / Edit 工具,路径写成 UNC 形式:
\\wsl.localhost\Ubuntu-22.04\home\xsl\meida_backend-t6\packages\...(Edit 前必须先 Read 目标文件。) - 跑命令(测试/lint/git):
注意:venv 在你自己的 worktree 里(
MSYS_NO_PATHCONV=1 wsl.exe -d Ubuntu-22.04 -e bash -c "cd /home/xsl/meida_backend-t6 && .venv/bin/pytest -q".venv/bin/...),不要用主仓库的(本批已含全部所需依赖,用--extra dev同步)。 - PG(55432)/Redis(56379) 容器已在跑,
.env已复制到你的 worktree。
3. 提交前必须全绿(在你的 worktree 里)
.venv/bin/ruff check . && .venv/bin/ruff format --check .
.venv/bin/mypy <你的任务文档里指定的包列表>
.venv/bin/lint-imports
.venv/bin/pytest -q # 单测(不连库)
# 若你的任务允许集成测试:
MEIDA_RUN_INTEGRATION=1 .venv/bin/pytest -m integration -q --no-cov
全绿后提交(只提交一次,不要多次碎提交):
git add -A
git commit -m "<你的任务文档里给定的提交信息>"
禁止 git push。禁止改动 .git/、禁止切分支、禁止 rebase/merge。
4. 硬性纪律(违反任何一条 = 返工)
- 禁改文件以任务文档为准。通用禁改:
pyproject.toml、uv.lock、migrations/**、packages/shared/models.py、packages/shared/config.py、packages/shared/errors.py、.env.example、apps/api/main.py、apps/api/deps.py、.github/**、Makefile、scripts/smoke.sh、deploy/**、packages/domain/**、packages/llm/**、packages/billing/**、packages/agent/**、packages/task/**、packages/analytics/**、packages/storage/**(除非任务文档明确允许某文件)。 - 不加任何新依赖(不
uv add,不手写 import 第三方新包)。需要的库协调者已装(含spikeextra)。 - 不连外网:单测禁止真实 HTTP。mock 方式参考
tests/unit/test_deepseek_provider.py(respx)与tests/integration/test_vertical_slice.py(FakeProvider)。唯一例外:T9 的模型下载脚本(见其任务文档)。 - 代码风格对齐现状:中文 docstring/注释(解释"为什么")、
from __future__ import annotations、frozen+slots dataclass、结构化日志get_logger(__name__)、错误一律走AppError(ErrorCode.X)、响应一律ok(...)信封。 - mypy strict 适用于
packages/domain、packages/llm(如果你改这两处,标注必须完整)。其余包按现有宽松档,但新代码仍应写满类型标注。 - ruff line-length 100;格式化用
ruff format。 - 测试文件放
tests/unit/test_<主题>.py;集成测试放tests/integration/test_<主题>.py新文件。本批任何人不得编辑已有测试文件(上批例外已用尽)。 - 不修改现有测试的断言语义。
- 遇到与任务文档冲突的现实情况(比如文档说的符号不存在):不要自行扩大范围,在提交信息里写明偏差与原因。
5. 完成定义(DoD)
- 任务文档「验收标准」全部满足;
- §3 的检查全绿;
- 新增代码有对应测试(纯逻辑必须有单测;涉及 DB 的路径按任务文档要求补集成测试);
- 提交信息按任务文档给定格式,正文用中文说明实现了什么、测了什么、有何偏差。
6. 冲突隔离原理(知其所以然)
- 本批 3 个分支最终由协调者顺序合并,每合一个跑一轮全量门禁(含
make golden——CI 防线 5c); - 你分支里的每一个文件改动,理论上不应与其它任务重叠——这是"并行不踩坑"的根本保证;
- 如果你觉得"必须"改一个禁改文件才能完成任务:停下来,在提交信息里说明需求,由协调者在合并阶段统一处理。
- 前两批(11 任务)用同样的方案跑完:零合并冲突,单测 169→473。照纪律执行即可。