# Architecture — Plane Mode Scholar ## Agent pipeline (Best Agent) ``` User message → classify_intent → retrieve_chunks (vector search on pack) → retrieve_memories (hybrid filter + rerank) → pack_prompt (budget: chunks + memories + working memory) → generate (Qwen3.5-9B, streaming) → extract_candidates (regex + LLM JSON) → persist / consolidate / index_memory ``` ## Memory types | Type | Written when | |------|----------------| | misconception | Quiz miss, teach-back gap, user states confusion | | review_item | SRS scheduler after miss or gap | | session_summary | End session | | study_goal / deadline | Pack create or chat extraction | | user_preference | Chat patterns | ## Spaced repetition SM-2 lite in `memory/scheduler.py`. First review is **due immediately** after a quiz miss so the Home dashboard and recall banner work within the same demo session. ## Storage - SQLite: packs, sessions, turns, memories, logs - Vector stores: `pack_{id}` for chunks, `memory_{pack_id}` for memories - Persistent disk on HF Space: `/data/plane_mode_scholar` ## Judge automation - `docs/readiness_cases.jsonl` — 5 scripted scenarios - `scripts/readiness_check.py` — automated SRS + trace shape checks - `tests/test_scheduler.py` — unit tests for due-now scheduling