ADR-0088:HTML 内嵌有界模型恢复包
状态:已采纳。
背景
ADR-0087 的准确绑定伴随包适用于多个标准输出,但 HTML 必须连同另一份 ZIP 传递。GAP-24.2 需要明确的单文件恢复方式,同时避免外部修改后旧模型覆盖当前页面,以及有损导出仍携带完整源内容。
决定
在既有 XmlModelRecovery 增加显式 HTML 通道。Saved.writeEmbeddedHtml/embeddedHtmlBytes 将同一 XML/资源 ZIP 编为 Base64,放入文件末尾的一个普通 HTML 注释;openEmbeddedHtml 识别这一准确封装。浏览器不执行或显示注释,文档仍使用 .html,不新增运行依赖或文件类型。
清单继续使用 version 1。其长度/SHA-256 绑定移除准确封装后的全部 HTML 字节,模型/资源摘要仍独立校验。这样避免文件自包含摘要的循环依赖,也不通过 DOM 规范化猜测外部修改。单文件入口禁止同时提供伴随包;重复、损坏或未闭合封装无条件失败。缺失、过期或未知清单版本沿用既有 ERROR 或显式 WARN/IGNORE + DEGRADE;fallback 只接收当前 HTML,不携带旧恢复注释。
整个 HTML(含 Base64 注释)计入文档字节上限;解码 ZIP、展开资源、XML、诊断和取消继续使用现有预算。准备完成后才触及输出流,路径仍采用同目录临时文件与原子移动。有损捕获不产生恢复包时,内嵌写出仅返回标准 HTML,不能藏回已丢弃内容。
影响与边界
- 显式字体和许可随包保存;Base64 使恢复 ZIP 的编码体积约增加三分之一。HTML 字节预算可能比单独保存标准文件更早耗尽。
- 内嵌数据是可读取的明文,既不加密也不认证作者;浏览器显示无需读取其中的字体。页面浏览器字体与恢复后布局的显式字体仍是不同契约。
- 外部工具可能移除或改写注释,或者改变页面其他字节;不能承诺一般编辑器重存后仍完整恢复。移除恢复信息可显式受限导入当前页面,未提供恢复信息的通用 HTML 导入保持原有子集。
- 本决定只提供 HTML 内嵌;其他标准格式的内嵌和一般复杂往返继续分别登记,不由此关闭整个 GAP-24。