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>
5.9 KiB
5.9 KiB
title, status, created, updated, owner, branch, worktree, mutex
| title | status | created | updated | owner | branch | worktree | mutex |
|---|---|---|---|---|---|---|---|
| 治理鉴权升级:职责-动作严格对应 + 未激活拦截 + 关闭创建直通 | done | 2026-09-14 | 2026-09-14 | implementer_cursor | fix/governance-action-level-authz | .worktrees/fix-governance-action-level-authz | workflow |
治理鉴权升级:职责-动作严格对应 + 未激活拦截 + 关闭创建直通
目标
采纳 MVP 治理规则评审 修正版原则:允许零治理创建与普通对话;禁止零治理激活与执行文档任务(审批流动作)。文档动作按职责鉴权,创建者不隐式越权,initial_workflow_key 不再直通 active。
决策记录(已定,不再开放)
- A(用户拍板 2026-09-14):
DutyModeNone文档 = 不走人工审批但可生成(创建者触发,维持已实施 D4);「不可发起任务」收窄为不可发起审批流动作(submit/review/approve)。 - B(按评审建议采纳):pre-activation 保留 202 契约——
POST /tasks/runs仍 202 创建 run,但置 blocked 状态、不启动小队、不取文档租约,chat 流内返回自然语言治理提示。 - C(按评审建议采纳):移除
isCreator对 full 文档的隐式全通行;view豁免阶段收窄(项目访问成员可查看);创建者保留:配置成员/职责 + none 文档生成触发。 - D(按评审建议采纳):关闭
initial_workflow_key直通 active(仅挂载目录);后端/前端 types 字段废弃标注;E2E legacy 用例语义更新;dev 库 81 个 planning+with_wf 异态项目只审计分类,不改库。
采纳版职责-动作矩阵
| 动作 | full 文档 | none 文档 | 未激活(gov==nil) |
|---|---|---|---|
| view | 项目访问成员 | 项目访问成员 | 项目访问成员 |
| run(首次生成/重生成) | 编制负责人 | 创建者(无审批链) | 202 + blocked 状态,chat 内提示,不启小队/不取租约 |
| edit/submit(编辑/提交审核) | 编制负责人 | 拒绝(无审批链) | 拒绝 |
| review(审核/退回) | 审核负责人 | 拒绝 | 拒绝 |
| approve(批准/拒绝批准) | 批准负责人 | 拒绝 | 拒绝 |
| 配置成员/文档职责 | 创建者 | 创建者 | 创建者(planning 期配置正是本阶段语义) |
退回后形成「待编制人修订」;审核人不得直接启动重编(由编制负责人发起修订)。
范围
internal/projectinstance/document_access.go(动作-职责映射、creator 例外移除、gov==nil 未激活拦截)internal/projectinstance/stage_access.go(view 豁免语义;docTaskDutyForUser拆分为按职责判定)internal/projectinstance/message_scope.go+ taskrun/chat handler(blocked 状态 + 自然语言提示)internal/projectworkflow/service.go(关闭initial_workflow_key直通)+types.go前后端字段废弃- 受影响单测重写(
access_governing_pg_test.gocreator 断言、TestCreateTaskRun_PreActivationAcceptedNot409语义细化)与 E2E legacy 用例
非目标
- 不改三权互斥与 DutyMode 校验(Wave 2 已完成)
- 不做运行中动态补配职责 / 按文档单独激活(冻结语义维持,激活页提示「留空文档不参与、不可补配」)
- 不做成员 role 枚举演进(MVP 维持创建者=项目管理员;role 演进留 backlog)
- 不改 dev 库存量数据(仅审计)
步骤
- 评审落盘 + 决策 A–D 收敛 + 本任务登记(Wave 5 已合入本地
dev@19f6df5,G0 已开工) - G1 后端:
CheckDocTaskAccess动作-职责映射 + creator 例外移除(保留 none 生成触发)+ gov==nil 未激活拦截(202 契约保留);重写受影响单测 - G2 关闭
initial_workflow_key直通 + 前后端字段废弃 + E2E legacy 用例更新 - G3 前端:chat 治理拦截自然语言提示、按钮级职责禁用、激活确认页冻结提示补强
- G4 dev 库 planning+with_wf 异态审计分类(只读报告,现测 83 条均为测试夹具)
- G5 集成验证 + 测试报告归档(新项目全链路:零治理创建→对话→配置→激活→职责动作负例)
验收标准
- full 文档 API 负例:author 不可 review/approve;reviewer 不可 run/edit/submit;approver 不可 run/edit/review;creator 不可任一审批动作(view 除外)
- none 文档:创建者可触发生成;submit/review/approve 全拒
- 未激活项目编制类输入:消息正常显示、run 202 且 blocked、无小队/租约、chat 内明确治理提示文案(页面用「请编制用户初始需求收集表」命中任务 API)
POST /projects带initial_workflow_key:不再置 active,工作流目录仍自动挂载go vet ./...、go test -short ./...、cd web && npm test && npm run build全绿- 异态审计报告与测试报告归档并回链
相关链接
- Research(评审与决策记录): 2026-09-14-mvp-governance-rules-review.md
- 前序 Remediation(已实施 Wave 1–4): 2026-09-14-workflow-plan-409-frozen-and-optional-duties-remediation.md
- 202 契约来源: 2026-09-13-workflow-access-chat-members-ui01-02.md
证据 / 备注
- Wave 5 已合入本地
dev@19f6df5;本任务 worktree 已从该dev创建,mutexworkflow进入in_progress。 - G4 只读复测:141 active / 209 planning;83 个 planning 带非空
active_workflow_key,全部为PROJ_MGR_*/TEST_PROJ_*夹具。见 audit。 - G5 验收:2026-09-14-governance-action-level-authz-test-report.md。