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