76fbdefeaa
Testy / Testy warstwy logicznej (silnik) (pull_request) Successful in 11m52s
Testy / Testy warstwy prezentacji (dostęp do baz) (pull_request) Successful in 9m57s
Testy / Build obrazu silnika B (swisseph) (pull_request) Successful in 46s
Testy / Kontrola składni wszystkich warstw (pull_request) Successful in 19s
build / build (push) Successful in 1m10s
Testy / Testy warstwy logicznej (silnik) (push) Successful in 10m59s
Testy / Testy warstwy prezentacji (dostęp do baz) (push) Successful in 9m50s
Testy / Build obrazu silnika B (swisseph) (push) Successful in 42s
Testy / Kontrola składni wszystkich warstw (push) Successful in 19s
Ósma wskazówka partnerów, jako małe QoL przed PRE-22. Koło rysujemy w kolumnie tekstu, więc na mniejszym ekranie glify i stopnie robią się nieczytelne. Kliknięcie rozciąga wykres na całe okno, ponowne wraca do strony. SVG skaluje się bez utraty jakości, więc nie potrzeba drugiej wersji rysunku ani biblioteki. Wyjście z powiększenia na trzy sposoby: klik w wykres, klik w tło, Esc. Dostępne też z klawiatury (Enter/Spacja, focus-visible), bo inaczej obejrzenie szczegółów wymagałoby myszy. Dwie decyzje warte odnotowania: 1. WARSTWA. z-index 1100 CELOWO pomiędzy: ponad kontrolkami Leafleta (1000), ale PONIŻEJ okna postępu (1200). Gdy trwa pisanie horoskopu, log operacji ma zostać na wierzchu. Test pilnuje tej nierówności, bo to jedyna liczba tutaj, którą łatwo zmienić bez zastanowienia i zepsuć coś niewidocznego na oko. 2. ROZMIAR. Koło jest kwadratowe, więc ograniczamy je KRÓTSZYM bokiem okna (min(96vw, 92vh)) — inaczej na szerokim ekranie wystawałoby w pionie. Skrypt podpięty globalnie w base.html i osłonięty sprawdzeniem, czy koło w ogóle jest na stronie — zadziała też na przyszłej zakładce „Skompiluj" bez zmian. Przy powiększeniu blokujemy przewijanie strony pod spodem. Weryfikacja na żywej aplikacji, pomiarami w DOM: po kliknięciu .wheel-fig ma position:fixed, display:flex, z-index:1100; SVG rośnie z 460×460 do 662×653 przy oknie 1280×720, visibility visible; body dostaje overflow:hidden. Ponowne kliknięcie wraca do 460×460 i zdejmuje klasę. Zrzutu ekranu stanu powiększonego NIE mam — panel przeglądarki zaciął się w trakcie (puste klatki, viewport raportowany jako 0×0), więc opieram się na pomiarach i testach. Testy: 10 nowych. Całość: prezentacja 87 passed, logika 265 / 1 skip. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Warstwa prezentacji (presentation)
Niezależna usługa serwująca stronę WWW (formularz + tabela wyników). W dół przekazuje dane z formularza do warstwy logicznej i renderuje opracowane wyniki. Brak logiki biznesowej i dostępu do danych.
Trasy
GET /— Horoskop: formularz danych momentu (data, godzina, strefa, opcjonalnie lokalizacja)POST /— liczy pozycje obiektów (woła logic/chart/positions) i renderuje czytelną tabelęGET /significators,POST /significators— wyszukiwarka w bazach interpretacji (warstwa danych)GET /health
Strona „Horoskop" to widok do ręcznego testowania: podstawowe dane wejściowe → to, co policzyła warstwa logiczna (znak, pozycja w znaku, absolutna, kierunek, prędkość). Przycisk „Tu i teraz" uzupełnia bieżącą datę/godzinę i strefę przeglądarki.
Zależności w dół
Zna wyłącznie LOGIC_URL (adres warstwy logicznej) i jej kontrakty /chart/positions
oraz /api/query. Nie wie nic o silniku ani bazach.
Uwaga: pełne liczenie pozycji wymaga warstwy logicznej z silnikiem efemeryd (gałąź
feat/logic-engine). Bez niego strona „Horoskop" pokaże czytelny komunikat.
Uruchomienie
pip install -r requirements.txt
export LOGIC_URL=http://localhost:8001
uvicorn app.main:app --port 8000
# otwórz http://localhost:8000