# 需求:Easy Disk 登录链当日根治——fs scope 快照持久化 + CSP connect-src 漏放行 + SDK 登录竞态(10-04 全闭环,boss 真机验收)

状态: done
归属: pinnadash 产品
来源: 登记缺口(ops/products/#easy-disk)
日期: 2026-10-04
建议: 已完成;0.9.9 随版携带全部修复(requireAdministrator 体验缺陷与 loopback 评估留作独立拍板项)

## 现状(10-04 当日根治,三层连环)

boss 真机报「登录失效」。逐层实证并当日全部修复,boss 真机验收通过:

- **层1 快照持久化断**:capabilities `fs:scope` 不含目录本身,plugin-fs `mkdir(appDataDir)` 永远 forbidden(`REJ: forbidden path` 日志铁证),登录态活不过重启。**修法=plugin-fs 整体退役,自家 Rust 命令 `read_snapshot`/`write_snapshot` 直写**(ES 同款架构,round-trip 测试先红后绿;包体 -1MB)。
- **层2 CSP 漏放行(最后一公里)**:10-04 13:14 安全批 0faa325 把 `csp: null` 收紧为最小化,`connect-src` 漏放 `https://account.pinnadash.com` → 应用内兑换 fetch 即刻 `kind=network Failed to fetch`(仪表日志当场定罪)。**五仓同源批同病**:ES/EC/EF 已各落一行修复;IF conf 路径待查。**教训:安全收紧批必须带「被放行的业务域清单」对照表,登录/更新/feed 域是第一批客户。**
- **层3 SDK 登录竞态**:createLoginUrl 单槽凭证,重复点击登录互相踩(先点的标签兑换必 PKCE 400;日志双 REJ 时刻铁证)。**修法=account-sdk 0.2.1**:10 分钟窗口内复用 pending verifier(3 测红绿)。
- **加固随车:account-sdk 0.2.2** 网络层重试×3(仅 TypeError,4xx 不重试,2 测红绿)——桌面 WebView 直连的瞬时抖动不再一击致命。
- 排除项(曾立论后推翻,记录防复发):UAC 闸(本机 UAC 从不通知)/内嵌史前前端(brotli 压缩 grep 假阴性)/深链事件链断(仪表实测 recv 正常)。
- 次要遗留:主程序 requireAdministrator(五产品唯一,真实用户回跳插 UAC)——loopback redirect 评估留独立拍板;IF 的 CSP 待查补;ES/EC/EF 的 SDK 建议随版升 0.2.2。

## 方案(已全部落地,未提交待授权批)

1. ED:fs 插件退役(Cargo.toml/lib.rs/capabilities/package.json)+ Rust 快照命令 + account.ts 换 invoke + 深链/错误全链 debug_log 留痕 + tauri.conf CSP connect-src 放行账户中心。
2. account_center/packages/sdk@0.2.2:verifier 复用 + fetchRetry,已上 Forgejo 源(prepublish 测试过)。
3. ES/EC/EF:tauri.conf connect-src 各一行。

## 验收标准

- [x] 全新登出态应用内点登录 → 浏览器完成 → 应用自动接住,快照真实落盘(boss 真机 17:43 实测;`account.session` member=true monthly 在盘)
- [x] 服务端出现 easy-disk 活 refresh token(rt_912b536 17:43 D1 实证)
- [x] 会员/试用徽标即时刷新,重启后登录态保持(快照 seed 链路)
- [x] 深链/错误全链日志留痕(deeplink recv + account error kind/status)
- [x] Rust 快照 round-trip 测试 + SDK 5 测红绿(复用/过期/损坏/重试/不重试)
- [ ] ES/EC/EF 随版验证登录(修复已在盘);IF CSP 查补
- [ ] 0.9.9 走 release.mjs 正式发版(签名 key 在其环境)
