Files
Agent-System-Documents/docs/records/2026-10-12-lesson-http-multi-instance-vs-manager-tests.md
T
weichenandCursor 2cec59016a Update collab storage plan progress to r2 after U1-U7
Why: Delivery requires writing planning progress back after U7
landed; the proposal still claimed U1+U2 start / NOT_RUN.
Evidence: SELF doc edit against archived U7 cards and release
checklist A1-A7/B1 facts.
Impact: Readers see code-done vs capacity-window-pending; adds
HTTP multi-instance vs Manager-test lesson.
Refs: Dev feature/u7-capacity-wrap-measure; release-multi-instance.md

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-12 06:39:26 +00:00

2.5 KiB
Raw Blame History

经验:库级 Manager 测试通过 ≠ 跨实例 HTTP 路径正确——进程级黑盒才能抓住短路

  • 状态:validated(三条缺陷均在 U7 双进程验收中复现、修复并入 CI 回归)
  • 触发条件/检索词:多实例 / 跨实例 HITL / cancel / 命令总线 / Manager 层单测 / HTTP 黑盒 / 假成功 200 / conversation_id 空 / 落卡短路命令 / U5 vs U7
  • 根因与来源:协作存储 U5 用真库直接调 runmgr.Manager 覆盖争抢/围栏/命令语义,绕过 HTTP handler。U7 tests/integration/multi-instance/ 起两个真实 serve 进程共享 PG 后抓出三条生产路径缺陷(均已有 backend 回归):① HITL resolve 在非执行实例先把卡标 resolved,命令 fallback 的 !card.Resolved 判定被跳过,执行者永远等不到答案;② 跨实例 cancel 命令 conversation_id 传空串,消费侧执行权 JOIN 永不命中;③ CancelRun 在非执行实例无句柄时返回 nil,HTTP 层 200「假成功」吞掉命令路径。库级绿与进程级红可以同时为真。
  • 下次应做的检查:凡涉及「任意 API 实例发起、执行实例消费」的能力(取消、HITL、命令、租约接管),验收矩阵须含 至少一条双进程 HTTP/SSE 黑盒(或等价:经真实 handler + 命令总线落库再消费),不能只用 Manager/Store 直调冒充跨实例已过。写回归时优先钉住「非执行实例的 HTTP 状态码与执行者观测到的最终状态」成对断言。
  • 验证方法与防护:已落实——Dev make test-multi-instance(CI test-pg 必跑)覆盖跨实例读/SSE/409/HITL/取消/崩溃恢复/重启不变量;三条缺陷各有 backend 回归测试。建议保持:新增跨实例命令路径时先加进程级场景再声称 U5/U7 完成。
  • 适用与不适用:适用多实例共享权威存储、命令经 DB/总线投递的架构;不适用纯单实例本地句柄路径,也不替代库级语义单测(二者互补)。
  • 尚缺证据/防护:双主机(跨机网络)C3 与正式容量窗口不在本教训范围内;本条只固定「测试层级」缺口。
  • 复核人、日期、版本:weichen,2026-10-12;依据 Dev 放行检查单 A6/C1 与 tests/integration/multi-instance/README.md「已实测发现并修复的缺陷」
  • 替代/退役条件:若跨实例命令路径全部强制经同一 HTTP→命令总线集成测试门禁,且历史三条回归仍绿,可将本条降为参考;不得在无门禁时退役。