Osobna warstwa prezentacji: dodanie pliku bazy i zapytanie o interpretację urodzeniową. Nic więcej. OSOBNA USŁUGA, 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 pozostałych funkcji NIE MA W OBRAZIE — 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. Test porównuje zbiór tras aplikacji i zbiór metod klienta z listą dokładną, więc dopisanie czegokolwiek zapala się od razu. WGRANIE I WŁĄCZENIE TO JEDNA CZYNNOŚĆ. W pełnej aplikacji to dwie osobne decyzje (DAN-27), bo tam ktoś nad tym panuje. Tutaj „dodać plik do bazy" musi znaczyć, że plik od razu bierze udział w wyszukiwaniu — inaczej po wgraniu nic by się nie zmieniło i demo wyglądałoby na zepsute. Walidacja zostaje: plik o złym układzie nie wchodzi do użytku, ale też NIE JEST tracony, a komunikat nie zdradza reguł, bo te zna wyłącznie administrator. Osobny test szuka w komunikacie śladów mechanizmu. KONTO OSOBNE (DEMO_USER/DEMO_PASSWORD), nie współdzielone z główną aplikacją. Demo pracuje na TEJ SAMEJ warstwie danych co produkcja — świadoma decyzja właściciela — więc kto ma do niego dostęp, czyta oryginalne bazy, a jego wgrania trafiają do produkcyjnego zbioru. Własne poświadczenia pozwalają odciąć demo jedną zmienną, bez ruszania kont głównej aplikacji i bez zmiany hasła komukolwiek. Zapisane wprost w README usługi i w manifeście, nie tylko w tej wiadomości. Rozmowa z warstwą logiczną idzie tym samym szyfrowanym łączem (PRE-16) i pod tym samym tokenem międzywarstwowym (LOG-32) — demo nie jest furtką omijającą ochronę. Automatyczna dokumentacja wyłączona, jak w pełnej aplikacji: /docs wypisałoby komplet tras, a demo ma nie zdradzać nawet własnej powierzchni. Zależności celowo krótsze niż w prezentacji: bez Excela, bez stref czasowych z lokalizacji, bez niczego pod kosmogram. Każda zbędna zależność w obrazie demo to kolejna rzecz do pilnowania. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
astroklient — wersja demonstracyjna (PRE-28)
Osobna warstwa prezentacji o dwóch funkcjach:
- dodanie pliku bazy — wgranie i włączenie do użytku jedną czynnością,
- 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:
cd services/presentation && python scripts/make_user.py demo
Uruchomienie lokalne
cd services/astroklient
pip install -r requirements-dev.txt
DEMO_PASSWORD=tajne LOGIC_URL=http://localhost:8001 \
uvicorn app.main:app --port 8005
Testy:
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.