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.

Cockpit jako vývojový povrch: výchozí stav, archeologie a matice mezer

forenzní nález z 2026-09-10: co by Cockpit potřeboval, aby se stal vývojovou plochou — governance preflight a jeho dvě vady, rozdělení na dva programy, systém spuštěný od začátku do konce se záznamem každého příkazu a odpovědi, matice mezer, audit driftu a fázový plán se selháními, která je nutno opravit nejdřív

Vykresleno z docs/COCKPIT_IDE_AUDIT.md — stejného Markdownu, který zobrazuje GitHub.

Forenzní zjištění, změřené 2026-09-10 v linked worktree v feature/development-runtime-model, odvětveném z origin/master v 08e4bb252, proti serveru, který si tento worktree sám sestavil a spustil. Je to fáze 01 balíku Cockpit IDE / control-plane a nic neimplementuje: zjišťuje, co existuje, dokazuje to spuštěním a říká, jaká je nejmenší bezpečná další fáze.

Architektura, proti které se měří, je ADR 0040 a DEVELOPMENT_RUNTIME.md: jeden kanonický runtime — registr schopností spustitelného souboru v Rustu — a každý povrch jeho konzumentem. Tento dokument je důkazem za tímto rozhodnutím a plánem, který z něj plyne.

Každé tvrzení zde vzniklo příkazem a příkaz je ukázán. Kde se číslo objeví bez příkazu, je to vada tohoto dokumentu.

Zjištění v jednom odstavci

Cockpit je věrná projekce registru, v němž je téměř nic vývojového. Jediné schopnosti, které cokoli mohou měnit, jsou executions.start, executions.cancel a peers.announce, a dokument OpenAPI, který server poskytuje, má přesně tyto tři operace jiné než GET. Každý příkaz vývojového životního cyklu žije ve druhém programu, bin/majordomus, a každý jeho uzel v grafu příkazů je odepřen každému strojovému povrchu. Cockpit proto nelze udělat IDE přidáním stránek: za stránkami není co volat. První fáze práce není UI, ale vybavit runtime měnícím vývojovým povrchem, který bude Cockpit spotřebovávat.

Tři další vady jsou nosné a byly nalezeny spuštěním systému, ne čtením: majordomus run se provádí ve vlastním procesu a běžící server ho nevidí, takže rovina provádění, kterou ukazuje Cockpit, a rovina provádění, kterou používá člověk, jsou disjunktní; server, který servíruje kód, jenž už na disku neexistuje, o sobě hlásí ready; a /cockpit/worktrees trvá 18,3 s, zatímco každá jiná stránka 1–4 ms.

1. Předběžná kontrola správy

Balík vyžaduje, aby se procvičily vlastní mechanismy repozitáře a aby se ty rozbité zaznamenaly, ne obešly.

KrokPříkazVýsledek
kontraktčíst README.md, AGENTS.md, CLAUDE.md, .ai/README.mdok — AGENTS.md nese své generované razítko z .ai/repo/policy.yaml
efektivní pravidlamajordomus rules list --jsonok — vendorovaná základna plus vlastní pravidla tohoto repozitáře se vyřeší v jednom pořadí; tato větev přidává jedno
kontextmajordomus contextok — hluboko v rozpočtu řádků, working_tree clean, v tu chvíli žádná aktivní úloha
kontext s rozsahemmajordomus context resolve docs/DEVELOPMENT_RUNTIME.mdok — rozlišuje se samotné na ai.layer; docs/ je mimo .ai/ a dostane jen kořenový řetěz
topologie worktreemajordomus-cli worktreeok — canonical, kontejner …-wt, trunk master
kontrola kolizíscripts/collision-check --new <paths>ok — nic jiného si nenárokuje docs/DEVELOPMENT_RUNTIME.md, docs/COCKPIT_IDE_AUDIT.md, ADR ani pravidlo
životní cyklus úlohymajordomus start "…" --scope …ok — t-20260910222833-6506, profil implementation
překryvhlásí start, majordomus check --overlapčtyři další větve nárokují cesty, které nárokuje tato úloha: readme-integrated-surfaces (docs, site), canonical-order (docs, site, scripts, .ai/repo/rules/project, .ai/repo/ci), doctor-passes-from-a-release (docs, site), the-subset-is-a-subset (docs)
checkmajordomus checkok — nálezy hlášeny, žádný selhávající
sessionmajordomus session statusv tomto worktree žádný otevřený
handovermajordomus handover --resolvežádné — absence, ne zastaralá shoda
nástěnka peerůtímto workerem neoznámenořádek flotily to pokrývá; §3 zaznamenává, co mi nástěnka nemohla říct

Dvě vady preflightu, obě skutečné, žádná neobejitá:

P1 — MAJORDOMUS_SHARE rozbíjí push hook, nejen commit hook. Proměnná se exportuje do každého shellu v tomto repozitáři a ukazuje na share/ primárního checkoutu. Commit pod env -u MAJORDOMUS_SHARE uspěl; git push ve stejném skriptu ji nepřenesl a pre-push hook zamítl:

majordomus: MAJORDOMUS_SHARE names ~/dev/prismatic-majordomus/share, the
distribution of ~/dev/prismatic-majordomus — another worktree of this
repository, not this one … Run with: env -u MAJORDOMUS_SHARE
error: failed to push some refs to 'github.com:korczis/prismatic-majordomus.git'

Diagnostika je výborná a náprava je jeden příznak, ale past je v tom, že proměnná je zděděná, takže každý hook je hod mincí podle toho, jak byl příkaz vyvolán. Oprava patří k hookům, ne k tomu, aby si ji pamatoval každý worker.

P2 — základ auditu je sám už historický. origin/master bylo 08e4bb252, když byl tento worktree vytvořen, a 06fa25891, když audit skončil zhruba o čtyřicet minut později. Jakýkoli plán, který tento dokument navrhuje, musí předpokládat, že se master pohybuje během fáze, která jej implementuje.

2. Současná kanonická architektura, předmět po předmětu

Úplný soupis po jednotlivých konceptech — kanonický vlastník, úložiště, schéma, objevování, konzumenti, cesta mutace, události, testy, dokumenty a drift — je v DEVELOPMENT_RUNTIME.md a neopakuje se zde. Tento oddíl zaznamenává jen to, co ten soupis neobsahuje: subjekty vstupu a projekce, které balíček pojmenovává, a rozdělení na dva programy, které vysvětluje většinu zbytku.

Rozdělení, které vysvětluje zbytek

bin/majordomus (shell, lib/**) vlastní vývojový životní cyklus — start, check, finish, session, context, checkpoint, handover, evidence, decision, question, plan, adr, usecase, rules, doctrine, knowledge, history, search. bin/majordomus-cli (Rust) vlastní registr schopností a každou jeho projekci. Každý program odmítne příkazy toho druhého podle názvu:

$ ./bin/majordomus worktree create feature/development-runtime-model
majordomus: unknown command: worktree
majordomus: worktree is a command of the Rust executable, not of this tool; run: bin/majordomus-cli worktree

Diagnostika je přesná, což je smysl: rozdělení je záměrné a zdokumentované a je to stále důvod, proč Cockpit nedosáhne na životní cyklus. Povrch poskytovaný Rust exekutorem může promítat jen to, co Rust exekutor zná.

3. Provoz systému

Spuštěno podporovanou cestou repozitáře, v tomto worktree, proti vlastnímu sestavení tohoto worktree. Server primárního checkoutu zůstal nedotčen.

Start, opětovné použití a flotila

$ ./bin/majordomus-cli serve status          # before
standing   absent
desired    127.0.0.1:8741  version 0.5.0
repository 4ca83e493da37139e9b0324377ab2c20  (this is a linked worktree)

$ ./bin/majordomus-cli serve ensure
ready http://127.0.0.1:62354 pid 44871 version 0.5.0 (started by this call)
                                                          0.45s total

$ ./bin/majordomus-cli serve ensure          # again
ready http://127.0.0.1:62354 pid 44871 version 0.5.0
                                                          0.03s total

Start je idempotentní a opětovné použití stojí 30 ms. Dvě strukturní pozorování ze stejného výstupu:

  • Jeden server na checkout, ne na repozitář. desired je 127.0.0.1:8741 pro každý checkout, takže první získá port a každý linked worktree sklouzne na efemérní (tento dostal 62354). Id repozitáře je sdílené; server ne. Dokument, který říká „jeden sdílený server na repozitář“, popisuje primární checkout.
  • Flotila je většinou mrtvá. serve status vypisuje každý checkout, který kdy viděl. Téměř všechny jsou absent, ty, které ještě obsluhují, jsou většinou outdated, a seznam obsahuje dávno zmizelé scratch stromy pod /private/tmp/classify-* a /private/tmp/force-merge-*. Nic registr neuklízí.

Třída zastaralého serveru, měřená z obou stran

$ ./bin/majordomus-cli serve status
  outdated  ~/dev/prismatic-majordomus (master)  http://127.0.0.1:8741  peers 5
            the executable it was started from … has been replaced since
            (it is serving code that is no longer on disk)
  outdated  …/feature/swagger-offline           http://127.0.0.1:60204  peers 0
  outdated  …/feature/the-cockpit-shows-the-board http://127.0.0.1:53226  peers 0
  outdated  …/fix/stale-runtime-is-loud          http://127.0.0.1:8799   peers 0
  outdated  …/fix/worktrees-page-is-fast         http://127.0.0.1:8792   peers 0
            the server published no version, so it is older than this executable (0.5.0)

$ curl -s http://127.0.0.1:8741/api/v1/server        # the outdated server, asked directly
HTTP 200   standing: ready

Zastaralost je vidět jen zvenčí. Čtečka leasu v čerstvém spustitelném souboru pozná, že běžící binárka byla nahrazena; běžící server hlásí sám sebe jako ready a jeho kořenový dokument nenese žádný HEAD ke kontrole. Peeři byli po celý tento audit připojeni k tomuto serveru, každý z nich čte projekci kódu, který už neexistuje. To je nejnebezpečnější jednotlivá třída v auditu, protože každé měření, které kdokoli přes ten server provede, je tiše špatně — včetně, jak zjistil koordinátor této flotily, měření expozice schopností.

Povrchy

Každý níže uvedený požadavek byl učiněn proti http://127.0.0.1:62354.

PožadavekStavTypVelikostČas
GET /200application/json2 345 B0.6 ms
GET / s Accept: text/html200text/html——
GET /cockpit200text/html25 913 B21.6 ms
GET /cockpit/capabilities200text/html59 528 B1,8 ms
GET /cockpit/executions200text/html17 599 B1.4 ms
GET /cockpit/worktrees200text/html78 098 B18 291.9 ms
GET /cockpit/graphs/composed200text/html1 192 144 B39.3 ms
GET /openapi.json200application/json783 220 B13.6 ms
GET /swagger200text/html6 382 B0.5 ms
GET /docs/503application/json251 B0.4 ms
GET /api/v1/capabilities200application/json1 247 611 B7,8 ms
GET /api/v1/health200application/json2 737 B0.5 ms
GET /api/v1/live, /api/v1/ready200application/json——
GET /api/v1/peers, /api/v1/executions, /api/v1/plan/status200application/json——
GET /api/v1/does-not-exist404application/json138 B0.4 ms

Content negotiation na / funguje. Tělo 404 je vzor toho, co má chyba říkat:

{"error":{"code":"not_found","message":"no route GET /api/v1/does-not-exist; the routes are listed at /openapi.json"}}

Dva nálezy: /docs/ je 503 v každém checkoutu, který web nesestavil, protože plocha se obsluhuje z target/web/docs, což je výstup buildu. A sondy health jsou na /api/v1/live a /api/v1/ready, ne pod /api/v1/health/…; health.live a health.ready jsou jediné dvě vestavěné schopnosti bez vystavení přes MCP, na čemž se shodují dokument OpenAPI i registr.

Kanonické API, měřené přes svůj vlastní dokument

$ python3 -c "…json.load(open('openapi.json'))…"
openapi 3.1.0 | info.version 0.5.0
non-GET operations: [('/api/v1/executions/cancel','post'),
                     ('/api/v1/executions/start','post'),
                     ('/api/v1/peers/announce','post')]

Jedna operace na cestu a jediné, které mutují, jsou tři, které registr deklaruje jako příkazy. Dokument OpenAPI je věrnou projekcí registru a to, co věrně promítá, je runtime bez vývojových mutací.

MCP

$ POST /mcp initialize
protocol 2025-06-18 | server {'name':'majordomus','version':'0.5.0'} | caps ['resources','tools']
Mcp-Session-Id: 44871-1-15feeba0
$ POST /mcp notifications/initialized          → HTTP 202
$ POST /mcp tools/list                          → every tool the registry exposes
$ POST /mcp resources/list                      → every resource, in one page, no cursor
$ POST /mcp resources/read majordomus://adr/adr-0040
read ok | text/markdown | "--- schema: adr/v1 id: adr-0040 …"
$ POST /mcp tools/call majordomus_plan_status   → isError false, a full status document
$ POST /mcp tools/call majordomus_plan_done     → {"code":-32602,"message":"unknown tool: majordomus_plan_done"}

Povrch MCP je úplný a správný nad tím, co registr drží — včetně nového ADR této větve, servírovaného jako zdroj minuty po napsání. Poslední řádek je architektura v jedné chybové hlášce: pro přechod plánu neexistuje nástroj, protože pro něj neexistuje schopnost.

Peery

Nástěnka je vázaná na spojení a ukázalo se to náhodou: sonda MCP výše se objevila jako p1 / phase01-probe / http / attached: true a po zavření spojení sondy se počet vrátil na 0. Oznámení patří spojení, přesně jak varuje AGENTS.md; worker, který se znovu připojí, si ponechá práci a ztratí své místo.

Co může Cockpit už měnit

Cockpit není jen pro čtení a tvar jeho cesty zápisu je invariant, který funguje, nikoli porušení. Nese přesně tři akce a každá je schopnost druhu command vyvolaná přes vlastní deklarovanou trasu: spustit schopnost jako provedení a zrušit ho (share/cockpit/executions.js) a formulář generického runneru, který se generuje ze vstupního schématu schopnosti a může proto řídit jakoukoli příkazovou schopnost — dnes jen peers.announce, na /cockpit/capabilities/peers.announce.

Žádná stránka nenese ručně psaný <form method="post">; tlačítka deklarují data-mj-start, data-mj-cancel-route a data-mj-effect a prohlížeč čte trasu ze stránky, místo aby ji konstruoval. cockpit/mod.rs rovnou odmítá každou trasu Cockpitu jinou než GET a změna stavu z jiného původu je odmítnuta a pokryta testem.

Mutační povrch Cockpitu je tedy přesně mutační povrch runtimu, což je pravidlo, které uvádí ADR tohoto auditu. Problém není zapisovací cesta Cockpitu; je v tom, že mutační povrch runtimu neobsahuje žádnou vývojovou sémantiku, ke které by se dostal.

Executions — vada disjunktních rovin

$ curl /api/v1/executions                     → 0 count / 0 remembered
$ ./bin/majordomus-cli run objects.verify &   # while polling the server every second
  t+1s server sees: 0 count, 0 active, 0 remembered
  (run finished at t+1s)
run exit=0                                    → "OK read — 976 current, 0 drifted"
$ curl /api/v1/executions                     → 0 count / 0 remembered
$ curl /api/v1/peers                          → 0

Dřívější běh vyprodukoval pojmenované, úspěšné provedení — x-20260910T222800Z-2adbdce0 health.report — a server nikdy neviděl ani to.

majordomus run nepoužívá běžící server. Sestaví registr ve vlastním procesu, provede tam, streamuje na vlastní terminál a skončí. Úložiště provedení serveru je jiná rovina v jiném procesu. Důsledky pro IDE jsou přesné: /cockpit/executions může vždy ukázat jen práci spuštěnou přes tento server příkazem executions.start; vše, co vývojář skutečně spouští, je pro něj neviditelné; a živý kanál docs/EXECUTIONS.md, který funguje — GET /events vrací 101 Switching Protocols a streamuje rámce — je oknem do roviny, do které téměř nic nezapisuje.

V kombinaci s už zaznamenanou netrvalostí (an execution lives in the process that accepted it) historie provedení, kterou IDE potřebuje, dnes neexistuje nikde.

Registr, generování a zdraví

$ ./bin/majordomus-cli capabilities validate     → validate: 0 failure(s)
$ ./bin/majordomus-cli generate --check          → generate --check: in sync
$ curl /api/v1/health                            → status "warn", 7 ok / 1 warn
$ ./bin/majordomus doctor        (via the pre-commit hook)
                                                 → doctor: 0 failure(s)
                                                   WARN budget doctor — 51055 ms, budget 3000 ms
                                                   WARN clone unpushed — 48 branches

Řetěz generování je poctivý: ADR této větve dvakrát odmítl, než jej přijal, jednou kvůli nepodporované konstrukci YAML a jednou kvůli špatné úrovni nadpisu, a obě odmítnutí jmenovala soubor a důvod. doctor hlásí nula selhání a trvá 51–74 sekund proti rozpočtu 3 sekund — sedmnáctkrát až pětadvacetkrát přes, při každém commitu.

4. Matice mezer

Jeden stav na schopnost, ze slovníku balíčku: canonical+implemented+verified, implemented but duplicated, documented only, planned, partially implemented, broken, absent. „Verified“ vyžaduje test, který ji provádí, jmenovaný v řádku. „Planned“ vyžaduje objekt plánu.

Když byla tato matice poprvé napsána, nic z ní nebylo plánováno. Hledání je zaznamenáno, aby se negativum dalo ověřit, a bylo znovu spuštěno proti masteru na 87b9ac659 dne 2026-09-11 se stejným výsledkem:

$ for kw in palette 'diff view' 'CI status' 'syntax highlight'; do
    printf '%s -> ' "$kw"
    grep -ril "$kw" .ai/repo/project/issues/ .ai/repo/project/milestones/ | wc -l
  done
palette -> 0
diff view -> 0
CI status -> 0
syntax highlight -> 0

Jediné objekty plánu blízké IDE byly I0927 (Cockpit ukazuje nasazení) a úkoly Cockpitu milníku capability-graph, vše již dodáno.

To už není stav. Milník development-runtime a úkoly I1501 až I1512 byly napsány z této matice a jejího plánu v §6 a jsou tím, co řádky níže znamenají, když říkají planned. §7 zaznamenává, na který řádek každý odpovídá.

Vývoj

schopnoststatusevidence
průzkumník schopnostícanonical+implemented+verifiedcapabilities.list/describe/projections; /cockpit/capabilities; tests/cockpit.rs::a_capability_the_repository_adds_reaches_every_cockpit_surface
paleta příkazůcanonical+implemented+verifiedshare/cockpit/palette.js; kontrola cockpit-probe ověřuje rodinu palety
generický runner provedenícanonical+implemented+verifiedpages.rs::runner_form ze vstupního schématu; tests/cockpit.rs::the_runner_form_is_generated_from_the_input_schema
streamovaný výstupcanonical+implemented+verifiedexecutions.events + WebSocket; tests/executions.rs; test/cases/100_execution_plane.sh
terminál / REPLchybížádné PTY ani provádění shellu nikde v src/; palette.js výslovně říká „paleta navigují a terminál provádí“
navigátor zdrojů / souborůčástečně implementovánoobjects.list, directories.list — jen vrstva .ai/**; žádný strom src/**
zobrazení zdroječástečně implementovánostránka objektu vykreslí tělo indexovaného souboru jako text; žádné soubory s kódem, žádné zvýraznění, žádné kotvy řádků
bezpečný postup úpravchybíCockpit odmítá každou trasu, která není GET (cockpit/mod.rs); žádná cesta zápisu, z rozhodnutí (COCKPIT.md)
zobrazení diffuchybídiff se objevuje jen v rozsazích commitů changelogu a v otiscích worktree; žádná schopnost, žádný povrch
provedení testučástečně implementovánorecepty a případy existují a commands.list je projektuje pouze pro čtení; spustitelné jen z terminálu
formátování / lint / kontrolačástečně implementovánonabízeno jako text přes katalog workflow; runtime ho nikdy nespouští
sestavení / release / nasazeníčástečně implementovánodistribution.build, deploy.check/list/get to popisují; dělání je shell a CI
spuštění úlohy / workflowpro povrch rozbitépřechody existují jen v lib/plan.sh a lib/start.sh; nedosažitelné z MCP, HTTP a Cockpitu
opakovaně použitelné formy workflowcanonical+implemented+verifiedovládací prvky generované ze schématu; deklarované případy měření se načtou do runneru
interakce poskytovatele a modelučástečně implementovánoproduct.providers projektuje konfiguraci poskytovatele; v src/ neexistuje žádný klient modelu

Plánování a SCM

schopnoststatusevidence
stav repozitářecanonical+implemented+verifiedrepository.info; přehled Cockpitu; tests/repository_discovery.rs
branchescanonical+implemented+verifiedpřes worktree.topology; tests/worktree.rs
worktreescanonical+implemented+verified, a pomaléworktree.*; /cockpit/worktrees změřeno na 18.3 s (§3)
commityčástečně implementovánoparsování conventional commitů a trace.commit; žádný povrch pro procházení commitů
diffychybí—
PRčástečně implementovánotrace odvozuje hrany úkol↔PR; scripts/github-sync; žádná schopnost, žádný povrch
úkolyimplementováno, ale duplikováno, a nyní čteno kanonickyčte plan.* a od 08e4bb252 také devtask.issue; zapisuje lib/plan.sh + lib/project.awk; stále žádná stránka Cockpitu — plánováno jako I1507
milníkyimplementováno, ale duplikováno, a nyní čteno kanonickystejné rozdělení a devtask.milestone od 08e4bb252; stále ne v Cockpitu — naplánováno jako I1507
vazba úkol↔milník↔kódcanonical+implemented+verifiedtrace.issue/commit/report; test/cases/98_traceability.sh; jen registr a CLI
release / changelog / verzecanonical+implemented+verifiedrelease.changelog, release.version; žádná stránka Cockpitu

Spolupráce AI a runtime

schopnoststatusevidence
peerscanonical+implemented+verifiedpeers.list, peers.announce; tests/mcp_shared.rs; žádná oblast Cockpitu — dosažitelné jen přes generický runner
tvrzení / rozsahyimplementováno, ale duplikovánoRust repository.scope* klasifikuje; lib/check.sh --overlap rozhoduje o obsažení
kolizečástečně implementovánoscripts/collision-check a check --overlap; žádná schopnost, žádný povrch
aktuální úloha / mandátčástečně implementovánocontinuity.state to čte; zapisující polovinou je jen lib/start.sh
kontext relacečástečně implementovánojen lib/session_context.sh — žádný vlastník v Rustu a žádná schopnost
handoverčástečně implementovánolib/handover.sh; continuity.state ukazuje jen blokátory
stav workflowcanonical+implemented+verifiedstavový automat provádění; tests/executions.rs
povrchy modelů / poskytovatelůčástečně implementovánojen projekce konfigurace
executionscanonical+implemented+verified, a disjunktníexecutions.*; jen v procesu a majordomus run nikdy nedosáhne serveru (§3)
zrušenícanonical+implemented+verifiedexecutions.cancel; schopnost, kterou nelze zrušit, to říká
opakováníchybí — explicitní non-goalexecution/mod.rs: „žádná trvalá fronta, žádné opakování a žádný plánovač“
živé události / logycanonical+implemented+verifiedhandshake a rámce WebSocketu pozorované v §3; oddělené od trvalé knihy

Governance

schopnoststatusevidence
efektivní pravidlačástečně implementovánopravidla jako objekty a graf pravidel; přednost se řeší jen v lib/; COCKPIT.md uvádí „žádné řešení přednosti pravidel“ jako rozhodnutí
doktrínycanonical+implemented+verifiedlib/doctrine.sh; test/cases/17,18; žádné pravidlo projektu není vynucováno nástrojem, z doktríny
politikyčástečně implementovánotypované a spotřebovávané; upravované ručně; žádná schopnost, žádný povrch
ADRimplementováno, ale duplikovánolib/adr.sh a lib/decision.sh jsou dvě jména pro jeden pojem a release/changelog.rs stále odkazuje na .ai/repo/decisions/; přidělování čísel je nehlídané
řešení kontextuimplementováno, ale duplikovánodirectories.list v Rustu a lib/context.sh v shellu odpovídají na jednu otázku; zkompilovaný kontext s rozpočtem nemá žádnou schopnost
provenancecanonical+implemented+verifiedpůvod schopností a původ hran znalostí, oba skutečné
předběžná kontrola správyčástečně implementovánocheck a worktree guard; slovo se nevyskytuje nikde v src/; nic v Cockpitu
porušení a nápravacanonical+implemented+verifiednálezy quality.report nesou nápravu; tests/cli_validate_violations.rs — omezeno jen na dokumentaci Rust API a CLI
kontroly kvalitycanonical+implemented+verified.ai/repo/ci/gates.yaml a scripts/ci-plan --check; žádná schopnost a žádný pohled na stav kontrol
povinnosti „hotovo“implementováno, ale duplikovánoobligations.closure čte kontrakt; lib/finish.sh o něm rozhoduje

Observabilita

schopnoststatusevidence
zdraví serverucanonical+implemented+verifiedhealth.report a jeho sada kontrol; /cockpit/health; tests/health_server.rs
stav procesu / runtimucanonical+implemented+verifiedserver.status; tests/server_status.rs — na žádné stránce Cockpitu
čítače výkonucanonical+implemented+verifiedperf.counters; /cockpit/activity — což není v postranním panelu
časování fázícanonical+implemented+verifiedtests/hot_path.rs; na straně shellu existuje druhý systém měření času
chování cachecanonical+implemented+verifiedpolitika cache a čítače; existuje samostatná cache shellu
historie požadavků / provedenírozbitéjen v procesu, trvalá polovina je jiný model (majordomus history); po restartu nepřežije nic
diagnostikacanonical+implemented+verifiedsada kontrol zdraví; doctor je jiný předmět rozhodnutím
Stav CIchybíkontroly a jejich plán jsou kanonické; nic nečte stav běhu na žádném povrchu
stav nasazeníčástečně implementovánodeploy.* čte deklarované nasazení; živý stav tam není
aktuálnost dokumentace a webučástečně implementovánoodpověď CI, ne Cockpitu
drift generovaného artefaktucanonical+implemented+verifiedartifacts.list, generate --check, kontrola zdraví generated-registry; zůstávají dva zapisovatelé docs/generated/

Dokumentace a znalosti

schopnoststatusevidence
dokumentacečástečně implementovánosestaveno a připojeno na /docs — 503 v checkoutu, který web nesestavil (§3); není oblastí Cockpitu
generovaná referencecanonical+implemented+verifiedvygenerovaný strom; tests/generated_documents.rs; dvakrát bajtově shodný
Reference APIcanonical+implemented+verified/cockpit/api a generované OpenAPI
Swaggercanonical+implemented+verified/swagger poskytováno jako infrastruktura; podle deklarace to není schopnost
knowledgečástečně implementovánokompilátor je pouze shell, žádná schopnost
graf ADR, graf pravidel, graf případů užitícanonical+implemented+verifiedgraph.get; dokončeno dříve, než se načte jakýkoli JavaScript
prohledávatelné znalosti projektuimplementováno, ale duplikovánoobjects.search a /cockpit/search proti majordomus search v shellu
odkazy do GH PageschybíCockpit nikdy neodkazuje na publikovaný web

5. Audit driftu

Repozitář sesouhlasuje většinu svých zrcadel a to je právě tak zjištění jako drift: CLI s registrem, každý generovaný artefakt s jeho zdrojem, dva stavové enginy plánu mezi sebou bajtovou shodou, dispatch tabulka s registrem příkazů, poskytovatelé se šablonami, projekce verze s jediným místem, kde se píše. docs/HARDCODING_LEDGER.yaml je poctivý rejstřík toho, co zbývá. Co následuje, je jen to, co není sesouhlaseno, podle tříd, které balík jmenuje.

Dvě třídy se vrátily prázdné a hledání jsou zaznamenána, aby šel negativ ověřit: ručně psané cesty OpenAPI — žádné (dokument se staví z registru; paths, operationId a tagy nemají žádná literální místa) a pole workflow — žádná (žádný soubor nevyjmenovává recepty just; kontrola command-graph odmítne ručně psaný bridge).

třídazjištěníkanonický vlastníksesouhlaseno?
pole cestcockpit/nav.rs::areas() je doslovný seznam a je už pozadu za dispatcherem: Executions a Quality jsou deklarovány v enumu Area, vykreslovány stránkami a směrovány, ale chybí v areas()směrování tras cockpit/mod.rsne — a tři povrchy čtou zastaralý seznam: postranní panel, validace oblastí produktového modelu a datová sada cockpit-areas webu
pole cestURL stránek a koncové body API zapsané jako literály napříč cockpit/pages.rs, včetně ručně psaného zrcadla navigace na stránce 404nav.rs a HTTP expozice registrune
pole cestTabulka rout docs/COCKPIT.md postrádá commands, continuity, directories, artifacts a qualitycockpit/mod.rsne — veřejný popis produktu je nepravdivý
katalogy příkazůbin/majordomus usage() opakuje jednořádkové shrnutí každého příkazu a scripts/generate-site-data publikuje tuto kopii jako data webushare/commands.yamlpouze členství (test/cases/30_command_registry.sh); text shrnutí se nekontroluje. Je to otevřený řádek ledgeru command-surface-has-no-owner
duplicitní výčty stavůshare/cockpit/executions.js::isFinalState rozhoduje o finalitě provedení v prohlížečiexecution/model.rs::is_finalne — nový koncový stav znamená stránku, která se dotazuje donekonečna, přičemž všechny kontroly jsou zelené
duplicitní výčty stavůshare/cockpit/socket.js má napevno zapsané řídicí zprávy streamu, ačkoli server protokol publikujeexecutions.protocolne
duplicitní schématasmlouvy generovaných artefaktů pod share/schemas/generated/ se píší ručně pro artefakty, jejichž tvarem je struktura v Rustustrukturajen jeden směr: artefakt nemůže porušit schéma, ale schéma může tiše zaostat za typem
pole poskytovatelůlib/capture.sh zakóduje nastavení souboru jednoho poskytovatele, názvy hooků a cesty hooků jako poziční řetězceshare/providers.yaml, které nemá pole pro hookyne — fakt nemá vlastníka, takže jej providers-check nevidí
logika jen ve frontendupalette.js sestavuje volání API a URL stránek z pevně zapsaných cest, zatímco všechny sousední moduly je čtou z atributů data-mj-*vlastní data stránkyne — jediná komponenta, jejímž účelem je „dosáhnout všeho“, je ta, která mine přesunutý mount
logika jen ve frontenduworktrees.js filtruje, která pole topologie „záleží“ při znovunačtenídigest na straně serverune
ruční seznamy koncových bodůadresa loopback je zkompilována do každého zveřejněného příkladu curlkonstanta výchozího portu CLIne
soupisy dokumentace a navigacekurátorská navigace webu plus doslovný seznam tras dlaždic v site-checkgenerované kolekcene — nová kolekce se dodává nedosažitelná a nekontrolovaná; obojí jsou otevřené řádky ledgeru
pevně zapsané počtyvčetně prvního návrhu této větve, který uváděl počet projektových pravidel, jejž vlastní nové pravidlo téhož commitu zneplatniloto, co se počítáneexistuje žádný rozhodovatel: project.no-counts-in-prose výslovně říká, že rozhoduje recenzent

Poslední řádek stojí za pozastavení. Pravidlo je blokující a nemá vynucování a dokument, který zavedl pravidlo o kanonické sémantice, jej porušil během jednoho commitu. To je třída v miniatuře: zrcadlo vytvoří někdo, kdo pravidlo zná, zatímco o pravidlu píše.

6. Plán

Hlavní příčiny, seřazeno

R1 — životní cyklus a registr jsou ve dvou programech a jen jeden z nich má plochy. Vše níže z toho plyne. Není to nehoda a je to zdokumentováno; prostě to není slučitelné s tím, aby se Cockpit stal vývojovou plochou.

R2 — runtime nemá žádnou mutující vývojovou schopnost. CapabilityKind::Command používají jen roviny provádění a peerů a nikde jinde, takže neexistuje typované vstupní schéma pro žádný vývojový přechod na žádném strojovém povrchu.

R3 — graf příkazů vidí shellový nástroj jen na nejvyšší úrovni. Každý uzel nástroje je skupina, takže politika expozice nemá co posuzovat a doplňování nemá co nabídnout a důvod zadržení každého je vlastností skupiny, a ne operace.

R4 — příkazy životního cyklu jsou interaktivní. Většina uzlů nástrojů je zadržena, protože se člověka na něco ptají. Interaktivitu povrch nijak neobejde.

R5 — nikde neexistuje vývojová historie. Trvalá úroveň je lokální ledger s vlastním slovníkem; živá úroveň je na proces a při ukončení zapomíná; a majordomus run nezapisuje ani na server, ani, pro vlastní provedení, nic trvalého.

R6 — seznamy sousedící s UI jsou ty bez správců. Repozitář své zrcadlené kopie sladí dobře, kromě hranice, kterou chce tento balíček rozšířit: oblasti navigace, zdokumentovaná směrovací tabulka Cockpitu a sémantika rozhodovaná v prohlížeči.

Cílový tok jedné vývojové mutace

flowchart TD
  entry["Cockpit form / MCP tool /<br>HTTP POST / CLI"]
  cap["capability! kind: command<br>the only place the transition is decided"]
  entry -->|"typed input, validated against<br>the capability's own schema"| cap
  cap --> object["the object in its canonical storage<br>(.ai/repo/project/issues/&lt;id&gt;.yaml)"]
  cap --> ledger["a ledger event whose name<br>share/events.yaml declares<br>(durable record)"]
  cap --> stream["the execution stream<br>(live view)"]

Nic v tom diagramu není nová infrastruktura. Každé políčko existuje; chybí šipky od prvního políčka k ostatním.

Graf závislostí

flowchart TD
  a["A. one mutating development<br>capability, end to end"]
  b["B. events: a mutating capability<br>appends to the ledger"]
  c["C. the lifecycle capabilities<br>(task, session, checkpoint,<br>handover, finish)"]
  d["D. compiled context as a capability"]
  e["E. Cockpit development pages<br>(issues, sessions, peers)"]
  f["F. navigation and route derivation<br>(independent of A–D; do it any time)"]
  a --> b
  a --> c
  a --> d
  b --> e
  f --> e

Fáze

Fáze A — jeden vertikální řez a nic jiného. Vezměte přechody plánu (start/verify/done) a deklarujte je jako jeden capability! druhu command v modulu plan, s typovaným vstupem, případy měření a registrovanou událostí knihy. Nasměrujte lib/plan.sh na něj, tak jako lib/context.sh a lib/capture.sh už volají binárku v Rustu. Odstraňte backing:plan z .ai/repo/development-semantics-baseline.txt.

Přijetí: nástroj MCP existuje a tools/call posune úkol; POST /api/v1/plan/… se objeví ve vygenerovaném OpenAPI, aniž by ho kdokoli upravil; stávající generický runner Cockpitu ho umí řídit bez úpravy Cockpitu; lib/plan.sh už samo nezapisuje YAML; test/cases/99_plan_capabilities.sh stále drží oba enginy na bajtové shodě; kontrola development-semantics hlásí o jednu položku méně a odmítne návrat baseline.

Tato fáze je celá architektura v miniatuře. Pokud přistane čistě, každá další fáze má stejný tvar; pokud ne, nic pozdějšího by nefungovalo také.

Fáze B — jeden model událostí. Schopnost druhu command připojí do ledgeru událost, jejíž název deklaruje share/events.yaml, a stejnou změnu publikuje do streamu provádění. Dejte ledgeru schopnost čtení, aby Cockpit mohl vůbec ukázat historii.

Fáze C — životní cyklus. task start/checkpoint/finish, session open/close, handover, evidence, podle vzoru, který založila fáze A, každý neinteraktivní, aby je politika expozice přestala zadržovat.

Fáze D — sestavený kontext jako schopnost. Patří paralelní práci na kompilátoru kontextu, ne této fázi.

Fáze E — vývojové stránky Cockpitu. Úkoly, milníky, relace, peery, úloha. Až po A–C, a jen jako projekce: stránka, která sama počítá stav, je přesně ta vada, které má celý tento dokument předejít.

Fáze F — odvodit navigaci. Sladit areas() s enumem Area a dispatcherem a odvodit směrovací tabulku docs/COCKPIT.md nebo ji zkontrolovat. Nezávislé na zbytku; levné; zabrání další nepropojené stránce.

Necíle

Terminál nebo PTY na jakémkoli povrchu. Úprava zdroje repozitáře v prohlížeči. Opakování a plánovač — provedení ve vlastní modulové dokumentaci uvádí, že je z rozhodnutí nemá. Druhé úložiště dat. Druhý projektový model. Hromadný port lib/*.sh, dříve než může cokoli jiného začít. Nové podstatné jméno pro cokoli, co repozitář už pojmenovává.

Rizika

rizikozmírnění
master se během fáze pohnepohnul se během tohoto auditu; rebase při každém přistání a dávejte přednost malým větvím
paralelní pracovníci vlastní překrývající se cestyčtyři větve už zabírají cesty, které zabírá tato úloha; check --overlap je jmenuje, nástěnka peerů ne
druhý název existujícího pojmu přistane paralelnějeden ano: modul devtask, který se dokumentuje jako spojení nad plan a trace místo druhého modelu a drží tvrzení o rovnosti vůči plan.issues. Je aditivní a má zůstat, ale jeho slovník připravenosti je druhý slovník stavů odvozený od kanonického — fáze A by měla pojmenování sbližovat, ne pěstovat třetí
měření provedená přes zastaralý serverčtyři z pěti serverů běžících během tohoto auditu byly zastaralé; vždy měřte z čerstvě postaveného spustitelného souboru
vytížený stroj mění pomalost ve falešná selhánípozorováno při zátěži 109 na 18 jádrech; selhání časování nečtěte jako defekt, dokud se nespustí znovu v klidu

Soubory, které se pravděpodobně změní

apps/majordomus-cli/src/capability/builtin/plan.rs, src/plan.rs, share/events.yaml, lib/plan.sh, .ai/repo/development-semantics-baseline.txt a později src/capability/builtin/{continuity,obligations}.rs, lib/{session,checkpoint,handover, evidence,finish}.sh, src/cockpit/{nav,pages}.rs, docs/COCKPIT.md.

Generované soubory, které se nikdy nesmějí upravovat ručně

docs/generated/**, site/data/**, site/content/**, share/allow/**, share/sections/**, AGENTS.md, CLAUDE.md, .bb/AGENTS.md, share/design/*.css, apps/majordomus-cli/src/web/tokens.css, apps/majordomus-cli/src/design/tokens.yaml, deploy/Dockerfile, docs/SITE_CLAIMS.md, docs/PLAN_STATUS.md, docs/PAGES_STATUS.md. Každý zapisuje majordomus generate nebo scripts/derive a kontroluje se proti čerstvé generaci; úprava je hlášené selhání, ne tichá odchylka.

Selhání k opravě před jakýmkoli rozšířením IDE

#selháníproč blokuje
F1server, jehož spustitelný soubor byl nahrazen, hlásí sám sebe jako ready; zastaralost je vidět jen vnějšímu čtenářikaždé měření provedené přes něj je tiše špatně, včetně měření toho, co IDE chybí
F2majordomus run nikdy nedosáhne běžícího serveruneexistuje žádná historie provedení, kterou by mohl povrch ukázat, a jediná stránka, která provedení ukazuje, ukazuje rovinu, do které nikdo nezapisuje
F3/cockpit/worktrees za 18.3 s a /cockpit/quality za 4.6 s oproti 1–4 ms jindeIDE se používá nepřetržitě; to už je to nejpomalejší, s čím se člověk setká
F4/docs/ je 503, dokud web není postavenvývojář vstupující do čerstvého worktree narazí na rozbitý povrch dokumentace
F5směrované stránky Cockpitu, které v navigaci chybínové stránky jsou ve výchozím stavu neviditelné a sonda prochází z navigace, takže to nic nezachytí
F6doctor běží 51–74 s proti rozpočtu 3 s při každém commituvlastní cena životního cyklu; zaplatí se při každé akci řízené z IDE
F7MAJORDOMUS_SHARE se dědí do hooků a podle způsobu vyvolání je rozbíjírozbilo to push samotného tohoto auditu

Nejmenší bezpečná další fáze

Fáze A, a z ní jen přechod done: jedna capability! druhu command, která posune jeden úkol, s jeho událostí ledgeru a jeho případem užití. Dotýká se jednoho modulu, jednoho shellového souboru a jednoho řádku základního stavu; je dokazatelná od začátku do konce přes čtyři povrchy na jedno posezení; a buď založí vzor pro všechno ostatní, nebo okamžitě ukáže, že vzor je špatný.

7. Opětovné ověření 2026-09-11 a objekty plánu

Audit výše byl změřen proti 08e4bb252. Tato sekce znovu měří jeho nosná tvrzení proti masteru na 87b9ac659, ze spustitelného souboru sestaveného ve worktree, které měření provedlo, ne přes žádný běžící server — varování §3 o zastaralých serverech platí pro tuto sekci stejně jako pro původní. Řádek je opraven, kde příkaz říká, že se změnil, a označen jako neověřený, kde žádný příkaz nebyl spuštěn.

P2 z §1 to předpověděl: základ auditu byl historický dřív, než audit skončil. Na začátku byl 08e4bb252, na konci 06fa25891 a o den později 87b9ac659.

Ústřední zjištění stále platí

$ python3 -c "import json;c=json.load(open('docs/generated/registry.json'))['capabilities'];\
              print([x['id'] for x in c if x['kind']=='command'])"
['executions.cancel', 'executions.start', 'peers.announce']

$ python3 -c "import json;d=json.load(open('docs/generated/openapi.json'));\
              print(sorted((p,m) for p,o in d['paths'].items() for m in o if m!='get'))"
[('/api/v1/executions/cancel', 'post'), ('/api/v1/executions/start', 'post'),
 ('/api/v1/peers/announce', 'post')]

Tři mutující schopnosti, tři operace jiné než GET, žádná z nich není vývojářsky zaměřená. Odstavec, kterým tento dokument začíná, je po dni přistání nezměněn.

Co se změnilo: dvě schopnosti a jeden modul

$ git diff --stat 08e4bb252 87b9ac659 -- docs/generated/registry.json   # then compared as sets
capabilities added:   devtask.issue, devtask.milestone
capabilities removed: none
modules added:        devtask
counts:               78 → 80

Obě jsou kind: query — nic nečtou ani nezapisují — ale jsou první kanonickou odpovědí runtimu na úkol jako práci: připravenost, vlny, překážky, paralelní podmnožiny, každé pole nese, zda ho napsal člověk, nebo odvodil stroj, jako čistou funkci kanonických záznamů a výslovně tak, aby povrch, který ji čte, sám nic neodvozoval. Dvě řádky §4 jsou kvůli tomu výše opraveny. Dokumentace modulu devtask sama říká, že to není druhý projektový model, a tabulka rizik v §6 už jmenuje konvergenci, kterou to vytváří; to riziko nyní nese milník, a ne jen tento dokument.

ADR: přečíslování nebylo potřeba

ADR 0040 je v masteru a je rozhodnutím tohoto dokumentu.

$ git log --oneline -1 87b9ac659 -- .ai/repo/adrs/0040-development-semantics-are-capabilities-of-one-runtime.md
93c5f3f87 docs(architecture): name the canonical development runtime and make it enforceable

$ git merge-base --is-ancestor feature/development-runtime-model origin/master && echo merged
merged

Celé feature/development-runtime-model — tento audit, DEVELOPMENT_RUNTIME.md a rozhodnutí — přistálo na master mezi dokončením auditu a tímto přeověřením. Žádné číslo nebylo třeba hledat a žádné nebylo přiděleno.

Dvě další zjištění o Cockpitu, změřená zde

/cockpit/graphs/composed je megabajt v jednom dokumentu. Změřeno proti serveru, který tento worktree sestavil a spustil:

$ curl -s "$B/cockpit/graphs/composed" -o composed.html -w '%{http_code} %{size_download} %{time_total}\n'
200 1196619 0.059885
$ wc -m < composed.html ;  grep -o '<tr' composed.html | wc -l ;  grep -c 'page=' composed.html
1196549
4729
0

Toto následuje smlouvu, ne ji popírá: docs/COCKPIT.md uvádí, že stránka detailu nestránkuje nic, a dává důvod — kresba je vylepšení, čtenář bez JavaScriptu má jen tyto seznamy a čtenář ověřující, zda je cesta v manifestu, ji musí najít vlastním hledáním prohlížeče. Smlouva je správná; při 4 729 řádcích jí cena přerostla, protože megabajt nemůže prohledat ani člověk. Přišlo s tím druhé zjištění: průchod v apps/majordomus-cli/tests/cockpit.rs pojmenovává /cockpit/graphs, /cockpit/graphs/topology a /cockpit/graphs/registry, a ne /cockpit/graphs/composed — největší stránku, kterou Cockpit servíruje, nevykresluje žádný test. Naplánováno jako I1509.

/cockpit/search neporušuje tvrzení o provozu bez JavaScriptu. Bylo to hlášeno jako prázdná skořápka o 157 znacích, která odporuje With JavaScript off every page still shows everything it knows. Nereprodukuje se a oprava je důležitější, než by bylo samo tvrzení:

$ curl -s "$B/cockpit/search"        | wc -m        # no query
16212
$ curl -s "$B/cockpit/search?q=scope" | wc -m       # a query, server-rendered
42865                                               # 164 result rows, no script involved

Oněch 157 znaků je viditelný text oblasti <main> bez zadaného dotazu — podle mého počtu 160 — a ten text je Type something. The search is the repository's own: case-insensitive, over identities, titles, descriptions and content. Stránka nese skutečný <form method="get" action="/cockpit/search">; odeslání bez JavaScriptu vrací výsledky v HTML. Stránka bez dotazu neví, co ukázat, takže tvrzení platí. Žádný úkol k tomu nebyl napsán. Je to zaznamenáno, protože měření, které číslo vyprodukovalo, bylo správné a závěr z něj vyvozený ne, což je z těch dvou chyb ta dražší.

Index byl degradovaný a příčina nebyla v repozitáři

$ curl -s http://127.0.0.1:8741/api/v1/repository | grep -o '"state":"[a-z]*"'
"state":"degraded"

Čtyři soubory si nárokovaly majordomus://session/s-20260909152316-024f, takže byl vyloučen každý žadatel a relace chyběla v registru, který ji má držet. Jeden byl commitnut; tři byly zapsány další ráno, s odstupem třinácti a patnácti sekund, closerem, který znovu uzavíral relaci uzavřenou předchozí večer, a všechny tři ležely staged a necommitnuté v primárním checkoutu — což je to, co čte běžící server, a proto žádný commitnutý strom nikdy nebyl špatný. Množiny commitů byly porovnány, ne předpokládány: každá ze tří obsahuje všech 94 commitů commitnutého záznamu a 202 dalších. Úplný záznam je nyní ten ve stromu a částečný zmizel; nadbytečné soubory byly unstagnuty a ponechány na disku. Zapisovač je beze změny a je to I1503.

Řádky bez nového ověření

Každý řádek §4, který není výše jmenován, je převzat beze změny a neověřen proti 87b9ac659. Sada schopností se mezi oběma commity posunula přesně o dvě, takže řádek, jehož důkazem je schopnost nebo test, které stále existují, se pravděpodobně nezměnil — ale „pravděpodobně“ není měření a pravidlo tohoto dokumentu říká, že číslo bez příkazu vedle sebe je v něm vada.

Tři časování v §3 se výslovně neměřila znovu a neměla by se citovat: 18,3 s pro /cockpit/worktrees, 4,6 s pro /cockpit/quality a 51–74 s pro doctor. První se opravuje na fix/cockpit-answers-quickly a tento dokument tu práci neduplikuje. doctor bylo pozorováno na 83,6 s během pre-commit hooku této relace na stroji, na kterém běželo mnoho sad najednou, což je podle tabulky rizik v §6 přesně ta podmínka, za které se časování nesmí číst jako vlastnost příkazu.

Čím se stal plán z §6

položka plánuobject
F2 — run nikdy nedosáhne serveruI1501
F1 — zastaralý server ohlásí, že je připravenI1502
duplicitní identita relaceI1503
Fáze A — jedna měnící vývojová schopnostI1504
Fáze B — jeden model událostíI1505
Fáze C — životní cyklusI1506
Fáze E — vývojové stránky CockpituI1507
Fáze F / F5 — navigace odvozená z dispečeraI1508
složený grafI1509
tato matice se kontroluje proti plánuI1510
F4 — /docs/ je 503 v nesestaveném checkoutuI1511
Stav CI nemá čtenářeI1512
F3 — /cockpit/worktrees je pomalénezapsáno: fix/cockpit-answers-quickly
Fáze D — zkompilovaný kontextnezapsáno: patří práci na kompilátoru kontextu
F6 — doctor nad rozpočtemnezapsáno: hlásí samo doctor při každém běhu
F7 — MAJORDOMUS_SHARE zděděno do hookůnezapsáno: rozbilo to i commit této relace

Jak se to měřilo

# the supported start path, reuse, and the fleet
bin/majordomus-cli serve status
bin/majordomus-cli serve ensure

# every surface (B is the address `serve ensure` printed)
curl -s -o /dev/null -w '%{http_code} %{content_type} %{size_download} %{time_total}\n' "$B/<path>"
curl -s -H 'Accept: text/html' "$B/"

# the canonical API document, counted rather than read
python3 -c "import json;d=json.load(open('openapi.json'));print(len(d['paths']))"

# MCP over HTTP, with the session id the initialize response returns
curl -X POST "$B/mcp" -H 'Content-Type: application/json' \
     -H 'Accept: application/json, text/event-stream' \
     -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{…}}'

# the live channel, bounded
curl -s -i -N --http1.1 --max-time 4 -H 'Connection: Upgrade' -H 'Upgrade: websocket' \
     -H 'Sec-WebSocket-Version: 13' -H 'Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==' "$B/events"

# whether `run` reaches the server: poll the server while a run is in flight
bin/majordomus-cli run objects.verify & while …; do curl -s "$B/api/v1/executions"; done

# the registry, the generation chain and the lifecycle
bin/majordomus-cli capabilities validate
bin/majordomus-cli generate --check
bin/majordomus start "…" --scope …   ;   bin/majordomus check

Počty v tomto repozitáři zastarávají. Měřte, ať nevěříte číslu napsanému zde, včetně těchto.

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