133. Vše, co se v repozitáři děje, se sleduje v jednom proudu, složené a adresované
Kontext
Worker, který chce vědět, co se kolem něj děje, čte šest povrchů, každý s vlastním kurzorem: журнál meshe, nástěnku tohoto checkoutu, stopu exekutoru, exekuce a pull requesty a kontroly GitHubu přes gh. Nic je nespojuje. Dva z nich jsou většinou šum: server při každém heartbeatu znovu promítá každého peera nástěnky jako relaci meshe, takže ve vzorku žurnálu z 2026-10-10 bylo 954 z 1000 událostí session_opened pro relaci, jejíž obsah se nezměnil. A nic neříká, která z událostí je adresována čtenáři. Revize vyžádaná od relace, pro ni publikovaná předávka, claim, který koliduje s jejím vlastním: to leží v žurnálu vedle tisíce opětovných promítnutí.
Relace si tedy ručně píší tutéž smyčku: jq nad majordomus mesh events, množinu již viděných relací, gh pr list pro merge, git ls-remote pro ref, na který čekají. Relace přehlížely revize a předávky, které jim byly adresovány, celé hodiny, a jedna přehlédla zprávy vzdálené relace celý den, protože povrch, který čtou, jim je neukázal.
Rozhodnutí
Jedna čtecí schopnost, monitor, odpovídá stránkou signálů za neprůhledným kurzorem.
- Signál je typovaný řádek: kdy, který zdroj, jaký druh, jak naléhavý (
info,attention,action), kdo to udělal (stroj, relace, klient), čeho se týká (pull request, větev, cesty, úkol), jednořádkové shrnutí a zda je pro vás. - Zdroje jsou záznamy, které server už vede: deník mesh, nástěnka, stopa exekutoru, provádění; a GitHub, je-li dosažitelný. Monitor nic nezapisuje a nevede vlastní úložiště. Každý signál se odvozuje ze záznamu, který už existuje, takže není co udržovat konzistentní.
- Kurzor kóduje vlastní pozici každého zdroje (Lamportovo razítko, sekvenci, watermark) v jednom tokenu bezpečném pro URL. Stránka po kurzoru nic neopakuje a opětovné připojení je nový dotaz s posledním kurzorem.
- Fold ponechá otevření relace jen tehdy, když je relace nová nebo se změnilo, co o sobě říká. Re-projekce se počítá jako
suppresseda nikdy se neukazuje. - Pro vás: signál je adresován čtenáři, když jeho recenzent, cíl předávky, kolidující claim nebo text jmenuje workera, roli, relaci nebo checkout čtenáře. Briefing je uvádí jako první.
- Chybějící zdroj je odpověď. Zdroj, který nelze přečíst, se hlásí se svým stavem a důvodem, nikdy jako prázdný seznam: ticho musí znamenat, že se nic nestalo, ne že se nikdo nezeptal.
Je promítnuta jako každá schopnost (ADR 0004): majordomus_monitor přes MCP, GET /api/v1/monitor přes HTTP, majordomus monitor na příkazové řádce. Příkaz přidává --follow, plus --count a --until, aby skript nebo agent mohl počkat na jednu událost a skončit. Cockpit zobrazuje proud živě na /cockpit/monitor. Briefing na začátku relace a majordomus context vypisují, co se stalo od posledního pohledu, a bootstrap poskytovatele jmenuje příkaz, takže jej každá relace používá, aniž by to bylo řečeno.
Důsledky
- Sledování repozitáře stojí jeden příkaz a ručně psané smyčky lze smazat.
- Skládání a adresování jsou podstata funkce. Proud, který ukazuje všechno, je stejně nepřečtený jako šest proudů, z nichž každý ukazuje jen své; nový zdroj proto dluží pravidlo skládání pro svůj vlastní šum.
- Monitor je pozorování, ne autorita. Nikdy nejedná na základě signálu. Merge, claim nebo odpověď zůstávají u schopnosti, která akt vlastní.
- Notifikátor (Slack, pošta, push) je později odběratel tohoto streamu, ne sedmá smyčka.