Files
Agent-System/.doc/test-reports/2026-09-14-governance-action-level-authz-test-report.md
T
weichenandCursor 05d2154d66 docs(test): archive governance action-level authz acceptance
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>
2026-09-14 08:46:45 +00:00

11 KiB
Raw Blame History

治理鉴权升级(职责-动作 + 未激活 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;切换 410 WORKFLOW_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 空。审批三接口 403 WORKFLOW_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。审核人/创建者审批 403 DOC_DUTY_FORBIDDEN。后期 none 的 submit 403 DOC_TASK_NOT_IN_ACTIVE_STAGE(当前 V0.1_triage)。6211 创建者 run none → 202 running(随即 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 夹具只审计、未改库。