Files
Agent-System/.doc/ops/short-term/2026-09-28-squad-commit-authority.md
T

4.2 KiB
Raw Blame History

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
internal
.doc
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。