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.

two-folder-integration — Repozitář, který adoptuje Majordomus, získá dva adresáře a dva řádky a může je vrátit

Adopce je sladění, nikoli kopie šablony. Jeden typovaný model repozitáře se zjistí jednou a čte ho každý konzument. Žádoucí integrace se spočítá z tohoto modelu, porovná s tím, co repozitář skutečně drží, a aplikuje se jako nejmenší mutace, která mezeru uzavře — vše, co Majordomus vlastní, žije pod `.ai/` a `.majordomus/` a cokoli mimo tyto dva jmenné prostory se redukuje na malý spravovaný most, jehož vlastnictví je zaznamenáno. Dvojí spuštění sladění podruhé nic nezmění a odinstalace vrátí přesně to, co bylo vzato, a nic z toho, co člověk napsal.

AKTIVNÍ 1 z 23 úkolů hotovo

připraveno
2
blokováno
20
aktivní
0
verify
0
hotovo
1
zrušeno
0

Problém

To, co Majordomus zanechává v repozitáři, který přijme, není nikde rozhodnuto; je to součet toho, co každý subsystém náhodou zapsal. Soubory poskytovatelů v kořeni, skripty, konfigurace vedle konfigurace, generované registry, které se staly vstupy, a žádný záznam o tom, které z nich tam Majordomus umístil. Náklady se násobí ve třech směrech najednou. Člověk nepozná, co je jeho a co nástroje, takže nelze bezpečně nic odstranit. Druhý poskytovatel znamená druhou kopii stejných instrukcí místo druhého adaptéru. A každý subsystém znovu objevuje repozitář po svém — CLI, vstup prostředí, dokumentace, server — takže se stejná fakta čtou čtyřmi způsoby a čtvrtý se rozchází.

Výsledek

Adopce je sladění, nikoli kopie šablony. Jeden typovaný model repozitáře se zjistí jednou a čte ho každý konzument. Žádoucí integrace se spočítá z tohoto modelu, porovná s tím, co repozitář skutečně drží, a aplikuje se jako nejmenší mutace, která mezeru uzavře — vše, co Majordomus vlastní, žije pod `.ai/` a `.majordomus/` a cokoli mimo tyto dva jmenné prostory se redukuje na malý spravovaný most, jehož vlastnictví je zaznamenáno. Dvojí spuštění sladění podruhé nic nezmění a odinstalace vrátí přesně to, co bylo vzato, a nic z toho, co člověk napsal.

Aktuální stav

`.ai/` i `.majordomus/` existují a nesou skutečný materiál a smlouvy o adresářích se pod `.ai/` už vynucují (ADR 0011). Proti tomu: bootstrapy providerů se generují do kořene, vstup prostředí a CLI objevují repozitář každý po svém, `init` zapisuje to, co zapisovat měl, ne to, co repozitáři chybí, žádná kniha nezaznamenává, co bylo umístěno mimo oba jmenné prostory, a nic nedokáže adopci vrátit zpět.

Cílový stav

`majordomus init` na cizím repozitáři přidá `.ai/`, `.majordomus/`, spravovaný blok v `AGENTS.md` a — když je žádoucí direnv — jeden stabilní řádek v `.envrc`. Druhé spuštění nehlásí žádnou změnu. `majordomus uninstall` odstraní to, co ledger zaznamenává, a autorskou znalost nechá být. Přidání platného artefaktu pod objevitelný namespace ho zaregistruje všude a žádný seznam nikde nevyjmenovává to, co už objevování najde.

Rozsah

  • apps/majordomus-cli/src
  • .ai/repo/rules/project
  • .ai/repo/adrs
  • .majordomus
  • share/schemas
  • share/skeleton
  • dokumentace
  • test/cases
  • .github/workflows

Mimo rozsah

  • Konfigurační formát, který opakuje to, co lze o repozitáři zjistit inspekcí
  • Přepsání fungujícího subsystému kvůli symetrii, ne kvůli vadě
  • Mazání obsahu napsaného uživatelem na jakékoli cestě, pod jakýmkoli příznakem, bez výslovné a samostatné instrukce
  • Druhá konvence worktree, druhý formát předávky nebo druhý doctor
  • Sémantika specifická pro providera kdekoli jinde než v adaptéru

Kritéria přijetí

  • Vše, co Majordomus v adoptovaném repozitáři uchovává, žije pod `.ai/` nebo `.majordomus/` a každá výjimka mimo ně je most zaznamenaný v knize vlastnictví
  • Jeden typovaný model repozitáře se objeví jednou za proces a každý konzument — CLI, prostředí, API, MCP, Cockpit, dokumentace, poskytovatelé, doplňování — čte tento model, ne souborový systém
  • Požadovaná integrace je hodnota, plán je diff proti tomu, co existuje, a aplikace je nejmenší mutace, která ho uzavře
  • Druhé `init` na vyhovujícím repozitáři nevyvolá žádnou změnu, což dokazuje test, ne pozorování
  • `uninstall` vrátí každou zaznamenanou mutaci, odmítne se dotknout mostu, který člověk upravil, a ve výchozím stavu ponechá napsaný obsah `.ai/` na místě
  • Každý generovaný artefakt deklaruje svůj původ, svůj generátor a vstupy, ze kterých se odvozuje, a žádný generovaný artefakt se nečte zpět jako kanonický vstup
  • Žádný ručně udržovaný seznam nevypisuje artefakty, které objevování nachází, a přidání platného artefaktu ho zaregistruje u každého konzumenta bez druhé úpravy
  • Vstup do prostředí zůstává lokální a omezený, bez sítě a bez sestavení, a jeho cena se měří proti deklarovanému rozpočtu
  • Každý invariant výše je pravidlo projektu s kontrolou, kterou CI spouští, a každé je dokázáno negativním testem

Validace

  • cargo test --workspace --all-features
  • bash test/run.sh
  • bin/majordomus doctor
  • majordomus generate --check
  • majordomus init --dry-run

Požadované důkazy

  • footprint_bounded
  • one_model
  • desired_state_diff
  • init_idempotent
  • uninstall_reverses
  • provenance_declared
  • no_manual_registry
  • entry_budget
  • rules_enforced

Rizika

  • Reconciler, který vypočítá požadovaný stav, jej může také vnutit. Vše, co by změnil mimo dva jmenné prostory, musí být před aplikací viditelné v dry runu a most, který člověk upravil, je konflikt, ne přepsání.
  • Jeden model repozitáře je úzké hrdlo stejně jako páteř: každý konzument, který ho čte, platí cenu za jeho objevení. Cena se musí změřit proti rozpočtu vstupu do prostředí dříve, než se model stane povinným, ne potom.
  • Migrace vlastní stopy tohoto repozitáře je nejnebezpečnější fáze, protože nástroj mění to, čím se mění. Migrace běží přes rekonciliátor, nejprve nanečisto, nikdy přes přesouvací skript.
  • Ledger vlastnictví, který se rozchází se souborovým systémem, je horší než žádný: povoluje mazání, které nedokáže zdůvodnit. Každá zaznamenaná mutace nese hash, s nímž byla zapsána, a nesoulad odstranění zastaví.
  • Adaptéry poskytovatelů zvou k tomu, aby sémantika poskytovatele prosákla do modelu. Test je, zda je nový poskytovatel implementací jednoho traitu, nebo úpravou na šesti místech.

Ú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ží.

issuestatusvlnazávisí nanázev
I1101 HOTOVO 0 — Co tento nástroj za sebou zanechává, zjištěno kontrolou, ne z paměti
I1102 PŘIPRAVENO 1 I1101 Oba jmenné prostory jsou typovaný kontrakt, ne zvyk
I1103 BLOKOVÁNO 2 I1102 Zda je soubor psaný ručně, nebo odvozený, je pole, ne konvence pojmenování
I1104 BLOKOVÁNO 2 I1102 Oba jmenné prostory nesou své kontrakty, až do dna
I1105 PŘIPRAVENO 1 I1101 Repozitář se zjišťuje jednou, do jednoho modelu
I1106 BLOKOVÁNO 2 I1105 Registry jsou pohledy na model, ne samostatná zjišťování
I1107 BLOKOVÁNO 3 I1106 Zjišťování je deterministické, cachované a jeho cena je známa
I1108 BLOKOVÁNO 3 I1106 Požadovaná integrace je hodnota a plán je diff
I1109 BLOKOVÁNO 4 I1108 Vše umístěné mimo oba jmenné prostory se zaznamená, i s tím, čím to bylo
I1110 BLOKOVÁNO 5 I1109 Druhý běh nic nezmění a test to říká
I1111 BLOKOVÁNO 5 I1109 Odinstalace vrátí přesně to, co bylo vzato
I1112 BLOKOVÁNO 5 I1109 Kořene se dotýkají dva malé bloky a už se nikdy nezmění
I1113 BLOKOVÁNO 6 I1112 Vstup do adresáře je lokální, omezený a o síti mlčí
I1114 BLOKOVÁNO 6 I1112 Provider je adaptér nad modelem a přidat ho je implementace
I1115 BLOKOVÁNO 7 I1114 Doplňování vychází z modelu příkazů, ne z druhého seznamu
I1116 BLOKOVÁNO 6 I1110, I1112 Vlastní stopa tohoto repozitáře se mění prostřednictvím reconcileru
I1117 BLOKOVÁNO 3 I1106 Ručně udržované seznamy se odstraní, nenechají se běžet vedle odvozování
I1118 BLOKOVÁNO 7 I1110, I1116 Každá invariantní podmínka tohoto milníku je pravidlo s kontrolou, která běží
I1119 BLOKOVÁNO 7 I1113 Rozpočty se měří a regrese shodí build, místo aby si jí někdo všiml
I1120 BLOKOVÁNO 4 I1108 Odmítnutí říká, co s ním dělat
I1121 BLOKOVÁNO 6 I1112 Každý povrch ukazuje integraci z jednoho modelu
I1122 BLOKOVÁNO 7 I1110, I1111, I1116, I1121 Cizí repozitář, převzatý, povýšený a vrácený
I1123 BLOKOVÁNO 8 I1104, I1107, I1115, I1117, I1118, I1119, I1120, I1122 Milník se přijímá na základě svých důkazů

Graf

graf závislostí two-folder-integrationz .ai/repo/project
flowchart LR
    I1101["I1101<br/>What this tool leaves behind, established by inspection rather than by memory"]:::done
    I1102["I1102<br/>The two namespaces are a typed contract, not a habit"]:::ready
    I1103["I1103<br/>Whether a file is authored or derived is a field, not a naming convention"]:::blocked
    I1104["I1104<br/>Both namespaces carry their contracts, all the way down"]:::blocked
    I1105["I1105<br/>The repository is discovered once, into one model"]:::ready
    I1106["I1106<br/>The registries are views of the model, not separate discoveries"]:::blocked
    I1107["I1107<br/>Discovery is deterministic, cached, and its cost is known"]:::blocked
    I1108["I1108<br/>The desired integration is a value, and the plan is a diff"]:::blocked
    I1109["I1109<br/>Everything placed outside the two namespaces is recorded, with what it was"]:::blocked
    I1110["I1110<br/>The second run changes nothing, and a test says so"]:::blocked
    I1111["I1111<br/>Uninstall gives back exactly what was taken"]:::blocked
    I1112["I1112<br/>What touches the root is two small blocks, and they never change again"]:::blocked
    I1113["I1113<br/>Entering a directory is local, bounded and silent about the network"]:::blocked
    I1114["I1114<br/>A provider is an adapter over the model, and adding one is an implementation"]:::blocked
    I1115["I1115<br/>Completion comes from the command model, not from a second list"]:::blocked
    I1116["I1116<br/>This repository's own footprint moves, through the reconciler"]:::blocked
    I1117["I1117<br/>The hand-maintained lists are removed, not left running beside the derivation"]:::blocked
    I1118["I1118<br/>Every invariant of this milestone is a rule with a check that runs"]:::blocked
    I1119["I1119<br/>The budgets are measured, and a regression fails rather than being noticed"]:::blocked
    I1120["I1120<br/>A refusal says what to do about it"]:::blocked
    I1121["I1121<br/>Every surface shows the integration from the one model"]:::blocked
    I1122["I1122<br/>A foreign repository, adopted, upgraded and given back"]:::blocked
    I1123["I1123<br/>The milestone is accepted on its evidence"]:::blocked
    I1101 --> I1102
    I1101 --> I1105
    I1102 --> I1103
    I1102 --> I1104
    I1104 --> I1123
    I1105 --> I1106
    I1106 --> I1107
    I1106 --> I1108
    I1106 --> I1117
    I1107 --> I1123
    I1108 --> I1109
    I1108 --> I1120
    I1109 --> I1110
    I1109 --> I1111
    I1109 --> I1112
    I1110 --> I1116
    I1110 --> I1118
    I1110 --> I1122
    I1111 --> I1122
    I1112 --> I1113
    I1112 --> I1114
    I1112 --> I1116
    I1112 --> I1121
    I1113 --> I1119
    I1114 --> I1115
    I1115 --> I1123
    I1116 --> I1118
    I1116 --> I1122
    I1117 --> I1123
    I1118 --> I1123
    I1119 --> I1123
    I1120 --> I1123
    I1121 --> I1122
    I1122 --> I1123
    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:2px

Kanonický záznam: .ai/repo/project/milestones/two-folder-integration.yaml. Přečtěte ho zpět pomocí majordomus plan show two-folder-integration.

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