adopter-upgrades — Adoptující repozitář přežije upgrade Majordomus a to, co do něj nástroj vendoruje, je neutrální vůči adoptujícímu
Adopter může nástroj povýšit nebo vendorovat jeho pravidla a dostane přesně řečeno, co migrovat, než cokoli odmítne jeho commity. Migrace je příkaz, ne ruční přehrání. Co nástroj do adoptera zapisuje (pravidla, kostra, rozsah, kandidáti), je k tomuto repozitáři neutrální a drží trunk jen pro PR čistý.
AKTIVNÍ 14 of 20 issues done
- připraveno
- 4
- blokováno
- 2
- aktivní
- 0
- verify
- 0
- hotovo
- 14
- zrušeno
- 0
Problém
Navazující repozitář OSCILLA, auditovaný 2026-10-04 proti v0.13.0 (e08aec8651), ukazuje nástroj, jak svým adoptujícím láme věci způsoby, které žádný test v tomto repozitáři nevidí, protože každý zdejší test běží nad rozložením tohoto repozitáře. Instalace 0.12.0 pro celý stroj způsobila, že doctor hlásil v OSCILLA 433 selhání: nezapečetěná razítka plánu a kroky případů užití překlasifikované jako měnící stav. Jeho pre-commit hook spouští doctor, takže každý commit byl odmítnut, dokud se vrstva ručně nemigrovala, a migrovaná vrstva je pak odmítnuta verzí 0.10. Nic nezaznamenává, pro jakou verzi nástroje byla vrstva napsána, a migrate zvládá jen .majordomus na .ai. Živé scénáře případů užití odmítají podpříkazy znalostí jen pro čtení, zatímco připouštějí check --checkpoint, který zapisuje. Aktualizace vendorovaných pravidel zanechává za sebou klíče politiky a zdrojů, na kterých závisejí. Odvozovač znalostí zapisuje nesledované kandidáty na trunk, který mění jen pull requesty. Vendorovaná pravidla a skeleton init nesou příběh, testovací cesty a stack tohoto repozitáře.
Výsledek
Adopter může nástroj povýšit nebo vendorovat jeho pravidla a dostane přesně řečeno, co migrovat, než cokoli odmítne jeho commity. Migrace je příkaz, ne ruční přehrání. Co nástroj do adoptera zapisuje (pravidla, kostra, rozsah, kandidáti), je k tomuto repozitáři neutrální a drží trunk jen pro PR čistý.
Aktuální stav
Na e08aec8651 manifest a politika nejmenují žádnou verzi nástroje ani vrstvy. SEALED_FROM je jedna globální konstanta (lib/project.awk:45, plan.rs:122). share/commands.yaml klasifikuje každý příkaz nejvyšší úrovně jednou. lib/migrate.sh přesouvá jen .majordomus/. docs/INSTALL.md říká jen znovu spustit instalátor pro upgrade. Deriver znalostí zapisuje .ai/repo/knowledge/candidates/ v tom checkoutu, který uzavře epizodu. Manifest balíku pravidel uvádí source_revision 0.6.0.
Cílový stav
doctor odděluje nálezy rozdílu verzí od vad a jmenuje migraci, která je odstraní. migrate přenese vrstvu z jedné verze na další, včetně znovuzapečetění starých razítek plánu s jejich původními časy. Třída účinku se posuzuje podle podpříkazu a příznaku. rules vendor update hlásí nebo aplikuje klíče kostry, které nová pravidla potřebují. Kandidáti nikdy nezašpiní trunk. Vendorovaná pravidla a kostra init neříkají nic, co platí jen pro tento repozitář.
Rozsah
- .ai/repo/project
- lib
- podíl
- apps/majordomus-cli/src/plan.rs
- dokumentace
- test/cases
Mimo rozsah
- Samotná OSCILLA: je to důkaz, jen ke čtení
- Opravy už na cestě: #780-#784, fix/context-resolves-a-path-not-yet-created, #746 a 9030dc4795
- Přijetí jakéhokoli ADR, které tyto úkoly navrhují; přijetí je aktem vlastníka
Kritéria přijetí
- Upgrade nástroje nad vrstvou zapsanou předchozí minor verzí dává zprávu doctoru, která jmenuje nesoulad verzí a příkaz migrace, ne vady; dokázáno případem, který přidává I1980
- Živý scénář případu užití smí spustit podpříkaz jen pro čtení u příkazu, který také zapisuje, a nesmí spustit zapisující příznak příkazu jen pro čtení; prokázáno případem, který přidává I1981
- Každý úkol tohoto milníku je DONE nebo CANCELLED s důvodem
Validace
- bin/majordomus plan validate
- bin/majordomus usecase validate
- scripts/derive-check
Požadované důkazy
- version_skew_is_named
- effect_class_per_subcommand
Ú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 |
|---|---|---|---|---|
| I1980 | PŘIPRAVENO | 0 | — | Vrstva jmenuje verzi nástroje, pro kterou byla napsána, a doctor rozliší posun verzí od vad |
| I1981 | HOTOVO | 0 | — | Třída efektu příkazu se deklaruje pro každý podpříkaz a příznak a živé scénáře posuzují celé argv |
| I1982 | BLOKOVÁNO | 1 | I1980 | Razítka plánu zapsaná před existencí pečetí se znovu zapečetí příkazem, který zachová jejich původní časy |
| I1983 | BLOKOVÁNO | 1 | I1980 | Povýšení vendorovaných pravidel nahlásí nebo uplatní klíče politiky a zdroje, na kterých ta pravidla závisí |
| I1984 | HOTOVO | 0 | — | Znalostní kandidáti nikdy nenechávají nesledované soubory na trunku, který mění jen pull requesty |
| I1985 | HOTOVO | 1 | I1984 | Znalostní kandidát se vztahuje ke svému rozhodnutí a commitu, ne k celé epizodě |
| I1986 | HOTOVO | 0 | — | Vendorovaný balíček pravidel neříká nic, co platí jen pro tento repozitář |
| I1987 | HOTOVO | 0 | — | Původ souboru znalostního záznamu přežije smazání souboru |
| I1988 | PŘIPRAVENO | 1 | I1981 | Instalační skripty případu užití žijí tam, kde je adopter deklaruje, a jeho scénáře smějí spouštět adopterovy vlastní příkazy |
| I1989 | HOTOVO | 0 | — | init zasadí rozsah pro stack, který najde, ne pro stack tohoto repozitáře |
| I1990 | PŘIPRAVENO | 0 | — | Kontrola pre-push posuzuje refy, které se pushují, nebo říká, proč je úloha checkoutu váže |
| I1991 | HOTOVO | 0 | — | Úprava politiky jen v komentáři nevygeneruje žádný bootstrap |
| I1996 | HOTOVO | 0 | — | doctor nenechá adoptera selhat na kontrole napsané pro tento repozitář |
| I1998 | HOTOVO | 0 | — | Příkaz health v nesupervizovaném repozitáři nekončí kódem 0 |
| I1999 | PŘIPRAVENO | 0 | — | Sledovaný soubor, který hook přegeneruje, neodmítne úlohu, která se ho nikdy nedotkla |
| I2464 | HOTOVO | 0 | — | Cesta s mezerou je pro doktrínu rozsahu jedna cesta |
| I2491 | HOTOVO | 0 | — | Osobní vrstva nic sdíleného nemění: init --personal a install.sh --personal drží vrstvu jako vlastní jednoho člověka, ověří to a --shared ji předá týmu |
| I2849 | HOTOVO | 0 | — | release next zvyšuje z trunku, který repozitář jmenuje, nikdy z názvu větve zapsaného v nástroji |
| I2941 | HOTOVO | 0 | — | Čerstvý init nechá doctor čistý: README, které nejmenuje AGENTS.md, získá jeden odstavec, který ho jmenuje |
| I2942 | HOTOVO | 0 | — | Dry run instalátoru nic nezmění a průvodce instalací říká jen to, co je pravda |
Graf
flowchart LR
I1980["I1980<br/>A layer names the tool version it was written for, and doctor tells version skew from defects"]:::ready
I1981["I1981<br/>A command's effect class is declared per subcommand and flag, and live scenarios judge the whole argv"]:::done
I1982["I1982<br/>Plan stamps written before seals existed are re-sealed by a command that keeps their original times"]:::blocked
I1983["I1983<br/>Upgrading the vendored rules reports or applies the policy and source keys those rules depend on"]:::blocked
I1984["I1984<br/>Knowledge candidates never leave untracked files on a trunk that only pull requests change"]:::done
I1985["I1985<br/>A knowledge candidate relates to its own decision and commit, not to the whole episode"]:::done
I1986["I1986<br/>The vendored rule package says nothing that is only true of this repository"]:::done
I1987["I1987<br/>A knowledge record's file provenance survives the file's deletion"]:::done
I1988["I1988<br/>A use case's setup scripts live where the adopter declares, and its scenarios may run the adopter's own commands"]:::ready
I1989["I1989<br/>init seeds a scope for the stack it finds, not for this repository's"]:::done
I1990["I1990<br/>The pre-push check judges the refs being pushed, or says why the checkout's task binds them"]:::ready
I1991["I1991<br/>A comment-only edit of the policy regenerates no bootstrap"]:::done
I1996["I1996<br/>doctor does not fail an adopter on a check written for this repository"]:::done
I1998["I1998<br/>A health command in an unsupervised repository does not exit 0"]:::done
I1999["I1999<br/>A tracked file a hook regenerates does not refuse a task that never touched it"]:::ready
I2464["I2464<br/>A path that holds a space is one path to the scope doctrine"]:::done
I2491["I2491<br/>A personal layer changes nothing shared: init --personal and install.sh --personal keep the layer one person's own, verify it, and --shared hands it to the team"]:::done
I2849["I2849<br/>release next raises from the trunk the repository names, never from a branch name written in the tool"]:::done
I2941["I2941<br/>A fresh init leaves doctor clean: a README that does not name AGENTS.md gains one paragraph that does"]:::done
I2942["I2942<br/>An installer dry run changes nothing, and the install guide says only what is true"]:::done
I1980 --> I1982
I1980 --> I1983
I1981 --> I1988
I1984 --> I1985
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:2pxOdkazováno z tohoto diagramu (20)
- I1980 Vrstva uvádí verzi nástroje, pro kterou byla napsána, a doctor rozliší posun verzí od vad
- I1981 Třída účinku příkazu je deklarována pro každý podpříkaz a přepínač a živé scénáře posuzují celý argv
- I1982 Razítka plánu zapsaná před existencí pečetí se znovu zapečetí příkazem, který zachová jejich původní časy
- I1983 Upgrade vendorovaných pravidel hlásí nebo aplikuje klíče politiky a zdroje, na nichž ta pravidla závisejí
- I1984 Kandidáti znalostí nikdy nezanechají nesledované soubory na trunku, který mění jen pull requesty
- I1985 Kandidát znalostí se vztahuje ke svému rozhodnutí a commitu, ne k celé epizodě
- I1986 Vendorovaný balíček pravidel neříká nic, co platí jen pro tento repozitář
- I1987 Provenance souboru záznamu znalostí přežije smazání souboru
- I1988 Instalační skripty případu užití žijí tam, kde je deklaruje adoptující, a jeho scénáře mohou spouštět vlastní příkazy adoptujícího
- I1989 init nasazuje rozsah pro stack, který najde, ne pro stack tohoto repozitáře
- I1990 Kontrola pre-push posuzuje refy, které se pushují, nebo říká, proč je váže úloha checkoutu
- I1991 Úprava politiky pouze v komentáři neregeneruje žádný bootstrap
- I1996 doctor neshodí adoptujícího kvůli kontrole napsané pro tento repozitář
- I1998 Příkaz health v nedozorovaném repozitáři nekončí kódem 0
- I1999 Sledovaný soubor, který hook regeneruje, neodmítne úlohu, která se ho nikdy nedotkla
- I2464 Cesta obsahující mezeru je pro doktrínu rozsahu jedna cesta
- I2491 Osobní vrstva nemění nic sdíleného: init --personal a install.sh --personal drží vrstvu jako vlastní jednoho člověka, ověří ji a --shared ji předá týmu
- I2849 release next zvyšuje z trunku, který repozitář jmenuje, nikdy z názvu branche zapsaného v nástroji
- I2941 Čerstvý init nechá doctor čistý: README, které nejmenuje AGENTS.md, získá jeden odstavec, který ho jmenuje
- I2942 Dry run instalátoru nic nemění a návod k instalaci říká jen to, co je pravda
Kanonický záznam: .ai/repo/project/milestones/adopter-upgrades.yaml. Přečtěte ho zpět pomocí majordomus plan show adopter-upgrades.