Files
Agent-System-Dev/tests/integration/multi-instance
weichen e35b210dbf
ci / test (pull_request) Successful in 5m25s
ci / svc-realcombo (pull_request) Successful in 2m30s
ci / test-pg (pull_request) Failing after 2m27s
Seed via system settings and fix multi-instance mock toggle
Why: P2 受管落地后的两处消费面适配——svc 播种内容(models/tavily)全为系统受管项须走系统管理面;两进程验收的 runtime.mock 开关同理由 user 层迁至系统面(无认证档本机即管理员)。
Evidence: bash -n 通过;受管拦截与系统面行为由 Backend PR #188 测试覆盖(已合入 76c75ce5);multi-instance 于 CI test-pg 档验证。
Impact: svc 认证档播种改为仅 admin(无管理员明确跳过);验收脚本断言语义不变。
Refs: modules/documents/docs/proposals/2026-10-13-rdm-settings-members-duties-perms-increment.md P2
2026-10-13 04:46:53 +00:00
..

双进程 HTTP 级验收(协作存储 U7)

两个真实 backend serve 进程共享同一 PostgreSQL 的黑盒验收,覆盖方案 §7 最小验收矩阵的进程级行(库级语义已在 backend internal/runmgr/multi_instance_test.go 覆盖;本目录验证 HTTP/SSE/进程生命周期层面的同一套不变量):

子场景 断言(矩阵行)
cross_read A 建的项目/会话在 B 立即可见(共享权威)
cross_event_sse A 写入的事件在 B 的 SSE 可见(R5 跨实例传播)
same_session_conflict_then_cross_hitl 同会话并发提交明确 409 不误写;B 跨实例 resolve A 的 HITL 经命令总线到达执行者(R3/R4)
cross_cancel B 跨实例取消 A 的 run:命令持久、唯一消费、run 收口 cancelled(R4)
owner_crash_takeover 执行实例被 SIGKILL:租约期内 B 明确 409 不误抢;死实例不拖累其他会话;原实例重启对账收口遗留 run 后恢复推进(R4/R7/R8)
restart_invariants 实例重启后消息俱在、SSE 从 0 重放 seq 连续无洞、写入可推进(R5/R7)

运行

# 1) 隔离 PostgreSQL(示例:svc.sh 独立实例;已有实例则直接给 DSN)
scripts/svc.sh db create mi7 --port 18890
scripts/svc.sh mi7 start
DSN="$(scripts/svc.sh db dsn mi7 --reveal)"

# 2) 构建 + 运行(Make 目标自动构建二进制并注入)
make test-multi-instance AGENT_PG_TEST_DSN="$DSN?sslmode=disable"

# 3) 回收
scripts/svc.sh mi7 stop && scripts/svc.sh db rm mi7

门控:AGENT_PG_TEST_DSN(真实 PostgreSQL,CI test-pg job 必跑不跳过)与 AGENT_BIN(由 Make 目标构建注入)。测试自建临时数据库、自起进程并在 退出时回收;不打任何生产服务。

已实测发现并修复的缺陷(历史)

本验收在 U7 落地时抓出三个跨实例真实缺陷(均已有回归测试):

  1. HITL resolve 落卡短路命令路径:非执行实例先把卡标记 resolved, 命令 fallback 的 !card.Resolved 判定被跳过,执行者永远等不到答案 (backend TestCrossInstanceResolveDoesNotSettleCard)。
  2. 跨实例 cancel 命令 conversation_id 为空:消费侧按执行权 JOIN 匹配,空串永远无法送达。
  3. CancelRun 假成功:非执行实例无句柄时 CancelRun 返回 nil,HTTP 层 200 受理但 run 永远停不下(命令路径被短路)。