Compare commits

..
Author SHA1 Message Date
weichen eba4cf8e1f Record the approved settings amendments and stage 6 review
Why: The user approved on 2026-10-14 both r1.1 stage 4 amendments
(explicit per-path source selection replacing the last-write default,
and the fail-closed project settings authorizer callback) together with
the stage 6 implementation candidate, so pending-review markers in the
plan and the contract record no longer matched reality.

Evidence: User review message recorded in the proposal's new review
conclusion section with the reviewed object versions (Documents
62c2e234, Dev 3336bcbe, RDM 931fc4c3); no command execution involved.

Impact: Plan r1.1 and contract record r0.3 now state approval; the base
release stays a user-owned dual-key action and stage 7 formal
acceptance follows the approved release dependency.

Refs: .task/feature-rdm-settings-completion.md in Agent-System-Dev and
Agent-System-RDM.
2026-10-14 05:58:19 +00:00
weichen 62c2e2347e Record pending settings design amendments in the main plan
Why: The approved r1 migration rule conflicts with the current candidate because legacy rows lack trustworthy per-key write times.

Evidence: Backend migration implementation and the r0.2 interface record specify explicit source selection and fail-closed project settings authorization.

Impact: Adds a clearly unapproved r1.1 review candidate without rewriting the approved r1 scope or claiming formal acceptance.

Refs: Dev feature/rdm-settings-completion Stage 4
2026-10-14 05:23:42 +00:00
weichen c1edcfa227 Record inherited duty versions and isolated validation limits
Why: Reviewers need the effective chapter version rule and the exact limits of the current self-check evidence.

Evidence: RDM SELF receipts /tmp/rdm-settings-parent-duty-version-red-20261014-973d52c1.json, /tmp/rdm-settings-chapter-existing-flows-green-20261014-973d52c1.json and /tmp/rdm-settings-fixed-head-pg-20261014-973d52c1.json; original unsafe acceptance RED receipt retained.

Impact: Clarify the versioned public duty contract, PostgreSQL conflict behavior and the still-unverified isolated business acceptance. No prior evidence is rewritten.

Refs: P4/P8, docs/proposals/2026-10-13-rdm-settings-members-duties-perms-increment.md
2026-10-14 03:46:01 +00:00
weichen 27ca7dbeb6 Record the settings completion interface candidate
Why: preserve the approved scope and distinguish remaining implementation from archived claims.

Evidence: current source audit and exact public API decisions; executable results remain in task evidence.

Impact: candidate documentation only; no production migration, release or acceptance is claimed.

Refs: approved RDM settings increment r1; Dev feature/rdm-settings-completion
2026-10-14 02:08:33 +00:00
weichen 7bd4e17827 Merge pull request 'Record the approved U8, U7, and export status' (#89) from feature/u8-u7-rdm-export-status into main 2026-10-14 01:15:10 +00:00
weichen 10b442169c Distinguish historical proposal limits from current authorization
Why: old r2 and r3 draft-stage paragraphs contradicted the retained approval records and current user takeover authorization.
Evidence: independent Documents review identified the ambiguity; targeted diff and link checks are captured outside the candidate.
Impact: label historical planning limits without changing genuine NOT_RUN results, deployment boundaries, or the newer login recovery implementation record.
Refs: Documents PR #89; Dev PR #489; independent review /tmp/mq-trial489-docs-independent-review-20261014.json
2026-10-14 01:08:51 +00:00
weichen b096191a84 Integrate approved proposal status with current documentation
Why: retain the approved recovery and account additions while preserving the newer login recovery record and all current documentation.
Evidence: diff checks and affected links are captured by the evidence tool; historical CI remains scoped to its original object and is not current admission.
Impact: merge the current document target into the existing status task, preserve r3 records, and apply the user mandate that agents execute merges.
Refs: Documents PR #89; Dev PR #489; merge queue Issue #518; user continuation authorization on 2026-10-14
2026-10-14 00:59:08 +00:00
weichen a7ff466d9a Merge pull request 'Define the approved project rename projection boundary' (#99) from feature/iam-i1-projection-contract into main 2026-10-13 16:24:57 +00:00
weichenandCursor b8df6f3c2a Record the approved U8, U7, and export status
Why: the 2026-10-12 approval covers the recovery U8 and account U7 additions, and the RDM U5 note still treated the lifecycle pull request as the whole export.
Evidence: Backend 183 and 185 plus Dev 486 were already green; Dev 482, RDM 301, Frontend 73, and Dev 488 remain open and are not marked merged.
Impact: proposal status only. No implementation or deployment claim changes.
Refs: docs/proposals/2026-10-12-service-restart-data-recovery.md, docs/proposals/2026-10-12-svc-unified-deploy-and-login-key.md, docs/proposals/2026-10-11-rdm-two-trees-trace-audit-integration.md
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-12 15:40:45 +00:00
5 changed files with 108 additions and 15 deletions
@@ -9,7 +9,7 @@ product_contract_source: ce-plan-bootstrap
# RDM 两树一网集成、完善与追溯审计展示方案
修订:r1(2026-10-11 并入用户裁定);确认状态:用户评审通过(2026-10-11,需求拆解至实施计划五阶段一并,含 KTD4 双层管理员裁定);推进状态:U1–U5 全部实施并合入(RDM PR #195/#197/#201/#213;Dev PR #368,2026-10-11);管理区「项目追溯与审计」入口经通用声明机制补齐(扩展面 2.9.0 Registry.AddAdminZone;Backend #165、Frontend #63/#64、RDM #240、Dev #414,2026-10-12;rdm.audit 分区随 rdm 插件声明,区内能力仍由 rdm.inspect.* fail-closed);管理页插件清单另合并编译插件条目(Dev #404,2026-10-12)。U6(团队存储)独立后续;运行验收属部署环境。
修订:r1(2026-10-11 并入用户裁定);确认状态:用户评审通过(2026-10-11,需求拆解至实施计划五阶段一并,含 KTD4 双层管理员裁定);推进状态:U1–U4 已合入。U5 的 #213 只交付了导出工件生命周期,水位重放、报告三段、草稿门和页面入口仍在进行(RDM #301、Frontend #73、Dev #488,2026-10-12,未合入)。管理区「项目追溯与审计」入口经通用声明机制补齐(扩展面 2.9.0 Registry.AddAdminZone;Backend #165、Frontend #63/#64、RDM #240、Dev #414,2026-10-12;rdm.audit 分区随 rdm 插件声明,区内能力仍由 rdm.inspect.* fail-closed);管理页插件清单另合并编译插件条目(Dev #404,2026-10-12)。U6(团队存储)独立后续;运行验收属部署环境。
需求负责人:weichen;方案编制:Codex;实施负责人:待实施立项时指定。
来源:2026-10-11 用户要求检查两树一网现状,并设计简单直观的项目追溯、审计展示;同轮明确选择“完善 RDM,并补齐必要的基座能力”。
目标仓:Agent-System-RDM;下文 `RDM:` 路径相对于该仓,`Dev:` 路径相对于 Agent-System-Dev;所有建议接口名均为候选契约。
@@ -331,7 +331,8 @@ U1 同批接通旧客户端的项目选择和命令封装,并解析可信会
验证:导出中途有新写入不改变已固定内容;历史来源软删除仍可按授权追溯;未归属/缺失事件可见;跨项目下载、过期下载、权限撤销均拒绝。
完成条件:同一版本在 UI 与报告中结论一致,并有正式 GATE/REPLAY 证据。
进展(2026-10-11,RDM PR #213 merge 1dce69d):U5 已实施合入——`export_artifact.go` 导出工件生命周期(`rdm_export_artifacts` 表+磁盘存储+sha256 完整性+24h 过期);`rdm.inspect.export.{create,status,download}` 三命令(审计面授权、截止水位固定、跨项目绑定拒绝、下载重鉴权);导出文件名携带 `wm<seq>` 水印标记。U1–U5 五个实施单元全部完成,进入部署验收阶段。
进展(2026-10-11,RDM PR #213 merge 1dce69d):#213 只交付了导出工件生命周期——`rdm_export_artifacts`、三条 `rdm.inspect.export.*` 命令、截止水位被记录、文件名带 `wm<seq>`。导出内容当时仍读实时世界,报告没有三段,页面没有导出入口。
进展(2026-10-12,未合入):RDM #301 补水位重放、三段、草稿门和遮蔽;Frontend #73 与 Dev #488 补概览导出区。这些 PR 的 CI 结论以各自 HEAD 的作业为准,本文不把本地测试写成 GATE。
---
@@ -9,10 +9,11 @@ product_contract_source: ce-plan-bootstrap
# 服务重启与全量数据恢复方案 r3
确认状态:原 r2 批准记录保留(Dev PROJECT.md 记录 2026-10-12 五阶段批准);**r3 本轮增补待人工评审**。本轮仅调查、修订方案及本地文档核查,不代签历史批准,不授权业务实施、账户变更、迁移、故障注入、部署、推送或合入。
确认状态:原 r2 批准记录保留。**r3 新增(R11/R12、KTD13–KTD15、U8)于 2026-10-12 已批准**,当时授权连续推进到 PR 可合入;该历史批准不代替当前交付准入。合入按现行规范由智能体执行。
U8 进展(2026-10-12,未合入):Backend #183 与 Dev #482;旧记录在 `ef66bfb` 上记有 vet-and-test success(历史 SELF 引用,非本轮 GATE)。Dev 侧在允许 `app → instanceguard` 与 `instanceguard → store` 两条架构边后的提交是 `4464255`,该 HEAD 的 CI 以作业结论为准,不在本文升为 GATE。
r3.1=同日增补 D1/D2/D3(部署根治;编号避开本案 U1–U8)。映射:D1 补 U1 身份消费缺口,D2 补 U6 部署回退,D3 补 U7 真实组合门禁。确认状态:用户 2026-10-12 授权按实施计划连续推进到 PR 可合入;D1–D3 仍供人工评审,不因 U8 批准而代签。
修订记录:r1=2026-10-12 初稿并完成六角色文档自审(见同名审阅记录第一轮);r2=2026-10-12 吸收外部源码复核(U1/U3/U4/第9节四处修订,见审阅记录第二轮),需求范围与量化指标未变。
r3=同日根据 dev 8788 账户故障续查刷新源码/运行事实,保留 R1–R10、KTD1–KTD12、U1–U7;补充 R11/R12、KTD13–KTD15、U8 单实例保护及近期验证合同。原故障档和时间指标保持候选值,未宣称实测达标。
r3.1=同日增补 D1/D2/D3(部署根治;编号避开本案 U1–U8)。映射:D1 补 U1 身份消费缺口,D2 补 U6 部署回退,D3 补 U7 真实组合门禁。确认状态:用户 2026-10-12 授权按实施计划连续推进到 PR 可合入;本节新增条款仍供人工评审,不代签 r3 其余未批内容。
r3=同日根据 dev 8788 账户故障续查刷新源码/运行事实,保留 R1–R10、KTD1–KTD12、U1–U7;补充 R11/R12、KTD13–KTD15、U8 单实例保护及近期验证合同。原故障档和时间指标保持候选值,未宣称实测达标。上述 r3 新增已于 2026-10-12 批准。
需求来源:2026-10-12(Asia/Shanghai)用户要求“系统应该在停止并再次启动(通过 svc 或异常终止)后,应当能够恢复所有服务和数据,给我一个完善方案”。负责人:weichen;编制:Codex;实施与运维负责人在启动对应增量时指定。
主记录:本文;任务卡:Dev `.task/feature-service-restart-recovery-plan.md`。本文的源码路径以 Dev 根目录为基准。
@@ -331,13 +332,13 @@ T8-6:参数来自应用实际连接;SQLite FULL/PG 同步设置按批准合
实施批准时需要固定:目标实例/服务组及独占管理权、实际数据归属清单、故障档与RPO/RTO、正常停机预算、既有在途任务分工。本文已给默认建议;没有这些确认不在共享运行环境做故障/迁移/监管切换。后台是否自动重做模型回合可按任务政策配置,但未知副作用不得靠默认重试放行。
下一任务建议为 U8 与账户方案 U7/U5 的首批设计/实施评审:先保护 dev 原数据,补足账户一致性与登录语义;随后 U3 停机/就绪、U4/U5 任务恢复、U6/U7 文件与灾难演练。新增 U8 未批准前不实施。数据清单、故障档预算、正式组合验证仍为放行条件;PG 迁移、监管切换、备份恢复、部署和故障实验分别授权。
r3 编制期的历史下一任务建议(不是当前批准状态)为 U8 与账户方案 U7/U5 的首批设计/实施评审:先保护 dev 原数据,补足账户一致性与登录语义;随后 U3 停机/就绪、U4/U5 任务恢复、U6/U7 文件与灾难演练。新增 U8 未批准前不实施。数据清单、故障档预算、正式组合验证仍为放行条件;PG 迁移、监管切换、备份恢复、部署和故障实验分别授权。
## 10. 全系统完成条件
只有在所有启用的必需服务/插件被纳入清单、R1–R12均有当前组合与运行对象的重放证据、第8节故障矩阵通过、未知副作用有可处理隔离状态、组合备份实际恢复成功、人工验收及代码Review通过并完成合入/部署后,才可声明“系统停止或异常终止后能够恢复所有服务和数据”。
本轮交付状态止于**待审核方案**;不以记录、源码能力、桩测试、健康接口或本地文档检查代替上述完成条件。
编制期历史交付状态止于**待审核方案**;当前批准与进展见页首及第 11 节。批准不等于全系统恢复已验收,不以记录、源码能力、桩测试、健康接口或本地文档检查代替上述完成条件。
## 11. D1/D2/D3 部署根治补充(r3.1)
@@ -9,9 +9,10 @@ product_contract_source: ce-plan-bootstrap
# svc 统一部署与一次性登录 Key 方案 r3
确认状态:**r1 原批准保留;r2 增补已随 #87 合入(其评审状态以正文与审阅记录为准,不因合入视为已批准);r3 登录恢复实施记录待人工评审**。r1 的批准记录为 2026-10-12 用户「批准,继续推进」(五阶段及 U1/U4 规格,允许对应实施和 PR)。本轮用户要求仔细调研、详细方案并「继续」,覆盖方案修订及本地文档准备,不扩展为业务实施、账户变更、迁移、部署、故障注入、推送或合入授权。
确认状态:**r1 原批准保留;r2 新增(R13–R15、KTD11–KTD14、U7)的 2026-10-12 批准记录保留;r3 登录恢复实施记录待人工评审**。r2 的批准来自原状态任务 Documents #89(来源提交 `b8df6f3c2a3180b06c61d2303bbfea9a3914f186`),不由 #87 的合入推定。2026-10-14 用户已明确授权智能体接管 Dev #489/#488/#486,继续验证、试行、合入及清理;本轮全部合入由智能体执行,不扩展到部署、共享数据库或其他未纳入任务。
U7 进展(历史记录,2026-10-12,未合入):Backend #185 与 Dev #486 的旧候选曾记录 CI success,来源为旧任务记录,不能放行本轮候选。原 U7/U8 候选都占用迁移 28;本轮须同步后按当前主干已用版本顺延,保留主干已有迁移与账户保护。账户 U5 的登录恢复接线见 r3 与 §11;账户 U8 消费审计按其独立范围推进,不由 U7 批准代签。
修订记录:r1=2026-10-12 草案经源码复核后定稿(四项取舍采纳;补齐 §6 合同;对齐恢复方案 KTD 与已合入的 recovery U1 实例身份);同日获批并进入推送与 U1/U4 实施。
r2=同日复核 dev 登录故障、当前 U1/U4 源码和帮助缺口;保留 R1–R12、KTD1–KTD10、U1–U6 的含义与编号,补充 R13–R15、KTD11–KTD14、U7/U8,并细化 U5。新增内容未批准;不以原批准记录代签新增范围。
r2=同日复核 dev 登录故障、当前 U1/U4 源码和帮助缺口;保留 R1–R12、KTD1–KTD10、U1–U6 的含义与编号,补充 R13–R15、KTD11–KTD14、U7/U8,并细化 U5。保留原 r2 批准记录,不以该批准代签其他新增范围。
r3=2026-10-13 用户提交《登录流程方案》并指示「按此方案实施」——该指示即登录恢复范围的实施批准;当日实施合入(Backend #187、Frontend #76、Dev #504),合同定稿于 Dev `docs/svc-deploy/2026-10-13-login-recovery-contract.md`,实施记录见 §11。r3 为实施记录与三裁定回写,不改动 R/KTD/U 编号语义。
需求来源:2026-10-12 用户提出将 `svc.sh` 增强为统一部署入口(二进制与源码、环境准备、无初始密码开户与账户恢复),并要求一次性 API Key 只能兑换「设置密码」受限会话。负责人:weichen;编制:Cursor Agent。
主记录:本文;任务卡:Dev `.task/feature-svc-unified-deploy-login-key.md`。源码路径以 Dev 根目录为基准。
@@ -233,13 +234,15 @@ flowchart LR
凭据规则:独立前缀;只存摘要;用途 `activate`|`recover`;状态未使用/已消费/已撤销/已过期;密码变更后旧恢复凭据不可再用。符合 [OWASP Forgot Password](https://cheatsheetseries.owasp.org/cheatsheets/Forgot_Password_Cheat_Sheet.html) 与 [Session Management](https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html);保留现有 CSRF 校验。
## 9. 风险与未授权范围
## 9. r2 编制期历史记录:风险与当时未授权范围
- 实施、故障注入、真机部署、浏览器验收:**未授权 / NOT_RUN**。
本节与第 10 节保留 r2 编制时点的原始边界,不表述本轮当前状态。当前批准、接管与交付范围见页首及 Dev #486;登录恢复实施记录见第 11 节。历史 NOT_RUN 保持原对象范围,部署及共享数据库操作仍须另行授权。
- 编制时点的实施、故障注入、真机部署、浏览器验收:**未授权 / NOT_RUN**。
- 本轮交付终点:r2 本地草案、恢复配套修订、任务卡与索引、文档核查和审阅记录;以本地文档提交固定审阅对象并满足同步门禁。新增修订仍待批准,不推进 Dev gitlink、不推送/建 PR;启动/同步工具的任务元数据提交单独记录。
- 与 recovery U1 重叠处只做增量,不重做已合入的 manifest 层。
## 10. 规划进展与下一步
## 10. r2 编制期历史记录:规划进展与当时下一步
- r1 已批准;U1/U4 基础实现存在于当前固定源码,完整浏览器/故障/运行验收不可据此推断通过。r2 的新增需求和设计仍待人工评审。
- 首选下一任务(待授权):恢复方案 U8 的 SQLite 服务隔离+本案 U7 账户一致性;先消除共享测试数据和不可归因密码变化,再落实 U5。U2/U3 保持后续。
@@ -7,13 +7,15 @@ artifact_contract: rdm-increment-plan/v1
product_contract_source: legacy-requirements
---
# RDM 设置归属、成员、文档职责与权限矩阵完善增量方案 r1
# RDM 设置归属、成员、文档职责与权限矩阵完善增量方案 r1(附 r1.1 修订,2026-10-14 评审通过)
负责人: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 修订,**已于 2026-10-14 获用户人工评审通过**(连同阶段 6 实施候选一并批准;依据见文末「评审核查记录」之后的评审结论)。r1.1 不改变 P1–P8 范围或正式验收门禁。
## Goal Capsule
以现有 RDM 实施总案的一个完整增量,先厘清设置归属和服务端权限,再补齐搜索、选择、职责分配与权限矩阵交互,保证界面显示、保存结果和实际执行一致。终点:创建者、普通成员、职责人员在真实账号浏览器流程中完成成员添加、职责分配、权限查看与设置保存,且服务端边界(受管设置、成员校验、原子职责变更、权限范围)全部经真实请求验证。
@@ -236,8 +238,29 @@ product_contract_source: legacy-requirements
| 职责目标未校验成员 | `rdmReviewAssign` handler 注释“数据,非身份”——按 G1-5 旧裁定绕过成员校验;**本方案 P4 推翻该裁定,属规则变更,在 P1 契约中记录** |
| 职责更新与审签失效分步 | 文档级 assign 先写职责再调 `InvalidateActiveDocSubmission`,两步顺序非原子;**章节级 assign 完全未接失效** |
## 阶段 4 修订 r1.1(2026-10-14 编制,2026-10-14 人工评审通过)
### 旧项目配置冲突的来源选择
r1 评审补充 2 已批准“同键取最近写入时间”为默认合并规则。实施核查发现旧 `(owner, project)` 设置行没有逐键修改时间;行或快照时间不能证明每个键最后由谁写入。若按该时间自动决定来源,就会把无法证明的先后顺序当作数据事实,可能覆盖另一成员的项目策略。
候选修订:先按项目和路径列出旧副本及脱敏冲突状态,不自动选择冲突值。有权配置该项目的人在预览中逐路径选来源;观察记录绑定操作者、项目、来源和目标版本,应用时重新鉴权、复验记录与版本,并在事务中写入共享项目配置。旧行保留作只读恢复依据,受管系统项和个人秘密不自动提升为共享配置。无冲突路径也须在预览中明确来源,不能把行时间冒充逐键时间。失败不部分迁移;相同观察重试保持幂等。生产迁移及正式验收尚未执行。
备选是补造逐键时间或以固定成员优先级自动覆盖;前者没有历史依据,后者会静默丢弃其他成员选择,因此本候选采用显式裁定。用户于 2026-10-14 评审通过本修订:以逐路径显式来源选择替代 r1 评审补充 2 的“同键最近写入”默认规则;生产迁移仍 **NOT_RUN**,待正式组合验收时按本修订执行。
### 项目设置写入的公开授权合同
共享配置改为以项目为权威后,Backend 必须由宿主项目判断读者和配置者。现有 `ResourceAuthorizerV2` 只覆盖资源读取,`ProjectLifecycle.Work` 只说明成员可工作,二者均不能推断项目设置写权限。候选增设可选的 `ProjectSettingsRegistry.RegisterProjectSettingsAuthorizer`,由与项目生命周期相同的提供者按受信 actor、宿主 projectID 和读/写动作作出判定;缺失提供者或拒绝均失败关闭,HTTP 请求不能自报其他主体或项目来绕过。
该公开扩展点保留旧插件兼容:未注册回调的插件不能因此获得共享项目设置能力;基座其他个人/系统设置仍走原有各自授权。用户于 2026-10-14 评审通过该模块职责与接口;正式基座扩展发版仍属高后果操作,按双钥匙由用户亲手执行,随后 RDM/Dev 升正式 pins 并做组合验收。具体请求、版本和失败语义见 [接口与验证记录](../records/2026-10-14-rdm-settings-completion-contract.md)(当前 r0.3;受评版本 r0.2)。本阶段只完成源码与隔离 SELF 自检,没有发布版本或升级正式 pins。
## 评审结论(2026-10-14)
评审人:weichen(用户)。评审对象:Documents 主方案 r1.1 两项修订(受评提交 `62c2e2347e7656ee5a07900d77968ecbea415bbd`)、接口记录 r0.2、阶段 6 实施候选(Dev 任务 HEAD `3336bcb` 组件组合,RDM `931fc4c33aceb7105b319a886d6ee817896200fd`)。用户结论:“请分别评审:①以逐路径显式选择来源替代旧配置‘最近写入’规则;②新增缺失即拒绝的项目设置授权回调;③阶段 6 实施候选。……评审通过,推进下一阶段。”三项均记为**通过**;阶段 7 正式测试与验收据此进入,其人工节点仍按 `policy/delivery.md` 保留给用户。
## 主记录与推进
- 主记录:本文件(唯一正文);任务卡 `.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 产物已于 2026-10-14 获用户评审通过。基座正式发版、RDM 正式 pin 升级、阶段 7 正式验收与后续 Review/合入尚未完成。
- 下一步:按本方案的发版依赖进入阶段 7 正式测试与验收:先由用户按双钥匙完成基座公开扩展发版,RDM/Dev 升正式 pins 后执行正式组合验收(含生产迁移预演决策、真实多身份浏览器与真实模型任务级对照);发布版本的双钥匙边界不变。
@@ -0,0 +1,65 @@
# 项目设置完成性修复:接口与验证记录 r0.3
本记录承接已批准的 `../proposals/2026-10-13-rdm-settings-members-duties-perms-increment.md` r1 及 r1.1(两项阶段 4 修订于 2026-10-14 获用户评审通过,权威结论见该方案「评审结论」节),不改变 P1–P8 和 R1–R5 的交付范围。当前是阶段 7 输入的已批准候选,正式验收、发布、部署与清理均不由本记录代签。
修订:r0.3(2026-10-14)仅更新评审状态与阶段表述;r0.2 为受评接口记录版本,合同内容不变。
当前权限边界遵循已合入的 `../proposals/2026-10-13-iam-i1-permission-contract.md`:系统管理身份不代替业务成员、动作、资源或文档职责授权;停用角色不回落为无绑定默认。
## 恢复与完成性差距
恢复前共享检出只有 Documents/Guidelines 的已保存提交漂移。核对内部无未提交文件、detached HEAD、当前提交已在登记历史保存之后,恢复登记 gitlink、快进本任务收尾分支并物化新 Documents。随后 Dev 启动检查返回 READY,独立任务为 `feature/rdm-settings-completion`;初始主干 R0 是 `add097d06137c4912a4ed9279e98ca353e4e4cf1`。RDM 独立任务同名,初始 R0 是 `6fcb256205c2384abed35d3b6ab96ca7216e9297`。
旧任务的归档与通过叙述保留为历史。当前源码核对发现角色过滤、文档搜索/树、共享配置和模型/密钥其他覆盖入口缺项;旧接受脚本场景 9 没有执行检查、场景 10a 只比较 UI 默认值。这些内容不能证明原方案完整完成,新的验证必须检查真实动作和结果,不修改旧收据。
## P2 基座公开扩展申请与候选合同
场景:项目成员应读取同一业务配置;只有目标项目的合法配置者可以修改。个人在项目中的偏好仍须私有。
现有 `ResourceAuthorizerV2` 的公开合同只覆盖读取,不能将其复用为项目配置写授权。`ProjectLifecycle.Work` 是成员工作资格,不是配置资格。新增可选 `ProjectSettingsRegistry.RegisterProjectSettingsAuthorizer`;回调别名为 `func(context.Context, actor, projectID string, write bool) error`。主体和宿主项目 ID 由执行端解析,不能由请求自报;提供者必须与项目生命周期提供者一致,缺失或拒绝时失败关闭。
这是一项向后兼容的可选公开能力,候选扩展面为 `2.13.0-experimental`。RDM 以窄接口消费,不修改 `pins/`,不导入 Backend 私有包,不用反射或缓存的他人 Host 身份恢复授权。新基座发版与组合采用仍是完成条件;发版双钥匙由用户执行。
设置描述的归属词汇为 `system`、`user`、`project`、`project-personal`。空的旧插件 scope 仅保留个人兼容,不能推断共享策略资格。模型、运行参数、系统工具与插件目录属于系统;交付物默认样式等项目业务配置共享;主题、个人指令与跨会话个人开关不变成全员共享。
公共接口候选:
| 接口 | 合同 |
|---|---|
| `GET /api/settings` | 仅个人 schema/default/user |
| `GET /api/settings?project=<宿主ID>` | 共享 schema/default/project、projectRevision、projectCanConfigure;个人项目偏好另列 personalSchema/personalDefaults/personalUser/personalProject |
| `PUT /api/settings/project/<宿主ID>` | `{values,expectedRevision,unset?}`;只更新明确变更的项目叶子,旧版本 409 |
| `PUT /api/settings/project/<宿主ID>/personal` | 私有合并补丁;声明的非秘密叶子 null 表示移除覆盖 |
| `GET /api/settings/system` | 系统 schema/default/system、systemRevision;管理员保护 |
| `PUT /api/settings/system` | `{values,expectedRevision,unset?}`;管理员保护与版本比较 |
| `PUT /api/settings/user` | 个人合并补丁;声明的非秘密叶子 null 表示移除覆盖 |
`unset` 只接受当前作用域已声明的非秘密叶子;父路径、未知路径、内部策略、重复或与 values 重叠的路径拒绝。未修改的掩码不提交;秘密撤销显式写空字符串,不能通过移除让旧部署凭据恢复。画像模型路由、个人服务密钥、环境 AuthRef 与所有运行解析同样受系统边界约束。
## P3/P4/P6 领域合同
人员检索共用 query/match/roleId/projectRole/cursor/limit;姓名缺失回退账号,重名使用稳定账号区分,过滤后分页。`rdm.role.options` 仅返回有资格使用的角色名称和 ID,不下发全部绑定账号或权限上限。
成员目录返回当前成员的姓名、有效性、专业角色及请求者的实际管理能力。缺失账号目录时有效性是未知,不伪造有效。职责资格还须对应动作的上限;专业角色筛选不授予身份或职责。
文档目录/树共用同一受授权裁剪的检索结果;仅文档节点可提交 docId。当前职责与冻结名单分别返回。文档、章节和批量写入均要求 expectedDutyVersion,实际作废在途审签还要求 confirmInvalidation;无版本、缺账号校验或不合资格的旧命令同样拒绝。变更、作废、事件全成或全败,历史名单保留。
章节沿用文档默认职责时,`expectedDutyVersion` 的有效值随文档默认版本变化;单独指派后则随章节版本变化。当前只读与写入使用同一数值:继承为 `2 × 文档职责版本`,覆盖为 `2 × 章节职责版本 + 1`,两类数值互不混淆。该值由事件重放结果计算,不迁改既有职责或历史审签。原始版本继续保存在领域事件中;客户端必须读取当前职责,不能假定新章节版本恒为 0。
成员移除先读取 `rdm.project.member.impact`,只给该成员职责关系的必要元数据;没有正文或职责目录权限不因此获得全项目目录。实际移除重新检查影响与最后负责人,并与成员删除/事件写入同事务。
项目权限只返回项目动作;系统创建权限不混入项目矩阵或项目覆盖。解释返回 defaultAllowed/capAllowed/override 与可读来源/原因;控制组件消费请求者真实能力,不从被查询成员身份推算。项目动作允许不代表任意文档读取或签字资格。
## P8 迁移与验证边界
迁移清单只返回来源、路径与状态,不返回秘密值或摘要。旧表没有逐键更新时间,不能伪造“最近写入”权威;冲突必须明确裁定。显式预览选择生成受保护、绑定主体与项目的观察记录,应用时重新鉴权、核对来源与目标版本、保留旧行、原子写目标与结果;相同观察重试幂等。系统迁移只采用管理员明确提供的新值,不自动提升他人的私有凭据。
配置来源/目标在同一存储事务中检查;跨数据库的身份与业务授权回调在进入操作时独立核验,不声称它们属于同一个 SQL 事务。模板的实际使用仍重验实时资源授权。
隔离 PostgreSQL 自检复现了两个实例之间的旧职责覆盖、移除新职责人员,以及两个进程同时降级负责人。RDM 项目写事务读取同一个可序列化数据库快照中的领域事件和成员策略;序列化冲突返回错误,客户端重读状态,不盲目重试写入。此处只证明对应隔离用例,不能推断所有跨数据库状态已原子化。
验证包含领域/公共契约红测、SQLite/PostgreSQL 事务和竞争、真实 React 浏览器机制、隔离实例完整行为、Core/UI/Frontend/Backend/RDM 精确组合。mock/接口 fixture 只证明相应机制,不能替代真实组合、模型任务级证据、正式验收或当前 HEAD CI。
实施与自检的实际对象、命令、输出及剩余项维护在 Dev/RDM 同名任务卡和源码外原始收据;本记录不手抄命令输出、不提升 SELF 为 REPLAY/GATE。未执行的正式验证保持 NOT_RUN。
本轮旧验收脚本的首次实施前 RED 曾在两项负例中对默认 8788 使用测试身份尝试准备流程;旧脚本没有保存各请求响应码,因此是否发生写入无法由该次收据确认。原始收据保留在 `/tmp/rdm-settings-acceptance-red-20261014.json`。新验证入口要求显式隔离地址、保护文件和有效真实文档,不把请求失败或未执行的浏览器场景报告为通过;隔离业务实例的完整运行仍待后续固定组合。