Consulting Work Blog Kontakt
← Zpět na blog

Instrukce, která smazala špatných šestadvacet jazyků

Instrukce, která smazala špatných šestadvacet jazyků

Řekl jsem automatizaci vlastního webu, ať zmenší blog na čtyři jazyky. O dva dny později jsem zjistil, že tiše smazala i šestadvacet jazyků z domovské stránky, a nevšiml si toho ani jeden návštěvník, natož já.

TL;DR

  • Jedna instrukce mířená na sekci blogu se místo toho aplikovala na celý web.
  • 26 z 30 jazyků zmizelo z domovské stránky, ze stránky životopisu a ze všech textů navigace.
  • Nic nespadlo a nikde nenaskočila 404, takže si toho dva dny nikdo nevšiml.
  • Oprava vzešla z historie gitu, ne z paměti, jak web dřív vypadal.
  • Skutečné ponaučení: než automatizovaná změna proběhne, pojmenuj přesné soubory, kterých se dotkne, a ten seznam si přečti dřív, než se cokoliv smaže.

Proč jsem chtěl méně jazyků

Za pár měsíců mi web narostl na třicet jazyků: domovská stránka, životopis a blog, který aktualizuji skoro každých pár dní. Už jsem dřív psal o tom, jak nebezpečné to může být: strojový překlad je dost plynulý na to, aby vypadal v pořádku, a dost špatný na to, aby vás ztrapnil, navíc v jazyce, který si sami neumíte ověřit. Domovská stránka a životopis se mění málokdy, takže jsem toto riziko unesl. Blog byl jiný případ. Nové příspěvky vychází často a za kvalitu překladu čerstvého článku do estonštiny v den jeho publikace opravdu ručit nemůžu.

Rozhodl jsem se tedy zúžit sadu jazyků, do kterých se blog překládá, na čtyři, kterým věřím natolik, že si je dokážu sám ověřit: angličtina, ruština, němčina, čeština. Všechno ostatní zůstane u blogu vypnuté, dokud nenajdu lepší způsob, jak to ověřovat. Tahle část plánu byla v pořádku. Co selhalo, byl způsob, jakým jsem o to požádal.

Jedna věta, špatný rozsah

Zadal jsem jednu instrukci: nech u blogu jen čtyři jazyky. Krátká, konkrétní, aspoň jsem si to myslel. To, co se ve skutečnosti spustilo, zasáhlo tři různé věci najednou. Správně ořezalo vlastní obsahové složky blogu na čtyři jazyky, které jsem chtěl. Zároveň ale přepsalo hlavní seznam jazyků webu, tedy konfigurační soubor, který určuje, jaké jazyky vůbec existují, a smazalo obsah domovské stránky i texty navigace pro zbývajících šestadvacet.

Problém je v tom, že „blog" a „seznam jazyků celého webu" sídlí ve stejném konfiguračním souboru. Nic v něm nerozlišuje, které jazyky podporuje blog a které web jako celek. Když jazyk ze seznamu odeberete, přijde o něj jednou ranou každá sekce, která z něj čte, domovskou stránku nevyjímaje. Moje instrukce pojmenovala sekci. Změna, která se skutečně provedla, měla rozsah úplně všeho.

A tohle je část, která to dělá nebezpečným, ne jen chybným: nic hlasitě neselhalo. Žádná chyba, žádná 404, žádný pád buildu. Web prostě tiše přestal generovat domovskou stránku a životopis pro šestadvacet jazyků a přepínač jazyků je přestal nabízet. Návštěvník, který dřív web četl portugalsky, teď mlčky skončil na angličtině. Smazáno vypadá úplně stejně jako nikdy neexistovalo, a ani jedno z toho nehlásí chybu.

Trvalo dva dny, než jsem si toho všiml, a to jen náhodou, uprostřed nesouvisející opravy, kdy odkaz „Blog" v navigaci mířil někam divně u jednoho z jazyků, o kterém jsem si myslel, že je pořád živý. Tenhle jediný viselý odkaz byl jediná viditelná stopa k celému problému.

Co skutečně ukázal diff

Skutečné selhání tady není samotná chyba v rozsahu. Je to to, že jsem si nikdy nezkontroloval seznam souborů, kterých se změna doopravdy dotkne, než jsem ji nechal proběhnout. Přečetl jsem si jednořádkový popis toho, co má udělat, a předpokládal jsem, že popisuje i to, co skutečně udělala. Nepopisoval.

Oprava začala jednou otázkou: co se změnilo a kde. Porovnal jsem živý web s posledním commitem před instrukcí „ořež blog" a odpověď byla okamžitá a jednoznačná: hlavní konfigurace jazyků, obsahová složka domovské stránky a šestadvacet souborů s texty pro jednotlivé jazyky, z nichž žádný neležel ani blízko složky blogu. Git měl všechny tyto soubory přesně tak, jak měly být. Nic se doopravdy neztratilo, jen to bylo přepsáno novým nasazením.

Z té historie jsem obnovil domovskou stránku, životopis a texty navigace pro všech třicet jazyků a složku blogu jsem nechal přesně tak ořezanou, jak jsem chtěl: čtyři jazyky, záměrně. Zbyl jeden nedodělek. Odkaz „Blog" v navigaci u obnoveného jazyka dřív mířil na jazykovou verzi blogu, která už neexistuje. Duplikovat čtyři příspěvky do dalších šestadvaceti jazyků jen kvůli jednomu odkazu se nevyplatilo, takže jsem šablonu nastavil tak, aby místo toho přesměrovávala na anglický blog, a tak to nechal.

Jedna instrukce, špatný rozsah: jazyky domovské stránky a životopisu se zhroutily na čtyři a o dva dny později se vrátily zpátky na třicet, zatímco blog zůstal u čtyř jazyků, které byly opravdu zamýšlené

Co bych příště zkontroloval jinak

Než teď nechám jakoukoliv automatizovanou změnu sáhnout na živý web s víc sekcemi, položím si nahlas jednu otázku navíc: pojmenuj přesné soubory, kterých se to dotkne, ne funkci, kterou to má opravit. Pokud je odpověď vágní, je to signál zastavit se a zkontrolovat, ne to pustit a uvidět. A než se cokoliv smaže, chci mít před sebou skutečný seznam souborů, ne jednořádkové shrnutí toho, co instrukce asi měla znamenat. Slovo popisující rozsah v instrukci, „blog", „tenhle tým", „jen frontend", automaticky neznamená stejný rozsah jako změna, kterou ta instrukce spustí, a shoda mezi nimi platí jen tehdy, když to někdo doopravdy ověřil. A to je přesně otázka, kterou bych teď položil zpátky vám: jaká je ta nejmenší, nejjistěji ohraničená instrukce, kterou jste v poslední době zadali a nikdy jste nezkontrolovali, čeho se opravdu dotkla?

Stack: Hugo · Claude Code · Git

Potřebujete něco podobného pro svou vlastní firmu? Podívejte se, jak můžu pomoct →