Register U1 capability-association child task card
Why: enable U1 dispatch via agent-exec run; the child branch lives on the L1 initiative and will be merged back via transport apply, not its own PR. Evidence: parent L1 charter task card .task/feature-iam-role-permission-linked-capabilities.md (L1 PR #628, head=90317d0). Impact: child card registry updated; U1 implementation unit now schedulable per AGENT-EXECUTION.md (cursor → agy → pi, 3 attempts each + codex emergency). Refs: /tmp/iam-role-permission-plan-20261019-sqfu_4g4/plan.md revision 3 U1; PR #628.
This commit is contained in:
@@ -0,0 +1,136 @@
|
||||
# feature/iam-role-permission-linked-capabilities-u1-capability-association 任务卡
|
||||
|
||||
任务主记录:<PR 链接,交付前填写>;状态:进行中;owner:weichen
|
||||
|
||||
## 基线与授权
|
||||
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 7716b28cfff5200e7cfe9ec75aff5bcd71b234ed
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-iam-role-permission-linked-capabilities(worktree);分支:feature/iam-role-permission-linked-capabilities
|
||||
- 分支类型:child;initiative_id:feature-iam-role-permission-linked-capabilities;root_target:main;immediate_target:feature/iam-role-permission-linked-capabilities;accepting_requirements:false;parent_branch:feature/iam-role-permission-linked-capabilities;parent_head_sha:90317d02a746ea3cd25021561ef40e8cd7498963;parent_pr:PR #628
|
||||
|
||||
- 授权与交付终点:在 `feature/iam-role-permission-linked-capabilities` 之上按方案 U1 修改 Backend 与 RDM 公开能力文件,实现业务能力联动(R3/R6/R16, KTD1/KTD3/KTD4),交付到 L1 initiative 分支;不开 PR、不入 main。
|
||||
- 交付模式:goal-first(目标、范围和交付终点一次确认;范围内连续推进)
|
||||
- 实施执行:agent-per-unit(配置:AGENT-EXECUTION.md)
|
||||
- 合入执行:agent(已授权交付范围内,Review 通过、冲突解决且当前 HEAD 的 CI 通过后合入)
|
||||
- 人工决策点:仅限目标/范围/验收变更、重大取舍、高后果操作或无法自动判定的业务验收
|
||||
- 当前阶段:需求拆解;当前增量:U1 capability-association
|
||||
- 流程依据:仓库根目录 policy/delivery.md(归档后仍按仓库根目录定位);父 L1 charter 见 `.task/feature-iam-role-permission-linked-capabilities.md`
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
**目标**:实现"创建能力开启即联动获得本人项目管理资格"的业务能力关联规则;服务端原子展开、保存校验、HTTP/command 同一服务端关联规则;显式冲突整笔拒绝;关闭创建能力不破坏已有项目。
|
||||
|
||||
**范围**:
|
||||
- Backend `internal/authz/catalog/catalog.go`:仅在必要时新增 `project.work` 等用于基础协作判定的描述项;不引入与方案 §"Capability Association Map" 不一致的描述。
|
||||
- Backend `internal/store/role_policy.go`:扩展 `ReplaceRolePermissions`、`ReplaceSystemGrants`、`ImportRoleAuthority`、`ActivateRoleAuthorityImport` 使其在同一事务内做"业务能力关联"校验;提供导出给 RDM/Backend Host 的联动投影。
|
||||
- Backend `internal/authz/service.go`:扩展 `AuthorizeSystem` 与必要新方法(`EffectiveLinkedCapabilities` 等),使 actor 在持有 `project.create` 时自动获得本人项目管理资格所需能力;不再要求 actor 通过 `RolePermissionAllowed` 逐项补齐(保留显式拒绝与平台硬禁止)。
|
||||
- Backend `pkg/extension/`:在 `RolePolicySnapshot` 等公开 DTO 暴露联动结果、关联来源与差异。
|
||||
- RDM `internal/perms/role_provider.go`:把 RDM 端的创建能力判定迁移到消费 Backend 的公开 `RolePolicyProvider`/`SystemActionProvider`,不再自构;保留旧动作名通过映射消费。
|
||||
- 测试:复用既有 `internal/store/role_policy_test.go`、`internal/server/role_authorization_test.go`、`internal/authz/catalog/catalog_test.go`,增加新表(创建能力联动:仅 create=true ⇒ 完整管理;显式冲突/平台禁止/版本冲突 ⇒ 整笔拒绝;直接系统 grant 无职位 ⇒ 同源闭环;仅关闭未来创建不影响现存)。
|
||||
|
||||
**非目标**:
|
||||
- 不触动 U2 单一角色权威的 `AccountRoleOf/RoleActionOf` 切换分支(U2)。
|
||||
- 不触动 RDM `project_resource_authz.go` 中两树一网共享语义(U7)。
|
||||
- 不引入新数据库表;只在既有 `role_permissions` / `system_grants` 上做一致性校验与联动。
|
||||
- 不引入通用权限引擎;保留既有 `allowed/capAllowed` 二元语义。
|
||||
- 不引入前端改动(U4)。
|
||||
- 不部署、不写生产数据。
|
||||
|
||||
**验收条件**:方案 C06/C08/C09/C10 全部 PASS;既有 C01-C05、C22、C24-C25 在 U2/U7/U5 阶段完成,本单元独立验证上述子集与既有测试不退化。
|
||||
|
||||
## 关联方向与规划
|
||||
|
||||
- 适用状态:已核对
|
||||
- 主记录路径/版本:方案 revision 3 `/tmp/iam-role-permission-plan-20261019-sqfu_4g4/plan.md`(U1)
|
||||
- 对应里程碑:业务能力联动 + 单一角色权威(U1→U2 顺序)
|
||||
|
||||
## 需求分析
|
||||
|
||||
| ID | 描述 | 项目符合度及依据 | 优先级 | 验收条件 | 依赖 | 结论 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| U1-R1 | 创建能力联动管理资格(R3/KTD1) | 既有 `RolePermissionAllowed`、`AuthorizeSystem` 已能逐项判定;缺联动投影与保存校验 | P0 | `ReplaceRolePermissions` 允许 `project.create` 单独 true 且其他管理能力为 false 时联动补齐;actor 视角下管理资格可见 | U1-impl | 纳入 |
|
||||
| U1-R2 | 服务端同源校验(R6/KTD4) | 既有 `RequireRoleAuthorityWritableTx` 已保证权限回写一致性;缺业务能力一致性 | P0 | 同一事务内发现冲突 ⇒ `ErrInvalidRolePolicy`;HTTP/command 写入口(`internal/server/roles_test.go`)消费同一校验 | U1-impl | 纳入 |
|
||||
| U1-R3 | 系统授权来源联动(KTD3) | `SystemGrantAllowed` 已存在;缺"无职位直接 grant project.create"的联动 | P0 | 直接 `ReplaceSystemGrants` 注入 `project.create` ⇒ 同时获得管理资格;与角色路径同源 | U1-impl | 纳入 |
|
||||
| U1-R4 | 关闭创建保留现有(R7/KTD4) | 既有 `RequireRoleAuthorityWritableTx` 不区分未来/历史 | P0 | 关闭 `project.create` 不删除既有 `project.settings` 等行;显式记录差异 | U1-impl | 纳入 |
|
||||
| U1-R5 | 解释区分关联/禁止/失效(R9) | 现有 `Decision.Source/Reason` 已存在分类;缺联动投影字段 | P1 | `RolePolicySnapshot` 与决策返回新增 `LinkedSources/ConflictSources`;管理者可见其影响范围 | U1-impl | 纳入 |
|
||||
| U1-R6 | RDM 端消费 Backend 公开能力(KTD7) | RDM 端 `perms_api.go` 仍按旧 rdm.db 角色判定 | P0 | RDM 创建能力判定不再读 rdm.db 角色表;改用 Backend 公开 provider | U1-impl → U2 | 纳入 |
|
||||
|
||||
## 方案与计划
|
||||
|
||||
- 方案引用:方案 revision 3 §"Implementation Units > U1" + §"Capability Association Map" + KTD1/KTD3/KTD4
|
||||
- 实施计划引用:本卡 ## 需求分析(U1-R1..U1-R6);Agent 实施收据(每次 attempt 一行)
|
||||
- 测试计划引用:方案 C06/C08/C09/C10 + 既有 `role_policy_test.go`/`role_authorization_test.go`/`catalog_test.go`/`project_creator_permissions_test.go`/`role_provider_test.go` 不退化
|
||||
|
||||
## 阶段记录
|
||||
|
||||
| 阶段 | 对象版本 | 状态 | 决策/执行者 | 时间 | 依据 |
|
||||
|---|---|---|---|---|---|
|
||||
| 需求拆解 | 本卡 | 已完成 | host | 2026-10-19 | L1 charter U1 章程 + 方案 U1 |
|
||||
| 需求评估 | 本卡 | 已完成 | host | 2026-10-19 | 既有代码 F1/F4/F6 证据 |
|
||||
| 需求表确认 | 本卡 | 已完成 | host | 2026-10-19 | U1-R1..U1-R6 |
|
||||
| 方案设计 | 本卡 + 单元包 JSON | 已完成 | host | 2026-10-19 | KTD1/KTD3/KTD4 |
|
||||
| 实施计划 | 单元包 JSON | 已完成 | host | 2026-10-19 | allowed_paths/verification/timeout_seconds |
|
||||
| 实施与自检 | 待 worker | 待执行 | — | — | `scripts/agent-exec run` |
|
||||
| 正式测试与验收 | 待 worker 自检 + host 验证 | 待执行 | — | — | C06/C08/C09/C10 + 既有不退化 |
|
||||
| 代码 Review | 待独立会话 | 待执行 | — | — | fresh session, `--role review` |
|
||||
| 合入 | 待 host | 待执行 | — | — | `make task-sync` + transport apply |
|
||||
| 合入核验与收口 | 待 host | 待执行 | — | — | L1 PR #628 base gate |
|
||||
|
||||
## 探索试验与迭代
|
||||
|
||||
| 增量/试验 | 假设 | 范围 | 判断和停止条件 | 授权/决策依据 | 结果 | 变更影响 | 需重审补测 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 待定义 | — | — | — | 待核对 | NOT_RUN | 待评估 | 待评估 |
|
||||
|
||||
## 同步记录
|
||||
|
||||
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|
||||
|---|---|---|---|
|
||||
| 启动 | 90317d02a746ea3cd25021561ef40e8cd7498963 | 90317d02a746ea3cd25021561ef40e8cd7498963 | 2026-10-19T02:30:00Z |
|
||||
|
||||
## 证据(Evidence)
|
||||
|
||||
<!-- CMD="<命令>" make evidence 写入;手抄/转写输出视为无效证据(AGENTS.md 证据与验证门禁)。 -->
|
||||
| 时间(UTC) | 命令 | 被测HEAD | exit | 来源 | sha256(16) |
|
||||
|---|---|---|---|---|---|
|
||||
|
||||
## Agent 实施收据
|
||||
|
||||
路由与 fail-stop 规则见根目录 AGENT-EXECUTION.md 与 policy/delivery.md;每次尝试一行,原始日志留在源码外收据路径。
|
||||
|
||||
| 单元 ID | 预期范围 | 配置摘要 | 角色 | 候选顺序 | attempt | CLI/模型 | 终态 | transport | fallback | 源码外收据路径 |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| iam-link-u1 | Backend authz/catalog + role_policy + service + extension DTO + RDM role_provider | AGENT-EXECUTION.md digest=6c019595 | implementation | [cursor, antigravity, pi] | 1 | 待记录 | 待记录 | 待记录 | 否 | 待记录 |
|
||||
|
||||
## 交付调度
|
||||
|
||||
- 调度状态:未入队;调度记录:无
|
||||
- entry_id:无;attempt_id:无;窗口执行者:无
|
||||
- 固定候选:无
|
||||
- 调度依据:policy/delivery.md#合入调度
|
||||
|
||||
## 结果与验证(完成后填写)
|
||||
|
||||
- 结果:
|
||||
- 验证:PASS/FAIL/SKIP/NOT_RUN 逐项;C06/C08/C09/C10
|
||||
- 影响与剩余项:
|
||||
|
||||
## 规划进展与下一步
|
||||
|
||||
- 本次推进/剩余:实施单元未启动
|
||||
- 首选下一任务:U2 single-role-authority
|
||||
- 推荐依据:方案依赖链 U1→U2→U7→U3→U4→U5→U6
|
||||
- 前置条件/待确认:U1 终态为 completed(有效 transport 收据)且独立 Review 通过
|
||||
- 预期产物/验收条件:Backend 联动能力 + RDM 改消费 Backend 公开能力;既有测试不退化
|
||||
- 重复任务核对:未重复
|
||||
- 启动授权:已授权(用户回复"同意"对应本卡父 L1 charter)
|
||||
|
||||
## 合入与清理
|
||||
|
||||
- Review 记录:NOT_RUN
|
||||
- 冲突记录:NOT_RUN
|
||||
- CI 记录:NOT_RUN
|
||||
- 合入记录:NOT_RUN
|
||||
- 清理记录:NOT_RUN
|
||||
|
||||
<!-- Local receipt: SELF. Digests detect corruption; they do not authenticate a reviewer or CI. -->
|
||||
@@ -59,7 +59,7 @@
|
||||
|
||||
| 子任务分支 | 必需 | 状态 | PR | 单元 | 范围摘要 |
|
||||
|---|---|---|---|---|---|
|
||||
| feature/iam-role-permission-linked-capabilities-u1-capability-association | 是 | 待启动 | — | U1 | Backend `internal/authz/catalog`、`internal/store/role_policy`、公开扩展 DTO;RDM `internal/perms/role_provider.go` 与创建能力判定;KTD1/KTD3/KTD4;C06/C08/C09/C10 |
|
||||
| feature/iam-role-permission-linked-capabilities-u1-capability-association | 是 | 已登记卡片,待 agent 派发 | —(child 不开 PR) | U1 | Backend `internal/authz/catalog`、`internal/store/role_policy`、公开扩展 DTO;RDM `internal/perms/role_provider.go` 与创建能力判定;KTD1/KTD3/KTD4;C06/C08/C09/C10 |
|
||||
| feature/iam-role-permission-linked-capabilities-u2-single-role-authority | 是 | 待启动 | — | U2 | RDM `perms_api.go`、`system_projects.go`、`plugins/rdm/{system_projects,plugin}.go`;Backend `hostcaps.go`;KTD7;C22 |
|
||||
| feature/iam-role-permission-linked-capabilities-u7-canonical-two-trees | 是 | 待启动 | — | U7 | RDM `internal/projects/{projects,provisioning,projection_rename}.go`、`internal/rdmapp/{projects_api,system_projects,project_resource_authz}.go`;Backend `internal/server/{project_lifecycle,server}.go`;KTD2/KTD5/KTD6/KTD8/KTD10;C01-C05/C11-C17/C19-C21/C26-C31 |
|
||||
| feature/iam-role-permission-linked-capabilities-u3-capability-exposure | 是 | 待启动 | — | U3 | Backend/RDM 解释接口、HTTP/command 错误分类、创建/添加成员/对话失败原因;KTD1/KTD2/KTD6 |
|
||||
|
||||
Reference in New Issue
Block a user