Rewrite the promote report so each Wave case records input, system output, analysis, and evaluation against FEATURE-MATRIX evidence. Co-authored-by: Cursor <cursoragent@cursor.com>
22 KiB
22 KiB
FEATURE-MATRIX 深度测试与 test 环境晋升 — 详细测试报告
报告日期: 2026-09-16
执行分支: feature/matrix-deep-test-promote-test → 合入 dev → 晋升 test
候选 Tag: rc-v1.0.0-beta.2
证据目录: .doc/test-reports/assets/2026-09-16-matrix-deep-test/
SSOT: FEATURE-MATRIX · CURRENT · gap-matrix
一、 测试背景 (Background)
在 production_ready=yes 且三环境 schema 已对齐 47 的前提下,需要证明:
- FEATURE-MATRIX 中已实现模块在当前代码上仍可运行(非仅历史报告);
- 本地
dev可安全晋升并部署到test(:8081),供后续人工/长期实测。
此前发布门禁 B1–B4 已签,但矩阵行多为「历史证据链接」。本轮以分层深度回归补当日可复现证据,并完成 rc-v1.0.0-beta.2 晋升。
刻意不做:完整 28min 三工作流 PI 重跑;Round20 全量 Playwright;纯软件项目自举(planned);合入 main;改写项目 143。
二、 测试目标 (Test Objectives)
| # | 目标 | 成功标准 |
|---|---|---|
| T1 | 门禁基线全绿 | go vet / go test -short / arch-check / npm / prod-bundle exit 0 |
| T2 | 矩阵模块定向包全绿 | intent/chat/squad/workflow/authz/doc*/agent/events 定向 ok |
| T3 | 治理 PG 集成可复现 | 隔离库上 TestWorkflowGovernance_PG_* + TestE2E_WorkflowGovernance_* PASS |
| T4 | live 关键路径可用 | health、真实闲聊、会话授权、版本冲突、终止 preview、demo 无污染 |
| T5 | 真实 PI runner 可用 | typed-result dual-track 四子测 PASS |
| T6 | test 可更新部署 | test 合入 dev、tag、rebuild、smoke + 轻量 live PASS,schema=47 |
三、 测试方案与环境 (Test Plan & Environment)
3.1 分层方案
Wave 1 自动化(短测 + 定向 + 隔离治理 PG)
Wave 2 live API(dev :8080,真实 pi-agent)
Wave 3 真实 PI 抽样(runner :18865;FAIL 才升格三链)
Wave 4 晋升 test + rebuild + smoke + live :8081
Wave 5 报告归档 + SSOT 注记修正
3.2 环境指纹
| 环境 | 端口 | schema | agent_backend | 备注 |
|---|---|---|---|---|
| shared KB | 5432 | — | — | 共享知识库 |
| dev | 8080 / events 8088 / pi 18865 | 47 | pi-agent | Wave 2/3 |
| test | 8081 / events 8089 / pi 18866 | 47 | pi-agent | Wave 4 |
| main | 8000 | 47 | pi-agent | 本轮只读对照,不晋升 |
健康探针样例(dev):
{"status":"ok","env":"dev","agent_backend":"pi-agent","schema_version":47,"schema_ready":true,"task_store_ready":true}
3.3 用例矩阵设计
| 矩阵模块 (mutex) | 验证手段 | 主要资产 |
|---|---|---|
| intent / intent-plan | short 定向包 | modules.txt |
| chat / ctxmgr | short + live 闲聊/window/guest | modules.txt + live-8080.json |
| squad | short | modules.txt |
| workflow | 治理 PG + live SavePlan/冲突/激活/preview | governance-pg-verbose.txt + live JSON |
| IAM / authz | live login / guest 403 / members | live JSON |
| docgov / docrevision | short 包(不重跑 Round20 UI) | modules.txt |
| web | npm + bundle + live 冲突恢复路径 | npm.txt / bundle.txt / live |
| pi-agent | short + node result-v1 + live typed-result | modules.txt / pi-sample-typed.txt |
| infra | health/ready/smoke | dev-health.json / test-env-smoke.txt |
| CI / E2E | 治理 PG 复跑 | governance-pg*.txt |
| events | short E0–E2 相关包 | modules.txt |
| 纯软件自举 | — | N/A(planned) |
四、 预期结果 (Expected Results)
| Wave | 预期 |
|---|---|
| W1 | 全部命令 exit 0;治理 PG ≥2 用例 PASS |
| W2 | live-8080.json overall=PASS;闲聊为真实模型回复;guest=SESSION_FORBIDDEN;冲突码=ERR_CONCURRENT_SWITCH;can_terminate=true |
| W3 | typed-result 四子测 PASS;不强制跑三工作流 PI |
| W4 | tag rc-v1.0.0-beta.2;:8081 schema=47;smoke SUCCESS;live-8081.json overall=PASS |
| 矩阵 | 已实现行全部 PASS 或 N/A;无 FAIL 阻挡晋升 |
五、 实际测试结果与判定 (Actual Results & Evaluation)
每个典型用例固定四段:测试输入 → 系统输出 → 分析 → 评价判定。耗时一并给出。
5.1 Wave 1 — 门禁基线与模块定向
用例 W1-01:go vet ./...
- 测试输入 (Input)
env -u TEST_DATABASE_URL -u DATA_DIR go vet ./... - 系统输出 (Actual Output)
- 无诊断输出;
vet_exit=0(见vet.txt)
- 无诊断输出;
- 分析 (Analysis)
- 清空
TEST_DATABASE_URL/DATA_DIR避免上一轮 PI 隔离库与工作区路径污染编译/静态检查上下文。 - 无 vet 告警说明当前合入点类型与可疑构造检查通过。
- 清空
- 评价判定 (Evaluation):PASS
- 耗时:秒级
用例 W1-02:go test -short ./...
- 测试输入 (Input)
env -u TEST_DATABASE_URL -u DATA_DIR -u KB_DB_PORT go test -short ./... - 系统输出 (Actual Output)(摘自
short.txt尾部)ok chat-agent-system/internal/server 10.668s ok chat-agent-system/internal/squad (cached) ... short_exit=0 - 分析 (Analysis)
- 全仓 short 回归覆盖业务主路径单元/httptest 层。
internal/server~10.7s 为最重包之一,仍在可接受范围内。- 历史踩坑:保留
TEST_DATABASE_URL时,resume 类 PG 用例会误连隔离库并因缺用户 FK 失败;本轮强制 unset 后稳定。
- 评价判定:PASS
- 耗时:约 92s(全量 short 墙钟)
用例 W1-03:架构边界门禁
- 测试输入 (Input)
./scripts/arch-check.sh --mode block - 系统输出 (Actual Output)(
arch-check.txt)arch-check mode=block boundaries=.../module-boundaries.yaml ok chat-agent-system/internal/archtest 0.138s arch-check block: production gate passed arch_exit=0 - 分析 (Analysis)
- block 模式失败即阻断晋升;本轮模块边界契约未回退。
- 评价判定:PASS
用例 W1-04:前端 npm test + 生产包扫描
- 测试输入 (Input)
cd web && npm test ./scripts/check-prod-bundle.sh - 系统输出 (Actual Output)
ℹ tests 376 ℹ pass 376 ℹ fail 0 Test Files 3 passed (3) # vitest Tests 32 passed (32) ✓ built in 7.44s PASS: prod bundle scan (.../web/dist) npm_exit=0 / bundle_exit=0 - 分析 (Analysis)
- tsx node:test 与 vitest 双轨均绿。
- prod bundle 扫描确认 demo seeds 默认关闭(与
DEMO-WEB-SEEDS门禁一致)。
- 评价判定:PASS
- 耗时:npm ~0.8s + build ~7.4s
用例 W1-05:FEATURE-MATRIX 模块定向包
- 测试输入 (Input)
按模块分组执行(见modules.txt),例如:go test -short -count=1 ./internal/intent ./internal/coordinator \ ./internal/app/intentflow ./internal/app ./internal/events ./internal/server \ -run 'TestSplitPlan|TestPlanProposal|...|IntentPlan|TestIntentRecognition|...' go test -short -count=1 ./internal/ctxmgr ./internal/app/chatflow ./internal/chat go test -short -count=1 ./internal/squad/... go test -short -count=1 ./internal/projectinstance ./internal/workflowdef \ ./internal/auth ./internal/authz ./internal/docgov ./internal/docrevision go test -short -count=1 ./internal/agent node --test deploy/pi-agent/result-v1.test.mjs go test -short -count=1 ./internal/events ./internal/app/docnotify \ ./internal/app/docadvance ./internal/app/docproject ./internal/app/docflow - 系统输出 (Actual Output)(摘要)
分组 结果 intent/intent-plan 6 包 ok, intent_exit=0chat 3 包 ok, chat_exit=0squad ok, squad_exit=0workflow/authz/doc* 6 包 ok, waf_exit=0pi-agent Go ok 3.459s pi-agent node result-v1 3 pass / 0 fail events E0–E2 5 包 ok, events_exit=0 - 分析 (Analysis)
- 定向包把 FEATURE-MATRIX 行映射到可执行命令,避免「只引用旧报告」。
- docrevision 本轮仅 short;完整 UI Round20 不在范围,但短测未暴露回归。
- 评价判定:PASS
用例 W1-06:治理 PG 集成(BUG-08 复跑)
- 测试输入 (Input)
# 隔离库(禁止 agent_system_dev/test/main) CREATE DATABASE agent_gov_matrix; export TEST_DATABASE_URL='postgres://app:***@127.0.0.1:5434/agent_gov_matrix?sslmode=disable' go test ./internal/server/ -run 'TestWorkflowGovernance_PG_|TestE2E_WorkflowGovernance' \ -timeout 20m -count=1 -v - 系统输出 (Actual Output)(
governance-pg-verbose.txt)=== RUN TestE2E_WorkflowGovernance_CompleteAndReplan goose: no migrations to run. current version: 47 --- PASS: TestE2E_WorkflowGovernance_CompleteAndReplan (0.31s) === RUN TestWorkflowGovernance_PG_ActivateApproveAdvanceChain --- PASS: TestWorkflowGovernance_PG_ActivateApproveAdvanceChain (0.35s) PASS ok chat-agent-system/internal/server 0.663s - 分析 (Analysis)
- 迁移链停在 47,与共享环境一致。
- KB DSN 空配置触发离线降级日志,不构成失败(治理链路不依赖共享 KB)。
- 覆盖「完成再规划」与「激活→批准→推进」两条治理主链。
- 评价判定:PASS
- 耗时:约 0.66s(库已迁完后复跑)
5.2 Wave 2 — live API 抽检(dev :8080)
会话元数据:项目 6367 / sess-p6367-u11 / overall=PASS(完整 JSON:live-8080.json)
用例 W2-01:健康与后端真实性
- 测试输入
GET /api/v1/health、GET /api/v1/ready - 系统输出
{"status":"ok","env":"dev","agent_backend":"pi-agent","schema_version":47,"schema_ready":true,"task_store_ready":true} - 分析
agent_backend=pi-agent排除 stub 冒充验收。- schema 47 与 goose 最新迁移一致。
- 评价判定:PASS(6ms)
用例 W2-02:登录与账号可用性
- 测试输入
尝试zhanggong/123456→ 失败后改用lizhuguan(owner)、wangzong(reviewer)、admin(approver)、guest - 系统输出
zhanggong:403「账号已被停用,禁止登录」- 有效账号:owner_id=11,reviewer_id=12,approver_id=9,guest_id=13
- 分析
- 停用账号 fail-closed,符合 IAM 预期。
- 活验账号切换已写入证据 note,避免误用历史脚本默认用户。
- 评价判定:PASS(账号策略正确;替代账号可用)
用例 W2-03:Demo 污染防护(项目列表)
- 测试输入
GET /api/v1/projects(Bearer owner) - 系统输出
- http=200;列表 count=7;
polluted=[](无 id 6001–6010)
- http=200;列表 count=7;
- 分析
- 与 goose 00046/00047
demo_retired+ 列表过滤一致;演示十项目未回流列表。
- 与 goose 00046/00047
- 评价判定:PASS
用例 W2-04:新建项目与交付物洁净
- 测试输入
POST /api/v1/projects {"name":"矩阵深度抽检-051808","code":"mtx-051808", "device_type":"超声软组织手术吸引设备",...} GET /api/v1/projects/6367/documents - 系统输出
- 创建:201,
project_id=6367 - 文档:http=200,
doc_count=0,mock_ids=[]
- 创建:201,
- 分析
- 新建项目无 mock/seed 交付物污染(
DEMO-WEB-SEEDS/DEMO-DB-SEED防线仍有效)。
- 新建项目无 mock/seed 交付物污染(
- 评价判定:PASS(create 20ms)
用例 W2-05:真实 PI 闲聊
- 测试输入
POST /api/v1/chat session_id=sess-p6367-u11 message=先记录一下:本项目是超声软组织吸引设备立项摸底,请用一两句话确认你已记住设备类型 - 系统输出
- http=200,耗时 8101ms
- 回复摘录:
好的,已记住——本项目是超声软组织吸引设备(即超声软组织手术吸引设备)的立项摸底。…
- 分析
- 延迟与语义均符合真实 MiniMax 链路,非 stub 瞬时模板。
- 设备类型被正确回指,满足「记忆确认」意图抽检。
- 评价判定:PASS
用例 W2-06:刷新窗口与分类一致性
- 测试输入
GET /api/v1/chat/messages/window?session_id=sess-p6367-u11&days=7
GET /api/v1/chat/categories?session_id=... - 系统输出
- window http=200,
window_msgs=2 - categories http=200
- window http=200,
- 分析
- 一轮 user+assistant 后窗口至少 2 条,符合刷新可读预期(CHAT-HISTORY-REFRESH 相关契约)。
- 评价判定:PASS(3ms)
用例 W2-07:双用户负例(guest)
- 测试输入
guest token 读取同一session_id的 window - 系统输出
- http=403,
error_code=SESSION_FORBIDDEN
- http=403,
- 分析
- 非会话 owner fail-closed;跨用户不可枚举他人对话。
- 评价判定:PASS
用例 W2-08:工作流规划保存
- 测试输入
拉取workflow-plan/default?workflow_key=main→ 填充三权职责 →
PUT .../workflow-plan(expected_plan_revision=0,expected_selection_version=1) - 系统输出
- http=200;
lifecycle_status=planning;workflow_plan_revision=1
- http=200;
- 分析
- 成员已 upsert 后 SavePlan 成功(避免历史
DUTY_ASSIGNEE_NOT_ACTIVE_MEMBER)。
- 成员已 upsert 后 SavePlan 成功(避免历史
- 评价判定:PASS(5ms)
用例 W2-09:版本冲突(乐观锁)
- 测试输入
使用正确plan_revision,但expected_selection_version=999再次 PUT - 系统输出
- http=409
- 嵌套业务码:
ERR_CONCURRENT_SWITCH(HTTP 信封外层可为VERSION_CONFLICT)
- 分析
- 前端已能解包嵌套业务码并映射
retry_after_switch;本用例验证后端冲突契约仍在。
- 前端已能解包嵌套业务码并映射
- 评价判定:PASS(1ms)
用例 W2-10:激活 + 终止 preview
- 测试输入
POST .../activation-preview→POST .../workflow-instances/activate→
GET /api/v1/workflow-instances/{id}/termination-preview - 系统输出
- activate http=200
- preview http=200;
instance_id=262;can_terminate=true - keys:
pending_documents,in_progress_task_runs,can_terminate,impact
- 分析
- 激活后实例可查询终止影响面,满足治理「先 preview 再终止」门禁。
- 评价判定:PASS
Wave 2 总评:PASS(12/12 子用例)
5.3 Wave 3 — 真实 PI 抽样
用例 W3-01:TestPiAgentTypedResult_LiveDualTrack
- 测试输入
Runner 健康(
RUN_PI_E2E=1 \ PI_AGENT_RUNNER_URL=http://127.0.0.1:18865 \ PI_AGENT_RUNNER_AUTH_TOKEN=<from container> \ DATA_DIR=.../data/dev \ go test ./internal/agent -run TestPiAgentTypedResult_LiveDualTrack -timeout 15m -v -count=1pi-runner-dev-health.json):
ok=true,model_id=MiniMax-M2.7-highspeed,has_token=true - 系统输出(
pi-sample-typed.txt)--- PASS: TestPiAgentTypedResult_LiveDualTrack (3.28s) --- PASS: .../failure_empty_prompt (0.00s) --- PASS: .../timeout (0.00s) --- PASS: .../cancel (0.30s) --- PASS: .../success (2.97s) pi_sample_exit=0 - 分析
- 覆盖成功路径与失败/超时/取消,证明 runner 鉴权、typed-result 编解码与取消语义可用。
- 抽样已 PASS,按计划不升格完整三工作流 PI E2E(节约 ~28min,风险可控)。
- 评价判定:PASS
- 耗时:3.28s
5.4 Wave 4 — 晋升并部署 test
用例 W4-01:Git 晋升与 Tag
- 测试输入
- 首次执行
./scripts/git-workflow-helper.sh promote-to-test rc-v1.0.0-beta.2 - 因
git pull --rebase origin test触发大规模 rebase 冲突 →git rebase --abort - 改为:
git checkout test && git merge --no-ff dev+git tag -a rc-v1.0.0-beta.2
- 首次执行
- 系统输出
- Tag 存在:
rc-v1.0.0-beta.2 test先端含 promote merge + 后续 closeout sync
- Tag 存在:
- 分析
- 本地
test与origin/test分叉时,rebase 会重放数百提交,属工具风险而非产品缺陷。 - 已加固
scripts/git-workflow-helper.sh:本地晋升默认不再pull --rebase origin test。
- 本地
- 评价判定:PASS(晋升目标达成;工具缺陷已修)
用例 W4-02:test 容器 rebuild / 健康
- 测试输入
./scripts/env-service.sh test rebuild # 中间误用 compose 导致 PG 端口绑到 5433 冲突后,改用 env-service start 恢复 curl -sf http://127.0.0.1:8081/api/v1/health curl -sf http://127.0.0.1:8081/api/v1/ready curl -sf http://127.0.0.1:8089/health curl -sf http://127.0.0.1:18866/health - 系统输出
- health/ready:
env=test,schema_version=47,agent_backend=pi-agent - events:
{"env":"test","owner":"events-1","status":"ok"} - pi-agent:
ok=true,modelMiniMax-M2.7-highspeed
- health/ready:
- 分析
.env中SYSTEM_DB_PUBLISH_PORT=5433会被裸docker compose覆盖 test 默认 5434;必须走env-service.sh test *。- schema 与 dev 对齐 47,具备同构实测条件。
- 评价判定:PASS
用例 W4-03:test-env-smoke.sh
- 测试输入
./scripts/test-env-smoke.sh(默认:8081+ pi:18866) - 系统输出(
test-env-smoke.txt)[PASS] test app SPA / [PASS] test app deep link /projects [PASS] pi-agent /health [SUCCESS] test env smoke passed - 分析
- SPA/深链/runner 冒烟通过,说明前端静态资源与路由回退可用。
- 评价判定:PASS
用例 W4-04:test 轻量 live(隔离库)
- 测试输入
- test 库初始仅
admin;经 SQL 注入mtx_owner/reviewer/approver(复用 admin 密码哈希) - admin 创建项目(具备
project:create)→ 成员 upsert → SavePlan → 冲突 PUT → Activate → termination-preview - 禁止读取
data/dev
- test 库初始仅
- 系统输出(
live-8081.json)步骤 HTTP / 结果 health schema=47,env=test create_project 201, project_id=3,code=tst-052432save_plan 200, workflow_plan_revision=1conflict 409, ERR_CONCURRENT_SWITCHactivate 200, lifecycle_status=active,active_workflow_key=main,instance id=1termination_preview 200, can_terminate=trueoverall PASS - 分析
- 项目 id=3 说明 test 业务库与 dev(6367)严格隔离。
- 冲突/激活/preview 契约与 dev 一致,证明晋升镜像行为正确。
- 副作用:
mtx_*为测试账号种子,可保留供后续实测。
- 评价判定:PASS
Wave 4 总评:PASS
5.5 FEATURE-MATRIX 行级评价汇总
| 模块 | 状态(矩阵) | 本轮验证 | 评价 |
|---|---|---|---|
| 意图识别 L1 | partial | W1 定向 | PASS(功能可用);U9–U12 仍为 backlog |
| 多意图持久计划 | partial | W1 定向 | PASS(U1–U8 短测);schema 注记已改为 47 |
| 对话 / ctxmgr | partial | W1+W2 | PASS |
| 智能体小队 | done | W1 | PASS |
| 工作流治理 | partial | W1-06+W2+W4 | PASS |
| 纯软件项目自举 | planned | — | N/A |
| IAM / 鉴权 | partial | W2/W4 | PASS(含停用账号与 guest 负例) |
| 文档治理 | done | W1 short | PASS(短测);未重跑 UI Round20 |
| 文档版本与修改认知 | partial | W1 short | PASS(短测);change-report 仍 fallback |
| 前端工作台 | partial | W1 npm + W2 冲突路径 | PASS |
| PI Runner | done | W1+W3 | PASS |
| 三环境运维 | done | W2/W4 health | PASS |
| CI / E2E | partial | W1-06 | PASS(治理 PG);-race flake 仍为基建债 |
| 模块解耦与事件 | partial | W1 events | PASS(短测) |
六、 自动化测试套件汇总 (Test Suite Execution)
| 命令 | 结果 | 证据 |
|---|---|---|
go vet ./... |
exit 0 | vet.txt |
go test -short ./... |
exit 0 | short.txt |
./scripts/arch-check.sh --mode block |
PASS | arch-check.txt |
cd web && npm test |
376 + 32 PASS | npm.txt |
./scripts/check-prod-bundle.sh |
PASS | bundle.txt |
| 模块定向套件 | 全组 exit 0 | modules.txt |
治理 PG(agent_gov_matrix) |
2 PASS | governance-pg-verbose.txt |
| PI typed-result live | 4/4 PASS | pi-sample-typed.txt |
./scripts/test-env-smoke.sh |
SUCCESS | test-env-smoke.txt |
live :8080 / :8081 |
overall PASS | live-8080.json / live-8081.json |
通过率(本轮门禁用例):Wave 1–4 关键用例 100% PASS;矩阵已实现行 无 FAIL;planned 行 N/A。
七、 测试结论与后续优化建议 (Conclusion & Next Steps)
7.1 结论
- 系统可正常运作:短测、模块定向、治理 PG、dev/test live 与真实 PI 抽样均 PASS。
- FEATURE-MATRIX 已实现能力在本轮证据下可判定为可用/未回归;planned 的「纯软件项目自举」不纳入本轮验收。
- test 服务端已更新部署:本地
test@rc-v1.0.0-beta.2,:8081schema=47,smoke + 轻量 live PASS。 - 总评价:达到晋升与深度回归目标,建议作为当前 test 实测基线。
7.2 风险与后续
| 项 | 说明 | 建议 |
|---|---|---|
| 完整三工作流 PI | 本轮仅抽样 | 夜间 RUN_PI_E2E=1 或发版前补跑 |
| Round20 UI | 未重跑 | 文档修订大改动时再跑 Playwright |
zhanggong 停用 |
dev 默认脚本用户失效 | 更新活验脚本默认账号 |
| test 缺种子用户 | 仅 admin | 晋升后补 demo/业务用户种子或文档化 SQL 种子步骤 |
| 远端同步 | 未 push | 用户授权后 ./scripts/git-push-dev.sh test 并推送 tag |
| promote 工具 | 已修默认 rebase | 继续避免对分叉 test 做 origin rebase |
7.3 关键产物索引
| 文件 | 内容 |
|---|---|
assets/.../live-8080.json |
dev 全链路抽检 |
assets/.../live-8081.json |
test 晋升后抽检 |
assets/.../pi-sample-typed.txt |
真实 PI 抽样 |
assets/.../governance-pg-verbose.txt |
治理 PG |
assets/.../short.txt / modules.txt / npm.txt |
自动化基线 |
assets/.../test-env-smoke.txt |
test 冒烟 |