Merge pull request 'Record the login recovery implementation as proposal r3' (#94) from feature/login-recovery-r3 into main

This commit was merged in pull request #94.
This commit is contained in:
2026-10-13 04:30:16 +00:00
2 changed files with 46 additions and 3 deletions
@@ -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 账户验收。详见合同文档「遗留项」。
+1 -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 对齐后续增量。