- docs/przeglad-bibliotek-i-licencji.md: przegląd istniejących bibliotek/ programów z komentarzem licencyjnym i oceną ryzyka praw autorskich; rekomendacja ścieżki A (Skyfield/Moshier permisywne) + nota o prawach do treści baz. - docs/warstwa-logiczna-analiza.md: rozwinięcie 24 wymagań LOG, przypisanie permisywnych gotowców, ocena złożoności implementacji od zera, rola B/C jako wyroczni walidacyjnej; kolejność budowy. - astrololo_wymagania.xlsx: w arkuszu "Warstwa logiczna" 4 nowe kolumny (gotowe rozwiązanie / licencja / złożoność od zera / rola B/C) oraz nowy wiersz LOG-25 (harness walidacyjny). Licznik w Przeglądzie zaktualizowany. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
18 KiB
Warstwa logiczna — analiza, rozwinięcie wymagań i przypisanie rozwiązań
Dokument roboczy. Rozwinięcie 24 wymagań warstwy logicznej (LOG‑01…LOG‑24 z astrololo_wymagania.xlsx) wraz z: przypisaniem gotowych permisywnych rozwiązań, oceną złożoności implementacji od zera (bo idziemy ścieżką A) oraz wskazaniem, gdzie narzędzia AGPL/komercyjne (B/C) służą jako referencja i walidacja. Stan: czerwiec 2026.
0. Założenia ścieżki A
Fundament permisywny (co dostajemy „za darmo"):
- Skyfield (MIT) + dane NASA JPL DE440/DE441 (public domain) → geocentryczne pozycje planet i Księżyca, RA/Dec, długość/szerokość ekliptyczna, prędkości, wschody/zachody, wyszukiwanie zdarzeń (stacje, powroty, syzygia).
- pyerfa / ERFA (BSD; pochodna IAU SOFA) → precesja, nutacja, czas gwiazdowy (LST), nachylenie ekliptyki (obliquity) — prymitywy potrzebne do osi (Asc/MC) i ayanams.
- Katalog Hipparcos (ESA, swobodnie dostępny; ładuje go Skyfield) → gwiazdy stałe.
- Lark / pyparsing (MIT) → infrastruktura parsera składni sygnifikatorów.
- numpy / pandas (BSD) → cała matematyka i tabele.
Wniosek: ~70–80% astronomicznego fundamentu jest pokryte permisywnie. Sami budujemy warstwę astrologiczną (domy, dyrekcje, techniki, parser, dopasowanie) — a jej algorytmy/wzory są wiedzą publiczną (opisane w literaturze astronomicznej i astrologicznej), więc nie podlegają prawu autorskiemu — chronione są tylko konkretne implementacje kodu. Czytamy więc Astrolog/Morinus/dokumentację Swiss Ephemeris, by zrozumieć metodę, a piszemy własny kod permisywny.
Rola ścieżek B/C (Swiss Ephemeris, Morinus, astro.com):
- Wyrocznia walidacyjna — nasz silnik porównujemy liczbowo (do łuku sekundy) z SE/astro.com. Użycie pyswisseph w samych testach/CI (nie dystrybuowane, nie wystawiane użytkownikom przez sieć) nie uruchamia obowiązków AGPL — to legalne i bardzo przydatne.
- Dane referencyjne — tabele kontrolne (np. dla profekcji, primary directions) do testów regresyjnych.
- Porównanie funkcjonalne — które warianty technik liczy „konkurencja".
Skala złożoności (implementacja od zera): Trywialna · Niska · Średnia · Wysoka · Bardzo wysoka (XL).
1. Macierz zbiorcza
| ID | Wymaganie | Gotowe permisywne (ścieżka A) | Złożoność od zera | Rola B/C |
|---|---|---|---|---|
| LOG‑01 | Pozycje obiektów | Skyfield (komplet) | Niska | walidacja pozycji |
| LOG‑02 | Taksonomia obiektów | Skyfield (planety, Księżyc), Hipparcos (gwiazdy) | Wysoka (true Node/Lilith, gwiazdy) | walidacja węzłów/Lilith |
| LOG‑03 | Kierunek i stacje | Skyfield (find_discrete) | Średnia | walidacja dat stacji |
| LOG‑04 | Systemy zodiaku / ayanamsy | Skyfield (tropikalny, RA), pyerfa (precesja) | Średnia | walidacja ayanams |
| LOG‑05 | Systemy domów (wiele) | pyerfa (LST, obliquity); reszta własna | Wysoka | walidacja cusps (kluczowa) |
| LOG‑06 | Aspekty + orby | własne (czysta matematyka) | Niska | walidacja list aspektów |
| LOG‑07 | Aspekty pozazodiakalne | Skyfield (deklinacja) | Niska | walidacja |
| LOG‑08 | Lots | własne (arytmetyka + DSL formuł) | Niska–Średnia | porównanie wartości |
| LOG‑09 | Primary Directions | brak permisywnego | Bardzo wysoka (XL) | krytyczna (Morinus) |
| LOG‑10 | Profekcje | własne (arytmetyka + tabele władców) | Niska–Średnia | tabela kontrolna |
| LOG‑11 | Zod. Releasing / Firdaria / Decennials | brak permisywnego | Średnia (table‑driven) | walidacja sekwencji |
| LOG‑12 | Returns (Solar/Lunar) | Skyfield (root‑finding) | Niska–Średnia | walidacja czasu powrotu |
| LOG‑13 | Ascensional Times | pyerfa/własne (oblique ascension) | Średnia | tabela kontrolna |
| LOG‑14 | Zbiorcza tabela dat | własne (orkiestracja) | Średnia | — |
| LOG‑15 | Parser sygnifikatorów | Lark/pyparsing (infrastruktura) | Wysoka (unikalne IP) | brak referencji |
| LOG‑16 | Precompute „atomów" | własne | Średnia | — |
| LOG‑17 | Interpretacja „asp"/„asp±" | własne (config + LOG‑06) | Niska–Średnia | — |
| LOG‑18 | Warstwy 1A/1B | własne (orkiestracja ↔ warstwa danych) | Średnia | — |
| LOG‑19 | Wypis interpretacji 2B | własne (↔ DataProvider) | Średnia | — |
| LOG‑20 | Kolumny sygnif. + „no of hits" | własne | Niska–Średnia | — |
| LOG‑21 | Scoring siły efektu | własne (rule/data‑driven) | Średnia | — |
| LOG‑22 | Konwersja tekst ↔ symbol | własne (tablice z notes3) | Niska | — |
| LOG‑23 | Pozostałe wyliczenia | Skyfield (zdarzenia) | Niska | walidacja |
| LOG‑24 | Abstrakcja silnika efemeryd | architektura | Niska | — |
Tylko 3 pozycje są naprawdę trudne: LOG‑09 (primary directions, XL), LOG‑05 (pełny zestaw domów, Wysoka), LOG‑15 (parser — Wysoka, ale to nasze unikalne IP, więc gotowca i tak nie ma). Reszta jest Niska/Średnia, w dużej części pokryta przez Skyfield.
2. Rozwinięcia pogrupowane
Grupa A — Fundament astronomiczny (LOG‑01, 02, 03, 24)
LOG‑01 · Pozycje obiektów.
Rozwinięcie: długość i szerokość ekliptyczna (of‑date), prędkość (różniczkowanie pozycji), kierunek; formaty: DMS w znaku (Tau 28°12'57''), absolutne 0–360°, dziesiętne. Ścieżka A: Skyfield daje to wprost (ecliptic_latlon, prędkość z dwóch chwil). Formatowanie/podział na znaki = trywialne. Złożoność: Niska. B/C: porównać długości z astro.com do ~0,1″.
LOG‑02 · Taksonomia obiektów. Rozwinięcie: światła+planety (Skyfield 🟢), planety nowożytne (🟢), gwiazdy stałe (precesja+ruch własny — Hipparcos w Skyfield, 🟢 średnia), obiekty wirtualne:
- Węzły księżycowe — mean (wzór analityczny, Niska) i true/osculating (z wektora stanu Księżyca → elementy oskulacyjne → węzeł wstępujący; Średnia–Wysoka).
- Lilith (Black Moon = apogeum Księżyca) — mean (Niska–Średnia) i true (oskulacyjne apogeum; Wysoka — tu implementacje notorycznie się różnią, walidacja względem SE obowiązkowa).
- Osie (Asc/MC → Dsc/IC) — patrz LOG‑05. Złożoność całości: Wysoka (przez gwiazdy + true Node/Lilith; reszta Niska). B/C: SE jako wzorzec dla true Node/Lilith (różne definicje!).
LOG‑03 · Kierunek i stacje.
Rozwinięcie: znak prędkości → D/Rx; stacja = przejście prędkości przez 0 (SD vs SR z przyspieszenia); „dni od stacji ścisłej" + flaga <7 dni; „stacja umowna" jako konfigurowalny próg % ruchu typowego. Ścieżka A: Skyfield find_discrete/find_maxima znajduje momenty stacji; średnie prędkości precompute. Złożoność: Średnia. B/C: daty stacji z SE.
LOG‑24 · Abstrakcja silnika.
Rozwinięcie: interfejs EphemerisEngine z implementacjami SkyfieldEngine (główna, MIT+JPL), MoshierEngine (fallback w pełni public‑domain, bez plików danych) oraz — opcjonalnie po decyzji — SwissEphCommercialEngine. Złożoność: Niska (architektura, analogicznie do DataProvider). To wymaganie spina ścieżki A/B bez przepisywania logiki.
Grupa B — Układy odniesienia (LOG‑04, 05)
LOG‑04 · Systemy zodiaku / ayanamsy. Rozwinięcie: tropikalny (domyślny, 🟢), syderyczny = tropikalny − ayanamsa(t) (Lahiri, Fagan‑Bradley… ~40 w SE; my zaczynamy od kilku + tabela rozszerzalna), draconic = tropikalny − długość NN (🟢 po LOG‑02), RA (Skyfield daje wprost). Ścieżka A: precesja z pyerfa; ayanamsy to znane stałe odniesienia + tempo precesji. Złożoność: Średnia (głównie tabela ayanams). B/C: wartości ayanams z SE.
LOG‑05 · Systemy domów (wiele, równolegle). ⚠️ najcięższa matematyka astronomiczna. Rozwinięcie:
- Whole Sign / Equal (Asc/MC) / Porphyry → Niska (trywialne podziały).
- Placidus, Koch, Regiomontanus, Campanus, Topocentric, Alcabitus, Meridian, Morinus, Vehlow → znane wzory trygonometrii sferycznej, każdy Średnia, w komplecie Wysoka (przypadki brzegowe na wysokich szerokościach — Placidus/Koch nieokreślone za kołem podbiegunowym).
Ścieżka A: Asc/MC z LST (pyerfa) + obliquity + szerokość geo (standardowe wzory).
libephemeris(AGPL) dowodzi, że pełny zestaw 25 systemów da się policzyć na Skyfieldzie — czytamy go jako dowód wykonalności, ale piszemy własny kod. Złożoność: Wysoka. B/C: walidacja cusps krytyczna — tu kryją się błędy, szczególnie na dużych szerokościach.
Grupa C — Aspekty (LOG‑06, 07)
LOG‑06 · Aspekty + orby. Rozwinięcie: separacja kątowa vs kąt aspektu ± orb; aplikacja/separacja z różnicy prędkości; schematy orbów (domyślne, bonus dla luminarzy, fixed, ±%, per‑planeta/szkoła); aspekt „przez znak" vs „przez stopień"; major/minor/harmonic. Ścieżka A: czysta matematyka na policzonych długościach — żadna biblioteka nie jest potrzebna. Złożoność: Niska–Średnia (szerokość konfiguracji, nie trudność algorytmu). B/C: listy aspektów z astro.com do testów.
LOG‑07 · Aspekty pozazodiakalne. Rozwinięcie: parallel/contraparallel (po deklinacji — Skyfield 🟢), antiscia/contra‑antiscia (lustro względem osi przesileń — arytmetyka). Złożoność: Niska.
Grupa D — Lots (LOG‑08)
LOG‑08 · Lots.
Rozwinięcie: silnik formuł Lot = C + A − B z odwracaniem dzień/noc (sekta); By Degree (domyślnie) i By Sign; 7 Hermetic Lots; cały znak działa jak Lot. Ścieżka A: mały DSL/parser formuł + ewaluacja na policzonych pozycjach. Złożoność: Niska–Średnia (logika sekty prosta; trudność tkwi w tożsamości/wariantach Lots — to kuracja danych, nie obliczenia; patrz Q‑03). B/C: porównanie wartości stopni.
Grupa E — Techniki predykcyjne (LOG‑09…14)
LOG‑09 · Primary Directions. ⚠️ najtrudniejsze (XL). Rozwinięcie: łuk dyrekcji (semi‑arc/Placidean, Regiomontanus, …) między sygnifikatorem a promisorem w ruchu dobowym; klucz łuk→czas (Ptolemeusz/Naibod/Cardan/Solar arc); direct/converse; mundo/zodiacal; z szerokością/bez. ~160 wariantów — robimy 5–8 (Q‑02), framework rozszerzalny. Ścieżka A: brak gotowca permisywnego — w całości własna trygonometria sferyczna + obsługa wariantów. Złożoność: Bardzo wysoka. B/C: Morinus (GPL) słynie z dokładnych primary directions — kluczowa wyrocznia; uwaga: nawet komercyjne programy różnią się w wariantach (do udokumentowania, który wariant odwzorowujemy).
LOG‑10 · Profekcje. Rozwinięcie: annual (Asc +1 znak/rok, mod 12), monthly/daily, continuous (klucz, domyślnie 30°/rok), Lord of Year, Lord of Orb (kolejność chaldejska, mod 84/12). Ścieżka A: arytmetyka dat + tabele władców domicilnych — bez bibliotek. Złożoność: Niska (annual) – Średnia (continuous + Lord of Orb). B/C: tabela kontrolna (jak ta w notes3).
LOG‑11 · Zodiacal Releasing / Firdaria / Decennials. Rozwinięcie: deterministyczne sekwencje okresów z tabel hellenistycznych/perskich (ZR: długości okresów Valensa + „loosing of the bond"; Firdaria: stałe sekwencje diurnal/nocturnal z podokresami; Decennials: kolejność planetarna). Ścieżka A: logika sekwencjonowania na tabelach — algorytmy publiczne, niepodlegające prawu autorskiemu. Złożoność: Średnia. B/C: walidacja sekwencji z SE/Astrolog.
LOG‑12 · Returns (Solar/Lunar). Rozwinięcie: root‑finding momentu powrotu Słońca/Księżyca do długości natalnej; 2 warianty (osobny horoskop vs tranzyt do natalu); monthly revolutions (Słońce + n×30°). Ścieżka A: Skyfield znajduje moment (🟢), reszta = ponowne użycie LOG‑01…06. Złożoność: Niska–Średnia. B/C: czas powrotu z astro.com.
LOG‑13 · Ascensional Times. Rozwinięcie: oblique ascension znaków wg szerokości (różnica ascensjonalna z RA) → lata życia; sumy i ułamki dla dodatkowych dat. Częściowo data‑driven (tabela DAN‑07). Ścieżka A: wzory powiązane z LOG‑05 (trygonometria sferyczna) + pyerfa. Złożoność: Średnia.
LOG‑14 · Zbiorcza tabela dat z technik.
Rozwinięcie: uruchom wszystkie techniki w zakresie czasu → jedna datowana tabela (technique | significator | start | exact | end), sortowanie, deduplikacja, daty dokładne (wspólny root‑finding z LOG‑12). Ścieżka A: orkiestracja/glue. Złożoność: Średnia.
Grupa F — Parser sygnifikatorów i dopasowanie (LOG‑15…20) — rdzeń unikalnego IP
LOG‑15 · Parser składni „Significator". ⚠️ Wysoka — i tak nie ma gotowca. Rozwinięcie: gramatyka skrótów (obiekty, znaki, żywioły, jakości, domy, aspekty+cel, retro/combust/waxing/heliacal, opcje A/B, warunki, „r‑Asc", whole sign+orb); 7 poziomów złożoności — od poziomu „obiekt" po sygnifikatory opisowe/niejasne (poziomy 5–7 mogą wymagać fallbacku człowiek/AI). Ścieżka A: tokenizer + gramatyka PEG (Lark, MIT) + słownik SIGNIFICATORS KEY (warstwa danych) jako mapa znaczeń tokenów. Złożoność: Wysoka — tu idzie najwięcej oryginalnej inżynierii; to wartość intelektualna projektu. B/C: brak — nie istnieje zewnętrzny parser tej składni.
LOG‑16 · Precompute „atomów" obecnych w horoskopie. Rozwinięcie: wygeneruj zbiór wszystkich cząstek prawdziwych dla danego horoskopu (Ma Ari, Ma fire, Ma h2, Ma opp Sa, r‑Asc Ari…); dopasowanie rekordu bazy = przynależność do zbioru. Zależy od LOG‑01…08 (policzony horoskop) + LOG‑15 (słownik). Złożoność: Średnia (generacja kombinatoryczna + indeks; wrażliwe wydajnościowo — łączy się z DAN‑22).
LOG‑17 · Interpretacja „asp"/„asp+"/„asp‑"/„asp malefic". Rozwinięcie: rozwinięcie wg konfigurowalnej tabeli pomocniczej (jakie aspekty, orby, active) + LOG‑06. Złożoność: Niska–Średnia.
LOG‑18/19/20 · Dopasowanie i wypis. Rozwinięcie: silnik dopasowania: atomy → zapytanie do warstwy danych (nasz DataProvider!) → złożenie outputu: 1A (natal, unikalny), 1B (predykcyjne z datami), 2B (wypis interpretacji tylko dla obecnych rekordów), 2 kolumny sygnifikatora (z bazy / as‑is‑in‑chart), „no of hits" (1/2/3/…/?/2+?). To styk warstwy logicznej z danych — pasuje do istniejącej architektury. Złożoność: Średnia.
Grupa G — Scoring, symbole, pozostałe (LOG‑21, 22, 23)
LOG‑21 · Scoring siły efektu. Rozwinięcie: punktacja wg tabel relacyjnych (np. „no air" poziomy //), punkty za domniemaną prawdziwość w syntezie; logika indywidualna (nie zawsze rzadkość = siła). Ścieżka A: silnik reguł na danych (tabele relacyjne — warstwa danych). Złożoność: Średnia, otwarte (autor przygotuje punktację indywidualnie).
LOG‑22 · Konwersja tekst ↔ symbol. Rozwinięcie: dwukierunkowe mapowanie z tablic Unicode (kompletne w notes3); przechowywanie tekstem, wyświetlanie symbolami; tylko „text" Unicode, nigdy emoji; ℞ dla retro. Złożoność: Niska (tablice lookup). Ligatury vs 2 kolumny — patrz Q‑05 (prezentacja).
LOG‑23 · Pozostałe wyliczenia. Rozwinięcie: tally żywiołów/jakości (trywialne), planetary day & hours (wschód/zachód ze Skyfielda + podział na 12 godzin dnia/nocy + władcy chaldejscy), stopnie krytyczne/wrażliwe (lookup), faza Księżyca (elongacja Su‑Mo), syzygia prenatalna (root‑find ostatniej pełni/nowiu przed urodzeniem), divisional (12th/9th parts — arytmetyka). Ścieżka A: Skyfield obsługuje zdarzenia astronomiczne. Złożoność: Niska (lokalnie Niska–Średnia).
3. Proponowana kolejność budowy (fazy)
- Fundament (MVP silnika): LOG‑24 (interfejs) → LOG‑01 → LOG‑02 (bez gwiazd/true‑Lilith) → LOG‑04 (tropikalny+RA) → LOG‑06/07 → LOG‑05 (Whole/Equal/Porphyry+Placidus) → LOG‑23 (podstawy). Tu Skyfield daje ogromny skok.
- Astrologia rdzenia: LOG‑08 (Lots) → LOG‑15 (parser) → LOG‑16 → LOG‑18/19/20 (dopasowanie ↔ warstwa danych). Tu powstaje unikalna wartość i pełny przepływ „horoskop → interpretacje".
- Predykcja prosta: LOG‑10 (profekcje) → LOG‑12 (returns) → LOG‑14 (agregacja) → LOG‑11 (time‑lordy) → LOG‑13.
- Predykcja trudna i dopieszczenie: LOG‑09 (primary directions, XL) → LOG‑02 dokończenie (gwiazdy, true Node/Lilith) → LOG‑04 (ayanamsy) → LOG‑21 (scoring) → LOG‑05 (pełny zestaw domów).
Logika: najpierw to, co Skyfield daje tanio i co odblokowuje przepływ end‑to‑end; najtrudniejsze (primary directions, pełne domy) na koniec, gdy mamy już solidną wyrocznię walidacyjną.
4. Stos technologiczny (permisywny) i walidacja
Produkcyjne (ścieżka A): Skyfield (MIT), pyerfa (BSD), dane JPL DE440 (PD) lub Moshier (PD), Lark (MIT), numpy/pandas (BSD). Zero copyleft → produkt może być zamknięty i hostowany.
Tylko dev/test (B/C jako wyrocznia — NIE w produkcie, NIE wystawiane przez sieć): pyswisseph (AGPL) i Morinus (GPL) do porównań liczbowych w testach regresyjnych. To legalne, bo nie dystrybuujemy ich i nie udostępniamy użytkownikom — AGPL/GPL nie zostają uruchomione.
Wymaganie pochodne (do dopisania w arkuszu): LOG‑25 — harness walidacyjny: zestaw testów porównujących nasz silnik z SE/astro.com/Morinus na bazie znanych horoskopów (np. przykład z notes3: 30.04.1984, Warszawa), z progami tolerancji per wielkość. To nasza polisa ubezpieczeniowa przy budowie od zera.
5. Wniosek
Ścieżka A jest w pełni wykonalna. Skyfield + pyerfa + JPL/Moshier zdejmują z nas całą trudną astronomię (pozycje, zdarzenia, czas gwiazdowy, precesja). Realny ciężar własnej implementacji to trzy obszary: primary directions (XL), pełny zestaw domów (Wysoka) i parser sygnifikatorów (Wysoka — ale unikalny, gotowca i tak nie ma). Wszystkie pozostałe wymagania są Niskie/Średnie. Narzędzia AGPL/komercyjne zostają jako wyrocznia walidacyjna i dane referencyjne — używane legalnie poza produktem.