From a088809dc843d67f3231944a087fde6df63f6ec6 Mon Sep 17 00:00:00 2001 From: weichen Date: Tue, 13 Oct 2026 09:08:51 +0000 Subject: [PATCH 01/10] Preserve the approved identity and permission plan Why: provide the approved contract for the I1 implementation without altering its accepted content. Evidence: SELF source artifact SHA-256 39b8e9a6e078dc509bd80118c1807ce6ed23e4466e5902b51f4bfa255d55c0a1; user approved the plan and authorized U1-U2. Impact: documentation checkpoint only; no production code or runtime changes. Refs: Agent-System-Dev feature/iam-i1-permission-boundaries --- ...026-10-13-identity-role-permission-plan.md | 574 ++++++++++++++++++ 1 file changed, 574 insertions(+) create mode 100644 docs/proposals/2026-10-13-identity-role-permission-plan.md diff --git a/docs/proposals/2026-10-13-identity-role-permission-plan.md b/docs/proposals/2026-10-13-identity-role-permission-plan.md new file mode 100644 index 0000000..6353cb8 --- /dev/null +++ b/docs/proposals/2026-10-13-identity-role-permission-plan.md @@ -0,0 +1,574 @@ +--- +title: 用户、职位角色与分层权限统一设计及实施计划 r1 +date: 2026-10-13 +type: refactor +execution: code +artifact_contract: ce-unified-plan/v1 +product_contract_source: legacy-requirements +--- + +# 用户、职位角色与分层权限统一设计及实施计划 r1 + +负责人:weichen;编制:Codex;更新时间:2026-10-13(北京时间)。 +确认状态:本轮两项用户裁定已确认;完整需求表、架构调整、迁移与实施计划待人工评审。 +推进状态:源码调研与方案编制;业务修改、业务测试、数据库迁移、部署及运行验收均为 NOT_RUN。 +本文是本次改造的唯一方案主记录;任务卡与索引引用本文,不复制推进状态。 + +## Goal Capsule + +让管理员按企业职位管理人员与能力,让创建者在自己的项目管理成员和文档责任,并让用户清楚知道自己能操作什么、为什么可以或不可以。 +复用现有账号、职位角色、项目成员、权限解释与整文审签能力,修正作用域混用,再补齐资料、搜索、单对象配置与批量矩阵。 +本轮交付终点为完整方案及分阶段计划,业务实施与运行操作需取得对应阶段授权。 + +用户已明确选择:系统管理员管理账号、角色与权限上限,访问他人项目业务内容需要明确授权;首期支持一人多职,每个项目明确选用该用户的哪些职位角色。 +这两项决定来自本轮对话,完整方案仍为待评审草案。 + +--- + +## Product Contract + +### Problem Frame + +当前存在四种概念:系统账号、企业职位、项目管理关系、文档编制/审核/批准职责。 +它们在部分命名、管理入口和授权函数中混用,导致项目设置权限能够进入全局管理、管理员自动获得业务访问、角色停用或换岗后权限不一致。 +改造的重点是统一权限语义和执行端判定,同时把配置权、作用域和具体资源责任说清楚。 + +“系统权限、角色权限、项目权限”是同一套权限模型的不同配置来源与作用范围。 +角色是能力模板,系统权限是系统范围的动作,项目权限是限定到一个项目的授权。 +文档三权进一步确定谁对某个版本履行哪项职责。 + +### Sources and Current Evidence + +权威顺序采用 RDM `docs/requirements/README.md`:最新用户指示 → 当前 U0/Q 裁定与权威需求正文 → 当前矩阵 → 未被取代的旧设计 → 原始会议。 +`.tmp` 原件作为设计来源保留,不回写历史原稿。 +本轮优先阅读 `.tmp/Discussion-Meetings/2026-10-08_12-24/Outputs/11-角色与权限管理方案.md`,并与 01/03/08 系列、RDM 当前需求和后续计划交叉核对。 + +| 对象 | 本轮读取的固定版本 | 证据边界 | +|---|---|---| +| Dev 源码基线 | `3fb8210f6495a78e70a67af3661bdfe9c00fb9de` | 本地源码与启动检查,SELF | +| Dev Backend | `dc736e339d01c59e658abc63c81909059bd6ea02` | 本地源码,SELF | +| Dev Frontend | `dcd2699933eff51c06193cac7beb15c3d20a01ff` | 本地源码,SELF | +| Documents / UI | `05c13a42b14d70f878cc8a51c543e018a7f7a663` / `0da2e3acd6c8ae8957825b64ddb54b250c0979c0` | 文档与设计约束 | +| RDM | `255f9cba0c9e6f981fbff66142be92532d5c5f2d` | 本地源码,SELF | + +RDM 自己的 Backend/Frontend pins 与 Dev 组合不同,不能把某一工作树的能力视为另一组合已部署的能力。 +命令、对象与脱敏输出由任务卡的 evidence 收据保存;本稿的源码事实不等于部署重现、GATE 通过或正式验收。 + +| 已核实的源码情况 | 对方案的影响 | 源码位置,路径以所列仓为根 | +|---|---|---| +| 已有独立职位角色、多账号可绑定同一角色;账号当前只能绑定一个角色 | 扩展已有模型,支持多职、描述和编辑 | RDM `internal/perms/roles.go` | +| 用户资料没有电话、邮箱、工号等;公开目录仅 owner+valid | 账号资料和受控目录必须有 Backend 公开契约 | Backend `internal/store/auth.go`、`pkg/extension/extension.go`、`internal/app/hostcaps.go` | +| 角色/全局上限/管理员移交复用 `project.settings` | 首批拆开系统动作与项目动作 | RDM `internal/rdmapp/perms_api.go` 中 `AuthorizeGlobal`、`roleAdminGate` | +| 域管理员和基座超管在多处自动读取项目、审计、导出、原件或草稿 | 同步修订所有业务读面,取消身份式业务放行 | RDM `perms_api.go`、`runtime.go`、`upload.go`、`draftproposal.go` | +| owner 跳过职位上限;角色停用回落内置 member;换岗后遗留 override 可跳过未配置动作的角色上限 | 采用完整授权链,覆盖创建者、停用与换岗负例 | RDM `perms_api.go` 中 `evalPerm`、`internal/perms/roles.go` | +| “权限矩阵”是单成员有效权限解释;角色页每次编辑一个动作 | 保留解释能力,补可编辑角色矩阵与成员矩阵 | Frontend `src/components/adminRdmSections.tsx` | +| 用户、角色、三权候选主要手输 owner/docId;入口依赖 isAdmin | 接受服务端能力与目录查询结果,使用稳定 ID 选择 | Frontend `adminSections.tsx`、`adminRdmSections.tsx`、`AdminZone.tsx` | +| 基座建项接口与 RDM 建项命令的门禁不同 | 统一产品入口;区分宿主项目与研发项目后封闭旁路 | Backend `internal/server/server.go`;RDM `plugins/rdm/plugin.go` | + +### Requirements + +需求编号仅用于本方案,不替换原有 UR/SR 编号。 + +**身份、职位与人员查找** + +| ID | 需求与可判定验收条件 | 来源 | +|---|---|---| +| R1 | 角色是独立职位对象,有稳定 ID、名称、可选描述、状态和版本;改名不改变人员身份或历史 | 本轮用户;SR-G7 | +| R2 | 同一职位可关联多人;一人可关联多个职位;项目只采用明确选定的有效绑定,新增职位不自动扩张既有项目 | 本轮用户裁定;当前概念模型 | +| R3 | 姓名、电话、邮箱、工号、部门与备注均可选;全部留空仍能建号;资料不成为登录凭证或授权主键 | 本轮用户 | +| R4 | 支持精确与模糊搜索、字段选择、状态/职位等过滤、分页与同名辨识;最终授权对象是稳定用户 ID | 本轮用户 | +| R5 | 系统管理者可维护账号资料;本人可编辑非授权资料;项目选人只获得必要目录投影,无权读取完整联系方式或凭证 | 本轮用户;隐私边界 | + +**系统与项目授权** + +| ID | 需求与可判定验收条件 | 来源 | +|---|---|---| +| R6 | 系统设置、用户管理、角色管理、策略管理与建项采用明确系统动作;项目权限编辑不能写入系统动作 | SR-G6/G7/G8;本轮用户 | +| R7 | 系统管理员无项目/资源授权时不能读取他人业务正文、原件、草稿、业务审计、导出、搜索命中或模型上下文 | 本轮管理员裁定;修订旧跨项目审计口径 | +| R8 | A 创建者不能凭 A 的管理权管理 B;创建事实固定,负责人接替采用明确委任记录 | SR-G9/G10 | +| R9 | 创建者在本项目管理成员、覆盖权限与分配三权;项目覆盖可覆盖角色默认,但不能突破平台和角色上限 | SR-G8/G9 | +| R10 | 多角色按完整授权路径合成;平台禁止、项目明确拒绝与资源限制不能被另一角色绕过 | 本轮多职裁定;SR-G2/G8 | +| R11 | 角色停用、解绑、换岗、上限收紧、账号停用和成员移除及时撤权;遗留覆盖不能复活旧权 | 当前源码缺口;SR-G8/N4 | +| R12 | 同一动作的 UI、HTTP、命令、工具、任务恢复与最终提交遵循同一服务端判定;未知或失败状态拒绝 | SR-G2;U0 D1 | + +**配置体验与文档职责** + +| ID | 需求与可判定验收条件 | 来源 | +|---|---|---| +| R13 | 单角色编辑与角色×权限矩阵是同一数据的两种视图,支持分组、精确/模糊搜索、过滤与批量草稿 | 本轮用户 | +| R14 | 单成员编辑与成员×权限矩阵共享草稿;显示继承/授予/拒绝、角色默认、上限、最终结果与原因 | 本轮用户;SR-G8 | +| R15 | 批量保存有具体差异、影响预览、版本冲突保护、原子提交和审计;隐藏行不丢草稿,不逐格即时落库 | 配置完整性与当前缺口 | +| R16 | 每份受控文档编制一人、批准一人、审核至少一人,三类人员互异;候选必须是有效成员并具备对应能力上限 | SR-C7/G9 | +| R17 | 职位能力只提供资格;实际编写、审核、批准同时检查具体职责、文档状态与冻结版本;管理权不代签 | SR-C7/C8;U0 D2/D5 | +| R18 | 私聊、私人原件与个人草稿保持私有;项目知识由明确提交/发布产生;受控文档按职责或明确授权读取 | SR-G11/G12;U0 D3 | +| R19 | 权限变化同步影响已开页面、旧卡、Surface、下载、检索、SSE 和后台任务;迟到事件不能恢复权限 | SR-G2/G11/N4;根 AGENTS.md | +| R20 | 保留用户/项目/角色稳定标识与历史;迁移输出旧→新差异,不把旧管理员全权转成永久业务授权 | 持久化与兼容要求 | + +### Confirmed Decisions and Scope + +管理员业务访问边界已经用户选择确认(session-settled: user-directed — chosen over 管理员自动获得全部项目业务访问: 业务访问需要明确授权;Governs R7)。 +首期多职及项目明确选用已经用户更正确认(session-settled: user-directed — chosen over 每人仅一个生效职位: 用户改为采用多职建议;Governs R2/R10)。 + +本次覆盖用户资料、职位模型、系统/项目授权、配置界面、文档职责与读取授权、Agent 同源执行、迁移及验收。 +飞书/SSO、组织树与岗位继承、全自动任命/签字、全量模板补齐、整个工作流引擎重建和外部权限服务采购不纳入本次。 +本次修订需要更新 RDM 权威需求与相关方案,但 `.tmp` 历史稿保留。 + +--- + +## Planning Contract + +### KTD1. 数据职责与统一入口 + +建议把通用账号资料、职位定义、用户—职位绑定、系统动作授权及平台/角色上限集中到 Backend 的通用身份与授权服务。 +RDM 负责项目成员、项目选用角色、项目覆盖、资源归属、阶段状态和文档三权,注册领域动作及资源策略;UI 和 Agent 消费同一公开服务。 +用户主身份沿用基座稳定 ID 与现有 owner 映射,不另建账号;RDM 历史 owner 标识保留。 + +这是对现行“专业角色主表在 RDM”的明确架构调整建议,须在方案阶段评审,不能借旧 U0 D1 当作已经批准。 +集中通用职位定义可以让账号管理、建项与项目业务共同消费一份授权事实,并避免两个角色台账同步漂移。 +RDM 专有的职责与状态规则仍留在 RDM,基座只知道注册动作、约束及判定协议。 +下游通过正式公开扩展及固定版本消费,禁止修改 pins 源码或导入 Backend internal。 + +主要备选:保留 RDM 角色主表并让基座经公开策略提供者查询。 +该路径减少角色数据搬迁,但系统管理动作会依赖领域插件及其可用性;若采用,必须冻结单一权威、插件缺失时拒绝策略和根管理恢复通道,不能再建第二套独立职位表。 +不推荐仅补 UI:它不能解决已经存在的服务端 scope 混用。 + +### KTD2. 概念模型 + +| 对象 | 核心字段/关系 | 权威 | +|---|---|---| +| User / Profile | 稳定 userId、owner 映射、账号有效态;可选姓名、电话、邮箱、工号、部门、备注;profileVersion | Backend | +| Role | roleId、名称、描述、状态、roleVersion、创建/变更主体 | Backend,拟迁移现有 RDM 角色 | +| UserRoleBinding | bindingId、userId、roleId、有效态、任命主体/时间、版本;支持多对多 | Backend | +| PermissionDescriptor | 稳定 actionId、中文名、说明、scope、资源类型、分组、条件、委派级别、风险与版本 | Backend 注册表,RDM 注册领域项 | +| RolePermission | roleId+actionId、默认 grant、cap、允许的资源范围;default 范围不得超 cap | Backend | +| SystemGrant | 明确系统动作授予与上限;受保护管理员/策略管理授权独立记录 | Backend | +| Project / Membership | 稳定 projectId、固定 createdBy、当前负责人委任;成员身份、明确选用的 bindingId、版本 | RDM | +| ProjectOverride | 项目+成员+动作的 inherit/allow/deny,以及资源范围收缩、版本 | RDM | +| ResourceGrant | 资源稳定 ID、类型、真实属主、项目、分类、明确接收者/职责、只读范围、撤销版本 | 资源 owner;统一公开判定 | +| DocumentDuty / Round | 文档职责、冻结正文/职责/策略版本、轮次与真实操作者 | RDM | + +这些是逻辑模型,具体表名与迁移编号在实施时确定。 +删除有引用的用户和角色采用停用/归档,保留审计身份;无引用对象才允许物理删除。 +同名职位的规范化重复检查独立于显示名;同名人员允许存在,工号与联系方式不作为强制唯一标识。 +可选资料做长度与格式校验,空值合法;电话仅按明确规则规范化,避免错误匹配。 + +### KTD3. 权限目录与系统权限 + +权限目录的 scope 由受信注册表确定,不能凭动作字符串前缀或请求体自报作用域。 +旧 actionId 通过版本化映射兼容,作用域冲突的旧项不继续接受写入。 + +| 权限类别 | 动作示例 | 谁能配置/怎样生效 | +|---|---|---| +| 系统设置 | system.settings.read/write,model/plugin/agent 设置子项 | 具备对应系统管理权者;平台策略限制 | +| 用户管理 | system.users.view/create/edit/disable;credential.recover 单列 | 分项授权;普通资料编辑不允许改管理员资格 | +| 职位管理 | system.roles.manage/assign | 管理职位与普通任命;不能越可委派上限 | +| 高权限管理 | system.policy.manage/privileges.manage;admin.transfer | 受保护动作;项目覆盖和普通职位任命不可间接获得 | +| 创建项目 | project.create,scope=system | 有效系统/职位 grant;选定产品与创建者角色上下文 | +| 项目管理 | project.settings、member.manage、permission.manage、duty.assign、stage.advance/archive | 具体项目创建者或明确委任;受 cap 与状态约束 | +| 项目内容 | knowledge.read/publish、trace.read/edit、business-audit.read/export | 项目关系、角色范围和资源关系同时满足 | +| 文档动作 | document.read/export、author/review/approve 等资格项 | 能力资格+具体文档职责/授权+状态 | + +管理员徽标由受保护系统授权产生,职位名称叫“管理员”不会改变其权限。 +首期保留至少一个有效策略管理者与安全恢复通道;并发撤销最后管理者必须在事务中拒绝。 +普通角色管理者不能编辑受保护权限,也不能给自己或别人任命超出其可委派范围的角色。 +系统管理员不自动加入项目,不自动获得业务统计或业务审计。 +系统安全日志仅披露必要的账号、安全动作、结果与不透明对象标识,不含业务正文、文件名、项目名称、内容摘要或完整历史差异。 +访问业务审计采用对应项目的明确授权,与正文授权分别显示。 + +### KTD4. 单一权限判定与多角色合成 + +输入由认证会话、受信资源存储和实际执行上下文组成:主体、动作、资源类型/ID、真实项目/属主、当前版本与当前状态。 +请求体里的 actor、owner、projectId 不能替代受信归属;资源与项目不一致时拒绝。 +服务端返回 allow/deny、来源链、拒绝原因及 authorityEpoch,UI 不重新计算权限。 +解释接口只能解释调用者自己或其有权管理的对象,不能成为探测他人资料的旁路。 + +系统动作只读系统授权来源,不接受 ProjectOverride。 +其有效值为当前有效账号、平台允许范围、对应受保护规则,以及明确 SystemGrant 或一条完整的系统职位默认授权路径;不依赖项目所选职位,也不接受项目 allow 作为系统授权来源。 +项目动作先确认成员/创建者/明确委任与资源归属,再对每个有效且本项目选用的职位绑定建立完整候选路径: + +`角色动作已定义且启用 ∩ 角色 cap(含范围) ∩ 平台 cap ∩ 项目 grant/默认 ∩ 资源关系 ∩ 阶段/状态 ∩ 文档职责`。 + +对具体动作,至少一条完整路径通过才允许。 +一个角色的动作授权不能与另一个角色的资源范围拼接;角色 cap=false 只关闭该角色的路径,平台禁止、项目明确 deny 和资源禁止对全部路径生效。 +项目 override=allow 仅替换默认 grant,不能创造不存在的动作、突破任一 cap 或跳过资源关系。 +override=deny 阻断该成员在该项目对此动作的全部角色路径;inherit 使用当前有效默认。 +多个角色可共同授予不同动作,但一次动作必须有完整证据来源。 + +加入项目时明确选择该用户的有效 bindingId;只有一个有效角色可预选,多角色需明确选择。 +新任命角色不自动加入已有项目;解绑后旧 binding 立即无效,重新任命产生新 binding,旧项目配置不自动复活。 +停用角色没有回落授予;无有效角色仅保留显式最小账号自助能力,业务动作拒绝并说明缺少资格。 +新增权限默认拒绝;读取策略失败、缺元数据、未知动作或必需提供者缺失时拒绝。 + +创建者关系提供本项目管理默认,仍经过其有效角色 cap 和平台 cap,不能自动读私域或代签。 +建项前检查创建者角色组合具备本项目设置、成员管理与三权分配的 cap 资格,避免建成无法管理的项目;role default 可关闭这些动作,由创建者关系提供项目内默认。 +已有项目遇 cap 收紧时保留归属,阻断受影响动作,并向授权管理者显示需要调整任命的原因。 +为避免唯一负责人换岗后无法重新选用职位,提供受限的“重新选择本人项目职位”动作:仅当前有效负责人本人,可从其账号当前有效任命中显式选择具备平台和项目管理 cap 资格的 binding,并按当前项目版本确认保存。 +仅该动作可使用尚未被项目选用的当前任命;普通项目动作仍只使用项目已选用的 binding。 +它只修复本人在本项目的角色选择,不改变项目负责人、不恢复旧 allow 覆盖、不清除明确 deny,也不授予资源读取或三权;完成后普通动作重新经过完整判定。 +角色任命者只能处理系统任命,不能代选项目职位;没有合格任命时项目保持等待,不能扩大 cap 恢复。 +项目内移除/降权最后负责人时保护实际可操作的管理资格,而不仅计数 owner 关系;系统 cap 收紧造成的暂停则明确记录与提示,不能阻止管理员执行必要撤权。 +创建项目、创建者成员关系与所选 binding 在同一领域事务落地;宿主绑定采用可恢复状态与幂等对账,失败不能留下可使用的无负责人项目。 + +判定、解释与所有入口共同调用该服务。 +设计采用最小权限、默认拒绝和每次请求重验,也结合项目关系与资源状态;依据 [OWASP Authorization Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Authorization_Cheat_Sheet.html)。 + +### High-Level Technical Design + +```mermaid +flowchart TB + U[用户及多个职位绑定] --> I[基座身份与通用授权服务] + C[系统动作与权限目录] --> I + R[角色默认与角色上限] --> I + P[项目成员 所选绑定 项目覆盖] --> D[统一判定] + I --> D + A[资源归属 明确分享 文档职责] --> D + S[阶段 文档状态 当前版本] --> D + D --> E[HTTP 命令 工具 任务提交与读取] + D --> X[有效权限解释与矩阵] +``` + +```mermaid +flowchart TB + Q[受信主体与资源定位] --> A{账号 动作与归属有效} + A -->|否| N[拒绝并给出可披露原因] + A -->|是| B{系统动作} + B -->|是| C[系统来源与受保护权限检查] + B -->|否| D[项目资格与硬限制检查] + D --> E[逐角色建立完整路径] + E --> F[资源 职责 状态 版本检查] + C --> G{当前授权通过} + F --> G + G -->|否| N + G -->|是| H[允许 在提交或输出边界再检查] +``` + +### KTD5. 文档三权与读取范围 + +复用现有整文审签,不建立另一套审批引擎。 +项目创建者通过统一服务选择有效项目成员,系统验证职位资格与文档三权异人要求,再记录真实分配者和受指派人员。 +审核人可多人,全部指定审核人通过后才允许批准;审核/批准只能批注和通过/驳回,不能修改正文。 +审核与批准人员因实际职责可读提交审阅的正文和明确关联材料;这不开放私人对话、未分享原件或私人草稿。 +共享授权只增加规定资源的读取能力,不转为编写或签字资格。 + +审签轮次冻结正文版本、职责版本与政策版本;人员停用、解绑、移除或权限收紧后,待处理轮次进入明确等待/失效状态,重新指派及提交。 +历史已完成的签字和操作者身份保留,不因换岗改写;历史内容读取仍使用当前授权。 +批准后修改采用既定撤回重审+影响提示;职责替换不能清洗同一版本实际编制者的记录。 +未分配三权的文档显示等待分配,并阻断受控编写/提交,不回落为全成员可写。 + +```mermaid +stateDiagram-v2 + [*] --> WaitingDuty + WaitingDuty --> Drafting: 指派有效三权 + Drafting --> Reviewing: 编制人提交固定整文版本 + Reviewing --> Drafting: 驳回或撤回 + Reviewing --> Approving: 全部指定审核通过 + Approving --> Drafting: 驳回或撤回 + Approving --> Approved: 指定批准人签字 + Approved --> Drafting: 撤回并开启新版本 + Reviewing --> WaitingDuty: 职责或必要资格失效 + Approving --> WaitingDuty: 职责或必要资格失效 +``` + +### KTD6. 查找与配置界面 + +沿用系统管理区、项目设置和文档入口,遵守 Dev `DESIGN.md`,不新增无用途的权限仪表盘。 + +1. 系统管理 → 用户:可搜索列表、职位/状态过滤、用户详情;详情显示可选资料、职位绑定、系统能力及来源。创建账号不要求填写人员资料。 +2. 系统管理 → 角色与权限:角色列表+名称/描述/状态/绑定人数;选中角色后编辑默认与上限,也可切角色×权限矩阵。系统级受保护项按操作者资格显示。 +3. 项目设置 → 成员与权限:选人、选择项目生效职位、项目覆盖;单成员视图与成员×权限矩阵共用草稿,显示最终解释。 +4. 文档现有入口 → 三权:文档×编制/审核/批准矩阵与单文档选择器;候选范围、资格不足、多人审核及冻结状态直接说明。 + +精确搜索按选定字段规范化后完全匹配,稳定 ID/登录名优先;模糊搜索首期采用包含匹配和明确的前缀排序,不默认增加拼音/向量/模型识人。 +搜索资料范围遵循目录权限;被禁字段既不返回,也不参与未经授权的匹配,防止通过命中数量探测联系方式。 +过滤包括权限 scope、分组、默认/上限/最终允许、继承/覆盖、职位与账号状态、当前修改;精确/模糊与过滤可以组合。 +共享“职位”不代表可查看所有同职位人员的私密资料。 +同名候选显示姓名(如有)、登录名、职位与工号的授权投影;人名不清楚时必须选择具体对象,模糊匹配不能直接完成任命。 + +矩阵不是一张无限扩展的大表:按分组及分页显示,固定对象标签,提供单元格说明和键盘导航。 +单角色视图的 default 与 cap 两列,成员视图的 inherit/allow/deny,与最终“允许/拒绝”的只读结果有明确区分。 +过滤隐藏项不清空草稿;“全选”只选当前明确列出的结果,服务端提交固定 ID 清单与选择数量,不能把模糊查询直接当成授权范围。 + +### KTD7. 批量变更、撤权与 Agent + +所有配置走“草稿 → 差异及影响预览 → 提交确认 → 服务端重验 → 原子写入与审计回执”。 +预览绑定操作者、对象 ID、策略版本及 patch 摘要;它不能作为跳过提交授权的凭证。 +一批多个角色/成员的修改采用 expectedVersion/authorityEpoch 与事务,任一非法对象、越上限或冲突均不部分提交。 +跨 Backend 与 RDM 的一项业务变更不伪装成单库原子事务;按明确 owner 分开提交,显示实际状态和可恢复步骤。 +超时结果标为未知,以幂等键查询事务回执,避免重复授权或错误声称失败。 + +权限 epoch 的权威落在存储和服务端判定;进程通知用于使缓存尽快失效,通知丢失不能继续使用旧授权。 +HTTP/检索/下载在输出边界检查当前权限;任务入队、恢复、使用资源和最终提交分别检查;持续流在新输出前重验并在撤权后终止受影响订阅。 +已经交付到客户端或既有模型上下文的内容无法追回,撤权会清除应用缓存并阻断后续读取、工具执行和结果披露;对含已撤数据的模型运行终止并重新构造上下文。 + +UI、对话、Agent 工具共用权限目录查询、候选选择、解释、预览与提交 primitives。 +沿用公开命令总线,但明确声明工具投影和风险级别;管理写入经宿主的人类确认,模型不能确认自己的授权提案或签署三权。 +管理区发起的确认使用现有确认卡/弹层能力,并提供可发现的返回路径;不能只报“请到对话确认”而丢掉当前草稿。 +异步状态只由一个 store 管理,按 actor+project+对象版本+request generation+seq 丢弃过期响应,失败时清空对应旧能力。 + +```mermaid +sequenceDiagram + participant H as 人类管理者 + participant UI as 单对象或矩阵视图 + participant API as 公开授权服务 + participant DB as 权威存储 + H->>UI: 选择固定对象并修改草稿 + UI->>API: 请求差异和影响预览 + API->>DB: 读取当前版本与授权 + API-->>UI: 返回具体变更和拒绝原因 + H->>UI: 确认变更 + UI->>API: patch 版本 幂等键 + API->>DB: 重验并事务写入与审计 + API-->>UI: 完成 冲突 拒绝或未知结果 +``` + +### Compatibility and Migration + +迁移必须保持账号 owner/userId、roleId、projectId、createdBy、资源标识及历史签字身份。 +既有单角色绑定导入一个有效 binding;项目只选用该绑定,不自动加入新增角色。 +旧 profile 字段映射到可选资料;未知资料留空,不推断人员姓名或联系方式。 +现有两套管理员身份仅映射为明确的系统动作来源,不生成全项目业务 grant;旧 owner 的正文默认、停用回落与遗留越 cap 覆盖列为权限收缩差异。 + +角色权威迁移采用版本化清单与冻结写窗口:导出带来源版本及摘要的角色/绑定/cap,导入 Backend 后核对数量、稳定 ID、逐项范围和所有引用,再切换消费者。 +禁止双主写入;过渡 RDM 旧管理命令转发新权威服务或明确只读,旧表只保留可核对历史。 +冻结期间不能取得一致快照时停止迁移,不做无事务的跨库复制。 + +先在隔离副本执行迁移与双评估,输出用户×项目×动作的旧→新差异;双评估只用于记录,新算法上线时只有一个执行权威。 +扩权项必须有明确新授权;收缩项逐项列出原因和处理人,不能为消除差异恢复旧越权。 +生产迁移前完成备份及恢复演练、固定程序/配置/数据身份,按发布和迁移授权切换。 +回滚不得重新启用身份式业务全权或复活撤销记录;不能满足这一条件时进入维护/拒绝状态,先修复迁移或程序。 +账号恢复需修订既有账户方案的信任与交付合同,防止管理员拿一次性 Key 设密后接管业务身份;一次性本身不满足 R7。 +普通管理员仅发起恢复提案,账号本人须使用管理员不能单方改写或取得的既有有效会话确认或预先建立的本人恢复证明,才能取得可兑换设密能力。 +可选姓名、电话、邮箱和工号只是人员资料,不自动成为恢复证明;新证明的建立或更换不能由发起恢复的管理员单独完成。 +若没有独立本人验证条件,线上恢复拒绝,不向普通管理员交付可兑换的目标账户 Key;异常人工恢复采用另行批准的 owner 操作,不纳入普通角色管理权限。 +U1 冻结证明与交付合同,U3 消费已批准能力并验证该负例;既有恢复命令未收口前不能宣称 R7 完成。 + +### Dependencies and Existing Work + +本方案衔接 [RDM 功能与实现整改方案](2026-10-12-rdm-function-implementation-plan.md)、[RDM 完整交付方案](2026-10-11-rdm-final-target-completion.md)、[两树一网追溯审计方案](2026-10-11-rdm-two-trees-trace-audit-integration.md) 与 [账户和登录 Key 方案](2026-10-12-svc-unified-deploy-and-login-key.md)。 +本轮管理员决定将修订前述审计方案的跨全部项目业务审计放行口径,以及权威 SR-G6 的“所有权限”表述;旧批准记录保留,新候选条款须按本方案评审和切换。 +账户方案中恢复 Key 可交付给签发者的既有口径同样需要按 R7 修订;对已有业务账号不能只保留短时设密限制。 +多职选择将修订 10-12 方案的首版单角色建议。 +U0 D2/D3/D5 的管理不代签、私域与冻结整文规则继续作为约束。 + +现有 `feature/admin-notes-repair` 涉及管理样式与角色勾选同步;其他 RDM 工作区有审计/导出/pins 相关任务。 +这些仅依据本地任务记录和分支阅读,不代表本轮已经核验远端 PR 或 CI。 +实施启动时查询最新权威 base/head、实际公开契约、已合入内容和在途负责范围,复用有效改动,避免平行修改同一管理页面与审签引擎。 +基座公开扩展的实现、兼容验证及固定版本消费是 U4/U5 的依赖;发布版本仍由用户按高后果双钥匙执行。 + +--- + +## Implementation Units + +以下均为待批准工作项;U 编号带本方案名称使用,避免与其他方案的 U 编号混淆。 +文件范围以指定仓根目录为基准;标“新增”的文件为规划位置,实施可按项目模块规范调整。 + +### U1. 冻结需求、权限目录与公开扩展合同 + +目标:将本轮两项裁定和 R1–R20 落到权威需求、动作 scope、通用服务/领域规则边界及公开提供者/消费者合同。 +依赖:人工确认本方案需求与 KTD1;负责人为产品负责人和基座/RDM 模块 owner。 +文件:RDM `docs/requirements/01-用户需求与系统需求.md`、`03-产品设计方案.md`、`08-核心数据模型-两树一网.md`;Documents 相关方案与扩展申请;Backend `pkg/extension/extension.go` 合同草案。 +方法:冻结权限目录、敏感字段投影、系统管理恢复条件、账号本人恢复证明与凭据交付、项目创建与角色 cap 关系、公开版本兼容和旧命令映射。 +验证:文档差异与链接核对、动作×scope×配置主体表逐项评审;本单元不实施业务,也不制造业务测试 PASS。 +出口:阶段 1–5 对应产物和人工结论齐备,明确选择通用角色权威位置后才能进入其实施。 + +### U2. 收口现有系统与项目越权路径 + +目标:先修 R6–R12/R18 的当前路径,为后续迁移建立安全基线。 +依赖:U1 对动作与边界的批准;RDM 执行端 owner 负责。 +文件:RDM `internal/rdmapp/perms_api.go`、`runtime.go`、`upload.go`、`draftproposal.go`、`plugins/rdm/plugin.go`;测试扩展 `plugins/rdm/roles_test.go`、`draft_visibility_test.go`、`internal/rdmapp/perms_test.go`、`u1_auth_test.go`、`resource_authz_test.go`。 +方法:系统管理使用独立资格;清除自动业务 admin 放行;先验证角色动作存在和 cap,再考虑覆盖;停用不回落更宽默认;创建者走相同硬约束。 +执行方向:以当前源码触发方式先建立会失败的公开执行负例,避免仅测试新帮助函数。 + +测试场景: + +- 普通角色获 project.settings 后,全局 cap、角色管理、admin 移交仍拒绝。 +- A 创建者改 B 的成员、权限、职责和归档均拒绝;矩阵解释一致。 +- 管理员未获 B 业务授权,正文/业务审计/原件/私人草稿/导出均拒绝。 +- 先设 allow 覆盖,再换到未配置该动作角色,当前执行与解释均拒绝。 +- 停用受限角色不新增权限;owner 遇 cap=false 同样拒绝;有效合法成员仍可执行原有合法动作。 + +出口:直接 API/命令负例与正常回归闭合;不得宣称完整迁移或最终产品已验收。 + +### U3. 基座账号资料、有效态与受控目录 + +目标:实现 R3–R5/R11,提供真实人员查找而不复制账号。 +依赖:U1 目录及系统管理合同;Backend owner 负责。 +文件:Backend `internal/store/auth.go`、迁移、`internal/server/accounts.go`、`internal/app/hostcaps.go`、`pkg/extension/extension.go`;新增账号资料/有效态测试及扩展 `internal/app/account_lister_test.go`、服务器账户测试。 +方法:资料 CRUD 与停用有明确系统资格;目录查询按系统管理/项目选人/职责候选投影字段,分页稳定;停用同步终止会话与能力。 + +测试场景: + +- 姓名电话邮箱工号均空成功建号;填写和清空资料不改身份。 +- 两名同名用户精确按 ID/登录名正确选定;模糊结果要求再次选择对象。 +- 项目选人未经联系方式权限不能按电话号码探测命中,不能批量导出完整目录。 +- 本人改备注不能改角色、管理员位或有效态;停用账号不能继续操作或作为三权候选。 +- 管理员持有 credential.recover 仍不能取得目标用户可兑换凭据或正常登录能力;无本人验证条件时恢复拒绝;管理员改可选资料不能改变恢复证明。 +- SQLite 与 PostgreSQL 的空值、格式、分页和并发版本冲突行为一致。 + +出口:公开提供者/消费者契约验证及后台真实目录数据闭合。 + +### U4. 通用职位、多职、默认与上限及原子批量服务 + +目标:实现 R1/R2/R6/R10/R13/R15/R20。 +依赖:U1、U3、U2 安全基线;Backend 与 RDM owner 共同负责迁移窗口。 +文件:Backend 新增 `internal/authz/` 通用目录、角色、binding、版本与系统授权存储和测试;公开扩展与注册面;RDM `internal/perms/roles.go` 和 `perms_api.go` 兼容转发;新增 `internal/authz/roles_test.go`、`policy_batch_test.go` 和迁移测试;RDM `plugins/rdm/roles_test.go` 消费契约。 +方法:KTD1–KTD4/KTD7;保留 roleId;用户绑定多职;角色默认与上限范围成对校验;保护高权限任命与最后管理者;预览及提交均授权。 + +测试场景: + +- 一个职位绑定两人,同一人绑定两个职位;编辑说明不影响用户/项目 ID。 +- 默认 grant 超 cap、未知动作、停用角色任命、无权编辑受保护项均拒绝。 +- 一角色有动作无目标范围,另一角色有目标范围无该动作,组合仍拒绝。 +- 批量里一对象非法或版本冲突,全部不写;同一幂等请求只生成一次变更及审计。 +- 旧单角色数据导入保持 ID/绑定,双主写入被阻断;失败迁移恢复不复活撤权。 + +出口:角色与绑定只有一个权威来源,系统动作与新旧公开消费者结果一致。 + +### U5. 项目角色选择、覆盖和统一资源读取 + +目标:实现 R2/R7–R12/R14/R18/R19。 +依赖:U3/U4 与公开版本就位;RDM 项目 owner、Backend 资源接口 owner 配合。 +文件:RDM `internal/members/members.go`、`internal/projects/projects.go`、`internal/rdmapp/projects_api.go`、`perms_api.go`、`runtime.go`、`plugins/rdm/plugin.go`;Backend 项目 API、`internal/server/resource_authz_test.go`、`resource_authz_consumption_test.go`、`internal/app/resource_authz_v2_test.go`;RDM `member_guards_test.go`、`resource_authz_test.go`、`perms_test.go`。 +方法:加入和建项保存明确 binding;项目覆盖只操作本项目;资源策略消费完整 action/type/id/owner/project;列表、计数、检索、历史和导出均过滤;宿主项目和领域项目稳定绑定。 + +测试场景: + +- 新增用户职位不改变已有项目;项目选择新增 binding 后才生效。 +- 解绑再重新任命不能自动恢复旧项目选择/旧覆盖。 +- 唯一负责人解绑后重新任命合格职位,可经受限入口由本人明确重选并恢复管理;普通管理员、前负责人或 cap 不足者不能代修复,也不能借此读资源或恢复旧 allow。 +- 项目明确 deny 在另一角色可 grant 时仍拒绝;allow 超所有可用 cap 拒绝。 +- 创建者可以管理本项目,不能读私聊或未分享原件;无管理资格建项不留下可使用半成品。 +- 篡改 projectId、资源 ID、owner 以及使用基座直连建项/下载/检索不能绕过域策略。 +- 策略提供者错误、缺失或权限通知丢失时拒绝;分页与数量不泄露被过滤对象。 + +出口:HTTP/Host/命令/模型上下文的直接入口均有同一作用域和资源边界。 + +### U6. 三权资格、冻结轮次及真实分配者审计 + +目标:实现 R16/R17/R18,复用已有整文审签能力。 +依赖:U4/U5;RDM 文档模块 owner 负责。 +文件:RDM `internal/domain/review.go`、`internal/rdmapp/docsubmission.go`、`draft.go`、`plugins/rdm/plugin.go`;扩展 `write_duty_stage_test.go`、整文审签测试和职责候选测试。 +方法:统一分配服务检查有效账号、项目成员、选用职位、cap 与异人;审计记录真实操作者;轮次冻结与资格撤销处理按 KTD5。 + +测试场景: + +- 跨项目、停用、非成员和 cap 不足候选拒绝;编制/审核/批准同人拒绝。 +- 多审核人未全部通过时批准拒绝;旧票不能签新正文。 +- 管理员/创建者未被指派不能代编、代审、代批;审核人能读提交正文但不能读取未分享原件。 +- 在途撤权或换职责使待处理轮次失效;历史已签版本和主体保留。 +- 分配者与受指派编制人不同,审计 actor 是真实分配者。 + +出口:一份整文由真实三个职责完成与拒绝链,资格解释和执行一致。 + +### U7. 用户、角色、项目权限与三权界面 + +目标:实现 R4/R5/R13–R16,形成完整管理操作路径。 +依赖:U3–U6 相应服务合同稳定;Frontend/UI owner 负责。 +文件:Frontend `src/components/adminSections.tsx`、`adminRdmSections.tsx`、`AdminZone.tsx`、`rdmManagement.ts`、`api.ts`、`store.ts`;复用 `test/rdmroles-reject.test.ts`,新增角色矩阵/成员矩阵/目录与三权交互测试;沿用两个仓的 `design-guard.test.ts`。 +方法:KTD6/KTD7;先整合在途管理页面改动;消费服务端权限目录与 capabilities,共用草稿模型,选择稳定 ID。 + +测试场景: + +- 单角色与矩阵产生等价 patch;过滤和翻页不丢草稿;全选范围与预览一致。 +- 姓名同名但登录名不同不误选;资料空值正确展示;无资格者看到明确拒绝原因。 +- 两窗口并发编辑返回冲突并保留草稿;等待确认/已完成/结果未知分开显示。 +- 快速切项目/角色/搜索词,迟到结果不能覆盖新目标;403 不被当成登录失效或永久加载。 +- 明暗主题、键盘导航、焦点、窄屏及广告过滤环境可用;令牌和折叠原语门禁成立。 + +出口:真实用户通过既有页面完成建号/任命/项目选人/覆盖/三权,没有手填 ID 的必要主流程。 + +### U8. Agent 同源工具、撤权与后台提交 + +目标:实现 R12/R19,并验证 UI 与对话动作 parity。 +依赖:U4–U7;命令总线与运行时 owner 负责。 +文件:RDM `plugins/rdm/plugin.go` 工具声明和描述、任务资源使用/提交位置;Backend `internal/cmdbus/`、`internal/runmgr/`、公开策略集成测试;Frontend 卡片/Surface/能力 store 相关测试。 +方法:查询、解释、预览和提交用同一 primitives;对角色/项目/三权写操作使用宿主确认;任务恢复与新输出重验,终止含已撤数据的运行。 + +测试场景: + +- 同一动作 UI/命令/工具的允许、拒绝、审计和对象一致,模型不能伪造 actor 或确认自己的提案。 +- 入队后撤权、恢复旧任务、确认旧卡、使用旧 Surface 均不能提交。 +- 已开 SSE/下载/检索遇撤权终止后续读取,权限通知丢失仍由当前存储判定拒绝。 +- 含已撤资料的模型上下文不被继续使用或披露,恢复从新授权上下文开始。 +- 真实模型能查询候选、解释权限和请求人确认;遇歧义人名停止在选人步骤。 + +出口:mechanism 测试与适用真实模型任务级验证分别留证,不用 mock 代替模型验收。 + +### U9. 迁移演练、精确组合及正式验收 + +目标:闭合 R1–R20,交付单一权威的实际产品行为。 +依赖:U2–U8 完成对应评审;迁移、部署和运行测试各有明确授权;集成 owner 与用户验收人负责。 +文件:各仓迁移与验收记录;Dev task evidence、组合 pins 和功能规划;新增多账号权限端到端用例按仓内测试规范保存。 +方法:先隔离副本、SQLite/PG 同构迁移、差异审阅和恢复演练;固定 base/head/pins/config/data identity,再在授权环境执行真实账号验证。 + +测试场景: + +- 至少两个独立项目;系统管理员、A 创建者、B 创建者、同职位两人、一人多职、两名审核人、批准人、普通成员和无关用户。 +- 完成资料/职位/系统能力/项目选择及覆盖/文档三权全过程,并逐项执行跨项目、换岗、停用、上限收紧与私域负例。 +- 重启后任命/覆盖/职责与撤销保持;两实例缓存失效、并发编辑和任务恢复一致。 +- 迁移 diff 无未经批准扩权;回滚保留撤权事实,不启用旧管理员业务旁路。 +- 实际浏览器由最终固定产物提供;系统角色变化、公开契约、模型工具、文档正文和审计结果同一对象。 + +出口:用户正式验收、独立 Review、当前 HEAD 的权威 CI、合入及部署记录各自齐备;不能用其中一项替代其余。 + +### Phased Delivery + +```mermaid +flowchart TB + U1[U1 需求与公开合同评审] --> U2[U2 当前授权路径收口] + U1 --> U3[U3 用户资料与目录] + U2 --> U4[U4 统一职位与多职服务] + U3 --> U4 + U4 --> U5[U5 项目与资源授权] + U5 --> U6[U6 三权资格与轮次] + U3 --> U7[U7 管理界面] + U4 --> U7 + U5 --> U7 + U6 --> U7 + U7 --> U8[U8 Agent及撤权全链] + U8 --> U9[U9 迁移组合与正式验收] +``` + +建议分四个可验增量:I1=U1+U2 的边界修正;I2=U3+U4 的人员/职位与目录;I3=U5–U7 的项目、三权及配置体验;I4=U8+U9 的全链和迁移验收。 +各增量遵循 policy/delivery.md 的需求、方案、实施、验收人工出口;阶段内可继续调查、自检与整改。 +既有公开契约只读、UI 单对象/矩阵模型设计可在依赖批准后并行;服务端迁移和同一页面写入按 owner 协调。 +实施工期在 U1 完成、实际在途任务及公开版本核定后估算,不把未验证的迁移规模写成日期承诺。 + +--- + +## Verification Contract + +以下是后续验证计划,本轮业务结果全部 NOT_RUN。 + +| 层 | 验证内容 | 命令/环境与证据要求 | +|---|---|---| +| 文档 | 当前引用、需求追溯、两项裁定、规则一致性 | 文档 diff 与链接检查;SELF | +| 账号与通用授权 | 正常/越权/停用/并发/多职/批量/迁移 | Backend 相关 Go 测试与合同测试;执行时固定 SHA | +| RDM 领域 | 项目隔离、角色选用、范围、三权、私域和状态 | RDM 相关 Go 测试、公开 HTTP/命令集成;`make test` | +| UI | 搜索、选择、两种矩阵、确认、冲突与拒旧 | Dev `make test-frontend`、`make test-ui`;固定组合实际浏览器 | +| 产品组合 | 基座提供者/RDM 消费者/正式前端产物 | 各仓和 Dev `make test`、`make build`,核对实际 pins 与制品 | +| 存储与恢复 | SQLite/PG 迁移、并发、重启与多实例撤权 | 隔离数据与授权运行环境;最小权限真实账号集 | +| Agent | 查询/解释/确认/拒绝/恢复/资源使用 | 真实模型任务级测试;机制单测与模型结果分开 | +| 正式交付 | 同步、测试、Review、CI、合入及部署 | 当前 base/head;precheck/task-sync/检查输出经 evidence;GATE 运行身份+SHA 或独立 REPLAY | + +本地 evidence 为 SELF,不因标签或摘要提升可信级别。 +正式验收固定被测源码、组件 SHA、配置与数据身份;Reviewer 按最小重放集独立核验。 +未执行、跳过、零用例或源代码存在不能写为业务 PASS。 +文档保存只检查文档,不启动业务测试、数据库迁移或服务操作。 + +--- + +## Definition of Done + +本轮方案交付:本文包含当前差距、完整需求、明确模型与合成规则、界面方案、迁移与兼容、工作项/文件/测试/依赖和评审出口;两项用户决定有准确来源;主入口与任务卡可接续。 +完整功能交付:R1–R20 均能映射至实际实现及固定对象证据,所有必要正常、异常、边界和权限负例成立;用户正式验收后按仓库规则完成独立 Review、当前 CI 与组合核验。 + +启动实施前需完成的评审选择:KTD1 通用职位权威迁移、创建者管理与角色 cap 的耦合和本人重选规则、受控目录可披露字段、账号本人恢复证明及交付合同,以及生产迁移/切换范围。 +这些是当前草案中已给推荐方案但尚未批准的设计选择,不影响本轮方案交付,不授权实施者自行替换路线。 +实施时再确定的细节:表名/迁移编号、最终 package 位置、目录分页与搜索索引阈值、通知实现和隔离环境,不改变上述产品边界。 + +停止条件:范围或需求改变;必要公开契约不兼容;角色数据无法取得一致快照;发现未批准扩权;实际制品/数据身份不明;在途任务 owner 冲突;越出迁移/部署授权。 +发生时保存当前证据与现场,返回受影响方案或计划评审,不能放宽授权继续。 + +推荐下一步为评审 U1 和 I1,先批准本次权限边界与公开合同,再实施已有可达授权路径的收口。 +这项建议不自动启动业务任务;完整用户资料与矩阵设计已有后续依赖和验收,不会在首批完成后遗漏。 -- 2.54.0 From 2cc00da9e005d2c82848d7bab3ea403a4683a10c Mon Sep 17 00:00:00 2001 From: weichen Date: Tue, 13 Oct 2026 09:30:34 +0000 Subject: [PATCH 02/10] Define the I1 permission and public extension contract Why: separate protected system actions from project authority and freeze the approved identity and resource boundaries. Evidence: SELF document check recorded by Dev evidence; approved plan digest retained and fixed-base core rules preserved. Impact: contract and navigation only; provider implementations, multi-role migration and deployment remain later increments. Refs: IAM plan r1 U1; Agent-System-Dev feature/iam-i1-permission-boundaries --- .../2026-10-13-iam-i1-permission-contract.md | 163 ++++++++++++++++++ docs/proposals/INDEX.md | 5 + 2 files changed, 168 insertions(+) create mode 100644 docs/proposals/2026-10-13-iam-i1-permission-contract.md diff --git a/docs/proposals/2026-10-13-iam-i1-permission-contract.md b/docs/proposals/2026-10-13-iam-i1-permission-contract.md new file mode 100644 index 0000000..2a43a91 --- /dev/null +++ b/docs/proposals/2026-10-13-iam-i1-permission-contract.md @@ -0,0 +1,163 @@ +# IAM I1 权限边界与公开扩展合同 r1 + +负责人:weichen;编制:Codex;更新时间:2026-10-13。 +依据:[用户、职位角色与分层权限统一方案 r1](2026-10-13-identity-role-permission-plan.md) +(Documents `a088809`,原文 SHA256 `39b8e9a6e078dc509bd80118c1807ce6ed23e4466e5902b51f4bfa255d55c0a1`)。 +用户已批准该方案并授权 I1=U1–U2;本次终点为本地实施与验证后人工评审,未授权推送、PR、合入、迁移或部署。 +本合同为 U1 产物,冻结已批准语义与提供者/消费者责任;新增公开接口仍须对应模块实现、固定版本及合同验证,不能据此宣称能力已提供。 +源码、业务测试及运行验收结果以 I1 任务卡的工具收据为准;本文不复制测试结果。 + +## 1. 当前增量与最终目标 + +最新用户裁定取代旧“管理员拥有全部业务权限”“创建者不受职位 cap”“每人仅一个生效职位”的现行解释。 +历史会议、原方案、旧批准记录和 `.tmp` 原件保留;旧结论只用于解释历史行为。 +系统管理员管理系统与授权主数据;读取他人业务内容必须有具体项目和资源授权。 +职位支持一职多人、一人多职,项目明确选用有效职位绑定;新任命不自动增加既有项目权限。 +通用职位、绑定、默认/上限与系统授权迁至 Backend 是已批准设计;RDM 保留项目成员、项目选用绑定、项目覆盖、资源及文档职责/状态。 + +| 层 | I1 范围 | 后续范围 | +|---|---|---| +| 文档 U1 | 需求裁定、动作目录、角色 cap、隐私、公开扩展申请与验收合同 | 按固定公开版本补提供者/消费者验证 | +| 执行端 U2 | 在现有 RDM 单绑定和旧管理台账上收口可达越权路径;实际结果另见任务卡 | 账号有效态、受控目录及恢复能力 U3;通用职位与多绑定 U4;项目明确选用 U5 | +| UI/Agent/迁移 | 不以文档保存证明能力已就位 | 矩阵、统一工具、完整撤权与数据迁移分别按 U7–U9 授权实施 | + +I1 的 legacy 单绑定适配不是最终多职模型:旧账号至多一个专业角色,项目尚无显式 bindingId 集合。 +已有绑定必须先检查角色有效态、动作定义与 cap,再计算默认/项目覆盖;停用或失效不能回落为无绑定成员默认。 +未绑定旧会员的关系默认只能作为已登记的 legacy 兼容来源,仍受平台 cap、项目关系和资源限制;不能伪装成新的职位绑定或最终模型的资格证明。 +U4/U5 迁移后无有效选用绑定的业务动作默认拒绝;迁移差异须单独评审,不在 I1 静默改造数据。 +旧 RDM 管理台账在 I1 仅为明确系统管理动作的兼容来源,不能生成项目成员关系、业务 grant 或资源 bypass;`Host.IsAdmin()` 同样不能代替业务授权。 +I1 还将当前分发 Host 的平台管理员身份显式适配为上述四项受保护系统动作;必须同时满足认证 actor 与 Host.Owner 一致,不接受 body 的管理员声明,也不把该适配扩展到其他未知动作或业务动作。细粒度系统 grant 的通用权威仍属 U4。 + +## 2. 动作目录与配置主体 + +scope 由受信 `ActionMeta`/权限注册表确定,不接受请求自报 scope,不按字符串前缀推断。 +系统动作只消费系统来源;项目动作限定实际项目;资源读取还须匹配实际资源、分类与读取动作。 +下表为 I1 稳定动作合同。“后续”项仅冻结目录,当前尚未提供相关接口。 + +| actionId | scope | 配置/执行主体 | 附加边界 | +|---|---|---|---| +| `system.roles.manage` | system | 受保护系统管理者 | 角色创建/编辑/停用/读取;不能经项目覆盖获取 | +| `system.roles.assign` | system | 受保护任命者 | 任命在可委派上限内;不能间接授予受保护系统权限 | +| `system.policy.manage` | system | 受保护策略管理者 | 平台 cap 与权限政策;保护最后有效管理者 | +| `system.admin.transfer` | system | 当前有移交资格的系统管理者 | 明确移交目标;旧 `rdm.perm.transfer` 映射此门禁 | +| `project.create` | system | 有明确系统/职位建项 grant 的有效用户 | 创建者管理 cap 资格见 §3;不接受项目 allow | +| `project.archive` | project | 目标项目的合法管理者 | 保留稳定 ID;纠正旧目录误标的 system scope | +| `project.settings` | project | 目标项目创建者/委任管理者或合法获授者 | 仅本项目设置与覆盖;不能进入全局角色、cap 或管理员移交 | +| `member.manage` | project | 本项目合法管理者 | 成员及选用角色管理;不得替他人做本人受限重选 | +| `duty.assign` | project | 本项目合法分配者 | 候选有效成员+对应资格 cap+三权异人;分配不代签 | +| `stage.advance` | project | 有阶段推进 grant 的成员 | 阶段准入准出、当前状态 | +| `doc.read` | project | 有读取 grant 的成员 | 文档阶段范围+受控正文职责/明确资源授权 | +| `doc.write` | project | 有编制资格的指定编制人 | 具体文档、当前状态、冻结版本;不因管理权取得 | +| `doc.publish` | project | 有发布资格及对应职责的成员 | 固定整文版本及已批准状态,不替代批准签字 | +| `review.participate` | project | 有评审资格的指定审核/批准人 | 按具体职责决定可执行动作;只能批注及通过/驳回 | +| `trace.edit` | project | 有追溯编辑 grant 的成员 | 文档层/项目层裁定范围与状态分别检查 | +| `knowledge.publish` | project | 有发布 grant 的成员 | 明确提交/发布;不能借发布读取私人原件 | +| `audit.read` | project | 有明确业务审计 grant 的当前成员 | 独立于正文读取;当前角色动作 cap、平台 cap 与范围均满足 | +| `system.settings.read`/`system.settings.write`及设置子项 | system,后续目录 | 对应系统管理者 | 模型、插件、Agent、检索等设置分项授权 | +| `system.users.view`/`create`/`edit`/`disable`、`credential.recover` | system,后续目录 | 对应账号管理者/恢复提案者 | 编辑资料不能改管理员资格;恢复见 §6 | +| `permission.manage`、`knowledge.read`、`trace.read`、`document.read`/`export`、业务审计导出 | 后续目录,project | 按注册元数据和当前业务关系 | 当前 `doc.*` 等 ID 不静默重命名;新增需公开版本映射 | + +`audit.read` 是 I1 新独立项目动作:必须由合法项目管理者在上限内明确授予,或来自明确配置的角色默认 grant;管理身份本身不提供审计 grant。 +非成员 admin、仅持 `Host.IsAdmin()` 的主体、无审计 grant 的创建者、cap 已收紧的旧获授者均拒绝。 +系统安全日志只披露必要安全动作、结果及不透明对象标识,不能包含业务正文、文件名、项目名、内容摘要或完整业务差异;业务审计仍走 `audit.read`。 + +| 旧入口/元数据 | I1 兼容规则 | +|---|---| +| `rdm.role.create`/`action`/`disable`/`list` | 命令 ID 保留,系统门禁改为 `system.roles.manage` | +| `rdm.role.assign` | 命令 ID 保留,系统门禁改为 `system.roles.assign` | +| `rdm.perm.cap` | 命令 ID 保留,系统门禁改为 `system.policy.manage` | +| `rdm.perm.transfer` | 命令 ID 保留,系统门禁改为 `system.admin.transfer` | +| 旧 `project.archive` scope=system | 目录版本标记改为 project;具体项目重验;旧系统覆盖写法不继续接受 | +| `project.settings` 作为全局门禁 | 不兼容保留;项目 grant 不被翻译成系统 grant | +| 未登记 ID、旧示例 `admin.transfer`/`business-audit.read` | 不是隐式别名;拒绝执行/写入,采用上表稳定 ID 或显式版本映射 | + +## 3. cap、创建者资格与撤权 + +最终系统动作路径为:有效账号 ∩ 受信系统动作 ∩ 平台允许范围 ∩ 受保护规则 ∩ 明确系统 grant 或完整系统职位默认路径;项目覆盖不能参与。 +最终项目动作对每个有效且本项目选用的 binding 建立完整路径: + +`有效成员/管理关系 ∩ 已定义动作 ∩ 平台 cap ∩ 本职位 cap(含范围) ∩ 项目覆盖/当前默认 ∩ 资源关系 ∩ 阶段/状态 ∩ 文档职责`。 + +至少一条完整路径允许才放行,不拼接不同职位的 grant 与资源范围;平台禁止、项目明确 deny 和资源禁止对所有路径生效。 +`allow` 只能替换默认 grant,不能创造未配置动作或越 cap;`deny` 阻断该成员该项目该动作的全部路径;`inherit` 使用当前默认。 +停用、解绑、换岗、cap 收紧、账号停用和成员移除后重验当前资格;遗留 allow 不能复活旧权。 +创建者关系只提供本项目管理默认,其有效角色 cap 与平台 cap 仍先验;A 创建者不能管理 B,不能读取私人资源或代签。 + +建项前校验创建者角色组合具备 `project.settings`、`member.manage`、`duty.assign` cap 资格;这些角色 default 可关闭,由创建者关系提供项目内管理默认。 +最终创建项目、创建者成员关系及所选 binding 在同一领域事务落地;宿主绑定以可恢复状态和幂等对账处理。 +已有项目遇 cap 收紧保留 `createdBy` 与历史归属,阻断受影响动作并说明等待重新任命;不能扩大 cap 恢复管理。 + +受限“重新选择本人项目职位”是后续独立动作,不复用 `project.settings`:仅当前有效负责人本人,从账号当前有效任命中明确选取具备管理 cap 的 binding,按项目当前版本确认。 +仅此动作可使用尚未被本项目选用的任命;它不改变负责人、不恢复遗留 allow、不清除 deny、不授予资源读取或三权。 +系统任命者不能代选;无合格任命时保持等待。项目内移除最后负责人须保护实际可操作管理资格;系统必要撤权不因这一保护而被阻止。 + +## 4. 资源、正文与审计读取合同 + +认证 actor、资源真实 owner/projectId/resourceId/分类来自执行端受信上下文;客户端标识只能定位对象,不能授予访问。 +本人的私聊、私人原件和个人草稿属于私人资源;在当前账号有效且资源确属本人时按自有资源规则读取,不因放在项目下变为受控正文。 +受控文档正文即使物理由本人生成,也须具体文档职责或明确资源授权、当前项目资格及当前 cap;真实 owner 相等不绕过受控规则。 +审核/批准职责仅开放送审正文与明确关联材料,不开放未分享原件、私聊或私人草稿;分享只授予指定资源的只读能力,不授予编写或签字。 +项目知识只由明确提交/发布产生;成员身份不意味着私人资源或所有受控正文全量可读。 +历史签字、职责与事件保留;历史内容读取依旧使用当前授权,时间点重建不恢复当时权限。 +读取、下载、列表、搜索、stream、模型上下文均遵循同一分类和当前判定;裁剪列表后再返回数量/分页,拒绝不得泄露存在性。 +I1 现有项目聚合审计 DTO 含正文预览,故除 `audit.read` 外还必须具备当前完整项目 `doc.read`;阶段范围受限者不能通过全项目聚合审计取得范围外正文,按资源裁剪的细粒度审计由 U5 完善。具体文档导出检查该文档的 `doc.read` 和阶段范围,不把审计 grant 当成导出 grant。 +I1 私人 pending/rejected 草稿仅提案人可读与决定;知道 proposalId、拥有项目管理权或文档职责都不能采纳/拒绝他人私稿。已采纳正文仍按当前文档读取授权逐项过滤。原件批次确认只限上传者本人,管理台账可披露经当前管理授权限定的业务元数据,不能因此读取或确认私人原件。 + +## 5. 公开扩展:现有能力与四要素申请 + +现有公开面参考 Backend `pkg/extension/extension.go`、`host.go` 与 `surface.txt`,不导入 Backend internal。 +当前 `SurfaceVersion=2.11.0-experimental` 的源码声明不是部署或消费者可用性证明;组合必须核对提供者及消费者实际固定版本。 + +| 现有能力 | 提供者/消费者 | 足够性与边界 | +|---|---|---| +| EXT-18 `AdminProvider.IsAdmin()`/`Request.HostProjectID` | Backend 分发 Host → RDM | 平台管理身份与宿主项目定位;不能证明系统分项授权、账号有效态、RDM 项目关系或业务访问 | +| EXT-19 `AccountLister.ListAccounts(cursor, limit)`,`AccountEntry{Owner,Valid}` | Backend → 授权目录消费者 | 最小身份目录,非资料页;不提供姓名、联系方式、多职绑定或写权;缺能力不允许新增产品路径无校验继续 | +| EXT-8b `ResourceAuthzQuery`/`ResourceAuthorizerV2`/注册口 | Backend 构造受信查询 → RDM 提供策略 → Backend 执行 | 现有六要素为 actor/action/resourceType/resourceId/owner/projectId;读取专用,V2 对域内读权威(含自有命中);未注册的 V1 回落不能替代 I1 必需的资源限制 | + +以下是 U1 冻结的公开扩展申请四要素,符号为合同草案,I1 不新增导出实现、不更改 surface 版本。 + +| 申请 | 场景 | 希望的公开符号/路径 | 现有注册点为何不足 | 兼容方式 | +|---|---|---|---|---| +| IAM-P 政策与动作目录 | UI/命令/工具需查询 scope、cap、有效绑定、权限解释与版本;角色通用权威迁移后供 RDM 同源判定 | 可选 `PermissionCatalogProvider`、`AuthorizationProvider`;公开目录/判定/解释与授权管理预览提交服务 | `IsAdmin` 只有布尔身份;`ActionMeta` 在 RDM 内部;EXT-8b 仅资源读,无法供系统管理或管理写入事务使用 | 新可选接口及版本化 DTO;旧 Host 不加必实现方法;RDM legacy 适配与新权威切换分别固定版本 | +| IAM-D 受控人员目录 | 项目选人需要稳定身份、有效态和最小辨识字段,系统资料管理需独立授权 | 可选 `AccountDirectoryProvider` 与版本化查询/投影 DTO;既有 EXT-19 保留 | `AccountEntry` 仅 owner+valid,没有字段权限、搜索模式、可披露辨识资料及多职;私自扩展所有账号资料会扩大披露 | 新可选接口;旧 `ListAccounts` 不改变返回隐私范围;不得向旧消费者塞入联系方式 | +| IAM-R 资源与当前政策上下文 | 跨原件/草稿/正文/审计分类,查询当前 policy/duty epoch,撤权影响读面与后台提交 | 新版资源查询/决策 DTO 及可选政策上下文提供者;保留 `ResourceAuthorizerV2` | 六要素无分类、职责/版本/epoch;bool 返回不能携带可披露原因与版本,读适配器不能承担写入事务 | 新版本资源接口或明确 DTO 增补;禁止未知字段零值放行,必需提供者缺失即拒绝;版本协商与双读仅作诊断 | +| IAM-C 账号本人恢复 | 管理者只能提出恢复,账号本人经独立证明才能取得可兑换设密能力 | 公开恢复提案/本人确认/兑换回执合同,隔离恢复凭据与业务会话 | `IsAdmin`、目录、资源授权均不提供本人证明或安全凭据交付,不能用个人资料代替 | 新路径/可选能力,不向普通管理员交付目标账户可兑换 Key;旧不满足证明的线上路径明确拒绝 | + +| DTO | 必须冻结的字段与版本语义 | +|---|---| +| `PermissionDescriptor` | `actionId`、`label`、`description`、`scope`、`resourceTypes`、`group`、`conditions`、`delegationLevel`、`risk`、`descriptorVersion`;稳定 ID 不随改名变化,新增项默认拒绝 | +| 授权查询/解释 | 受信 actor、actionId、资源定位与实际归属、当前状态/版本、选用 binding;输出 allow/deny、可披露 reason、来源链、`authorityEpoch`;解释只限本人或有权管理对象 | +| 目录查询/投影 | 稳定 userId/owner、valid、获授权姓名/登录名/工号/职位投影、cursor/limit、精确/模糊模式及字段/状态过滤、`directoryVersion`;未授权字段不返回、不参与匹配;电话、邮箱、部门、备注只在独立授权资料面披露 | +| 管理 patch/预览 | 固定对象 ID、expectedVersion、authorityEpoch、patch 摘要、幂等键;预览不代替提交授权,非法对象/越 cap/冲突整体拒绝;跨模块写入不冒充单库事务 | +| 资源决策扩展 | 受信分类(私人/发布知识/受控正文/业务审计)、resourceVersion、policyVersion、dutyVersion、authorityEpoch 与决策原因;缺失或不认识分类拒绝,禁止请求自报归属 | + +目录 r1 的 scope 修订不能只改显示标签;执行端必须同时拒绝错误作用域写入。公开版本须同时登记导出面快照、版本号、变更表、提供者/消费者合同及固定组合。 +缺必需能力、未知动作/字段/状态、政策读取失败、归属不一致、过期版本、失效绑定均 fail-closed;不能用 `Host.IsAdmin()`、缓存 allow、V1 粗粒度授权或手填 owner 兜底。 +通用迁移前 legacy 台账只在其声明范围使用;迁移时保留 userId/owner/roleId/projectId/createdBy,禁止双主写入,不生成旧管理员的永久业务 grant,回滚不复活旧越权。 + +## 6. 账号恢复证明与交付 + +普通管理员仅发起恢复提案;本人须使用管理员不能单方改写或取得的既有有效会话确认,或预先建立的本人恢复证明,才取得可兑换设密能力。 +姓名、电话、邮箱、工号均为可选资料,不自动成为恢复证明;新证明建立或更换不能由恢复提案管理员单独完成。 +无独立本人验证条件时拒绝线上恢复,不向普通管理员签发可兑换的目标账户 Key;异常人工恢复由另行批准的 owner 操作处理。 +恢复能力限制为一次消费、目标账号、设密用途与有效期,不生成业务会话;消费后本人使用正式凭证重新认证。 +本合同不证明恢复实现已具备;U3须验证“管理员提出恢复后自行设密接管业务身份”负例,旧路径未收口前 R7 不得闭合。 + +## 7. 验收矩阵与证据边界 + +R1–R20 到 RDM 原 UR/SR 的映射由 RDM `docs/proposals/2026-10-13-iam-i1-contract-adoption.md` 维护,原需求 ID 不重新编号。 + +| 判据 | I1 文档核对 | 行为验收归属 | +|---|---|---| +| 系统动作不可由项目 override 或 `project.settings` 获取 | §2逐动作 scope/旧命令映射 | U2:普通成员合法本项目设置成功,全局角色/cap/移交拒绝 | +| 创建者仍受有效角色 cap,遗留覆盖不越界 | §1/§3 | U2:创建者 cap=false、角色动作未定义、停用/换岗及旧 allow 负例 | +| 管理员无业务身份旁路,审计独立授权 | §2/§4 | U2:admin/Host.IsAdmin 非成员及无 audit grant 拒绝;合法成员 audit grant∩cap 正例 | +| 私人资源与受控正文分开 | §4/EXT-8b 消费边界 | U2 可达路径;U5/U6 统一资源及职责、当前版本完整验收 | +| 一职多人、一人多职、项目明确选用 | §1/§3/IAM-P | U4/U5:新任命不扩既有项目、解绑再任命不复活、完整路径不拼接 | +| 账号目录敏感投影与本人恢复 | §5/§6 | U3:未授权字段不匹配/不返回;管理员不能取得本人兑换凭据 | +| 冻结文档轮次、撤权与迟到事件 | §3/§4/IAM-R | U6/U8:当前职责与 cap 重验;旧卡/Surface/SSE/后台最终提交拒旧 | +| 单权威迁移、版本兼容、完整组合 | §1/§5 | U4/U9:旧→新差异、双主拒绝、当前固定提供者/消费者和制品验收 | + +U1 只检查文档差异、链接、动作与 scope 一致性、R1–R20 追溯及原方案摘要保持;无行为变更,不运行业务测试。 +本地检查来源为 SELF;审核与正式验收须按任务规则同步对象、独立重放并核验 GATE/REPLAY 身份及 SHA。 +公开实现、业务测试、浏览器、真实模型、数据库迁移、服务运行、部署与正式验收均不能用本合同的保存结果代替。 diff --git a/docs/proposals/INDEX.md b/docs/proposals/INDEX.md index fca9033..cd89d1c 100644 --- a/docs/proposals/INDEX.md +++ b/docs/proposals/INDEX.md @@ -6,6 +6,11 @@ ## 先看哪一份 +- [IAM I1 权限边界与公开扩展合同 r1](2026-10-13-iam-i1-permission-contract.md): + 依据已批准的[用户、职位角色与分层权限统一方案 r1](2026-10-13-identity-role-permission-plan.md) + (Documents `a088809`)冻结系统/项目/资源边界、管理员无业务 bypass、创建者 cap、独立 `audit.read` 与公开扩展四要素。 + 2026-10-13 已授权 I1(U1–U2),终点为本地实施与验证后人工评审;多职、通用角色迁移、资料目录、矩阵及完整运行验收仍按后续单元推进,不以合同保存宣称已交付。 + - [快慢通道展示与动态工作摘要方案 r1.1](2026-10-12-fast-slow-channel-display.md): 运行卡呈现状态、已完成工作、当前发现与剩余项;四层阅读、阶段成果、来源、异常恢复及 U1–U4。 2026-10-12 方案设计已批准(阶段 1–4);首批仅 U1;[U1 实施计划 r1](2026-10-12-fast-slow-channel-display-u1-plan.md) 待阶段 5 批准;业务实施和运行验收 NOT_RUN。 -- 2.54.0 From b91e298c15e16be921d953006302676d4549caef Mon Sep 17 00:00:00 2001 From: weichen Date: Tue, 13 Oct 2026 10:27:09 +0000 Subject: [PATCH 03/10] Clarify fail-closed I1 host capability boundaries Why: Existing public host contracts cannot prove source ownership, scoped revocation or private artifact filtering. Evidence: The I1 documentation consistency checker preserves the approved plan digest and fixed RDM core rules; behavior verification is recorded in the owning task. Impact: Record conservative I1 defaults and explicit follow-up provider requirements without adding public implementations. Refs: IAM plan r1, I1 U1-U2 --- .../2026-10-13-iam-i1-permission-contract.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docs/proposals/2026-10-13-iam-i1-permission-contract.md b/docs/proposals/2026-10-13-iam-i1-permission-contract.md index 2a43a91..7280a2e 100644 --- a/docs/proposals/2026-10-13-iam-i1-permission-contract.md +++ b/docs/proposals/2026-10-13-iam-i1-permission-contract.md @@ -135,6 +135,23 @@ I1 私人 pending/rejected 草稿仅提案人可读与决定;知道 proposalId 缺必需能力、未知动作/字段/状态、政策读取失败、归属不一致、过期版本、失效绑定均 fail-closed;不能用 `Host.IsAdmin()`、缓存 allow、V1 粗粒度授权或手填 owner 兜底。 通用迁移前 legacy 台账只在其声明范围使用;迁移时保留 userId/owner/roleId/projectId/createdBy,禁止双主写入,不生成旧管理员的永久业务 grant,回滚不复活旧越权。 +## 5a. 当前公开能力缺口的 I1 处理 + +以下是 U2 收口所需的默认拒绝策略,不是后续能力已实现声明;本地候选的实际验证见 I1 评审记录。 + +- 未归属事件盘点、归属迁移、全量 outbox 队列必须另有 owner 批准的精确资源范围。I1 的 `Runtime.SetLegacyAccessAuthorizer` 为实例内受信集成点,查询绑定 actor/action/project/seq;不存在用户自授命令,不持久化、不跨重启继承。无提供者或提供者失败即拒绝。迁移另检查目标 `knowledge.publish`。 +- 当前 `Host.KnowledgeDelete` 仅能删当前 owner 的整个插件前缀,不能限定项目。`rdm.knowledge.revoke` 先验证目标项目 `knowledge.publish`,再明确拒绝执行,不能借 A 项目 grant 删除 B 项目索引。 +- `rdm.init` 当前实现读服务器路径并写全量未归属域,公开命令拒绝;可信本地 CLI/bootstrap 仍需操作授权。本轮不另造公开目录读取和项目初始化能力。 +- Host↔RDM 绑定须证明两个项目的管理资格;旧映射行与请求中的 HostProjectID 都不是此证明。I1 的实例内受信 Host 项目授权集成点必须绑定 actor/action/两个实际项目,缺失即拒绝绑定、解绑及基于映射的共享访问。旧映射不自动升级成授权证明。 +- 现 Backend `project/list` 授权成功后会返回项目下全部 owner 工件元数据,缺少逐资源 owner 裁剪,I1 拒绝此聚合共享。项目级 search 无发布分类证明时也拒绝跨 owner 检索;自有私人资源的具体读取路径保留。 +- 项目聚合 DTO 尚无安全的按阶段裁剪投影时,要求当前完整 `doc.read`;章节/文档接口按实际对象检查阶段。业务审计另需显式 `audit.read`。后续安全裁剪不得用 UI 隐藏代替执行端检查。 +- status/resume/cancel 按私人批次的真实 owner 判定;恢复另检查当前项目写权及生命周期,取消仅保留本人停止私人任务的能力。opID 重放必须绑定操作、项目、主体与实际资源,冲突不能返回另一资源回执。 + +| 扩展申请补充 | 场景 | 希望的公开符号/路径 | 现有注册点不足 | 兼容方式 | +|---|---|---|---|---| +| IAM-K 项目级知识撤销 | 合法 A 项目发布者仅撤销 A 已发布资源 | 可选项目/资源限定的知识撤销 DTO 与提供者;实际命名待模块评审 | EXT-9 whole-prefix 删除跨同一 owner 多项目;无可靠逐 ref 删除契约 | 新可选公开接口,旧缺失拒绝;固定提供者/消费者版本,不改 pins 猜测能力 | +| IAM-H 宿主项目管理证明与资源裁剪 | 绑定需双方管理证明,共享读取需当前项目授权与实际资源分类 | 受信 Host 项目授权查询/证明及逐件资源投影提供者;实际命名待模块评审 | EXT-18 仅给当前 actor 的管理员位与项目定位;EXT-8b project/list 是整面 bool,无逐件过滤 | 新可选契约、权威对象与版本;旧映射只作定位,缺失默认拒绝;RDM 私有受信适配不能冒充 Backend 公共实现 | + ## 6. 账号恢复证明与交付 普通管理员仅发起恢复提案;本人须使用管理员不能单方改写或取得的既有有效会话确认,或预先建立的本人恢复证明,才取得可兑换设密能力。 -- 2.54.0 From b8fcf01062b9a57b489a52f34077bceca7de7af4 Mon Sep 17 00:00:00 2001 From: weichen Date: Tue, 13 Oct 2026 10:39:21 +0000 Subject: [PATCH 04/10] Record the I1 local implementation candidate and review boundaries Why: The approved plan needs traceable local progress and explicit capability limitations before human implementation review. Evidence: The owning task cards retain full local SELF startup, sync, red and green outputs; final combination checks and independent review are pending in this checkpoint. Impact: Preserve the original approved plan and identify I1 behavior, deferred capabilities and the next separately authorized unit. Refs: IAM plan r1; I1 U1-U2 --- .../2026-10-13-iam-i1-permission-contract.md | 1 + docs/proposals/2026-10-13-iam-i1-review.md | 61 +++++++++++++++++++ docs/proposals/INDEX.md | 1 + 3 files changed, 63 insertions(+) create mode 100644 docs/proposals/2026-10-13-iam-i1-review.md diff --git a/docs/proposals/2026-10-13-iam-i1-permission-contract.md b/docs/proposals/2026-10-13-iam-i1-permission-contract.md index 7280a2e..329e353 100644 --- a/docs/proposals/2026-10-13-iam-i1-permission-contract.md +++ b/docs/proposals/2026-10-13-iam-i1-permission-contract.md @@ -145,6 +145,7 @@ I1 私人 pending/rejected 草稿仅提案人可读与决定;知道 proposalId - Host↔RDM 绑定须证明两个项目的管理资格;旧映射行与请求中的 HostProjectID 都不是此证明。I1 的实例内受信 Host 项目授权集成点必须绑定 actor/action/两个实际项目,缺失即拒绝绑定、解绑及基于映射的共享访问。旧映射不自动升级成授权证明。 - 现 Backend `project/list` 授权成功后会返回项目下全部 owner 工件元数据,缺少逐资源 owner 裁剪,I1 拒绝此聚合共享。项目级 search 无发布分类证明时也拒绝跨 owner 检索;自有私人资源的具体读取路径保留。 - 项目聚合 DTO 尚无安全的按阶段裁剪投影时,要求当前完整 `doc.read`;章节/文档接口按实际对象检查阶段。业务审计另需显式 `audit.read`。后续安全裁剪不得用 UI 隐藏代替执行端检查。 +- 新 outbox 回执以事务内 `rdm_audit_outbox_scope` 记录实际 project/owner,只送入对应 owner 的 Host;旧未知归属回执保持 pending,禁止按下一调用者猜测归属。该关联表为新增领域元数据,无历史自动归属,本轮未执行生产数据库变更。 - status/resume/cancel 按私人批次的真实 owner 判定;恢复另检查当前项目写权及生命周期,取消仅保留本人停止私人任务的能力。opID 重放必须绑定操作、项目、主体与实际资源,冲突不能返回另一资源回执。 | 扩展申请补充 | 场景 | 希望的公开符号/路径 | 现有注册点不足 | 兼容方式 | diff --git a/docs/proposals/2026-10-13-iam-i1-review.md b/docs/proposals/2026-10-13-iam-i1-review.md new file mode 100644 index 0000000..8622d33 --- /dev/null +++ b/docs/proposals/2026-10-13-iam-i1-review.md @@ -0,0 +1,61 @@ +# IAM I1 实施候选与人工评审记录 + +负责人:weichen;实施协调:Codex;日期:2026-10-13;状态:阶段 6 本地候选,验证收口中,人工未评审。 + +本页维护已批准统一方案 I1 的实际进展;原方案原文摘要保持不变。本轮只执行 U1–U2,交付终点为“给我评审”,不启动后续增量。 + +## 批准对象与当前候选 + +- [统一方案 r1](2026-10-13-identity-role-permission-plan.md):用户已批准并授权 I1=U1–U2;原文 SHA256 `39b8e9a6e078dc509bd80118c1807ce6ed23e4466e5902b51f4bfa255d55c0a1`,Documents `a088809` 保存原批准快照。 +- [I1 权限合同 r1](2026-10-13-iam-i1-permission-contract.md):稳定动作与 scope、角色/平台 cap、独立业务审计、隐私及公开扩展申请。提供者缺失默认拒绝,合同文档不能证明接口已提供。 +- RDM 初始 R0:`b1fe932883d2a55f0373bb0930950da3d12d2b5e`;同步后的 main:`2f1a36f55a4979262e386150af26085d4d15b2a1`,包含职责批量分配与权限覆盖删除。两项注册冲突已保留主干功能并接入身份包装;组合结果须重新测试。 +- RDM 固定行为候选:`b907bab440446a1f348e51f4056cab1c2ea339c8`(代码截至 `53bedd335b59159145ecd5abbc22b5bfbdefcabb`,后者之后仅同步任务卡)。最终收据与记录提交可能前进,测试有效性按行为文件/组件是否变化核对。 +- [Dev 任务卡](/home/weichen/projects/Agent-System-Dev-wt-feature-iam-i1-permission-boundaries/.task/feature-iam-i1-permission-boundaries.md) 与 [RDM 任务卡](/home/weichen/projects/Agent-System-RDM-wt-feature-iam-i1-permission-boundaries/.task/feature-iam-i1-permission-boundaries.md) 保存启动、红测、失败、同步、绿测完整工具输出,来源均为本地 SELF。 + +## 本次行为变化 + +| 边界 | 候选中的具体变化 | 对应要求 | +|---|---|---| +| 系统与项目 | role/cap/任命/移交走独立受保护系统 action;项目 settings 不能授予这些动作;当前 actor 必须匹配 Host.Owner。新增 unset 也检查注册项目 scope、实际成员与当前管理权 | R6/R8/R12 的 I1 部分 | +| 当前资格与 cap | 创建者、管理者与成员均受平台 cap;已绑定职位先检查存在/有效/动作定义与 cap;停用、换岗及旧 allow 不能回落或越界。矩阵解释与执行共用评估器 | R9/R11 的当前单绑定部分 | +| 项目业务访问 | 去掉域管理员和 Host.IsAdmin 的跨项目业务旁路;项目清单按当前成员关系;归档仍可由合法 archive 权限恢复,其他业务写入拒绝 | R7/R8/R11 的 I1 部分 | +| 业务审计 | 新独立 audit.read,平台 cap 初始关闭,关系默认不授予;实际授权成员还须当前完整 doc.read。聚合审计含正文预览,不能借阶段受限读权读全项目 | R7/R18 的 I1 部分 | +| 正文读取与导出 | 章节/文档按真实对象检查阶段;标题导出只接受唯一匹配、按同一解析目标授权与生成;差异、审核状态、法规快照检查阶段/真实项目归属。无法安全阶段裁剪的聚合 DTO 要求完整读权 | R12/R18 的 I1 部分 | +| 私人原件与草稿 | pending/rejected 私人提案只允许提案人查看/采纳/拒绝,采纳还验编制职责;上传原件只允许本人确认;管理上传视图为元数据;历史上传清单不跨项目混入 | R18 的当前可达路径 | +| 私人批次 | status/resume/cancel 先按真实 owner 判定;私有与不存在统一不透明拒绝;恢复另验当前 doc.write/成员关系/职位/cap/生命周期,不能凭旧属主身份重新入队;本人停止私人流程保留 | R11/R12/R18 的当前入口 | +| 模型输入与写回结果 | draft.compose 发模型前需要目标正文读取范围;结论确认在返回 stored text 前需完整 doc.read。写权不能代替读权 | R12/R18 的当前入口 | +| 回执归属 | opID 使用 JSON 元组绑定操作/项目/主体/资源,短路与事务内重放一致,旧不可信 key 拒绝。outbox 新回执以同事务关联真实项目与 owner,只送入对应 Host;旧未知归属项保留 pending | R12/R18/R20 的当前入口 | + +完整多职位、项目明确选用绑定、账号有效态、恢复证明、三权全模型、政策 epoch 与所有后台最终提交撤权均未在 I1 实现。这里的 R 行不是完整 R1–R20 关闭声明。 + +## 验证与证据 + +U1 为规范文本更新:核对本地链接、17 个稳定 action/scope、R1–R20 追溯、批准原文摘要及固定 RDM 初始基线的 08 核心 R1–R5;无业务行为,不制造文本单元测试。 +U2 先运行真实临时 SQLite 与已注册命令负例,再修改实现并保留相应合法流程。旧测试中期待 admin 跨项目、停用角色回落、他人代确认等断言按批准合同修正,正常路径仍通过真实授权夹具运行;没有删除失败用例以绕过测试。 + +| 检查 | 当前结果 | 证据边界 | +|---|---|---| +| 初始负例与审阅补漏 | 已真实复现并记录;红测保留 | 包含越权写入、实际正文/原件元数据回执、未知归属写入与跨 owner 审计投递;编译失败与夹具失败也保留,不冒充行为证据 | +| 新回归与相关旧流程 | 局部绿测 SELF,最终组合收口中 | 工具记录命令、HEAD、dirty 摘要与完整输出,不能替代固定组合全量验证 | +| RDM make test | 运行中 | 构建真实组合产品、Web 合同、Go 全量;不包含部署/生产数据验收 | +| Dev make test/文档检查 | 待执行最终固定组合 | 含工作树、gitlink、治理、模块/UI/命令组合检查;本轮未改业务 UI | +| 独立提前源码审阅与 focused 重放 | 复审中 | 审阅者 i1_security_review;不是用户批准、平台账号独立批准或受信 CI | +| 正式验收/CI/浏览器/真实模型/生产迁移/部署 | NOT_RUN | 模型注册描述已按实际拒绝边界改写;未建立本轮固定模型任务级前后基线,测试使用 mock Host,不能声称模型行为通过。正式阶段应固定模型/配置/任务集,补真实对照及浏览器链路 | + +## 必须审阅的兼容影响 + +1. 新 audit.read 初始不授予任何人。合法系统管理者先开平台上限,角色有资格后由合法项目管理者授予业务审计;此前 admin/创建者自动审计行为停止。 +2. KnowledgeDelete 只能按当前账号整插件前缀删除,故项目 revoke 明确拒绝,等待项目/资源限定公开接口;公开 rdm.init 也因读服务器目录并写全量未归属域而拒绝,可信本地操作保留。 +3. Host↔RDM 绑定、解绑及映射共享读取需可信双方项目授权提供者;当前未安装生产提供者,缺失默认拒绝。project/list 的整批私人工件元数据共享关闭;现项目级跨 owner search 缺发布分类证明也拒绝。自有资源具体读取和明确的 RDM 项目知识读面保留;不是完整共享 RAG 已验收声明。 +4. 存量未归属盘点/迁移/全量 outbox 状态需独立范围授权;实例内可信集成不是用户自授接口,重启不继承。旧未知归属 outbox 保留 pending,新增关联表仅处理之后的可证明来源;不推测历史 owner、不丢记录。本轮未变更生产 DB。 +5. 有阶段范围的用户无法读取尚未安全裁剪的全项目聚合 DTO;后续应逐对象投影与重算计数。失效绑定和旧不可信 opID 回执拒绝,不能把兼容回退当作当前资格。 + +这些限制是避免当前公开契约不足扩大授权的 I1 处理;正式产品恢复对应能力需固定提供者/消费者的新公开版本与独立正反例,不能靠当前平台管理员位补足。 + +## 进展与下一步 + +U1 权限合同已形成;U2 当前 RDM 可达路径整改已形成本地候选,等待组合验证、提前复审和用户阶段 6 评审。未推送、未创建 PR、未合入、未部署,保留两个独立工作区及全部失败收据。 + +首选下一任务为已规划 I2/U3:账号可选资料、受控人员目录与本人恢复证明。推荐理由是先建立可信身份/有效态与安全恢复边界,随后才能实施 Backend 通用角色和多绑定 U4。前置条件:用户批准 I1 实施结果并另行授权 U3;核对已有账号目录实现,复用最小 EXT-19 边界;公开提供者先审接口,不能绕过 pins。预期产物:资料全空合法、字段授权搜索不泄漏、项目目录只投影获准辨识字段、普通管理员不能获取目标本人可兑换设密能力的真实负例及成功本人流程。此建议不启动新任务。 + +公开 Host 能力缺口另有 IAM-H/IAM-K 申请;可与 U3 的公开提供者工作协调,恢复共享/撤销前先完成固定契约,不以设计文档存在放行。 diff --git a/docs/proposals/INDEX.md b/docs/proposals/INDEX.md index cd89d1c..9009a8a 100644 --- a/docs/proposals/INDEX.md +++ b/docs/proposals/INDEX.md @@ -10,6 +10,7 @@ 依据已批准的[用户、职位角色与分层权限统一方案 r1](2026-10-13-identity-role-permission-plan.md) (Documents `a088809`)冻结系统/项目/资源边界、管理员无业务 bypass、创建者 cap、独立 `audit.read` 与公开扩展四要素。 2026-10-13 已授权 I1(U1–U2),终点为本地实施与验证后人工评审;多职、通用角色迁移、资料目录、矩阵及完整运行验收仍按后续单元推进,不以合同保存宣称已交付。 + 实际进展与证据见 [I1 实施候选与评审记录](2026-10-13-iam-i1-review.md),用户实施评审尚未完成。 - [快慢通道展示与动态工作摘要方案 r1.1](2026-10-12-fast-slow-channel-display.md): 运行卡呈现状态、已完成工作、当前发现与剩余项;四层阅读、阶段成果、来源、异常恢复及 U1–U4。 -- 2.54.0 From c023551f2af10e5113f444d8f990402e54353970 Mon Sep 17 00:00:00 2001 From: weichen Date: Tue, 13 Oct 2026 10:46:39 +0000 Subject: [PATCH 05/10] Record verified I1 local checks and pending human review Why: Separate observed local implementation and test results from formal acceptance, CI and deployment. Evidence: Complete SELF outputs and fixed subjects are in the owning Dev and RDM task cards; independent preliminary review passed on dfb9c407. Impact: Update review progress and explicit follow-up boundaries only; preserve approved plan and permission contract. Refs: IAM I1 U1-U2 --- docs/proposals/2026-10-13-iam-i1-review.md | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/docs/proposals/2026-10-13-iam-i1-review.md b/docs/proposals/2026-10-13-iam-i1-review.md index 8622d33..685926a 100644 --- a/docs/proposals/2026-10-13-iam-i1-review.md +++ b/docs/proposals/2026-10-13-iam-i1-review.md @@ -1,6 +1,6 @@ # IAM I1 实施候选与人工评审记录 -负责人:weichen;实施协调:Codex;日期:2026-10-13;状态:阶段 6 本地候选,验证收口中,人工未评审。 +负责人:weichen;实施协调:Codex;日期:2026-10-13;状态:阶段 6 本地实施与自检已完成,人工未评审;当前固定对象与最终收据以任务卡为准。 本页维护已批准统一方案 I1 的实际进展;原方案原文摘要保持不变。本轮只执行 U1–U2,交付终点为“给我评审”,不启动后续增量。 @@ -9,7 +9,7 @@ - [统一方案 r1](2026-10-13-identity-role-permission-plan.md):用户已批准并授权 I1=U1–U2;原文 SHA256 `39b8e9a6e078dc509bd80118c1807ce6ed23e4466e5902b51f4bfa255d55c0a1`,Documents `a088809` 保存原批准快照。 - [I1 权限合同 r1](2026-10-13-iam-i1-permission-contract.md):稳定动作与 scope、角色/平台 cap、独立业务审计、隐私及公开扩展申请。提供者缺失默认拒绝,合同文档不能证明接口已提供。 - RDM 初始 R0:`b1fe932883d2a55f0373bb0930950da3d12d2b5e`;同步后的 main:`2f1a36f55a4979262e386150af26085d4d15b2a1`,包含职责批量分配与权限覆盖删除。两项注册冲突已保留主干功能并接入身份包装;组合结果须重新测试。 -- RDM 固定行为候选:`b907bab440446a1f348e51f4056cab1c2ea339c8`(代码截至 `53bedd335b59159145ecd5abbc22b5bfbdefcabb`,后者之后仅同步任务卡)。最终收据与记录提交可能前进,测试有效性按行为文件/组件是否变化核对。 +- RDM 已独立审阅的行为候选:`dfb9c407858173ba501a623631c17643bd1985b5`(代码截至 `4e3d7665e973838b77d6e81164b8d70540de907d`,后者之后仅同步任务卡;之后旧测试断言/import与证据记录继续收口)。最终收据与记录提交可能前进,测试有效性按行为文件/组件是否变化核对。 - [Dev 任务卡](/home/weichen/projects/Agent-System-Dev-wt-feature-iam-i1-permission-boundaries/.task/feature-iam-i1-permission-boundaries.md) 与 [RDM 任务卡](/home/weichen/projects/Agent-System-RDM-wt-feature-iam-i1-permission-boundaries/.task/feature-iam-i1-permission-boundaries.md) 保存启动、红测、失败、同步、绿测完整工具输出,来源均为本地 SELF。 ## 本次行为变化 @@ -36,10 +36,10 @@ U2 先运行真实临时 SQLite 与已注册命令负例,再修改实现并保 | 检查 | 当前结果 | 证据边界 | |---|---|---| | 初始负例与审阅补漏 | 已真实复现并记录;红测保留 | 包含越权写入、实际正文/原件元数据回执、未知归属写入与跨 owner 审计投递;编译失败与夹具失败也保留,不冒充行为证据 | -| 新回归与相关旧流程 | 局部绿测 SELF,最终组合收口中 | 工具记录命令、HEAD、dirty 摘要与完整输出,不能替代固定组合全量验证 | -| RDM make test | 运行中 | 构建真实组合产品、Web 合同、Go 全量;不包含部署/生产数据验收 | -| Dev make test/文档检查 | 待执行最终固定组合 | 含工作树、gitlink、治理、模块/UI/命令组合检查;本轮未改业务 UI | -| 独立提前源码审阅与 focused 重放 | 复审中 | 审阅者 i1_security_review;不是用户批准、平台账号独立批准或受信 CI | +| 新回归与相关旧流程 | 通过(SELF);独立重跑 39 个顶层 I1 回归 | 工具记录命令、HEAD、dirty 摘要与完整输出;本轮编译失败、夹具失败和“no tests to run”均保留,不计为行为通过 | +| RDM make test | 通过(SELF),对象 ef075bd1 | 完整收据 ab592b80c858543f…见 RDM 任务卡:组合产品构建、29 项 Web 检查、Go 全量均退出 0;不包含部署/生产数据验收 | +| Dev make test/文档检查 | 已通过(SELF),对象 0ab70b0c;最终文档记录后的对象另见任务卡 | 完整收据 b12914e5136cc405…见 Dev 任务卡;含工作树、gitlink、治理、模块/UI/命令组合检查,本任务未改业务 UI。最终文字记录收口后按固定 gitlink 再核验,新增收据由工具记录,不复制输出 | +| 独立提前源码审阅与 focused 重放 | 通过,39 组顶层回归全部通过(本地) | 审阅者 /root/i1_security_review 未参与源码写入;对象 dfb9c407,独立重跑命令与完整 SELF 工具收据见 RDM 任务卡;不是用户批准、平台账号独立批准或受信 CI | | 正式验收/CI/浏览器/真实模型/生产迁移/部署 | NOT_RUN | 模型注册描述已按实际拒绝边界改写;未建立本轮固定模型任务级前后基线,测试使用 mock Host,不能声称模型行为通过。正式阶段应固定模型/配置/任务集,补真实对照及浏览器链路 | ## 必须审阅的兼容影响 @@ -54,8 +54,14 @@ U2 先运行真实临时 SQLite 与已注册命令负例,再修改实现并保 ## 进展与下一步 -U1 权限合同已形成;U2 当前 RDM 可达路径整改已形成本地候选,等待组合验证、提前复审和用户阶段 6 评审。未推送、未创建 PR、未合入、未部署,保留两个独立工作区及全部失败收据。 +U1 权限合同与需求追溯已完成;U2 当前 RDM 可达路径整改、本地组合自检和独立提前复审已完成,等待用户阶段 6 评审。独立提前源码复审已通过;后续测试记录更新必须确认生产源码与此对象等价。未推送、未创建 PR、未合入、未部署,保留两个独立工作区及全部失败收据。 首选下一任务为已规划 I2/U3:账号可选资料、受控人员目录与本人恢复证明。推荐理由是先建立可信身份/有效态与安全恢复边界,随后才能实施 Backend 通用角色和多绑定 U4。前置条件:用户批准 I1 实施结果并另行授权 U3;核对已有账号目录实现,复用最小 EXT-19 边界;公开提供者先审接口,不能绕过 pins。预期产物:资料全空合法、字段授权搜索不泄漏、项目目录只投影获准辨识字段、普通管理员不能获取目标本人可兑换设密能力的真实负例及成功本人流程。此建议不启动新任务。 公开 Host 能力缺口另有 IAM-H/IAM-K 申请;可与 U3 的公开提供者工作协调,恢复共享/撤销前先完成固定契约,不以设计文档存在放行。 + +## 实施调用与单元记录 + +实施引擎为 native Codex,委派单元为权限合同、初始负例、旧测试对齐、幂等隐私补漏与独立提前审阅;无外部模型路由绑定/回退/detached run,实际服务模型未独立证明。source_kind=plan,source_digest 为上方批准原文摘要;plan_checkpoint 为 Documents a088809。行为单元 U2 的原始红→绿观察保存于当时工具收据,不能从最终 diff 重构;U1 为非行为文档核对。单位 canonical commit 和完整 changed_files 由所属仓的当前分支与任务卡追溯。此本地交付跳过推送、PR、CI与合入 shipping tail。 + +Dev 同步 main 到 143e636736 后随主干物化 Backend 15566f9a、Core 5773e740、Frontend c294835f、UI 2c4322ef;本任务相对该 main 只改变 Documents、PROJECT 导航与任务卡。RDM 产品仍按自身 pins 固定 Backend 0f192a48、Frontend 4965de26、UI bfecf8b5,未自行推进 pins;两套组合的检验与状态分开,不用 Dev 测试证明 RDM 的提供者能力。 -- 2.54.0 From 2d5398e988459b27e5e648fac0b152ee74c4d1aa Mon Sep 17 00:00:00 2001 From: weichen Date: Tue, 13 Oct 2026 14:31:56 +0000 Subject: [PATCH 06/10] Record user approval of the I1 implementation Why: The user approved the previously delivered local implementation and compatibility effects. Evidence: This chat reply says approval; its objects remain c023551 Documents, b93908e RDM and 72ed8b4 Dev. Execution receipts are separate from this human decision. Impact: Stage 6 passes and planned stage 7 begins; acceptance, shipping, later increments and production operations are not approved by substitution. Refs: I1 implementation review on 2026-10-13 --- docs/proposals/2026-10-13-iam-i1-review.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/proposals/2026-10-13-iam-i1-review.md b/docs/proposals/2026-10-13-iam-i1-review.md index 685926a..d9ad67d 100644 --- a/docs/proposals/2026-10-13-iam-i1-review.md +++ b/docs/proposals/2026-10-13-iam-i1-review.md @@ -65,3 +65,7 @@ U1 权限合同与需求追溯已完成;U2 当前 RDM 可达路径整改、本 实施引擎为 native Codex,委派单元为权限合同、初始负例、旧测试对齐、幂等隐私补漏与独立提前审阅;无外部模型路由绑定/回退/detached run,实际服务模型未独立证明。source_kind=plan,source_digest 为上方批准原文摘要;plan_checkpoint 为 Documents a088809。行为单元 U2 的原始红→绿观察保存于当时工具收据,不能从最终 diff 重构;U1 为非行为文档核对。单位 canonical commit 和完整 changed_files 由所属仓的当前分支与任务卡追溯。此本地交付跳过推送、PR、CI与合入 shipping tail。 Dev 同步 main 到 143e636736 后随主干物化 Backend 15566f9a、Core 5773e740、Frontend c294835f、UI 2c4322ef;本任务相对该 main 只改变 Documents、PROJECT 导航与任务卡。RDM 产品仍按自身 pins 固定 Backend 0f192a48、Frontend 4965de26、UI bfecf8b5,未自行推进 pins;两套组合的检验与状态分开,不用 Dev 测试证明 RDM 的提供者能力。 + +## 阶段 6 人工批准(2026-10-13,北京时间) + +用户在本页 c023551 对应的实施候选与兼容影响交付后回复“批准”。阶段 6 实施与自检结论:通过;对象为 Documents c023551、RDM b93908e、Dev 72ed8b4。该结论不代签尚未完成的阶段 7 验收,也不启动后续 U3–U9 或生产部署。恢复时已有主干推进,正式测试将固定同步后的对象,报告正常/异常/边界/回归证据与缺项,再请求用户验收;原获批对象和所有早期失败收据保留。 -- 2.54.0 From 064d4b5f68a4d3b0e13bb0515c13f7477279be0f Mon Sep 17 00:00:00 2001 From: weichen Date: Tue, 13 Oct 2026 14:52:43 +0000 Subject: [PATCH 07/10] Present the bounded I1 acceptance candidate and evidence gaps Why: Stage 6 is approved and formal command/API results need a version-bound human acceptance decision. Evidence: Complete SELF receipts and independent replays are linked to fixed Dev/RDM subjects; the original implementation approval is retained. Impact: Record test coverage, predicate corrections, immutable product digests and explicitly untested later scopes. Do not mark user acceptance or shipping complete. Refs: IAM I1 U1-U2; phase 7 acceptance --- .../proposals/2026-10-13-iam-i1-acceptance.md | 50 +++++++++++++++++++ docs/proposals/2026-10-13-iam-i1-review.md | 4 +- docs/proposals/INDEX.md | 2 +- 3 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 docs/proposals/2026-10-13-iam-i1-acceptance.md diff --git a/docs/proposals/2026-10-13-iam-i1-acceptance.md b/docs/proposals/2026-10-13-iam-i1-acceptance.md new file mode 100644 index 0000000..2c1f55e --- /dev/null +++ b/docs/proposals/2026-10-13-iam-i1-acceptance.md @@ -0,0 +1,50 @@ +# IAM I1 阶段 7 正式测试与验收候选 + +日期:2026-10-13(北京时间);负责人:weichen;测试执行:Codex;状态:已完成本轮测试材料,待用户阶段 7 验收。正式代码 Review、PR、CI、合入和部署未由本页代签。 + +## 批准与范围 + +用户回复“批准”,对应 [阶段 6 实施交付](2026-10-13-iam-i1-review.md) 的 Documents c023551、RDM b93908e、Dev 72ed8b4。批准原版本保留,恢复同步后的测试版本另列。本次按已获批 [统一方案 r1](2026-10-13-identity-role-permission-plan.md) 的 I1=U1–U2 及 [权限合同](2026-10-13-iam-i1-permission-contract.md) 验证当前公开命令/API边界;不关闭 R1–R20 全部目标,不实施 U3–U9,不操作现有服务、生产数据库或真实账号。 + +恢复处理包括:Dev Documents 同步冲突保留上游项目成员规划及三份 I1 批准文档原文;RDM 采用上游 `rdm.project.member.set-role` 合法命令 ID,保留 I1 身份包装。没有恢复旧权限旁路,没有变更 RDM pins;所有失败、恢复、同步收据保留。 + +## 固定对象与完整收据 + +| 对象 | 固定版本及结果 | 原始记录 | +|---|---|---| +| Dev 集成组合 | `10789653f989da6dc8a5ecc72d996dc2764208db`,同步目标 `ee9b437b22b49f96e1bc65f79417b22e8e82a37c`;`make test` 退出 0 | Dev 任务卡 SELF 收据 `ea7b77587b568d968594b0cb90c5362cab27d8eab1492da8cdea14d74e43d11d` | +| RDM 完整组合及 HTTP | `70e27b08c65d8e966a11b1d30723414ec3e36f8e`,同步目标 `6c689caa1fa271c2a16174427df51a9b8919c4e0`;`make test`+真实 HTTP+产物/测试摘要检查退出 0 | RDM 任务卡 SELF 收据 `6e684a9047e43b0bdafbc71604ab5debe06bf437d1e3c95c4169d310f11d70c0` | +| 独立最小重放 | `/root/i1_phase7_review` 未参与源码修改;先在 `58a23f8c` 重跑 39 个顶层 TestIAMI1,再审查作者材料并重跑最终 HTTP 10 组;退出 0 | 已导入 RDM 卡的完整 SELF 工具收据 `6bbb0f747e41c28d3c2327c587e162072a69495573def6f97a6d1657eb0b0d76`、`c7edde369566552acf4060500985a4a80ea004af80455446de9a215f64f89587`;工具标签不自行升级 | +| RDM 二进制 | SHA256 `93aabc13041cf5a5c5636ebd0c88979a4d0f6fd0f79ba1272defc75176a75d81`;从实际组合产物运行,没有使用 Vite 或仅源码模拟 | `bin/PRODUCT_MANIFEST.json` 与上述工具收据 | +| HTTP helper | SHA256 `a7d1d3260f4a62f0cb14b91339506419e9be306f2d0e3f7c74a6e77e76a458d4` | RDM `.task/artifacts/iam-i1-http-acceptance.py`;代码与测试材料已提交 | + +RDM 固定 Backend `0f192a481388184df39f81c28b0587a7e16ec3ca`、Frontend `4965de269a441a7df02b46d8533067f044e79b8b`、UI `bfecf8b51f9a0fdbd9a13590cddf8fc06b7ae700`;前端 dist 摘要为 `13acbec506086fe8`。Dev 新组合与 RDM 产品各自固定、各自检查;不能用 Dev 新接口存在证明旧 RDM pins 已消费其能力。后续只记录文本的提交不改变这些行为对象;最终记录提交及工作树检查另见任务卡。 + +完整命令输出由 evidence 工具保存于两个任务卡,本文只提供判据和结果摘要,不转写输出、不提升来源等级。测试本地来源为 SELF;用户批准、受信 CI、平台账号独立批准及部署各自独立。 + +## 需求到证据 + +| I1 要求 | 正常/异常/边界判据 | 当前结果与测试 | +|---|---|---| +| R6/R12 系统与项目作用域 | 合法管理员创建/配置/任命角色成功;获 A 的 project.settings 者可改 A 名称,但全局 role/cap/admin transfer 被权限拒绝;body 伪造 actor/owner 不改变认证身份 | PASS;注册命令 TestIAMI1+真实 Bearer HTTP,先检查命令已注册,再要求权限原因,不把未知命令或 schema 拒绝计通过 | +| R7/R8 管理资格不授 B 业务访问 | /api/me 明确实际平台管理员身份;A 创建者且管理员对 B 的成员、权限、归档和审计操作拒绝,当前项目清单不显示 B;合法角色获授者可建 B | PASS;真实新实例 /api/commands/{id}+项目/审计相关 Go 正反例 | +| R9 创建者也受硬 cap | 已确认 Alice 在 A 的 doc.write 允许并有 allow 覆盖;保留 default=true,只关闭 cap;实际高危命令确认后因上限拒绝 | PASS;HTTP 隔离 cap 变量;Go 创建者 cap、平台 cap、未知角色动作与读策略故障等边界 | +| R11 停用/换岗/旧覆盖 | 旧 doc.write allow 后换到未定义该动作角色,执行及解释拒绝;停用前 doc.read 允许,停用后消失,执行/矩阵均显示已停用原因 | PASS;HTTP 精确原因与前后矩阵+TestIAMI1;没有借其他已存在拒绝原因替代停用测试 | +| R18 私人原件/草稿与读取范围 | 真实 held 原件仅上传者可确认;管理员与未知 batch 获相同不透明拒绝且无实际 B 项目或文件信息;私人候选、差异、快照、审核状态、聚合读面/模型输入按当前 owner/阶段/grant 判定 | PASS;真实 HTTP 上传确认+SQLite/已注册命令实际正文和持久状态负例;本次不声称完整 U5/U6 资源职责模型已实现 | +| R12/R18 幂等回执和 outbox | 操作/项目/主体/资源不匹配 opID 不返回他人回执;合法重放保留;outbox 归属与业务在同 Tx 写入,仅送到实际 owner Host,未知旧归属保持 pending | PASS;TestIAMI1 实际回执和 SQLite 状态+既有原子/失败重试回归 | +| 注册和组合回归 | 当前 set-role 等命令 ID 正确注册并保留身份校验;根页为实际 React embed、未认证命令 401;RDM 29 项 Web、全部 Go;Dev 治理、公开边界/pins、库、Core、Backend、Frontend/UI、命令检查 | PASS;两套 make test 及当前产物真实 HTTP;不把 HTML 获取等同于浏览器交互验收 | + +## HTTP 测试过程及独立复核 + +实际 HTTP 使用全新临时 SQLite、三名合成主体和随机 API Key;平台首位管理员在其他开户之前由可信 CLI 建立,/api/me 核验其真实身份。服务仅绑定随机回环端口,强制关闭执行工具,环境不继承 DSN、服务实例绑定或模型密钥,HTTP 禁用代理。真实私有会话和确认卡到最终回执的路径执行高危命令;native 项目仅为确认上下文,不作为 RDM project.create 政策的通过证据。测试结束只终止自己的 PID;成功临时场景回收,失败场景保留用于诊断,不修改既有实例。 + +初次 HTTP 在未经过高危确认流程时拒绝,该结果没有被计为权限通过;补齐确认路径后重验。首位管理员创建顺序错误同样保留失败证据,不关闭原防接管机制。独立审阅又指出停用/默认与 cap 的两处测试假阳性风险;已分别加停用前后读权及原因检查、保留 default/allow 只关 cap。最终独立 HTTP 重跑 10 组通过,审阅范围内无剩余 Critical/Important。 + +## 缺项、兼容边界与验收决定 + +- 全产品浏览器交互和真实模型任务级前后对照:NOT_RUN。本轮 I1 没有业务 UI 实现,已规划出口为直接命令/API与当前回归;完整浏览器及 Agent 闭合属后续单元。工具描述真实模型对照仍是明确缺项:本轮未建立固定模型/配置/任务集/费用范围,mock 与 HTTP 不能替代模型行为。补救为另行明确测试条件后执行任务级对照,在后续 Agent/全产品验收前闭合;不能计 PASS。 +- PostgreSQL、多实例、在途后台最终提交 epoch、账号有效态/恢复、多职位/项目选用及完整三权:本轮完整验收未执行;按 U3–U9 依赖和各自授权推进,不迁移生产 DB。 +- 已批准的 I1 默认拒绝保留:无范围证明的 whole-prefix 知识撤销和公共全量自举拒绝;没有可信 Host 项目证明/资源分类的共享读取拒绝;audit.read 不随管理员或创建者自动授予;旧未知归属 outbox 不推测 owner。恢复这些能力须新公开提供者/消费者合同,不由此次测试擅自补接口或改 pins。 +- PR/受信 CI/GATE、正式阶段 8 Review、合入、部署及工作区回收:NOT_RUN。独立提前审阅和本地重跑不代替平台条件。 + +提交给用户的阶段 7 决定范围:当前固定 I1 U1–U2 的命令/API边界与回归结果,以及上述明确缺项/既定兼容限制。候选结论为“本地测试已通过,待人工验收”,用户本轮此前的“批准”只已记录为阶段 6,通过与否由新的验收回复决定,不代签。原长期方向及下一任务仍为获批方案 I2/U3,需另行授权,当前不启动。 diff --git a/docs/proposals/2026-10-13-iam-i1-review.md b/docs/proposals/2026-10-13-iam-i1-review.md index d9ad67d..ef48994 100644 --- a/docs/proposals/2026-10-13-iam-i1-review.md +++ b/docs/proposals/2026-10-13-iam-i1-review.md @@ -1,6 +1,6 @@ # IAM I1 实施候选与人工评审记录 -负责人:weichen;实施协调:Codex;日期:2026-10-13;状态:阶段 6 本地实施与自检已完成,人工未评审;当前固定对象与最终收据以任务卡为准。 +负责人:weichen;实施协调:Codex;日期:2026-10-13;状态:阶段 6 已由用户批准;阶段 7 测试候选已形成,待用户验收。原阶段 6 对象与收据保留,最新状态见下方批准记录及验收报告。 本页维护已批准统一方案 I1 的实际进展;原方案原文摘要保持不变。本轮只执行 U1–U2,交付终点为“给我评审”,不启动后续增量。 @@ -69,3 +69,5 @@ Dev 同步 main 到 143e636736 后随主干物化 Backend 15566f9a、Core 5773e7 ## 阶段 6 人工批准(2026-10-13,北京时间) 用户在本页 c023551 对应的实施候选与兼容影响交付后回复“批准”。阶段 6 实施与自检结论:通过;对象为 Documents c023551、RDM b93908e、Dev 72ed8b4。该结论不代签尚未完成的阶段 7 验收,也不启动后续 U3–U9 或生产部署。恢复时已有主干推进,正式测试将固定同步后的对象,报告正常/异常/边界/回归证据与缺项,再请求用户验收;原获批对象和所有早期失败收据保留。 + +阶段 7 当前产物:[正式测试与验收候选](2026-10-13-iam-i1-acceptance.md)。上述阶段 6 测试与缺项记录为当时快照;新的真实 HTTP 结果、独立重跑及仍未执行项目以阶段 7 报告和工具收据为准。 diff --git a/docs/proposals/INDEX.md b/docs/proposals/INDEX.md index 3d921ba..66fda57 100644 --- a/docs/proposals/INDEX.md +++ b/docs/proposals/INDEX.md @@ -10,7 +10,7 @@ 依据已批准的[用户、职位角色与分层权限统一方案 r1](2026-10-13-identity-role-permission-plan.md) (Documents `a088809`)冻结系统/项目/资源边界、管理员无业务 bypass、创建者 cap、独立 `audit.read` 与公开扩展四要素。 2026-10-13 已授权 I1(U1–U2),终点为本地实施与验证后人工评审;多职、通用角色迁移、资料目录、矩阵及完整运行验收仍按后续单元推进,不以合同保存宣称已交付。 - 实际进展与证据见 [I1 实施候选与评审记录](2026-10-13-iam-i1-review.md),用户实施评审尚未完成。 + 实际进展与证据见 [I1 实施候选与评审记录](2026-10-13-iam-i1-review.md),用户实施评审已通过;[阶段 7 验收报告](2026-10-13-iam-i1-acceptance.md) 待用户验收。 - [快慢通道展示与动态工作摘要方案 r1.1](2026-10-12-fast-slow-channel-display.md): 运行卡呈现状态、已完成工作、当前发现与剩余项;四层阅读、阶段成果、来源、异常恢复及 U1–U4。 -- 2.54.0 From b4a2573742d1377d432704f0114832d0af5a3c7b Mon Sep 17 00:00:00 2001 From: weichen Date: Tue, 13 Oct 2026 15:30:37 +0000 Subject: [PATCH 08/10] Record user acceptance of IAM I1 validation Why: Preserve the explicit stage 7 decision before formal review and integration. Evidence: User confirmation in this session; document consistency receipt 17a3542f8e69fc899a05a152d258b721a8aaab4cd0a3629f8f5cbb7364d77d84 (SELF). Impact: Record acceptance of the fixed I1 candidate and its stated limitations; leave the approved plan unchanged. Refs: Dev policy/delivery.md stages 7-9; IAM I1 permission contract. --- docs/proposals/2026-10-13-iam-i1-acceptance.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/proposals/2026-10-13-iam-i1-acceptance.md b/docs/proposals/2026-10-13-iam-i1-acceptance.md index 2c1f55e..fa89c1b 100644 --- a/docs/proposals/2026-10-13-iam-i1-acceptance.md +++ b/docs/proposals/2026-10-13-iam-i1-acceptance.md @@ -1,6 +1,8 @@ # IAM I1 阶段 7 正式测试与验收候选 -日期:2026-10-13(北京时间);负责人:weichen;测试执行:Codex;状态:已完成本轮测试材料,待用户阶段 7 验收。正式代码 Review、PR、CI、合入和部署未由本页代签。 +日期:2026-10-13(北京时间);负责人:weichen;测试执行:Codex;状态:用户已通过阶段 7。正式代码 Review、PR、CI、合入和部署分别记录,不由本页代签。 + +用户在本会话回复“确认”,对应 Dev `4af5956`、Documents `064d4b5`、RDM `70e27b08` 的阶段 7 报告及下述明确缺项。按 Dev `policy/delivery.md` 进入智能体负责的阶段 8–9;同步后的新组合须重新验证与独立 Review。工作区清理、部署和 U3–U9 仍需各自授权。 ## 批准与范围 @@ -47,4 +49,4 @@ RDM 固定 Backend `0f192a481388184df39f81c28b0587a7e16ec3ca`、Frontend `4965de - 已批准的 I1 默认拒绝保留:无范围证明的 whole-prefix 知识撤销和公共全量自举拒绝;没有可信 Host 项目证明/资源分类的共享读取拒绝;audit.read 不随管理员或创建者自动授予;旧未知归属 outbox 不推测 owner。恢复这些能力须新公开提供者/消费者合同,不由此次测试擅自补接口或改 pins。 - PR/受信 CI/GATE、正式阶段 8 Review、合入、部署及工作区回收:NOT_RUN。独立提前审阅和本地重跑不代替平台条件。 -提交给用户的阶段 7 决定范围:当前固定 I1 U1–U2 的命令/API边界与回归结果,以及上述明确缺项/既定兼容限制。候选结论为“本地测试已通过,待人工验收”,用户本轮此前的“批准”只已记录为阶段 6,通过与否由新的验收回复决定,不代签。原长期方向及下一任务仍为获批方案 I2/U3,需另行授权,当前不启动。 +原提交给用户的阶段 7 决定范围:固定 I1 U1–U2 的命令/API边界与回归结果,以及上述明确缺项/既定兼容限制。提交时结论为“本地测试已通过,待人工验收”;用户随后回复“确认”,已在页首记录为阶段 7 通过。原长期方向及下一任务仍为获批方案 I2/U3,需另行授权,当前不启动。 -- 2.54.0 From 30bceb748fdb01f56ef622c6bc490b2115f62725 Mon Sep 17 00:00:00 2001 From: weichen Date: Tue, 13 Oct 2026 15:34:16 +0000 Subject: [PATCH 09/10] Align IAM contract navigation with accepted delivery stage Why: Remove stale local-review and pending-acceptance statements after user confirmation. Evidence: Independent stage 8 documentation review identified the status mismatch. Impact: Update delivery status only; preserve permission semantics and the approved plan digest. Refs: 2026-10-13 IAM I1 acceptance record; Dev policy/delivery.md. --- docs/proposals/2026-10-13-iam-i1-permission-contract.md | 2 +- docs/proposals/INDEX.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/proposals/2026-10-13-iam-i1-permission-contract.md b/docs/proposals/2026-10-13-iam-i1-permission-contract.md index 329e353..9844700 100644 --- a/docs/proposals/2026-10-13-iam-i1-permission-contract.md +++ b/docs/proposals/2026-10-13-iam-i1-permission-contract.md @@ -3,7 +3,7 @@ 负责人:weichen;编制:Codex;更新时间:2026-10-13。 依据:[用户、职位角色与分层权限统一方案 r1](2026-10-13-identity-role-permission-plan.md) (Documents `a088809`,原文 SHA256 `39b8e9a6e078dc509bd80118c1807ce6ed23e4466e5902b51f4bfa255d55c0a1`)。 -用户已批准该方案并授权 I1=U1–U2;本次终点为本地实施与验证后人工评审,未授权推送、PR、合入、迁移或部署。 +用户已批准该方案并授权 I1=U1–U2,原实施终点为本地人工评审;阶段 6、7 已分别获用户“批准”“确认”。当前按 Dev policy/delivery.md 进入智能体 Review、PR、CI 与合入,状态及固定对象见[验收记录](2026-10-13-iam-i1-acceptance.md)。迁移、部署、工作区清理及后续增量未授权。 本合同为 U1 产物,冻结已批准语义与提供者/消费者责任;新增公开接口仍须对应模块实现、固定版本及合同验证,不能据此宣称能力已提供。 源码、业务测试及运行验收结果以 I1 任务卡的工具收据为准;本文不复制测试结果。 diff --git a/docs/proposals/INDEX.md b/docs/proposals/INDEX.md index 6e290bf..4043a58 100644 --- a/docs/proposals/INDEX.md +++ b/docs/proposals/INDEX.md @@ -9,8 +9,8 @@ - [IAM I1 权限边界与公开扩展合同 r1](2026-10-13-iam-i1-permission-contract.md): 依据已批准的[用户、职位角色与分层权限统一方案 r1](2026-10-13-identity-role-permission-plan.md) (Documents `a088809`)冻结系统/项目/资源边界、管理员无业务 bypass、创建者 cap、独立 `audit.read` 与公开扩展四要素。 - 2026-10-13 已授权 I1(U1–U2),终点为本地实施与验证后人工评审;多职、通用角色迁移、资料目录、矩阵及完整运行验收仍按后续单元推进,不以合同保存宣称已交付。 - 实际进展与证据见 [I1 实施候选与评审记录](2026-10-13-iam-i1-review.md),用户实施评审已通过;[阶段 7 验收报告](2026-10-13-iam-i1-acceptance.md) 待用户验收。 + 2026-10-13 已授权 I1(U1–U2);多职、通用角色迁移、资料目录、矩阵及完整运行验收仍按后续单元推进,不以合同保存宣称已交付。 + 实际进展与证据见 [I1 实施候选与评审记录](2026-10-13-iam-i1-review.md),用户实施评审及[阶段 7 验收](2026-10-13-iam-i1-acceptance.md) 已通过,当前进入智能体 Review、PR、CI 与合入。 - [快慢通道展示与动态工作摘要方案 r1.1](2026-10-12-fast-slow-channel-display.md): 运行卡呈现状态、已完成工作、当前发现与剩余项;四层阅读、阶段成果、来源、异常恢复及 U1–U4。 -- 2.54.0 From ba9d76426ded94b0ab760b25201c3a389541b4ee Mon Sep 17 00:00:00 2001 From: weichen Date: Tue, 13 Oct 2026 15:37:31 +0000 Subject: [PATCH 10/10] Identify the provider snapshot used by the IAM contract Why: Avoid presenting an earlier extension surface as the current provider after main advances. Evidence: Independent documentation review identified a non-blocking version attribution issue. Impact: Attribute the existing-capability table to Backend 0f192a48; preserve contract semantics and approved plan digest. Refs: IAM I1 stage 8 document review. --- docs/proposals/2026-10-13-iam-i1-permission-contract.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/proposals/2026-10-13-iam-i1-permission-contract.md b/docs/proposals/2026-10-13-iam-i1-permission-contract.md index 9844700..5b05d66 100644 --- a/docs/proposals/2026-10-13-iam-i1-permission-contract.md +++ b/docs/proposals/2026-10-13-iam-i1-permission-contract.md @@ -105,8 +105,8 @@ I1 私人 pending/rejected 草稿仅提案人可读与决定;知道 proposalId ## 5. 公开扩展:现有能力与四要素申请 -现有公开面参考 Backend `pkg/extension/extension.go`、`host.go` 与 `surface.txt`,不导入 Backend internal。 -当前 `SurfaceVersion=2.11.0-experimental` 的源码声明不是部署或消费者可用性证明;组合必须核对提供者及消费者实际固定版本。 +以下现有公开面是 I1 原合同的 Backend `0f192a481388184df39f81c28b0587a7e16ec3ca` 快照,参考 `pkg/extension/extension.go`、`host.go` 与 `surface.txt`,不导入 Backend internal。 +该快照的 `SurfaceVersion=2.11.0-experimental` 源码声明不是部署或消费者可用性证明,也不代表后续主干能力;同步后的组合必须重新核对提供者及消费者实际固定版本。 | 现有能力 | 提供者/消费者 | 足够性与边界 | |---|---|---| -- 2.54.0