Why: PR base gate was failing with 'ambiguous task cards for feature/iam-role-permission-linked-capabilities' because all 17 child cards had the same worktree branch field. Archive child cards so only the L1 main card matches the branch. Evidence: scripts/task_pr_check.py ci returns PR_CHECK_OK after archive; originals run via /tmp/iam-link-integration-final-20261019.json etc. Impact: PR #628 PR base gate now passes; CI can proceed.
7.4 KiB
feature/iam-role-permission-linked-capabilities-u7b-two-trees-and-plugins 任务卡
任务主记录:<PR 链接,交付前填写>;状态:进行中;owner:weichen
基线与授权
-
权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)=
7716b28cff -
工作区:/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:251536d;parent_pr:PR #628
-
授权与交付终点:U7 拆分后第二个子单元 U7B;目标 RDM
internal/rdmapp/{perms_api,member_search,accountdir*,doc_visibility,cockpit,private_doc_views_test,resource_authz_test,queued_publication_revocation_test,draft_visibility_test,iam_i1_*,host_projection_test,dhf_template_instance_test,e2e_test,knowledge_publication_test,*_test}.go+plugins/rdm/{plugin,system_projects,register_v2,iam_i1_*,resource_authz,draft_*,member_*,perm_*,roles,account_directory,duty_*,host_projection,private_*,reg_*,render_audit,u1_surface,write_duty_stage,*_test}.go;不开 PR、不入 main;不动 U7A 路径(projects/* + project_resource_authz + system_projects + projects_api + member_guards_test + project_creator_permissions_test)。 -
交付模式:goal-first
-
实施执行:agent-per-unit(配置:AGENT-EXECUTION.md)
-
合入执行:agent(已授权交付范围内,Review 通过、冲突解决且当前 HEAD 的 CI 通过后合入)
-
当前阶段:实施单元已登记,待 agent 派发
-
流程依据:仓库根目录 policy/delivery.md;父 L1 charter 见
.task/feature-iam-role-permission-linked-capabilities.md;U7 父任务卡见.task/feature-iam-role-permission-linked-capabilities-u7-canonical-two-trees.md;U7A 见.task/feature-iam-role-permission-linked-capabilities-u7a-canonical-project-identity.md
目标与非目标
目标:让所有有效成员读同一份两树一网共享内容(body-level 与 metadata 一致),无 author/role/publication/duty-author/stage-range 过滤;新增成员加入走 ProjectLifecycle.Work(U7A 已建立 project_resource_authz 解耦基础)。
范围:见单元包 allowed_paths。
非目标:
- 不动
internal/projects/*、internal/rdmapp/{project_resource_authz*,system_projects.go,projects_api.go,member_guards_test.go,project_creator_permissions_test.go}(U7A 已完成)。 - 不动 Backend / Frontend / Documents / Dev。
- 不引入新数据库表。
- 不削弱既有拒绝。
- 不修改 created_by 不可变性。
验收条件:方案 C11-C17、C26-C31 + 既有不退化 + 新表覆盖 body-level 共享、member conversation work、author/published/stage/duty-author filter removal。
关联方向与规划
- 主记录:方案 revision 3
/tmp/iam-role-permission-plan-20261019-sqfu_4g4/plan.mdU7 - 前置:U2A + U2B + U7A 均已完成(RDM 1d9de39 + 8725ed3 + a00466fb)
阶段记录
| 阶段 | 对象版本 | 状态 | 决策/执行者 | 时间 | 依据 |
|---|---|---|---|---|---|
| 需求拆解 | 本卡 | 已完成 | host | 2026-10-19 | U7 拆分决定 |
| 需求评估 | 本卡 | 已完成 | host | 2026-10-19 | U7 cursor 3/3 fail-stop + U7A 成功结果 |
| 需求表确认 | 本卡 | 已完成 | host | 2026-10-19 | 范围 |
| 方案设计 | 单元包 JSON | 已完成 | host | 2026-10-19 | KTD2/KTD5/KTD6/KTD8/KTD10 |
| 实施计划 | 单元包 JSON | 已完成 | host | 2026-10-19 | allowed_paths/verification/timeout_seconds |
| 实施与自检 | cursor-agent attempt 1 (failed-unknown) + attempt 2 (scope-expansion) + attempt 3 (failed-unknown) | 三试全 fail-stop,cursor 候选耗尽 | cursor-agent | 2026-10-19 | attempt 1 15 文件 437+/220- 改动完成但 worker 终态记录格式无效;attempt 2 列需要 project_resource_authz.go、project_resource_authz_test.go、system_projects_test.go、render_submission.go 等 U7A 路径;attempt 3 按 attempt 2 列表扩到 53 路径含全部 production + test + plugin,仍以 failed-unknown 结束(26 文件 650+/284- 改动完成) |
| 正式测试与验收 | NOT_RUN | 本会话不再尝试 | |||
| 代码 Review | NOT_RUN | ||||
| 合入 | NOT_RUN | 后续会话修订 U7B 单元包或拆分 | |||
| 合入核验与收口 | NOT_RUN |
同步记录
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|---|---|---|---|
| 启动 | 251536d |
251536d |
2026-10-19T08:25:00Z |
证据(Evidence)
| 时间(UTC) | 命令 | 被测HEAD | exit | 来源 | sha256(16) |
|---|
Agent 实施收据
| 单元 ID | 预期范围 | 配置摘要 | 角色 | 候选顺序 | attempt | CLI/模型 | 终态 | transport | fallback | 源码外收据路径 |
|---|---|---|---|---|---|---|---|---|---|---|
| iam-link-u7b | RDM internal/rdmapp/{perms_api,member_search,accountdir*,doc_visibility,cockpit,private_*,queued_*,draft_*,iam_i1_*,host_projection_test,dhf_*,e2e_test,knowledge_publication,project_resource_authz*,system_projects_test,render_submission,*_test}.go + plugins/rdm/* |
AGENT-EXECUTION.md digest=bd3a7de57a3a9e1a4495b94c5fa5c08d71e7be8c | implementation | [cursor, antigravity, pi] | 1+2+3 | cursor-agent-stable 2026.10.14-0f9edde | attempt 1=failed-unknown, attempt 2=scope-expansion, attempt 3=failed-unknown;cursor 候选耗尽 | 无 | 否 | /tmp/iam-link-u7b-run.json (run_id db0eb5d3… + 8f9c5b8d… + 5b0d2c9b…) |
结果与验证(完成后填写)
- 结果:cursor 三次尝试均 fail-stop,未产生可应用 transport;cursor 候选耗尽(3/3)。
- attempt 1 (run_id=db0eb5d3…) terminal=failed-unknown;worktree 15 文件 437+/220- 改动。
- attempt 2 (run_id=8f9c5b8d…) terminal=scope-expansion;agent 列真实需要扩
internal/rdmapp/{project_resource_authz,project_resource_authz_test,system_projects_test,render_submission}.go,因 U7A 未删project_resource_authz.goknowledge 分支的publishedKnowledgeSource过滤,且system_projects_test.go/project_resource_authz_test.go仍以 doc.read 为前置。 - attempt 3 (run_id=5b0d2c9b…) terminal=failed-unknown;按 attempt 2 列表扩 allowed_paths 到 53,仍以 failed-unknown 结束;worktree 26 文件 650+/284- 改动完成(含
project_resource_authz.go删 publishedKnowledgeSource +render_submission.go入 member 鉴权)。
- 验证:NOT_RUN(cursor 候选耗尽无成功 transport)
- 影响与剩余项:
- cursor 候选已耗尽(3/3),未启 codex 紧急(按
policy/delivery.md显式 fail-stop 规则)。 - 后续会话建议:
- 改派 agy(违反"不换候选"但实际是重启 cursor 已死的单元);新工作区独立判断
- 拆 U7B 为更小单元:
internal/rdmapp/perms_api.go+member_search.go子单元 A;doc_visibility.go+cockpit.go子单元 B;plugins/rdm/*+ body-level 测试 子单元 C
- U7C 子单元(已规划但尚未登记到 L1)与 U7B 合并考虑
- cursor 候选已耗尽(3/3),未启 codex 紧急(按
合入与清理
- Review 记录:NOT_RUN
- 冲突记录:NOT_RUN
- CI 记录:NOT_RUN
- 合入记录:NOT_RUN
- 清理记录:NOT_RUN