主题
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 第三端:
复制 fixture(byte-equal):
~/reading-browser/docs/cross-end/sm2-golden-vectors.json→test/fixtures/sm2-golden-vectors.json(逐字节副本,未改一字)。 provenance 写进test/fixtures/README.md(不写进 JSON 本身,以保 byte-equal,方便未来/cross-end-check加 diff 兜底)。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 得到什么 / 期望什么」并要求人工判定,不单方面改任一边。
- int 字段精确相等;
结果:
flutter test test/sm2_golden_test.dart→ All tests passed! (+21) (11 条get_quality+ 10 条sm2_calculate),无漂移。
被测对象修正(与 handoff prompt 的偏差)
handoff prompt 假设 Dart 实现在 lib/services/sm2_service.dart(getQuality / calculate)。 实际:该路径不存在。RVH 的 SM-2 实现在 lib/core/algorithms/sm2_algorithm.dart,类 SM2Algorithm,静态方法:
SM2Algorithm.getQuality({required bool isEasy, required int? lastQuality}) → intSM2Algorithm.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(本文件)