diff --git a/docs/proposals/2026-10-13-rdm-settings-members-duties-perms-increment.md b/docs/proposals/2026-10-13-rdm-settings-members-duties-perms-increment.md index a98fcd1..6629eeb 100644 --- a/docs/proposals/2026-10-13-rdm-settings-members-duties-perms-increment.md +++ b/docs/proposals/2026-10-13-rdm-settings-members-duties-perms-increment.md @@ -7,13 +7,15 @@ artifact_contract: rdm-increment-plan/v1 product_contract_source: legacy-requirements --- -# RDM 设置归属、成员、文档职责与权限矩阵完善增量方案 r1 +# RDM 设置归属、成员、文档职责与权限矩阵完善增量方案 r1(附 r1.1 待评审修订) 负责人:weichen;编制:ZCode;核对日期:2026-10-13(北京时间)。 上游方案:[2026-10-12 RDM 功能、实现与计划矩阵及整改方案](2026-10-12-rdm-function-implementation-plan.md)(下称"总案"),本增量承接其本稿 U3、U4、U6,涉及职责一致性的部分衔接 U5。 评审状态:2026-10-13 用户评审通过(同意方案及技术评审意见),并授权按本方案实施(P1–P8 两批推进;正式验收与清理回收节点保留人工确认)。技术评审对源码声明的逐项核查结论见文末「评审核查记录」。 +2026-10-14 增补的 r1.1 仅是文末两项阶段 4 修订候选,**尚未获人工评审**;上方 r1 的批准不自动覆盖它们。r1.1 不改变 P1–P8 范围或正式验收门禁。 + ## Goal Capsule 以现有 RDM 实施总案的一个完整增量,先厘清设置归属和服务端权限,再补齐搜索、选择、职责分配与权限矩阵交互,保证界面显示、保存结果和实际执行一致。终点:创建者、普通成员、职责人员在真实账号浏览器流程中完成成员添加、职责分配、权限查看与设置保存,且服务端边界(受管设置、成员校验、原子职责变更、权限范围)全部经真实请求验证。 @@ -236,8 +238,25 @@ product_contract_source: legacy-requirements | 职责目标未校验成员 | `rdmReviewAssign` handler 注释“数据,非身份”——按 G1-5 旧裁定绕过成员校验;**本方案 P4 推翻该裁定,属规则变更,在 P1 契约中记录** | | 职责更新与审签失效分步 | 文档级 assign 先写职责再调 `InvalidateActiveDocSubmission`,两步顺序非原子;**章节级 assign 完全未接失效** | +## 阶段 4 修订候选 r1.1(2026-10-14,未评审) + +### 旧项目配置冲突的来源选择 + +r1 评审补充 2 已批准“同键取最近写入时间”为默认合并规则。实施核查发现旧 `(owner, project)` 设置行没有逐键修改时间;行或快照时间不能证明每个键最后由谁写入。若按该时间自动决定来源,就会把无法证明的先后顺序当作数据事实,可能覆盖另一成员的项目策略。 + +候选修订:先按项目和路径列出旧副本及脱敏冲突状态,不自动选择冲突值。有权配置该项目的人在预览中逐路径选来源;观察记录绑定操作者、项目、来源和目标版本,应用时重新鉴权、复验记录与版本,并在事务中写入共享项目配置。旧行保留作只读恢复依据,受管系统项和个人秘密不自动提升为共享配置。无冲突路径也须在预览中明确来源,不能把行时间冒充逐键时间。失败不部分迁移;相同观察重试保持幂等。生产迁移及正式验收尚未执行。 + +备选是补造逐键时间或以固定成员优先级自动覆盖;前者没有历史依据,后者会静默丢弃其他成员选择,因此本候选采用显式裁定。评审需要确认是否接受此规则替代 r1 的默认规则;未确认前不得把旧项目副本合并视为已获批准。 + +### 项目设置写入的公开授权合同 + +共享配置改为以项目为权威后,Backend 必须由宿主项目判断读者和配置者。现有 `ResourceAuthorizerV2` 只覆盖资源读取,`ProjectLifecycle.Work` 只说明成员可工作,二者均不能推断项目设置写权限。候选增设可选的 `ProjectSettingsRegistry.RegisterProjectSettingsAuthorizer`,由与项目生命周期相同的提供者按受信 actor、宿主 projectID 和读/写动作作出判定;缺失提供者或拒绝均失败关闭,HTTP 请求不能自报其他主体或项目来绕过。 + +该公开扩展点保留旧插件兼容:未注册回调的插件不能因此获得共享项目设置能力;基座其他个人/系统设置仍走原有各自授权。评审需要确认这一模块职责与接口后,才能将候选作为正式基座扩展发版并让 RDM pin 采用。具体请求、版本和失败语义见 [接口与验证记录 r0.2](../records/2026-10-14-rdm-settings-completion-contract.md)。本阶段只完成源码与隔离 SELF 自检,没有发布版本或升级正式 pins。 + ## 主记录与推进 -- 主记录:本文件(唯一正文);任务卡 `.task/feature-rdm-increment-settings-duties.md` 承载需求表、证据与阶段结论。 +- 主记录:本文件(唯一方案正文);历史任务卡 `.task/archive/feature-rdm-increment-settings-duties.md` 仅保留原增量记录,当前完成性修复由 Dev/RDM 同名 `feature-rdm-settings-completion` 任务卡承载证据与阶段结论。 - 来源:`.tmp/Discussion-Meetings/2026-10-08_12-24/.tmp/user-supplement.txt`(原始用户补充)、2026-10-13 会话评审。 -- 下一步:P1 已随本稿固定;按两批顺序进入 P2(基座受管设置契约扩展申请)与 P3/P4/P6 服务端实现。 +- 当前进展:P1–P8 的源码候选及阶段 6 SELF 自检记录在 Dev/RDM 同名任务卡;r1.1 的两项阶段 4 修订和阶段 6 产物均未获人工结论。基座正式发版、RDM 正式 pin 升级、阶段 7 验收与后续 Review/合入尚未完成。 +- 下一步:先评审 r1.1 与阶段 6 候选;取得相应结论后,按本方案的发版依赖和 `policy/delivery.md` 进入正式组合验收,保留发布版本的双钥匙边界。 diff --git a/docs/records/2026-10-14-rdm-settings-completion-contract.md b/docs/records/2026-10-14-rdm-settings-completion-contract.md index 9600ba9..b219301 100644 --- a/docs/records/2026-10-14-rdm-settings-completion-contract.md +++ b/docs/records/2026-10-14-rdm-settings-completion-contract.md @@ -1,6 +1,6 @@ # 项目设置完成性修复:接口与验证记录 r0.2 -本记录承接已批准的 `../proposals/2026-10-13-rdm-settings-members-duties-perms-increment.md` r1;不改变 P1–P8 和 R1–R5 的交付范围。当前是阶段 6 实施候选,正式验收、发布、部署与清理均不由本记录代签。 +本记录承接已批准的 `../proposals/2026-10-13-rdm-settings-members-duties-perms-increment.md` r1;其中 r1.1 两项阶段 4 修订仍待人工评审,不改变 P1–P8 和 R1–R5 的交付范围。当前是阶段 6 实施候选,正式验收、发布、部署与清理均不由本记录代签。 当前权限边界遵循已合入的 `../proposals/2026-10-13-iam-i1-permission-contract.md`:系统管理身份不代替业务成员、动作、资源或文档职责授权;停用角色不回落为无绑定默认。