feat(import): neue Stammbäume (12 Charts) + litterChildren.add + EMF-Fotos überspringen
Some checks failed
CI / Backend Tests (.NET) (push) Successful in 1m16s
CI / Frontend Tests (Node/Vite) (push) Successful in 9m39s
CI / Docker Build & Push (push) Successful in 14m0s
CI / Deploy auf TrueNAS (Custom App) (push) Failing after 3s

Die Züchterin hat 24 neue/aktualisierte Stammbaum-xlsx geliefert (Ordner
"neuestammbäume"); sie liegen jetzt im kanonischen Quellverzeichnis
Sttammbäume (12 neue Charts, 7 aktualisierte, 3 identisch, das inhaltsgleiche
"Picus Son (2)" ausgelassen). Prod ist per Upload-Ingest aktualisiert:
2372 -> 2451 Tiere, 916 -> 965 Würfe, 432 -> 507 Fotos, 2198 -> 2275 Tiere
mit Geburtsdatum. Overrides/verified-Zeilen, manuelle Tiere und Tickets
haben den Ingest unverändert überlebt.

Zwei Datenfehler, die die neuen Charts aufgedeckt haben — datengetrieben und
re-ingest-stabil gefixt statt an der globalen Heuristik zu drehen:

- litterChildren kennt jetzt `add` [Name | {name, dob}] als Gegenstück zu
  `keep`: hängt ein Jungtier an DIESEN Wurf und entfernt den alten Wurf, wenn
  er dadurch kinderlos UND virtuell ist. Nötig, weil "Pukas Kids" Akanes
  Eltern komplett UNTER ihren Block setzt (N80 Roni = Vater, N81 Fumi =
  Mutter) — _reconstruct_parents griff eine Zeile zu hoch, paarte Irish
  Coffee (Bonapartes Mutter) mit Roni und riss Akane aus dem Z21-Wurf in
  einen Phantom-Wurf, der in der Wurfchronik auftauchte (Ticket 88389f8e).
- Merle: durch das neue Geburtsdatum (18.06.2023) mergt der addAnimals-Stub
  in den Chart-Datensatz und verliert dabei sein isResident -> expliziter
  resolutions-Override (Ticket 36a3fcde/a8f11ac0, Züchterin: Zuchttier).

Außerdem: Excel legt neben Fotos teils EMF/WMF-Vektorvorschauen ab, die
Browser nicht darstellen können (kaputte Bildkachel in der Tier-Akte) ->
extract._attach_photos überspringt .emf/.wmf (5 Fotos betroffen).

Regressionstests für alle drei Punkte; alle Python-Suites grün.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-18 22:27:18 +02:00
parent 1cb9e52117
commit 0b99cfd2bd
7 changed files with 190 additions and 69 deletions

View File

@@ -1318,6 +1318,13 @@
],
"decision": "Leeres Mino-Stub (ohne DOB) in vollständigen Mino mergen; L6-/X6-Wurf (Mino×Misaki) hängen dadurch am vollständigen Mino.",
"source": "Ticket 44a9b677"
},
{
"name": "Merle",
"dob": "18.06.2023",
"isResident": true,
"decision": "Merle (Tochter Akane × Bonaparte, bei Clan of Black Forest geboren) ist Zuchttier. Das Geburtsdatum 18.06.2023 kommt aus „Stammbaum von Pukas Kids“ — seit der addAnimals-Stub mit dem Chart-Datensatz verschmilzt, braucht die Residenz einen expliziten Override (der isResident-Sweep würde sie sonst auf false setzen).",
"source": "Ticket 36a3fcde + Ticket a8f11ac0 (Züchterin: Merle = Zuchttier)"
}
],
"addAnimals": [
@@ -2208,7 +2215,19 @@
"Kai-Uwe"
],
"note": "Ticket 8d259edf: Gales (früher Drake Jr) Wurf hatte 9 fälschlich zugeordnete unbenannte Jungtiere. Wurfchronik: 3 überlebt = Pünktchen, Quebec, Kai-Uwe (aus Abgabeverträgen/Stammbaum bestätigt)."
},
{
"date": "21.01.2023",
"matchChild": "Anakoni",
"add": [
{
"name": "Akane von den Kleinen Chaoten",
"dob": "21.01.2023"
}
],
"note": "Akane ist laut Wurfchronik ein Z21-Jungtier (Roni × Fumi). Die neuen Stammbäume (Pukas Kids / Sa Sp (YaraFire) & Sa Kids) führen Akanes Eltern in Spalte N direkt UNTER ihrem Block (N80 Roni = Vater, N81 Fumi = Mutter); die Positions-Heuristik griff eine Zeile zu hoch und paarte Irish Coffee (Bonapartes Mutter) mit Roni — dadurch entstand ein Phantom-Wurf vom 21.01.2023 in der Wurfchronik.",
"source": "Züchterin 2026-06-22 — Ticket 88389f8e (Roni=Vater, Fumi=Mutter) + Chart „Stammbaum von Pukas Kids“"
}
],
"_doc_litterChildren": "litterChildren: autoritative Kinder-Whitelist eines Wurfs (Match date+matchChild). Kinder außerhalb keep werden aus dem Wurf gelöst (LitterId=None); optional renameTo. Für Über-Merges von Abnehmer-Sammelseiten."
}
"_doc_litterChildren": "litterChildren: autoritative Kinder-Whitelist eines Wurfs (Match date+matchChild). Kinder außerhalb keep werden aus dem Wurf gelöst (LitterId=None); optional renameTo. Für Über-Merges von Abnehmer-Sammelseiten. Optional add [Name | {name, dob}]: hängt ein Jungtier an DIESEN Wurf (Gegenstück zu keep) — für Jungtiere, die die Chart-Positions-Heuristik in einen falschen virtuellen Stammbaum-Wurf gezogen hat; wird der alte Wurf dadurch kinderlos UND virtuell, entfernt der Importer ihn (kein Phantom-Wurf in der Wurfchronik)."
}