Skip to content

RVH 确认:SM-2 黄金向量三端一致性(roadmap 5-2,RVH 第三端)

物理位置:~/reading_vocab_helper/docs/cross-end/18-sm2-golden-vectors-confirmation.md(RVH 仓) 上游 handoff:~/reading-browser/docs/cross-end/sm2-golden-vectors-rvh-handoff.md(RB 仓,真相源) 完成:2026-07-22 · 状态:✅ RVH 已完成,21 条黄金向量全绿,三端无漂移


做了什么

把 RB 侧 roadmap 5-2 的「共享黄金向量锁 SM-2 三端一致性」镜像补齐 Dart 第三端:

  1. 复制 fixture(byte-equal)~/reading-browser/docs/cross-end/sm2-golden-vectors.jsontest/fixtures/sm2-golden-vectors.json(逐字节副本,未改一字)。 provenance 写进 test/fixtures/README.md(不写进 JSON 本身,以保 byte-equal,方便未来 /cross-end-check 加 diff 兜底)。

  2. Dart 测试test/sm2_golden_test.dartFile('test/fixtures/sm2-golden-vectors.json').readAsStringSync() + jsonDecode, 遍历 get_quality / sm2_calculate 两组,断言 Dart 实现输出 == expected。

    • int 字段精确相等;ef 用 epsilon < 1e-9 比较。
    • 任一条不符会报出「哪条 / Dart 得到什么 / 期望什么」并要求人工判定,不单方面改任一边。
  3. 结果flutter test test/sm2_golden_test.dartAll tests passed! (+21) (11 条 get_quality + 10 条 sm2_calculate),无漂移。

被测对象修正(与 handoff prompt 的偏差)

handoff prompt 假设 Dart 实现在 lib/services/sm2_service.dartgetQuality / calculate)。 实际:该路径不存在。RVH 的 SM-2 实现在 lib/core/algorithms/sm2_algorithm.dart,类 SM2Algorithm,静态方法:

  • SM2Algorithm.getQuality({required bool isEasy, required int? lastQuality}) → int
  • SM2Algorithm.calculate({required int quality, required int repetitions, required int previousInterval, required double previousEasinessFactor}) → SM2Result.interval / .repetitions / .easinessFactor

语义与黄金向量 JSON 完全一致(EF 公式、下限 1.3、q<3 重置、reps 1→1d / 2→6d / ≥3→round(prev×EF)), 未改动任何算法逻辑,仅新增测试 + fixture。

维护纪律

  • RB 是真相源。RB 改 sm2-golden-vectors.json 后须重新复制过来(命令见 test/fixtures/README.md)。
  • 任一端改 SM-2 → 三端(RB Rust / RB TS / RVH Dart)测试须同步更新,不可单方面改 JSON 迁就某端。
  • 漂移兜底(未来):/cross-end-check 加一条 RB JSON ↔ RVH fixture 副本的 byte-equal diff。

变更文件(RVH 仓,均为新增)

  • test/fixtures/sm2-golden-vectors.json(RB 副本)
  • test/fixtures/README.md(provenance)
  • test/sm2_golden_test.dart(测试)
  • docs/cross-end/18-sm2-golden-vectors-confirmation.md(本文件)