# The learning model & the extensibility direction Owner-ruled 2026-10-02. Brief by design — the master mental model and the extensibility philosophy in one place. Product detail lives in [`vision.md`](vision.md); this is the frame over it. ## The three-part model The product is one loop with three organs: 1. **The knowledge world model** — reasoning chains over propositions (`chains.jsonl`, the stored truth). This is the *compressed* form of the learner's understanding: what they hold, structured as it holds together. 2. **Learning sessions install it** — teaching sessions deposit understanding into the model via extraction. But a session installs only a small set of **weak cues**: the contexts in which the knowledge was encountered. Installation alone is not recall. 3. **Practice strengthens recall** — for knowledge to connect at the right moments, the **cue set** that triggers it must be broadened and strengthened. That is practice's entire job. Practice outcomes feed back into the model as **assessment levels** (per-proposition or per-chain — TBD) — a measurable picture of what the learner actually holds — which drive scheduling and the selection of learning activity. ``` install (sessions) → strengthen cues (practice) → assess (levels) ↑ │ └────────── schedule next activity ←───────────┘ ``` Consequence: the world model and its levels are **core truth**; anything that merely *strategizes* over them is a candidate for optionality. ## Roadmap — where we are (2026-10-02, owner-approved sequence) Foundations complete: push architecture landed (zero standing polls), per-session models, extraction pipeline (chains-primary), practice problems v1, coverage UX, tool-result diet. The sequence from here: 1. **[IN PROGRESS] Quick-fixes round** — ask-questions must not collapse in teach phase (quiz only); ESC aborts the turn from a pending question behind a confirm popup (ESC on the popup cancels — no double-abort); confidence-slider prompt rewritten as clean doctrine (design reasoning must not leak into the system prompt). The old practice dictation bug is deliberately UNFIXED (problem sets likely abandoned). 2. **Adaptive practice** (the main arc) — session-shaped practice reusing the session machinery + quiz tool; input = propositions/chains via the generator dialogue (cluster/nodes); agent writes problems one after another, adapting difficulty to hold learner accuracy ≈ 85% (research-backed target); problem-engineering theory shared with v1; no user-facing problem parameters (they live in the theory for the agent; the learner steers by talking). Design round first: session kind, spawn flow, what the agent receives, adaptation instructions, end conditions, model slot. 3. **Session compaction** — manual trigger + automatic token threshold (threshold configurable; auto toggleable in settings). Must preserve extraction coverage (compact-covered-only or extract-before-compact — design). Engineer the compaction instructions (what's critical to preserve). 4. **Module extraction** — the extensibility Stage 1, AFTER adaptive practice proves itself: convert both practice variants (batch sets vs. adaptive sessions) as the real modules the registry/API is shaped from; the loser then gets deleted or demoted. Old-module fate decided empirically here. 5. **Fun, when wanted** — data view (GitHub-style activity squares, counts, longest chain, accuracy/confidence split by teaching vs. practice, Brier score — calibration error is also review-targeting signal); standalone bare problem generator (cheap once modules exist). ## The extensibility direction (plugin-shaped) Strong fundamentals, then optional modules — nothing speculative baked into the default experience. The reference model is Obsidian's two-tier system: **core plugins** (bundled, toggleable, same API as external ones) and community plugins (loaded from disk). We adopt the architecture without the third-party obligation: - **Data core, strategies modules.** Ledgers (chains, levels, transcripts) are core; learning strategies — practice variants, schedulers, drills, enrichments — are modules. A module reads the world model + levels, proposes learning activity, reports outcomes back as level signals. - **The skeleton** (all plugin systems share it): manifest → deferred activation → registration into extension points (tools, job kinds, settings sections, routes/nav, events) → curated context API → unload. Our DI ports, tool composer, jobs pipeline, settings sections, and events bus already are those extension points, unnamed. - **Staged path.** (0) each new feature's wiring concentrated in one composition file; (1) a module registry with built-in toggleable modules — convert a real feature (practice is the candidate) and let the conversion write the API; (2) harden the context from real use, add per-module state; (3) external loader from `data/plugins/` — optional, maybe never needed. - **Why:** learning strategies are learner-, subject-, and situation-dependent — the axis along which features must be optional and toggleable; and a stable module API makes each new experiment cheap to build, cheap to drop.