4.2 KiB
title, task_id, status, created, updated, owner, task_type, policy_revision, branch, worktree, base_dev_sha, write_scope, mutex, review_state, integration_state, deployment, cleanup, remote_sync
| title | task_id | status | created | updated | owner | task_type | policy_revision | branch | worktree | base_dev_sha | write_scope | mutex | review_state | integration_state | deployment | cleanup | remote_sync | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 修复非编制人触发小队账本提交被拒 | squad-commit-authority-2026-09-28 | in_progress | 2026-09-28 | 2026-09-28 | Cursor | fix | AGENTS.md + agent-worktree-workflow @ 2026-09-21 | fix/squad-commit-authority-2026-09-28 | .worktrees/squad-commit-authority-2026-09-28 | 774df05998 |
|
bizdev+docflow | pending | pending | pending | pending | not_requested |
修复非编制人触发小队账本提交被拒
用户目标与授权
用户生成《用户初始需求收集表》时小队任务失败,诊断为 TASK_FAILED / uow: permission denied。授权:以编制人身份自动提交账本,并用 OnBehalfOf 记录实际触发用户;先用 dev 库核实身份后再改代码。
检索
- 检索词:
uow: permission denied、ErrPermissionDenied、文档版本账本/变更报告落盘失败、bd_intake、非编制。 - 命中 ISSUE-20260924-non-author-400-duty 与 LESSON-20260924-deny-only-submit:成员可以跑草稿,但下游门必须一起放行。本问题是账本
ActionCommit仍按触发者比对编制人,属于该教训的下游缺口,不是同一 HTTP 400。 - 命中 ISSUE-20260926-docgov-uow-deadlock:同为 uow 失败,机制是行锁自死锁,不适用。
- catalog overlap(mutex
bizdev+docflow)hard/soft 为空。登记时integrate-restore-admin-password-reset-2026-09-28与其 close 任务仍active且 scope 为.,队列已 completed、提交已是 dev 祖先,已task close --status done以释放仓库级写范围,未删除其 worktree。
ISSUE-20260928-squad-commit-authority
issue_id: ISSUE-20260928-squad-commit-authority issue_state: fixing severity: high owner: Cursor task_ids: [squad-commit-authority-2026-09-28] created: 2026-09-28 occurred_at: 2026-09-28 updated: 2026-09-28 recurrence_count: 0 evidence_basis: current lesson_ids: [LESSON-20260928-squad-commit-as-author]
事实与证据
预期:项目成员触发受控文档生成后,小队正文能写入版本账本。实际:任务 run_1790556318606671340、run_1790556736148378090(project 6022,task_key intake,user_id 74)失败,error_message=uow: permission denied。界面文案为「《用户初始需求收集表》未成功落盘」加上裸 uow: permission denied。
dev 库只读核实(2026-09-28,agent_system_dev):document_records.doc_proj6022_bd_intake 的 author_id=4(admin,项目 owner,document_duty=author);触发者 74 是成员 ceshi,project_role=viewer。项目创建者是 user 4。
根因与同类范围
已证实:finalizeSquadDeliverable 把 AutoCommitUserID 设为触发者 req.UserID。生产路径经 docflow.Commands.MaterializeAgent 用该 id 做 ActionCommit。dutyAuthorizer 在编制人与触发者都非 0 且不相等时返回 uow.ErrPermissionDenied。小队正文与质量门禁已通过,失败只发生在账本提交。
同类:API 直连已把该哨兵映射为 403。缺口只在小队自动提交。编制人自己触发、高风险 needs_confirmation、批准/驳回职责检查应保持不变。
修复思路与过程
选择以文档编制人作为自动提交身份,触发者写入已有 OnBehalfOf。不放宽 dutyAuthorizer,避免 viewer 直接获得编制人编辑权。高风险候选仍待编制人确认。
| 日期 | 动作 | 结果 | 下一步 |
|---|---|---|---|
| 2026-09-28 | dev 库核对 author 与 task_runs.user_id | 4 ≠ 74,两次失败均为 permission denied | 按编制人代理提交实现 |
| 2026-09-28 | squadCommitActor + 回归 |
内存单测通过;dev 真实重跑未做 | 合入 dev 后用非编制人重跑 |
验收与关闭
尚未关闭。原例待 dev 重跑;变体与正常路径见 TestExecuteTask_NonAuthorTriggerMaterializesAsAuthor、TestExecuteTask_AuthorTriggerDoesNotSetOnBehalfOf、TestExecuteTask_NonAuthorPassesDutyAuthorizer、TestDutyAuthorizerAllowsDocumentAuthorCommit。