Skip to content

Latest commit

 

History

History
400 lines (349 loc) · 97.1 KB

File metadata and controls

400 lines (349 loc) · 97.1 KB

Adaptive Learner Roadmap

Current state: v2.6.1 (released 2026-07-24 - patch release on top of v2.6.0: the desktop launcher advances two steps - docker-app-launcher 0.15.0 (Docker-permission self-repair + wait-for-Docker #2024) then 0.16.0, and the localized launcher UI now ships in the binary #2031/#2032 (the hand-maintained spec never collected the 11 i18n catalogs); the frozen-binary launcher.json + window-icon + branding fix #2027/#2028; the Create-Lesson book-template file-upload i18n fix #2018; a canonical feature-overview page #2019 + the #1918 mirror-locale port #2033; no app-side schema/API/data-model change; see changelog/releases/v2.6.1.md). Recent prior: v2.6.0 (released 2026-07-24 - feature release on top of v2.5.0: the session chat rebuilt on assistant-ui and cut over #1126 (phased parity migration #1984/#1986/#2003/#2006/#2009, thread becomes the default chat + SessionChat removed #2012); Create-Lesson book path becomes an ingestion tool (book-text file upload EPUB/TXT/MD #1927 + DOCX #1950 with chapter picker, multi-select sections + exclusion heuristic + batch generation #1953, lesson picker for multi-lesson sets #1979); dictation audio-file upload #1911; set visibility via the engine manifest visibility flag #1993 (engine 0.13.1 -> 0.14.0); content-domain selector #1983 + dog-training/traffic-knowledge domains #1938; per-exercise difficulty indicator #1982; launcher context-aware Docker detection (docker-app-launcher 0.14.1) #1966/#1977; CI hardening - required checks on develop #1969, testid-reference gate #1981, visual-baseline auto-sync #1980, Docker build smoke #1995; versionless end-user help #1975 + em-dash sweep #2013; iOS fixes (read-aloud chunking #1928, share-result drop #1941); no app-side schema/API/data-model change; see changelog/releases/v2.6.0.md). Recent prior: v2.5.0 (released 2026-07-21 - feature release on top of v2.4.0: Create-Lesson becomes a full exercise authoring tool (all five core types editable in step 3 #1845, manual add-exercise + native multiple_choice #1853 with a single/multi mode control #1888, discoverable cloze/word_tiles/picture_choice generation #1848, an extension-authoring wizard for all four AI-authored extension types #1859/#1865, legacy English prompt migration on edit #1861); ext:al-dictation (audio dictation) adopted as the fifth extension type #1881 + wizard #1887 + core type picker #1895; the PWA update system and the AI key vault are consumed as published npm packages (@astrapi69/pwa-update #1873, @astrapi69/ai-key-vault #1868); exercise grading/payload/authoring consolidated under lib/exercises #1862/#1867/#1877; governance rules PR-PFLICHT #1846 + TESTPLAN-PFLICHT #1858; iOS/WebKit hardening #1839/#1832 + a night-shift WebKit gate #1843; engine re-pinned -> 0.13.1; no schema/API/data-model change; see changelog/releases/v2.5.0.md). Recent prior: v2.4.0 (released 2026-07-18 - feature release on top of v2.3.0: a Create-Lesson authoring upgrade (knowledge lesson from pasted textbook text #1745, edit + combine own lessons #1752, card image upload #1764, typeable exercise count #1761), free-text multiple accepted answers + an AI second opinion #1803, an AI key-import UX on the settings AI tab #1769, the content engine re-pinned -> 0.13.0 / schema 1.8 so uploaded images feed picture_choice #1774, the frontend god-file burn-down completed (10 modules split by concern + tightened ratchets #1802), a content-load robustness sweep (unicode/umlaut card ids #1809, friendly lesson-load error #1826, missing-profile guard #1788) + ghost-content lifecycle fixes (#1818/#1825/#1822), an i18n script-sanity lint #1759, the Docker/Bun close-out #1772; app schema 1.7 -> 1.8 additive, no app-side schema/API/data-model change; release-gate hardening surfaced by the first real release-prepare gate run - unzip in the Playwright image #1829, engine schema-version sync #1830, key-vault cross-tab scroll #1831; see changelog/releases/v2.4.0.md). Recent prior: v2.3.0 (released 2026-07-16 - polish + consolidation release on top of v2.2.0: the EXP-044 CSS concern-split is complete - global.css decomposed byte-identically into per-concern styles/legacy/ files and left as a pure import manifest (Peels 1-5 + Batches A-E #1663-#1690), guarded by a byte-identity gate #1657 + an accepted-conflicts allowlist #1630, with the final #1592 zone wrapped into @layer legacy #1695; a lesson-player UX rework (collapsible options panel #1628, pause control moved into the footer #1644, slimmer title area #1635, duplicate summary favorite removed #1649); listen-first audio for free_text + matching #1687; authored card.difficulty as the adaptive cold-start prior #1683 + card-less pool tolerance #1637 + context-free cloze decline #1669; hardened lesson/set file import/export (collisions, partial import, size guard, Save-as-file) #1681/#1685; shared Tile + FormHint primitives #1714/#1720; CI - symmetric backend path gate #1659, visual-baseline gate #1641, forceRerunTriggers #1673; engine pin -> 0.12.3 #1678; a Create-Lesson wizard + Dexie content-visibility fix sweep (#1721/#1737/#1724/#1674/#1730, #1719/#1734/#1706/#1717); a11y skip-to-content fix #1727; no schema/API/data-model change; see changelog/releases/v2.3.0.md). Prior: v2.2.0 (feature release - extension-exercise tier (4 AI-authored types #1579) + native multiple_choice #1525, app as schema consumer of learn-content-engine (additive 1.5 -> 1.7), federated content-repo registry #1511, simpler mobile nav #1512, EXP-044 cascade repair (Tranches 0-2c), Playwright 1.61.1, Bun, 499 lessons / 35 sets / 6 domains; changelog/releases/v2.2.0.md), v2.1.0 (polish release - ghost-progress fix + Settings per-tab panels; changelog/releases/v2.1.0.md), v2.0.0 (first public launch; changelog/releases/v2.0.0.md). Earlier: v1.99.0 (released 2026-07-04 - mobile-hardening + content-flow release: tappable multiple-choice answer buttons (shared ChoiceButtonGroup) replace the native dropdown for cloze select-mode questions, fixing the iOS tap-misfire (#1341/#1342); opt-in auto-advance after a correct answer (#1330/#1331); inline worked examples on theory steps + exercises, additive lesson-schema 1.4 -> 1.5 (#1326/#1327); "Ask AI" about a theory block / exercise via the BYOK path (#1321/#1322); Discover gains a visible source-language filter (#1343/#1344) that follows a UI-language switch (#1347/#1348) and a "New" indicator for freshly published sets (#1339/#1340); multi-select with a bulk-action bar in "Meine Inhalte" (#1351/#1352); a typed imported-repo category + reusable badge (#1319/#1320); a Latest-strand QR + QR image upload for add-repo (#1316-#1318); Soft Pop becomes the default theme (#1315); the Content-Engine source->canonical boundary made explicit (EXP-042, #1311); device fixes - iOS focus-zoom (#1353/#1354), iPhone delete menu (#1349/#1350), persisted UI language (#1333/#1334), catalogue force-refresh (#1337/#1338); an i18n LLM quality pass for id/ja/ko/tr/el (#1313/#1314); additive schema bump only, no API/data-model change; see changelog/releases/v1.99.0.md). Prior: v1.98.0 (released 2026-06-30 - ContentHub-redesign + i18n release: a collapsible desktop sidebar (#1263), a global grid/list content-view preference defaulting to list (#1261) + a Discover grid/list toggle (#1264), per-set status management (active/deferred/completed + delete) in "Meine Inhalte" (#1301), a ContentHub inline info button (#1274), and the "Weitermachen" panel removed from "Meine Inhalte" (#1270); Dev Mode now defaults ON in the Latest strand and OFF in Haupt (#1271); Error-Replay ("Fehler trainieren") successes now merge back into the SRS error list (#1304); a Spanish/French LLM-assisted i18n quality pass - restored Spanish accents (#1289), French informal "tu" register (#1291), and 67 fr/26 es diacritics fixes (#1303); a help+README + docs sweep (#1280/#1283); first release cut + finished through the one-click workflow_dispatch pipeline; no schema/API/data-model change; see changelog/releases/v1.98.0.md). Prior: v1.97.1 (released 2026-06-29 - content-browsing UX + release-tooling: ContentHub IA reorg moves the import/creation actions + My Lessons into the Import tab (#1256); content-browser list/grid view toggle (#1243) + newest-download-first ordering (#1242); Discover compact Search/Filter bar (#1247); ContentHub info button replaces the intro text (#1252); key-export passphrase inline validation (#1245) + key-vault password-manager opt-out (#1239); plus the one-click workflow_dispatch release actions (#1233/#1234/#1235) hardened to run Playwright in the official mcr.microsoft.com container (#1248/#1250); no schema/API/data-model change; see changelog/releases/v1.97.1.md). Prior: v1.97.0 (released 2026-06-28 - schema + tooling release: the lesson JSON-Schema becomes the App-authoritative single source of truth (EXP-039) — schema/quality-rules/doc/TS-types generated from the App's Pydantic models (#1197), TS lesson types consume the generated schema (#1200), and the structural validator is ajv-hardened against it (#1205), guarded by a make sync-schema-check drift gate; cloze multiselect "select all that apply" (#1195); an exam-mode SRS interval boost for correct exam answers (#1040); a passphrase-encrypted .alk export of AI keys + provider settings (#1165), surfaced on the Settings AI tab (#1181/#1183); a vertical desktop sidebar for primary nav (#891); a single-set deep link /content/set/:setId (#892); the native Web Share sheet + desktop social-link fallback (#1219); Latest-strand visibility + About-tab badge (#1172); iOS Add-to-Home-Screen guidance + testable manifest (#1167); an EXP-041 generation rule coupling exercise type to learning goal (#1225); device fixes — cloze My-answer/Solution toggle (#1216), success-Continue merge (#1218), X-share text (#1227), domain-aware word_tiles instruction (#1228), download-date set sorting (#1211); two #809 god-folder splits (components/exercises #1206, hooks/lesson #1210), a lib/ai split (#917/#1190), a verify-theme token/contrast gate (#1169), and an MkDocs help + README docs sweep (#1215); no schema/API/data-model change (additive generation pipeline over the existing Pydantic models, Alembic/Dexie unchanged); see changelog/releases/v1.97.0.md). Prior: v1.96.0 (released 2026-06-26 - imported-chat backend/API-mode parity (#1154) on top of the Dexie-mode imported-chat fixes (raw transcript #1078, rebuild-on-resume #1122, #797 suppression #1137, header topic #1141, clean intro #1143, session.get FK #1147), Reverse (#1013) + Endless (#1015) lesson modes, invitation-code content sharing (#1094), online-to-local data migration (#1099), the docker-app-launcher engine (#1064), SEO meta/OG/sitemap (#1108), and an auto-deploying preview site on adaptive-learner-content-test (#1135); see changelog/releases/v1.96.0.md). Prior: v1.95.0 (released 2026-06-23 — learning-modes release: Practice/Exam/Timed/Zufall lesson modes + "Fehler trainieren" entry points (#1007/#1008/#1010/#1026/#1025), exam delayed feedback + a dedicated end-of-exam result view + a 1.5x XP bonus with the chosen mode persisted on the attempt (Alembic 0033, #1037/#1039/#1033), word-tiles + free-text My-answer/Solution toggles (#1006/#1020), set export to a GitHub repository (#1018), and a launcher overhaul — single persistent window as the sole GUI entry point (#1045), verbose per-step startup cleanup (#1052), and a make launcher-test log-capture target (#1051); see changelog/releases/v1.95.0.md). Prior: v1.94.1 (released 2026-06-22 — launcher hotfix: the Windows port check now sets SO_EXCLUSIVEADDRUSE so an in-use port is no longer reported free (the launcher's port-conflict detection silently failed on Windows), which also unblocks the Windows launcher build so the .exe attaches to the release (#990); see changelog/releases/v1.94.1.md). Prior: v1.94.0 (released 2026-06-22 — launcher-hardening release: a pure, fully-tested Actions layer + CLI/GUI parity (#966), a single never-self-closing launcher window with an inline live-validated port field (#984), and end-to-end launcher fixes — prod build npm ci (#954), startup crash (#961), uninstall-verify (#964), repo slug + links (#950/#952), default port 8501 (#962), health-check on the published port (#985), local-repo build from a source checkout (#981); plus lesson retry-with-improvement (#984) and a Matching answer/solution toggle (#978); no schema/API/data change; see changelog/releases/v1.94.0.md). Prior: v1.93.0 (released 2026-06-22 — launcher + content-dialog release: Docker-first launcher flow with a step-checklist progress window, configurable host-facing public port + conflict detection, project pinned to adaptive-learner (nginx<->backend port fix), brand icon (#942); AI/quality check dialogs now scrollable + dismissable via a shared ModalShell (#937); AI content-check provenance — "Checked with: provider (model)" in the dialog + Markdown export (#940); no schema/API/data change; see changelog/releases/v1.93.0.md). Prior: v1.92.0 (released 2026-06-21 — Dexie-hardening + technical-debt release: CRITICAL installed-PWA-now-uses-Dexie fix (#907) plus browser-direct Dexie fixes (study guide #902, pronunciation #903, identity hidden #914), tabbed Dashboard (#858), six god-folder splits dropped from .dirsize-baseline (#874–#879), cc>20 complexity offenders cleared (#884–#887), ~387 docstrings/TSDoc across the repository/schema/route/lib contract layers (Clean Code Block 8, #888), Block 9 cleanup (#889); no schema/API/data change; see changelog/releases/v1.92.0.md). Prior: v1.91.0 (released 2026-06-20 — UX release: navigation restructuring (EXP-037, #850) — the primary nav drops from 12+ entries to 7 grouped entries (Nielsen-Norman 5-7) with no function loss, every page still reachable: a 7-entry primary bar (Dashboard, Lernpfad, Meine Inhalte, Entdecken, Fortschritt, Settings, Help) via a reusable NavGroup labelled-section component; a mobile BottomTabBar (5 tabs — Lernen, Inhalte, Entdecken, Fortschritt, Mehr — plus a "Mehr" bottom sheet, hidden on the funnel + during lessons, 44px targets, all themes); ProgressHub (/progress tabbed Übersicht / Statistik / Meine Pfade, embedding Progress + LearningStatistics + Curriculum, only the active tab mounted); DiscoverHub (/discover gains an Import tab); Anki removed from the nav, reachable via an action on Meine Inhalte (/anki kept); Session also removed from the nav (route kept); redirects keep old links alive (/statistics → /progress?tab=stats, /curriculum → /progress?tab=paths, /import → /discover?tab=import, /import/:id separate); new nav.group. / nav.tab. / progress.tab.* / discover.tab.* / content.anki_export i18n keys in all 11 languages; fix — the PWA update banner no longer reappears after the user accepts "Aktualisieren", acceptance persisted (version + timestamp in localStorage) and gated by shouldShowUpdateBanner with SW activation moved to a capped-backoff background driver (#846); docs — EXP-037 design doc (#848); no schema/API/data change; see changelog/releases/v1.91.0.md).** Prior: v1.90.0 (released 2026-06-20 — feature release: AI Exercise Generation Pipeline (EXP-036 / AIX-01–AIX-06) — generation prompt + defensive JSON parser (#817), a "generate exercises" button on theory-only lessons (#829), a deterministic quality gate (#834), exercise-type distribution + balancing (#835), regenerate-with-feedback (#836), and batch generation for an entire set (#838); animated pair resolution in the Matching exercise (#825, refs #824); a per-provider Test button in the configured-providers overview (#814, refs #813); a desktop auto-update checker via the GitHub Releases API (#843); AI session replies in the learner's UI language via an explicit prompt directive across all 11 languages (#828); a localStorage snapshot in the .alb backup (#791, via #837); changed — localStorage → Dexie migration Part B moving contributions / custom learning paths / language-redundancy state into Dexie (#837, #791), pre-release CI hygiene (msgpack CVE bump, complexity baseline, db.ts → db.ts + db-migrations.ts god-file split) (#844), CLAUDE.md UI-language count corrected 8 → 11; fixes — PWA update banner "Apply now" closes the banner and reloads fresh (#819, refs #818), language dropdown transparent background → mapped bg tokens (#821, refs #820), Matching columns stretch to equal-height rows (#823, refs #822); docs — AI content-validation user guide (#841), EXP-036 design doc (#815); no schema/API/data change; see changelog/releases/v1.90.0.md). Prior: v1.89.0 (released 2026-06-19 — feature release: configured AI-providers overview in Settings with a masked key preview (#812); .alb ZIP backup now carries a localStorage snapshot on export/import (#792); browser-direct Anki AI card extraction in Dexie mode (#808); theory-only offline lessons can be saved (#796); changed — AI chat analysis runs in the active UI language (#806), the API-key live test uses the models-list endpoint instead of a generation call (#800), Gemini/OpenAI key-format validation relaxed (#794/#782), the AI gets lesson-progress context on session start (#798), directory restructuring grouping oversized directories by concern + a god-folder CI guard (#811); fixes — native confirm() replaced with an app confirmation modal (#784), button-styled set/learning-path links carry data-slot so labels stay visible (#780), Dexie-mode api_key_backups no longer crash an API-mode import (#788), .alb files accepted at every backup-import surface (#786), per-level statistics labels stack above the bar (#805), ContentPage complexity gate restored (#790); deps — cryptography 49 + backend/frontend minor-patch groups (#776/#777/#778); no schema/API/data change; see changelog/releases/v1.89.0.md). Prior: v1.88.0 (released 2026-06-18 — feature release: QR-code app sharing — a "Share the app" entry in the About tab shows a scannable QR code of the public app URL with copy / download-PNG / native share, backed by a reusable shared/QrCodeModal reusing the bundled qrcode lib (#775); Content Browser / Discover search separation — the Content Browser ("Meine Inhalte") shows only locally downloaded content and the index search + per-set download moved to /discover ("Inhalte entdecken"), cross-linked both ways (#773); media priority + the set's companion book shown first in "Vertiefe das Thema" (#770); fix — Settings token/API-key inputs no longer trigger the browser password manager (#768); docs — release-time version-badge + roadmap/backlog header refresh (#771); no schema/API/data change; see changelog/releases/v1.88.0.md). Prior: v1.87.0 (released 2026-06-18 — feature release: EXP-034 content discovery + search index (#735/#738/#740/#742), Curriculum Builder (#737), daily learning reminders (#744), EXP-031 .alb ZIP backup (#714), EXP-032 deterministic content-quality checks (#712), Korean + Indonesian UI + social sharing + Anki .txt export (#728), configurable review-session length (#724), editor right-click context menu (#753), new teal brand mark + dark variant (#719/#725), Hindi UI complete (#755/#758); late hardening — mobile nav 375px overflow (#759), dexie backup .alb assertion (#760), live review-badge decrement (#761), equal-height choice tiles (#762); no schema/API/data change; see changelog/releases/v1.87.0.md). Prior: v1.86.0 (released 2026-06-17 — feature release: EXP-033 AI Content Validation (set-wide AI checks — batched prompt + parser #676, "Check with AI" report UI #683, IndexedDB-cached report + Markdown export #687, content-hash + signature + AI-checked badge #691) + EXP-029 Media Integration (media.yaml parser + reciprocity gate + "Vertiefe das Thema" lesson section + set media badges + offline YouTube thumbnails #688) + Settings "Check for updates" button #669 + autofocus in Cloze/Free-Text #693; P1 fixes — review-badge decrement after a session #675, SRS review de-duplication #665, mobile hamburger close on iPhone #667; repository-UI i18n in all 9 langs #662; Greek i18n placeholder #702; #689 CI-gate split (content-loader-dexie-ai extract + ContentPage cc baseline, #704); docs — Library-First audit #695, Content-Repo Guide #670, 32-EXP status audit #677, roadmap/backlog restructure #681, EXP-032/033 design docs #658/#671; no schema/API/data change; see changelog/releases/v1.86.0.md). Prior: v1.85.0 (released 2026-06-17 — P0 hotfix: PWA update banner rebuilt — bottom-anchored + AA-pinned --bg-surface/--fg-primary pair (desktop text was invisible) with padding-bottom: env(safe-area-inset-bottom) + z-[9999] (iPhone Safari banner was unreachable under the address bar / hidden by pull-to-refresh), an accent update button, 44px touch targets, regression-pinned (#653); complexity ratchet gate unblocked by baselining the pre-existing FreeText/WordTiles cc-21 offenders from #647 (#656); no schema/API/data change; see changelog/releases/v1.85.0.md). Prior: v1.84.0 (released 2026-06-17 — maintenance: P1 content-repo import CORS-safe + retry + progress + dialog a11y (#645); P2 inline Markdown rendered in exercise prompts + labels (#647); P2 clickable Settings profile picture with preview dialog (#639); P2 backup import declines foreign JSON files gracefully (#643, #641); user-repo import E2E test (#637); EXP-031 ZIP-backup-format design exploration (#644); no schema/API/data change; see changelog/releases/v1.84.0.md). Prior: v1.83.0 (released 2026-06-16 — maintenance + gap-hardening: P1 review-session fix — Enter shortcut + element de-dup in the queue + live XP-badge recompute (#631); P2 theory markdown-table styling (#633); P2 theory back-link resolves by topic not nearest step (#635); gap-hardening audit #630 closing six gaps — cloze Tab navigation (#623), hints honour the feature-not-available policy (#624), Dashboard favorites Top-5 cap (#625), review "repeat in 2 days" suggestion (#626), free-text "Fast! Achte auf:" typo hint (#627), Dashboard Quick-Review button (#628); no schema/API/data change; see changelog/releases/v1.83.0.md). Prior: v1.82.0 (released 2026-06-16 — hint economy with XP cost + SRS impact + statistics (#611, Alembic 0030); smart review queue — weakness tiers + attempt history + cross-lesson mix capped at 20 (#612, Alembic 0031); PWA update prompt — polled version.json + SW prompt mode (#614); Test Impact Analysis on PR CI — vitest --changed + pytest --testmon, full suite nightly + release (#617); architecture-doc audit — Dexie data-integrity + namespace split + Settings-nav patterns (#620); recommended-repos discovery E2E reactivated (#610); manual test plan automated — 52 Playwright specs across 7 sessions + a nightly workflow (#621); additive Alembic 0030+0031 on element_errors, Dexie schema unchanged; see changelog/releases/v1.82.0.md). Prior: v1.81.0 (the biggest feature release of the project: Learning Statistics page with activity heatmap (#584), SRS due-reviews visualization (#592), staged auto-hint system (#595), lesson favorites (#598), richer error/review UX — answer diff + explanations + summary (#602), Dashboard gamification — XP/streaks/badges with reusable ProgressRing/StreakCalendar/BadgeGrid (#583), lesson-play UX — animated counters/feedback pulse/mid-lesson motivation (#589), offline UX — offline + sync-status badges, download progress, pending-sync count, install button (#605), global keyboard-shortcuts system + help overlay (#587), Hindi as the 9th UI language + Devanagari font stack (#571), searchable LanguagePicker (#568), event-recording/error-report system EXP-028 (#566), interactive avatar crop dialog (#560), Settings sidebar/hamburger navigation (#549), editable display name in Settings>Profile (#579), gamification dashboard API /api/gamification/ (#573), recommended-repos.json live (#574), 20+ reusable shared/ components; CI night-shift (#552/#576); starlette CVE bump (#607); EXP-027..030 design docs; see changelog/releases/v1.81.0.md).* Prior: v1.80.0 released 2026-06-15 (EXP-026 user-lesson folding into the content tree (#97) + EXP-025 book companion (#142, AUTH-01/02) + user profile picture (#508) + localized lesson-split titles (#512) + a11y skip-link/dialog-focus (#514/#515); maintenance: About 320px overflow (#511), flaky near-duplicate test de-flaked (#537), EXP-026 import-cycle + Content.tsx complexity gates fixed (#540/#541); see changelog/releases/v1.80.0.md). Prior: v1.79.0 released 2026-06-14 (minor: XP visibility (header badge + lesson-summary +N XP gain, both storage modes, generic shared/XpBadge) #505/#510 + bidirectional matching selection (B->A, not only A->B) #507/#509 + complexity burn-down complete (validateGeneratedLesson the final offender #497, .complexity-baseline empty, #498-#504) + radon hard gate Phase 2 (blocks cc>20, warns >15) #494/#495 + plugin-tests CI job running the 1018-test plugin suite #471 + reusability policy + shared primitives (ListRow/ProgressBar/LessonStepNav/XpBadge) #474/#477 + P1 matching duplicate-pair scoring fix (score by value, not index) #480/#481; no schema/API/data change; see changelog/releases/v1.79.0.md). Prior: v1.78.0 released 2026-06-14 (maintenance/code-hygiene: the complexity burn-down under the Phase 2 hard ratchet CI gate (#408) — the 1156-line session routes.py split (#412, the last backend cohesion-baseline entry; .filesize-baseline now empty) plus a behaviour-preserving burn-down batch across backend + frontend (LessonPage 67->12 #418, ImportDetail 58->18 #420, backup-diff previewRow 54->3 #422, buildContentSetRow 49->13 #424, AiSettingsPanel/ApiKeyRow 45->9 #428, MatchingExercise 45->17 #433, build_analysis_context 33->3 #416, formatEventLog 40->4 #436, NextStepSuggestions 36->14 #438, and the CCW frontend batch #442-#460); two governance rules added to the Vibe Coding Policy — Release-Freeze (#410) and No-Amend-on-open-PR (#412/#414 origin); two flaky-test fixes — the lesson-tts stale-assertion realignment (#165/#425) and pytest-randomly reactivated to catch ordering leaks (#426/#429); and the EXP-025 (author-provided lesson sets, Refs #142) + EXP-026 (user lessons in the content tree, Refs #97) design explorations; no schema/API/data change; see changelog/releases/v1.78.0.md). Prior: v1.77.0 released 2026-06-13 (architecture release: the three-phase Dexie read-modify-write data-integrity remediation (#390 -> #395/#398/#402), completion of the god-file decomposition across backend + frontend (#341/#353/#354), three warn-only CI watchers - cohesion (#371), security-scan (#378), complexity (#405), the Vibe Coding Policy (#383), backend parameter-dataclasses (#376/#382), a feature-state policy (#336), the gitflow branching model (#334), and an npm-audit fix (#379); no schema/API/data change; see changelog/releases/v1.77.0.md). Prior: v1.76.0 released 2026-06-12 (maintenance: a useControlledExercise hook + a shared ExerciseFooter remove ~300 lines of lifecycle duplication across all 5 exercise renderers, zero behaviour/test change (#322, PRs #323-#328); the per-user backup/sync ownership check consolidated into one canonical pair in sync_service (row_belongs_to_user + record_belongs_to_user; backup imports them) - a security-directional drift closed, behaviour-preserving on all reachable data since every mapped user_id column is non-nullable (#329/#330); the Danger-Zone backup button unified onto the same saveBackupToDisk helper as the Settings export, pinned by a cross-component parity test (#331/#332); TTS no longer reads raw Markdown aloud (#320/#321); the Dexie-mode CI gate runs inside the mcr.microsoft.com/playwright container instead of the hanging cdn.playwright.dev download (#317/#319); the misconfigured prettier-frontend pre-commit hook removed (#316/#318); and content-set download now accepts the content repo's optional domain_label field, fixing a 400 on sets carrying it e.g. the psychology set (#333); no schema/API/data change; see changelog/releases/v1.76.0.md). Prior: v1.75.0 released 2026-06-12 (minor - TipTap editor stack migrated v2 -> v3: the whole @tiptap/ stack (23 packages) bumped 2.27.2 -> 3.26.1 in one atomic change (#311/#314); a mixed v2/v3 tree does not compile, which is why the prior piecemeal Dependabot bumps failed and the major-hold (#305) was put in place. The only code deltas are the v3 breaking-API changes, verified against the installed 3.26.1 packages rather than guessed: TextStyle + Table lost their default export (-> named imports), StarterKit v3 now bundles Link + Underline (disabled so the custom standalone ones do not collide), setContent's second arg is an options object ({emitUpdate: false}), and NodeViewContent is generic with a NoInfer'd 'as' prop (NodeViewContent<"code">). Editor/JSONContent/NodeViewProps type imports unchanged (still re-exported from core). 3953 vitest + 88 dexie-smoke green with zero test changes; the Dependabot @tiptap major-hold (#305) removed so minor/patch flow via the group again. Also: a pre-existing @eslint/js-10 (#310) no-useless-assignment break fixed in 5 files (#312/#313), and the two migrated editor files restored to the repo's 4-space style after an inadvertent prettier reformat (#315). No schema/API/data change; see changelog/releases/v1.75.0.md).* Prior: v1.74.0 released 2026-06-11 (maintenance/infrastructure on top of v1.73.0's feature-strategy work: the 438 pre-existing ESLint warnings cleared and the gate tightened to --max-warnings 0 so the Frontend Tests CI job is green again (#220/#292); a dexie-smoke E2E CI workflow (#301/#302); the whole @tiptap/ stack reconciled to a consistent v2 tree (2.27.2) (#304) + Dependabot configured to hold @tiptap major bumps (#306); CI installs frontend deps with --legacy-peer-deps (#293/#294); and Dependabot bumps - @astrapi69/feature-strategy 0.1.1, @types/node 25, @vitejs/plugin-react 6, @eslint/js 10, ruff, and the minor-patch groups (#295-#300, #307-#310); visual baselines unchanged; see changelog/releases/v1.74.0.md).* Prior: v1.73.0 released 2026-06-11 (minor - feature-strategy integration: a central registry + strategy from @astrapi69/feature-strategy replaces the ad-hoc per-button API-key checks and the Dexie-mode section hiding with three states (active/disabled/hidden) resolved from one memoised, reactive {mode, hasAiKey} context, so AI gates flip without a reload; migrated Import-Detail, Anki, NotebookLM, Dashboard, Pronunciation, the Settings Sync section, and the Learning-Repo git controls (#287); E2E feature tests for the no-key surfaces - content-repo import (#278), Anki extraction/export (#279), NotebookLM package (#280); NotebookLM AI buttons key-gated (#281); TipTap extension-highlight/-table-cell/-task-item pinned back to 2.27.2 to fix the v3-vs-core-v2 MISSING_EXPORT build break (#267/#288); Progress.test wrapped in TestFeatureProvider (#289/#290); dependency bumps - ESLint 10, mypy 2.1, the frontend/backend minor-patch groups, GH actions checkout/setup-node/upload-artifact (#258-#266); see changelog/releases/v1.73.0.md). Prior: v1.72.2 released 2026-06-11 (patch — 3 P3 code-hygiene items: Import-Detail + Import list inline styles migrated to token-backed Tailwind utilities, no functional change (#275); a proper Anki empty state — icon + title + body + 'Import a conversation' CTA + (no-key) API-key notice to Settings>Integrations, 8 langs (#276); and all 3 frontend import cycles resolved by extracting the shared type shapes out of storage/types.ts's implementation back-edges into pure modules (content-validation-types.ts, storage/export-types.ts, api/request-types.ts) — madge now 0, check-circular baseline 3->0 (#252); see changelog/releases/v1.72.2.md). Prior: v1.72.1 released 2026-06-11 (patch — dark-theme button-background fix (raw no longer inherits the UA buttonface ~#efefef on dark themes; the unfinished half of v1.71.0's #185, now background-color:transparent in the base layer, guard-pinned in contrast.test.ts) (#271); 5 serious axe a11y violations fixed (aria-progressbar-name on mission + XP bars, nested-interactive on the ProfileRadar role="img" wrapper, listitem on Content knowledge groups, color-contrast via #271) — 0 violations across all 7 audited routes (#273); the visual lesson-matching view baselined for the first time after the helper switched from the absent controlled-mode matching-submit to lesson-check (#270); the axe suite now runs at all via browser.newContext() (#272); see changelog/releases/v1.72.1.md). Prior: v1.72.0 released 2026-06-11 (minor — CI/quality-infrastructure build-out: ESLint flat config + CI/pre-commit (#222), dependency security scanning (#224), coverage floors (#225), madge circular-dependency guard (#251), Dependabot (#253), Prettier step 1 (#254), bundle analyzer (#255), Stylelint (#257), Playwright visual regression (#244) + axe-core accessibility (#246); plus dark-theme contrast/layout + Import-Detail UX fixes — My Lessons wrap (#226), theory back-link contrast (#228), lesson-summary outline (#230), project-item active state (#232), Import-Detail title (#234), Back-to-exercise outline (#236), Sessions metric overflow (#238), transcript collapsible (#240), Matching mobile overlap (#242); see changelog/releases/v1.72.0.md). Prior: v1.71.1 released 2026-06-10 (patch: dark-theme contrast & spacing sweep + a Session-Detail export fix — recent_sessions now carries session_id so Session-Detail Markdown/PDF export stops failing "Session not found" in both modes (#209); the .btn base class now sets a readable text colour so a variant-less .btn no longer goes invisible on dark surfaces (#211); plus Missions reset → shadcn destructive (#205), ThemePicker inactive tab → fg-secondary + AA pin (#207), Donation badge → --accent-fg (#201), chart data-table trigger → fg-primary + shadcn Table (#218), Matching orange → cyan (#199), Learning-Repo settings layout + dev-info drop (#203), Dashboard tags spacing + Nav Help consistency (#213/#214), Lernmaterialien spacing (#216); see changelog/releases/v1.71.1.md). Prior: v1.71.0 released 2026-06-10 (minor: clearer Matching result feedback - a wrong pair now shows "Deine Antwort: ..." (red, X icon) and "Richtige Antwort: ..." (green, bold, check icon) on separate readable lines, and a correct pair confirms the link as a single "A -> B" line (Lucide arrow, not a Unicode glyph) with a green check; new your_answer + reworded correct_hint i18n in all 8 langs, all colours via the AA-pinned --matching-correct/-error tokens (#191); Enter now works in the lesson-end correction round (CorrectionBlock) via a controlled cloze + the shared useLessonEnterKey hook, so the three Enter surfaces can't drift (#187); a systematic dark-theme button-contrast fix - a base-layer button{color:inherit} so a raw button stops falling back to UA buttontext black with Tailwind preflight off, while losing to every explicit text- utility (shadcn variants untouched) (#185); the content-repo token password input wrapped in a form, clearing the last Chrome "password field is not contained in a form" warning (#119); test isolation - the content-loader cache is reset between tests so the cross-identity backup round-trip stops flaking under pytest-randomly (#164), and the lesson read-aloud Dexie-gate spec given headroom + a retry (#165); plus a content fix - the Miller "7 ± 2" cloze accepts keyboard-typeable +/- forms (content #33); see changelog/releases/v1.71.0.md).* Prior: v1.70.2 released 2026-06-10 (patch: theme contrast + Matching-exercise fixes - the shadcn secondary button variant rendered white-on-teal in soft-pop (1.86:1); its --bg-secondary is corrected to a readable dark tone and contrast.test.ts now pins every button-variant colour pair across all 12 themes (#179); matched Matching pairs no longer use red (red reads as "wrong") via a dedicated red-free --matching-pair-1..7 palette decoupled from the shared --chart- data-chart palette (#181); and the Matching result state now distinguishes correct/wrong pairs - number badges stay visible, correct pairs green on both tiles, wrong pairs red on both tiles + a "correct partner" hint, unmatched neutral, via new per-theme --matching-correct/-error tokens, WCAG-AA verified (#183); see changelog/releases/v1.70.2.md).* Prior: v1.70.1 released 2026-06-10 (patch: onboarding / assessment / content-browser / landing UX fixes - uniform onboarding-wizard step height so the panel no longer jumps between steps (#169); an assessment first-step "Continue later" exit plus a history fix (replace navigation) so the browser back button no longer lands on the onboarding name/topic form (#171); the landing "Read the documentation" link opens in a new tab (#173); onboarding tab order flows Name -> Topic with the Topic help icon taken out of the tab order (#175); and the Content Browser secondary action buttons (Import Lesson / Import Chat / Learning Path) + the Recommended-books toggle switched from the surface-less ghost variant to the bordered outline variant so they stay visible at WCAG AA across all 12 themes in dark mode (#177); see changelog/releases/v1.70.1.md). Prior: v1.70.0 released 2026-06-09 (minor — first-run backup restore on an empty install: onboarding offers Restore-from-backup instead of a from-scratch start, the offer disappears once data is present (#150); a comprehensive v1.61-v1.69 MkDocs documentation overhaul — a feature-oriented help branch (Content Browser, multiple content repositories, backup & restore, content creation incl. the books.yaml format, design tokens, sync, changelog) in all 8 languages plus refreshed lessons/getting-started/onboarding/themes pages, deployed at https://astrapi69.github.io/adaptive-learner/docs/ (#157); context-sensitive in-app help — the nav "?" opens the current view's glossary entry instead of a fixed one, each help-drawer article gains a "Learn more" link to the matching docs page, and 9 new glossary terms (content repository, trust level, streak, assessment + dedicated Dashboard/Content-Browser/Lesson/Settings view entries + backup) ship in all 8 languages (#159); and a manual pre-release QA test plan at docs/reference/MANUAL-TESTPLAN.md; see changelog/releases/v1.70.0.md). Prior: v1.69.0 released 2026-06-09 (minor — theory example links (#139) + per-domain book recommendations (#141) (both via Sprint 2 / #153); an Enter-key shortcut in the Error-Replay runner via a shared useLessonEnterKey hook (#154); and a backup-restore title fix — restore parses the manifest's sets[].title instead of a root-level-only regex, so a restored set keeps its title (not the raw analysis- set_id) and step progress (#134), proven by a real export->import round-trip; see changelog/releases/v1.69.0.md). Prior: v1.68.0 released 2026-06-09 (minor — lesson-result export + theory back-links (#138/#140), a matched-pair color + number-label overhaul (#145), dark-mode contrast fixes for button-styled anchors and outline/ghost buttons (#146/#148), read-aloud no longer reflowing the theory panel (#147), domain-aware matching wording for knowledge lessons (#149), search-icon-right + uniform exercise-card heights (#143), and an About AI-assistance credit naming Claude (Anthropic); see changelog/releases/v1.68.0.md). Prior: v1.67.1 released 2026-06-08 (patch — restored user-generated lessons keep their title + step progress: a Dexie-origin user-generated set (Lesson Creator / saved offline lesson / adaptive snapshot) carries its title in the contentSets row and ships no manifest.yaml, so the API restore dropped it and the set landed manifest-less in the FS cache — Dashboard showed the raw set_id instead of the title and Aufgabe 1/26 collapsed to a bare Fortsetzen; restore now synthesises a one-set manifest from the backup metadata so both resolve (#134); plus the EXP-024 Phase 1 backend repository-pattern refactor, internal only (#133); see changelog/releases/v1.67.1.md). Prior: v1.67.0 released 2026-06-08 (backup is now a complete, self-contained snapshot + EXP-023 user content repositories: the export always carries all 30 tables (empty = [], reverting the v1.66.0 skip-empty) so an absent table can't be confused with an empty one, with full INFO/ERROR restore logging, a scrollable per-table import summary, and persistent non-auto-dismissing error toasts (#126); subjects reconcile by (parent_id, name) (UNIQUE + Alembic 0028 dedup, null-aware root match, self-ref parent remap) so a fresh-install restore no longer duplicates the 77-node taxonomy into 154 (#127); a backup from a prior identity (wiped/re-created install, Dexie-origin) is re-homed to the importing user so it lands instead of cascade-failing every child with "missing parent" — 0 errors where it produced 192 (#129); downloaded content sets now travel IN the backup (manifest + lessons + base64 assets, wire 1.2.0->1.3.0, both storage modes) so a restored install opens lessons immediately and user-generated sets — cache-only — are no longer lost (#130); EXP-023 multi user content repositories Phase A/B/C — connect/add/remove/reorder repos, share via /add-repo deep link + QR, automatic Trust validation, recommended-repos discovery + local ratings (#118/#122/#124); Chrome console cleanup — password inputs wrapped in a form (#119); new BACKUP-AKZEPTANZTEST rule — no backup change merges without a proven real export->import round-trip; see changelog/releases/v1.67.0.md). Prior: v1.66.0 released 2026-06-06 (maintenance — systematic backup-restore fix + deploy-safe lazy-route reload + subject-filter UX polish: backup restore replaces the prior point-fixes with a generic type-coercion + matching layer — unique-key matching for the 13 non-id-UNIQUE tables (singletons + composite keys) with FK-graph-derived child remap + placeholder reclaim (older backup / clean-install no longer hits a UNIQUE violation), JSON serialization for dict/list values bound to Text columns (badges.tier_thresholds etc., fixes type 'dict' is not supported), empty-table skip on export + import; verified end-to-end through the real backup API (#115, #117); GH-Pages auto-reloads once on a stale-deploy chunk-fetch failure via lazyWithReload + Workbox cleanupOutdatedCaches instead of crashing with "Failed to fetch dynamically imported module" (#113); Dashboard subject filter hides at <=1 subject, orders most-used-first, groups by category above 5 (#111); see changelog/releases/v1.66.0.md). Prior: v1.65.0 released 2026-06-06 (resumable assessment + Enter-key lesson shortcut + clearer matching exercises + design-token architecture: abandoning the assessment partway persists the in-flight progress (current question + answers + start time, project-scoped in localStorage, mode-agnostic) and the learner resumes where they left off, with the Dashboard/Settings actively inviting Continue/Create/Retake learning profile, progress cleared once the profile is computed (#106); Enter checks an answered exercise then advances, free-text/cloze submit on Enter, stepping aside for controls that own Enter, Settings>Learning toggle default-on (#103); the last hardcoded colors in global.css route through design tokens with the no-hardcoded-colors guard extended to non-theme CSS + fixed-palette Tailwind classes + docs/policies/DESIGN-TOKENS.md (#101); matching term/definition columns get theme-derived blue/green tints + an aria-hidden A/B chip via color-mix() tokens across all 12 themes, AA-verified (#108); fix — the assessment result no longer overlaps the radar summary/table link with the preferred-method badge (#105); see changelog/releases/v1.65.0.md). Prior: v1.64.0 released 2026-06-06 (onboarding overhaul — a two-field quick start (name + topic only, the rest defaulted) plus an optional one-question-per-screen profile wizard (OnboardingWizard: goal / timeframe / daily minutes / current problem / opt-in assessment, each pre-filled so "Next" always advances, progress bar + Back, persists via getStorage().projects.update), with the assessment now OPT-IN — "Jump right in" goes straight to the Dashboard and the assessment is reachable only from the wizard's final step (#92, #94); fixes — the Content Browser (and any tall page) no longer shows a second scrollbar (html/body lock both axes overflow: hidden so #root is the sole scroll container, horizontal mobile guard preserved; regression pin) (#42) + the sticky lesson footer is pinned to the viewport bottom across steps (lesson-page fills the viewport flex flex-col min-h-full, the step grows flex-auto, no mid-screen float / vertical jump; regression pin e2e/dexie/lesson-footer-stability.spec.ts) (#43) + a WCAG contrast pin for --accent-as-text (≥4.5:1 on bg-primary/surface, ≥3:1 on bg-elevated) plus a catppuccin-mocha nudge so all 12 themes pass computationally (#96); see changelog/releases/v1.64.0.md). Prior: v1.63.0 released 2026-06-06 (6 recommended WCAG-AA theme presets + systematic i18n audit + dashboard subject filter scoped to the user: the Appearance picker leads with a Recommended sub-tab — catppuccin-latte/supabase/graphite (light) + catppuccin-mocha/soft-pop/amethyst-haze (dark), generated from tweakcn presets by scripts/generate_preset_themes.py as full 43-token themes with computationally-enforced WCAG AA (contrast.test.ts across all 12 themes), classic 6 unchanged; i18n audit (#80) — the 77 seeded subject/category names rendered English everywhere, now translated via a subjects.* catalog (60 keys × 8 langs) + lib/subjectI18n.ts (translateSubjectName/translateSubjectPath, fallback to subject.name for proper nouns), plus 92 t() keys called in code but missing from every catalog (whole editor.* toolbar, danger-zone, dashboard metrics, learning-path aria) added + translated in all 8 langs; dashboard subject filter lists only the user's subjects, hidden when none (#72); fixes — theme accent-foreground uses the on-accent colour for AA (#82), dashboard.no_data key added (#84), a backup_service mypy no-any-return (#87); see changelog/releases/v1.63.0.md). Prior: v1.62.0 released 2026-06-05 (backup-restore data-integrity hardening — type-driven datetime coercion (#57) + orphaned-child-row skip on restore with a full FK-order audit (#64); GitHub-Pages build provenance — Vite __BUILD_HASH__/__BUILD_DATE__ + deploy-workflow vars so About stops showing "unknown" (#66); content cache-bust on version change in both storage modes (#62); UI/i18n conformance — sync section hidden without a backend (#51), missing-vs-unsupported exercise_type fallback (#55), dashboard taxonomy.* i18n keys (#76), shadcn buttons (#53/#68/#78), Language panel first in the Learning tab (#69); new .claude/rules governance (GITHUB-ISSUE-PFLICHT + ISSUE-LIFECYCLE, issues-as-queue, docstrings-over-inline-comments) + adopted Bibliogon issue templates/labels; see changelog/releases/v1.62.0.md). Prior: v1.61.0 released 2026-06-05 (app-wide shadcn button conformance + lesson resume-at-paused-step + cross-repo content validation + backup-restore data-integrity fixes: ~200 action buttons across all 13 page areas converted to shadcn <Button> (correct variant, 44px, lucide icon + responsive label, preserved a11y/testids; exercise tiles / editor toggles / graph nodes left raw by design — docs/audits/button-audit.md), and the Settings backup actions made prominent (Create=default / Restore=outline) with scroll-to-top after restore; a paused lesson now resumes at the exact step via LessonProgress.current_step (Alembic 0027 + Dexie, no version bump — persisted on step/autosave/pause, resumed at max(step_results-derived, current_step), reset on abandon/restart); cross-repo content validation — scripts/validate_bundled_content.py makes the content repo the single authority for the README CONTENT-STATS block (pre-commit writes, a Content stats drift CI job checks a FRESH content checkout, deploy double-checks; README now reports 330 lessons / 16 sets); backup-restore fixes — UNIQUE-on-badges.key resolved by natural-key upsert + user_badges.badge_id remap, FK-topological _RESTORE_ORDER, imported_conversation_id added to backup columns; see changelog/releases/v1.61.0.md). Prior: v1.60.0 released 2026-06-04 (lesson-reading UX + Learning Path Achievement Map + Tailwind exercise renderers + help-glossary perf + B1 content complete: auto-hide the sticky lesson header on scroll-down / reveal on scroll-up (new useScrollDirection observing #root, 10 px threshold, motion-safe Tailwind -translate-y-full transform, no layout shift; the sticky lesson footer stays visible; scoped to /lesson /review /adaptive-lesson /error-replay); the Learning Path gains a domain-grouped Achievement Map view (3 views now — Persönlich / Map / Graph); Settings secondary buttons go icon-only on mobile; all 5 exercise renderers (PictureChoice / Matching / FreeText / Cloze / WordTiles) migrated to Tailwind (~85-90 % of the app) + a post-migration theme audit (43-token parity, themed Dialog overlay) + dead-CSS removal; the help glossary is lazy-loaded per language (EN eager + synchronous fallback, the other 7 on-demand chunks via loadGlossaryLanguage + useGlossary), dropping the main index chunk 731->449 KB raw / 245->138 KB gzip (closes PERF-HELP-GLOSSARY-LAZY-01); same-language chat imports (German grammar for German speakers, source==target) are auto-detected as knowledge domain content — the Save flow stamps the lesson domain (schema v1.3) and the Share Wizard inherits the pair instead of repairing it (E2E import-language-pipeline variant 2 un-fixme'd), plus a Dexie async-load wizard timing fix and a github_service mypy no-any-return cast; content reaches the B1 roadmap — de->es B1 / de->en B1 / de->fr B1, 15 lessons each, so de->en/es/fr each ship full A1->A2->B1 — library now 271 lessons / 13 sets / 4 domains / ~66 h; see changelog/releases/v1.60.0.md). Prior: v1.59.0 released 2026-06-04 (Learning Path Redesign — personal path with zoom levels: the old all-225-lessons xyflow graph at /learning-path is replaced as the default by a two-level personal view — Level 1 is one row per downloaded set sorted by last activity (mini progress track, percentage, relative last-activity, one context-aware action: Fortsetzen / Starten / Nächstes Level / Abgeschlossen); Level 2 expands inline (accordion) to per-lesson detail (stars, per-direction mastery, last attempt, current marker) plus adaptive-lesson + set-wide retry-errors actions; a "Nur meine" / "Alle Sets" filter and a collapsible not-downloaded section with per-set download, both persisted in localStorage; a completed course offers its next CEFR level when one exists; the original xyflow graph is renamed LearningPathGraph and kept as a lazy-loaded alternative view so xyflow (~177 KB) leaves the default bundle (personal chunk ~21 KB); new learning_path.* strings in all 8 catalogs; pure buildPersonalPath + relativeTime data layer via usePersonalPath, both storage modes; also folds in the mobile nav hamburger-left fix; see changelog/releases/v1.59.0.md). Prior: v1.58.0 released 2026-06-04 (user-centric UX overhaul — a shared Continue Learning ("Weitermachen") section on the Content Browser + Dashboard surfacing the most recently-touched lesson per set (resume / next-lesson / set-complete), reading LessonProgress + set manifests through getStorage() so both storage modes carry it; the Content Browser reordered search-first with a compact icon-only mobile action toolbar (Import Lesson / Import Chat / Learning Path / Create, 44 px targets); the Dashboard reordered to lead with Continue Learning + the actionable cards (paused / missions / focus / review) before gamification; and a responsive button pattern (icon-only on mobile, icon + label from md up); 23 new frontend tests; see changelog/releases/v1.58.0.md). Prior: v1.57.0 released 2026-06-03 (community PR automation — sharing a lesson creates a real fork -> commit -> pull request (backend github_service + /api/github/* proxy in API mode, browser-direct lib/github/github-api.ts in Dexie mode, via IStorageService.github), GitHub PAT Fernet-encrypted in secrets.yaml and managed in Settings -> Integrations; Content Browser instant search (debounced 300 ms, case/diacritic-insensitive, German-digraph-aware, Cmd/Ctrl+K, lazy index); Tailwind Phase D (shadcn Progress XP bar + a11y, badge-tier dots, toast tokens, Lucide nav + 44 px targets, Help Drawer -> shadcn Sheet, E2E Radix-Select migration); psychology to 90 lessons / 225+ total; see changelog/releases/v1.57.0.md). Prior: v1.56.0 released 2026-06-03 (performance + PWA hardening: ~460 KB gzip saved via lazy per-language i18n catalogs (main chunk 446->233 KB gzip, off every page) + a curated highlight.js (296->21 KB gzip on code lessons); bundle audit at docs/audits/performance-audit-2026-06-03.md; Dexie + backend query layers audited healthy (no page-load N+1; BADGE-EVAL-NPLUS1-01 P3 filed); PWA — offline indicator + network-aware buttons, a localStorage background-sync queue for offline lesson-progress upserts, cache-management UI in Settings->Data, a 7-day/standalone-aware install prompt, and a service-worker StaleWhileRevalidate route for API-mode lesson caching; carries the Tailwind/shadcn migration (Phases B-D — buttons/Card/Badge/Progress, Lesson + Share dialogs, form inputs to shadcn Input/Select, XP bar) + backend API rate limiting (3-tier token-bucket) + OpenAPI docs; fix — restored the per-theme read-aloud control in Dexie mode (getLessonDexie injects the set's language pair/domain; closes TTS-E2E-HEADLESS-GUARD-01; IMPORT-LANG-PIPELINE-SELECT-MIGRATION-01 filed); content at 215+ lessons; see changelog/releases/v1.56.0.md). Prior: v1.55.0 released 2026-06-03 (CSS-framework foundation + Error Replay: adopts Tailwind CSS v4.3.0 + shadcn/ui as the styling framework (Phase A, additive — the migration is incremental: components convert when touched, no Big Bang). Tailwind is configured CSS-first (@theme in frontend/src/styles/tailwind.css) and CONSUMES the existing 6-theme CSS variables (bg-accent -> var(--accent) etc.) so all themes keep working; preflight is intentionally off and all Tailwind output is layered, so unlayered global.css always wins and existing pages stay pixel-identical. shadcn/ui base is wired (components.json + cn() at @/lib/utils + @/* alias; no components installed yet, the semantic-token bridge lands with the first component); LessonStickyFooter is the proof-of-concept; .claude/rules/ + CLAUDE.md updated to adopt Tailwind; full guide at docs/development/tailwind-migration.md. Ships the Error Replay feature ("Fehler wiederholen" — after a lesson, retry only the exercises you failed, via /error-replay/... + error-replay.ts) with priority-aware next-step suggestions (error replay is PRIMARY at 0-1 stars), TTS read-aloud for lesson cards, and Stryker frontend mutation testing wired (nightly, opt-in). Carries forward the 10 sets / 200 lessons / 3 domains content library; see changelog/releases/v1.55.0.md). Prior: v1.54.0 released 2026-06-03 (import-time language pipeline + big content release: languages captured at IMPORT time (chat language + auto-detected learning language) and inherited through analysis -> save-as-lesson -> share so nothing is guessed downstream (ImportedConversation gains source_language/target_language, Alembic 0026 + Dexie v25); the analysis prompt gains a learner-language context block; sharing is domain-aware (source==target ships as non-language knowledge content, mirroring the content repo's validate_content.py); content grows to 10 sets / 200 lessons across 3 domains incl. FR/ES/EN A2 for German speakers, DE->EN A1, Python Grundlagen, Psychologie (65); folds in v1.53.1/.2 fixes (single two-phase button on Adaptive/Review, community-PR attachment for all sizes, ShareWizard source inheritance); see changelog/releases/v1.54.0.md). Prior: v1.53.0 released 2026-06-02 (content schema v1.3 + Python course + domain support: Card gains optional code fields (code_snippet/code_language/expected_output/hint/difficulty/media_type) and CURRENT_SCHEMA_VERSION bumps 1.2->1.3 (additive, major-match); sets/lessons carry a domain (non-language domains allow source==target, both validators); the Content Browser splits Sprachen (language tree) from Wissen (domain groups w/ icons); the lesson viewer renders syntax-highlighted code blocks via lazy highlight.js (language label, copy button, Output block, mobile scroll); code/formula cards drive code-aware exercises (monospace free-text textarea + whitespace/quote-tolerant case-sensitive matching + monospace cloze); a new Python Grundlagen course (de/python-basics, 15 lessons, 123 code-snippet cards, domain=programming) brings the library to 7 sets / 100 lessons / ~22h, all bundled; plus a fix so analysis-to-lesson source_language defaults to the app language not "en" (P3 follow-ups ANALYSIS-TARGET-DETECT-01 / ANALYSIS-DOMAIN-SUGGEST-01 / PLACEMENT-LANG-WARN-01 filed); see changelog/releases/v1.53.0.md). Prior: v1.52.0 released 2026-06-02 (DE->EN A1 content + backup-restore data-integrity fixes: a fifth A1 course — English for German speakers (de/en-a1, 15 lessons; false friends become/bekommen, gift/Gift, handy/Handy, chef/Chef, actual/aktuell; German-targeted distractors; progressive receptive->mixed->productive direction) brings the library to 5 sets / 75 lessons / ~12.5h, all bundled into the GH-Pages build; BACKUP-API-RESTORE-01 — API-mode restore now covers all 30 tables (was 16, silent data loss), restore order derived from the export/sync source with a parity test + 30-table round-trip, plus a per-table flush that fixes a latent FK violation on the FK-decoupled gamification/SRS/content tables; new app/db_guard.py refuses destructive full-table SQL against a production data dir from non-app processes; and a P0 Lesson-Creator fix — a resumed draft with an equal source/target language no longer blocks Step 1; see changelog/releases/v1.52.0.md). Prior: v1.51.0 released 2026-06-02 (Phase 66 / EXP-022 — Visual Learning Path: interactive @xyflow/react lesson graph at /learning-path with mastery-coloured nodes, set-group progress, dagre auto-layout, recommended-next node, error-cluster overlay, filter/search, stats sidebar, full a11y across all 6 themes, lazy-loaded ~100 KB; plus a Dexie backup overhaul — File System Access API save-to-disk, a "Your backup contains" preview, and a data-loss fix restoring the 10 gamification/progress/SRS/missions tables the Dexie export silently dropped; BACKUP-API-RESTORE-01 filed P1 for the backend mirror gap; see changelog/releases/v1.51.0.md). Prior: v1.49.0 released 2026-06-01 (Phase 65 — API-key UX + Community Sharing via PR + Analysis loading: instant API-key format validation (prefix + length per provider, green/red + Save gating), a live Test button (POST /settings/{user}/test-api-key + browser-direct in Dexie; classifies ok/invalid/rate_limit/network), and a rollback cache (new ApiKeyBackup model + Alembic 0025 + Dexie v24 + sync surface — Save auto-tests first, then Keep old / Save anyway / Restore last working); secret.key is now the stable Fernet key source (keys survive restarts) and secrets.yaml keys are UI-editable. Community sharing opens a GitHub PULL REQUEST (lesson JSON committed at sets/{src}/{tgt-level}/lessons/{nn}-{slug}.json, content-repo CI validates). Chat-import Analyze gains a loading indicator (phased progress + estimate + spinner + real Cancel via AbortSignal + friendly inline error). Friendly voice/mic errors instead of raw Web Speech codes. 30 SQLAlchemy models (added ApiKeyBackup). Full i18n in 8 languages). Unreleased on main: native help translations in 6 languages (ES / FR / EL / PT / TR / JA) — the 22-entry help glossary + the full 38-file docs/help tree per language, plus the 6 languages + native nav titles in _meta.yaml; PT/TR/JA flagged AI-generated pending native review (HELP-CONTENT-TRANSLATIONS-01). Prior: v1.48.0 (Phase 64 — Community Sharing UX + Smart Lesson Organization: four-step share wizard + smart placement engine, lesson-level duplicate/variation detection, author credit + contribution history, Missing-Lessons suggestions, content schema 1.2 -> 1.3; merges Smart Next-Step Suggestions after lesson completion; EXP-021 Lesson-Creator exploration). Earlier: v1.47.0 (Phase 63 — Lesson Flow Control) and v1.46.0 (Phase 62 — EXP-018 Exercise Direction). Test baseline as of v1.48.0: 1064 (+1 skipped) backend + 997 plugin + 2816 Vitest = 4877 green; v1.49.0 adds the API-key-validation / analysis-loading / voice-error tests on top. Playwright smoke spec files run separately; the Dexie-mode release gate runs via make test-dexie-smoke.

Priorisierung (abgeleitet aus dem Exploration-Status-Audit, docs/journal/exploration-status-audit.md, 2026-06-17): Aktueller Fokus → Naechste Phase → Zukunft. Die granulare Task-Liste (mit IDs) steht in backlog.md; Abgeschlossenes in der Phase-History-Tabelle weiter unten + unter "Abgeschlossen".

Aktueller Fokus (v1.86.0+)

v1.86.0-Release-Blocker (#689, offen): zwei CI-Gates sind auf develop rot, eingeschleppt durch die EXP-029/033-Feature-Arbeit (#683/#687) — content-loader-dexie.ts > 1000 Zeilen (File-Size-Gate) + Content.tsx cc 22 (Complexity-Gate). Erst entschaerfen (Datei splitten / Funktion dekomponieren), dann v1.86.0 taggen. Kein Feature-Blocker, ein Gate-Blocker.

  • EXP-033 — KI-gestuetzte Content-Validierung (PARTIAL, Rest fuer v1.86.0+). Ausgeliefert: set-weite Batch-Pruefung + Report-UI + Kosten- Bestaetigung (AIV-01..05) und Content-Hash + Signatur + "AI-Checked"-Badge (AIV-08..11), #674/#676/#686/#687/#690/#691. Offen: AIV-06 (CI-Action ai_review.py im Content-Repo), AIV-07 (Auto-Fix, nur User-Content), AIV-12 (Signatur bei Content-Aenderung invalidieren). Siehe EXP-033.
  • EXP-031 — ZIP-Backup-Format (.alb). Container + Manifest, Magic-Byte- Erkennung, Legacy-JSON-Fallback; Tasks BAK-01..06. Siehe EXP-031.
  • EXP-032 — Deterministische Content-Validierung. Encoding/Antwortlaengen, Sprachpaar-Konsistenz, Akzent-/Artikel-Woerterbuecher; Tasks CQV-01..03 (CQV-04/05 spaeter). Siehe EXP-032.
  • #696 — Library-First-Follow-up F-1: PyYAML als expliziten Backend- Runtime-Dependency deklarieren (kleiner Hygiene-Fix).
  • Offene Bugs: #622 — A11y link-name-Verstoss im Lesson-Viewer (P3, offen). (#656 Complexity-Gate FreeText/WordTiles bereits in v1.85.0 geschlossen; das Review-Badge stieg nach einer Session nicht korrekt ab — in #675 behoben (Closes #673), released mit v1.86.0. Beide siehe "Abgeschlossen".)

Naechste Phase

  • EXP-025 — Content-Repo-Oekosystem (AUTH-03..09): Cross-Repo-Author- Publishing, companion_repo-Querverweis, Versions-/Update-Handling, Konflikt-Policy, buch-spezifischer Add-Flow, Autoren-Leitfaden. AUTH-01/02 ausgeliefert (#529/#531); mehrere AUTH-Tasks brauchen geteiltes Backend (siehe Zukunft).
  • EXP-024 — Curriculum Builder / Schichtentrennung Phase 2/3: Plugin- Service-Module auf Repository-Pattern (Phase 2), Frontend-U1 (Phase 3). Phase 1 ausgeliefert.
  • EXP-021 / EXP-022 — Content-Authoring-Ausbau: manueller Einzel-Uebungs- Editor + CSV-Datei-Upload + Token-Rollen-UI (EXP-021 Folge-Ausbau); Content-Browser-Baum als Graph (UC2) + Beziehungs-Editor (UC4) (EXP-022).
  • EXP-027 — Weitere Sprachen (I18N-06..12): Indonesisch-/Italienisch-UI, formale Uebersetzungs-QA, Content-Sprachpaar-Expansion, Exercise-RTL-Audit.
  • Library-First-Follow-ups (#697–#700, aus dem Library-First-Audit): react-easy-crop fuer ImageCropDialog spiken (#697), jsonrepair fuer den LLM-Prosa-JSON-Extraktor evaluieren (#698, TS + Python gepaart), zod fuer die content-validator-Schema-Schicht evaluieren (#699, vorlaeufig lean BEHALTEN), react-activity-calendar fuer die ActivityHeatmap evaluieren (#700, vorlaeufig lean BEHALTEN).

Zukunft (Phase 2, community-finanziert)

  • EXP-030 — Multi-User (MU-01..05, MU-10, MU-20): lokale Profile → Geraete-Kopplung → Cloud-Konten, gestuft.
  • EXP-023 — Server-Features (Phase C): Community-Sterne-Aggregation, Trust 2 (community-verified), zentraler Index, Coach-Aggregation, Einmal-Invite-Tokens.
  • EXP-027 — RTL-Infrastruktur (I18N-01 RTL, I18N-04/12 Arabisch, I18N-05 Koreanisch/Hangul, I18N-10 Exercise-RTL-Audit): hoher Aufwand.
  • EXP-004 / 009 / 011 / 012 / 015 (laenger zurueckgestellt): GitHub-Org, soziale Features, Ranglisten/Turniere, Kinder-Variante.
  • SaaS-Tier (BL-14..17) + BL-19 (soziale Features): PostgreSQL, JWT, Multi-User, Stripe — bis das Single-User-Modell an eine Grenze stoesst.
  • Kleinere offene Posten (Detail in backlog.md): ANALYSIS-TARGET-DETECT-01, ANALYSIS-DOMAIN-SUGGEST-01, PLACEMENT-LANG-WARN-01, PT/TR/JA-Native-Review, SW-Cache-Knobs, iOS-Safari-Meta-Tags, Push-Notifications, native iOS/Android-Wrapper, BADGE-EVAL-NPLUS1-01, PERF-EAGER-GLOBS-01, DEP-MYPY-2-01, DEP-ANTHROPIC-105-01, PLUGINFORGE-LIFECYCLE-UI-01, BACKEND-RADON-REMAINDER-01, EXP-013 Stufe 3.

Phase history (completed)

Phase Release Headline
1 v0.1.0 Skeleton strip + domain models + core routers + plugin hookspecs
2-4 v0.1.0 Backend domain wiring + 7 plugins + frontend pages
5 v0.2.0 Multi-provider AI (Anthropic / OpenAI / Gemini), server-side orchestration
6 v0.3.0 Per-(method, step) prompt matrix, Lesson CRUD, Playwright smoke specs
7 v0.4.0 Cycle-step advance, Dashboard polish, model picker, spaced recommendations
7-extras v0.4.1 Skip-button hoist, favicon .ico fallback, CI Release Gate fix
8 v0.5.0 Dual-prompt AI cycle transitions, StepEvaluation persistence, tracking aggregates
9 v0.6.0 Mobile PWA — responsive UI, service worker, install prompt, offline indicator
10 v0.7.0 Dexie parallel storage + GitHub Pages deploy — IStorageService, browser-direct AI, public site
11 v0.8.0 Comprehensive MkDocs documentation (DE + EN) — 28 pages across User Guide / Concept / Developer / API, deployed at /docs/
12 v0.9.0 Chat-history import + AI analysis — paste/upload ChatGPT/Claude/Gemini transcripts, extract structured learning insights
13 v1.0.0 Local-network sync with AI-merge — bidirectional WiFi sync between devices with intelligent conflict resolution
14 v1.1.0 About tab in Settings — five-section panel + system-info endpoint, storage-mode-aware
15 v1.2.0 Backup + restore — Dexie + API parity, auto-backup rotation, compare UI, full Settings integration
16 v1.3.0 Learning progress export (PDF + Markdown) — 3 report types (Progress / Session / Curriculum), identical wire shape across storage modes
17 v1.4.0 Auto-Loop: continue learning after step 7 — topic-transition evaluator, cycle counter, multi-cycle session summary
18 v1.5.0 Async AI Calls + Performance — async SQLAlchemy foundation, parallel step-eval + topic-transition at cycle boundary, per-message timing metrics
19 v1.6.0 Streaming Learning Response — ai_complete_stream hookspec + 3 provider impls, POST /message/stream SSE route, inline frontend SSE reader, browser-direct Dexie streaming, incremental SessionChat rendering
20 v1.7.0 QR-Code Camera Scan for Sync Pairing — html5-qrcode dep, QRScanner + QRScannerModal + QRImageUpload, viewfinder overlay with reduced-motion, haptic feedback, file-upload fallback. BL-04 closed.
21 v1.8.0 Sync Gaps: step_evaluations + session_notes + i18n + imported_conversations + imported_messages — Dexie schema v3+v4+v5 aligning with backend Alembic 0006+0007, 62 sync.* keys to YAML catalogs, full 16-table sync surface audit, PluginForge ^0.7.0→^0.8.0. BL-05 + BL-06 closed.
22 v1.9.0 Global Subjects and Tags — 4 new tables (subjects, tags, project_subjects, project_tags) join the sync surface (20 tables); pre-seeded subjects.yaml with 80+ nodes across 8 categories; SubjectBrowser + TagManager + ProjectTaxonomy + DashboardFilterBar components; Onboarding subject suggester + tag input. PluginForge ^0.8.0→^0.9.0 (hard-filter transition active). BL-07 closed.
23 v1.10.0 Swipe Gestures on Assessment + Session — useSwipe hook (horizontal-only, velocity-gated, reduced-motion-aware), Assessment swipe+keyboard navigation with one-shot hint, CycleProgress swipe-to-peek overlay, TopicNode iOS-style swipe-to-reveal actions, Settings → Interface gesture toggle. BL-08 closed.
24 v1.11.0 Provider Model Picker via API — model_discovery service (Anthropic + OpenAI + Gemini /v1/models with 1-hour cache + chat-only filtering), GET /settings/{id}/available-models endpoint, browser-direct model-discovery for Dexie mode (sessionStorage cache), Settings ModelPicker dropdown component with Recommended/All grouping + offline fallback, model validation on session start (warn + fallback to default when override not in cached list), model name + context-window in session header. BL-09 closed.
25 v1.12.0 Backup Compare UI — client-side lib/backup-diff.ts engine (UUID matching, chunked async processing, append-only vs mutable split, high-volume tables flagged for summary rendering), shared BackupCompare React component with sortable/filterable per-table cards + field-level diff tables, Settings Compare Backups picker (file/file or file/current), pre-restore diff preview replacing the v0.7.0 row-count table (Restore button gains "(N added, M updated)" dynamic label), Dexie auto-backup "Compare as A/B" controls feeding the same surface, Markdown report exporter (zero-delta tables omitted, high-volume tables summarised, field-level old → new lines), 35 new i18n keys (DE+EN translated, 6 EN-passthrough). BL-10 closed.
26 v1.13.0 PT/TR/JA Native Translations — full Brazilian Portuguese, Turkish, and Japanese translations replacing the EN-passthrough placeholders. test_i18n_translation_audit.py pins no-passthrough heuristic + ≥90% divergence from EN. BL-11 closed.
27 v1.14.0 Rich-Text Notes with TipTap — session-rating notes, curriculum descriptions and lesson content graduate from <textarea> to TipTap StarterKit + 15 extensions (bold/italic/underline/strike, H1-H3, bullet+ordered+task lists, blockquote, inline code, code blocks with lowlight syntax highlighting in 11 languages, links, character count). BL-12 closed.
28 v1.15.0 E2E Playwright Expansion — 10 new smoke specs land alongside the existing 6 (multi-cycle auto-loop, conversation import + analysis, backup roundtrip, sync pairing UI, MD export, subjects/tags filter, rich-text rating, 3-chunk SSE streaming, model picker, no-key empty state). 16 spec files total at v1.15.0. BL-13 closed.
29 v1.16.0 Gamification (XP, Badges, Streaks) — UserXP singleton with exponential level curve, 24 badges across 5 categories seeded from YAML, UserStreak with freeze stockpile + weekend mode + GitHub-style heatmap. Dashboard widgets + Settings → Gamification toggles. BL-18 closed.
30 v1.17.0 Anki Deck Export — client-side .apkg builder (sql.js + JSZip lazy-loaded), AI-extracted AnkiCardSuggestion candidates from sessions + conversations, /anki page with accept / reject / inline-edit + filters, byte-compatible vocabulary extraction transform shared by backend and frontend. BL-21 closed.
31 v1.18.0 Voice (TTS + STT + Pronunciation Practice) — Web Speech API integration; SpeechButton on AI replies + Assessment results, MicButton on Session input with interim transcripts; new pronunciation plugin (phrase generator + judge prompt, Languages-subject-gated eligibility). BL-20 closed.
32 v1.19.0 NotebookLM Integration Patterns — new notebooklm plugin: StudyQuestion AI-generated active-recall questions, one-shot study guide generator (~30K chars context), client-side NotebookLM-optimized ZIP export (summary + vocabulary + rules + errors + flashcards + sessions). BL-22 closed.
33 v1.19.1-v1.19.2 Phase 33 import-pipeline audit — dedicated Claude.ai per-conversation Markdown parser (claude_md_parser.ts) closes BL-25/26/28 (full timestamp extraction, role boundary preservation, source attribution). Vocabulary extraction in analyzer closes BL-27 (SYSTEM_PROMPT + parseAnalysisResponse extended; chunked merge dedup). metadata.created_at ISO normalisation closes BL-29 (US + DE locale support).
34 v1.20.0 secrets.yaml API-Key Storage for Desktop Mode — three-layer config chain (env > ~/.config/adaptive_learner/secrets.yaml > Fernet-encrypted DB column) for AI provider keys + default-model overrides. New ApiKeySource enum on UserSettingsOut (env / secrets_yaml / settings / none) drives the per-provider source badge + Save-button gating in the Settings UI. Auto-generated commented template with chmod 0600 on first run; permission audit on subsequent runs. _ENV_SECRET_OVERRIDES populated with 6 entries (3 providers × {api_key, default_model}). All 6 plugin/router callers migrated from get_decrypted_api_key to resolve_api_key. i18n in all 8 catalogs.
35 v1.21.0 Comprehensive Documentation Update — documentation-only release. 10 sub-phases per docs/audits/docs-staleness-2026-05-22.md: CLAUDE.md rewrite (46K → <10K), both READMEs rewritten (v0.8.1 → v1.20.0), ROADMAP table extended through Phase 34, CONCEPT post-v1.5.0 milestones, project-reference rebuilt against shipped architecture, MkDocs help pages version-refreshed. 137 stale version refs closed.
36 v1.21.1 Import + Analysis Bugfixes — five regressions surfaced by the v1.21.0 manual smoke against real Claude.ai per-conversation Markdown: analysis language mismatch, silent re-import duplication, curriculum / session CTA always creating duplicates instead of resuming, Anki extraction silently failing. New columns on imported_conversations + curriculums + learning_sessions, paired Dexie schema bumps.
37 v1.22.0 Error-Toast + GitHub Issue Report Framework — 5xx error toasts gain a "Report Issue" button opening a Radix dialog with a pre-filled GitHub issue URL (error + optional env info + opt-in sanitised action history). Exception-handler chain extended in DEBUG mode (stacktrace + endpoint + method embedded in response body); new in-memory action recorder on the frontend.
38 v1.23.0 In-App Contextual Help System — 22 glossary concepts (curriculum, learning project, learning profile, learning session, the six learning methods, the seven cycle steps, five app features) surfaced via dotted-underline HelpTooltip + slide-over HelpDrawer with full Markdown articles. Settings > Help browser + search. v1.23.1 + v1.23.2 followed with tooltip mounts on all post-onboarding routes, Recharts width-warning fix, stronger dotted-underline visibility, icon-button a11y sweep, and a button-tooltip user preference toggle.
39 v1.24.0 WCAG 2.1 Level AA Accessibility Audit + Remediation — full audit + atomic fixes for the two real AA violations surfaced; new dev dependency, regression tests pin each finding. 380-line audit at docs/audits/wcag-2026-05-23.md.
40 v1.24.1 Release-Automation Hardening — Bibliogon's 4-Tier model adopted: package-lock propagation, open-set version-literal discovery, advisory WARN wiring, aggregate make release-* targets, 4-Tier architecture documentation, plugin refactor unblocking the verify chain. No user-visible runtime changes.
41 v1.25.0 Identity Persistence + Browser-Wipe Recovery + Danger Zone — ~/.config/adaptive_learner/identity.yaml writes on user / project / language changes. Frontend Landing flow recovers from disk (API mode) or IndexedDB (Dexie mode) after a localStorage wipe. Settings > About > Identity status panel surfaces the resolved identity. Settings > Danger Zone ships a three-step typed-confirm reset: POST /api/reset truncates every table and scrubs ai.* from secrets.yaml while preserving the Fernet secret_key. 13 new i18n keys across 8 catalogs. Two new backend endpoints. Six atomic commits.
42 v1.26.0 Git-Backed Learning Repository (BL-30) — new learning-repo plugin emits per-project Markdown artefacts (README.md, LEARNING_STATS.md, CHEATSHEET.md, ROADMAP.md + numbered topic folders) from existing DB state via three endpoints (render JSON, export-zip, persist-to-git). Opt-in git init + commit-on-render with semantic subject Cycle N — U X/10, T Y/10; tags cycle-{N}-mastered on Article-1 § 8 exit threshold (Understanding ≥ 9/10 AND Transfer ≥ 8/10 stable over 2 cycles). New core endpoint /api/plugin-settings/{plugin_name} (GET + PATCH) closes the architecture-rule gap on UI-editable plugin settings. New SessionNote.kind column ("note" / "meta_learning") is the Article-3 "Meta-Learning Insight" slot. Frontend ships /projects/:projectId/learning-repo page + Dashboard widget + Settings panel. i18n repo.* block in all 8 catalogs (DE+EN native, 6 AI-translated). Seven atomic commits per the BL-30 plan; implements Asterios Raptis' Von Theorie zur Praxis Article 3 pattern.**
43 v1.27.0 Content-Loader Plugin (2026-05-26) — /content downloads structured lesson sets from public GitHub repos and caches them locally (filesystem + IndexedDB); Pydantic lesson schema v1.0; Dexie v16 + Set Browser. EXP-002/EXP-005 foundation, the first no-API-key path.
44 v1.28.0 Lesson Viewer + Matching + Picture-Choice (2026-05-26) — new /lesson route + the first two exercise renderers; LessonProgress model + Alembic 0018 + Dexie v17. EXP-002 Sprint 3 A-D.
45 v1.29.0 Free-Text + Word-Tiles Exercises (2026-05-27) — the viewer now ships every exercise type the v1.0 schema knows; frontend-only. EXP-002 Sprint 3 E-F.
46A-D v1.30.0 Element-Level Error Tracking + SRS Review (2026-05-27) — per-element ElementError, mastery at 3-consecutive-correct, SRS scheduler (1d/3d/7d), /review/:setId + Dashboard widget; Alembic 0019 + Dexie v18. EXP-007/P-129.
46E-G v1.31.0 Gamification Integration + LessonProgress↔LearningSession Unification (2026-05-27) — kind="content" pseudo-project, lesson-XP rule, 4 new badges incl. review_master.
49 v1.32.0 Learning-Repo Storage Abstraction (2026-05-27) — ports the ~957-LOC Python renderer to TypeScript so the Learning Repository works in Dexie mode; 2 new IStorageService namespaces; Dexie v19. Closes the v1.26.1 server-only gap. (Phases 47-48 were never assigned.)
50 v1.33.0 Dexie-Mode Lesson-XP Parity + i18n Repo-Key Fix (2026-05-28) — Dexie-mode users earn lesson-XP/badges byte-identical to API mode (cross-language parity goldens); fixes 23 unresolved repo.* i18n keys; .claude/rules Bibliogon-residue cleanup.
51 v1.34.0 Content Expansion: French A1 + Spanish A1 + GH-Pages bundling (2026-05-28) — 15 A1 lessons bundled into the static build so first-time visitors see content offline; authoring guide EN+DE.
52 v1.35.0 Token-Diff + Cloze Exercise (2026-05-28) — token-level feedback on every surface; a 5th exercise type (Cloze, auto-generated from the learner's mistakes); end-of-lesson correction round; schema 1.0→1.1. EXP-007.
53 v1.36.0 Adaptive Lesson Generation (2026-05-28) — rule-based, deterministic, client-side: reads per-element error history, classifies weaknesses, synthesises a personalised lesson the existing viewer renders unmodified; /adaptive-lesson/:setId + Dashboard FocusAreasCard. EXP-013.
54 v1.37.0 Asset Fetching for Picture-Choice (2026-05-28) — lesson sets ship binary images via a manifest-declared assets/ dir; deterministic placeholder SVGs + text-only fallback; works in API / Dexie / GH-Pages.
55 v1.38.0 Praise + Celebration (2026-05-29) — earned, scaled micro-feedback: 8-lang praise catalogs, shared AnswerCelebration, milestone overlays, CSS-only confetti, Feedback-Intensity + Sounds settings, full reduced-motion path. EXP-008.
56 v1.39.0 Daily Missions (2026-05-29) — up to 3 deterministic, adaptive goals/day on the Dashboard, evaluated against existing data; new missions plugin (13th) + UserMission + Alembic 0021 + Dexie v20. EXP-010.
57 v1.40.0 Badge Tiers + Badge Gallery (2026-05-29) — all 28 badges gain bronze/silver/gold (static siblings + dynamic high-water-mark); tier-coloured SVG generator; BadgeGallery drawer; Alembic 0022 + Dexie v21.
58 v1.41.0 UX/UI Audit + Multi-Theme System (2026-05-29) — semantic CSS-variable token set across 6 themes (light/dark/ocean/forest/high-contrast/sepia) + auto; ThemePicker; Recharts recolouring; WCAG re-audit; Dexie v21 upgrade bugfix.
59 v1.42.0 Analysis-to-Lesson Converter + Community Sharing (2026-05-29) — turns a chat-import analysis into a replayable offline lesson; backend-free export/import/share loop; "My Lessons" in /content; saveUserSet/deleteSet namespace.
v1.42.1 Patch (2026-05-29) — fixes the Save-as-Offline-Lesson 422 in API mode; Settings tab reorg (Help/About split, identity moved to Data).
v1.43.0 Content Repo Online (2026-05-30) — the official astrapi69/adaptive-learner-content repo exists + is validated end-to-end; same-id sets deduped across bundle + GitHub (higher version wins); Bundled/GitHub source badge; Share re-enabled; docs-verification system gates releases + CI.
60 v1.44.0 Content Validation Pipeline + Language-Pair Tree (2026-05-30) — content sets declare a language PAIR (target + source); sets/{source}/{target-level}/ tree; schema 1.1→1.2 + Dexie v22; client-side validator gates Share + opt-in AI review; content-repo CI.
61 v1.45.0 Quality Sweep (2026-05-30) — audit-first, then fixes: security P2 (read_lesson guard), coverage (missions 14→41, ApiStorage 100%, config_overlay 90%, 3 interactive Dexie E2E journeys), architecture + performance fixes, dead-code removal, tree-placement + duplicate detection in the share pipeline, minor/patch deps.
v1.45.1 Patch / docs-sync (2026-05-30) — this phase-history table refreshed through Phase 61; cross-language badge-catalog parity golden (tests/fixtures/badge-catalog/); BL-23 + BL-24 archived as already-shipped. No runtime change.
62 v1.46.0 EXP-018 Exercise Direction (Receptive vs Productive) (2026-05-30) — every exercise carries an optional direction (schema stays 1.2); SRS tracks mastery PER direction (Alembic 0023 + Dexie v23 re-key; "fully mastered" needs both); direction-aware renderers (Matching column flip + eye/pencil instruction hint; cloze exempt) via resolveDirectionDisplay; review queue weights productive 1.2x; adaptive direction_strategy (auto/receptive_first/productive_focus/balanced) + Settings control + Dashboard mastery split; pilot lessons progressive direction. Folds in a P0 analysis-to-lesson Save fix (language pair + CEFR + title_native + shareable-gate) and the lesson-content migration out of the app repo into astrapi69/adaptive-learner-content (build sources it via ADAPTIVE_LEARNER_CONTENT_DIR + GH-Pages content-repo checkout).
63 v1.47.0 Lesson Flow Control (2026-06-01) — lessons pause/abandon/resume (LessonProgress gains paused/abandoned states + timestamps, Alembic + Dexie); back-button exit dialog + resume-or-start-over dialog; 30s autosave + auto-resume on tab return; Dashboard PausedLessonsCard; paused-lesson retention sweep + Settings control; lesson splitter for oversized imports (configurable 5-20 exercises, TS+Python cross-language parity test). Folds in Word Tiles touch-capable drag-to-reorder (@dnd-kit), mobile horizontal-scroll fixes (3 overflow sources + 320/375/414 regression spec), lower-friction community sharing (GH web PR editor, informational validator), and a backend CSP/security-header middleware (Phase 61 audit P3).
64 v1.48.0 Community Sharing UX + Smart Lesson Organization (2026-06-01) — a four-step share wizard (ShareWizard): smart placement-engine.ts (tree path + auto-numbered {nn}-{slug}.json + new-set detection + content auto-detection), lesson-level duplicate/variation/supplement detection (extends duplicate-detection.ts), optional author credit (contributed_by/contributed_at, remembered in localStorage, viewer credit line + GitHub-issue author), local contribution history (contribution-history.ts, "My Contributions" + Community Contributor at 5 shares), and gap-detector.ts Missing-Lessons suggestions. Content schema 1.2 -> 1.3 (additive variation_of/variation_note/contributed_by/contributed_at). Merges Smart Next-Step Suggestions after lesson completion (useNextStepSuggestions + themed card: adaptive / review / set-complete / resume awareness). Adds the EXP-021 Lesson-Creator exploration. Full i18n in 8 languages.
65 v1.49.0 API-key UX + Community Sharing via PR + Analysis loading (2026-06-01) — Settings > AI: instant API-key format validation (Anthropic sk-ant- ≥ 90 / OpenAI sk- ≥ 40 / Gemini AI ≥ 30, green/red + checkmark, Save gated), a live Test button (POST /api/settings/{user}/test-api-key server-mode + browser-direct in Dexie; ok / invalid / rate_limit / network), and a rollback cache (new ApiKeyBackup model + Alembic 0025 + Dexie v24 + sync surface: Save auto-tests first; a working key is saved + remembered as last-known-good, a failing key offers Keep old / Save anyway / Restore). secret.key is now the persistent Fernet key source (API keys survive restarts) and secrets.yaml-sourced keys are UI-editable (path corrected to ~/.config/adaptive_learner/secrets.yaml). Community sharing opens a GitHub PULL REQUEST (was an issue): lesson JSON committed at sets/{src}/{tgt-level}/lessons/{nn}-{slug}.json, content-repo CI validates; small lessons pre-fill the create-file editor, large ones download + open the upload page; no token required. Chat-import Analyze gains a loading indicator (phased progress + estimated time + spinner + real Cancel via AbortSignal + friendly inline error + smooth results reveal). Voice dictation shows friendly mic errors (no-device / offline / permission) instead of raw Web Speech codes. 30 SQLAlchemy models (added ApiKeyBackup). Both storage modes; full i18n in 8 langs.

Annotated tags + GitHub Releases ship same-day; see git tag for the full list. Per-release notes live in changelog/releases/.


Abgeschlossen

Auf EXP-Ebene erledigt (Release-Detail in der Phase-History-Tabelle oben + changelog/releases/; vollstaendiger Task-Audit: journal/exploration-status-audit.md):

  • EXP-001 / 002 / 003 — Matching + Picture-Choice / Content-Repository / Lektionsformat (Phase 1, ab v1.27.0).
  • EXP-005 — Offline-Modus + Domaenen (v1.27.0+).
  • EXP-006 — Freitext + Word Tiles (v1.29.0).
  • EXP-007 — Fehlergranulare Wiederholung + Cloze (v1.30.0/v1.35.0).
  • EXP-008 — Lob + Celebration (v1.38.0).
  • EXP-010 — Missionen + Plaketten (v1.39.0/v1.40.0).
  • EXP-016 / 017 — Test-Strategie + manuelle Tests (Querschnitt, laufend).
  • EXP-018 — Uebungsrichtung rezeptiv/produktiv (v1.46.0).
  • EXP-020 — Lektions-Flusssteuerung (v1.47.0).
  • EXP-026 — User-Lektionen im Content-Baum, UGC-01..07 (#97, v1.80.0).
  • EXP-028 — User-Event-Recording, EVT-01..05 (#566, v1.81.0).
  • EXP-029 — Medien-Integration mit Gegenseitigkeits-Prinzip, MED-01..07 (#678/#680/#684/#685/#688, v1.86.0); MED-10 Partner-Onboarding-Doku offen.

Teilweise erledigt (Rest in Aktueller Fokus / Naechste Phase): EXP-013 (regelbasiert; Stufe 3 KI offen), EXP-021 (MVP; Folge-Ausbau offen), EXP-022 (UC1; UC2/UC4 offen), EXP-023 (A/B/C-slice; Phase-C-Rest offen), EXP-024 (Phase 1; Phase 2/3 offen), EXP-025 (AUTH-01/02; AUTH-03..09 offen), EXP-027 (Hindi-UI + Picker-Skalierung + Hindi-Content; weitere Sprachen + RTL offen), EXP-033 (AIV-01..05 + AIV-08..11 ausgeliefert; AIV-06/07/12 offen).

Kuerzlich geschlossene Bugs: #656 (Complexity-Gate FreeText/WordTiles baselined, v1.85.0); #675 (Review-Badge stieg nach einer Session nicht ab — behoben, Closes #673, v1.86.0).


Detail: abgeschlossene Kampagnen & granulare offene Posten

Die kuratierte Priorisierung steht oben (Aktueller Fokus / Naechste Phase / Zukunft). Dieser Abschnitt bewahrt die ausfuehrlichen Beschreibungen der abgeschlossenen Kampagnen und der granularen offenen Posten (Task-IDs unveraendert; daily-planning-Sicht in backlog.md).

Completed campaigns (v1.77.0 – v1.79.0)

The architecture / hygiene thread that ran across v1.77.0–v1.79.0 is finished:

  • God-file decomposition — COMPLETE. Backend + frontend god-files split one at a time under the Phase 2 hard ratchet; both .complexity-baseline and .filesize-baseline are now EMPTY (the 1156-line session routes.py split #412 was the last cohesion-baseline entry; validateGeneratedLesson #497 was the last complexity offender).
  • Dexie read-modify-write data-integrity remediation — COMPLETE. Three phases (#390 → #395/#398/#402): atomic increments, create-race ensure-helpers + unique indexes, full-replace updates wrapped in transactions.
  • Complexity burn-down — COMPLETE. Frontend offenders 34→0 (#498–#504); radon hard gate Phase 2 live (#494/#495: blocks cc > 20, warns > 15).
  • 3 CI watchers — LIVE. Cohesion file-size guard (#371, hard gate at 1000 lines), security-scan (#378, pip-audit + npm audit + bandit), complexity (#400, radon + eslint).
  • plugin-tests CI job — LIVE (#471): runs the full 1018-test plugin suite per PR.
  • Reusability policy + first shared/ primitives (#474/#477): ListRow, ProgressBar, LessonStepNav, XpBadge, IconBadge.
  • EXP-025 (author-provided lesson sets) — PARTIAL. AUTH-01 (book-metadata schema + validator, #529) + AUTH-02 (book-companion rendering, #531) SHIPPED; AUTH-03+ (cross-repo author publishing) is deferred — needs shared-backend / cross-repo infrastructure.
  • EXP-026 (fold user lessons into the content tree) — COMPLETE. UGC-01..07 all SHIPPED (#97).

v1.80.0 — next up

The architecture thread is done; the next minor returns to user-facing features and opportunistic hygiene:

  • #508 — User profile picture — SHIPPED on develop (#535). Avatar in nav + About + Dashboard (InitialsAvatar + AvatarUpload shared primitives), both storage modes. Lands in the v1.80.0 release.
  • BACKEND-RADON-REMAINDER-01 (P3, opportunistic). Burn down any new backend module above the radon warn band (cc > 15) as it surfaces; the baseline is empty, so this is steady-state hygiene under the live gate.
  • AUTH-03+ (DEFERRED). Cross-repo author publishing — blocked on shared-backend infrastructure (see backlog Blocked / Upstream Wait).

Known longer-horizon follow-ups (no committed phase):

  • Per-topic-folder triplet (concepts.md / tasks.md / solutions.md) for the Learning Repository — Article 3's "Drei-Datei-Prinzip"; folders currently ship only the stub README. Trigger: a user wants the deeper structure.
  • Method-experiment git branches + GitHub-push automation for learning-repo. Trigger: user demand for method A/B comparison or a "share my learning repo publicly" flow.
  • EXP-013 Stufe 3 — AI-augmented adaptive generation. The Phase 53 rule-based pipeline is sufficient for the headline promise; the AI-augmented layer (P-150..P-152) was explicitly deferred.

Other deferred work:

  • BL-14..17 — SaaS-tier items. Multi-user, JWT auth, Postgres migration, Stripe / premium plugins. Deferred until the single-user-per-browser model hits an obstacle.

BL-03 (pluginforge-app-template repo) shipped externally ahead of Phase 42 — astrapi69/pluginforge-app-template exists at tag v0.1.0 (created 2026-05-17). PluginForge ecosystem triple is validated.


P3 — Lower value or large effort

  • PT/TR/JA native-speaker review. Phase 26 / v1.13.0 shipped AI-translated PT/TR/JA. Native review of the catalogs (~220 keys + 60 assessment strings per language) remains an open follow-up; opportunistic when a native speaker reports awkward phrasings.
  • iOS-Safari apple-mobile-web-app-* meta tags. Manifest is standard-compliant; iOS PWA install works but the iOS-specific status-bar / title meta tags aren't wired. Add if iOS users report degraded standalone UX.
  • Per-route SW cache TTL overrides. Today everything under /api/ is 24h LRU. Defer until usage pattern shows real need.
  • "Force refresh" + "Opt out of offline cache" in Settings UI. Power-user knobs for the SW cache.
  • ANALYSIS-TARGET-DETECT-01. Content-based target-language detection for analysis-to-lesson. Today the target is guessed from analysis.topic only; infer it from the actual card-content language (e.g. card backs / vocabulary) so a German-about-German grammar chat is recognised as a domain (source == target) set rather than a language pair. Follow-up to the v1.52.x source-default fix, which covers the 90% case (source = app language).
  • ANALYSIS-DOMAIN-SUGGEST-01. When analysis-to-lesson detection yields source == target (e.g. German grammar for German speakers), auto-suggest a non-language domain ("grammar" / "education") in the save modal. The content validator already permits source == target for domain != "language".
  • PLACEMENT-LANG-WARN-01. In the placement / save flow, warn when the card content language doesn't match the chosen source_language (e.g. card backs are German but source is set to English): "Die Kartenrueckseiten sind auf Deutsch, aber die Ausgangssprache ist Englisch. Stimmt das?" Advisory only, never a hard block.
  • EXP-029 — Media resources with reciprocity principle. Companion media (YouTube / podcast / article / book / course / website) per domain via a media.yaml analogous to books.yaml (#141), both storage modes, no server. The curation filter is reciprocity, not price: free media + books are always allowed; courses + websites only with proven reciprocity (backlink / connected content-repo / cooperation); pure advertising is out regardless of price. See docs/explorations/EXP-029-media-reciprocity.md. Tasks (all additive, both storage modes):
    • MED-01media.yaml schema + MediaResource type + loader (media-resources.ts analogous to book-recommendations.ts).
    • MED-02 — parser validation with the reciprocity gate: course / website with partnership !== true are dropped (fail closed); url http(s)-validated.
    • MED-03 — Content Browser rendering: per-domain media section, type icon per MediaType, empty section hidden.
    • MED-04 — free/paid badge (free field → discreet token-coloured "Gratis" / "Kurs" badge) so the learner knows before clicking.
    • MED-05 — optional resources[] at set/lesson level (additive content-schema bump, like example_url).
    • MED-06 — i18n: media-type labels + badges + section titles in 8 languages (media.*).
    • MED-10Partner onboarding documentation (the actual lever): a guide for language teachers / schools — how to create a content repo (EXP-023/025), how to link a course (media.yaml / resources[]), how to evidence reciprocity. Business-development artefact, no code, parallelisable with MED-01..06.

P4 — Future / SaaS

  • BL-14 — PostgreSQL migration
  • BL-15 — JWT authentication
  • BL-16 — Multi-user support (requires BL-14 + BL-15)
  • BL-17 — Stripe integration (requires BL-14 + BL-15 + BL-16)

P5 — Speculative

  • BL-19 — Social features (share progress, study groups) (requires multi-user; see P4).
  • Method-experiment branching for the Learning Repository. Once BL-30 (Phase 42 candidate) ships its synchronous render path, the optional git-on-disk surface could grow short-lived branches per learning method to support A/B experiments. Trigger: a user reports actually wanting to compare two methods on the same topic.
  • Push notifications. SW is registered, foundation is there; notification opt-in + delivery + a "next session due" trigger would be its own phase.
  • Native iOS / Android wrappers. Capacitor / Tauri Mobile. Lower priority than the PWA route since installable PWA covers most use cases.

BL-18 (Gamification), BL-20 (Voice), BL-21 (Anki), BL-22 (NotebookLM) all shipped — see the Phase history table above for the release each landed in.


Blocked / Upstream Wait

Items waiting on an external trigger (npm publish, upstream release, paid-API access). NOT P0 even when otherwise valuable.

  • DEP-TS7 — TypeScript 6 → 7 (native compiler). typescript@7.0.2 is published and tsc --noEmit passes on our code under TS 7, but the ESLint gate crashes: typescript-eslint's typescript-estree reads a typescript internal (ScriptKind.Cjs) that TS 7's rewritten native compiler no longer exposes (TypeError: Cannot read properties of undefined (reading 'Cjs')). No released typescript-eslint supports TS 7latest (8.63.0), canary (8.63.1-alpha.8) and @typescript-eslint/parser all peer-cap typescript at >=4.8.4 <6.1.0; there is no v9 / next tag. Forcing it would mean disabling type-aware ESLint (the --max-warnings 0 gate exists to prevent exactly that) — not acceptable. Trigger: a typescript-eslint release whose typescript peer allows >=7.0. Re-check with npm view typescript-eslint@latest peerDependencies + npm view typescript-eslint dist-tags. Then bump typescript + typescript-eslint in lockstep in a dedicated migration PR (tsc + eslint + full Vitest; expect the usual TS-major lib / @types/node cascade). Tracked: issue #1507; supersedes the closed Dependabot bump #1503. (Verified 2026-07-09.)

Open backlog

See backlog.md for the granular daily-planning view.

Archive: docs/roadmap-archive/ (not yet populated; phase completions are recorded in changelog/releases/v*.md).