mirror of
https://github.com/panatgithub/AnkiHeadingSync.git
synced 2026-07-22 17:10:28 +00:00
2 KiB
2 KiB
Deck Rule Migration Decisions
1. 规则失效策略
新增 deckRulesFingerprint,并持久化到 FileState。
指纹内容固定包含:
defaultDeckfileDeckEnabledfileDeckMarkerfolderDeckMode- 规则版本常量
当文件内容未变但指纹变化时,普通全库同步必须强制重读文件并重新提取 deck 线索。
2. 计划语义
renderConfigHash 继续只表达字段渲染语义,不再承担 deck 兼容豁免。
新增 ManualSyncPlan.toChangeDeck:
- 仅 deck 变化时进入
toChangeDeck - 字段变化且 deck 变化时,同时进入
toUpdate与toChangeDeck - 仅字段变化时,不触发 deck 迁移
3. 执行语义
AnkiBatchExecutor 在主链路正式启用 ankiGateway.changeDecks(...):
updateNotes只更新字段changeDecks只迁移 deck- deck 迁移基于 note summary 的
cardIds - 为避免迁移到不存在的 deck,add 和 changeDeck 目标 deck 都先走
ensureDecks
4. 结果统计
新增迁移统计字段:
ManualSyncPlan.toChangeDeckAnkiBatchExecutionResult.migratedDecksManualSyncResult.migratedDecks
统计口径按“计划迁移的 note 数量”计算,而不是按 Anki card 数量计算。
5. 状态回写
ManualSyncService.buildNextState 继续把最新 resolved deck 写回 CardState.deck,并把当前 deckRulesFingerprint 写回 FileState.deckRulesFingerprint,作为下一次普通同步的比较基线。
6. rebuildIndex 语义
rebuildIndex 仍只负责:
- 索引刷新
- marker 修复
即使规则变了,也不执行 changeDecks。
7. 类型兼容策略
UpdateAnkiNoteInput.deckName 保留为可选字段,仅用于兼容旧测试桩和调用面;主链路不再依赖它承载 deck 迁移语义。
8. 文档语义
仓库文档统一改为以下产品语义:
- 普通同步会按最新 deck 规则重算旧卡
- 若 resolved deck 变化,普通同步会迁移旧 note 到新 deck
- rebuildIndex 不负责 Anki deck 迁移