diff --git a/.task/feature-svc-login-recovery-flow.md b/.task/feature-svc-login-recovery-flow.md index b1f629a3..9624d763 100644 --- a/.task/feature-svc-login-recovery-flow.md +++ b/.task/feature-svc-login-recovery-flow.md @@ -85,6 +85,18 @@ | 时间(UTC) | 命令 | 被测HEAD | exit | 来源 | sha256(16) | |---|---|---|---|---|---| +## 收尾增录(2026-10-13 追加,随 feature/svc-login-recovery-followup 分支提交) + +- 真实浏览器验收:隔离 auth-on 实例(serve --data /tmp/lr-e2e-data --auth on, + 二进制 backend=467718a+frontend=9fc7da2)PASS——管理员签发→只输 Key 兑换→免旧密码设密→ + 新密码登录→同 Key 重复兑换被拒;changepw-form 回归同过。收据(SELF,绑定 Dev HEAD 268ef29): + /tmp/login-key-e2e-acceptance-20261013b.json sha256=be7ae9a2…; + /tmp/login-key-final-state-20261013.json sha256=b3a9e691…。 +- SSE 断流(合同 §6.7):Backend #189(349a47d,CI success)已合入。 +- 登录兑换 E2E 入库:Frontend #77(44b9646,GATE=本分支 Dev 组合 CI)。 +- Documents 主方案 r3 回写:Documents #94 已合入。 +- 主检出 scripts/svc.sh 并行写者未收尾,`make task-close` 待树干净后执行。 + ## 结果与验证(完成后填写) - 结果: 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 c72dd4a4..7e126e04 100644 --- a/docs/svc-deploy/2026-10-13-login-recovery-contract.md +++ b/docs/svc-deploy/2026-10-13-login-recovery-contract.md @@ -68,9 +68,14 @@ 以上本地结果均为 SELF;GATE 以 PR HEAD 的 CI(含 test-pg)为准。 -## 遗留项(不阻塞本合同) +## 遗留项(不阻塞本合同;2026-10-13 追加收尾) -- 登录页专用兑换 E2E(login-key.playwright.ts,U5 计划文件)。 -- SSE 长连接的认证版本主动复验/断流通知。 -- Documents 主方案 r2 的 U4/U5 规格按本文回写(与 PR #87 合入后再推进,避免文档冲突)。 -- 兑换入口跨实例限流(当前进程内退避,与 `loginGuard` 同档)。 +- ~~登录页专用兑换 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 凭证的撤销断流仍后续。 +- ~~Documents 主方案回写~~:**已完成**(Documents #94 r3,含三裁定与实施记录)。 +- 兑换入口跨实例限流(当前进程内退避,与 `loginGuard` 同档)——仍后续。 +- U7 余量(原子开户/引导、CLI 凭据安全交付、PG 锁串行首管)——仍后续,另行任务。 diff --git a/modules/frontend b/modules/frontend index 9fc7da2a..44b96468 160000 --- a/modules/frontend +++ b/modules/frontend @@ -1 +1 @@ -Subproject commit 9fc7da2ace8578d87d2601adcbf831e0b955aa68 +Subproject commit 44b964682c89535342c283aa73492c758b16c732 diff --git a/tests/integration/multi-instance/multi_instance_test.go b/tests/integration/multi-instance/multi_instance_test.go index 7c9f30fc..bde0fbd5 100644 --- a/tests/integration/multi-instance/multi_instance_test.go +++ b/tests/integration/multi-instance/multi_instance_test.go @@ -459,9 +459,9 @@ func (e *env) loginAlice(t *testing.T) *userClient { apiB: &http.Client{Timeout: httpWait, Transport: bearerRT{key: key}}, streamB: &http.Client{Transport: bearerRT{key: key}}, // SSE 无整体超时;chan 背压控制 } - // P2 受管(Backend #190):--mock 启动选项播种系统层(runtime.mock 为 - // 系统受管项),对全部租户生效——alice 无需再显式开启 mock; - // selectConversationRunner 按 EffectiveSettings 分流到 MockRunner。 + // runtime.mock 自系统受管设置体制(backend #188/#190)起由 --mock 播种进 + // 系统层,经 Effective 链对所有租户生效(selectConversationRunner 按 + // EffectiveSettings 分流);alice 的用户层写入会被受管拦截,也不再必要。 return uc }