164a0a1bb7
VerbListView used a local @State selectedLevel that reset whenever the user left the tab and was disconnected from Practice's verb sourcing. PracticeSessionService reads UserProgress.selectedVerbLevels; the Verbs tab now does the same. Level menu becomes multi-select (toggle each level in/out, mirrors SettingsView's pattern). "All Levels" enables every level; tapping again on a level removes it from the active set. Picking "All" while everything is already on is a no-op. Filter logic loops over the active level set and admits a verb if any active level matches via VerbLevelGroup.matches. Active-filter chip shows "Basic", "Elementary", etc. when one level is on, or "N levels" when multiple are on. Tapping the chip resets to all-levels. Empty set is treated as "no filter applied" on the Verbs list, but setAllLevels(enabled: false) falls back to [.basic] rather than an empty set — Practice treats empty as "no verbs", so we guard against leaving the user with an empty pool. Practice already reads UserProgress.selectedVerbLevels, so changes made in the Verbs tab now flow into Practice automatically. No Practice-side code changes needed. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>