e7b6d5013b
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>
79 lines
3.2 KiB
Markdown
79 lines
3.2 KiB
Markdown
# 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.
|