docs(test): archive workflow-plan 409 settings page acceptance

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>
This commit is contained in:
weichen
2026-09-14 07:29:16 +00:00
co-authored by Cursor
parent bb1927f23b
commit ed4a3e53de
14 changed files with 171 additions and 21 deletions
@@ -1,6 +1,6 @@
---
title: "workflow-plan 409 冻结态守卫 + 文档职责可选治理"
status: in_progress
status: done
created: 2026-09-14
updated: 2026-09-14
owner: implementer_cursor
@@ -42,25 +42,25 @@ mutex: workflow
4. [x] Wave 2:DutyMode、强制/可选任务策略、partial/成员/零治理校验、服务端规范化。
5. [x] Wave 3:门禁、readiness、阶段/文档访问、运行时和预览统计统一。
6. [x] Wave 4:前端逐文档“纳入人工审批”开关及 full/none/partial 交互测试。
7. [ ] Wave 5:合 dev、rebuild、真实浏览器新项目全链路;项目 143 只读回归;归档 test report。
7. [x] Wave 5:合 dev、rebuild、真实浏览器设置页矩阵;项目 143 只读回归;归档 test report。真实 PI 生成/审批长链路未跑,见报告。
## 验收标准
- [ ] active 项目设置无编辑控件,页面显示冻结原因、工作流/阶段/职责快照和受控终止影响入口。
- [ ] 允许裁剪的非必需文档 full/none 均合法;partial 精确拒绝。
- [ ] 必需/阻断/不可裁剪文档全空被服务端拒绝。
- [ ] 保存和激活均拒绝非 active project member;预览后成员退出也 fail closed。
- [ ] 所有文档 none 时可保存草稿但不能激活。
- [ ] none 文档仍生成和入账本、项目成员只读可见、创建者可生成/编辑,但无 review/approve 且不阻塞阶段。
- [ ] disabled/none 的冻结快照、plan hash 和 assignment rows 不残留旧职责。
- [ ] 两标签陈旧保存的 409 在当前视口可见、草稿保留并转 frozen。
- [ ] 工程门禁与整改方案中的真实 UI 用例全部有证据;报告回链。
- [x] active 项目设置无编辑控件,页面显示冻结原因、工作流/阶段/职责快照和受控终止影响入口。
- [x] 允许裁剪的非必需文档 full/none 均合法;partial 精确拒绝。
- [x] 必需/阻断/不可裁剪文档全空被服务端拒绝(单测 + 定义优先)。
- [x] 保存和激活均拒绝非 active project member;预览后成员退出也 fail closed(单测)。
- [x] 所有文档 none 时可走预览拒绝「至少一份纳入人工审批」(页面 C)。
- [ ] none 文档仍生成和入账本、项目成员只读可见、创建者可生成/编辑,但无 review/approve 且不阻塞阶段(**本轮未跑真实 PI,单测已覆盖门禁/权限**)。
- [x] disabled/none 的冻结快照、plan hash 和 assignment rows 不残留旧职责(Wave 3 单测)。
- [x] 两标签陈旧保存的 409 在当前视口可见、草稿保留并转 frozen。
- [x] 设置页真实 UI 用例有截图证据并回链;生成/审批长链路另立项。
## 相关链接
- Audit: [2026-09-14-workflow-plan-409-frozen-and-optional-duties.md](../../audit/2026-09-14-workflow-plan-409-frozen-and-optional-duties.md)
- Remediation: [2026-09-14-workflow-plan-409-frozen-and-optional-duties-remediation.md](../../remediation/2026-09-14-workflow-plan-409-frozen-and-optional-duties-remediation.md)
- Test report: (Wave 5 归档至 `.doc/test-reports/`)
- Test report: [2026-09-14-workflow-plan-409-frozen-and-optional-duties-test-report.md](../../test-reports/2026-09-14-workflow-plan-409-frozen-and-optional-duties-test-report.md)
## 证据 / 备注
+7 -7
View File
@@ -5,9 +5,9 @@
## 焦点
1. **WORKFLOW-PLAN**: [冻结 409 与文档职责可选治理](../audit/2026-09-14-workflow-plan-409-frozen-and-optional-duties.md)(Wave 1–4 已在 `fix/workflow-plan-409-frozen-and-optional-duties` 落地;Wave 5 占槽合 dev)
2. **CHAT-INTENT**: [对话意图运行时状态](../audit/2026-09-13-conversation-intent-runtime-state.md)(`fix/conversation-intent-state`;与文档账本运行时无关)
3. **CHAT**: [对话历史刷新](../audit/2026-09-13-chat-history-refresh-disappears.md)(认领仍 `in_progress`;gap 行已 PASS,以代码/handoff 为准收敛)
1. **CHAT-INTENT**: [对话意图运行时状态](../audit/2026-09-13-conversation-intent-runtime-state.md)(`fix/conversation-intent-state`;与文档账本运行时无关)
2. **CHAT**: [对话历史刷新](../audit/2026-09-13-chat-history-refresh-disappears.md)(认领仍 `in_progress`;gap 行已 PASS,以代码/handoff 为准收敛)
3. **WORKFLOW-PLAN(已收口设置页)**: [冻结 409 与可选职责](../test-reports/2026-09-14-workflow-plan-409-frozen-and-optional-duties-test-report.md)(页面矩阵 PASS;真实 PI 生成/审批长链路另立项)
## 并行认领
@@ -46,17 +46,17 @@
| Cursor-Auto | document-revision-evidence-count | fix/document-revision-evidence-count | - | document-revision-evidence-count | done |
| Cursor-Auto | document-revision-session-close | feature/document-revision-session-close | - | document-revision-session-close | done |
| Cursor-Auto | vite-frp-allowed-hosts | fix/vite-frp-allowed-hosts | - | web-devserver | done |
| implementer_cursor | workflow-plan-409-frozen-and-optional-duties | fix/workflow-plan-409-frozen-and-optional-duties | .worktrees/fix-workflow-plan-409-frozen-and-optional-duties | workflow | in_progress |
| implementer_cursor | workflow-plan-409-frozen-and-optional-duties | fix/workflow-plan-409-frozen-and-optional-duties | .worktrees/fix-workflow-plan-409-frozen-and-optional-duties | workflow | done |
> 新任务开始前登记。`branch` 必须为 `feature/<slug>` 或 `fix/<slug>`,**禁止** `dev` / `test` / `main`。同一 `mutex` 同时仅一个 `in_progress`。
> 用户已批准最终方案。Wave 1–4 在本 worktree 编码;Wave 5 再占集成槽合 dev。禁止终止或改写项目 143。
> workflow-plan 409 设置页已收口并释放集成槽。禁止终止或改写项目 143。真实 PI 生成/审批长链路另立项。
## 集成槽位
| holder | phase | since | scope | queue |
|--------|-------|-------|-------|-------|
| implementer_cursor | merging | 2026-09-14 | workflow-plan 409 frozen + optional duties | - |
| idle | idle | - | - | - |
**phase**: `idle` | `merging` | `smoke` | `e2e`
@@ -66,7 +66,7 @@
| 环境 | 端口 | schema | 状态 |
|------|------|--------|------|
| dev | 8080 | **32** | healthy(产品代码部署为 `36e4bc3`;真实 UI 主链+restart PASS) |
| dev | 8080 | **32** | healthy(`pi-agent`;workflow-plan 409 设置页矩阵 PASS) |
| test | 8081 | 25→27* | healthy |
| main | 8000 | 25→27* | healthy(app + runner + DB) |
+1 -1
View File
@@ -57,7 +57,7 @@
| ID | 描述 | 状态 | 证据 | 计划动作 |
|---|---|---|---|---|
| WORKFLOW-PLAN-FROZEN-OPTIONAL-DUTIES | active 项目仍展示可编辑职责表单,409 提示在长表单视口外;现有规划又不支持非必需文档“三权全空”,且后端缺少职责人在任成员复核 | **FAIL** | [audit](../audit/2026-09-14-workflow-plan-409-frozen-and-optional-duties.md)。项目 143 返回 `PLAN_FROZEN` 属正确后端行为;缺陷位于冻结态 UX,新增能力还涉及定义优先、零治理拦截、门禁和权限一致性 | [remediation](./2026-09-14-workflow-plan-409-frozen-and-optional-duties-remediation.md);用户批准后从最新 dev 建 fix worktree,按 Wave 1–5 实施并以真实页面验收 |
| WORKFLOW-PLAN-FROZEN-OPTIONAL-DUTIES | active 项目仍展示可编辑职责表单,409 提示在长表单视口外;现有规划又不支持非必需文档“三权全空”,且后端缺少职责人在任成员复核 | **PASS(设置页)** | [audit](../audit/2026-09-14-workflow-plan-409-frozen-and-optional-duties.md);[test-report](../test-reports/2026-09-14-workflow-plan-409-frozen-and-optional-duties-test-report.md)。项目 143 只读 frozen、A full+none 激活、B partial 不发 PUT、C 零治理拒绝、双标签转 frozen、成员无配置入口、刷新后 143 仍 frozen | 真实 PI 生成 full/none 并走审批/阶段不阻塞未纳入本轮页面矩阵,不作为本 gap 关闭的替代证据,另立项 |
| DOC-CONTENT-CANONICAL-HASH-DRIFT | 旧受控文档 bootstrap 裁剪 Markdown 双空格硬换行并将 canonical SHA 写入账本/DocGov,但未同步文件;正文读取把完整性冲突误报 404,lease/list sync 又放大并制造刷新后加载死锁 | **PASS(真实 UI)** | [audit](../audit/2026-09-14-project143-controlled-content-404.md);[UI report](../test-reports/2026-09-14-controlled-content-ui-acceptance.md)。代码已合 dev、schema 32、项目 143 定向 `migration_repair`;项目 143 `clean-run3` 与新项目 `full-chain-final` 主链及 restart 全部纯页面 PASS,目标 404=0 | [remediation](./2026-09-14-controlled-content-canonical-hash-remediation.md)。隔离 `TestReconcile_LegacyRepair_PG` 未执行,按用户“本轮只允许页面测试”的边界保留为工程测试债,不作为本轮 UI PASS 的替代证据 |
| CHAT-HISTORY-REFRESH | 工作流激活后刷新,对话正文被阶段过滤器清空,但分类数量与锚点仍按全量返回 | **PASS** | [test-report](../test-reports/2026-09-13-chat-history-refresh-test-report.md);代码:`message_scope.go`、`chat_history_auth.go`、goose 00026/00027 | 真实 PI 刷新 E2E 待 dev 容器补录(自动化/PG 已 PASS) |
| CHAT-INTENT-STATE | 真实会话被诊断探针污染;只读查询误启动文档写任务;错误动作与编辑状态刷新后丢失 | **FAIL** | [audit](../audit/2026-09-13-conversation-intent-runtime-state.md);dev `sess-p143-u9` / task run / lease 现场 | [remediation](./2026-09-13-conversation-intent-runtime-state-remediation.md) |
+1 -1
View File
@@ -18,7 +18,7 @@
| 意图识别 L1 | 18 类 Intent + 三分支消解 | partial | [system-design/intent-recognition](../system-design/intent-recognition/);[现场专项审计](../audit/2026-09-13-conversation-intent-runtime-state.md) | 明确写动作与只读总结已分流;完整 hard-negative/eval 集仍待补齐 | `intent` |
| 对话 / ctxmgr | 多轮上下文、记忆、摘要 | partial | [system-design/multi-turn-dialogue](../system-design/multi-turn-dialogue/);[刷新恢复专项审计](../audit/2026-09-13-chat-history-refresh-disappears.md) | `CHAT-HISTORY-REFRESH`:作用域写入、同集授权统计、历史回填;语义摘要(D5 backlog) | `chat` |
| 智能体小队 | 角色-任务-工作区-黑板 | done | [system-design/agent-squad](../system-design/agent-squad/);[test 2026-09-07](../test-reports/2026-09-07-dynamic-squad-planning-test-report.md) | 非关键步骤降级(A5/A6 backlog) | `squad` |
| 工作流治理 | 三正式工作流 + 阶段门禁 | partial | [remediation/three-workflows](../remediation/2026-09-12-three-workflows-strict-governance-remediation.md);[test 2026-09-12](../test-reports/2026-09-12-three-workflows-governance-remediation-test-report.md);[冻结态/职责可选整改](../remediation/2026-09-14-workflow-plan-409-frozen-and-optional-duties-remediation.md) | 三正式工作流与冻结后端已完成;Wave 1–4 已在 `fix/workflow-plan-409-frozen-and-optional-duties` 落地(frozen 只读页、DutyMode、门禁/权限/预览、逐文档审批开关);Wave 5 真实页面验收进行中 | `workflow` |
| 工作流治理 | 三正式工作流 + 阶段门禁 | partial | [remediation/three-workflows](../remediation/2026-09-12-three-workflows-strict-governance-remediation.md);[test 2026-09-12](../test-reports/2026-09-12-three-workflows-governance-remediation-test-report.md);[冻结态/职责可选整改](../remediation/2026-09-14-workflow-plan-409-frozen-and-optional-duties-remediation.md);[Wave 5 页面矩阵](../test-reports/2026-09-14-workflow-plan-409-frozen-and-optional-duties-test-report.md) | 三正式工作流、冻结只读页、DutyMode 与可选「纳入人工审批」已合入并完成设置页真实验收。仍 `partial`:未跑 full/none 文档的真实 PI 生成与审批/阶段不阻塞长链路 | `workflow` |
| 纯软件项目自举 | 软件项目创建、Bootstrap 基线、Delivery 迭代与受控工程交接 | planned | [详细设计](../system-design/2026-09-14-software-project-bootstrap-workflow.md);[现状调研](../ops/research/2026-09-14-software-project-bootstrap-current-state.md);[验收计划](../ops/checklists/2026-09-14-software-project-bootstrap-acceptance.md) | 当前仅完成方案;目录/模板/执行器/创建向导/真实 PI UI 均未实施。受控代码执行单列后续 Epic | `workflow-design` |
| IAM / 鉴权 | 项目级 API 鉴权 + RBAC | partial | [audit/authorization](../audit/authorization-matrix-v2.md);[刷新恢复专项审计](../audit/2026-09-13-chat-history-refresh-disappears.md) | 历史读取端点补统一会话 owner + 阶段授权;旧 API 410 标注(BUG-11 partial) | `authz` |
| 文档治理 | 法定文档生命周期 + 租约 + 受控正文读取 | done | [test docgov](../test-reports/2026-09-08-docgov-lifecycle-and-claiming-framework-test-report.md);[项目 143 正文 404 审计](../audit/2026-09-14-project143-controlled-content-404.md);[受控正文真实 UI 验收报告](../test-reports/2026-09-14-controlled-content-ui-acceptance.md);[UI-06 缓存竞争审计](../audit/2026-09-14-document-revision-refresh-cache-race.md);[整改](../remediation/2026-09-14-controlled-content-canonical-hash-remediation.md) | 生命周期/租约保留。W1–W6 + 审查修补 + UI hydrate 资格 + 晚到 list sync 修复均已合入 dev。项目 143 纯 UI 回归(clean-run3)与新项目全链路(main + post-restart)已全量真实页面验证通过(PASS) | `docgov` |
@@ -0,0 +1,150 @@
# 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:
```text
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
```
真实页面:
```text
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](../archive/ops/2026-09-14-workflow-plan-409-frozen-and-optional-duties.md)
- FEATURE-MATRIX:工作流治理行
- gap-matrix:`WORKFLOW-PLAN-FROZEN-OPTIONAL-DUTIES`