feat(render): raport PDF przez LaTeX jako osobna usługa (PRE-24) #32
Reference in New Issue
Block a user
Delete Branch "feat/pre24-pdf-render"
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?
Ostatnia z ośmiu wskazówek partnerów. Nowa usługa
services/rendergeneruje plikpośredni
.texi kompiluje go XeLaTeX-em do PDF.Szyfrowanie — o które prosiłeś
Łącze prezentacja↔render idzie tak samo jak pozostałe, ale z własnym, trzecim
kluczem (
LINK_KEY_PRESENTATION_RENDER). Osobny, bo tym łączem płynie całyraport — dane urodzeniowe i opisy z baz — więc przejęcie go nie może otwierać
łącza do logiki ani do danych. Fail-closed: bez klucza pod nie wstaje. Test kopii
link_cryptoobejmuje teraz cztery usługi.Zweryfikowane na żywo: żądanie bez szyfrowania z poprawnym tokenem → 400;
obcy klucz → 400, tajny opis nie wraca; właściwy klucz → żądanie dochodzi,
treści baz nie ma na kablu, odpowiedź zaszyfrowana.
Układ PDF wg prośby
imię i nazwisko → wprowadzone dane → rysunek kosmogramu → interpretacja
natalna → predykcje okresowe. Test pilnuje kolejności.
Dwie rzeczy, które wyszły dopiero przy składaniu
Kosmogram nie nadawał się do PDF. Używa zmiennych CSS i klasy
.glyph, którejfont podaje
styles.css— a samodzielny konwerter SVG→PDF nie zna naszegoarkusza. Wyszłyby czarne kreski bez symboli. Stąd wariant
print: konkretnekolory na białym tle i font glifów wpisany wprost w rysunek. Przy okazji załatwia
to etap 4 planu koła (wariant do druku).
Ucieczka znaków LaTeXa była zepsuta — i złapał to mój własny test. Zamiana
\na\textbackslash{}szła w tej samej pętli co nawiasy, więc kolejne podmianyuciekały nawiasy dopiero co wstawione. To nie kosmetyka: niezauważony
%komentuje resztę linii, więc zdanie od modelu urywałoby się w połowie, a PDF
powstawałby normalnie — tylko krótszy. Test na wrogim tekście sprawdza też, że
\end{document}ani\input{}nie wyrwą się z dokumentu.Hartowanie
Usługa nie zapisuje nic poza katalogiem tymczasowym, który sprząta po sobie;
w manifeście
readOnlyRootFilesystem+emptyDirna/tmp./healthraportujeobecność
xelatexirsvg-convert— zepsuty obraz widać od razu, a nie przypierwszym raporcie. Dockerfile sprawdza oba narzędzia przy budowie.
⚠️ Czego NIE sprawdziłem
Samej kompilacji PDF. W tym środowisku nie ma ani TeX Live, ani działającego
runtime'u kontenerów (docker CLI jest, daemon nie — próbowałem zbudować obraz
i się nie dało). Sprawdzone jest wszystko dookoła: generowanie
.tex, ucieczkaznaków, szyfrowanie, kontrakt API, samowystarczalność SVG.
Pierwsze uruchomienie na klastrze trzeba obejrzeć — dlatego PRE-24 zostaje
w wymaganiach jako „W trakcie", nie „Zrobione".
Testy
15 nowych (render) + 14 (łącze i wariant druku). Całość: prezentacja 131,
logika 265 / 1 skip, render 15.
Ostatnia z osmiu wskazowek partnerow. Nowa usluga services/render sklada raport: generuje plik posredni .tex i kompiluje go XeLaTeX-em do PDF. OSOBNY komponent, nie czesc prezentacji — ta sama zasada co przy izolacji swissepha (LOG-27). TeX Live wazy setki megabajtow; w obrazie produktu spowalnialby kazdy build, a tak aktualizuje sie niezaleznie i jego awaria nie kladzie aplikacji, tylko przycisk „Pobierz PDF". SZYFROWANIE, o ktore prosiles: lacze prezentacja↔render idzie tak samo jak pozostale, ale z WLASNYM, TRZECIM kluczem (LINK_KEY_PRESENTATION_RENDER). Osobny, bo tym laczem plynie CALY raport — dane urodzeniowe i opisy z baz — wiec przejecie go nie moze otwierac lacza do logiki ani do danych. Fail-closed: bez klucza pod nie wstaje. Test kopii link_crypto obejmuje teraz cztery uslugi. Uklad PDF wg prosby: imie i nazwisko -> wprowadzone dane -> RYSUNEK kosmogramu -> interpretacja natalna -> predykcje okresowe. Test pilnuje kolejnosci. Dwie rzeczy, ktore wyszly dopiero przy skladaniu tego kawalka: 1. KOSMOGRAM NIE NADAWAL SIE DO PDF. Uzywa zmiennych CSS (var(--line)) i klasy .glyph, ktorej font podaje styles.css — a samodzielny konwerter SVG→PDF nie zna naszego arkusza. Wyszlyby czarne kreski BEZ SYMBOLI. Stad wariant „print": konkretne kolory na bialym tle i font glifow wpisany wprost w rysunek. Przy okazji zalatwia to etap 4 planu kola (wariant do druku). 2. UCIECZKA ZNAKOW LATEXA byla zepsuta — i zlapal to moj wlasny test. Zamiana „\” na \textbackslash{} szla w tej samej petli co nawiasy, wiec kolejne podmiany ucieklyby nawiasy dopiero co wstawione: wychodzilo \textbackslash\{\}. Poprawka: ukosnik chowany pod znacznik zastepczy i rozwijany na koncu. To nie kosmetyka — niezauwazony „%” komentuje RESZTE LINII, wiec zdanie od modelu urywaloby sie w polowie, a PDF powstawalby normalnie, tylko krotszy. Test na wrogim tekscie sprawdza tez, ze \end{document} ani \input{} nie wyrwa sie z dokumentu. Usluga nie zapisuje nic poza katalogiem tymczasowym, ktory sprzata po sobie; w manifescie readOnlyRootFilesystem + emptyDir na /tmp. /health raportuje obecnosc xelatex i rsvg-convert, zeby zepsuty obraz bylo widac od razu. Zweryfikowane na zywo (TestClient uslugi render): zadanie bez szyfrowania z POPRAWNYM tokenem -> 400; obcy klucz -> 400 i tajny opis nie wraca; wlasciwy klucz -> zadanie dochodzi do aplikacji, tresci baz NIE MA na kablu, odpowiedz zaszyfrowana. Manifesty przechodza kubectl apply --dry-run=server na zywym klastrze. CZEGO NIE SPRAWDZILEM: samej kompilacji PDF. W tym srodowisku nie ma ani TeX Live, ani dzialajacego runtime'u kontenerow (docker CLI jest, daemon nie) — probowalem zbudowac obraz i sie nie dalo. Sprawdzone jest wszystko dookola: generowanie .tex, ucieczka znakow, szyfrowanie, kontrakt API, samowystarczalnosc SVG. Pierwsze uruchomienie na klastrze trzeba obejrzec — dlatego PRE-24 zostaje jako „W trakcie", nie „Zrobione". Instrukcja wdrozenia: docs/wdrozenie-render-pdf.md (klucz, obraz, merge, weryfikacja, znane ograniczenia). Testy: 15 nowych (render) + 14 (lacze i wariant druku w prezentacji). Calosc: prezentacja 131, logika 265/1 skip, render 15. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.