Files
Agent-System/.doc/test-reports/2026-09-14-document-reliability-pilot-live-test-report.md
T
weichenandCursor b0d9153e52 docs(test): record document reliability M1 live sign-off
Rebuild, real PI, browser reload, and two-pool sessions all passed, so
the live report's last sentence is 继续 M2 and the integration slot is idle.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-14 14:46:53 +00:00

7.9 KiB
Raw Blame History

文档可靠性试点 M1 活验签字测试报告

一、 测试背景 (Background)

上一份 M1 试点报告 在 Unit/隔离库通过后,因未占槽 rebuild、无真实 PI/浏览器/4 会话而把最后一句写成 停止扩面。本轮不改写那份结论句;只补活验签字,决定能否开工 U5–U7。

二、 测试目标 (Test Objectives)

  • A1:占集成槽,本地 dev --no-ff 合入试点分支,env-service.sh dev rebuild,health+ready 来自本分支镜像。
  • A2:项目 143 只读打开/刷新/重登;新建项目打开/刷新/重登;GET .../content 为 200 且带 consistency;禁止把 missing 当 404。
  • A3:真实 pi-agent + MiniMax 编制一条受控文档,刷新不丢正文。禁止 stub 当终态。
  • A4:隔离库两个 pgx pool + 4 会话同 ETag 一赢,同 key+digest 跨 pool 重放。测完 DROP DATABASE。
  • A5:分栏签字;最后一句只能是「继续 M2」或「停止扩面」。

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

项 值
OS Linux 7.0.0-31-generic
Go 本机 go test;容器 agent-dev-app
合入 主仓 dev --no-ff refactor/document-reliability-pilot → cb8eaca
部署 主仓 ./scripts/env-service.sh dev rebuild(禁止 compose restart 当证据)
Compose 项目 agent-dev,HTTP :8080
Agent 真实 pi-agent(AGENT_BACKEND=pi-agent),模型 MiniMax-M2.7-highspeed(云端 API,非 stub)
Schema 33
FAV_DEGRADED_READ unset / 默认 false
浏览器 mcr.microsoft.com/playwright:v1.63.0-noble,--network host --ipc host
PostgreSQL 隔离库 agent_rel_itest(shuimu-system-pg-test:5434),测完 DROP;禁止 agent_system_dev/test/main
项目 143 只读;未 terminate,未 PUT /143/workflow-plan
证据 .doc/test-reports/assets/2026-09-14-document-reliability-pilot-live/

镜像身份(rebuild 后):app_image=sha256:251fa99d5de47d452b7f099304aa34b1e2aacf1b4e9d2d23d1cb4b850084910e;随后把 pi-agent force-recreate 到 rebuild 所打的 sha256:21fc9b64066c33e94d8db83695b4ff64ea5e49f6d65661f8ccab11ead083042d。见 rebuild-health-ready.txt。

四、 预期结果 (Expected Results)

栏 期望
Unit / stub go test -short 全绿;hydrate 把 missing 当正文
PostgreSQL 双 pool 同 ETag 一赢;同 key+digest 跨 pool 重放;4 会话同 ETag 一赢
故障注入 与上一份隔离库 U2 一致,本轮 -race 再跑目标包
真实 PI 新建项目激活后编制,账本 head 可读
真实浏览器 143 与新项目刷新/重登 200 + markdown;页面无「加载失败」;无 PROJECTION 409
restart/rebuild health/ready status=ok,agent_backend=pi-agent,schema_version=33;ready 不因 vault 未配置假绿,响应无路径泄漏
跨用户 匿名 401;非成员/跨项目/错误 stage-duty 同一 404 DOCUMENT_NOT_FOUND

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

5.1 Unit / stub

  • 测试输入: unset TEST_DATABASE_URL; go test -short ./...;npx tsx --test src/lib/controlledDocHydrate.test.ts;./scripts/arch-check.sh --mode warn
  • 实际输出: 全仓 short 包 ok;hydrate 17 passed;arch-check warn: production gate passed
  • 评价判定: PASS
  • 性能与耗时: internal/server 约 9.6s。日志:go-test-short.txt、hydrate-unit.txt、arch-check-warn.txt

5.2 PostgreSQL 事务与并发

  • 测试输入: 隔离库 TEST_DATABASE_URL → ./internal/docrevision -run 'TestDocumentCommitConcurrencyPG|TestDocumentCommitTwoPoolsAndFourSessionsPG'
  • 实际输出:
--- PASS: TestDocumentCommitConcurrencyPG (0.03s)
--- PASS: TestDocumentCommitTwoPoolsAndFourSessionsPG (0.03s)

两个独立 pgxpool 打同一 ETag 仅一赢;赢家 key+digest 跨 pool 重放 head 一致;随后 4 个会话同 ETag 仅一赢。测完 DROP DATABASE agent_rel_itest。

  • 评价判定: PASS(不是 4 个 OS 进程,是计划要求的双 pool 模拟两进程 + 4 会话;未使用进程内全局 mutex)
  • 性能与耗时: 62ms。日志:go-test-pg-two-pool.txt

5.3 故障注入

  • 测试输入: go test -race ./internal/app/uow ./internal/app/docflow ./internal/docquery(同一隔离库,DROP 前)
  • 实际输出: 三包 ok(含 cached)
  • 评价判定: PASS
  • 性能与耗时: 亚秒到约 1.8s

5.4 真实 PI

  • 测试输入: Playwright 新建项目 → 未激活编制被 202 blocked_pending_governance → 配置并激活 → 发送「请基于本项目编制首轮《用户需求》摸底文档…」→ 等待小队终态 → 打开 doc_proj* intake
  • 实际输出: 编制用例 4.2min PASS。GET /api/v1/docgov/documents/{id}/content 200 且 markdown 非空;刷新与重登正文相同。截图 07-new-doc.png / 08-new-doc-reload.png / 09-new-doc-relogin.png
  • 评价判定: PASS(真实 pi-agent,非 stub)
  • 性能与耗时: 编制+打开约 4.2min

5.5 真实浏览器

  • 测试输入: RUN_UI_ACCEPTANCE=1 BASE_URL=http://127.0.0.1:8080;web/e2e/controlled-document-reload.spec.ts(官方 Playwright 镜像)
  • 实际输出:
✓ project 143 content is 200 with consistency; anonymous is 401; unknown is 404 (4.6s)
✓ non-member GET of project 143 is the same 404 as unknown (7.4s)
✓ new project PI compile then reload keeps ledger markdown (4.2m)
✓ cross-project and wrong-stage GET stay DOCUMENT_NOT_FOUND (3.8s)
4 passed (4.5m)

143 打开/刷新/重登均为 200 + markdown + typed consistency,无 PROJECTION 409,页面无「加载失败」。未对 /143/ 发 PUT workflow-plan,未 terminate。

  • 评价判定: PASS
  • 性能与耗时: 整套 4.5min。日志:playwright-controlled-reload.txt;截图 screenshots/01–10

5.6 restart / rebuild

  • 测试输入: 占槽后 ./scripts/env-service.sh dev rebuild;curl -sf http://127.0.0.1:8080/api/v1/health 与 /api/v1/ready
  • 实际输出: 两者 HTTP 200,body 均为
{"status":"ok","env":"dev","agent_backend":"pi-agent","version":"v1.0","shared_kb_port":5432,"database_ready":true,"schema_version":33,"schema_ready":true,"task_store_ready":true}

无文件系统路径字段。vault 未配置时 ready 仍按 DB/schema/task_store 判定,不是假绿。

  • 评价判定: PASS
  • 性能与耗时: rebuild 约 79s。日志:rebuild-health-ready.txt、health.json、ready.json

5.7 跨用户负例

  • 测试输入: 匿名 GET 143;局外人 D GET 143 与新项目文档;审核人 B GET 143 与伪造 _design_control stage
  • 实际输出: 匿名 401;其余均为 404 DOCUMENT_NOT_FOUND,不泄露存在性
  • 评价判定: PASS
  • 性能与耗时: 3.8s。截图 10-fail-closed.png

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

命令 结果
go vet ./... PASS(合入后、rebuild 前)
go test -short ./... PASS
隔离库双 pool / 4 会话 PASS,随后 DROP DATABASE
目标包 -race PASS
arch-check --mode warn PASS
hydrate 单测 17/17 PASS
Playwright 活验(官方镜像) 4 passed
宿主 npx playwright 因缺 libatk-1.0.so.0 无法启动;改走已验证的 mcr.microsoft.com/playwright:v1.63.0-noble

七、 测试结论与后续优化建议 (Conclusion & Next Steps)

活验补齐了上一份报告缺的 rebuild、真实 PI、真实浏览器、双 pool/4 会话与 HTTP 跨用户负例。hazard 真页面 404/409/projection-missing 本轮观测为 0;授权未靠放宽;4 会话赢家来自数据库锁而非进程内 mutex。M1 签字通过,允许按计划实施 U5–U7。上一份「停止扩面」报告保持原句,不改写。

继续 M2