diff --git a/docs/TODO.md b/docs/TODO.md index 40930ce..107635b 100644 --- a/docs/TODO.md +++ b/docs/TODO.md @@ -7,12 +7,6 @@ Updated 2026-09-10. --- -## In flight - -- [ ] **Question version history** — snapshot on edit, keep last 5, restore from - the question edit page. Migration `a9b0c1d2e3f4` and the model exist; the - snapshot-on-write hook, restore endpoint and UI are not wired yet. - ## Design agreed, not built - [ ] **AI Mode (RAG chat)** — see "AI Mode design" below. Needs: conversation + @@ -98,10 +92,19 @@ That last step is the safety property, and it is enforced by the system rather than by the model behaving well — the same discipline as the article page no longer printing answers. -Open questions: -- Persist conversations (a thread rail with named threads)? Needs - `conversations` + `messages`. -- Cards should carry links too, resolved the same way. +**Settled: two kinds of link, handled differently.** + +*Curated* links already exist as tables — `QuestionArticleLink`, +`FlashcardArticleLink`, `FlashcardQuestionLink`, `LabReferenceCardLink` — and +carry a section id. An educator asserted them, so they are trusted and stored. + +*Retrieved* links are computed per query by `hybrid_ids` and are not stored at +all. They are ranked guesses. + +The AI uses both: retrieval finds candidates, and a candidate carrying a curated +link to another candidate is boosted, because an educator has already tied those +two together. Nothing new is stored for citations. The only new tables AI Mode +needs are `conversations` and `messages`. --- @@ -113,4 +116,5 @@ data with a per-user active exam · AI-mode matching from description or upload category management page · tag vocabulary sanitised · question manager with bulk editing · per-category educator grants · full-page question editor · session rail with gradual reveal · articles read as one page · practise-this-topic · -continue-study panel · PREP study plans. +continue-study panel · PREP study plans · question version history · +exam-scoped disciplines.