PRE-27: generowanie tekstu przez model znika bez uprawnienia #77

Merged
gitea merged 1 commits from fix/ukryj-funkcje-ai into master 2026-08-26 09:04:53 +00:00
Owner

Przycisk Generuj prompt, wybór dostawcy, budżet promptu i wybór modelu znikają bez uprawnienia Generowanie tekstu przez model — razem z każdym śladem po nich w źródle strony.

Co było nie tak

Trzy warstwy, nie jedna:

  1. Katalog modeli w każdej stronie. _prompt_block.html wstrzykiwał {{ llm_catalog | tojson }} jako blok JSON — nazwy dostawców, nazwy modeli i rozmiary okien kontekstu — na Interpretacjach i Kalendarzu, niezależnie od uprawnień. To był większy wyciek niż sam przycisk: podgląd źródła opowiadał, co program potrafi.

  2. Handlery nie sprawdzały niczego. Trasa /interpret musi być dostępna dla konta z Interpretacjami, więc mapa trasa → uprawnienie z PRE-27 tu nie pomaga — granica przebiega wewnątrz trasy, po polu action. Spreparowany formularz z action=prompt generował tekst, a action=export pobierał arkusz, mimo że szablon chował oba przyciski.

  3. Ślady poza kontrolkami. Znaczniki natalNote i reportNatal, pliki models.js/progress.js/natal.js/predictions.js, i podtytuł ekranu Skompiluj, który wymieniał „interpretację natalną z AI" z nazwy.

Decyzja projektowa

Akcja bez uprawnienia wraca do akcji domyślnej ekranu, nie daje błędu. Komunikat „brak uprawnień do generowania" sam w sobie mówiłby, że taka funkcja istnieje — czyli łamałby drugą zasadę PRE-27 po to, żeby wyegzekwować pierwszą. Ma wyglądać na literówkę w formularzu.

Testy

12 nowych w test_ukrywanie_ai.py. 9 z nich pada na kodzie sprzed poprawki — sprawdziłem przez git stash na app/ i ponowne uruchomienie, nie przez założenie. Test sprawdza brak 16 konkretnych śladów w źródle, a nie brak przycisku; kontrola pozytywna pilnuje, żeby nie przechodził dlatego, że generowanie jest zepsute dla wszystkich.

Cała prezentacja: 350 zielonych.

Przycisk **Generuj prompt**, wybór dostawcy, budżet promptu i wybór modelu znikają bez uprawnienia *Generowanie tekstu przez model* — razem z każdym śladem po nich w źródle strony. ### Co było nie tak Trzy warstwy, nie jedna: 1. **Katalog modeli w każdej stronie.** `_prompt_block.html` wstrzykiwał `{{ llm_catalog | tojson }}` jako blok JSON — nazwy dostawców, nazwy modeli i rozmiary okien kontekstu — na Interpretacjach i Kalendarzu, niezależnie od uprawnień. To był większy wyciek niż sam przycisk: podgląd źródła opowiadał, co program potrafi. 2. **Handlery nie sprawdzały niczego.** Trasa `/interpret` musi być dostępna dla konta z Interpretacjami, więc mapa `trasa → uprawnienie` z PRE-27 tu nie pomaga — granica przebiega *wewnątrz* trasy, po polu `action`. Spreparowany formularz z `action=prompt` generował tekst, a `action=export` pobierał arkusz, mimo że szablon chował oba przyciski. 3. **Ślady poza kontrolkami.** Znaczniki `natalNote` i `reportNatal`, pliki `models.js`/`progress.js`/`natal.js`/`predictions.js`, i podtytuł ekranu Skompiluj, który wymieniał *„interpretację natalną z AI"* z nazwy. ### Decyzja projektowa Akcja bez uprawnienia **wraca do akcji domyślnej ekranu**, nie daje błędu. Komunikat „brak uprawnień do generowania" sam w sobie mówiłby, że taka funkcja istnieje — czyli łamałby drugą zasadę PRE-27 po to, żeby wyegzekwować pierwszą. Ma wyglądać na literówkę w formularzu. ### Testy 12 nowych w `test_ukrywanie_ai.py`. **9 z nich pada na kodzie sprzed poprawki** — sprawdziłem przez `git stash` na `app/` i ponowne uruchomienie, nie przez założenie. Test sprawdza brak 16 konkretnych śladów w źródle, a nie brak przycisku; kontrola pozytywna pilnuje, żeby nie przechodził dlatego, że generowanie jest zepsute dla wszystkich. Cała prezentacja: **350 zielonych**.
gitea added 1 commit 2026-08-21 11:11:32 +00:00
PRE-27: generowanie tekstu przez model znika bez uprawnienia
Testy / Testy warstwy logicznej (silnik) (pull_request) Successful in 10m20s
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 / Build obrazu silnika B (swisseph) (pull_request) Successful in 5s
Testy / Kontrola składni wszystkich warstw (pull_request) Successful in 5s
build / build (push) Successful in 1m39s
Testy / Testy warstwy logicznej (silnik) (push) Failing after 4m45s
Testy / Testy warstwy prezentacji (dostęp do baz) (push) Successful in 9m32s
Testy / Testy warstwy bazodanowej (ochrona baz) (push) Successful in 9m25s
Testy / Build obrazu silnika B (swisseph) (push) Successful in 7s
Testy / Kontrola składni wszystkich warstw (push) Successful in 6s
1d0ff2f72e
Wymaganie było mocniejsze niż schowanie przycisku: po niedostępnej funkcji nie
może zostać śladu w źródle strony. Największy wyciek nie był przyciskiem —
_prompt_block wstrzykiwał w stronę CAŁY katalog modeli jako JSON (dostawcy,
nazwy modeli, rozmiary okien kontekstu), na każdym ekranie z generowaniem,
niezależnie od uprawnień konta.

Druga dziura była głębsza: handlery nie sprawdzały nic. Trasa /interpret musi
być dostępna dla konta z Interpretacjami, więc granica przebiega WEWNĄTRZ niej,
po polu `action` — spreparowany formularz z action=prompt generował tekst, a
action=export pobierał arkusz, mimo że szablon chował oba przyciski.

Akcja bez uprawnienia wraca do akcji domyślnej ekranu zamiast dawać błąd:
komunikat „brak uprawnień do generowania" sam w sobie mówiłby, że taka funkcja
istnieje.

Ślady wycięte także tam, gdzie nie były kontrolką: znaczniki natalNote/
reportNatal, pliki models.js/progress.js/natal.js/predictions.js oraz podtytuł
ekranu Skompiluj, który wymieniał interpretację od AI z nazwy.

12 testów; 9 z nich pada na kodzie sprzed poprawki (sprawdzone przez cofnięcie
zmian w app/). Kontrola pozytywna pilnuje, żeby nie przechodziły dlatego, że
generowanie jest zepsute dla wszystkich.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
gitea merged commit 1d0ff2f72e into master 2026-08-26 09:04:53 +00:00
gitea deleted branch fix/ukryj-funkcje-ai 2026-08-26 09:04:53 +00:00
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#77