# 浏览器与 Electron 存储

先确定普通浏览器 profile、Claude 主登录存储和内嵌预览 partition 的实际边界。它们可能同时存在于 Application Support 与 Library/Caches；清一个不代表另一个已清。以下是分层检查方法，不是要求每次重建所有数据库。

## 首轮清单

在已纳入的浏览器/profile 内一次发现：Cookies、目标 IndexedDB/站点存储、Local/Session Storage、Service Worker 注册与 CacheStorage origin 索引、扩展安装及 Local/Sync 状态、**独立 HTTP 磁盘缓存**。按需查 Login Data 目标站点元数据。浏览历史、保存标签组、书签和网络协议统计先列保留范围。

对 `claude.ai`、`anthropic.com` 等经确认目标域采用 hostname 的“相等或点分子域”边界匹配，不能对 URL/query/整个文件做无边界子串删除。内容 CDN 或新域先查可靠归属，不能猜。不是所有提到 Claude 的第三方资源都属于目标站点。

原生“清除网站数据”仅用于已确认旧目标且删除范围符合保护要求的存储。当前已登录新账号时，不默认登出或清整站；原生入口无法区分新旧状态时，改做精确旧项调查。原生操作由应用自身管理写入，无须为使用该入口而强迫停机；外部修改其文件才要求冷态。操作后按实际覆盖层读回，不从 UI 成功提示推断独立 HTTP 缓存、废弃字节或远端同步已消失。

维护逐层覆盖表及具体方法。原始字节扫描不冒充有效 KV 或解压后正文；用受支持原生能力或匹配版本的隔离解析补齐相关未查层，未变且已通过的层不重复全查。

## 新登录及人工操作后的重新归属

用户手动清过站点或扩展后先读回，别继续照旧计划删除。当前目标域 Cookie、扩展或缓存出现，只能证明有状态，不能证明旧账号回流。用已确认旧基线比较，必要时只查询 host/name/创建与更新时间；创建在清理之后是新生成证据，不是账号归属证据。用户确认的新登录列为保护项，不再反复询问或为独立证明而解密 Cookie。普通挑战/匿名标识与登录票据分开汇报，不把“Cookie 共若干条”当“旧登录若干条”。

## SQLite 与 Safari

- 不直接把 SQLite 引擎连到运行中的生产库；`mode=ro` 仍可能涉及 SHM/锁，不能当作源目录绝不写入的保证。
- 如需只读调查，可用 [sqlite_snapshot.py](../scripts/sqlite_snapshot.py) 将 DB 及对应 WAL 复制到私有目录，核验 sidecar 集合和前后 stat/SHA；不复用源 SHM。引擎只打开副本。发生来源变化先定位写入者，必要时在来源稳定后重试；不要循环碰撞运行中数据库。
- 非空 rollback journal 不能忽略；无法解释事务状态时等待冷态。非原子复制即使通过变化检测，也不宣称数据库/多库原子快照。
- 查询 Cookie 的 host/必要元数据和计数；Login Data 只读 origin/站点元数据，不选密码、cookie value、不解密。副本在 `finally` 清除，日志不保留行内秘密。
- 生产变更须冷态：在副本精确删行，正确处理 WAL/checkpoint，验证完整性与所有非目标记录，再按事务计划替换。需要去掉废弃页时用受支持的整理方式验证；仅 SQL 删除行不等于旧字节消失。
- Safari binarycookies 仅在格式已确认时解析 host 偏移并做边界、长度和源稳定性检查；未知格式用原生网站数据界面或明确列为不可核实，不猜二进制布局。

## 深度文件写入的进入条件

LevelDB/IndexedDB 内部重建、SimpleCache 索引或文件组修改、Safari 二进制存储修改，须同时具备：明确旧目标及保护范围；匹配当前实际版本/schema 的适配器；通过无操作、非目标保持和部分失败/回滚/重启等相关故障验证；内容保全、精确恢复材料和冷态发布条件。缺少匹配且验证过的适配器时，只在私有副本调查或开发测试，暂不发布该项，其他已就绪批次继续。

不凭 UUID、旧日期或 partition key 升级为生产写入。原生机制、删除整组文件让浏览器重建、二进制精确变更都须分别验证实际删除范围与非目标影响；“浏览器会自行修复”不能替代这项判断。

## LevelDB / IndexedDB / Service Worker

把三件事分别记录：域名/旧值原始字节命中、有效 KV 命中、实际可用认证。SST/log 中已删除记录的残余字节不等同当前状态。只有存在明确隐私清理目的时才处理这些废弃字节。

共享库只在私有副本用匹配引擎读取有效记录；校验 CRC、压缩及 schema，未知格式失败即保留。写入必须冷态，禁止手工删改 SST/log 或整个共享 Local/Session Storage、Service Worker 目录。

必要重建时先列出全部有效二进制键值，对精确获准的目标集合做变换；其余键与值逐字节等价，数量和摘要吻合。若只是去掉已删除项的旧字节，应保留**全部**现有有效 KV，不再额外过滤。

IndexedDB/CacheStorage 内也可能有对话和用户作品，按 [内容保全](content-retention.md) 判定。其他站点出现相同邮箱或 Claude 文本，不扩大到删除其数据。

## HTTP 缓存：先归属，后正文

1. 先读格式限定的头和 key：校验 magic/version、长度、文件名哈希映射与前后 stat。首轮不读全站 HTTP 正文。
2. 按当前 Chromium key 格式拆分**资源 URL**和 partition / isolation key。已知旧身份匹配覆盖所读 key，但输出只记数量。
3. 分别记录 `resource_target`、`partition_only`、`identity_only_other_resource`。删除依据是资源归属或核实的旧身份状态；仅 partition/isolation key 提到目标的第三方资源默认保留。其他资源含旧身份也须逐项查因及授权，不据分区键整组删除。
4. 目标记录的磁盘存在、索引引用、未过期可复用、能恢复登录是四种结论，不能互相替代。
5. 再解码候选正文，分开处理 HTTP Content-Encoding 与磁盘层压缩。对话、申诉文字、上传和媒体先保全；截断、稀疏流、未知 codec 或无法分类的内容阻止该项永久删除。

### 只有需要精确改 SimpleCache 时才进入这一分支

先满足上述深度写入条件，并确认原生机制无法满足所需范围及保护要求。适配器须匹配实际 Chromium 版本及该版本官方 `net/disk_cache/simple/` 源码；某次 v9 实现不是通用执行器。

- 识别同一 hash 下的完整文件组（可能含 `_0`、`_1`、`_s`）及索引，不能只移动 `_0`；stream 共置和稀疏文件布局以匹配源码为准。
- 校验 pickle 长度/CRC、索引 magic/version、记录计数、唯一 hash、packed 字段、大小和 footer。无操作 roundtrip 必须原字节相同；修改后非目标 record 原字节不变。
- 先验证原索引与磁盘的 freshness。原索引陈旧时先解决状态或停止，不能调高 footer 时间掩盖问题。
- 目录 mtime 改变可能触发浏览器重建整个索引并改写其他 LRU 元数据。记录原目录纳秒时间与索引依据；只有匹配实现且有完整验收时，才可按其 freshness 规则保持时间/元数据关系。
- 原文件组、索引及必要元数据按 [事务规则](transactions.md) 一并保全，临时索引 flush/fsync 后发布；针对部分移动、索引替换、回滚中重启等实际故障验证，不能只测 parser。

格式参考：[Chromium SimpleCache 源码目录](https://chromium.googlesource.com/chromium/src/+/main/net/disk_cache/simple/)。链接 main 只用于定位，实施必须切到与安装版本匹配的 revision。

### Safari HTTP 缓存是独立入口

Safari 网站数据列表为空，不自动证明 WebKit HTTP 缓存也为空。需要处理时先定位当前实际缓存根、格式版本、元数据到正文关系及索引；不要复用某次 WebKit 版本的固定偏移。

正文可能是独立文件或有硬链接/共享引用。只有确认所有目标引用和非目标依赖后才删相应正文，按底层文件去重统计大小；无法确认归属的图片先保全。salt/hash 不匹配的记录不能仅凭不匹配判成目标。冷态检查目标与非目标；暖态重载会正常新增缓存，不能要求整个缓存树永远保持零变化。Google 或其他站点缓存不随 Claude 清理默认加入，必须有相应授权。

## 扩展、协议状态与恢复

- 实际扩展安装目录、Local/Sync 存储和原生扩展列表共同证明安装状态。`Secure Preferences` 中孤立 `{}` 没有 manifest/path/安装目录时，不为外观清洁改受保护偏好。
- Network Persistent State 中协议能力、alt-svc、失败时间、RTT 不是自动认证证据。若发现 token/ticket/server_info 等不同内容，再按实际语义评估。
- History、书签和保存标签组中的 Claude URL 是历史/入口，不证明 Cookie 可恢复或扩展会重装。未查远端同步就不作未来状态保证。
- 关闭前在私有文件保存最小恢复信息，避免日志输出私人 URL。恢复原 profile、窗口和标签集合，区分原标签、正常重定向与新建空白启动页；不要越过站点验证页。恢复联网标签可能发请求，用户禁止联网/访问目标站时不能自动恢复；授权明确、可验证的离线恢复才可进行，否则仅将这一冲突留待决定。
- 完成必要的外部文件冷态验收及授权的原生/暖态回归即可。无新增的确认旧身份命中、保护项完整且无新异常时停止；正常新账号与匿名状态不作为清理失败。
