Compare commits

..
Author SHA1 Message Date
weichen 6c096b9360 Record project event privacy and duty replay refinements
Why: Legacy upload events and synced duty flows need the same private-data and current-state guarantees as new member work.

Evidence: Real legacy SSE leakage and independent duty replay findings; correction evidence remains in the canonical task record.

Impact: Describe trusted per-event sharing and durable duty versions without new mandatory downstream interfaces or runtime changes.

Refs: system-project-membership r1.1; Dev feature/project-member-access
2026-10-13 11:06:42 +00:00
weichen 61e0aef39c Specify system project membership and shared knowledge boundaries
Why: Joined members must see one globally named project and keep private conversations and source documents.\n\nEvidence: Proposal links the fixed implementation plan, explicit authorization and task evidence without claiming deployment or CI success.\n\nImpact: Define optional lifecycle extension, identity recovery, private reads and published knowledge for U2/U3/U5.\n\nRefs: Dev feature/project-member-access
2026-10-13 09:56:06 +00:00
weichen 5a06acf7cd Merge pull request 'Record the login recovery implementation as proposal r3' (#94) from feature/login-recovery-r3 into main 2026-10-13 04:30:16 +00:00
weichen 0b290b7461 Record the login recovery implementation as proposal r3
Why: The 2026-10-13 login recovery flow was approved and merged
(Backend #187, Frontend #76, Dev #504); the master proposal must carry
the three adjudications, implementation record, and evidence pointers
per the repo's lineage conventions.

Evidence: Dev #504 HEAD CI (test/test-pg/svc-realcombo) success; browser
acceptance receipts be7ae9a2/b3a9e691 bound to Dev HEAD 268ef29 (SELF).

Impact: r3 is an implementation record only; R/KTD/U numbering semantics
unchanged; U7 explicitly NOT marked complete (atomic bootstrap and CLI
credential delivery remain). INDEX.md status line updated.

Refs: Dev docs/svc-deploy/2026-10-13-login-recovery-contract.md
2026-10-13 04:30:04 +00:00
weichen 267327671d Merge pull request 'Add RDM settings, members, duties and permissions increment plan r1' (#93) from feature/rdm-increment-settings-duties into main 2026-10-13 04:18:57 +00:00
4 changed files with 136 additions and 3 deletions
@@ -501,3 +501,7 @@ stateDiagram-v2
原始来源:S:35–76 与 D:75–88;RDM requirements/README、00、01/03/04/08/09/10;U0、V2.2 已批准裁定。矩阵中给出每条需求的原文位置。
设计依赖:两树一网展示方案 r1、多人存储方案 r1、模板对话生成方案及 69 类资产盘点。涉及 API 的名称均为候选设计,正式符号由公开契约申请确定。
本轮没有联网核验法律或标准条款,也没有声称系统已符合任何特定法规;本方案讨论项目既定需求、数据追溯与实现验收。
## 2026-10-13 项目成员闭环增量
用户复现宿主项目成员保存成功、成员登录不见项目且不能建对话,已批准针对 U2/U3/U5 的方向与阶段 1–9 连续推进。具体实施主记录为 [系统项目、成员工作入口与私域协作闭环 r1.1](2026-10-13-system-project-membership.md),验证/组件/PR/CI 结果在关联 Dev 任务卡维护。当前实现候选已覆盖统一项目、全局名称、成员个人会话、领域分片、私域与发布知识,以及旧项目显式修复;组合验收与正式 tag 消费仍推进中,不据此声明全部 U2/U3/U5 或总目标完成。部署、8788 数据修复与清理仍未授权。
@@ -7,11 +7,12 @@ execution: code
product_contract_source: ce-plan-bootstrap
---
# svc 统一部署与一次性登录 Key 方案 r2
# svc 统一部署与一次性登录 Key 方案 r3
确认状态:**r1 原批准保留;r2 本轮增补待人工评审**。r1 的批准记录为 2026-10-12 用户「批准,继续推进」(五阶段及 U1/U4 规格,允许对应实施和 PR)。本轮用户要求仔细调研、详细方案并「继续」,覆盖方案修订及本地文档准备,不扩展为业务实施、账户变更、迁移、部署、故障注入、推送或合入授权。
确认状态:**r1 原批准保留;r2 增补已随 #87 合入(其评审状态以正文与审阅记录为准,不因合入视为已批准);r3 登录恢复实施记录待人工评审**。r1 的批准记录为 2026-10-12 用户「批准,继续推进」(五阶段及 U1/U4 规格,允许对应实施和 PR)。本轮用户要求仔细调研、详细方案并「继续」,覆盖方案修订及本地文档准备,不扩展为业务实施、账户变更、迁移、部署、故障注入、推送或合入授权。
修订记录: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。新增内容未批准;不以原批准记录代签新增范围。
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 根目录为基准。
@@ -243,3 +244,45 @@ flowchart LR
- r1 已批准;U1/U4 基础实现存在于当前固定源码,完整浏览器/故障/运行验收不可据此推断通过。r2 的新增需求和设计仍待人工评审。
- 首选下一任务(待授权):恢复方案 U8 的 SQLite 服务隔离+本案 U7 账户一致性;先消除共享测试数据和不可归因密码变化,再落实 U5。U2/U3 保持后续。
- 前置:审核新增 R13–R15、U7/U8 及 U5 更新,明确实现和隔离测试范围/owner;实现、测试、部署分别授权。Documents 与 Dev 文档草案位于各自独立工作区;正式组合、gitlink 推进与运行验收未执行。
## 11. r3 实施记录:登录恢复流程(2026-10-13)
授权:用户 2026-10-13「按此方案实施」(会话指示,覆盖登录恢复范围的实施与合入;
代码 Review 与 PR 合入按 Dev `policy/delivery.md` 由智能体执行)。
### 三项裁定(对 r2/U5 合同的分歧,用户按新方案裁定)
| 分歧 | r2 表述 | r3 裁定 |
|---|---|---|
| 登录页长期 API 密钥入口 | 保留并标注集成用途 | 移除日常登录入口;程序化客户端直接带 Authorization 头 |
| 管理员网页恢复方式 | 直接设置新密码 | 改为签发一次性登录 Key(旧 HTTP 端点兼容保留,仅前端 UI 下线) |
| must-change 首登会话 | full 会话 + 动态拦截 | 登录即建 `set_password_only` 受限会话,`me.sessionScope` 统一驱动设密门 |
### 已合入(2026-10-13)
- Backend #187(`f103540d`):迁移 v28(`users/sessions.auth_version` + `account_events` 审计);
管理员 `POST/GET /api/admin/users/{owner}/login-keys`、`DELETE .../login-keys/{id}`;
改密事务内复验会话与认证版本;登录会话创建绑定认证版本(竞态窗口关闭);
主动改密/管理员与 CLI 重置统一单事务;兑换入口按 IP 退避;TLS 下 Secure cookie。
- Frontend #76(`0655bc3`):登录页双入口(密码默认 + 一次性 Key,移除 `ask_`);
设密门免当前密码、成功后回登录页(消费 `reloginRequired`);刷新按 `sessionScope` 恢复门;
用户管理改签发/撤销 Key(明文仅一次)。
- Dev #504(`268ef29`):合同文档 + 组件 pin。
覆盖判定:R7/R8/R9 及 U5 的浏览器接线主体已实现;U7 的登录恢复事务部分已实现,
**原子开户/引导、CLI 凭据安全交付与 PG 锁串行仍未实施**,U7 不得据此记完成。
### 验收证据
- GATE:Dev #504 HEAD CI 三作业(test / test-pg / svc-realcombo)success;Backend #187 CI success。
test-pg 即真实 PostgreSQL 运行本任务 store 测试(含 100 并发兑换单胜、登录竞态)。
- SELF(收据,绑定 Dev HEAD `268ef29`):真实浏览器全流程验收 PASS——
`login-key.playwright.ts` + `changepw-form.playwright.ts` 于隔离 auth-on 实例
(`serve --data /tmp/lr-e2e-data --auth on`,二进制 backend=467718a+frontend=9fc7da2):
管理员签发 → 只输 Key 兑换 → 免旧密码设密 → 新密码登录进工作台 → 同 Key 重复兑换被拒。
收据 sha256:`be7ae9a2…`(验收)、`b3a9e691…`(终态)。用例文件待 Dev 工作区解封后入库。
### 遗留(另行任务与授权)
SSE 存量长连接断流通知;`e2e/login-key.playwright.ts` 入库与 Dev pin;U7 余量;
部署与 live 账户验收。详见合同文档「遗留项」。
@@ -0,0 +1,84 @@
# 系统项目、成员工作入口与私域协作闭环 r1.1
状态:用户 2026-10-13 已批准方向并授权阶段 1–9 连续推进;实现与隔离验证进行中。发布版本、部署、8788 数据修复及工作区清理不在本次授权内。
本增量补齐总案 [RDM 最终目标核对与完整交付方案 r1](2026-10-11-rdm-final-target-completion.md) 的 U2,以及 U3/U5 与项目成员协作直接相关的边界。需求来源为 2026-10-13 用户复现和 `.tmp` 会议补充中“同名项目唯一、加入后可见且能新建对话、会话私有、每项目共享两树一网”。这不是模板全量迁移或三权流程重设计。
## 已定位的问题
8788 的成员添加记录已保存,但用的是宿主项目 ID;该 ID 没有领域注册或宿主绑定。列表和对话创建的共享适配器因此拒绝它。新建项目走宿主 owner 表,而成员管理、两树一网走领域表,缺少统一生命周期。会话列表还只检查宿主 owner,领域的名称 UNIQUE 也没有覆盖宿主创建入口。
r1.1 增量:合并现行主干的成员 Picker、职责目录和权限矩阵,并闭合其独立重放发现的首次提交、渲染确认、迟到响应、职责幂等和持久版本问题;范围仍为本次成员与私域协作。
运行制品仅有短来源标记,不能把当前源码视为其已证明的组件组合。只读现场证据、对象 SHA 和完整脱敏输出保存在 Dev 本任务卡,不在本文复制命令输出或线上数据。
## 职责与公开契约
RDM 保持项目、成员、职责与领域数据权威。Backend 管认证、宿主技术投影、私人会话/工件和通用资源执行边界。Frontend 只消费服务端身份与状态。
```mermaid
flowchart LR
U[认证用户] --> P[统一项目应用服务]
P --> D[RDM 项目与成员]
P --> H[宿主一对一投影]
H --> C[按用户归属的个人会话和原件]
D --> W[按项目分片的两树一网]
W --> K[成功发布的知识切片]
K --> R[当前项目的授权检索与模型上下文]
```
基座扩展申请的四要素:
| 要素 | 结论 |
|---|---|
| 场景 | 统一产品项目创建/改名/归档,验证映射两端,并允许项目成员创建个人会话 |
| 公开能力 | 可选 `extension.ProjectHost`、`ProjectLifecycle`、`ProjectLifecycleRegistry`;复用 `/api/projects` 与其会话路径;资源查询追加可选 `Source` |
| 现有能力不足 | 只读 V1/V2 不承担生命周期、跨库初始化和动作授权;原 Host 没有项目技术投影与管理验证接口;仅项目布尔或已知切片 ID 不能证明索引行仍是发布来源 |
| 兼容 | 保留必需 Host/Registry 接口;新能力经可选接口注册。未注册生命周期保留通用基座行为。RDM 产品缺该能力拒绝注册,防止悄然回到宿主个人项目路径 |
`ProjectHost` 由执行端按认证主体构造;投影修改和管理查找保持 owner 限制,共享 metadata 经过授权和脱敏。`ProjectLifecycle` 的 List/Create/Rename/Archive/Work 是完整注册的一组回调,公共项目入口委托给它。客户端传入的 projectId 或 `rdm.projectId` 均是定位符。
## 项目身份、名称和恢复
- 领域项目、名称保留和创建者负责人同库事务提交。跨库投影使用确定的宿主 ID 和持久 `provisioning/failed/ready` 映射;失败重试保持身份,不持有领域事务跨宿主调用。
- 本增量名称为去首尾空白后的精确名称;数据库唯一保护覆盖不同账号和并发。改名、归档后保留旧名归属。Unicode/大小写归一没有在本增量自动引入。
- 所有产品创建、改名、归档路径使用应用服务;归档保存会话、原件和数据,不能继续新工作。管理重试可定位未完成映射,但仍须 owner/动作检查。
- 新绑定验证真实宿主的存在和当前主体管理资格;既有绑定的 metadata/工作还验证物理宿主 owner 与映射创建者相符,不能只信映射存在。
- 现有孤立宿主项目通过 `rdm.project.adopt` 先预览、再显式 apply;保留宿主 ID 和 owner,将成员关系移到领域根。不能凭名称猜测已有领域身份,不把未归属历史默认搬入新根。
## 共享与私域
| 数据 | 默认边界 |
|---|---|
| 个人会话/消息/原件/附件 | owner 私有;成员加入不使其对其他成员可读 |
| 个人 pending/rejected 草稿 | 仅提案人;管理角色及其他职责不自动取得正文 |
| 受控正文、差异与导出 | 当前项目成员身份、阶段/动作及有效章节或文档职责;审计许可不代替正文许可 |
| 已采纳提案的本人不可变历史 | 本人自己的原始提案可保留;其他人读取受控内容走职责 |
| 树结构、元信息、快照哈希 | 项目协作所需的结构视图;不能用元信息入口夹带正文预览 |
| 历史正文预览 | 当前有效权限,不从历史重放恢复已撤销的职责 |
| 原件台账、待处理数量 | 当前 actor 在目标项目的条目;管理角色不自动得全员原件视图 |
| 项目发布知识 | 成员、明确领域根、成功发布台账、当前撤销代际与存活切片共同授权 |
发布切片保留其 ID、owner、原件锚点,索引 `ProjectID` 为领域 ID,来源为 `plugin:rdm:published`。跨 owner 查询还检查实际存储行的 `Source`;手工/私人来源不能借已知切片 ID 绕行。撤销代际阻止已排队或在途任务重新授予共享。替换按 owner、精确项目(含空 ID)、ref、插件命名空间隔离。
会话使用宿主 ID;HTTP、Host 和模型上下文通过服务端 provider 的可信 metadata 解析领域检索范围。每个实际知识对象再经过 V2,不能先按错误 ID 查空,也不能把 private 候选截断置于授权之前而隐藏合法结果。
## 界面与执行
沿用现有侧栏与项目设置,不新增管理屏。服务端 metadata 提供平面的 `rdm.projectId` / `rdm.state`,领域命令用 canonical ID,通用会话接口保留宿主 ID。未就绪项目不能回退创建默认项目;归档/关闭项目仍能读成员、权限和审签状态,不能新工作或修改。
账号切换使所有待返回的列表、工件、卡片和工作续接失效。执行在确认后、排队恢复以及写入前重验当前权限,撤权后的 HITL 回复不能产生工件或恢复执行。
项目 SSE 的历史重放和实时发送也必须按对象过滤。旧上传卡没有可信共享声明,不能因加入成员而暴露文件名、解析器或预览。权限从实际卡片/运行归属取值;明确共享由内部发布入口写入与 channel、seq、type 和 payload hash 绑定的声明,客户端 payload 不授予共享。未知或损坏证明拒绝,跳过私域事件仍推进扫描游标,保留未注册基座兼容。此为内部事件数据约束,不增加下游必需接口。
职责保存先校验对象、三权、成员及版本;无变化不使在途轮次失效,仅实际变更生效前执行既有失效规则。职责版本随事件持久化,旧载荷按实际角色变化重建;写入失败不修改内存职责。
## 验证与交付
追溯:R1 名称→并发/碰撞/旧名保留;R2 身份→真实创建/失败重试/物理 owner/绑定;R3 成员→真实登录、同 ID 项目、个人对话;R4 项目分片→两项目隔离;R5 私域→所有查询/预览/台账/模型上下文及撤权;R6 旧数据→显式预览/幂等修复/保留;R7 真实组合→浏览器、真实模型任务对照、独立 Review 和当前 HEAD CI。
测试原始输出由 evidence 工具写入任务卡,来源分开。单测、桩适配器、源码存在均不作为用户流程已完成的证明。当前完整运行/CI结果在任务卡维护,不在本文预写 PASS。
RDM README/AGENTS 要求合入前回到基座 tag pin;开发期采用隔离 modfile组合验证。发布新 tag 属用户亲手执行的高后果操作,必须先形成已评审且 CI 通过的具体基座候选。tag、合入、部署、运行库修复和清理分别核验,不能合并成一个“完成”。
下一步:完成本增量的组合验收与 tag 消费闭环;随后建议由用户授权在 8788 部署精确组合,并预览/修复已确认的孤立项目。未知历史归属、名称碰撞或身份不一致保留现场交人工裁定。
+3 -1
View File
@@ -176,7 +176,7 @@ RDM 总案把库分期作为支撑与依赖,不覆盖库分期的原始范围
## 2026-10-12 规划补充
- [svc 统一部署与一次性登录 Key 方案 r1](2026-10-12-svc-unified-deploy-and-login-key.md):将 `svc.sh` 增强为二进制/源码统一部署入口,并补齐无初始密码开户与账户恢复;一次性登录 Key 只能兑换设密受限会话。r1 含源码复核与四项取舍定案;复用恢复方案 KTD 与已合入的 recovery U1(Dev #415)。**2026-10-12 已批准**(五阶段+U1/U4 规格);授权推送/PR 与 U1/U4 实施启动;合入由 owner 执行。规格见 Dev `docs/svc-deploy/`。
- [svc 统一部署与一次性登录 Key 方案 r1](2026-10-12-svc-unified-deploy-and-login-key.md):将 `svc.sh` 增强为二进制/源码统一部署入口,并补齐无初始密码开户与账户恢复;一次性登录 Key 只能兑换设密受限会话。r1 含源码复核与四项取舍定案;复用恢复方案 KTD 与已合入的 recovery U1(Dev #415)。**2026-10-12 已批准**(五阶段+U1/U4 规格);r2 增补经 #87 合入;**2026-10-13 r3:登录恢复流程按用户「按此方案实施」批准并合入**(Backend #187 / Frontend #76 / Dev #504,浏览器验收 PASS;三裁定与实施记录见 §11)。规格与合同见 Dev `docs/svc-deploy/`。
- [服务重启与全量数据恢复方案 r2](2026-10-12-service-restart-data-recovery.md):2026-10-12 用户要求 svc 停止/再次启动及异常退出后恢复所有服务与数据;覆盖服务依赖/监管、持久配置和数据身份、run/HITL/命令/通知、未知副作用隔离、文件一致性与组合备份。r1 经六角色自审,r2 吸收外部源码复核(见同名 review 记录两轮)。**2026-10-12 用户批准 r2(五阶段一并)**;实施/故障注入/部署/运行验收 NOT_RUN。关联协作存储 R7;U2 首切片已由 svc-autorecover 任务合入 main(PR #396/#401,2026-10-11);U1 实例身份已合入(Dev #415,2026-10-12),余量按 KTD 对齐后续增量。
@@ -189,3 +189,5 @@ RDM 总案把库分期作为支撑与依赖,不覆盖库分期的原始范围
- [RDM 最终目标核对与完整交付方案 r1](2026-10-11-rdm-final-target-completion.md):本轮用户确认系统级唯一项目、管理员上限内覆盖、私域与三权读取边界;覆盖 34 UR/68 SR/10 F、全部69类模板及现有XLSX,当前源复核 RDM d8d7e743。总体方案待评审,实施/迁移/运行验收 NOT_RUN;模板方案为子方案。
- [工作台界面重设计 r0.2](2026-10-12-work-companion-ui-design.md)及[实施计划 r1](2026-10-12-work-companion-ui-plan.md):对话优先、渐进任务摘要、窄屏与单一状态投影;已获本次连续实施授权。
- [系统项目、成员工作入口与私域协作闭环 r1.1](2026-10-13-system-project-membership.md):2026-10-13 已批准方向及阶段 1–9 连续推进;统一生命周期、成员个人会话、每项目两树一网与私域权限;组合验收/CI/tag 消费推进中,部署和线上修复未授权。