# Viva Anki状态和下划线链路诊断工具 # 诊断流程样例:Viva Anki 状态与下划线链路 ## 入口 ```bash pnpm viva:doctor --word "还不确定" --tab current --profile dev --json ``` ## 输入 | 来源 | 读取内容 | 目的 | | --- | --- | --- | | content script | 当前页 token/phrase 扫描结果、DOM underline 状态 | 确认页面是否扫到目标词以及最终是否渲染下划线 | | background / AnkiConnect | Anki card active/suspended/deleted/mastered/known | 确认 Anki 快照是否覆盖本地状态 | | chrome.storage | knownWords、knownPhrases、learning 记录、rescan timestamp | 找出删除后残留或重扫缺失 | ## 核心检查 1. 归一化输入词,生成 word/phrase 两种 lookup key。 2. 查询 Anki 状态:如果卡片已删除但 mastered/known 快照仍存在,标记 `anki_snapshot_residue`。 3. 查询本地学习状态:如果存在 learning 记录但最终状态仍是 known,标记 `anki_snapshot_overrides_learning`。 4. 查询 knownWords/knownPhrases:如果取消后仍命中,标记 `known_residue_blocks_underline`。 5. 查询当前页扫描:如果 storage 已正确但页面没有 rescan,标记 `missing_rescan`。 6. 对照 DOM:只有 `learning_priority_wins=true` 且页面出现 underline/relearn affordance,才判定成功。 ## 输出示例 ```json { "word": "还不确定", "final_state": "known", "expected_state": "learning", "status": "fail", "signals": [ "anki_snapshot_overrides_learning", "known_residue_blocks_underline" ], "next_action": "remove word from knownWords/knownPhrases, clear mastered snapshot, trigger current-tab rescan" } ``` ## 成功/失败信号 | 结果 | 信号 | | --- | --- | | 成功 | 当前页面选词后立刻进入重新学习流程,未知词有下划线,learning 优先于 known,Anki active/suspended 显示一致 | | 失败 | 删除 Anki 后 knownWords 仍残留、learning 被 mastered/known 覆盖、当前页未重扫、content 扫描不到目标词 |