# 保存文件与失败恢复

工作台始终离线处理输入，不增加上传接口。报告与原文分开保存，报告不包含原始属性值；保存原文仍包含这些值。

## 文件已准备之后

点击下载后，浏览器会收到下载请求，同时页面顶部保留“再次保存”链接。普通下载只能确认已发起，不能由网页确认已经落盘；请在下载列表核对。如果没有文件，可使用以下回退：

- **另存为**：支持 File System Access 的浏览器会显示此按钮。直接点击后选择保存位置；只有实际写入并关闭成功后才显示“文件已写入所选位置”。取消和写入失败会分别提示，仍可重试。原始 Blob 字节直接写入，不经过文本或换行转换。
- **复制文件内容**：复制到本机剪贴板，再自行粘贴到文本编辑器并以 UTF-8 保存。页面明确标记“尚未保存为文件”。编辑器或系统可能改变换行，因此严格字节指纹复现应使用下载或另存为。原文包含属性值，不要粘贴到外部服务。
- 若浏览器不支持另存为且不允许复制，可在普通浏览器新开工作台或使用同版本 CLI。刷新或关闭旧页前先保存当前编辑内容。

另存为需要明确的按钮操作，[浏览器要求直接的用户激活](https://developer.mozilla.org/en-US/docs/Web/API/Window/showSaveFilePicker)。不在分析结束时自动打开系统对话框，不修改浏览器下载权限，不上传文件。某些嵌入式浏览器的下载事件接口可能超时，即使文件已经写入；验证以真实文件及指纹为准。

页面最多保留一份可重试文件（完整报告仍以 32 MiB 为上限）。准备另一份文件会释放上一份；修改输入/配置、切换模式、重新检查、取消、失败、关闭保存入口或离开页面也会释放。生成报告、再次下载和关闭保存入口都不会修改原文。文件内容保持本次分析时的字节快照，不用整理后的文件冒充原文。

## 分析未完成或出错

预检与迁移核对使用同一份分析程序，切换模式不再加载第二个 Worker 脚本。线程加载后先确认就绪，接收本次输入后再次确认已开始；没有确认的启动停滞超过 4 秒，或启动抛错，会销毁该线程并自动重试一次。两次都失败明确提示“分析程序未能启动”，不把加载失败误称为输入过大。

总时限仍为 20 秒，不通过重试延长；第二次启动可使用原总时限的剩余时间。已经开始分析后才出现的错误、通信失败、分页/导出请求发送失败均停止任务并使旧结果失效；不会自动重放导出或保存操作。分析阶段达到 20 秒时提示减小文件或使用 CLI。

编辑与取消后的迟到消息、启动确认及错误不会恢复旧报告。已过期的保存对话框不能开始写入；写入完成前发现结果失效会中止提交。已经明确完成保存的文件不会被网页删除。再次点击重新检查可建立新会话，不必沿用损坏的线程。若持续失败，可刷新工作台或使用同版本 CLI；刷新前先自行保存正在编辑的内容。

资源限制、风险判断、分析不完整的退出码 2 优先规则，以及仅退出码 0 才能整理导出的条件均保持不变。
