|
| 1 | +# ADR-027:学习目标层建模——意图层对象(N:M / 判据配方 / 四态状态机 / 库即记忆) |
| 2 | + |
| 3 | +> 状态:已接受(2026-09-02,随 v0.18.0 M1 实施批补登) |
| 4 | +> 关联:[v0.18 设计规格(已批准)](../superpowers/specs/2026-09-02-v0.18-learning-goals-design.md) · [v0.18.0 版本文档](../versions/v0.18.0.md) · REQ-030 激活/REQ-248~250 · ADR-010(AI 为增强层·本地兜底铁律)· ADR-018(FSRS 调度)· ADR-024(知识体系层) |
| 5 | +
|
| 6 | +## 背景 |
| 7 | + |
| 8 | +提取管线(v0.1~0.9)、学习循环(v0.11:FSRS/周契约/组结算/指标)、知识体系层(v0.13)、AI 平台(v0.11.6/v0.16/v0.17)均已交付——但缺「意图轴」:用户「我要学 Python」没有对象化,周契约/组结算/概念升格各自为政,AI 对话没有意图上下文可注入。2026-09-02 用户裁决:目标层按意图层建模(不并入知识体系层、不接 agent 框架/记忆模块),本 ADR 补登数据建模与硬约束。 |
| 9 | + |
| 10 | +## 决策 |
| 11 | + |
| 12 | +1. **目标=组的容器(N:M)**:组仍是唯一容器(v4 契约二不破)。`goals` 主表 + `goal_milestones`(判据型里程碑)+ `goal_groups`(UNIQUE(goal_id, group_id))三表;组删除走既有 CASCADE 纪律——goal_groups 级联清、goal_milestones.ref_group_id SET NULL(绑定该组的 group_settled 里程碑降级手动确认,提示 UI 属 M2)。 |
| 13 | +2. **判据配方=快照**:`success_criteria_json`(tier 档位展开为可观测信号要求值:组结算历史数/应用记录数/自测通过率(M1/M2 占位不判定)/近 90 天复习活跃天数),毕业后冻结;**进度信号一律现算**(聚合皆毫秒级 SQLite),目标层零进度副本/零缓存(优化评审 #1:缓存层是过度设计)。 |
| 14 | +3. **四态状态机无 draft**:active⇄paused、active→graduated(毕业仪式用户确认,M2 落 goal_settle 写快照)、active/paused→abandoned(显式动作+可选原因,无惩罚);grad/abandon 为终态(无复活——弹性承诺的放弃不追责也不回滚)。 |
| 15 | +4. **库即记忆(预算硬约束)**:唯一事实源=本地库;AI 无记忆模块/无状态/无缓存层,每次调用经「检索管道」(L1/L2/L3 + L4.5 目标摘要**每次现算**)取现拼;**调用成本与库规模解耦**——上下文预算档位化(轻量 ~4K/标准 ~10K/深度 ~30K,默认标准),检索点查代替全量注入(库增长 O(N)、调用成本 O(1));深读/跨片段综合走「先预估后确认」(复用 ai_refine_estimate 范式)。 |
| 16 | +5. **M1/M2 零 AI 代码**:goal_interview/progress/rules 全部本地纯函数;AI 教练(目标摘要注入/复盘/追问/概念低激活弱项/图片影子缓存)严格属 M3 且默认关(content_gate 双闸门);生成式复习(REQ-021)单独立项。 |
| 17 | + |
| 18 | +## 备选(否决) |
| 19 | + |
| 20 | +- **agent 记忆模块/自主规划**(裁决引用):本地 SQLite 即比任何 agent 记忆更可靠的长记忆(结构化/版本化/可审计/不出本机);agent 循环不可确定性 vs 项目可测试性与防御性降级两条铁律;桌面单用户无多代理编排需求。 |
| 21 | +- **目标嵌入体系层(知识结构=意图)**:体系层是「知识结构」(概念/模型/决策),目标是「意图轴」(要成为什么)——分开建模,概念库不塞进目标(意义链 ≠ 体系)。 |
| 22 | +- **目标进度缓存列/派生表**:读少写多 + 现算毫秒级,缓存/物化引入双写一致性风险(优化评审 #1 采纳删除)。 |
| 23 | +- **目标间依赖/优先级图、FTS5 检索重排、AI 动态自适应预算**:YAGNI/不可测(优化评审主动排除)。 |
| 24 | + |
| 25 | +## 影响 |
| 26 | + |
| 27 | +- 正向:学习循环获得意图上下文("被 AI 问"的原料);里程碑有客观判据信号(结算历史/FSRS 弱项/应用记录);本地优先零云端依赖(M1/M2 全本地)。 |
| 28 | +- 代价:三表 + 一处既有模块最小钩子(execute_settlement 后自动通过 group_settled 里程碑——目标层为只读聚合+事件钩子,不侵入结算状态机;钩子失败仅记日志,结算仪式不因目标层失败)。 |
| 29 | +- 兼容:新表幂等建表(旧库升级零破坏);notes/groups/settlements/flashcards/review_logs/contracts/knowledge_decisions 只读复用不加列;metrics_events.kind 补值式扩展(既有读取不受影响)。 |
| 30 | + |
| 31 | +## 合规性验证 |
| 32 | + |
| 33 | +- 三表 :memory: CRUD + 组删除 CASCADE 行为测试(绑定消除/ref SET NULL/里程碑保留降级手动) |
| 34 | +- 判据配方 table-driven golden(6 条端到端 + 参数矩阵);四态状态机 16 对转移矩阵 + 终态守卫(重复毕业/放弃后毕业非法) |
| 35 | +- 进度聚合边界测试(0 结算/历史计数/周契约双达标/90 天窗口/弱项占比与排序/应用记录 GROUP 引用命中) |
| 36 | +- 回归:cargo test / clippy 零警告 / vitest / tsc 全绿(v0.18.0 验收 9) |
| 37 | + |
| 38 | +## 相关决策 |
| 39 | + |
| 40 | +- ADR-010(AI 为增强层·本地兜底铁律)· ADR-018(FSRS 调度——弱项信号 state_json 读取)· ADR-024(知识体系层——本 ADR 与其明确划界)· ADR-026(AI 精修策略化——预算估费范式复用) |
| 41 | + |
| 42 | +## 参考 |
| 43 | + |
| 44 | +- [v0.18 学习目标层设计:意图层 · 访谈式设定 · 库即记忆](../superpowers/specs/2026-09-02-v0.18-learning-goals-design.md) |
| 45 | +- [v0.18.0 版本文档(M1 范围/验收)](../versions/v0.18.0.md) |
| 46 | +- [v4 路线图构建顺序分析(P17 意图轴)](../Foresight/v4-roadmap-build-order-analysis.md) |
0 commit comments