astrodemo: zmiana nazwy, rebase i domknięcie wycieków (1/5) #79
Reference in New Issue
Block a user
Delete Branch "feat/astrodemo"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Pierwszy z pięciu kroków budowy trzech produktów. Zastępuje #74 — tamten PR stoi na nieaktualnym masterze i na starej nazwie, można go zamknąć.
Nazwa
astroklientzostaje zwolniona dla warstwy pośredniej, więc dotychczasoweastroklient-demoto teraz astrodemo.Rebase
Cztery commity demo przeniesione na aktualnego mastera. Konflikt był jeden: rejestr wymagań (xlsx — git go nie scali). Master dodał LOG-34, gałąź demo PRE-28 i PRE-29, żaden wspólny wiersz się nie różnił. Scalone ręcznie, sprawdzone: 148 pozycji, wszystkie trzy obecne.
Ponieważ #74 nigdy nie wszedł, astrodemo nie jest nigdzie wdrożone — zmiana nazw niczego nie migruje i nikogo nie wylogowuje.
Wycieki
astrodemo powstało przed audytem, więc miało komplet tych samych dziur co astrololo:
/staticomijało bramkę, a pierwszy komentarz wstyles.cssbrzmiał „Nie kopiujemy stylów pełnej aplikacji". Anonimowycurldowiadywał się, że istnieje pełna aplikacja.httpx— z nazwą usługi i portem./healthoddawał nazwę warstwy.main.pytwierdził, że demo dzieli pulę plików z produkcją — nieprawda od PRE-29.Zapora słownikowa, dwupoziomowa
Poziom „wszędzie" (także w kodzie serwera, bo obraz się oddaje): wzmianki o większym rodzeństwie, o modelu językowym, o funkcjach, których tu nie ma. Poziom „do przeglądarki" dokłada słownictwo mechanizmów. Test sprawdza odpowiedzi oraz drzewo plików.
Jeden wyjątek jest jawny i opisany: stałe protokołu łącza (
X-Astrololo-Token,X-Astrololo-Enc, typ treści, etykieta HKDF) niosą nazwę rodziny produktów. Są wspólne z warstwą logiczną, więc zmiana wymaga jednoczesnej podmiany we wszystkich usługach i rotacji sekretów — to osobna decyzja. Osobny test pilnuje warunku, pod jakim to zostaje: że nie docierają do przeglądarki.Warto wiedzieć, że wcześniej przechodziły tylko dlatego, że mój regex nie dopasowywał po myślniku. To był przypadek, nie decyzja — sprawdziłem, czy ta ślepa plamka nie kryje czegoś jeszcze (nie kryje) i zamieniłem ją w jawny wyjątek.
Przy okazji
Komunikat
"ramka bez znacznika astrololo"zmieniony na neutralny we wszystkich pięciu kopiachlink_crypto.py. Tak — pięciu: presentation, astrodemo, logic, data, render, po 525 linii każda. To 2625 linii tego samego kodu i najlepszy argument za rdzeniem współdzielonym z PR 3.Testy
astrodemo 27 · presentation 358 · logic 342 · data 42 · render 41.
Następne kroki: (2) wydzielenie AI w astrololo do
app/ai/, (3) rdzeń współdzielony, (4) nowa usługa astroklient, (5) CI i compose. Przed PR 4 potrzebuję decyzji o zakresie astroklienta — Skompiluj, Ustawienia, eksport, geokoder.Demo idzie szeroko i do różnych osób, często na cudzych komputerach — więc wyjście z aplikacji jest tu potrzebne bardziej niż w pełnej wersji, a Basic go nie miał: przeglądarka zapamiętuje hasło i dosyła je sama przy każdym żądaniu. Pierwszy klient zostawiał otwartą sesję drugiemu. Ta sama konstrukcja co w pełnej aplikacji: własny ekran logowania, podpisane ciasteczko (HMAC-SHA256), HttpOnly + SameSite=Strict, wylogowanie POST-em, kres bezczynności i twardy, sito na adres powrotu, zdarzenia w dzienniku bez haseł. Moduł session.py skopiowany, tak samo jak link_crypto — usługi są osobnymi obrazami i nie importują się nawzajem. DWIE RÓŻNICE WOBEC PEŁNEJ WERSJI, obie wynikające z tego, że demo nie ma własnego wolumenu: * nazwa ciasteczka jest inna. Gdyby obie aplikacje stanęły kiedyś pod jedną domeną, ciasteczka o tej samej nazwie nadpisywałyby się i człowiek wypadałby z jednej, logując się do drugiej. * nie ma licznika pokolenia sesji, bo nie ma go gdzie zapisać. Zdalne unieważnienie robi się przez DEMO_USERS: usunięcie konta albo zmiana hasła NATYCHMIAST ubija jego otwarte sesje, bo odcisk poświadczenia w ciasteczku przestaje pasować. Osobny test tego pilnuje. Wylogowanie i tak działa natychmiast, bo polega na skasowaniu ciasteczka. Klucz podpisu jest WŁASNY, nie ten z pełnej aplikacji: demo i produkcja nie mają powodu uznawać nawzajem swoich sesji, a wspólny klucz znaczyłby, że sesja z demo bywa ważna tam, gdzie nie powinna. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>