Files
Agent-System-Dev/docs/release-multi-instance.md
T
weichen f705f99b8f Add U7 two-process acceptance, k6 load harness and release checklist
Why: collaboration storage U7 (proposal sections 3/5/7) requires two-process
HTTP-level acceptance over shared PG, a reproducible load-test entry honoring
the load contract, and an auditable pre-release checklist; capacity windows and
dual-host runs need user-scheduled resources, so the deliverable here is the
verifiable entry, not capacity claims.
Evidence: make test green (composite); make test-multi-instance green locally
against an isolated PG (five scenarios incl. crash-takeover and restart
invariants); run_load.sh --profile smoke end-to-end green (SSE probe p95~18ms,
zero seq duplicates, stack auto-recycled); backend pinned to feature branch
with the three cross-instance fixes.
Impact: new tests/integration/multi-instance (CI test-pg job step), new
tests/load/collaboration (k6 + SSE probe + run_load.sh), release checklist at
docs/release-multi-instance.md; no runtime behavior change in Dev repo itself.
Refs: backend PR #164; task card feature/u7-load-fault-release.
2026-10-12 02:31:35 +00:00

4.8 KiB
Raw Blame History

双实例放行前检查单(协作存储 U7)

协作存储方案 §5 U7 的放行出口要求:单实例团队、双进程、双主机分别出具 结果;CI 身份/链接/SHA 或独立 REPLAY 可核验才用于放行,本地 SELF 只作辅助。 本检查单列出每一放行条件、其证据来源与当前状态;未全部满足前,第二实例 不得承接写请求、双主机部署不得开工。

状态图例:✅ 已满足(证据可核验)|⏳ 入口就绪、待执行窗口|❌ 未开始。

A. 正确性与故障矩阵(代码与 CI 可覆盖)

# 条件 证据(命令/测试) 状态
A1 单实例全链路(mock):认证/项目/会话/SSE/检索/卡片 backend go test ./...(CI job test,SQLite 档 35+ 包) ✅ CI 绿
A2 真 PG/Redis 全量 make test-backend-pg(CI job test-pg,AGENT_PG_TEST_DSN 必跑) ✅ CI 绿
A3 磁盘满清楚拒绝、零残留、可恢复 backend TestUploadRejectsCleanlyWhenObjectDirUnwritable、TestArtifactOverwriteRejectsCleanlyWhenObjectDirUnwritable ✅ CI 绿
A4 恢复隔离(未知副作用不自动重跑) backend recovery_hold_test.go(U3) ✅ CI 绿
A5 库级多实例语义(争抢/围栏/命令/跨实例 resolve 不落卡) backend runmgr/multi_instance_test.go(真库门控) ✅ CI 绿
A6 双进程 HTTP 级验收(跨实例读/SSE/409/HITL/取消/崩溃恢复/重启不变量) make test-multi-instance(CI job test-pg;本地 tests/integration/multi-instance/README.md) ✅ CI 绿
A7 权限矩阵重放(撤权零泄漏:请求/SSE/检索/下载/工具) backend resource_authz_test、shared_*_test、sse_gap_test、pgvector_test(U3/U6) ✅ CI 绿

B. 容量与负载合同(需要实测窗口,本地入口已就绪)

# 条件 证据(命令) 状态
B1 冒烟压测通过(入口可复核、不变量零违反) tests/load/collaboration/run_load.sh --profile smoke ✅ 已跑通(SELF,2026-10-12:读 P95<1ms、SSE P95≈18ms、对账 0 违反)
B2 阶梯负载 10→30→100 用户,读 P95≤300ms、P99≤1s、非预期失败≤0.1% 同上 --profile ladder(k6 需安装:brew install k6) ⏳ 待窗口
B3 60 分钟稳定负载 + 2 小时混合长稳 --profile sustained60m / --profile sustained2h ⏳ 待窗口(约 3h 机时)
B4 SSE 持久事件可见延迟 P95≤1s 同上套件自动执行(sse_probe,断言即退出码) ✅ 冒烟档已证机制;正式窗口随 B3
B5 数据量档(100 万消息/10 万知识分块/多项目交叉授权) sustained 长跑自然积累 + seed 扩展(未实现 seed 工具,标注) ❌ seed 工具未实施
B6 数据库基线(pgbench 只测 DB 能力,不替代业务验收) pgbench 对隔离实例(只读参考) ❌ 未执行
B7 容量数字绑定组件 SHA/配置/数据集归档 results// 目录 + 报告引用 SHA ⏳ 随 B2/B3 产出

C. 双进程与双主机放行(分布式出口)

# 条件 证据 状态
C1 双进程共享 PG:正确性矩阵全过(A6) make test-multi-instance ✅
C2 双进程负载下互相不拖累(热点会话/命令时延) 双栈压测(run_load.sh 尚为单实例档,需扩展第二实例参数) ❌ 入口未扩展
C3 双主机(跨机网络)验证:同套验收在两台主机执行 A6 的 AGENT_BIN/DSN 指向远端;需用户指定第二主机 ❌ 待资源
C4 故障演练:PG 断连/Redis 断连恢复(RTO≤15min) backend ratelimit/recovery 测试 + 运维手册演练记录 ⏳ 代码级 ✅;运维演练待窗口
C5 备份恢复演练(RPO≤5min/RTO≤60min,pg_dump+物理备份) U4 迁移演练已过;定期备份恢复演练属运维,待排期 ⏳

放行结论(当前)

  • 单实例团队档:A1–A7 全绿 + B1 冒烟通过。正式容量结论待 B2/B3 窗口; 在此之前按「已验收功能、未承诺容量」运营。
  • 双进程档:正确性已证(A5/A6/C1),负载与运维演练(C2/C4)未过, 不放行第二实例承接写请求。
  • 双主机档:未开始(C3),不放行。

已知边界与诚实声明

  • U7 期间经双进程验收发现并修复三个跨实例缺陷(详见 tests/integration/multi-instance/README.md):HITL resolve 落卡短路命令、 cancel 命令空会话 ID、CancelRun 假成功。修复均已入 CI 回归。
  • k6 首次冒烟使用临时二进制(v2.3.0)验证后删除;正式窗口前按 brew install k6 装固定位。
  • B5 大数据量 seed 与 C2 双实例压测入口是下一步实施项,本检查单不替代。