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>
7.1 KiB
7.1 KiB
文档可靠性纵向试点(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/uowPG 用例(第二属主失败、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。
停止扩面