Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

Úklid, který maže, selže bezpečně u všeho, co nedokázal přečíst

Úklid, který maže, selže bezpečně u všeho, co nedokázal přečíst

majordomus://rule/project.destructive-sweeps-fail-closed@1aktivní bezpečnosttooling

odkazuje na

Nic. Tento objekt nedeklaruje žádný odkaz.

Zdůvodnění

Relace čistila výstup cargo buildu z worktree, jejichž mtime target/debug byl starší než 24 hodin, aby uvolnila plný disk. Vypočítala age = now - mtime. U tří worktree stat nevrátil nic, protože se do adresáře právě v ten okamžik zapisovalo; shell dosadil za chybějící mtime prázdný řetězec a aritmetika nad prázdným řetězcem dala stáří zhruba 496938 hodin místo chyby. Tři aktivní worktree vypadaly jako nejstarší, nejzastaralejší kandidáti v sadě a byly vyčištěny. Přišlo se jen o výstup buildu, který se znovu sestaví, ale tvar chyby je obecný: skript, který mění „nemohl jsem to změřit“ na číslo, bere nevědomost jako nejsilnější možnou odpověď na otázku, kterou smazání klade.

Stejný tvar se vrací všude, kde je predikát aritmetika nad hodnotou, která může chybět — chybějící velikost, chybějící časové razítko, příkaz, který potichu selže pod set -e uvnitř roury, jež spolkne jeho návratový kód. Oprava není „kontrolovat target/debug pečlivěji“; je to, že žádnému úklidu není dovoleno nechat chybějící vstup stát se verdiktem.

Požadované chování

Skript, který maže cokoli vybrané změřeným predikátem, přečte vstup pro každého kandidáta a čtení, které selhalo, vrátilo prázdno nebo se nedalo zparsovat, bere jako „tohoto kandidáta vynechej“, nikdy jako nejstarší, největší či nejzastaralejší hodnotu v sadě. Samotný predikát musí být při chybějícím vstupu false, ne jen doplněný hlídkou, na kterou autor nezapomene. Před mazáním úklid vypíše pro každého kandidáta, na kterého zasáhne, změřenou hodnotu, která rozhodla — stáří, velikost, počet — ne jen verdikt: špatný predikát je pak vidět na výstupu dřív, než způsobí škodu. Úklid také hlásí, kolik kandidátů přeskočil, protože se vstup nedal přečíst, takže tichá díra v měření není tichá.

Chování při selhání

Nic v tomto nástroji strojově neodmítne úklidový skript; mazací skript, který svůj predikát počítá z nechráněného čtení nebo maže bez předchozího vytištění měření, je defekt k okamžité opravě, a ne varování k poznamenání. Recenzent odmítne nový nebo změněný skript pod scripts/, který cokoli maže a nenese tuto ochranu.

Ověření

test/cases/135_session_store_recovery.sh je první spustitelnou instancí. majordomus recover vybírá otevřené epizody k uzavření podle stáří, což je tvar, o který toto pravidlo jde, a případ dokazuje všechny tři poloviny požadovaného chování proti skutečnému běhu: kandidát, jehož poslední známku života nelze přečíst jako časové razítko, a kandidát bez jakékoli identity jsou oba ponechány otevřené a započítány na řádku skipped, místo aby byly vybrány; změřená hodnota, která rozhodla o každém kandidátovi, se vytiskne dříve, než se s kterýmkoli naloží, včetně kandidátů, se kterými se nic nestane; a --check nic nezapisuje, takže plán lze přečíst dřív, než sweep vůbec běží.

Chyba, kterou ochrana má zachytit, kousla ještě jednou, když se psal ten případ, z opačného směru. mj_epoch vrací nenulovou hodnotu pro řetězec, který nedokáže naparsovat ani date, a první návrh to četl jako [ -n "$last" ] && last_e="$(mj_epoch "$last")" — přiřazení po posledním && není vyjmuto z set -e, takže celý příkaz umřel na prvním nečitelném kandidátovi poté, co vypsal jeden řádek hlavičky. Predikát, který nemůže změřit svůj vstup, musí být nepravdivý; nesmí být ani výjimkou.

Průzkumy pod scripts/ stále drží revize a tento soubor je kontrolní seznam, proti kterému je recenzent čte; lib/recover.sh je to, vedle čeho by se měl číst nový.

Odkud to pochází

kanonický soubor
.ai/repo/rules/project/destructive-sweeps-fail-closed.v1.md
identity
project.destructive-sweeps-fail-closed@1
dostupné také jako
Zdroj MCP majordomus://rule/project.destructive-sweeps-fail-closed@1 · majordomus entity show rule/project-destructive-sweeps-fail-closed-1 · GET /api/v1/entity?uri=majordomus://rule/project.destructive-sweeps-fail-closed@1
v Cockpitu
/cockpit/objects/rule/project-destructive-sweeps-fail-closed-1

Tato stránka je generována z výše uvedeného souboru pomocí scripts/generate-site-data; úprava stránky nic nemění, úprava souboru změní všechna rozhraní. Výše uvedené vztahy jsou hrany docs/generated/graph.json, které spustitelný program zapisuje ze stejného indexu.

Prohledává názvy a popisy všech stránek, které tento web publikuje.