Série./blog.sh v1.47

./blog.sh 1.4

./blog.sh v1.4 — díl 1 z 7

./blog.sh 1.4 je venku – vydání na GitHubu.

Nejširší vydání od 1.0. Přišly tři věci: widget commitů čte Giteu a Forgejo – požádal o to jeden z prvních lidí mimo tento projekt, kdo engine provozuje, protože většina Fediverse drží kód na Codebergu a zrcadlení na GitHub kvůli jedné kartě v postranním panelu bylo obchvat. widgets.commits.instance bere adresu serveru; to je celá konfigurace. Komentáře fungují na GoToSocial – zjištěno na arch-linux.cz, kde žádný příspěvek nikdy neukázal jediný komentář, potichu; moje vlastní testy měly Mastodon na obou koncích, takže to nikdy zachytit nemohly. A engine teď všude mluví jazykem webu: český nebo německý web dřív sledoval vlastní nasazení a varování sestavení v angličtině, o řádek nad přeloženou větou. Nějakých šedesát vět se přestěhovalo do lokalizací.

Číst dál

Karta, která čte Codeberg

./blog.sh v1.4 — díl 2 z 7

Postranní panel má kartu commitů. Až dosud četla GitHub, tečka – což je zvláštní výchozí volba u enginu, jehož přirozeným prostředím je Fediverse, kde kód bydlí na Codebergu nebo na něčím vlastním Forgejo a GitHub je zrcadlo, které si držíš kvůli jednomu widgetu.

Jeden z prvních lidí mimo tento projekt, kdo engine provozuje, položil tu zjevnou otázku a odpověď vyšla: widgets.commits.instance bere adresu serveru, a to je celá konfigurace.

Jeden klíč, ne dva

Vedle něj není žádný forge_type. Adresa už odpovídá na to, jaký druh hostitele to je – Gitea a Forgejo mluví týmž API, a klíč, který se musí shodovat s jiným klíčem, je chyba v konfiguraci čekající na svou chvíli. Vynech instance a karta čte GitHub, přesně jako dřív.

Levnější než originál

Číst dál

Týž jazyk, mluvený jinak

./blog.sh v1.4 — díl 3 z 7

Komentáře jsou tu odpovědi na toot a GoToSocial mluví API Mastodonu – takže komentáře na instanci GTS měly prostě fungovat. Nefungovaly, ani jednou, a nikdo neviděl, že selhávají: arch-linux.cz, první web, který tento engine spojil s vlastní instancí GTS, nikdy neukázal pod žádným příspěvkem jediný komentář. Moje vlastní testy měly Mastodon na obou koncích, takže to nikdy zachytit nemohly.

Nářečí není jazyk

V cestě stály dva přízvuky. GoToSocial píše adresu statusu ve vlastním tvaru a vzor v enginu trval na tvaru Mastodonu – číselné id tam, kde GTS odpovídá 26znakovým ULID. A GTS vyžaduje token i ke čtení veřejného vlákna, zatímco Mastodon ho dá každému, kdo si řekne. První přízvuk rozbil čtení adresy; druhý rozbil celou myšlenku živých komentářů, což je prohlížeč návštěvníka stahující vlákno – prohlížeč, kterému token dát nemůžeš.

Moderace jsou dveře dovnitř

Číst dál

Nasazení ve vlastním jazyce

./blog.sh v1.4 — díl 4 z 7

Průvodci byli přeložení od začátku; vyprávění kolem nich ne. Český web sledoval vlastní nasazení v angličtině, o řádek nad českou větou – varování sestavení, selhání oznámení, chyby importu, pokyny fronty k opravě, všechno. Ne přímo rozbité. Jen dům, kde půlka pokojů odpovídá jiným jazykem.

Šedesát vět se přestěhovalo domů

1.4 tu práci dokončuje: celé vyprávění nasazení – hlavička, průběh, závěrečný součet, každé oznámení o omezení – plus všech jedenáct varování sestavení, každé selhání Bluesky a Mastodonu a věty, které import vypíše, když zdroj zemře. Angličtina, čeština a němčina nesou tutéž sadu a sada testů paritu vynucuje, takže klíč nemůže existovat v jednom jazyce a v druhém shodit běh.

Co zůstává, jak přišlo

Diagnostika uvnitř vět se nepřekládá: HTTP kód, syrová odpověď serveru, text výjimky. To jsou důkazy a důkazy se citují, ne parafrázují – věta kolem nich patří webu, to uvnitř patří síti.

Past plurálu

Číst dál

Druhá polovina check

./blog.sh v1.4 — díl 5 z 7

./blog.sh check přečte celý archiv a řekne, co je špatně: média, o která si příspěvek říká a nemá je, odkazy na adresy, na kterých nic neodpovídá, dva příspěvky, které by se servírovaly na jedné adrese. Až do 1.3 tam to končilo – seznam nálezů a návratový kód, s opravou ponechanou tobě a textovému editoru.

--repair to projde s tebou

check --repair je druhá polovina kontroly: ke každému nálezu nabídne tu jednu opravu, kterou nález dovoluje – starou adresu zapsanou do redirect_from cílového příspěvku, relativní odkaz přepsaný na adresu, kterou míní, osiřelý soubor přesunutý do koše. Nic se nepoužije bez stisku klávesy, nic se nemaže rovnou a nález bez zjevné odpovědi – dva příspěvky v kolizi, obrázek, který posoudí jen člověk – se ukáže a přeskočí, místo aby se hádal.

Osvědčil se dřív, než vyšel: na skutečném archivu snížil 238 nálezů na 42 a 21 oprav, které navrhl, se jedna k jedné shodovalo s tím, co už člověk rozhodl ručně.

--json říká všechno

Číst dál

Co smí stát pád

./blog.sh v1.4 — díl 6 z 7

Fronta teď umí prohodit dva naplánované příspěvky, které sdílejí slug napříč dvěma roky – i s jejich médii a historií úprav, protože ty jsou klíčované rokem a slugem přesně jako soubor příspěvku. Ta věta je krátká; udělat ji pravdivou zabralo většinu vývojového cyklu. Zajímavá část není prohození. Je to, co se stane, když uprostřed vypadne proud.

Rozpočet je nula

Přesun je několik přejmenování a pád může dopadnout mezi kterákoli dvě. Pravidlo, kterého se 1.4 drží: ať je to kdykoli, pád tě smí stát přesun – nikdy příspěvek. Soubory ustoupí stranou pod parkovací jména dřív, než cokoli zapisuje; neúspěšný zápis vrátí všechno zpět, bajt po bajtu; tvrdé zabití, které nechá zaparkovaný soubor stát, ho nechá tam, kde ho check najde a pravdivě řekne, co je.

Rada je součást systému

Číst dál

Testováno jako nepřítel

./blog.sh v1.4 — díl 7 z 7

1.4 prošla před tagem čtyřmi koly nepřátelského auditu: flotily nezávislých revizorů nad skutečnými archivy – skutečné exporty, skutečný web se 4 400 příspěvky, skutečné cíle nasazení – každý s pokynem engine rozbít, ne potvrdit. Nálezů bylo přes sto. Každý byl před opravou zreprodukován a každá oprava je přišpendlená testem, který na kódu, který opravila, prokazatelně padá.

Vzorec, který se pořád opakoval

Nepříjemné poučení: opravy z každého kola byly tam, kde další kolo našlo své chyby. Oprava pravidla pro čtení komentářů smazala sto řádků něčí konfigurace; oprava toho skryla odpovědi widgetu; rada k obnově napsaná k záchraně příspěvků mohla jeden zničit. Čtyřikrát za sebou byl nejnovější kód nejnebezpečnějším kódem ve stromu – což je přesně důvod, proč poslední kolo auditovalo výhradně opravy samotné. Zachytilo tři moje regrese dřív, než mohl kterýkoli uživatel.

Osmnáct souborů

Číst dál