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.

I2491 — Osobní vrstva nemění nic sdíleného: init --personal a install.sh --personal drží vrstvu jako vlastní jedné osoby, ověří ji a --shared ji předá týmu

Umožnit jednomu člověku používat nástroj na skutečné práci v repozitáři, který sdílejí další lidé, aniž by cokoli sdíleného změnil: jeden přepínač u init a u instalátoru, každý pozdější zapisovatel pokrytý stejným mechanismem, výsledek ověřený při instalaci i při každém doctor, spustitelný soubor čtoucí nesledovanou vrstvu, aniž by mu to někdo řekl, a jeden příkaz, který vrstvu předá týmu.

HOTOVO vlna 0 · p1 · profil implementation · bezpečné souběžně

Součást adopter-upgrades — Adoptující repozitář přežije upgrade Majordomu a to, co do něj nástroj vendoruje, je neutrální vůči adoptujícímu.

Cíl

Umožnit jednomu člověku používat nástroj na skutečné práci v repozitáři, který sdílejí další lidé, aniž by cokoli sdíleného změnil: jeden přepínač u init a u instalátoru, každý pozdější zapisovatel pokrytý stejným mechanismem, výsledek ověřený při instalaci i při každém doctor, spustitelný soubor čtoucí nesledovanou vrstvu, aniž by mu to někdo řekl, a jeden příkaz, který vrstvu předá týmu.

Proč

ADR 0145. Běžný init zapisuje sledovaný .gitignore (lib/init.sh, mj_init_gitignore), update zapisuje AGENTS.md, CLAUDE.md a GEMINI.md v kořeni (lib/update.sh), capture install zapisuje .claude/ (lib/capture.sh) a doctor selhává, dokud README.md nejmenuje AGENTS.md (lib/doctor.sh, mj_validate_bootstrap). Žádný produktový kód nezapisoval .git/info/exclude. Rust executable vyjmenovává jen sledované soubory (apps/majordomus-cli/src/discovery/mod.rs), takže nesledovaná vrstva byla prázdná, pokud nebylo předáno --discovery filesystem, a žádný launcher, hook ani konfigurace klienta ho nepředává. Případ 86 držel ručně psaný seznam přepínačů instalátoru, takže nový přepínač mohl zůstat nezdokumentován a projít.

Aktuální stav

Člověk, který chce vlastní vrstvu, zapíše soubor exclude ručně; update a capture install zapisují mimo něj; nic ho neověřuje; spustitelný soubor v takové vrstvě nevidí žádné pravidlo, prompt ani záznam; z osobní vrstvy do sdílené nevede žádný krok.

Cílový stav

majordomus init --personal a install.sh --personal vytvoří prostou vrstvu, zakryjí ji v info/exclude společného adresáře gitu a selžou, pokud git status po nečte stejně jako před. update a capture install zakryjí každou cestu před zápisem a sledovanou odmítnou celou. doctor ověřuje zakrytí při každém běhu. Objevování prochází pracovní strom, když manifest není sledován nikde. init --extend --shared odstraní zakrytí a nic necommituje. Případ 86 čte příznaky instalátoru z jeho parseru.

Rozsah

  • lib/common.sh
  • lib/init.sh
  • lib/update.sh
  • lib/capture.sh
  • lib/doctor.sh
  • share/install/install.sh.in
  • share/install/INSTALL.md.in
  • share/commands.yaml
  • apps/majordomus-cli/src/discovery/mod.rs
  • apps/majordomus-cli/src/app.rs
  • apps/majordomus-cli/src/cli.rs
  • test/cases/2979_a_personal_layer_changes_nothing_shared.sh
  • test/cases/86_installer_platform.sh
  • .ai/repo/adrs/0145-a-personal-layer-changes-nothing-shared.md
  • .ai/repo/rules/project/a-personal-layer-changes-nothing-shared.v1.md
  • .ai/repo/use-cases/use-the-tool-as-your-own-in-a-shared-repository.md
  • .ai/repo/features/install.md
  • docs/CLAIMS.yaml
  • docs/claims/personal-layer-changes-nothing-shared.md
  • .ai/repo/project/issues/I2491.yaml

Mimo rozsah

  • Řízení přístupu nebo jakýkoli způsob, jak obejít pravidla organizace o nástrojích: vrstva leží na disku na očích
  • Instalace hooků commit a push: init nenainstaluje žádný v žádném režimu
  • Přenos osobní vrstvy na jiný stroj: je jednoho checkoutu a mesh je cesta napříč

Závislosti

Žádné. Tento úkol je kořenem grafu.

Kritéria přijetí

  • V repozitáři s necommitnutou prací nechá init --personal git status --porcelain --untracked-files=all bajt po bajtu shodný, nezapíše žádný sledovaný soubor a skončí 10, pokud to nešlo
  • update a capture instalované pod osobní vrstvou ponechávají git status totožný a update odmítne (15) cíl projekce, který git sleduje, dřív, než zapíše jakýkoli cíl
  • doctor hlásí osobní vrstvu jako ověřenou, pojmenuje její soubor, který je sledován, a nenechá sledované README selhat za to, že nejmenuje AGENTS.md
  • Spustitelný soubor vypíše pravidla nesledované vrstvy bez volby --discovery
  • install.sh --personal výsledek ověří sám a řekne to; mimo repozitář ponechá nainstalovaný nástroj a řekne, která polovina selhala
  • init --extend --shared odstraní blok, zapíše dva řádky .gitignore, vypíše cesty k commitnutí, nic necommitne a odmítne (15) vrstvu, která není osobní
  • Příznak, který parser instalátoru přijímá a jeho --help neuvádí, selže v případu 86

Validace

  • bin/majordomus plan validate
  • MJ_TEST_JOBS=2 bash test/run.sh 2979_a_personal_layer_changes_nothing_shared 86_installer_platform 85_installer 01_init
  • cargo test --manifest-path apps/majordomus-cli/Cargo.toml --doc layer_is_untracked

Požadované důkazy

  • personal_install_case_2979
  • derived_discovery_doctest

Důkazy

pokrývátypcommandvýsledeku commitu
personal_install_case_2979testMJ_TEST_JOBS=2 bash test/run.sh 2979_a_personal_layer_changes_nothing_shared 86_installer_platformeach: tests: 1 passed, 0 failed, 0 skipped (run 2026-10-14 before 07:36Z on master ce5959db59)ce5959d
derived_discovery_doctesttestcargo test --manifest-path apps/majordomus-cli/Cargo.toml --doc layer_is_untrackedtest result: ok. 1 passed; 0 failed (běh 2026-10-14 před 07:36Z na masteru ce5959db59)ce5959d

Časová osa

zahájeno
2026-10-14T07:39:44Z
ověřeno
—
dokončeno
2026-10-14T07:39:55Z

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/I2491.yaml. Načtěte ho zpět pomocí majordomus plan show I2491.

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