mirror of
https://github.com/panatgithub/AnkiHeadingSync.git
synced 2026-07-22 06:51:43 +00:00
- 修复 QA Group model 管理的 AnkiConnect payload 契约,模板与样式更新改为嵌套 model payload - 修复 QA Group model 自检与更新链路,补充带 action/model 上下文的错误信息与回归测试 - 解耦 QA Group 与旧 semantic-qa mapping 路径,设置页移除保留 model 的旧映射入口并增加只读状态说明 - Fix the AnkiConnect payload contract for QA Group model management by using nested model payloads for template and styling updates - Repair the QA Group model ensure/update flow with action/model-aware errors and regression tests - Decouple QA Group from the legacy semantic-qa mapping path by removing the reserved model from old mapping controls and adding read-only status guidance
3.1 KiB
3.1 KiB
QA Group Model Fix Decisions
Decision Summary
本轮按真实仓库结构锁定以下实现决策:
- QA Group model-management 的更新类 action 统一采用嵌套
params.model契约。 createModel、modelFieldAdd、modelTemplateAdd保持当前仓库已使用的参数命名,不引入第二套 payload 风格。QaGroupModelService.ensureModel()保持现有执行顺序,但所有失败都补 action/model 上下文。- template 与 CSS 继续使用严格字符串比较,不引入归一化逻辑。
- QA Group 执行链保持独立字段构造,不回接旧 mapping service。
- settings/UI 不再允许
ObsiAnki QA Group 12进入旧basic / cloze / semantic-qamapping 面板。 - settings/UI 为 QA Group 仅保留 marker 与只读 model 状态信息,不新增可编辑 field mapping。
Concrete Decisions
1. Gateway contract target
当前仓库对 QA Group model-management action 的目标契约定义为:
createModel: 顶层modelName / inOrderFields / css / isCloze / cardTemplatesmodelFieldAdd: 顶层modelName / fieldNamemodelTemplateAdd: 顶层modelName / templateName / Front / BackupdateModelTemplates: 顶层只保留model,其中嵌套name / templatesupdateModelStyling: 顶层只保留model,其中嵌套name / css
这样做的原因是:本次真实运行失败只出现在 update 系列 action,且其错误文本明确指向顶层 templates 非法。
2. One helper, one contract
在 AnkiConnectGateway 中新增局部 helper,用来构建 model update payload。
目的:
- 直接表达“本项目针对当前运行目标使用嵌套
model更新契约” - 避免后续在多个 action 里再次混入旧顶层写法
3. Ensure flow error policy
QaGroupModelService.ensureModel() 的每个外部动作都用统一 helper 包装异常,错误信息至少包含:
- action 名
- model 名
- 一个简短参数摘要
示例粒度:
createModeladdModelFieldaddModelTemplateupdateModelTemplateupdateModelStyling
4. Route/UI decoupling policy
QA Group route 与旧 mapping path 的解耦采用“限制错误入口”而不是“重写执行链”:
QaGroupSyncService继续直接构造完整字段表NoteFieldMappingService不扩展到 QA GroupPluginSettingTab过滤 QA Group model,不让它出现在旧 mapping 下拉中PluginSettingTab增加 QA Group model 的只读状态展示,说明该 model 由插件自动校验和维护
5. Backward compatibility policy
必须保留的旧行为:
semantic-qa仍然通过 title/body field mapping 工作basic与cloze现有 mapping 行为不变#anki-list继续走 QA Group route#anki-list-qa继续走 semantic-qa route
Intentional Deviation From Draft Plan
偏离点只有一处:
- 不新增 QA Group 可编辑 mapping 面板,而是改为只读状态区块
原因:
- 真实执行链本来就不依赖旧 mapping service
- 继续暴露可编辑 mapping 只会制造错误配置入口
- 固定协议 model 更适合状态展示,而不是可配置字段映射