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.

Dlouhá operace hlásí typované události a transport je jen vykresluje

Dlouhá operace hlásí typované události a transport je jen vykresluje

majordomus://rule/project.execution-events-are-typed@1aktivní architekturarusthttpcapabilities

odkazuje na něj

Zdůvodnění

První, co živý kanál přitahuje, je logika. Má události, má spojení a je jediným místem, které ví, že klient sleduje — takže svádí rozhodnout tam, zda je provedení dokončeno, formátovat zprávu pro prohlížeč, který se náhodou připojil, a odpovědět druhému klientovi jinak, protože se zeptal jinak. Každé z toho je fakt o provedeních žijící v obsluze socketu, kde ho nic jiného nepřečte, nedosáhne na něj žádný test, který neotevírá socket, a další konzument — auditní stopa, notifikátor, agent — jej musí implementovat znovu.

Druhá věc, kterou přitahuje, jsou řetězce. Řádek textu je nejlevnější věc k odeslání a nejdražší ke spotřebování: prohlížeč, který chce ukazatel postupu, musí parsovat 17/42 a v den, kdy se změní formulace, ukazatel přestane se hýbat, aniž by kdekoli něco selhalo. Řídicí rovina, jejíž postup se odvozuje regulárním výrazem nad lidským výstupem, je řídicí rovina, která tiše lže.

Obojímu se předchází stejně. Doména vytvoří typovanou hodnotu; jedno úložiště ji drží, řadí a vydává; transporty ji vykreslují. To, proti čemu klient validuje, se pak generuje ze stejného typu Rust, který vytvořil handler, přesně jako už vstupní a výstupní schéma, a varianta přidaná na jednom místě se objeví v dokumentu protokolu, v Cockpitu i v referenci společně.

Požadované chování

Operace dost dlouhá na to, aby se dala sledovat — každý handler, který má cestou co sdělit — hlásí přes handle Progress, který nese její kontext: pojmenované kroky, změřený postup, řádky logu, strukturovanou diagnostiku. Handler, který sleduje svůj příznak zrušení a zastaví se, to uvádí ve své deklaraci (.cancellable()), aby žádný klient nenabízel ovládací prvek, který nic nedělá. Hlášení je mimo provádění tiché, takže handler hlásí bezpodmínečně a píše se jednou pro každého volajícího. Handler nesmí otevřít socket, jmenovat klienta, formátovat pro prohlížeč ani zjišťovat, který transport jej zavolal.

Událost provádění je varianta jednoho typovaného enumu, nesená v jedné obálce s verzí protokolu, hustou sekvencí na provedení a tělem type/data. Její JSON Schema se odvozuje z Rust typu stejnou cestou jako schémata každé schopnosti a servíruje ji schopnost, protože OpenAPI nedokáže popsat socket. Ručně psaná kopie toho schématu — v dokumentu, šabloně, skriptu či klientovi — je vada.

Stav se mění na jediném místě: v úložišti, pod jeho zámkem, a přechod, který stavový automat nedovoluje, se odmítne. Žádný transport, stránka ani klient nesmí počítat stav provedení z událostí, které náhodou viděl; čte snímek, který vzniká pod týmž zámkem, a proto nemůže říct succeeded a přitom nenést žádný výstup.

Každá mez je typovaná a každé chování na mezi je definováno: kolik provedení se pamatuje, kolik událostí se uchovává pro každé, jak dlouhý smí být řádek logu, jak daleko smí odběratel zaostat. Odběratel, který zaostane, je vyzván k resynchronizaci a nikdy se na něj nečeká — provedení nesmí zpomalit klient, který je sleduje — a odběratel, který odešel, se zapomene při další události, místo aby se hromadil.

Klient, který se znovu připojuje — po reloadu, znovupřipojení nebo mezeře — požádá o to, co zmeškal, podle sekvence a dostane uchovanou historii a pak živý stream bez mezery a bez čehokoli zapsaného dvakrát. Opakované dotazování snapshotu je to, k čemu slouží routy HTTP při reloadu, odsouhlasení nebo neshodě; není to živý mechanismus.

Chování při selhání

Recenzent odmítne handler, který sahá po transportu, transport, který rozhoduje o stavu provedení, proud netypovaného textu a ručně psané schéma tam, kde se odvozuje. O strojově kontrolovatelné části rozhodují sady crate: přechody stavového automatu, odmítnutí neplatného, hustota a pořadí posloupností, shoda snímku s proudem, meze a chování na každé z nich i smlouva o přehrání od kurzoru jsou všechno ověřeny a majordomus generate --check selže, když commitnutá projekce přestane odpovídat typům.

Ověření

apps/majordomus-cli/src/execution/ jednotkové testy (stavový automat, meze a rozvětvení úložiště, sink, redakce), apps/majordomus-cli/tests/executions.rs (celá cesta přes skutečný socket: start, sledování, reload, opětovné připojení s kurzorem, zrušení, selhání), doctesty execution::event a http::ws a bash test/run.sh 100_execution_plane, který zvenčí spustitelného souboru dokazuje, že schopnost spuštěná přes HTTP se streamuje přes WebSocket a snímek, historie i příkazový řádek ji čtou zpět shodně. docs/EXECUTIONS.md je model; ADR 22 je rozhodnutí.

Odkud to pochází

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