Add the Adjectives section, and explain why the noun itself changes
Two gaps, both visible from one screenshot of the Genitiv level. 1. Adjective endings were half-present and entirely untested. STRONG and WEAK existed in engine.js with correct data, but only as the S/W columns of a reference chart — nothing generated them, nothing tested them, and the MIXED table (the one "in seinem eigenen Kontext" actually needs) did not exist at all. There was not a single adjective in the codebase. 2. Nothing explained why "Regen" becomes "Regens" after trotz. New Adjectives tab, six lessons plus Daily Practice: Schwach after der/diese/jede — only -e and -en Gemischt after ein/kein/mein — weak plus three exceptions Stark no determiner — the adjective carries the case Welche Tabelle? der-word, ein-word or nothing? (the meta-skill) Nach Präposition the full chain: preposition -> case -> table Alles gemischt all three tables, including Genitiv The three tables are built on one idea: the case has to be signalled once in the noun phrase, and whoever can show it does. MIXED is therefore not hand-typed — it is DERIVED from POSS_ENDINGS as "weak, except in the three slots where the ein-word has no ending of its own, where it borrows the strong one". A test asserts that relationship as well as all 48 cells, so the rule cannot silently rot. Two info panels: - "Which ending table?" — the one-signal idea, the three tables, plus the two traps: strong genitive masc/neut is -en not -es (the noun already carries the -(e)s), and predicate adjectives take no ending at all. - "Why Regens?" — appears wherever the case changes the noun itself: the -es/-s split, that feminines and plurals never change, the dative plural -n, and a note on the N-declension nouns Beug does not have yet. Notable decisions: - Nominative is now tested, for adjectives only. der gute Mann vs ein guter Mann is the clearest illustration of the whole weak/mixed split and it exists only in the nominative, so the app-wide "no nominative" rule is explicitly scoped to non-adjective levels rather than quietly dropped. - The tab bar measured 369px of content in a 350px bar with four tabs, so a fifth could not fit. The row now scrolls instead of squeezing labels. - Adjectives are gated like Possessives and Pronouns. The corpus caught its keep again. Adjective sentences are enumerated into corpus.txt keyed on the semantic pairing (frame x adjective x noun), which keeps it at ~2000 lines instead of exploding over every determiner and case. Reading it surfaced, and this commit fixes: "I live in the old lake" (places split into buildings/settlements/landscape), "I play with the blue sofa", "I like the bad kitchen" (frames that assert liking now exclude negative adjectives), "I buy the good time" and "I cook with the good money" (pools narrowed to what you can buy and cook with), grosser/kleiner of a person rendering as "big/small" rather than "tall/short", and "in dem alten Hotel" failing to fuse into "im alten Hotel". 130 tests pass; 12000 generated questions across all 30 levels. Known gap, stated in the rule panel: Beug has no plural nouns, so the plural column of all three tables is shown for reference but not drilled. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017Uza6mhTpAvSwMQuFc4Cz8
This commit is contained in: