Record the real-page and API matrix, release the workflow mutex, and point FEATURE-MATRIX / gap-matrix at the report. Co-authored-by: Cursor <cursoragent@cursor.com>
11 KiB
11 KiB
治理鉴权升级(职责-动作 + 未激活 202-blocked)测试报告
一、 测试背景 (Background)
Wave 5 已收口冻结态与 DutyMode,但 full 文档仍因创建者隐式全通行、未激活 run 仍可能拉起小队、initial_workflow_key 仍可能直通 active。本轮按已锁定矩阵落地动作-职责鉴权、未激活 202-blocked、关闭创建直通,并在真实 pi-agent 开发栈做页面 + API 负例验收。项目 143 只打开设置/文档做只读回归,未终止、未改规划。
二、 测试目标 (Test Objectives)
- 零治理新项目可普通对话;编制类文档任务 202 +
blocked_pending_governance,chat 出现固定治理提示,无 workspace / 小队。 - 一份 full + 其余 none 可激活;激活确认页提示「不纳入人工审批的文档激活后不可补配三职」。
- 负例:author/creator 不可审核或批准 full;reviewer 不可 run/submit full;none 无送审/审核/批准;创建者可对处于当前阶段的 none 触发生成。
POST /projects带initial_workflow_key仍planning、空active_workflow_key,目录仍挂上;旧切换 API 不能直切 active。- 项目 143 设置页仍 frozen,不点终止。
三、 测试方案与环境 (Test Plan & Environment)
| 项 | 值 |
|---|---|
| OS | Linux 7.0.0-31-generic |
| 浏览器 | mcr.microsoft.com/playwright:v1.63.0-noble,--network host --ipc host,BASE_URL=http://127.0.0.1:8080 |
| 服务 | 开发环境 :8080;rebuild 后 GET /api/v1/health → status=ok,env=dev,agent_backend=pi-agent,schema_version=33 |
| Agent | 真实 pi-agent(闲聊走对话后端;未激活编制走 202-blocked,不启小队) |
| 分支 / worktree | fix/governance-action-level-authz / .worktrees/fix-governance-action-level-authz |
| 合入 | 独立 merge worktree /tmp/as-dev-wf409-merge 对本地 dev --no-ff;编码 worktree 未执行 env-service.sh |
| 脚本 | web/e2e/governance-action-level-authz.spec.ts(RUN_UI_ACCEPTANCE=1);API 旁证 assets/.../g5_api_matrix.py |
| 末次页面矩阵 | 1 passed / 12.9s(用例墙钟 12.3s) |
| 本轮页面项目 | GOVAUTH-mu0z*(管理员新建立项 + 两名协作者;口令不入库) |
| API 旁证项目 | 6209 planning keyed create;6210 full+none 激活;6211 首阶段 none 生成 |
| 对照项目 | 143「对话协同会话」(只读) |
| 证据 | .doc/test-reports/assets/2026-09-14-governance-action-level-authz/screenshots/ 与 api-matrix.json |
未在编码 worktree 内执行 env-service.sh。
用例矩阵
| ID | 输入 | 期望 |
|---|---|---|
| UI-01 | 零治理创建 | 顶栏可见新项目,可配置工作流 |
| UI-02 | 「今天天气如何,先闲聊一句。」 | 用户消息 + 助手回复,不走任务 run |
| UI-03 | 「请编制用户初始需求收集表」 | 202 blocked、固定治理提示、「待激活工作流」 |
| UI-04 | 首份 full + 其余关审批 → 预览 | 冻结提示「不可补配三职」后激活成功 |
| UI-05 | 打开非编制文档 | 无送审/审核/批准(none 隐藏审批条) |
| UI-06 | 打开 143 设置 | frozen + 「确认终止当前实例」可见但未点击 |
| API-01 | POST /projects + initial_workflow_key=main |
201 planning,空 key;PUT /active-workflow 410 |
| API-02 | 未激活 POST /tasks/runs intake |
202 blocked_pending_governance,空 workspace |
| API-03 | 未激活 submit/review/approve | 403 WORKFLOW_NOT_ACTIVATED |
| API-04 | 激活一份 full + 其余 none | lifecycle=active |
| API-05 | 职责负例 + 创建者 run none | 403 DOC_DUTY_FORBIDDEN;none 生成 202 running(随即 cancel) |
| API-06 | GET /projects/143/settings |
live instance,can_edit_plan=false |
页面编制话术使用「请编制用户初始需求收集表」:产品里「帮我生成立项文档」会走私密草稿捷径,不会 POST /tasks/runs。
四、 预期结果 (Expected Results)
未激活:view/闲聊放行;run 建 blocked run 并写固定文案;审批流动作 4xx。激活后 full 只认对应职责,创建者不再越权;none 无审批按钮;当前阶段 none 允许创建者 run。创建带 key 不升 active。项目 143 保持运行中冻结。
五、 实际测试结果与判定 (Actual Results & Evaluation)
UI-01 零治理创建
- 测试输入 (Input):管理员开通两名协作者后立项
GOVAUTH-mu0z*。 - 实际输出 (Actual Output):顶栏「当前项目」为新项目;侧栏出现该会话。
- 评价判定 (Evaluation / Verdict):PASS
- 性能与耗时 (Duration & Latency):截图
01-zero-gov-created.png。
UI-02 普通对话
- 测试输入 (Input):
今天天气如何,先闲聊一句。 - 实际输出 (Actual Output):用户气泡与助手闲聊回复可见;未出现治理拦截条。
- 评价判定 (Evaluation / Verdict):PASS
- 性能与耗时 (Duration & Latency):截图
02-casual-chat.png。
UI-03 未激活编制 → 202 blocked
- 测试输入 (Input):
请编制用户初始需求收集表 - 实际输出 (Actual Output):助手气泡为「当前项目尚未激活工作流,文档任务不会启动。请先在设置中配置并激活至少一份纳入人工审批的文档。」;状态「待激活工作流」。
POST /api/v1/tasks/runs捕获 202 +blocked_pending_governance。 - 评价判定 (Evaluation / Verdict):PASS
- 性能与耗时 (Duration & Latency):截图
03-blocked-generate.png。
首轮页面跑曾因 chk_task_run_status 拒收新状态而 500 / NETWORK_ERROR。补 00033 后复测通过。
UI-04 激活一份 full + 其余 none
- 测试输入 (Input):配置工作流:首份纳入审批并填三职,其余关闭;校验并预览 → 确认激活。
- 实际输出 (Actual Output):预览含「不纳入人工审批的文档激活后不可补配三职」;激活后顶栏「运行中」。
- 评价判定 (Evaluation / Verdict):PASS
- 性能与耗时 (Duration & Latency):截图
04-activation-confirm.png、05-activated-full-none.png。
UI-05 按钮级职责门禁
- 测试输入 (Input):打开调研/法规等非编制文档。
- 实际输出 (Actual Output):无「提交送审」;截图见文档栏与动作条。
- 评价判定 (Evaluation / Verdict):PASS
- 性能与耗时 (Duration & Latency):截图
06-duty-gated-actions.png。
UI-06 项目 143 只读
- 测试输入 (Input):侧栏打开「对话协同会话」→「查看工作流设置」。
- 实际输出 (Actual Output):「当前工作流已冻结,只读查看」;「确认终止当前实例」可见,未点击。
- 评价判定 (Evaluation / Verdict):PASS
- 性能与耗时 (Duration & Latency):截图
07-project-143-readonly.png。
API-01 创建不再直通 active
- 测试输入 (Input):
POST /api/v1/projects{"name":"GOVAUTH-API-KEYED-*","initial_workflow_key":"main"};再PUT /active-workflow。 - 实际输出 (Actual Output):201,
id=6209,lifecycle=planning,active_workflow_key="",workflows HTTP 200;切换 410WORKFLOW_SWITCH_API_RETIRED。 - 评价判定 (Evaluation / Verdict):PASS
- 性能与耗时 (Duration & Latency):26ms。
API-02 / API-03 未激活 run / 审批
- 测试输入 (Input):对 6209 发 intake run;对
doc_proj6209_intake发 submit/review/approve。 - 实际输出 (Actual Output):run 202
run_1789375353946456022/blocked_pending_governance;GET 无 workspace。库:status=blocked_pending_governance,workspace_id空。审批三接口 403WORKFLOW_NOT_ACTIVATED。 - 评价判定 (Evaluation / Verdict):PASS
- 性能与耗时 (Duration & Latency):run 13ms。
API-04 / API-05 激活与职责负例
- 测试输入 (Input):6210 激活 intake=full、其余 none;审核人 run/submit;创建者 review/approve;再对 6211(intake=none + 后续 full)由创建者 run intake。
- 实际输出 (Actual Output):6210
lifecycle=active。审核人/创建者审批 403DOC_DUTY_FORBIDDEN。后期 none 的 submit 403DOC_TASK_NOT_IN_ACTIVE_STAGE(当前V0.1_triage)。6211 创建者 run none → 202running(随即 cancel,避免长 PI)。 - 评价判定 (Evaluation / Verdict):PASS
- 性能与耗时 (Duration & Latency):激活 461ms;负例合计 43ms。
API-06 项目 143
- 测试输入 (Input):
GET /api/v1/projects/143/settings - 实际输出 (Actual Output):
lifecycle=active,has_live_instance=true,can_edit_plan=false。未调用终止。 - 评价判定 (Evaluation / Verdict):PASS
- 性能与耗时 (Duration & Latency):7ms。
六、 自动化测试套件汇总 (Test Suite Execution)
在 feature worktree(合入前):
go vet ./...
go test -short ./...
go test -short -race ./internal/projectinstance ./internal/projectworkflow ./internal/server
cd web && npm test && npm run build
G5 复测(rebuild 后,2026-09-14):
$ curl -sf http://127.0.0.1:8080/api/v1/health
{"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}
$ go test -short -count=1 -timeout 180s ./internal/projectinstance ./internal/projectworkflow ./internal/server
ok chat-agent-system/internal/projectinstance 0.003s
ok chat-agent-system/internal/projectworkflow 0.002s
ok chat-agent-system/internal/server 9.957s
$ npx playwright test e2e/governance-action-level-authz.spec.ts --project=chromium
✓ 1 [chromium] › e2e/governance-action-level-authz.spec.ts:57:3 › governance action-level authz › real page matrix G5 (12.3s)
1 passed (12.9s)
$ python3 g5_api_matrix.py
wrote .../api-matrix.json verdict=PASS cases=6
通过率:页面 1/1;API 6/6;上述 Go 包 short 全绿。未用 stub 输出充当验收。
七、 测试结论与后续优化建议 (Conclusion & Next Steps)
结论:G1–G5 达到合入标准。动作级职责已落地;未激活编制保持 202 且不启小队;创建带 key 不再直通 active;项目 143 只读回归通过。
后续(不阻塞本任务):
- 不把 Wave 5 未跑的「none 文档真实 PI 审批长链路」算进本报告。
- 规划话术「帮我生成立项文档」仍走私密草稿捷径;若产品要它走 intake,需另开 templateMatch 任务。
GET /tasks/runs/{id}响应仍是 Go 导出字段 PascalCase,前端创建接口用 snake_case;建议后续统一 JSON tag。- 83 条 planning+残留 key 夹具只审计、未改库。