Possessive levels showed the stem where every other level shows the gender

On the possessive levels the second line read "unser- (our)" — the stem —
while articles, contractions and adjectives all put the noun and its gender
there. The gender was still available, but demoted into the third line as a
tail on the case hint, so the thing you actually need was the least visible
thing on screen.

The stem was telling you nothing either way: possessive answer options are
generated to share the question's stem, so all four already start with
unser-/ihr-/euer-. It was spending the most prominent hint slot on the one
fact the options could not hide.

Articles, contractions, possessives and adjectives now render the same
second line — noun, gender-coloured article, English gloss — under the same
`gender` toggle, so hiding it on one level hides it on all of them. The
duplicate gender tail is gone from the case line, and the possessive-only
hint and its toggle are removed.

Pronoun questions keep their own hint. They have no noun at all, and which
pronoun is meant is genuinely not recoverable from the sentence, so that is
the right hint for them rather than an inconsistency.

Wechsel im Kontext keeps its preposition hint for the same reason: the
answer there is a case, not a declined form, so the noun's gender is not
part of the question and the preposition's English gloss is what helps.

142 tests pass.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Uza6mhTpAvSwMQuFc4Cz8
This commit is contained in:
2026-10-02 07:04:51 +00:00
co-authored by Claude Opus 5
parent e448045e52
commit 74054338f4
+13 -13
View File
@@ -578,30 +578,30 @@ export default function App() {
{q.translation} {q.translation}
</Hideable> </Hideable>
{(q.type === 'article' || q.type === 'chunk') ? ( {q.type === 'pronoun' ? (
<Hideable hidden={hintHidden('gender')} onToggle={()=>toggleHint('gender')} label="gender" style={S.keyInfo}> // Pronoun questions have no noun at all — which pronoun is meant is
<span style={{color: GENDER_C[q.noun.g], fontWeight:700}}>{DEF[q.noun.g].nominative}</span> // the thing you cannot work out from the sentence, so that is the hint.
{' '}{q.noun.w}
<span style={S.keyInfoMute}> ({q.noun.en})</span>
</Hideable>
) : q.type === 'poss' ? (
<Hideable hidden={hintHidden('possHint')} onToggle={()=>toggleHint('possHint')} label="possessive" style={S.keyInfo}>
<span style={{fontWeight:700}}>{q.stem}-</span>
<span style={S.keyInfoMute}> ({q.possMeaning})</span>
</Hideable>
) : (
<Hideable hidden={hintHidden('pronounHint')} onToggle={()=>toggleHint('pronounHint')} label="pronoun" style={S.keyInfo}> <Hideable hidden={hintHidden('pronounHint')} onToggle={()=>toggleHint('pronounHint')} label="pronoun" style={S.keyInfo}>
<span style={{fontWeight:700}}>{q.pron.nom}</span> <span style={{fontWeight:700}}>{q.pron.nom}</span>
<span style={S.keyInfoMute}> ({q.pron.en})</span> <span style={S.keyInfoMute}> ({q.pron.en})</span>
<span style={S.keyInfoMute}> · {q.pron.tag}</span> <span style={S.keyInfoMute}> · {q.pron.tag}</span>
</Hideable> </Hideable>
) : (
// Articles, contractions, possessives and adjectives all hinge on the
// noun's gender, so they all show the same second line under the same
// toggle. The possessive stem used to sit here, but every answer option
// shares it, so it told you nothing while hiding what you needed.
<Hideable hidden={hintHidden('gender')} onToggle={()=>toggleHint('gender')} label="gender" style={S.keyInfo}>
<span style={{color: GENDER_C[q.noun.g], fontWeight:700}}>{DEF[q.noun.g].nominative}</span>
{' '}{q.noun.w}
<span style={S.keyInfoMute}> ({q.noun.en})</span>
</Hideable>
)} )}
<Hideable hidden={hintHidden('caseInfo')} onToggle={()=>toggleHint('caseInfo')} label="case" style={S.secondaryContext}> <Hideable hidden={hintHidden('caseInfo')} onToggle={()=>toggleHint('caseInfo')} label="case" style={S.secondaryContext}>
<span style={{color: CASE_C[q.cas], fontWeight:600}}>{CL[q.cas]}</span> <span style={{color: CASE_C[q.cas], fontWeight:600}}>{CL[q.cas]}</span>
{q.prepKey && <> · {q.prepKey} ({PREPS[q.prepKey].en})</>} {q.prepKey && <> · {q.prepKey} ({PREPS[q.prepKey].en})</>}
{q.tw !== null && q.tw !== undefined && <> · {q.tw ? '→ motion' : '● location'}</>} {q.tw !== null && q.tw !== undefined && <> · {q.tw ? '→ motion' : '● location'}</>}
{q.type === 'poss' && <> · <span style={{color:GENDER_C[q.noun.g]}}>{DEF[q.noun.g].nominative}</span> {q.noun.w}</>}
</Hideable> </Hideable>
{nounForm(q.noun, q.cas) !== q.noun.w && ( {nounForm(q.noun, q.cas) !== q.noun.w && (