Files
astrololo/services/astroklient
gitea e7b6d5013b feat(astroklient): wersja demonstracyjna o dwóch funkcjach (PRE-28)
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>
2026-08-26 11:56:45 +02:00
..

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:

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.