Record the real UI matrix, release the integration slot, and leave the unrun PI generation/approval path as an explicit residual. Co-authored-by: Cursor <cursoragent@cursor.com>
10 KiB
workflow-plan 409 冻结态 + 可选职责 测试报告
一、 测试背景 (Background)
已激活项目(现场样本:项目 143 / 侧栏「对话协同会话」)对 PUT /workflow-plan 正确返回 409 PLAN_FROZEN,但设置页仍渲染职责下拉与「校验并预览」,错误落在长表单视口外,表现为「点击无反应」。同时规划校验把「三职全空」一律当成非法,无法表达「启用文档但不纳入人工审批」。
本轮按整改方案 Wave 1–4 落地 typed error、frozen 只读页、DutyMode、门禁/权限/快照/预览统计与逐文档开关;Wave 5 在真实 pi-agent 开发栈上做页面矩阵验收。项目 143 只打开设置页做只读回归,未终止、未改规划。
二、 测试目标 (Test Objectives)
- 项目 143 打开即 frozen:无编辑控件、无 workflow-plan PUT、不点终止。
- 新项目 A:一份纳入人工审批 + 其余不纳入 → 保存、预览、激活成功;激活后再打开为 frozen。
- 新项目 B:只填编制 → 内联/sticky 拒绝「不能只指派部分职责」,不发出 PUT。
- 新项目 C:全部不纳入 → 预览拒绝「至少一份文档必须纳入人工审批」。
- 双标签:C 在另一页激活后,原标签陈旧草稿保存见冻结文案,草稿策略按 Wave 1 保留本地 plan。
- 非创建者成员打开 A:无「配置工作流」。
- 刷新后项目 143 仍 frozen。
- 质量门禁:相关 Go 短测与
web单测全过。
明确未宣称:本轮 未 用真实小队把 full 文档走完审批、也 未 对 none 文档做生成 + 版本账本 + 阶段不阻塞的长链路 PI 实测;该项留作后续,不以 stub 或 API 旁证冒充。
三、 测试方案与环境 (Test Plan & Environment)
| 项 | 值 |
|---|---|
| OS | Linux 7.0.0-31-generic |
| 浏览器 | mcr.microsoft.com/playwright:v1.63.0-noble,--network host,BASE_URL=http://127.0.0.1:8080 |
| 服务 | 开发环境 :8080;GET /api/v1/health → status=ok,env=dev,agent_backend=pi-agent,schema_version=32 |
| Agent | 真实 pi-agent(本轮页面矩阵未再触发长文档生成) |
| 分支 / worktree | fix/workflow-plan-409-frozen-and-optional-duties / .worktrees/fix-workflow-plan-409-frozen-and-optional-duties |
| 脚本 | web/e2e/workflow-plan-409-frozen-duties.spec.ts,RUN_UI_ACCEPTANCE=1 |
| 末次页面矩阵 | 1 passed / 11.4s(用例墙钟 10.7s) |
| 本轮项目(仅用户名/标题,无口令) | WP409-A-mu0x38jh / WP409-B-mu0x38jh / WP409-C-mu0x38jh;成员 wpb_* / wpc_* |
| 对照项目 | 143「对话协同会话」(只读) |
| 证据 | .doc/test-reports/assets/2026-09-14-workflow-plan-409-frozen-and-optional-duties/screenshots/ |
未在 worktree 内执行 env-service.sh。合入与 rebuild 在独立 dev worktree / 主仓 compose 完成,编码 worktree 只跑单测与 Playwright。
用例矩阵
| ID | 输入 | 期望 |
|---|---|---|
| UI-01 | 打开 143 设置 | frozen 说明 + 无下拉/预览/激活;无 PUT /143/ |
| UI-02 | A:首份开审批并填三职,其余关审批 | 预览可见不纳入统计,确认激活后「运行中」 |
| UI-03 | 再开 A 设置 | frozen,无「纳入人工审批」/「校验并预览」 |
| UI-04 | B:开审批后只选编制 | sticky「不能只指派部分职责」,PUT 计数不增加 |
| UI-05 | C:全部关审批后预览 | sticky「至少一份文档必须纳入人工审批才能激活工作流」 |
| UI-06 | 另一标签激活 C,原标签再预览 | 见「工作流已激活,规划已冻结」并转 frozen 只读 |
| UI-07 | 成员 B 进 A | 无「配置工作流」 |
| UI-08 | 刷新后开 143 | 仍 frozen |
四、 预期结果 (Expected Results)
- 三个合法配置态:关闭文档 / 启用但不纳入人工审批 / 启用并纳入人工审批。
- partial、强制空职责、零治理激活、非在任成员由客户端和/或服务端拒绝。
- 已激活项目
can_edit_plan=false或存在 live instance → 只读快照 + 独立受控终止区。 - 409
PLAN_FROZEN:保留本地草稿并fetchProjectSettings后切 frozen。
五、 实际测试结果与判定 (Actual Results & Evaluation)
UI-01 项目 143 只读冻结
- 测试输入 (Input):管理员登录,侧栏点「对话协同会话」,点「查看工作流设置」。
- 实际输出 (Actual Output):标题「当前工作流已冻结,只读查看」;工作流
main/ 版本 v2 / 阶段V0.1-triage;无「纳入人工审批」、无「校验并预览」、无「确认激活」;有受控终止区(文案含 pending documents / 将取消任务)。快照区显示「当前没有启用的文档任务。」(历史冻结 JSON 在本页未展开出文档行;未改 143)。监听未出现PUT含/143/。 - 评价判定 (Evaluation / Verdict):PASS。未点击「确认终止当前实例」。
- 性能与耗时 (Duration & Latency):含在 10.7s 总矩阵内;截图
01-project-143-frozen.png。
UI-02 / UI-03 新项目 A 一份 full + 其余 none
- 测试输入 (Input):立项
WP409-A-mu0x38jh,加入两名协作者;首份「用户初始需求收集表」勾选纳入人工审批,三职分别为系统管理员 / 王总监 / 测试工程师;其余文档开关关闭。 - 实际输出 (Actual Output):预览步出现「激活预览」且可见「不纳入」统计;确认后顶栏「商务对接流程 / 运行中」。再次打开设置为 frozen,无开关与预览按钮。
- 评价判定 (Evaluation / Verdict):PASS
- 性能与耗时 (Duration & Latency):截图
02-project-a-full-none.png、03-project-a-activated.png、03b-project-a-frozen.png。
UI-04 新项目 B 部分职责
- 测试输入 (Input):立项
WP409-B-mu0x38jh;勾选首份纳入人工审批,只选编制「系统管理员」,点「校验并预览」。 - 实际输出 (Actual Output):文档下内联「文档「用户初始需求收集表」不能只指派部分职责」;底部 sticky 同文案;该步
PUT /workflow-plan计数为 0。 - 评价判定 (Evaluation / Verdict):PASS
- 性能与耗时 (Duration & Latency):截图
04-project-b-partial.png。
UI-05 新项目 C 零治理激活
- 测试输入 (Input):立项
WP409-C-mu0x38jh(含协作者);全部「纳入人工审批」关闭后点「校验并预览」。 - 实际输出 (Actual Output):sticky「至少一份文档必须纳入人工审批才能激活工作流」。
- 评价判定 (Evaluation / Verdict):PASS
- 性能与耗时 (Duration & Latency):截图
05-project-c-no-governed.png。
UI-06 双标签 409 → frozen
- 测试输入 (Input):标签 2 登录后打开 C,将首份纳入审批并填满三职,预览并激活;标签 1 仍停在 C 的全空草稿上再点「校验并预览」。
- 实际输出 (Actual Output):标签 1 转为「当前工作流已冻结,只读查看」;sticky「工作流已激活,规划已冻结」;无编辑下拉。本地快照仍显示激活前全空三职(Wave 1:保留 draftPlan)。
- 评价判定 (Evaluation / Verdict):PASS
- 性能与耗时 (Duration & Latency):截图
06-dual-tab-frozen.png。
UI-07 非创建者成员
- 测试输入 (Input):
协作者B-mu0x38jh首次改密后进入工作台,点开WP409-A-mu0x38jh。 - 实际输出 (Actual Output):顶栏为「商务对接流程 / 运行中」,没有「配置工作流」按钮。成员侧栏仅见自己加入的项目。
- 评价判定 (Evaluation / Verdict):PASS(本步只断言配置入口;未再点审核/批准动作)。
- 性能与耗时 (Duration & Latency):截图
07-member-no-settings.png。
UI-08 刷新后 143
- 测试输入 (Input):管理员页
reload,再开「对话协同会话」设置。 - 实际输出 (Actual Output):仍为「当前工作流已冻结,只读查看」。
- 评价判定 (Evaluation / Verdict):PASS(页面刷新;未再做 app 容器 restart)。
- 性能与耗时 (Duration & Latency):截图
08-reload-frozen.png。
未执行:真实生成 / 审批 / 阶段不阻塞
- 测试输入 (Input):无(本轮 Playwright 未发送编制任务、未走审核/批准、未推进阶段)。
- 实际输出 (Actual Output):无页面证据。
- 评价判定 (Evaluation / Verdict):未测。门禁/权限/none 不阻塞的契约由 Wave 3 单测覆盖,不能代替真实 PI 页面。
- 性能与耗时 (Duration & Latency):—
六、 自动化测试套件汇总 (Test Suite Execution)
在 feature worktree:
go vet ./internal/projectinstance/... ./internal/server/... ./internal/workflow/runtime/...
go test -short ./...
# 全部包 ok / no test files,无 FAIL
cd web && npm test -- --run
# 361 passed + vitest 30 passed,fail 0
真实页面:
npx playwright test e2e/workflow-plan-409-frozen-duties.spec.ts --project=chromium
# 1 passed (11.4s)
Playwright 原始 output/report 按 .gitignore 不入库(playwright-output-* / playwright-report-*);可复核截图已入库。
七、 测试结论与后续优化建议 (Conclusion & Next Steps)
设置页与激活治理:达到合入标准(页面矩阵 PASS)。 项目 143 只读回归通过且未被改写/终止。新项目证明了 full+none 激活、partial 不发 PUT、零治理拒绝、双标签转 frozen、成员无配置入口、刷新后 frozen。
未达到计划中的「真实执行」全链路。 后续应单独立项:在已激活的 A 上用真实小队生成首份 full 文档并走审批,生成一份 none 文档确认入账本且无审核/批准、不阻塞阶段;必要时再做一次 dev app restart 后的 frozen/快照一致性。
观察(不修 143):143 frozen 快照区写「当前没有启用的文档任务」,与现场仍有受控文档并行存在。若要展示历史职责,需另开任务读冻结 JSON,禁止在本任务回写 143。
回链:
- short-term:2026-09-14-workflow-plan-409-frozen-and-optional-duties.md
- FEATURE-MATRIX:工作流治理行
- gap-matrix:
WORKFLOW-PLAN-FROZEN-OPTIONAL-DUTIES