Repository navigation
v1.12.0:增量快照、独立备份与读写锁
本版本完成改进方案的阶段 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 的增量记录,撤销后数据逐字节还原;备份、恢复、导出和校验均通过。