PRE-29: pula konta w osi czasu, prompcie i horoskopie #87

Open
gitea wants to merge 2 commits from fix/pre29-tenant-prompt-timeline into master
Owner

Co było nie tak

/chart/report przekazywał pulę konta do warstwy danych, ale reszta tras szukających w bazach — nie:

Trasa Przed Po
/chart/timeline (interpret=true) TimelineRequest.tenant istniał, ale DataClient() bez puli DataClient(tenant=req.tenant)
/chart/prompt natal brak pola tenant, build_report(..., DataClient()) pole + DataClient(tenant=req.tenant)
/chart/prompt period j.w., interpret_events(events, DataClient()) j.w.
/chart/horoscope, /chart/horoscope/stream dziedziczą po /chart/prompt HoroscopeRequest dziedziczy pole

Puste tenant = cały udział, więc pełna aplikacja (prezentacja, która puli nie wysyła) zachowuje się jak dotąd.

Klienci

  • astroklient — _post (a więc też wywolaj → prompt/horoskop) już dokładał pulę z kontekstu sesji. Strumień (strumien, używany przez /chart/horoscope/stream) szedł obok _post i wysyłał payload bez zmian — poprawione, z tym samym pierwszeństwem kontekstu nad polem z payloadu. Modułu generowania w obrazie astroklienta dziś nie ma (usun.txt), ale most modułów zostaje celowo, więc transport musi być szczelny.
  • astrodemo — bez zmian: klient jest celowo okrojony do report + plików (PRE-28) i nie woła promptu, horoskopu ani osi czasu. Dopisanie tych metod byłoby sprzeczne z PRE-28.

Testy (wywołania tras, nie grep)

  • services/logic/tests/test_tenant_routes.py — TestClient(main.app), prawdziwy silnik Skyfield, szpieg w miejscu DataClient. Dla 8 wariantów tras (report, timeline, prompt natal/period, horoscope natal/period, stream natal/period): pula ma dotrzeć do każdego zbudowanego klienta i przynajmniej jeden musi naprawdę zapytać bazę; bez puli — pusta. Horoskop kończy się na nieznanym dostawcy LLM, więc bez sieci i klucza.
    • Na kodzie sprzed poprawki pada dokładnie 7 tras, które gubiły pulę; report przechodzi.
  • services/astroklient/tests — osobna sonda (osobny proces, złożone drzewo jak w Dockerfile) przepuszcza prawdziwe żądanie przez bramkę sesji do trasy w miejscu modułu; strumień konsumowany leniwie jak w moduly/dodatki/trasy.py; w payloadzie podsunięty cudzy login.
    • Przed poprawką strumień wysyłał ktos-inny, po — klient.

Lokalnie: logic 358 passed / 1 skipped (swisseph), astroklient 16 passed.

🤖 Generated with Claude Code

## Co było nie tak `/chart/report` przekazywał pulę konta do warstwy danych, ale reszta tras szukających w bazach — nie: | Trasa | Przed | Po | |---|---|---| | `/chart/timeline` (`interpret=true`) | `TimelineRequest.tenant` istniał, ale `DataClient()` bez puli | `DataClient(tenant=req.tenant)` | | `/chart/prompt` natal | brak pola `tenant`, `build_report(..., DataClient())` | pole + `DataClient(tenant=req.tenant)` | | `/chart/prompt` period | j.w., `interpret_events(events, DataClient())` | j.w. | | `/chart/horoscope`, `/chart/horoscope/stream` | dziedziczą po `/chart/prompt` | `HoroscopeRequest` dziedziczy pole | Puste `tenant` = cały udział, więc pełna aplikacja (prezentacja, która puli nie wysyła) zachowuje się jak dotąd. ## Klienci - **astroklient** — `_post` (a więc też `wywolaj` → prompt/horoskop) już dokładał pulę z kontekstu sesji. **Strumień** (`strumien`, używany przez `/chart/horoscope/stream`) szedł obok `_post` i wysyłał payload bez zmian — poprawione, z tym samym pierwszeństwem kontekstu nad polem z payloadu. Modułu generowania w obrazie astroklienta dziś nie ma (`usun.txt`), ale most modułów zostaje celowo, więc transport musi być szczelny. - **astrodemo** — bez zmian: klient jest celowo okrojony do `report` + plików (PRE-28) i nie woła promptu, horoskopu ani osi czasu. Dopisanie tych metod byłoby sprzeczne z PRE-28. ## Testy (wywołania tras, nie grep) - `services/logic/tests/test_tenant_routes.py` — `TestClient(main.app)`, prawdziwy silnik Skyfield, szpieg w miejscu `DataClient`. Dla 8 wariantów tras (report, timeline, prompt natal/period, horoscope natal/period, stream natal/period): pula ma dotrzeć do każdego zbudowanego klienta i przynajmniej jeden musi naprawdę zapytać bazę; bez puli — pusta. Horoskop kończy się na nieznanym dostawcy LLM, więc bez sieci i klucza. - Na kodzie sprzed poprawki pada dokładnie 7 tras, które gubiły pulę; `report` przechodzi. - `services/astroklient/tests` — osobna sonda (osobny proces, złożone drzewo jak w Dockerfile) przepuszcza prawdziwe żądanie przez bramkę sesji do trasy w miejscu modułu; strumień konsumowany leniwie jak w `moduly/dodatki/trasy.py`; w payloadzie podsunięty cudzy login. - Przed poprawką strumień wysyłał `ktos-inny`, po — `klient`. Lokalnie: logic 358 passed / 1 skipped (swisseph), astroklient 16 passed. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
gitea added 2 commits 2026-10-04 11:28:23 +00:00
/chart/report przekazywał pulę do warstwy danych, ale /chart/timeline
(interpret=true) i /chart/prompt — a przez niego /chart/horoscope
i /chart/horoscope/stream — budowały DataClient() bez puli, czyli szukały
w całym udziale. TimelineRequest miał pole tenant i je gubił; PromptRequest
nie miał go wcale.

PromptRequest dostaje tenant (HoroscopeRequest dziedziczy), a wszystkie trzy
miejsca budują DataClient(tenant=req.tenant).

Testy wołają trasy przez TestClient z prawdziwym silnikiem i szpiegiem
w miejscu DataClient: pula ma dotrzeć do każdego klienta, który naprawdę
pytał bazę, a bez puli — zostać pusta (pełna aplikacja). Na kodzie sprzed
poprawki pada dokładnie 7 tras, które gubiły pulę; report przechodzi.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
astroklient: strumień do warstwy logicznej też niesie pulę konta
Testy / Testy warstwy logicznej (silnik) (push) Successful in 11m1s
Testy / Testy warstwy prezentacji (dostęp do baz) (push) Successful in 9m30s
Testy / Testy warstwy bazodanowej (ochrona baz) (push) Successful in 9m25s
Testy / Testy astrodemo (push) Successful in 9m25s
Testy / Testy astroklient (push) Successful in 9m24s
Testy / Build obrazu silnika B (swisseph) (push) Successful in 21s
Testy / Kontrola składni wszystkich warstw (push) Successful in 5s
Testy / Testy warstwy logicznej (silnik) (pull_request) Successful in 10m25s
Testy / Testy warstwy prezentacji (dostęp do baz) (pull_request) Successful in 9m29s
Testy / Testy warstwy bazodanowej (ochrona baz) (pull_request) Successful in 9m25s
Testy / Testy astrodemo (pull_request) Successful in 9m25s
Testy / Testy astroklient (pull_request) Successful in 9m25s
Testy / Build obrazu silnika B (swisseph) (pull_request) Successful in 7s
Testy / Kontrola składni wszystkich warstw (pull_request) Successful in 5s
4102039447
_post dokłada pulę z kontekstu sesji do każdego żądania, ale strumień
(używany przez /chart/horoscope/stream) szedł obok niego i wysyłał payload
bez zmian. Generowania w tym obrazie dziś nie ma, ale most modułów zostaje
celowo — po dołożeniu modułu horoskop strumieniowany szukałby w całym
udziale, a pole tenant podsunięte w payloadzie przeszłoby dalej.

Sonda w osobnym procesie przepuszcza prawdziwe żądanie przez bramkę sesji
do trasy w miejscu modułu (prompt, horoskop, strumień konsumowany leniwie)
i podsuwa cudzy login w payloadzie. Przed poprawką strumień wysyłał
„ktos-inny", po — konto z sesji.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Some checks are pending
Testy / Testy warstwy logicznej (silnik) (push) Successful in 11m1s
Testy / Testy warstwy prezentacji (dostęp do baz) (push) Successful in 9m30s
Testy / Testy warstwy bazodanowej (ochrona baz) (push) Successful in 9m25s
Testy / Testy astrodemo (push) Successful in 9m25s
Testy / Testy astroklient (push) Successful in 9m24s
Testy / Build obrazu silnika B (swisseph) (push) Successful in 21s
Testy / Kontrola składni wszystkich warstw (push) Successful in 5s
Testy / Testy warstwy logicznej (silnik) (pull_request) Successful in 10m25s
Testy / Testy warstwy prezentacji (dostęp do baz) (pull_request) Successful in 9m29s
Testy / Testy warstwy bazodanowej (ochrona baz) (pull_request) Successful in 9m25s
Testy / Testy astrodemo (pull_request) Successful in 9m25s
Testy / Testy astroklient (pull_request) Successful in 9m25s
Testy / Build obrazu silnika B (swisseph) (pull_request) Successful in 7s
Testy / Kontrola składni wszystkich warstw (pull_request) Successful in 5s
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin fix/pre29-tenant-prompt-timeline:fix/pre29-tenant-prompt-timeline
git checkout fix/pre29-tenant-prompt-timeline
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gitea/astrololo#87