Why: the U5 template-catalog unit was delivered on the RDM working branch 0f97deb (inventory 414 files, 130 honest gaps, catalog 44 entries verified covering all 41 physical sources, project selection wiring tested); the RDM stacked branches await the RDM main delivery merge recorded as the next cross-repo step. Impact: task card only. Refs: PR #634.
15 KiB
feature/project-access-lifecycle 任务卡
任务主记录:<PR 链接,交付前填写>;状态:进行中;owner:weichen
基线与授权
-
权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)=
3e70d76a20 -
工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-project-access-lifecycle(worktree);分支:feature/project-access-lifecycle
-
分支类型:standalone;root_target:main;immediate_target:main;accepting_requirements:false
-
需求分流:verdict=NEW;selected_initiative=无;requirement_sha256=72ce129300a749b532d1d2806e247cdcd412bb19e927a50d5b16be827b398f5e;triage_receipt=/tmp/access-lifecycle-triage.json;receipt_sha256=399267dd5f0e1d3e1ba1bf1ccf52532b386535fef618d03985b46d36e8f6c800
-
授权与交付终点:按计划 docs/superpowers/plans/2026-10-19-1440-feat-project-access-lifecycle-plan.md 实施 U1–U6:角色权限收窄为单一项目访问布尔(含 R13 门禁修正与旧数据兼容归一)、creator 管理权威、成员历史与只读移除、项目/成员工作状态、固定模板库、界面呈现。终点:L1 分支经组合验证与 CI 后合入 main;不含部署、生产数据迁移、发布/打标与线上权限改写(计划 Verification Contract 明确排除)。
-
交付模式:goal-first(目标、范围和交付终点一次确认;范围内连续推进)
-
实施执行:agent-per-unit(配置:AGENT-EXECUTION.md)
-
合入执行:agent(已授权交付范围内,Review 通过、冲突解决且当前 HEAD 的 CI 通过后合入)
-
人工决策点:U3 实施前须确认「移除成员后的历史可见范围」(计划 Deferred Planning Questions,当前按 KTD6 保守默认);其余按既有边界
-
流程依据:仓库根目录 policy/delivery.md(归档后仍按仓库根目录定位)
-
交付模式:goal-first(目标、范围和交付终点一次确认;范围内连续推进)
-
实施执行:agent-per-unit(配置:AGENT-EXECUTION.md)
-
合入执行:agent(已授权交付范围内,Review 通过、冲突解决且当前 HEAD 的 CI 通过后合入)
-
人工决策点:仅限目标/范围/验收变更、重大取舍、高后果操作或无法自动判定的业务验收
-
当前阶段:需求拆解;当前增量:I1(待定义)
-
流程依据:仓库根目录 policy/delivery.md(归档后仍按仓库根目录定位)
章程(charter)
用途与目标:按计划实现「项目访问与生命周期管理」——角色配置收窄为单一「项目访问」布尔(旧 allowed/capAllowed 按原有效结果 allowed&&capAllowed 兼容归一,写时双写两列);角色管理者凭 system.roles.manage 即可配置该权限(R13,系统授权与平台上限仍由 system.permissions.manage 保护);系统管理员不再默认绕过项目创建检查;项目管理 = 有效项目访问 + 精确 creator 身份;成员/项目工作状态(active/suspended/removed、active/closed)可逆且在每个执行边界重验;固定模板库全量入册、按需实例化;不含文档职责分配。
接纳范围:计划 R1–R13;单元 U1–U6(U1 角色收窄+门禁修正;U2 creator 管理权威;U3 成员历史与只读移除;U4 工作状态;U5 模板库;U6 界面呈现);AE1–AE11。
非目标:文档职责分配的新增/接线;归档/恢复行为变更;项目转移创建者;项目删除;全局同名唯一性变更;部署、生产迁移、发布/打标、线上权限改写;私人内容对系统管理员开放。
分级测试策略:单元→L2:worker 自检 + host 最小直接检查(make test-affected)+ 全新会话独立 Review;轻量 CI。L1→main:task-sync + 完整组合验证 + 完整 CI(test/test-pg/svc-realcombo)+ 三段证据 + 独立 Review。
验收条件:计划 Success Criteria 全部成立;AE1–AE11 在真实组合通过;Definition of Done 逐项满足(不含部署项)。
追加领域规则:
- 角色授权判定只消费规范化后的项目访问布尔;旧 system/user 行对角色授权无效且不得出现在角色能力中。
- system.grants 与平台上限写入门禁保持 system.permissions.manage,不得因 R13 放宽。
- 创建者身份只能来自服务端认证与不可变 createdBy;任何 owner 标签、调用方字段、RDM 域管理员、系统管理员都不得绕过。
- 成员移除/停用与项目关闭在每个副作用边界重验;移除历史保留且可审计。
生命周期:建立即开本 PR(base main,[WIP])作分流发现;子任务按登记推进;最终一次性合入 main 后归档回收。
关联方向与规划:主记录 docs/superpowers/plans/2026-10-19-1440-feat-project-access-lifecycle-plan.md(本分支提交);关联 #628(其角色模型由本计划取代,衔接由 L1 owner 处理)。
子任务登记
| 子任务分支 | 必需 | 状态 | PR | 单元 | 范围摘要 |
|---|---|---|---|---|---|
| feature/project-access-lifecycle-u1-role-project-access | 是 | 已登记,待派发 | — | U1 | Backend catalog/service/role_policy/migrate/roles.go + Frontend rolePermissions.ts/RolePermissionsPanel.tsx:单一项目访问布尔、R13 门禁拆分、旧数据归一;R1/R2/R9/R11/R13 |
| feature/project-access-lifecycle-u2-creator-management | 是 | 待启动(依赖 U1) | — | U2 | RDM projects_api/system_projects/perms:有效项目访问+精确 creator 的管理权威 |
| feature/project-access-lifecycle-u3-member-history | 是 | 待启动(依赖 U2;实施前须确认历史可见范围) | — | U3 | RDM members/projects_api/system_projects/private_doc_views + Backend server.go:移除/停用即时停工、只读历史 |
| feature/project-access-lifecycle-u4-work-states | 是 | 待启动(依赖 U2/U3) | — | U4 | 项目 active/closed 与成员 active/suspended 状态、迁移与全边界重验 |
| feature/project-access-lifecycle-u5-template-catalog | 是 | 已交付待合入(RDM 分支 @ 0f97deb 已推送:inventory.json 414 文件全量盘点、130 项差距诚实列出、catalog 44 条已核验覆盖、项目选用接线测试;rdmapp 全量绿) | — | U5 | RDM 模板清单刷新(44 项 DHF+)、目录连接项目浏览/选择、来源/版本溯源 |
| feature/project-access-lifecycle-u6-ui-presentation | 是 | 待启动(依赖 U1–U5 合同) | — | U6 | Frontend 角色/成员/项目/模板界面呈现与只读态 |
Agent 实施收据
路由与 fail-stop 规则见根目录 AGENT-EXECUTION.md 与 policy/delivery.md;每次尝试一行,原始日志留在源码外收据路径。
| 单元 ID | 预期范围 | 配置摘要 | 角色 | 候选顺序 | attempt | CLI/模型 | 终态 | transport | fallback | 源码外收据路径 |
|---|---|---|---|---|---|---|---|---|---|---|
| 待定义 | — | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | — |
| pal-u6 Frontend | 项目工作状态控制(close/reopen/suspend/reactivate 命令消费)+ 模板浏览(rdm.docs.templates/instantiate)+ 状态只读呈现 | AGENT-EXECUTION digest | implementation | cursor(--model auto 经 Dev dm)→… | 1 | cursor(session not-observable) | success | Frontend 分支 581b25d(已推送) | never | /tmp/pal-u6-run.json |
关联方向与规划
- 适用状态:待核对(无适用规划时说明原因)
- 主记录路径/版本:待核对(路径按仓库根目录定位,归档后不变;只引用唯一正文)
- 对应里程碑:待核对
需求分析
| ID | 描述 | 项目符合度及依据 | 优先级 | 验收条件 | 依赖 | 结论 |
|---|---|---|---|---|---|---|
| R1 | 待填写 | 待评估 | 待定 | 待定义 | 待确认 | 待评审 |
方案与计划
- 方案引用:待填写(含对象版本)
- 实施计划引用:待填写(含增量与需求 ID)
- 测试计划引用:待填写(含需求 ID 与验收条件)
阶段记录
| 阶段 | 对象版本 | 状态 | 决策/执行者 | 时间 | 依据 |
|---|---|---|---|---|---|
| 需求拆解 | 待定 | 待执行 | — | — | — |
| 需求评估 | 待定 | 待执行 | — | — | — |
| 需求表确认 | 待定 | 待执行 | — | — | — |
| 方案设计 | 待定 | 待执行 | — | — | — |
| 实施计划 | 待定 | 待执行 | — | — | — |
| 实施与自检 | 待定 | 待执行 | — | — | — |
| 正式测试与验收 | 待定 | 待执行 | — | — | — |
| 代码 Review | 待定 | 待执行 | — | — | — |
| 合入 | 待定 | 待执行 | — | — | — |
| 合入核验与收口 | 待定 | 待执行 | — | — | — |
探索试验与迭代
| 增量/试验 | 假设 | 范围 | 判断和停止条件 | 授权/决策依据 | 结果 | 变更影响 | 需重审补测 |
|---|---|---|---|---|---|---|---|
| 待定义 | — | — | — | 待核对 | NOT_RUN | 待评估 | 待评估 |
同步记录
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|---|---|---|---|
| 启动 | 3e70d76a20 |
3e70d76a20 |
2026-10-19T14:56:17Z |
证据(Evidence)
| 时间(UTC) | 命令 | 被测HEAD | exit | 来源 | sha256(16) |
|---|
组合合并事项(L1 集成期)
- Backend 组合:本 L1 的 backend pin d3380de(基于 03646b5 线)与 Backend main 3f4b34a(#219 关联+解释)已分叉——L1 最终交付前需在 Backend 仓做一次组合合并(3f4b34a + d3380de 线),解决 U1 角色收窄与关联/解释工作的叠加,并以组合验证收口。
- 前端组合:本 L1 frontend pin 2c19439 包含 main(dab1605)与 U1 前端,无分叉。
- RDM:交付组合经 svc(RDM 分支 feature/project-access-lifecycle-u3-member-history @ 62c77ec,含 U2/U3a),后续 U4/U5 继续在其上堆叠。
交付调度
- 调度状态:未入队;调度记录:无
- entry_id:无;attempt_id:无;窗口执行者:无
- 固定候选:无(base/head、组件与相关配置引用实际尝试)
- 调度依据:policy/delivery.md#合入调度
- 固定后证据:源码外 RECEIPT;实际结果后按授权原样导入和闭合
结果与验证(完成后填写)
- 结果:
- 验证:<结论摘要 PASS/FAIL/SKIP/NOT_RUN 逐项;逐条证据由 make evidence 写入上方证据表>
- 影响与剩余项:
规划进展与下一步
- 本次推进/剩余:待核对(依据实际成果更新适用方案/规划)
- 首选下一任务:待核对(无适用规划、已完成或受阻时如实说明,不虚构任务)
- 推荐依据:待填写
- 前置条件/待确认:待核对
- 预期产物/验收条件:待定义
- 重复任务核对:待核对(已有/在途任务、PR 与规划记录)
- 启动授权:未授权(建议不自动启动新任务,仍须明确授权)
合入与清理
- Review 记录:NOT_RUN(审阅智能体/平台身份、base/head、结论、问题闭合及重放依据)
- 冲突记录:NOT_RUN(最新目标同步、冲突处置、组合兼容核验及复审/补测)
- CI 记录:NOT_RUN(当前 HEAD 完整 SHA、全部必需检查、运行链接、执行身份及 GATE 结果)
- 合入记录:NOT_RUN(交付授权范围、PR、被核验 HEAD、合入 SHA、目标分支及内容核验)
- 清理记录:NOT_RUN(授权依据、写者退出确认、worktree/分支/任务卡处置)
{
"summary_schema": 1,
"source": "SELF",
"timestamp": "2026-10-19T14:55:22.278761+00:00",
"command": "make precheck",
"exit_code": 0,
"cwd": "/home/weichen/projects/Agent-System-Dev",
"before_head": "3e70d76a20a6caf6f2edfd738a86f501c31064b6",
"after_head": "3e70d76a20a6caf6f2edfd738a86f501c31064b6",
"branch": "main",
"target_branch": "main",
"target_head": "3e70d76a20a6caf6f2edfd738a86f501c31064b6",
"root_target": "main",
"immediate_target": "main",
"before_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"after_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"output_tail": [
"make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev'",
"[repo] branch=main head=3e70d76a20",
"[remote] origin/main=3e70d76a20 ahead=0 behind=0",
"[tree] clean submodules_drift=0 uninit=0",
"[worktrees] linked=4",
"[recycle] merged un-recycled branches: feature/layered-python-env",
"[initiatives] local cards (not authoritative): none",
"[hooks] core.hooksPath=scripts/hooks(pre-commit/post-merge 实际接线)",
"[facts] policy/facts.md 6 条事实均在有效期内",
"[required-reading] core/baseline.md, workflows/delivery.md §1, policy/delivery.md",
"[R0] 3e70d76a20(完整:3e70d76a20a6caf6f2edfd738a86f501c31064b6)",
"[worktree] before-sync: recursive component checks passed",
"[verdict] READY — 保留本次 precheck receipt 后建任务工作区:PRECHECK_RECEIPT=/tmp/task-precheck.json make task-start NAME=feature/your-branch",
"make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev'"
],
"output_sha256": "d2baa6708f27afe1ed29f31d2f69bf866829477011cf2e0e12ebc4721dfa0ca4",
"receipt_sha256": "8172707bdb0edab18ee7d04aefb24cceedfbf32480538e5cde7f78aa647c3aa0",
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/8172707bdb0edab18ee7d04aefb24cceedfbf32480538e5cde7f78aa647c3aa0.json"
}
| 同步(记录前对象) | 2b7fdc39a1 | 7fe701c379 | 2026-10-19T16:33:44Z |
| 同步(记录前对象) | f07a53d86a | d25b2f3287 | 2026-10-20T01:16:00Z |
{
"summary_schema": 1,
"source": "SELF",
"timestamp": "2026-10-20T11:56:47.221717+00:00",
"command": "sh -c 'cd modules/frontend && npx vitest run test/pal-u6-ui.test.ts test/rdm-management.test.ts test/design-guard.test.ts test/role-permissions-ui.test.ts 2>&1 | tail -1 && npx tsc -b && echo TSC_OK'",
"exit_code": 0,
"cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-project-access-lifecycle",
"before_head": "93482789110f80b7bdfd587a7f88dc5fc09d923f",
"after_head": "93482789110f80b7bdfd587a7f88dc5fc09d923f",
"branch": "feature/project-access-lifecycle",
"target_branch": "main",
"target_head": "aa9f98d2e5b8ce36724f881752b0a95a353df987",
"root_target": "main",
"immediate_target": "main",
"before_tracked_diff_sha256": "50c6322bb37ebbfb2900beb621fb17f0059076485f8e82c8b21590a40e562b10",
"after_tracked_diff_sha256": "50c6322bb37ebbfb2900beb621fb17f0059076485f8e82c8b21590a40e562b10",
"output_tail": [
"",
"TSC_OK"
],
"output_sha256": "80606ea8f083ab10f6c81f1a2dceced6ba7715c4b1e06d3990489d1041c91463",
"receipt_sha256": "60009b5124f35d49a8a256a8ff1c57e0452cf4029dbc49cee71e55171e5e3876",
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/60009b5124f35d49a8a256a8ff1c57e0452cf4029dbc49cee71e55171e5e3876.json"
}