Inštrukcia, ktorá vymazala nesprávnych dvadsaťšesť jazykov

Vlastnej automatizácii webu som zadal, nech zmenší blog na štyri jazyky. O dva dni neskôr som zistil, že popritom potichu vymazala aj dvadsaťšesť jazykov z domovskej stránky, a nevšimol si to ani jeden návštevník, nieto ešte ja.
TL;DR
- Jedna inštrukcia mierená na sekciu blogu sa namiesto toho aplikovala na celý web.
- 26 z 30 jazykov zmizlo z domovskej stránky, zo stránky životopisu a zo všetkých textov navigácie.
- Nič nespadlo a nikde nenaskočila chyba 404, takže si toho dva dni nikto nevšimol.
- Opravu priniesla história gitu, nie spomienka na to, ako web kedysi vyzeral.
- Skutočné ponaučenie: skôr než automatizovaná zmena prebehne, pomenuj presné súbory, ktorých sa dotkne, a ten zoznam si prečítaj skôr, než sa čokoľvek zmaže.
Prečo som chcel menej jazykov
Za pár mesiacov mi web narástol na tridsať jazykov: domovská stránka, životopis a blog, ktorý aktualizujem skoro každých pár dní. Už som predtým písal o tom, aké je to nebezpečné: strojový preklad je dosť plynulý na to, aby vyzeral v poriadku, a dosť zlý na to, aby vás zahanbil, navyše v jazyku, ktorý si sám neviete overiť. Domovská stránka a životopis sa menia málokedy, takže toto riziko som uniesol. Blog bol iný prípad. Nové príspevky vychádzajú často a za kvalitu prekladu čerstvého článku do estónčiny v deň jeho publikovania naozaj ručiť neviem.
Rozhodol som sa teda zúžiť množinu jazykov, do ktorých sa blog prekladá, na štyri, ktorým dôverujem natoľko, že si ich viem sám overiť: angličtina, ruština, nemčina, čeština. Všetko ostatné zostane pri blogu vypnuté, kým nenájdem lepší spôsob, ako to overovať. Táto časť plánu bola v poriadku. Zlyhal spôsob, akým som o to požiadal.
Jedna veta, nesprávny rozsah
Zadal som jednu inštrukciu: nechaj pri blogu len štyri jazyky. Krátka, konkrétna, aspoň som si to myslel. To, čo sa v skutočnosti spustilo, zasiahlo tri rôzne veci naraz. Správne orezalo vlastné obsahové priečinky blogu na štyri jazyky, ktoré som chcel. Zároveň ale prepísalo hlavný zoznam jazykov webu, teda konfiguračný súbor, ktorý určuje, aké jazyky vôbec existujú, a zmazalo obsah domovskej stránky aj texty navigácie pre zvyšných dvadsaťšesť.
Problém je v tom, že „blog" a „zoznam jazykov celého webu" sídlia v tom istom konfiguračnom súbore. Nič v ňom nerozlišuje, ktoré jazyky podporuje blog a ktoré web ako celok. Keď jazyk zo zoznamu odoberiete, príde oň jednou ranou každá sekcia, ktorá z neho číta, domovskú stránku nevynímajúc. Moja inštrukcia pomenovala sekciu. Zmena, ktorá sa naozaj vykonala, mala rozsah úplne všetkého.
Tu je časť, ktorá to robí nebezpečným, nielen chybným: nič hlasno nezlyhalo. Žiadna chyba, žiadna 404, žiadny pád buildu. Web jednoducho potichu prestal generovať domovskú stránku a životopis pre dvadsaťšesť jazykov a prepínač jazykov ich prestal ponúkať. Návštevník, ktorý predtým čítal web po portugalsky, teraz mlčky skončil na angličtine. Zmazané vyzerá presne rovnako ako nikdy neexistovalo, a ani jedno z toho nehlási chybu.
Trvalo dva dni, kým som si to všimol, a to len náhodou, uprostred nesúvisiacej opravy, keď odkaz „Blog" v navigácii mieril kamsi divne pri jednom z jazykov, o ktorom som si myslel, že je stále živý. Tento jediný visiaci odkaz bol jediná viditeľná stopa k celému problému.
Čo skutočne ukázal diff
Skutočné zlyhanie tu nie je samotná chyba v rozsahu. Je to to, že som si nikdy neskontroloval zoznam súborov, ktorých sa zmena naozaj dotkne, skôr než som ju nechal prebehnúť. Prečítal som si jednoriadkový popis toho, čo má urobiť, a predpokladal som, že opisuje aj to, čo naozaj urobila. Neopisoval.
Oprava sa začala jednou otázkou: čo sa zmenilo a kde. Porovnal som živý web s posledným commitom spred inštrukcie „orež blog" a odpoveď bola okamžitá a jednoznačná: hlavná konfigurácia jazykov, obsahový priečinok domovskej stránky a dvadsaťšesť súborov s textami pre jednotlivé jazyky, z ktorých žiadny neležal ani blízko priečinka blogu. Git mal všetky tieto súbory presne také, aké mali byť. Nič sa naozaj nestratilo, len to bolo prepísané novým nasadením.
Z tejto histórie som obnovil domovskú stránku, životopis a texty navigácie pre všetkých tridsať jazykov a priečinok blogu som nechal presne tak orezaný, ako som chcel: štyri jazyky, zámerne. Zostal jeden nedorobok. Odkaz „Blog" v navigácii pri obnovenom jazyku predtým mieril na jazykovú verziu blogu, ktorá už neexistuje. Duplikovať štyri príspevky do ďalších dvadsiatich šiestich jazykov len kvôli jednému odkazu sa neoplatilo, takže som šablónu nastavil tak, aby namiesto toho presmerovávala na anglický blog, a tak som to nechal.

Čo by som nabudúce skontroloval inak
Skôr než teraz nechám akúkoľvek automatizovanú zmenu siahnuť na živý web s viacerými sekciami, položím si nahlas jednu otázku navyše: pomenuj presné súbory, ktorých sa to dotkne, nie funkciu, ktorú to má opraviť. Ak je odpoveď vágna, je to signál zastaviť sa a skontrolovať, nie to spustiť a uvidieť. A skôr než sa čokoľvek zmaže, chcem mať pred sebou skutočný zoznam súborov, nie jednoriadkové zhrnutie toho, čo inštrukcia asi mala znamenať. Slovo opisujúce rozsah v inštrukcii, „blog", „tento tím", „len frontend", automaticky neznamená rovnaký rozsah ako zmena, ktorú tá inštrukcia spustí, a zhoda medzi nimi platí len vtedy, keď to niekto naozaj overil. A presne to je otázka, ktorú by som teraz položil späť vám: aká je tá najmenšia, najistejšie ohraničená inštrukcia, ktorú ste v poslednom čase zadali a nikdy ste neoverili, čoho sa naozaj dotkla?
Need something like this for your own business? See how I can help →
Get the AI Audit Kickoff Checklist
Fifteen questions to ask about your own processes before you spend a cent on AI. The same first hour I run in a real audit, as a one-page PDF. Drop your email and you get it right away, plus the occasional note when I write something worth your time. No spam, unsubscribe in one click.