test: framework porównania domów z wyrocznią + dwa błędy, które od razu wykrył #60
Reference in New Issue
Block a user
Delete Branch "feat/oracle-harness-houses"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Etap 0 planu egzotycznych systemów domów. Zanim zaczniemy implementować
Placidusa i spółkę, potrzebujemy narzędzia, które powie, czy wynik jest poprawny —
bo błąd w domach jest cichy: wykres wygląda dobrze, tylko planety siedzą
w złych domach.
Framework (
tests/oracle)Liczenie cuspów jako funkcja
(RAMC, ε, φ), Swiss Ephemeris jako wyrocznia.Trzy decyzje, które okazały się kluczowe:
swe_houses_armc. Porównywanie „naszego horoskopu" z „horoskopem swissepha"mieszałoby różnice czasu gwiazdowego i ε z błędami domów; utonęlibyśmy
w fałszywych alarmach. Czas gwiazdowy i ε mają własny test.
odchylenie i miejsce, histogram. „97% zgodności" nie odróżnia szumu
zmiennoprzecinkowego od rogu dziedziny, w którym mylimy się o 30°.
które zmienia się z datą (23,75° w 370 p.n.e.), więc przesuwa się o ~0,3°.
🔴 Co znalazł w pierwszym przebiegu — na kodzie uchodzącym za poprawny
1. Ascendent o 180° za kołem podbiegunowym.
atan2wybierał niewłaściwy punktprzecięcia ekliptyki z horyzontem — zwracaliśmy Descendent. Planety lądowały
w przeciwnych domach dla całej północnej Skandynawii (Tromsø, Rovaniemi,
Murmańsk), na ~11% przypadków przy tych szerokościach. Rozstrzyga położenie
względem MC: punkt wschodzący leży w półkolu (0°,180°) na wschód od MC.
2. Niedeterminizm whole sign na granicy znaku. Ascendent o włos od granicy
(
359,999999999976vs1e-10— ta sama wartość, różne strony) przerzucał dom Io 30°. Ten sam horoskop na innej maszynie dawał inny wynik. Przyciąganie do
granicy przy 1e-9° (3,6 mikrosekundy łuku — poniżej realnej dokładności danych).
Oba mają testy regresji w zwykłej suicie, więc są łapane też bez swissepha.
Wynik po poprawkach
Istniejące suity bez regresji: logika 277 (+3), prezentacja 249.
CI
Krok blokujący w jobie
swisseph-image, odpalany wewnątrz obrazu silnika Bz zamontowaną warstwą logiczną — bez klastra, bez HTTP.
pyswissephzostajewyłącznie wyrocznią testową: nie wchodzi do zależności produktu, izolacja
z LOG-27 nienaruszona (sprawdzone).
Dodane
cusps_for(ramc, eps, lat, system)— kanoniczne wejście, w które Etap 1będzie tylko dopisywał kolejne systemy.