I2463 — Vlak navrstvených pull requestů je typovaný objekt, servírovaný všude a vykreslený jako graf
Odvodit trainy otevřených pull requestů (řetězce a DAGy deklarovaných stacků i stacků podle základní větve) z vlastního zaznamenaného pozorování executoru jako typovaný read model, jednou ho promítnout jako schopnost integration.trains do příkazové řádky (majordomus prs trains), HTTP a MCP a vykreslit ho v Cockpitu na /cockpit/trains jako interaktivní graf se serverově vykreslenou tabulkou vedle něj.
HOTOVO vlna 0 · p2 · profil implementation · bezpečné souběžně
Součást development-runtime — The runtime has a development surface.
Cíl
Odvodit trainy otevřených pull requestů (řetězce a DAGy deklarovaných stacků i stacků podle základní větve) z vlastního zaznamenaného pozorování executoru jako typovaný read model, jednou ho promítnout jako schopnost integration.trains do příkazové řádky (majordomus prs trains), HTTP a MCP a vykreslit ho v Cockpitu na /cockpit/trains jako interaktivní graf se serverově vykreslenou tabulkou vedle něj.
Proč
Executor už parsuje každý řádek `Stacked on #N` / `Depends on #N` a každou base branch, která je headem jiného pull requestu, do závislostí a připravuje další head každého článku pod refs/prep/<n> před jeho pushem v jeho řadě. Co je vlak, který článek je další, který připravený head je stále nepushnutý a jak daleko za masterem je každý článek, žilo jen ve zprávách relací a v lokálních refech, které nikdo jiný nemohl číst; dvě relace se jednoho večera vzájemně ptaly na pořadí týchž jedenácti článků. Vlastník 2026-10-11 požádal o interaktivní, podrobnou vizualizaci vlaku ve stylu Neo4j Browser.
Aktuální stav
Závislosti a důvody jako stacked_on:#807 jsou vidět po jednom pull requestu v majordomus prs status; nic je neseskupuje do vlaků, neuspořádává jejich řadu ani neporovnává refs/prep/<n> s head, který servíruje forge.
Cílový stav
majordomus prs trains, GET /api/v1/pull-requests/trains a MCP majordomus_pull_request_trains odpovídají stejnými typovanými vlaky: články s číslem, názvem, větví, head, dispozicí a důvody, povinnými kontrolami, vztahem k master, připraveným head a tím, zda je pushnut, pořadím a pozicí, kořenem a vrcholem; /cockpit/trains je kreslí pomocí Cytoscape (barva podle dispozice z design tokenů, master jako kotva, označené šipky STACKED_ON / DEPENDS_ON, panel vlastností, filtry, hledání, přizpůsobení a zoom, přístup z klávesnice, respektování omezeného pohybu) a vypisuje tytéž fakty jako tabulku bez JavaScriptu.
Rozsah
- apps/majordomus-cli/src/integration/train.rs
- apps/majordomus-cli/src/integration/mod.rs
- apps/majordomus-cli/src/capability/builtin/integration.rs
- apps/majordomus-cli/src/cli.rs
- apps/majordomus-cli/src/commands/prs.rs
- apps/majordomus-cli/src/cockpit/mod.rs
- apps/majordomus-cli/src/cockpit/nav.rs
- apps/majordomus-cli/src/cockpit/pages.rs
- apps/majordomus-cli/src/cockpit/trains.rs
- share/cockpit/trains.js
- .ai/repo/adrs/0138-a-train-of-pull-requests-is-a-typed-object-that-can-be-seen.md
- docs/INTEGRATION.md
- docs/COCKPIT.md
- test/cases/1072_the_train_is_seen.sh
- share/version.txt
- apps/majordomus-cli/Cargo.toml
- apps/majordomus-cli/Cargo.lock
- docs/generated
- site/data
- site/content
Mimo rozsah
- Přesun, push nebo smazání jakéhokoli ref, včetně refs/prep/<n>: model je čte
- Nový proud: stránka dotazuje HTTP schopnost (majordomus monitor je I2400-I2407)
Závislosti
Žádné. Tento úkol je kořenem grafu.
Kritéria přijetí
- Vlaky se odvozují čistými, jednotkově testovanými funkcemi ze zaznamenaného pozorování, fronty a lokálních refs refs/prep/<n>; nic nesahá na síť ani nezapisuje ref
- integration.trains je deklarováno jednou pomocí capability! a promítáno do příkazové řádky, HTTP a MCP příkazem majordomus generate
- /cockpit/trains kreslí trainy interaktivně a stejná fakta vykresluje jako tabulku bez JavaScriptu; barvy pocházejí z designových tokenů
- test/cases/1072_the_train_is_seen.sh se změnou projde a bez ní proti master selže
Validace
- cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib integration::train
- MJ_TEST_JOBS=4 bash test/run.sh 1072_the_train_is_seen
Požadované důkazy
- train_model_unit_tests
- trains_projection_case
Důkazy
| pokrývá | typ | command | výsledek | u commitu |
|---|---|---|---|---|
| train_model_unit_tests | ci | cargo test --lib integration::train (validate run 38223440282 na 722228ef3c, vrcholu v0.21.0) | 17 testů integration::train v pořádku | 722228e |
| trains_projection_case | ci | test/run.sh 1072_the_train_is_seen; cargo test --lib cockpit::trains (běh validate 38223440282 na 722228ef3c, top v0.21.0) | případ 1072_the_train_is_seen ok; 8 testů cockpit::trains ok | 722228e |
Časová osa
- zahájeno
- 2026-10-12T10:59:39Z
- ověřeno
- 2026-10-12T10:59:46Z
- dokončeno
- 2026-10-12T10:59:59Z
Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.
Kanonický záznam: .ai/repo/project/issues/I2463.yaml. Přečtěte jej zpět pomocí majordomus plan show I2463.