ADR-0087:标准文件与准确绑定的 XML 恢复伴随包
状态:已采纳。
背景
已有 XML/普通 ZIP 可以保存有限完整语义模型与资源;各标准格式导入则有不同损失。DOCX 自有扩展属性用于精确解释已支持结构,不包含完整模型和显式字体。仅凭这些属性不能恢复所有已保存语义,也不能判断外部编辑后某个额外快照是否仍然有效。
在 PDF 附件、DOCX 自有 part、HTML 注释等位置分别嵌入旧模型,还需要所有编辑、删除、组合、优化和脱敏入口同步维护。任何漏项都可能隐藏并恢复已删除内容。标准阅读器也可能保留、删除或改写这些数据。直接推断可见内容相等不能作为初始的一致性契约。
决策
先实现跨格式一致的显式伴随路径:XmlModelRecovery 位于模板适配器,仅依赖既有模型及 DocumentConversion。标准输出不改写;普通 ZIP 沿用模板源码与资源结构,加 version 1 recovery.xml。不新增专用文件扩展名、模块、依赖或另一套语义解释器。
捕获已有 Prepared 的准确输出及编辑后的 candidate/notes;清单绑定格式键、完整标准文件长度/SHA-256,并用排序条目名称长度/内容长度及完整字节计算模型/资源摘要。任何标准字节修改都保守判过期,包括只改变元数据或 ZIP 重压缩。版本未知、缺失、过期或冲突不能直接恢复;默认拒绝,允许策略只能调用显式当前文件导入并报损。损坏/非法输入和预算/取消继续无条件拒绝。
本次目标导出或 XML 保存发生降级、丢弃、跳过时,禁止保存更丰富的源快照;WARN/IGNORE + DISCARD 只能留下标准输出,不生成恢复包。历史实际损失在受支持的后续无损编码中保留,不能误判成此次导出损失。为此 Prepared 增加独立 exportReport(),现有 preview 和 ACTUAL 仍累计全部阶段。历史诊断通过有界、安全 XML 保存,不使用 Java 反序列化。
只显式传递字体及许可;模型保存重新收集当前图片,不携带旧 XML、片段或已删除图片。原模板与编写主题意图继续直接用原源码包保存。运行时组件、字体句柄及回调不能据渲染模型推断。恢复后的重新布局需要调用方重新登记显式字体角色及运行时配置。
每个路径独立原子出版;不承诺双文件事务,不搜索旧包或自动删除历史文件。失配的组合即使被同时提供也拒绝。摘要不认证作者,更不替代应用的信任决策。未提供伴随包的标准导入、原包/原页面编辑仍保持各自已有边界。
结果
七种既有输出可以使用同一恢复入口,并能验证任意局部修改后旧模型不被误用;新编辑只保存当前候选。副本需要随标准文件一起管理,外部任何重存会保守失效;支持的当前文件导入可以显式降级继续。标准格式内嵌、自定义组件语义持久化及任意阅读器无损重存不由本决定提供,后续若实现须保持同样的删除与一致性约束。API 见恢复指南,验收见阶段八十二。