Pad vykreslovani uz nesmi shodit stranku a sam zaklada incident

Ukazka tela webhooku shazovala builder pri psani cesty parametru. Chyba sama
byla na jednom radku, ale to podstatne je, ze jedna vyjimka pri vykreslovani
odstranila celou stranku. Uzivateli zustala bila plocha a rozdelana prace byla
pryc. Aplikace na to nemela zadnou pojistku, takze totez mohlo prijit odkudkoli.

Pojistka:
- nova web/src/components/ErrorBoundary.tsx obaluje obsah portalu. Mistni chyba
  ted shodi svoji cast obrazovky, ne aplikaci: navigace, prepinac firmy
  i odhlaseni zustanou funkcni. Odchod jinam pojistku srovna zpatky
- je to jedina trida v celem klientovi, React to jinak zachytit neumi

Incident:
- POST /api/dashboard/client-crash zaklada incident z padu. Bez toho je jedina
  stopa v konzoli prohlizece uzivatele, kam se nikdo nedostane
- title a impact cte zakaznik, detail cte spravce platformy: hlaska, misto
  v kodu, strom komponent, adresa stranky, ucet, prohlizec a verze buildu
- verze buildu je tam schvalne. U tohohle padu se ukazalo, ze bez ni se neda
  poznat, jestli uzivatel vidi chybu, ktera uz je opravena, nebo novou
- tentyz pad na tomtez miste zalozi incident nejvys jednou za deset minut. Pad
  pri vykreslovani se opakuje pri kazdem prekresleni

Sama ukazka:
- parametr, kterym vede cesta jineho parametru, uz nedostane zastupnou hodnotu
  podle typu. Kdyz je jeden parametr `data` a druhy `data.result`, `data` musi
  byt objekt a zastupna hodnota by ho prepsala
- cela ukazka je v try. Je to napoveda a nesmi shodit ani ten kus obrazovky

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
JiriUhlir
2026-08-28 11:37:19 +02:00
co-authored by Claude Opus 5
parent 00d9d2d4b1
commit 35d1e43307
8 changed files with 364 additions and 2 deletions
+6
View File
@@ -60,6 +60,12 @@ Chyba cizi sluzby neni chyba API: vraci se 200 s `ok: false` a **celym telem
odpovedi**, protoze prave tam je napsane, co jí vadilo. "HTTP 403" samo o sobe
nikoho nikam nedovede.
**Vykreslovani nesmi shodit stranku.** Jedna vyjimka pri vykreslovani odstrani
cely strom a zustane bila plocha. Obsah portalu je proto v pojistce
(`ErrorBoundary`) a pad z ni **zaklada incident** - bez toho je jedina stopa
v konzoli prohlizece uzivatele. Pomocna funkce, ktera jen neco vykresluje,
si navic ma chybu osetrit sama a degradovat, ne spadnout.
**Katalog je zdroj pravdy.** Co neni v `src/data/services.ts`, to nejde ulozit
do stromu. Validace pri ukladani se pta katalogu, ne klienta.
+1
View File
@@ -39,6 +39,7 @@ React aplikaci ze slozky `dist/public`.
| Odesilani souboru ze skriptu | hotovo | `ctx.http.postForm`, obsah jako Base64 |
| OpenAI pod vlastnim klicem | hotovo | dotaz, soubor, prepis zvuku, seznam modelu |
| Konektory za firmu | hotovo | pristupove udaje v konektoru, overeni napojeni |
| Pojistka proti padu portalu | hotovo | pad shodi jen svoji cast a sam zalozi incident |
| MCP servery firmy | hotovo | obecna sluzba a MCP EasyWebu vcetne klice zarizeni |
| Transformace dat | hotovo | pravidla i sablona JSON, kroky si predavaji struktury |
| Prace nad celym modelem | hotovo | ukazka tela, cesty v sablonach, smycka nad seznamem |
+47
View File
@@ -2,6 +2,53 @@
Nejnovejsi nahore.
## 2026-08-28 - pad portalu uz nesmi shodit stranku a zaklada incident
Ukazka tela webhooku shazovala cely builder pri psani cesty parametru. Chyba
sama byla na jednom radku, ale to podstatne je, **ze jedna vyjimka pri
vykreslovani odstranila celou stranku**. Uzivateli zustala bila plocha a
rozdelana prace byla pryc. Aplikace na to nemela zadnou pojistku.
### Pojistka proti padu vykreslovani
Nova `web/src/components/ErrorBoundary.tsx` obaluje obsah portalu. Mistni chyba
ted shodi svoji cast obrazovky, ne aplikaci: navigace, prepinac firmy
i odhlaseni zustanou funkcni a uzivatel ma kam odejit. Odchod na jinou stranku
pojistku srovna zpatky.
Je to jedina trida v celem klientovi. Hook na tohle neni a nebude, React to
umi zachytit jen takhle.
### Pad zaklada incident
`POST /api/dashboard/client-crash`. Bez toho je jedina stopa v konzoli
prohlizece uzivatele, kam se nikdo nedostane - takze bychom o padu vedeli jen
tehdy, kdyby ho nekdo nahlasil. To znamena o vetsine padu nevedet.
Incident nese dve casti, stejne jako ostatni incidenty:
- `title` a `impact` cte zakaznik, tedy zadne stack trace,
- `detail` cte spravce platformy: hlaska, misto v kodu, strom komponent, adresa
stranky, ucet, prohlizec a **verze buildu**.
Verze buildu je tam schvalne. U tohohle padu se ukazalo, ze bez ni se neda
poznat, jestli uzivatel vidi chybu, ktera uz je opravena, nebo novou.
Tentyz pad na tomtez miste zalozi incident nejvys jednou za deset minut. Pad
pri vykreslovani se opakuje pri kazdem prekresleni a jinak by z jedne chyby
vzniklo padesat incidentu a ten pravy by v nich zapadl.
### Sama ukazka
- Do cesty parametru se da zanorit vzdy. Kdyz na miste je skalar, nahradi se
schrankou - driv se zapisovalo do retezce a to shodilo stranku.
- Parametr, kterym vede cesta jineho parametru, uz nedostane zastupnou hodnotu
podle typu. Plati vnitrni struktura: kdyz je jeden parametr `data` a druhy
`data.result`, **`data` musi byt objekt**. Zastupna hodnota by ho prepsala.
- Cela ukazka je navic v `try`. Je to napoveda a nesmi shodit ani ten kus
obrazovky, at uz do ni prijde cokoliv - parametry se pisou znak po znaku
a rozdelany stav je normalni.
## 2026-08-28 - MCP EasyWeb podle skutecne specifikace (auth v2)
Predchozi verze posilala na `/login` jen jmeno, heslo a nazev zarizeni. Server