Files
Agent-System-Documents/docs/proposals/2026-10-13-iam-i1-permission-contract.md
weichen 1f3bd54cfb Define the approved single-project rename projection boundary
Why: Preserve delegated project settings while keeping physical Host mutations owner-scoped.

Evidence: User explicitly approved the independently reviewed amendment and repair plan; original amendment digest recorded in the contract.

Impact: Clarify actual-actor authorization and audit, single-target owner projection, durable recovery and masked metadata; no provider implementation or deployment claim.

Refs: IAM I1 host projection amendment r1; Documents PR 98; Dev policy/delivery.md affected stages 4-5.
2026-10-13 16:04:31 +00:00

194 lines
25 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# IAM I1 权限边界与公开扩展合同 r1
负责人:weichen;编制:Codex;更新时间:2026-10-13。
依据:[用户、职位角色与分层权限统一方案 r1](2026-10-13-identity-role-permission-plan.md)
(Documents `a088809`,原文 SHA256 `39b8e9a6e078dc509bd80118c1807ce6ed23e4466e5902b51f4bfa255d55c0a1`)。
用户已批准该方案并授权 I1=U1–U2,原实施终点为本地人工评审;阶段 6、7 已分别获用户“批准”“确认”。当前按 Dev policy/delivery.md 进入智能体 Review、PR、CI 与合入,状态及固定对象见[验收记录](2026-10-13-iam-i1-acceptance.md)。迁移、部署、工作区清理及后续增量未授权。
本合同为 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. 公开扩展:现有能力与四要素申请
以下现有公开面是 I1 原合同的 Backend `0f192a481388184df39f81c28b0587a7e16ec3ca` 快照,参考 `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,回滚不复活旧越权。
## 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 隐藏代替执行端检查。
- 新 outbox 回执以事务内 `rdm_audit_outbox_scope` 记录实际 project/owner,只送入对应 owner 的 Host;旧未知归属回执保持 pending,禁止按下一调用者猜测归属。该关联表为新增领域元数据,无历史自动归属,本轮未执行生产数据库变更。
- 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. 账号恢复证明与交付
普通管理员仅发起恢复提案;本人须使用管理员不能单方改写或取得的既有有效会话确认,或预先建立的本人恢复证明,才取得可兑换设密能力。
姓名、电话、邮箱、工号均为可选资料,不自动成为恢复证明;新证明建立或更换不能由恢复提案管理员单独完成。
无独立本人验证条件时拒绝线上恢复,不向普通管理员签发可兑换的目标账户 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。
公开实现、业务测试、浏览器、真实模型、数据库迁移、服务运行、部署与正式验收均不能用本合同的保存结果代替。
## 8. I1 宿主改名投影的已批准修订(2026-10-13)
用户已批准[委任改名契约修订与修复计划 r1](https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-RDM/src/commit/4ee4eb99a95460d6660f05a67181357b67e2e956/docs/proposals/2026-10-13-iam-i1-host-projection-amendment.md),批准对象原文摘要为 `3eee5714cce974ce13229b3e184bc3aa763a5e0819fdf7dcf088dafe68b1ed2a`。正文维护在 RDM 一处;批准状态与实际实现、测试、Review、CI 和合入分开记录。
合法项目 `project.settings` 可以委任改名;现有 `ProjectHost` 的管理修改保持 owner-only。RDM 仅对这一动作建立受信的单目标投影适配:先以实际认证 actor 判定当前项目设置权及状态,再核对域/宿主绑定/物理项目的完整身份,只用受信创建者的 scoped Host 执行该 hostID 的改名。不借创建者身份重新授权,不把投影句柄返回或传入其他业务动作;无需额外 `doc.read`,私人读取和 Native work 不扩权。
首次改名要求 ready;失败恢复必须对应同事务持久的改名意图、同一主体/项目/host/创建者/目标与版本,并再次检查实际 actor 的当前资格。未知 failed/create 不恢复,未就绪时读/work 仍拒绝。该元数据只属于 RDM 项目投影,不修改旧账号或项目身份,不实施生产迁移,也不冒称完整跨库 epoch。
命令与 HTTP lifecycle 都使用原请求 Host 审计实际操作者。Backend 审计的 `Actor=plugin:rdm` 继续表示插件来源;业务 actor 由受信 Host.Owner 和审计 evidence.actor 记录。命令保留既有 DTO,HTTP 保留 core.Project 及公开元数据的脱敏设置;不得带出物理 owner 的原始管理设置。
本修订不新增 Backend 公开符号或放宽其 owner-only 管理规则。正式通过须覆盖合法委任及无读取权管理、cap/停用/非成员、实际归属变化、失败/重启/未知恢复、两入口审计和真实 HTTP;未通过当前组合验证时不能声称 I1 完成。