- 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)
12 KiB
12 KiB
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):
- gate-pg 隔离库口令与首次假设不符(全 SKIP,nightly 门禁正确拒绝出收据);
- nightly 测试内嵌 app 启动时的 sysadmin 初始 apply 会用测试库的空
secrets.minimax_api_key清空真实 runner 的 models.json key(已证实机制,nightly 环境补导出正确值规避;产品缺陷待修复任务); .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-ffP1=旧 test0e4b111d,tagrc-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 预检 OK127.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.jsonverdict=pass,modelMiniMax-M2.7-highspeed,digests app/events=sha256:c1601783…、pi-agent=sha256:c26508b6…;promotion-receipt-check --require-digestsOK - 判定:PASS(expected-tests 逐项核对五例执行且最终轮全 PASS;flake 首轮-重试关系保留如上)
5.3 test 晋升
- 候选
2fe1e055(commit-tree 构造,P1=0e4b111d);validate 收据 run2b9bac34(receipt gate + 拓扑自检) git:test租约内:update-ref refs/heads/test 2fe1e055 0e4b111d;tagrc-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→ 临时目录;webnpm 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 过程事件与现场处置(如实记录)
- gate-pg 口令:首轮 nightly 全 SKIP(SASL 401)→ 脚本正确写 infra_fail 拒绝晋升;改用容器实际口令(app/app)后正常。
- runner key 被清空(机制已证实):
internal/app/app.go每个 app 启动即向 runnerPOST /admin/reload推送 sysadmin 库解析值;nightly 测试 app 连 gate-pg(secrets.minimax_api_key为空)→ runnermodels.jsonapiKey 被写空 → 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 扩展路径问题。 - 两次 test server 误连 dev 库(已审计无污染):launch-single.sh 首版映射用
:-回退,被分层加载的根 .envCONTEXT_DB_*(dev 值)压过;脚本内set -a重载再次覆盖外部导出。两次均在启动后 ≤2 分钟发现并 kill。dev 库审计:goose=76 未变、projects=22/task_runs=9 稳定、窗口期新增 chat_messages=0(首次窗口 15min、二次 10min 各核一次)。修复(SYSTEM_DB_* 强制覆盖 + 注释说明)已随任务提交。 - docker 候选镜像构建缺陷:见背景;修复
e40a9989经真实docker build(git archive 上下文)验证后入 dev(D2),nightly7 在 D2 重跑并产出全 digests PASS 收据。nightly6 @94c215d3 的五链 PASS(收据 infra_fail 于镜像步)保留为过程证据。 - 测试 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 环境全程无扰动(两次误连均已审计)。
后续:
- 产品缺陷修复任务:sysadmin 初始 apply 空 key 清空 runner 配置(§5.8-2);launch.sh sidecar 相对路径;建议随修复把 nightly 的 MINIMAX_* 显式导出固化进 run-nightly 脚本注释/模板
- systemd 单元与
install-test.sh/preflight 打包(设计 §5.1)未在本轮范围,test 先以 nohup 形态长期运行(与 dev 一致) - embedding 401 运维债不变(非 blocker)
- 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。