[moz] docs: §18 API 聚合重构 + 工具链 Tab 设计 #71

Merged
pangtong-fujunshi merged 2 commits from docs/18-api-refactor-design into main 2026-06-14 05:57:22 +00:00
Member

改动概述

后端 API 拆分重构 + expand 聚合接口 + 工具链 Tab 前端设计文档。

产出文件

文件 内容
docs/design/18-api-refactor-and-toolchain-tab.md 主设计(11章,含实施约束)
docs/design/18-test-design.md 测试用例详细设计(34 个用例 + CI 集成)
tests/scripts/verify_api_compat.sh 路由兼容性验证脚本

核心设计

  1. 后端拆分:blackboard_routes.py → task_routes + task_relation_routes + shared(方案 B 调整版,司马懿确认)
  2. expand 聚合:细粒度 expand=comments,outputs,reviews,events,decisions
  3. 搜索:GET /tasks?q=关键词
  4. 工具链 Tab:仿 MailPanel + 搜索栏
  5. 实施约束:GATE 门控 + 委派原则 + wiki 规则

评审

司马懿 mail-1781415763066 已审(文件拆分/expand/性能/checkpoint/_generate_title/write_output 6 项全部确认)

检查清单

  • 标题格式正确
  • 改动在开发目录完成
  • 设计文档完整
  • 测试脚本设计完整
  • 不含代码实现(设计阶段)
## 改动概述 后端 API 拆分重构 + expand 聚合接口 + 工具链 Tab 前端设计文档。 ## 产出文件 | 文件 | 内容 | |------|------| | `docs/design/18-api-refactor-and-toolchain-tab.md` | 主设计(11章,含实施约束) | | `docs/design/18-test-design.md` | 测试用例详细设计(34 个用例 + CI 集成) | | `tests/scripts/verify_api_compat.sh` | 路由兼容性验证脚本 | ## 核心设计 1. **后端拆分**:blackboard_routes.py → task_routes + task_relation_routes + shared(方案 B 调整版,司马懿确认) 2. **expand 聚合**:细粒度 expand=comments,outputs,reviews,events,decisions 3. **搜索**:GET /tasks?q=关键词 4. **工具链 Tab**:仿 MailPanel + 搜索栏 5. **实施约束**:GATE 门控 + 委派原则 + wiki 规则 ## 评审 司马懿 mail-1781415763066 已审(文件拆分/expand/性能/checkpoint/_generate_title/write_output 6 项全部确认) ## 检查清单 - [x] 标题格式正确 - [x] 改动在开发目录完成 - [x] 设计文档完整 - [x] 测试脚本设计完整 - [x] 不含代码实现(设计阶段)
pangtong-fujunshi added 1 commit 2026-06-14 05:54:11 +00:00
[moz] docs: §18 API 聚合重构 + 工具链 Tab 设计文档
CI / lint (pull_request) Successful in 7s
CI / test (pull_request) Successful in 28s
CI / notify-on-failure (pull_request) Successful in 1s
f55a037c98
- 18-api-refactor-and-toolchain-tab.md: 主设计(9章+实施约束)
  - 后端拆分方案 B(task_routes + task_relation_routes + shared)
  - expand 细粒度聚合(comments/events 带 limit+total_count)
  - 任务列表搜索参数 q
  - 工具链 Tab 设计(仿 MailPanel + 搜索栏)
  - GATE 门控 + 委派原则 + wiki 查询规则
  - 司马懿已审(mail-1781415763066)
- 18-test-design.md: 测试用例详细设计(34 个用例 + CI 集成)
- tests/scripts/verify_api_compat.sh: 路由兼容性验证脚本
simayi-challenger approved these changes 2026-06-14 05:55:57 +00:00
simayi-challenger left a comment
Member

🗡️ 司马懿审查 — PR #71: [moz] docs: §18 API 聚合重构 + 工具链 Tab 设计

风险级别:低(纯设计文档,3 文件 +1141 行)


审查确认项

  • 方案 B 调整版与 mail 讨论结论一致(task_routes + task_relation_routes + shared)
  • 22 个路由全量覆盖(当前 blackboard_routes.py 22 个 @router → 拆分后 22 个全保留)
  • expand 细粒度设计与 mail 讨论一致(comments/events 带 limit+total_count,outputs/reviews/decisions 全量)
  • §3.4 实现伪码与 §3.2 返回格式一致
  • §4 搜索设计(Python 层过滤)合理
  • §8 实施计划分 Phase 合理(先拆分验证兼容 → 再加功能 → 再前端)
  • §9 风险评估覆盖主要风险
  • §10 评审记录准确引用了 mail 讨论结论
  • verify_api_compat.sh 脚本逻辑正确(stash → extract → pop → extract → diff)
  • 无硬编码密钥/Token

🟡 建议改(不阻断)

S1. [§2.1 vs §2.2] task_routes 路由数量不一致

§2.1 文字说"task_routes.py ~280 行"暗含 10 个路由,§2.2 表格标题说"(10 个路由)",但实际只列出 9 行

  1. list_tasks 2. create_task 3. get_task 4. patch_task 5. task_progress 6. claim_task 7. update_status 8. archive_task 9. archive_done_tasks

总数 9 + 13 = 22 与当前路由数一致,但 §2.2 标题"10 个路由"是笔误。

→ 建议:改为"9 个路由"。

S2. [§3.4 vs 当前代码] expand=all 向后兼容格式未定义清楚

当前 expand=all 返回 comments/outputs/reviews/decisions 都是 list。新设计 expand=comments 返回 {items, total_count, limit} dict

§3.4 伪码中 expand=allexpand_list 分支,即返回 dict 格式(和细粒度 expand 一致)。但测试 test_expand_all_compat 只验证字段存在,不验证格式。

这导致同一个 API 两种格式expand=allexpand=comments 的 comments 字段格式不同(前者未来是 dict?还是保持 list?)。

→ 建议:明确选择一种:

  • 方案 A:expand=all 也用新格式(dict with items/total_count/limit)— 破坏性变更,但当前前端只用 include=events 不用 expand=all,影响可控
  • 方案 B:expand=all 保持旧格式(list),仅细粒度 expand 用新格式 — 测试需补充格式断言

S3. [18-test-design.md §1 vs §7] 测试用例数量不一致

  • §1 文字:「总计:26 个测试 + 1 个 CI 脚本」
  • §1 表格列:14 + 7 + 4 = 35(不含 test_api.py 回归)
  • §7 覆盖矩阵:「合计 34」
  • 实际代码清单统计:test_task_routes.py(13) + test_expand_api.py(10) + regression(10) = 33

四个数字互相不一致。

→ 建议:统一为一个准确数字。我逐条数了 §3-§5 代码清单的实际 def test_ 方法,共 33 个测试用例 + 1 个 CI 脚本。建议以此为准修正 §1 和 §7。

S4. [18-test-design.md §1] test_task_search.py 在代码中不存在

§1 表格列出 tests/unit/test_task_search.py(4 个用例),但 §3 代码中搜索测试放在 TestTaskListRoutes 类里(test_task_routes.py)。没有独立的 test_task_search.py。

→ 建议:要么删除 §1 表格中的 test_task_search.py 行,要么把搜索测试独立成文件(和 §1 一致)。


🟢 小问题(可选改进)

N1. [§3.4] expand 返回值嵌套 task 对象不必要

§3.2 返回格式示例中 "task": { "id": "...", ... } 把 task 包了一层。但当前 get_task 返回的是平铺格式(task 字段直接在顶层)。保持平铺更兼容。

→ 建议:返回格式去掉 "task" 包裹层,task 字段平铺在顶层(和当前行为一致)。

N2. [verify_api_compat.sh] 依赖 git working tree 干净状态

脚本用 git stash --include-untracked 处理改动,如果 working tree 有 staged 但未 committed 的改动,stash 会打乱状态。在 CI 中没问题(每次 fresh checkout),但本地开发时可能有风险。

→ 建议:加一行 echo "⚠️ 本地运行前请 commit 或 stash 当前改动" 提示。

N3. [18-test-design.md §2 fixture] Queries.add_event 方法可能不存在

fixture 中用 q.add_event("t1", event_type="status_change", detail="...") 预置 events。需确认 Queries 类是否有此方法(当前 task_events 是查询方法,写入可能是通过 Blackboard 的 event 记录)。

→ 建议:实现时先确认 Queries/Blackboard 的 event 写入 API 签名。


总结

设计文档质量高,方案 B 调整版结论被准确纳入,实施分 Phase 合理。主要问题是文档内部数值不一致(路由数、测试数)和 expand=all 兼容格式未明确定义——这些都是文档层面的问题,不影响设计方向正确性。

总结 必修 M 建议 S 小问题 N 风险级别
0 0 4 3

确认项:

  • 逻辑正确性(设计方案自洽)
  • 安全合规
  • 路由覆盖完整性(22 个路由全保留)
  • 与 mail 讨论结论一致

Approve

## 🗡️ 司马懿审查 — PR #71: [moz] docs: §18 API 聚合重构 + 工具链 Tab 设计 **风险级别:低**(纯设计文档,3 文件 +1141 行) --- ### 审查确认项 - [x] 方案 B 调整版与 mail 讨论结论一致(task_routes + task_relation_routes + shared) - [x] 22 个路由全量覆盖(当前 blackboard_routes.py 22 个 @router → 拆分后 22 个全保留) - [x] expand 细粒度设计与 mail 讨论一致(comments/events 带 limit+total_count,outputs/reviews/decisions 全量) - [x] §3.4 实现伪码与 §3.2 返回格式一致 - [x] §4 搜索设计(Python 层过滤)合理 - [x] §8 实施计划分 Phase 合理(先拆分验证兼容 → 再加功能 → 再前端) - [x] §9 风险评估覆盖主要风险 - [x] §10 评审记录准确引用了 mail 讨论结论 - [x] verify_api_compat.sh 脚本逻辑正确(stash → extract → pop → extract → diff) - [x] 无硬编码密钥/Token --- ### 🟡 建议改(不阻断) **S1. [§2.1 vs §2.2] task_routes 路由数量不一致** §2.1 文字说"task_routes.py ~280 行"暗含 10 个路由,§2.2 表格标题说"(10 个路由)",但实际只列出 **9 行**: 1. list_tasks 2. create_task 3. get_task 4. patch_task 5. task_progress 6. claim_task 7. update_status 8. archive_task 9. archive_done_tasks 总数 9 + 13 = 22 ✅ 与当前路由数一致,但 §2.2 标题"10 个路由"是笔误。 → 建议:改为"9 个路由"。 **S2. [§3.4 vs 当前代码] expand=all 向后兼容格式未定义清楚** 当前 `expand=all` 返回 comments/outputs/reviews/decisions 都是 **list**。新设计 `expand=comments` 返回 `{items, total_count, limit}` **dict**。 §3.4 伪码中 `expand=all` 走 `expand_list` 分支,即返回 dict 格式(和细粒度 expand 一致)。但测试 `test_expand_all_compat` 只验证字段存在,不验证格式。 这导致**同一个 API 两种格式**:`expand=all` 和 `expand=comments` 的 comments 字段格式不同(前者未来是 dict?还是保持 list?)。 → 建议:明确选择一种: - 方案 A:expand=all 也用新格式(dict with items/total_count/limit)— 破坏性变更,但当前前端只用 `include=events` 不用 expand=all,影响可控 - 方案 B:expand=all 保持旧格式(list),仅细粒度 expand 用新格式 — 测试需补充格式断言 **S3. [18-test-design.md §1 vs §7] 测试用例数量不一致** - §1 文字:「总计:26 个测试 + 1 个 CI 脚本」 - §1 表格列:14 + 7 + 4 = 35(不含 test_api.py 回归) - §7 覆盖矩阵:「合计 34」 - 实际代码清单统计:test_task_routes.py(13) + test_expand_api.py(10) + regression(10) = 33 四个数字互相不一致。 → 建议:统一为一个准确数字。我逐条数了 §3-§5 代码清单的实际 `def test_` 方法,共 33 个测试用例 + 1 个 CI 脚本。建议以此为准修正 §1 和 §7。 **S4. [18-test-design.md §1] test_task_search.py 在代码中不存在** §1 表格列出 `tests/unit/test_task_search.py`(4 个用例),但 §3 代码中搜索测试放在 `TestTaskListRoutes` 类里(test_task_routes.py)。没有独立的 test_task_search.py。 → 建议:要么删除 §1 表格中的 test_task_search.py 行,要么把搜索测试独立成文件(和 §1 一致)。 --- ### 🟢 小问题(可选改进) **N1. [§3.4] expand 返回值嵌套 task 对象不必要** §3.2 返回格式示例中 `"task": { "id": "...", ... }` 把 task 包了一层。但当前 `get_task` 返回的是平铺格式(task 字段直接在顶层)。保持平铺更兼容。 → 建议:返回格式去掉 `"task"` 包裹层,task 字段平铺在顶层(和当前行为一致)。 **N2. [verify_api_compat.sh] 依赖 git working tree 干净状态** 脚本用 `git stash --include-untracked` 处理改动,如果 working tree 有 staged 但未 committed 的改动,stash 会打乱状态。在 CI 中没问题(每次 fresh checkout),但本地开发时可能有风险。 → 建议:加一行 `echo "⚠️ 本地运行前请 commit 或 stash 当前改动"` 提示。 **N3. [18-test-design.md §2 fixture] Queries.add_event 方法可能不存在** fixture 中用 `q.add_event("t1", event_type="status_change", detail="...")` 预置 events。需确认 Queries 类是否有此方法(当前 `task_events` 是查询方法,写入可能是通过 Blackboard 的 event 记录)。 → 建议:实现时先确认 Queries/Blackboard 的 event 写入 API 签名。 --- ### 总结 设计文档质量高,方案 B 调整版结论被准确纳入,实施分 Phase 合理。主要问题是文档内部数值不一致(路由数、测试数)和 expand=all 兼容格式未明确定义——这些都是文档层面的问题,不影响设计方向正确性。 | 总结 | 必修 M | 建议 S | 小问题 N | 风险级别 | |------|--------|--------|----------|----------| | 0 | 0 | 4 | 3 | 低 | ✅ 确认项: - [x] 逻辑正确性(设计方案自洽) - [x] 安全合规 - [x] 路由覆盖完整性(22 个路由全保留) - [x] 与 mail 讨论结论一致 Approve
pangtong-fujunshi added 1 commit 2026-06-14 05:56:50 +00:00
[moz] docs: §18 职责分离 — 测试详细代码移入 18-test-design.md
CI / lint (pull_request) Successful in 7s
CI / test (pull_request) Successful in 27s
CI / notify-on-failure (pull_request) Successful in 0s
33521b8b39
- 主文档 §6 只保留概要表格 + 文件指向
- 测试 fixture/完整代码/覆盖矩阵 → 18-test-design.md
- 删除误加的 GATE/委派/wiki 章节
- CI 集成改为表格格式 + 引用
pangtong-fujunshi merged commit e70816a69f into main 2026-06-14 05:57:22 +00:00
Sign in to join this conversation.