# astroklient — wersja demonstracyjna (PRE-28) Osobna warstwa prezentacji o **dwóch funkcjach**: 1. **dodanie pliku bazy** — wgranie i włączenie do użytku jedną czynnością, 2. **zapytanie o interpretację urodzeniową** dla podanych danych wejściowych. I na tym koniec. Nie ma tu kosmogramu, synastrii, kalendarza, promptów do modelu, eksportu ani kont — nie są ukryte, tylko **nie istnieją w tym obrazie**. ## Dlaczego osobna usługa, a nie konto z ograniczeniami Mechanizm uprawnień z PRE-27 umiałby to ukryć w pełnej aplikacji. Ale **ukrycie a nieobecność to dwie różne rzeczy**: tutaj nie ma tras, nie ma szablonów, nie ma nawet metod w kliencie warstwy logicznej. Demo można komuś oddać, nie oddając przy okazji kodu reszty programu. ## ⚠️ Demo pracuje na produkcyjnej warstwie danych Świadoma decyzja właściciela. Konsekwencje, żeby nie było niespodzianek: * **kto ma dostęp do demo, czyta oryginalne bazy interpretacyjne** — czyli rdzeń produktu, którego pilnują LOG-32, DAN-25 i PRE-27, * **pliki wgrane przez demo trafiają do produkcyjnego zbioru baz** i od razu biorą udział w wyszukiwaniu, także w pełnej aplikacji. Dlatego konto astroklienta jest **osobne** (`DEMO_USER` / `DEMO_PASSWORD`): demo odcina się jedną zmienną środowiskową, bez ruszania kont głównej aplikacji i bez zmiany hasła komukolwiek. Jeśli demo ma trafić do kogoś spoza kręgu zaufania, właściwą odpowiedzią jest osobna warstwa danych z pustym udziałem — nie jest to dziś zrobione. ## Konfiguracja | zmienna | znaczenie | |---|---| | `LOGIC_URL` | adres warstwy logicznej (domyślnie `http://localhost:8001`) | | `DEMO_USER` | login (domyślnie `demo`) | | `DEMO_PASSWORD` | hasło — jawne albo hash `scrypt$sól$hash`. **Puste = aplikacja stoi otwarta** i mówi o tym głośno przy starcie | | `INTERNAL_TOKEN` | token międzywarstwowy (LOG-32) — ten sam co reszta usług | | `LINK_KEY_PRESENTATION_LOGIC` | klucz szyfrowanego łącza (PRE-16) — ten sam co prezentacja | | `RATE_LIMIT_PER_MIN` | limit żądań na adres, domyślnie 60; `0` wyłącza | | `REPORT_LIMIT` | górny limit rekordów w jednej odpowiedzi, domyślnie 2000 | | `TRUST_PROXY` | `true` za Ingressem — inaczej limit liczy wszystkich do jednego wiadra | Hash hasła zrobisz tym samym skryptem, co dla głównej aplikacji: ```bash cd services/presentation && python scripts/make_user.py demo ``` ## Uruchomienie lokalne ```bash cd services/astroklient pip install -r requirements-dev.txt DEMO_PASSWORD=tajne LOGIC_URL=http://localhost:8001 \ uvicorn app.main:app --port 8005 ``` Testy: ```bash cd services/astroklient && PYTHONPATH=. pytest tests -q ``` ## Co pilnują testy Poza zwykłą poprawnością — dwie własności, które łatwo zepsuć bez zauważenia: * **powierzchnia**: zbiór tras aplikacji musi być dokładnie taki, jak dwie funkcje wymagają; klient warstwy logicznej ma tylko te metody, których używa. Trasa, o której nikt nie pamiętał, jest tu realnym ryzykiem, bo ta usługa rozmawia z produkcyjną warstwą danych. * **milczenie o regułach walidacji**: plik odrzucony daje komunikat bez powodu. Reguły zna wyłącznie administrator w pełnej aplikacji (DAN-27), a demo nie ma prawa ich zdradzić nawet mimochodem.