M004 — Výkon je spustitelný důkaz a horká cesta nedělá žádnou kanonickou práci dvakrát
Každý veřejný příkaz lze měřit z registru příkazů se studenými i teplými distribucemi, fáze a čítače práce libovolného běhu lze vypsat, cache a dávková čtení, které odstraňují opakovanou práci, zachovávají každý pozorovatelný výsledek, přijatá základní hodnota žije v repozitáři a kontrola odmítne regresi podle politiky a pre-commit hook je dost rychlý na to, aby ho nikdo neobcházel.
AKTIVNÍ 18 of 40 issues done
- připraveno
- 12
- blokováno
- 10
- aktivní
- 0
- verify
- 0
- hotovo
- 18
- zrušeno
- 0
Problém
Shellový nástroj je dost pomalý na to, aby se mu lidé vyhýbali: doctor trvá deset sekund a běží při každém commitu přes pre-commit hook, watch stejně dlouho, knowledge nodes šest sekund, plan validate čtyři, kontrola dat webu a jediný testovací případ půl minuty a sada půl hodiny. Nikdo neuměl říct, která fáze za to může, protože nic fáze neměřilo; dva validátory, které stojí dvě třetiny doctoru, jsou smyčky s jedním procesem awk na klíč nad soubory, které už jednou byly zploštěny. Spustitelný soubor v Rustu měřený ve stejnou dobu je rychlý, takže pomalost je vlastní shellového nástroje.
Výsledek
Každý veřejný příkaz lze měřit z registru příkazů se studenými i teplými distribucemi, fáze a čítače práce libovolného běhu lze vypsat, cache a dávková čtení, které odstraňují opakovanou práci, zachovávají každý pozorovatelný výsledek, přijatá základní hodnota žije v repozitáři a kontrola odmítne regresi podle politiky a pre-commit hook je dost rychlý na to, aby ho nikdo neobcházel.
Aktuální stav
MJ_TIMING vypisuje fáze podle validátorů a dva počítadla práce (feature/performance-truth 77f5d79). Žádný příkaz benchmark, žádná základní linie, žádná kontrola regrese, žádná cache parsování, žádná doktrína výkonu; čísla výše jsou změřenou základní linií na tomto repozitáři.
Cílový stav
majordomus bench odvozuje své cíle ze share/commands.yaml, zaznamenává p50, p90, p95, p99, min, max, mean a stddev pro každý příkaz a režim, lokální běhy ukládá do .ai/local/benchmarks/, porovnává s .ai/repo/benchmarks/baseline.json podle bloku benchmark v politice a při regresi skončí nenulovým kódem. Validátory registru, katalogu, modelu projektu a pokrytí čtou každý plochý soubor jednou. Zploštělé YAML se cachuje v .ai/local/cache/ podle hashe obsahu. Pravidla projektu stanoví doktrínu, docs/PERFORMANCE.md ji vysvětluje a CI spouští strukturální kontroly.
Rozsah
- lib
- bin/majordomus
- share/commands.yaml
- share/allow
- share/standard/majordomus/
- share/skeleton
- .ai/repo/rules/project
- .ai/repo/benchmarks
- dokumentace
- skripty
- test/cases
- test/lib.sh
- .github/workflows/validate.yml
Mimo rozsah
- Jakákoli změna apps/majordomus-cli, jejíž naměřená latence není problém
- Databáze metrik, dashboard, tracingový backend nebo jakákoli telemetrická služba
- Hot reload nebo sledování souborového systému
- Trvalá cache výsledků schopností napříč procesy nad rámec cache zploštění
- Měření výkonu externích služeb
Kritéria přijetí
- Každý veřejný příkaz v share/commands.yaml je cílem měření výkonu bez druhého seznamu kdekoli
- Studená a teplá rozdělení se zaznamenávají zvlášť s p50, p95 a p99 a nikdy se nemíchají
- Lokální běh se uchovává pod .ai/local/benchmarks/ a nikdy se nepovažuje za základní hodnotu
- Commitnutá základna se aktualizuje jen výslovným příkazem na čistém stromu
- bench --check skončí nenulově při regresi nad prahy politiky a jmenuje příkaz, metriku, obě hodnoty a práh
- Každý kanonický soubor se na příkaz zploští nejvýše jednou, což dokazují čítače práce v jednom případu
- Zásah i minutí cache produkují bajtově shodný výstup příkazu pro každý příkaz jen pro čtení, což dokazuje případ
- doctor v tomto repozitáři běží pod rozpočtem, který politika deklaruje, a pre-commit hook ho zdědí
- Pravidla výkonu jsou projektová pravidla pod .ai/repo/rules/project a docs/PERFORMANCE.md je reference, na kterou odkazuje README
Validace
- bash test/run.sh
- bin/majordomus doctor
- bin/majordomus watch
- bin/majordomus bench --check
- scripts/generate-site-data --check
- shellcheck -x -s bash bin/majordomus lib/*.sh
Požadované důkazy
- phase_timing
- batch_reads
- flatten_cache
- bench_targets_derived
- bench_persisted
- baseline_explicit
- regression_refused
- doctor_under_budget
- docs_integrated
Rizika
- Cache je druhá věc, které lze věřit. Cache flatten je klíčována hashem obsahu souboru, který cachuje, takže zastaralá položka nemůže být přečtena pro změněný soubor; může stát jen minutí.
- Prahy nástěnného času jsou mezi stroji zašuměné. Politika regrese je konzervativní a relativní, strukturální počítadla jsou přesná a jen počítadla kontrolují CI přísně.
- Dávkování čtení mění způsob psaní validátorů. Každý přepis dokazuje případ, který pro validátor už existuje, spuštěný před a po, plus případ počítadla.
Úkoly
Každý z nich je prováděcí kontrakt s vlastními kritérii přijetí, validačním příkazem a požadovanými důkazy. Sloupec wave je vrstva grafu závislostí, v níž úkol leží.
| issue | status | vlna | závisí na | název |
|---|---|---|---|---|
| I0817 | HOTOVO | 0 | — | Časování fází a čítače práce za MJ_TIMING |
| I0818 | HOTOVO | 1 | I0817 | Registr příkazů se čte jedním průchodem |
| I0819 | HOTOVO | 1 | I0817 | Model projektu se načítá jedním zploštěním na soubor a bez vyhledávání po souborech |
| I0820 | PŘIPRAVENO | 2 | I0818, I0819 | Validátory katalogu, DAG, kontextu a příkazového povrchu čtou své vstupy jednou |
| I0821 | PŘIPRAVENO | 1 | I0817 | Zploštěné YAML se cachuje v .ai/local/cache podle hashe obsahu |
| I0822 | BLOKOVÁNO | 3 | I0818, I0819, I0820 | Každý kanonický soubor se na příkaz zploští nejvýše jednou |
| I0823 | HOTOVO | 1 | I0817 | majordomus bench: cíle odvozené z registru příkazů |
| I0824 | HOTOVO | 2 | I0823 | Bench ukládá lokální běhy a drží nejnovější projekci |
| I0825 | HOTOVO | 3 | I0824 | Explicitní commitnutý baseline |
| I0826 | HOTOVO | 4 | I0825 | bench --check odmítne regresi podle politiky |
| I0827 | HOTOVO | 2 | I0823 | Blok politiky měření výkonu |
| I0828 | BLOKOVÁNO | 3 | I0818, I0819, I0820, I0827 | doctor v rámci deklarovaného rozpočtu a hook ho zdědí |
| I0829 | HOTOVO | 0 | — | Doktrína výkonu jako projektová pravidla |
| I0830 | HOTOVO | 5 | I0823, I0826, I0829 | docs/PERFORMANCE.md, README, CONTRIBUTING a reference CLI |
| I0831 | BLOKOVÁNO | 5 | I0822, I0826 | Tvrzení o výkonu ve stavu, který je prokázán |
| I0832 | PŘIPRAVENO | 2 | I0817, I0819 | generate-site-data je instrumentován a jeho hotspoty odstraněny |
| I0833 | HOTOVO | 1 | I0817 | uzly a hrany znalostí čtou každý zdroj jednou |
| I0834 | BLOKOVÁNO | 4 | I0828 | Test runner hlásí čas jednotlivých případů a rozpočet sady |
| I0835 | BLOKOVÁNO | 5 | I0822, I0826 | CI spouští strukturální kontroly výkonu |
| I0836 | HOTOVO | 2 | I0819 | Generátor syntetického repozitáře pro případy škálování |
| I0837 | HOTOVO | 1 | I0817 | Report časování jako JSON |
| I0838 | PŘIPRAVENO | 5 | I0826 | bench compare a report největších regresí |
| I0839 | BLOKOVÁNO | 4 | I0828 | watch zdědí každou opravu doctoru i jeho vlastní rozpočet |
| I0840 | BLOKOVÁNO | 3 | I0820, I0821 | context a jeho podpříkazy pod jednu sekundu |
| I0841 | BLOKOVÁNO | 2 | I0821 | Ekvivalence cache dokázaná případy ve tvaru vlastností |
| I0842 | BLOKOVÁNO | 3 | I0818, I0819, I0820, I0832, I0833 | Důkazy před a po pro každou optimalizaci |
| I0843 | BLOKOVÁNO | 6 | I0830, I0831, I0835, I0841, I0842 | Pracovní postup měření výkonu je dohledatelný a úplný |
| I2068 | HOTOVO | 0 | — | Verdikt, který závisí na runneru, to říká, a jeden studený vzorek není regrese |
| I2660 | PŘIPRAVENO | 0 | — | Web se publikuje jako artefakt úlohou, která ho postavila, takže hotový web nečeká na druhý workflow |
| I2661 | PŘIPRAVENO | 0 | — | Publikace, která nedorazila, je nález, na který čtenář narazí příště, nikdy ne zelený krok |
| I2662 | PŘIPRAVENO | 0 | — | Validace opouští runner nasazení: kontroly větve nikdy nedrží pool, který potřebuje publikace nebo záznam release |
| I2663 | PŘIPRAVENO | 3 | I2489 | Publikované UI se při každém nasazení nečte z ničeho |
| I2664 | HOTOVO | 0 | — | Běh, který už selhal, se sám zruší a červená na trunku se opraví dřív, než se cokoli dalšího připraví |
| I2709 | PŘIPRAVENO | 1 | I2664 | Červená na trunku má jednoho pojmenovaného nositele a nikdo jiný nesmí přistát, dokud není zaplacena |
| I2710 | HOTOVO | 0 | — | Běh release nikdy nečeká za validacemi pull requestů na slot úlohy |
| I2711 | HOTOVO | 0 | — | Úloha pages posuzuje produkci až poté, co dorazí nasazení jejího vlastního commitu |
| I2716 | HOTOVO | 0 | — | Případ odvozuje své rozpočty a seznamy z toho, co testuje, nikdy je nepřipíná |
| I2717 | PŘIPRAVENO | 0 | — | Pull request se záznamem release dostane verdikt, který může projít |
| I2846 | PŘIPRAVENO | 0 | — | A hand-pinned budget in a case is reported unless it states its margin |
| I3018 | PŘIPRAVENO | 0 | — | The intent workspace borrows the plan instead of copying it on every request |
Graf
flowchart LR
I0817["I0817<br/>Phase timing and work counters behind MJ_TIMING"]:::done
I0818["I0818<br/>The command registry is read in one pass"]:::done
I0819["I0819<br/>The project model is loaded with one flatten per file and no per-file lookups"]:::done
I0820["I0820<br/>Catalogue, DAG, context and command-surface validators read their inputs once"]:::ready
I0821["I0821<br/>Flattened YAML is cached under .ai/local/cache by content hash"]:::ready
I0822["I0822<br/>Every canonical file is flattened at most once per command"]:::blocked
I0823["I0823<br/>majordomus bench: targets derived from the command registry"]:::done
I0824["I0824<br/>Bench persists local runs and keeps a latest projection"]:::done
I0825["I0825<br/>An explicit committed baseline"]:::done
I0826["I0826<br/>bench --check refuses a regression by policy"]:::done
I0827["I0827<br/>The benchmark policy block"]:::done
I0828["I0828<br/>doctor under a declared budget, and the hook inherits it"]:::blocked
I0829["I0829<br/>Performance doctrine as project rules"]:::done
I0830["I0830<br/>docs/PERFORMANCE.md, README, CONTRIBUTING and CLI reference"]:::done
I0831["I0831<br/>Performance claims at their proven status"]:::blocked
I0832["I0832<br/>generate-site-data instrumented and its hot spots removed"]:::ready
I0833["I0833<br/>knowledge nodes and edges read each source once"]:::done
I0834["I0834<br/>The test runner reports per-case time and the suite budget"]:::blocked
I0835["I0835<br/>CI runs the structural performance checks"]:::blocked
I0836["I0836<br/>A synthetic repository generator for scaling cases"]:::done
I0837["I0837<br/>Timing report as JSON"]:::done
I0838["I0838<br/>bench compare and the top regressions report"]:::ready
I0839["I0839<br/>watch inherits every doctor fix and its own budget"]:::blocked
I0840["I0840<br/>context and its subcommands under a second"]:::blocked
I0841["I0841<br/>Cache equivalence proved by property-shaped cases"]:::blocked
I0842["I0842<br/>Before and after evidence for every optimisation"]:::blocked
I0843["I0843<br/>The performance workflow is discoverable and complete"]:::blocked
I2068["I2068<br/>A verdict that depends on the runner says so, and one cold sample is not a regression"]:::done
I2660["I2660<br/>The site is published as an artifact by the job that built it, so a ready site waits for no second workflow"]:::ready
I2661["I2661<br/>A publication that did not arrive is a finding the next reader meets, never a green step"]:::ready
I2662["I2662<br/>Validation leaves the deployment a runner: a branch's checks never hold the pool a publication or a release record needs"]:::ready
I2663["I2663<br/>The published UI is not read from nothing on every deployment"]:::ready
I2664["I2664<br/>A run that has already failed is cancelled by itself, and a red on the trunk is fixed before anything else is prepared"]:::done
I2709["I2709<br/>A red on the trunk has one named carrier, and nobody else may land until it is paid"]:::ready
I2710["I2710<br/>A release run never waits behind pull-request validates for a job slot"]:::done
I2711["I2711<br/>The pages job judges production only after the deployment of its own commit has arrived"]:::done
I2716["I2716<br/>A case derives its budgets and lists from what it tests, never pins them"]:::done
I2717["I2717<br/>A release record pull request gets a verdict that can pass"]:::ready
I2846["I2846<br/>A hand-pinned budget in a case is reported unless it states its margin"]:::ready
I3018["I3018<br/>The intent workspace borrows the plan instead of copying it on every request"]:::ready
I0817 --> I0818
I0817 --> I0819
I0817 --> I0821
I0817 --> I0823
I0817 --> I0832
I0817 --> I0833
I0817 --> I0837
I0818 --> I0820
I0818 --> I0822
I0818 --> I0828
I0818 --> I0842
I0819 --> I0820
I0819 --> I0822
I0819 --> I0828
I0819 --> I0832
I0819 --> I0836
I0819 --> I0842
I0820 --> I0822
I0820 --> I0828
I0820 --> I0840
I0820 --> I0842
I0821 --> I0840
I0821 --> I0841
I0822 --> I0831
I0822 --> I0835
I0823 --> I0824
I0823 --> I0827
I0823 --> I0830
I0824 --> I0825
I0825 --> I0826
I0826 --> I0830
I0826 --> I0831
I0826 --> I0835
I0826 --> I0838
I0827 --> I0828
I0828 --> I0834
I0828 --> I0839
I0829 --> I0830
I0830 --> I0843
I0831 --> I0843
I0832 --> I0842
I0833 --> I0842
I0835 --> I0843
I0841 --> I0843
I0842 --> I0843
I2664 --> I2709
classDef done stroke:#16a34a,fill:#dcfce7,color:#14532d,stroke-width:2px
classDef active stroke:#2563eb,fill:#eff6ff,color:#1e3a8a,stroke-width:2px
classDef verify stroke:#7c3aed,fill:#f5f3ff,color:#4c1d95,stroke-width:2px
classDef ready stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
classDef planned stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
classDef blocked stroke:#b45309,fill:#fffbeb,color:#78350f,stroke-width:2px
classDef cancelled stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px
classDef superseded stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2pxLinked from this diagram (40)
- I0817 Časování fází a čítače práce za MJ_TIMING
- I0818 Registr příkazů se čte jedním průchodem
- I0819 Model projektu se načítá jedním zploštěním na soubor a bez vyhledávání po souborech
- I0820 Validátory katalogu, DAG, kontextu a povrchu příkazů čtou své vstupy jednou
- I0821 Zploštěné YAML se cachuje pod .ai/local/cache podle hashe obsahu
- I0822 Každý kanonický soubor se na příkaz zploští nanejvýš jednou
- I0823 majordomus bench: cíle odvozené z registru příkazů
- I0824 Bench uchovává lokální běhy a udržuje projekci nejnovějšího
- I0825 Explicitní commitnutá základní linie
- I0826 bench --check odmítne regresi podle politiky
- I0827 Blok politiky měření výkonu
- I0828 doctor pod deklarovaným rozpočtem a hook ho zdědí
- I0829 Doktrína výkonu jako pravidla projektu
- I0830 docs/PERFORMANCE.md, README, CONTRIBUTING a reference CLI
- I0831 Tvrzení o výkonu v jejich prokázaném stavu
- I0832 generate-site-data je instrumentován a jeho horká místa odstraněna
- I0833 uzly a hrany znalostí čtou každý zdroj jednou
- I0834 Test runner hlásí čas každého případu a rozpočet sady
- I0835 CI spouští strukturální kontroly výkonu
- I0836 Generátor syntetického repozitáře pro škálovací případy
- I0837 Report časování jako JSON
- I0838 bench compare a report největších regresí
- I0839 watch zdědí každou opravu doctoru a vlastní rozpočet
- I0840 context a jeho podpříkazy do jedné sekundy
- I0841 Ekvivalence cache prokázaná případy ve tvaru vlastností
- I0842 Důkazy před a po pro každou optimalizaci
- I0843 Workflow měření výkonu je dohledatelné a úplné
- I2068 Verdikt závislý na runneru to říká a jeden studený vzorek není regrese
- I2660 Web publikuje jako artefakt úloha, která ho sestavila, takže připravený web nečeká na žádný druhý workflow
- I2661 Publikace, která nedorazila, je nález, na který čtenář narazí, nikdy zelený krok
- I2662 Validace nechává nasazení runner: kontroly větve nikdy neblokují pool, který potřebuje publikace nebo záznam release
- I2663 Publikované UI se při každém nasazení nečte z ničeho
- I2664 Běh, který už selhal, se zruší sám a červená na trunku se opraví dřív, než se připraví cokoli jiného
- I2709 Červená na trunku má jednoho pojmenovaného nositele a nikdo další nesmí přistát, dokud není splacena
- I2710 Běh releasu nikdy nečeká za validacemi pull requestů na slot úlohy
- I2711 Úloha pages posuzuje produkci až poté, co dorazilo nasazení jejího vlastního commitu
- I2716 Případ odvozuje své rozpočty a seznamy z toho, co testuje, a nikdy je nepřipíná
- I2717 Pull request se záznamem o release dostane verdikt, který může projít
- I2846 A hand-pinned budget in a case is reported unless it states its margin
- I3018 The intent workspace borrows the plan instead of copying it on every request
Kanonický záznam: .ai/repo/project/milestones/M004.yaml. Načtěte ho zpět pomocí majordomus plan show M004.