Files
Agent-System/.doc/test-reports/2026-09-27-test-single-binary-test-report.md
T
weichen 912342ae0a docs(test): rc-v1.1.0-beta.4 promotion + test single-binary report; fix launcher env mapping
- migrate-test-db.sh: export DEV_PG_CONTAINER (inner script reads it, not CONTAINER)
- launch-single.sh: SYSTEM_DB_* must override root-.env CONTEXT_DB_* (set -a
  re-source clobbers both external exports and :- fallbacks; two misdirected
  launches audited, dev DB unchanged - report §5.8-3)
- task record done; full test report (nightly five chains PASS @5e409c1e,
  migration S0-verified, deployment acceptance, rollback paths, follow-ups)
2026-09-27 21:10:16 +00:00

12 KiB
Raw Blame History

dev→test 晋升(rc-v1.1.0-beta.4)与 test 单二进制化 — 测试报告

一、测试背景 (Background)

用户指令:把 dev 合入 test,并将 test 环境转换为单二进制服务(与 dev 同形态)。dev 领先 test 273 提交(含单二进制运行时、9 月 24 日以来的功能与修复);test 原为 4 容器形态(app/events/pi-agent/system-pg,schema 66)。

过程中发现并处置三个阻断问题(详见 §5.8):

  1. gate-pg 隔离库口令与首次假设不符(全 SKIP,nightly 门禁正确拒绝出收据);
  2. nightly 测试内嵌 app 启动时的 sysadmin 初始 apply 会用测试库的空 secrets.minimax_api_key 清空真实 runner 的 models.json key(已证实机制,nightly 环境补导出正确值规避;产品缺陷待修复任务);
  3. .dockerignore 排除整个 web/dist,与 web/embed.go(all:dist)组合导致候选镜像构建自 P1 起即坏(fix: !web/dist/.gitkeep,随本轮入 dev)。

二、测试目标 (Test Objectives)

  • dev 全面门禁绿(arch-check/vet/short/npm/scripts unittest)后晋升 test:--no-ff P1=旧 test 0e4b111d,tag rc-v1.1.0-beta.4,镜像 digests 入收据
  • test 转单二进制:容器 system-db 数据迁入本机 localpg :5434(PGDATA=data/test/pg,volume 保留可回滚);停 app/events/pi-agent/system-pg 容器;从 rc tag 源码 构建 bin/agent-server-test;test PI sidecar :18866 + agent-server(ENV=test, HTTP 8081, MiniMax-M2.7-highspeed, SEED_DEMO_USERS=false)
  • 验收:health/ready、embed SPA、DB 数据保留与迁移、真实 Runner 执行、dev 环境不受扰

三、测试方案与环境 (Test Plan & Environment)

项 值
OS Linux (brew postgresql@18.6 + pgvector)
晋升前 dev tip 5e409c1e(= D2;含 docker 上下文修复 e40a9989 + 脚本 d91dafc1)
晋升前 test tip 0e4b111d(rc-v1.1.0-beta.3, schema 66)
promote M 2fe1e055(P1=0e4b111d, P2=5e409c1e),tag rc-v1.1.0-beta.4
制品 bin/agent-server-test,sha256 5796ecb913fd8421d968ffbba29e411301e28dbdf8eeea65452976b4b72e474a(32MB,-X main.version=rc-v1.1.0-beta.4,git archive @ tag 构建)
门禁/nightly gate-pg 127.0.0.1:5436/agent_gate;dev runner :18865;test runner :18866
S0 快照 /tmp/agent-test-snap-s0-pre-beta4-20260927T172223Z(goose 66 / projects 9 / task_runs 9 / users 9,pg_dump -Fc)
层级 静态门禁 + nightly 真实 PI 五链 + test 部署验收(迁移/配置层 + 业务链路)

四、预期结果 (Expected Results)

  • nightly 五例(U8 + FullNoneMixed + FullChain×3)全部 PASS 且逐项核对执行;receipt verdict=pass + 三镜像 digests
  • test 候选 first parent = 旧 test tip;tag/rc 校验一致
  • 迁移后 localpg :5434/agent_system_test 数据 = S0;agent-server 启动自动 goose 66→76
  • test health/ready:env=test, schema_version=76, database_ready/kb_ready/events_ready=true, shared_kb_port=5432
  • SPA 200(embed);PI sidecar :18866 真实执行一次 pi run;dev 环境(8080/5433/18865)不受扰

五、实际测试结果与判定 (Actual Results & Evaluation)

5.1 静态门禁(dev tip 94c215d3 = 候选 1)

检查 结果
arch-check.sh --mode block PASS
go vet ./... PASS
go test -short ./... PASS
web/ npm test(34 例) PASS
web/ npm run build(demo seeds off + precompress) PASS
scripts unittest(234 例) PASS

证据:/tmp/tsb-gate/01..06(validate 收据 run a835747e @ 94c215d3)。

5.2 nightly 真实 PI(dev tip 5e409c1e,nightly7)

  • 输入:run-nightly-real-pi.sh @ 5e409c1e;TEST_DATABASE_URL=…:5436/agent_gate;绝对 DATA_DIR=data/dev;MINIMAX_API_KEY/MINIMAX_MODEL_ID/TAVILY_API_KEYS 显式导出(见 §5.8-2);KB 预检 OK 127.0.0.1:5432/regulations
  • 实际(首轮 FullNoneMixedChain 命中已知 MISSING_TARGET flake 43s,脚本内整组重试一次):
用例 首轮 重试
TestMultiIntentU8_RealPI_ConfirmGenerate_PG PASS 312.5s PASS 309.2s
TestWorkflowGovernance_PiAgent_PG_FullNoneMixedChain FAIL 43.1s (MISSING_TARGET) PASS 1153.2s
TestWorkflowGovernance_PiAgent_PG_FullChain PASS 309.8s PASS 364.6s
TestWorkflowGovernance_PiAgent_PG_ProductManager_FullChain PASS 1199.9s PASS 1058.9s
TestWorkflowGovernance_PiAgent_PG_TestManager_FullChain PASS 1274.6s (重试组末例由 expected-tests 逐项核对,见 expected-tests.json)
  • receipt:.doc/test-reports/assets/promotion-receipts/5e409c1eb237814723f65102cb221a3e2de42e6e.json verdict=pass,model MiniMax-M2.7-highspeed,digests app/events=sha256:c1601783…、pi-agent=sha256:c26508b6…;promotion-receipt-check --require-digests OK
  • 判定:PASS(expected-tests 逐项核对五例执行且最终轮全 PASS;flake 首轮-重试关系保留如上)

5.3 test 晋升

  • 候选 2fe1e055(commit-tree 构造,P1=0e4b111d);validate 收据 run 2b9bac34(receipt gate + 拓扑自检)
  • git:test 租约内:update-ref refs/heads/test 2fe1e055 0e4b111d;tag rc-v1.1.0-beta.4;candidate-images-apply.sh test(app/events/pi-agent 镜像按收据 digest 重打 tag,compose 回滚路径就绪)
  • 判定:PASS

5.4 test DB 迁移(容器 → localpg :5434)

  • 输入:migrate-dev-db.sh 以 test 参数运行(CONTAINER=shuimu-system-pg-test、DATA_DIR=data/test、5434/agent_system_test;wrapper 脚本 migrate-test-db.sh 的变量名缺陷当场以显式环境变量等价执行,修复随任务入 dev)
  • 实际:dump→restore 完成(3 条扩展 COMMENT 噪声,与 dev 迁移一致);restore 后 goose=66、projects/task_runs/users=9/9/9(与 S0 一致);system-db 容器停止(volume 保留)
  • 判定:PASS

5.5 单二进制构建与启动

  • 输入:git archive rc-v1.1.0-beta.4 → 临时目录;web npm ci + env -u VITE_ENABLE_DEMO_SEEDS npm run build(precompress 66 br/gz);CGO_ENABLED=0 go build -ldflags "-s -w -X main.version=rc-v1.1.0-beta.4" → bin/agent-server-test
  • 实际:启动后 health/ready env=test, schema_version=76(服务端 goose 66→76 自动迁移),database_ready/kb_ready/events_ready/task_store_ready=true,shared_kb_port=5432(共享 KB 容器,非 dev 库)
  • 判定:PASS

5.6 test 验收明细

项 实际 判定
health/ready :8081 ok / test / schema 76;ready 同 PASS
SPA embed GET / → 200,标题「水木东方 · 医疗器械现代 AI 协同工作台」 PASS
DB 数据保留 localpg :5434 goose=76(数值 cast 核对),projects/users/task_runs=9/9/9 PASS
app→DB 连接 ss 确认 agent-server-test ↔ 127.0.0.1:5434 PASS
PI sidecar :18866 health ok,model MiniMax-M2.7-highspeed,data_dir=data/test/workspaces PASS
真实 PI 执行 POST /v1/run(test sidecar)→ ok:true + sidecar 日志 [runner] Starting pi run … tsb-verify-beta4 PASS
业务管道 admin 登录 48B token;POST /api/v1/chat 两条 → intent+KB 应答 1322 字(模板路径,非寒暄句式不足以触发 dialogue runner;真实 runner 链由 nightly 五链 @ 同代码覆盖 + 上行直调覆盖) PASS
容器状态 app/events/pi-agent/system-pg-test 全部 Exited(volume 保留);shuimu-kb-shared Up PASS
dev 不受扰 dev health dev/76;dev 库 goose=76、projects=22、task_runs=9、窗口期 chat_messages=0(见 §5.8-3) PASS

5.7 回滚路径

  • 容器:docker compose -f docker-compose.test.yml -p agent-test up -d(镜像已按 beta.4 digests pin;system-db volume 未动)
  • 数据:S0 快照 restore;localpg 数据可 pg_dump 回容器
  • 单二进制:bin/agent-server-test 为制品身份(sha256 见 §三)

5.8 过程事件与现场处置(如实记录)

  1. gate-pg 口令:首轮 nightly 全 SKIP(SASL 401)→ 脚本正确写 infra_fail 拒绝晋升;改用容器实际口令(app/app)后正常。
  2. runner key 被清空(机制已证实):internal/app/app.go 每个 app 启动即向 runner POST /admin/reload 推送 sysadmin 库解析值;nightly 测试 app 连 gate-pg(secrets.minimax_api_key 为空)→ runner models.json apiKey 被写空 → pi 以空 key 解析失败后回落内置 MiniMax 目录(anthropic-messages @ api.minimax.io)→ 401。验证:models.json 空 key 必现 401/路由漂移,恢复字面 key 后同请求即 PASS 且 key 不被运行剥离。规避:nightly 环境导出 MINIMAX_API_KEY/MODEL_ID/ENDPOINT/API_TYPE/TAVILY_API_KEYS 使推送值正确。产品缺陷待修复(建议:payload 空 key 时省略字段或 apply 不以空覆盖),另记 launch.sh sidecar 子 shell 相对 DATA_DIR 扩展路径问题。
  3. 两次 test server 误连 dev 库(已审计无污染):launch-single.sh 首版映射用 :- 回退,被分层加载的根 .env CONTEXT_DB_*(dev 值)压过;脚本内 set -a 重载再次覆盖外部导出。两次均在启动后 ≤2 分钟发现并 kill。dev 库审计:goose=76 未变、projects=22/task_runs=9 稳定、窗口期新增 chat_messages=0(首次窗口 15min、二次 10min 各核一次)。修复(SYSTEM_DB_* 强制覆盖 + 注释说明)已随任务提交。
  4. docker 候选镜像构建缺陷:见背景;修复 e40a9989 经真实 docker build(git archive 上下文)验证后入 dev(D2),nightly7 在 D2 重跑并产出全 digests PASS 收据。nightly6 @94c215d3 的五链 PASS(收据 infra_fail 于镜像步)保留为过程证据。
  5. 测试 workspaces/杂散目录:sidecar 相对路径时期产生的 deploy/pi-agent/data/(396K,错误路由产物)已删除(未跟踪垃圾,非证据)。

六、自动化测试套件汇总 (Test Suite Execution)

套件 范围/SHA 结果
arch-check block / go vet / go test -short / npm test+build / scripts unittest(234) 候选 94c215d3 全 PASS(§5.1)
nightly 真实 PI 五链(非 stub,真实 Runner+gate-pg+共享 KB) dev 5e409c1e PASS(§5.2)
docker build(app 镜像,git archive 上下文) e40a9989 PASS(sha256:0d5f6663…)
test 部署验收(health/ready/SPA/迁移/连接/runner/chat) rc-v1.1.0-beta.4 制品 PASS(§5.6)

七、测试结论与后续 (Conclusion & Next Steps)

结论:rc-v1.1.0-beta.4(2fe1e055)已晋升 test 并以单二进制形态落地:localpg :5434(schema 76、S0 数据完整)、agent-server-test(tag 源码构建、sha256 入档)、PI sidecar :18866、共享 KB 保持容器形态;容器 compose 路径与 S0 快照构成回滚面。dev 环境全程无扰动(两次误连均已审计)。

后续:

  1. 产品缺陷修复任务:sysadmin 初始 apply 空 key 清空 runner 配置(§5.8-2);launch.sh sidecar 相对路径;建议随修复把 nightly 的 MINIMAX_* 显式导出固化进 run-nightly 脚本注释/模板
  2. systemd 单元与 install-test.sh/preflight 打包(设计 §5.1)未在本轮范围,test 先以 nohup 形态长期运行(与 dev 一致)
  3. embedding 401 运维债不变(非 blocker)
  4. main 未晋升;远端未 push(未请求)

证据路径:receipt/evidence 见 .doc/test-reports/assets/promotion-receipts/5e409c1e…{json,-images.json} 与 evidence-5e409c1e…/、evidence-94c215d3…-171311Z/(过程);门禁日志 /tmp/tsb-gate/;nightly 日志 /tmp/tsb-nightly/nightly{1..7}.log;转换日志 /tmp/tsb-convert/(本机,未入库);服务日志 .tmp/launch/{server,pi-sidecar}-test.log。