Files
Agent-System/.doc/test-reports/2026-09-14-document-reliability-pilot-test-report.md
T
weichenandCursor 7f8ad76d12 test(docgov): add two-pool races and ledger-first live spec
Occupy the integration slot for M1 live sign-off, cover two pgx pools plus four sessions, and add a Playwright spec that treats projection consistency as 200 rather than 404.

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

7.1 KiB
Raw Blame History

文档可靠性纵向试点(M0–M1 / U1–U4)测试报告

一、 测试背景 (Background)

受控文档写路径曾把账本、root pointer 与通知拆到提交后回调;读路径在 ledger 已存在时仍被 InspectProjection 绑架成 409。刷新、重登或 projection 缺失会被前端当成 404 再 hydrate。本轮只批准 M0–M1(U1–U4):门禁纠偏、UnitOfWork、文档命令同事务、授权后账本读。明确不授权 FAV 降级读、拆 chat/squad、占槽 rebuild。

二、 测试目标 (Test Objectives)

  • U1:四类生产规则可重放;新违规 block;Goose/*_test.go 不记生产写者债。
  • U2:跨属主同事务;第二属主/staging/commit 失败零残留;仅 40001/40P01 整事务重试。
  • U3:人工编辑 / agent commit / approve / reject 锁后重鉴权;同 ETag 一赢一输。
  • U4:projection missing/drift/empty 仍返回账本正文 + typed consistency;GET 零写入。
  • 分栏必须各自签字。未占集成槽不得把 :8080 旧镜像或 docker compose restart 写成 rebuild 证据。

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

项 值
OS Linux 7.0.0-31-generic
Go 1.27.1
分支 / worktree refactor/document-reliability-pilot / .worktrees/refactor-document-reliability-pilot
实现基线 dev@a8f9451 → c754f77(另含本报告前的 fix(docflow) 竞态修复)
Unit / stub go test -short ./...(未设置 TEST_DATABASE_URL)
PostgreSQL 隔离库 agent_rel_itest(shuimu-system-pg-test:5434),测完 DROP DATABASE;禁止 agent_system_dev/test/main
目标包 race ./internal/app/uow ./internal/app/docflow ./internal/docquery ./internal/archtest
前端 npx tsx --test src/lib/controlledDocHydrate.test.ts(17 passed)
真实 PI / 浏览器 / rebuild 未执行。集成槽 idle;CURRENT 禁止 M1 未签字 rebuild;:8080 仍是治理鉴权旧镜像,不能当本分支证据
证据 .doc/test-reports/assets/2026-09-14-document-reliability-pilot/

四、 预期结果 (Expected Results)

栏 期望
Unit / stub 全绿;arch-check --mode warn 过门;characterization 同 ETag 一赢、approve/reject 唯一终态
PG 事务与并发 U2 故障注入绿;同 ETag 双会话 HumanEdit 仅一赢;head revision=1
故障注入 第二属主失败 / staging 失败 / commit 失败零行;40001 整事务重跑一条结果
真实 PI 本分支容器内真实 pi-agent 全链路。本轮不做
真实浏览器 项目 143 等价 hazard + 新建项目打开/刷新/重登正文 100%,404/409/projection-missing=0。本轮不做
restart/rebuild 占槽后 env-service.sh dev rebuild。本轮不做
跨用户负例 匿名/未知文档/授权拒绝 → docquery.ErrClosed,不泄露存在性

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

5.1 Unit / stub

  • 测试输入: go test -short ./...
  • 实际输出: 38 个有测试包 ok,无 FAIL。摘录:
ok  	chat-agent-system/internal/app/docflow
ok  	chat-agent-system/internal/app/uow
ok  	chat-agent-system/internal/archtest
ok  	chat-agent-system/internal/docquery
ok  	chat-agent-system/internal/docrevision
ok  	chat-agent-system/internal/server	9.796s
  • 评价判定: PASS
  • 性能与耗时: internal/server 约 9.8s,其余亚秒到数秒。日志:assets/2026-09-14-document-reliability-pilot/go-test-short.txt

./scripts/arch-check.sh --mode warn → arch-check warn: production gate passed。--mode block 仍会因既有例外基线失败(U1 设计如此)。

5.2 PostgreSQL 事务与并发

  • 测试输入: 隔离库 TEST_DATABASE_URL → ./internal/app/uow、./internal/app/docflow、./internal/docquery;./internal/docrevision -run TestDocumentCommitConcurrencyPG
  • 实际输出:
ok  	chat-agent-system/internal/app/uow	0.065s
ok  	chat-agent-system/internal/app/docflow	0.003s
ok  	chat-agent-system/internal/docquery	0.003s
ok  	chat-agent-system/internal/docrevision	0.024s
  • 评价判定: PASS(1–2 会话级)。未跑 4 个独立 app 进程。
  • 性能与耗时: UoW 包 65ms;并发编辑 24ms。日志:go-test-pg-race.txt

5.3 故障注入

  • 测试输入: internal/app/uow PG 用例(第二属主失败、staging/outbox 失败、commit 失败、40001 重试、version/permission/digest 不重试)
  • 实际输出: ok chat-agent-system/internal/app/uow 0.065s
  • 评价判定: PASS
  • 性能与耗时: 与 5.2 同一次隔离库运行

5.4 真实 PI

  • 测试输入: 未切本分支容器,未跑真实 MiniMax-M2.7-highspeed 编制链路
  • 实际输出: 无
  • 评价判定: FAIL(未测) — 禁止用 stub 冒充终态
  • 性能与耗时: n/a

5.5 真实浏览器

  • 测试输入: 未对项目 143 / 新建项目做本分支页面打开、刷新、重登
  • 实际输出: 仅前端单测 17/17(hydrate treats projection missing as ledger content, not 404)
  • 评价判定: 单测 PASS;真实页面 FAIL(未测)
  • 性能与耗时: hydrate 套件 149ms

5.6 restart / rebuild

  • 测试输入: 未占集成槽,未执行 ./scripts/env-service.sh dev rebuild
  • 实际输出: 无。:8080 仍为既有 dev 镜像(治理鉴权 G5),不得当作本分支部署证据
  • 评价判定: FAIL(未测)
  • 性能与耗时: n/a

5.7 跨用户负例

  • 测试输入: TestGetFailClosed(匿名、Authorize 拒绝、未知 doc_id);TestReauthDeniesWrongAuthor;TestBatchGetLimitsAndCrossProject(101 条 / 跨项目)
  • 实际输出: 均失败关闭;未知文档与拒绝同一 ErrClosed
  • 评价判定: 服务端单测 PASS。HTTP 跨登录浏览器负例 未测
  • 性能与耗时: 亚秒

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

命令 结果
go vet ./... PASS(U4 提交前)
go test -short ./... PASS,38 ok
隔离库 go test ./internal/app/uow ./internal/app/docflow ./internal/docquery PASS
go test ./internal/docrevision -run TestDocumentCommitConcurrencyPG PASS
go test -race 目标包 PASS(修复 Commands.Auth 并发写入后)
arch-check --mode warn PASS
tsx --test controlledDocHydrate.test.ts 17 passed
全仓 go test(带 TEST_DATABASE_URL 且无 -short) 未作为本报告门禁;会把无关 workflow PG 和「5434=共享 test 口」拒绝用例搅在一起

-race 初跑曾在 run() 里给共享 Commands.Auth 赋值,判定为数据竞争;已改为只读 authorizer()。

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

U1–U4 代码已在实现分支落地,Unit/stub、隔离库事务/故障注入、目标包 race 与前端 hydrate 单测通过。用户可感知的主修复(ledger-first GET)没有真实 PI、真实浏览器、restart/rebuild 签字;1/2/4 进程一致性只验证到双会话。按计划停走门,不得用「部分通过」打开 U5–U12。

停止扩面