From d518b3eab2adc94504585e4e5c6000a390ef403c Mon Sep 17 00:00:00 2001 From: weichen Date: Tue, 13 Oct 2026 06:07:57 +0000 Subject: [PATCH] Close the login recovery contract leftovers in Dev Why: The remaining open items (API-key SSE closure, cross-instance redeem backoff, U7 atomic bootstrap/create, CLI credential delivery) landed in Backend #192; Dev pins it and closes the contract leftovers. Evidence: Backend #192 CI success at head bc1e0a3 (GATE); composite CI on this PR re-runs the suite incl. test-pg (GATE). Impact: backend pin cfb8308; contract leftover section now records all items closed; task card H1-H6 requirement table. Refs: Backend #192; docs/svc-deploy/2026-10-13-login-recovery-contract.md. --- .task/feature-svc-account-hardening.md | 10 +++++++++- .../2026-10-13-login-recovery-contract.md | 17 +++++++++++------ modules/backend | 2 +- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/.task/feature-svc-account-hardening.md b/.task/feature-svc-account-hardening.md index 52c92aa0..ebe29862 100644 --- a/.task/feature-svc-account-hardening.md +++ b/.task/feature-svc-account-hardening.md @@ -28,7 +28,15 @@ | ID | 描述 | 项目符合度及依据 | 优先级 | 验收条件 | 依赖 | 结论 | |---|---|---|---|---|---|---| -| R1 | 待填写 | 待评估 | 待定 | 待定义 | 待确认 | 待评审 | +| H1 | 撤销 API key 的 SSE 断流 | 需补齐;#189 仅覆盖会话凭证 | P0 | 撤销后复验窗口内 `session-expired` 终止 | — | 纳入本增量 | +| H2 | 兑换入口跨实例限流 | 需补齐;原为进程内退避 | P0 | 双 Store 同库共担;HTTP 达限 429 | 迁移 v29 | 纳入本增量 | +| H3 | 并发建号不覆盖(R5/KTD12) | 需补齐;原先查后插再 UPDATE 有覆盖窗口 | P0 | 16 并发同名 1 胜、胜者凭据完好 | — | 纳入本增量 | +| H4 | 首管引导串行 + 拒绝接管(R11/KTD12) | 需补齐;原为检查后创建非原子 | P0 | 8 并发引导恰 1 管理员;已有用户 ErrConflict | — | 纳入本增量 | +| H5 | CLI 凭据安全交付(KTD14 首期) | 需补齐;DSN 只走 argv、明文只走 stdout | P1 | AGENT_SYSTEM_DSN 回落;--out 0600 文件、stdout 无明文 | — | 纳入本增量 | +| H6 | 部署 dev + live 可验证项验收 | 授权来源:用户 2026-10-13「把仍开放项做完」 | P1 | 版本/迁移 v28+v29/账户完好/健康;owner 浏览器登录交用户 | H1–H5 合入 | 纳入本增量 | + +- 授权与交付终点:用户 2026-10-13「继续推进,把仍开放项做完」——覆盖合同遗留项实施、 + 组合合入与 dev 实例部署验收;owner 浏览器输密码与 live 故障注入不在授权内。 ## 方案与计划 diff --git a/docs/svc-deploy/2026-10-13-login-recovery-contract.md b/docs/svc-deploy/2026-10-13-login-recovery-contract.md index 7e126e04..0042d2c8 100644 --- a/docs/svc-deploy/2026-10-13-login-recovery-contract.md +++ b/docs/svc-deploy/2026-10-13-login-recovery-contract.md @@ -68,14 +68,19 @@ 以上本地结果均为 SELF;GATE 以 PR HEAD 的 CI(含 test-pg)为准。 -## 遗留项(不阻塞本合同;2026-10-13 追加收尾) +## 遗留项(2026-10-13 全部收口) - ~~登录页专用兑换 E2E~~:**已补齐**(Frontend #77,`e2e/login-key.playwright.ts`; 真实浏览器全流程验收 PASS——签发→只输 Key 兑换→免旧密码设密→新密码登录→重复兑换被拒, 隔离 auth-on 实例,收据 sha256 `be7ae9a2…`/`b3a9e691…` 绑定 Dev HEAD 268ef29,SELF)。 -- ~~SSE 长连接断流~~:**已实现**(Backend #189,`349a47d`,CI success)——会话凭证的流 - 在心跳点复验(默认 15s,测试可缩短),失效即以 `session-expired` 终止; - API key 凭证的撤销断流仍后续。 +- ~~SSE 长连接断流~~:**已实现**(Backend #189 会话凭证;#192 补齐 API key 凭证)—— + 心跳点复验,失效即以 `session-expired` 终止(默认 15s,测试可缩短)。 - ~~Documents 主方案回写~~:**已完成**(Documents #94 r3,含三裁定与实施记录)。 -- 兑换入口跨实例限流(当前进程内退避,与 `loginGuard` 同档)——仍后续。 -- U7 余量(原子开户/引导、CLI 凭据安全交付、PG 锁串行首管)——仍后续,另行任务。 +- ~~兑换入口跨实例限流~~:**已实现**(Backend #192,迁移 v29 `redeem_attempts` 共享库 + 窗口计数;双 Store 连接同库共担限流的测试覆盖)。 +- ~~U7 余量:原子开户/引导、CLI 凭据安全交付、PG 锁串行首管~~:**已实现** + (Backend #192)——CreateAccount 单行 INSERT(并发同名 1 胜且胜者凭据不被覆盖); + BootstrapFirstAdmin PG 咨询锁 + SQLite 插入后复查,建号+激活 Key+审计同事务, + 已有用户拒绝接管(R11);CLI `AGENT_SYSTEM_DSN` 环境输入与 `--out` 0600 文件交付。 +- 部署与 live 账户验收:**本任务执行部署与可验证项**;owner 浏览器输密码一步 + 按合同由用户完成(密码不交给 Agent)。 diff --git a/modules/backend b/modules/backend index 741da4a0..cfb83088 160000 --- a/modules/backend +++ b/modules/backend @@ -1 +1 @@ -Subproject commit 741da4a0b6c8d8e5b665789bda33f65ed3471a0e +Subproject commit cfb8308895d0b94765ba10ed0e5b9bf38b439414