diff --git a/CLAUDE.md b/CLAUDE.md index b04ecd1..74751ab 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -110,7 +110,13 @@ python test_extract.py test_extract_docx.py test_genotype.py test_merge_resol - **Box-Farbe im Stammbaum-xlsx = Geschlecht**: weiß = weiblich, blau = männlich. - **Genotyp/Farbschlag**: 8-Locus-Notation (siehe `tools/import/genotype.py`, `gerbil-manager-web/src/genetics`). Unbekanntes Allel = `-` (nicht `?`). - E-Locus: `ee`=Fuchs, `eef`=Fuchsschimmel, `efef`=Schimmel. + E-Locus: `ee`=Fuchs, `eef`=Fuchsschimmel, `efef`=Schimmel. Rezessiver Fuchs ist + zwingend homozygot → `e-` ist ungültig (wirft), `ee[-]`→`ee`. +- **Genetik-Engine = korrektheitskritisch: IMMER vollständig mit Tests absichern.** + Jede Änderung an `src/genetics/**` (+ Backend-Mirror + `genotype.py`) braucht pro + Use-Case/Ticket einen Regressionstest (`src/genetics/__tests__/genetics.test.ts` + und `tools/import/test_genotype.py`), damit nie eine Regression entsteht. `npx vitest + run` + `python test_genotype.py` müssen grün sein, bevor „fertig". - **Stammbaum-Charts**: Generationen = Spaltenbänder (Proband links in Spalte B/2, je Generation +3 Spalten); Eltern-Position: Vater oben, Mutter unten. Fotos liegen je nach Datei links/auf der Namenszelle — die Seite wird heuristisch über die