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.

Observatoř je jedna obrazovka UI a kreslí jen to, co bylo pozorováno

Observatoř je jedna obrazovka UI a kreslí jen to, co bylo pozorováno

majordomus://adr/adr-0158navrženo uiobservatoryevidencemesh

odkazuje na

odkazuje na něj

158. Observatoř je jedna obrazovka UI a kreslí jen to, co bylo pozorováno

Kontext

Každá obrazovka majordomus ui je stránka řádků: čtení, jeho zdroj, odkaz. To je správný tvar pro člověka, který přišel něco rozhodnout, a špatný pro displej, u kterého nikdo nesedí. Vlastník si 2026-10-14 vyžádal ten druhý druh: okno do toho, jak repozitář a jeho mesh pracují, dost dobré, aby šlo nechat běžet na televizi, a svázané jednou větou nade všechny ostatní, „žádná vymyšlená provozní data, nikdy“. Žádost přišla jako specifikace osmi scén, directora, který je střídá, kiosk režimu, živého streamu, přehrávání zaznamenaných událostí a osmi přejímacích kontrol.

Takový displej je místem, kde produkt nejčastěji začne lhát. Obraz, který nesmí nikdy vypadat prázdně, zve k částici pro peera, který tam není, a pulzu pro práci, kterou nikdo neudělal, a čtenář nepozná nakreslený fakt od nakreslené dekorace. Tento repozitář už totéž zakazuje v řádcích: project.ui-derived-state odmítá vymyšlenou hodnotu a chybějící hodnotu nakreslenou jako nulu nebo zdraví. Obraz potřebuje totéž odmítnutí vyslovené jeho vlastními slovy, před nakreslením první scény, ne po osmé.

Je to také místo, kde začíná druhá aplikace. Kiosek, spořič obrazovky a interaktivní pohled jsou tři jména téže věci vidět s různým množstvím chrome a tři implementace by se rozešly do týdne.

Rozhodnutí

  1. Jedna obrazovka. Observatory je obrazovka majordomus ui jako každá jiná: modul pod apps/majordomus-cli/src/ui/, položka SCREENS, zdroje dotazované přes source::ask_all. Nepřidává schopnost, transport, úložiště ani službu. Fakt, který chce a který žádná schopnost nezodpoví, je schopnost k přidání kanonickou deklarací a do té doby scéna, která říká, že je nedostupný. Co se mu sděluje, místo aby se ptal, přichází po jednom živém kanálu, který server už má (bod 11, doplněno 2026-10-14); to je využití existujícího transportu, ne druhého.

  2. Jedna adresa, jedno předvolba, dvě přesměrování. /ui/observatory je ta obrazovka. /ui/kiosk je táž obrazovka, táž projekce a týž skript bez chrome aplikace; liší se jedním atributem, nikdy druhou implementací. /ui/screensaver odpovídá trvalým přesměrováním na /ui/kiosk, jméno, které říká, co to je, a /ui/obsrvatory jedním na /ui/observatory.

  3. Jeden inventář scén. Scény jsou deklarovány jednou, v modulu obrazovky: identita, popisek, charakter, schopnosti, které každá vyžaduje, co znamenají její značky, obrazovka, která ukazuje stejná fakta jako řádky, a jak dlouho zůstává. Stránku, skript, řádky bez skriptu i případ čte tentýž seznam.

  4. Scéna je sémantická nebo ambientní a říká, která. Sémantická scéna váže značky na záznamy: peera, událost, úkol, release. Ambientní scéna je dekorace a je tak označena; může se hýbat náhodně a nic v ní nestojí za fakt.

  5. Nekreslí se nic, co nebylo přečteno. Stránka nese celou svou projekci jako jeden dokument, observatory/v1: kdy byla pozorována, v jaké revizi, každý dotázaný zdroj se stavem, v jakém odpověděl, jeho důvod, když selhal, a jak dlouho to trvalo, a každou scénu s jejím modelem. Sémantická scéna, jejíž zdroj selhal nebo odpověděl bez čehokoli k vykreslení, je nedostupná: nemá model, nese vlastní důvod zdroje a skript se k ní nepřepíná. Nikdy se nekreslí prázdná, nikdy se nekreslí se zástupnými značkami a nikdy se nenahradí obrázkem zdraví.

  6. Událost se promítá svou identitou, nikdy tělem. Observatoř si z události mesh bere její stream a pořadí, druh, uzel, logický čas a nástěnný čas. Záměry, cesty a těla zpráv zůstávají v obrazovkách, které je už rozhodnuto ukazovat. Události jsou nejnovější z žurnálu: mesh.events čte žurnál dopředu od hodin, takže čtenář otázky „co se děje“ se ptá pomocí newest, vstupu, který toto rozhodnutí do schopnosti přidalo, protože první stránka od začátku byla to, co obrazovka mesh ukazovala jako nejnovější.

  7. Stavové slovo je pravdivé. Stránka říká LIVE jen tehdy, když byla znovu přečtena v uvedeném limitu, STALE když ne, a SNAPSHOT na veřejném webu, kde nic znovu nečte a říká, v jaké revizi byla pořízena. Scéna mesh v procesu, který žádnou neběží, kreslí nahrávku, kterou repozitář nese, a říká REPLAY s časem, kdy byla zaznamenána; nic jiného ji nenahrazuje a scéna, kterou nahrávka nenese, je nedostupná.

  8. Záznam nic nejmenuje svou identitou (změněno 2026-10-14, I2678). Záznam je to, co odpovídá observatory.capture na serveru, který provozuje mesh, commitnuté na .ai/repo/observatory/recording.json a čtené observatory.replay. Stroje jsou číslovány v pořadí, v jakém je mesh vypsal, runtime a relace jsou pořadová čísla a událost si ponechává svůj druh, logické hodiny a čas; nenese se žádné id uzlu, id runtime, klíč relace, intent ani cesta. Vlastník požádal o mesh na veřejném webu a jen o skutečná data; toto je podoba skutečných dat, kterou smí veřejná stránka držet.

  9. Čte a nikdy nespouští (ADR 0142). Čtenář může zvolit scénu; nic na obrazovce nezačne práci, nezapíše záznam ani nezmění mesh.

  10. Každá scéna vede ke svým řádkům. Scéna jmenuje obrazovku, kde tytéž fakty tvoří tabulku, aby se značka, o které čtenář pochybuje, dala ověřit proti záznamu, za nějž stojí.

  11. Co se pushuje, přichází na /events, jediném živém kanálu (upraveno 2026-10-14). Zobrazení lze informovat, místo aby se ptalo, a když se tak děje, sdělení putuje po WebSocketu, který server už servíruje na /events (apps/majordomus-cli/src/http/events.rs), ne po socketu, protokolu proudu ani úložišti vlastním. Jeden kanál nese několik témat pod jednou smlouvou: provedení už na něm jsou a žurnál meshe i nástěnka peerů se k nim přidávají za těchto podmínek. Další téma je další zdroj za stejných podmínek, nikdy druhý kanál.

  • Táž projekce, ale vysílaná. Rámec tématu nese to, na co odpovídá schopnost, která na stejnou otázku odpovídá přes HTTP, a nic víc, v obálce, kterou má každý rámec kanálu, tedy type a data. U žurnálu je to značka, na kterou odpovídá observatory.events, v rámci bodu 6. U nástěnky je to to, na co odpovídá peers.list, ukazované jen tam, kde se rozhodlo, že ji má ukázat obrazovka, jež nástěnku už ukazuje; veřejný snímek nástěnku nenese. Klient, který typ nezná, rámec ignoruje, jak kanál už vyžaduje, takže se žádná verze nemění.
  • Zdroj se odebírá, nekopíruje. Žurnál říká svým odběratelům, co připojil, své vlastní události i replikované, a nástěnka říká svým odběratelům, co bylo oznámeno, připojeno nebo odpojeno, tak jako úložiště provedení říká kanálu. Kanál zůstává adaptérem, který vykresluje a nedrží žádnou logiku žurnálu ani nástěnky.
  • Žádná mezera mezi obrazem a streamem. Odběr je cíl požadavku, jmenuje svá témata a pro žurnál nese logické hodiny, které klient naposled vykreslil, jako exekuce nese svou sekvenci. Nástěnka nemá historii k přehrání: její odběr se otevře s celou nástěnkou, jak stojí, pak každou změnou. Server se přihlásí první, přehraje každou zadrženou událost po těchto hodinách, pak jde živě, takže událost připojená během čtení stránky se zapíše jednou a nikdy se neztratí mezi čtením a odběrem. Na hodiny, které žurnál už nedrží, se odpovídá tak, jak odpovídá observatory.events, expirováno, a klient znovu přečte svou stránku, než vykreslí další událost. Klient, který zaostane, dostane stream.lagged a udělá totéž. Nic se nepřeskakuje mlčky.
  • Stavové slovo následuje kanál. LIVE, dokud je kanál otevřený a jeho heartbeat přichází v uvedené mezi; RECONNECTING, dokud stránka kanál znovu otevírá podle svých hodin; STALE, když to nejde. Dokud slovo není LIVE, nehýbe se žádná sémantická značka: puls, paket nebo stopa nakreslená, když kanál nefungoval, by znamenaly něco, co nikdo nepozoroval. Veřejný web, který nemá server, ponechává SNAPSHOT a REPLAY.
  • Stále jen pro čtení. Server nikdy nečte rámec na kanálu. Klient sleduje svůj cíl požadavku, takže kanál nemá žádnou zprávu, která by mohla spustit práci nebo změnit mesh (bod 8). Jeho stávající meze platí pro zobrazení jako pro každého klienta: jen vlastní původ, ohraničený počet kanálů a volající mimo loopback držený tak, jak ADR 0126 drží každého dalšího.
  • Dotazování je záloha, ne návrh. Když je kanál odmítnut nebo chybí, stránka sleduje žurnál od svého kurzoru přes observatory.events, jako před tímto doplňkem, a její stav říká, že čte, a není jí to sdělováno.

Tento bod rozhoduje o transportu a jeho kontraktu. Kód, který se přihlásí k žurnálu, a případ, který kontrakt drží, přijdou se změnou, jež je vybuduje.

Co toto rozhodnutí přináší a co ne

Dodáno: obrazovka a její kioskový preset, dvě přesměrování, osm deklarací scén, projekce, řádky bez skriptu, skript, který kreslí a střídá dostupné scény a dotazuje vlastní stránku, a případ 3011, který drží body 2, 3, 5 a 7 na serveru i na publikovaném snapshotu.

Nedodáno a zaznamenáno jako úkoly, ne nakresleno, jako by to bylo:

  • nahrávka pořizovaná podle plánu: přehrání na veřejném webu je poslední záznam, který někdo commitnul (I2678 dodalo samotné přehrání);
  • vysílaný proud: rozhodnuto v bodě 11 a dosud nepostaveno. Od I2679 zobrazení sleduje žurnál od kurzoru přes observatory.events mezi načteními své stránky a dokud nepřistane změna, která staví bod 11, nic se na něj nevysílá;
  • fyzická nástěnná obrazovka: každá snímková frekvence a snímek obrazovky pochází z headless Chromium na stroji, který uvádí jejich důkazy. Verdikty kontrol a jejich důkazy jsou v .ai/repo/benchmarks/observatory/manifest.json (I2680);

Zamítnuté alternativy

Samostatná aplikace pro kiosek. Měla by vlastní datový model v rámci jednoho releasu a vlastní vady po dvou. Jedna obrazovka s předvolbou si nemůže odporovat.

Ukázková data tam, kde zdroj mlčí. Dělá lepší první dojem a odstraňuje jedinou vlastnost, pro kterou display existuje. Čtenář, který se dozví, že jedna částice byla vymyšlená, nemá důvod věřit ostatním.

Nové úložiště událostí nebo streamovací protokol pro displej. Mesh už vede uspořádaný deník s kurzory a UI už má jeden způsob, jak se zdroje zeptat. Displej není důvod vlastnit druhou kopii ani jednoho z nich.

Vlastní socket Observatory (zamítnuto 2026-10-14, s bodem 11). Opakoval by to, co už dělá /events, tedy kontrolu originu, omezení spojení, heartbeat, přehrání od kurzoru a stream.lagged, a obojí by se rozcházelo právě ve vlastnostech, na kterých čtenář živého displeje závisí.

Skrývání nedostupných scén. Scéna, která tiše zmizí, se čte jako produkt s menším počtem scén. Pojmenování s důvodem řekne čtenáři, co by repozitář musel spustit, aby se objevila.

Důsledky

  • Veřejný web ukazuje v pohybu méně než osm scén a u každé další říká proč. To je cena bodu 5 a je přijata.
  • Nová scéna je deklarace a model; zdrojem scény je schopnost, takže každý fakt na displeji lze také zjistit z příkazové řádky, API a MCP.
  • Observatory drží stejné kontroly jako každá další obrazovka, mimo jiné ui-integrity a cockpit-projection, a případ 3011 pro to, v čem se může splést jen obraz.
  • Zbývající kontroly specifikace zůstávají otevřené jako úkoly s vlastními důkazy a obrazovka není popisována jako dokončená, dokud nejsou uzavřeny.

Odkud to pochází

kanonický soubor
.ai/repo/adrs/0158-the-observatory-draws-only-what-was-observed.md
identity
adr-0158
dostupné také jako
Zdroj MCP majordomus://adr/adr-0158 · majordomus entity show adr/adr-0158 · GET /api/v1/entity?uri=majordomus://adr/adr-0158
v Cockpitu
/cockpit/objects/adr/adr-0158

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.