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.

Lease sdíleného serveru má jednoho čtenáře

Lease sdíleného serveru má jednoho čtenáře

majordomus://rule/project.the-lease-is-read-once@1aktivní mcpkoordinaceodvozenokontroly

odkazuje na něj

Zdůvodnění

ADR 0003 dalo tomuto repozitáři jeden sdílený server na checkout a jedno místo setkání: soubor leasu jmenující proces, který jej obsluhuje, a adresu, na kterou se navázal. Jeden soubor, jeden zapisovatel — a do 2026-09-10 pět čtenářů.

Tři z nich byly ve spustitelném souboru (volba, serving jen pro čtení, zjišťování služeb prostředí), každý s vlastní představou, co dokument obsahuje. ADR 0035 z nich udělalo jedno typované čtení, lease::LeaseFile::read, jehož čtyři odpovědi — chybí, prázdný, poškozený, dokument — nechávají rozhodnutí na čtenáři, místo aby je schovaly do chyby. Dvě přežily v shellu a byly horší než duplicitní: neshodovaly se.

lib/context.sh našel samotný soubor, odhadl cestu primárního checkoutu, když aktuální worktree žádnou neměl, a adresu vytáhl pomocí jq. .just/serve.just i scripts/cockpit-probe oba běžely

sed -n 's/.*"url":"\([^"]*\)".*/\1/p'

nad JSON. Tento výraz je správný pro přesně jeden způsob zápisu dokumentu — kompaktní — a nezachytí nic ve chvíli, kdy ho kterýkoli zapisovač zformátuje, přidá mezeru za dvojtečku nebo před něj vloží jiný klíč končící url. To, co takový čtenář potom hlásí, není „nemohu to přečíst“. Je to „žádný server není“: tichá, sebejistá, špatná odpověď na jediném místě, kam se worker dívá, aby zjistil, zda je tu ještě někdo. Tento repozitář za tuto třídu už dvakrát zaplatil — glob, který nikdy nezachytil ADR, a designová kontrola, jejíž kontrola barev křičela vlk — a cenou byla pokaždé funkce, která přestala fungovat a nic neřekla.

Cenou za pět čtenářů není pět chyb. Je to, že žádná jediná změna je nemůže opravit, protože nic ve stromu neví, že jde o stejnou otázku.

Požadované chování

apps/majordomus-cli/src/lease.rs deklaruje, kde lease je (LEASE_PATH), co je (SCHEMA) a jak se čte (LeaseFile::read). Vše, co potřebuje vědět, kde server je, jej čte přes tento typ, nebo přes to, čím je tento typ zpřístupněn:

  • uvnitř spustitelného souboru LeaseFile::read — nikdy serde_json nad cestou, nikdy ručně psaná sonda souboru;
  • mimo ni majordomus serve status (GET /api/v1/server, nástroj majordomus_server, zdroj majordomus://server), které hlásí každý checkout repozitáře, stav každého serveru a adresu, kterou publikoval jeho lease. --format json je tvar, který čte skript; bin/majordomus-cli je launcher, který shellový volající už má.

Shellový volající smí jmenovat cestu k lease, aby ji sledoval — .envrc žádá direnv o novou evaluaci, když se změní — a nesmí ji otevřít. Test smí lease zapsat a přečíst zpět: tam je soubor testovaným předmětem, ne závislostí kódu.

Volající na horké cestě nikdy nesestavuje spustitelný soubor, aby položil otázku. lib/context.sh a scripts/cockpit-probe použijí spustitelný soubor, který už existuje, a odpověď přeskočí, když žádný není, což je tatáž politika, jakou drží serve ensure události startu relace: chybějící spustitelný soubor se pojmenuje, nekompiluje.

Chování při selhání

scripts/ci/lease-reader-check skončí kódem 10, když soubor, který není ani čtečkou, ani dokumentací, ani testem, pojmenuje cestu lease nebo schéma lease, a běží jako kontrola lease-reader v každém plánu. Obě jména čte z deklarací samotné čtečky, místo aby nesla kopii, takže přejmenování kteréhokoli přejmenuje i zde. Vynucování je západka nad .ai/repo/lease-reader-baseline.txt, která je v okamžiku, kdy toto pravidlo přistává, prázdná: lease nečte nic než čtečka a soubor, který začne, kontrolu neprojde.

Toto je kontrola CI, ne validátor lib/: je to fakt o vlastním zdrojovém stromu tohoto repozitáře, ne o vrstvě, kterou nástroj servíruje někomu jinému (project.rule-is-a-doctrine).

Ověření

test/cases/110_lease_reader.sh to dokazuje mutací na fixture: strom, jehož jediný čtenář je lease.rs, projde; shellový skript, který jq lease, a modul v Rustu, který ho parsuje podle řetězce schématu, jsou každý odmítnuty s pojmenovaným souborem; stránka dokumentace a test, které lease jmenují, ne; .envrc sledující soubor ne; čtenář v základním stavu nezpůsobí selhání a nový vedle něj ano; a čtenář, který nedeklaruje ani jedno jméno, způsobí, že kontrola odmítne měřit, místo aby prošla.

test/cases/106_context_peers.sh drží druhou polovinu — že sekce peerů nikdy nic nenese — napříč přesunem: žádný server, server, který neodpovídá, nečitelný lease a prázdná nástěnka nechají všechny context přesně tak, jak bylo, exit 0, a neřeknou nic.

Odkud to pochází

kanonický soubor
.ai/repo/rules/project/the-lease-is-read-once.v1.md
identity
project.the-lease-is-read-once@1
dostupné také jako
Zdroj MCP majordomus://rule/project.the-lease-is-read-once@1 · majordomus entity show rule/project-the-lease-is-read-once-1 · GET /api/v1/entity?uri=majordomus://rule/project.the-lease-is-read-once@1
v Cockpitu
/cockpit/objects/rule/project-the-lease-is-read-once-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.