Skip to content

v1.12.0:增量快照、独立备份与读写锁

Choose a tag to compare

@EXIST-D EXIST-D released this 02 Oct 13:47
· 34 commits to main since this release

本版本完成改进方案的阶段 2(存储与输出):写操作改为增量快照,新增独立备份与恢复,查询不再依赖 SQLite,只读命令可以并行。题库数据格式不变(V1/V2),旧题库无需迁移;1.11 及更早写下的运行记录仍可读取和撤销。

新增

  • 增量快照(run format 2):写操作只保存变化的记录(changes.jsonl),提交和撤销都按变更重放并校验指纹;无法精确表达时自动退回全量快照。1,000 题题库上一批 10 条答案让 runs/ 增长从约 1.9 MB 降到约 17 KB。INTERVIEW_BANK_RUN_FORMAT=1 可强制使用旧格式,CI 会用两种格式各跑一遍全部测试。
  • 独立备份:backup create [--include-runs] / verify / restore --destination <新目录>,带哈希清单和 .sha256 校验;恢复只写入尚不存在的新目录,校验通过后才落位。
  • answer-recheck:题目只改了措辞时,沿用原答案和来源、不刷新核验日期,记录复核依据;search 和 research 给出 answer_stale_reason(marked_stale / evidence_age / wording_changed)。
  • 读写锁:search、show、stats、export、doctor、validate 和 Web 页面共享锁,可以同时运行;写操作仍互斥(Windows 使用 LockFileEx)。
  • 错误信息:JSON 错误增加稳定的 error_type 和下一步 hint。

变更

  • search 默认返回题目卡片,每页 20 条并带 next_offset;--detail 返回完整记录。
  • 查询直接读取已加载的 JSONL;init 和 commit 不再生成 cache/bank.sqlite,rebuild-index 保留为弃用的空操作,gc 会删除遗留的缓存文件。
  • 提交时只重写发生变化的数据文件。
  • 截图或音视频提取的候选题中出现联系方式时,改为审阅项(示例邮箱可用 pii_reviewed + pii_reason 保留),不再让整批失败;其他入口仍直接拒绝,并说明命中的类别、值做脱敏。

验证

  • 228 项测试,在 Windows / macOS / Linux × Python 3.10–3.13 上通过,另外以旧快照格式跑一遍全部测试;安装包检查新增备份与恢复。
  • 在一个 425 题真实题库的副本上:一次 curate 只产生 3.4 KB 的增量记录,撤销后数据逐字节还原;备份、恢复、导出和校验均通过。