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.

Vrstva nainstalovaná s --personal je vlastní jednomu člověku ve sdíleném repozitáři: nemění žádný sledovaný soubor, žádný řádek .gitignore ani nic, co ukazuje git status, a příkaz, který to tvrdí, to ověří

majordomus init --personal a --personal instalátoru vytvoří tutéž vrstvu jako

deklarovaný stavdeklarovaný stav: zaručeno Deklarováno jako deterministické a blokující, implementováno a s uvedeným behaviorálním testem, který to má dokázat. Zda to zaznamenaný běh podporuje, říká verdikt důkazů zobrazený vedle.

zaznamenané důkazyzaznamenané důkazy: nespuštěno Deklarováno jako zaručené, ale nepodložené zaznamenaným během: test je pojmenován, ale žádný úspěšný běh nad současnými vstupy zaznamenán není. jak se zaznamenávají důkazy

Krytí je označený blok v info/exclude společného adresáře gitu. init --personal skončí s kódem 10, pokud git status po něm nevypadá stejně jako před ním, instalátor to sám znovu porovná, update a capture install pokryjí každou cestu před zápisem a sledovanou cestu odmítnou celou a doctor při každém běhu ověří znovu. Zda je vrstva osobní, se čte z bloku a nikde se neukládá. init --extend --shared krytí odstraní a nic necommituje.

Co to znamená

majordomus init --personal a --personal instalátoru vytvářejí tutéž vrstvu, jakou vytváří prosté init. Liší se tím, čí je. Po příkazu, v repozitáři, který už držel nepotvrzenou práci:

  • git status --porcelain --untracked-files=all vypíše přesně to, co vypisoval dříve;
  • nebyl zapsán žádný sledovaný soubor, včetně .gitignore a README.md;
  • nic pod .ai/ není sledováno ani stagováno a git add -A by nic z toho nestagoval;
  • pozdější zapisovatelé to tak udržují: update a capture install pokryjí každý soubor před zápisem a soubor, který projekt už sleduje, nechají, jak je.

Když zkouška obhájila svůj případ, majordomus init --extend --shared předá vrstvu týmu: odstraní zakrytí a vypíše, co je nyní na repozitáři ke commitnutí. Soubor, který je podle vlastního názvu něčí osobní (*.local, *.local.*), zůstává zakrytý.

Princip

Kryt je označený blok v $GIT_COMMON_DIR/info/exclude, souboru vyloučení, který git čte pro repozitář a nikdy jej necommituje, nepushuje, neklonuje ani nestashuje. Ptá se na společný adresář, ne na .git, takže propojený worktree je kryt stejným souborem. Pomocné funkce jsou v lib/common.sh: mj_personal_cover zapíše blok a ostatní řádky nechá být, mj_personal_active jej čte, mj_personal_guard je to, co volá zapisovač, než zapíše, mj_personal_verify je kontrola, kterou sdílejí init a doctor, a mj_personal_uncover je to, co spouští --shared.

Neukládá se žádný režim. Vrstva je osobní, když ji pokrývá blok, takže --extend zůstává osobní bez příznaku a nic nemůže říkat „osobní“, zatímco repozitář říká něco jiného.

Spustitelný soubor čte nesledovanou vrstvu, aniž by mu to někdo řekl: když je manifest na disku a index pro něj nemá záznam, objevování projde pracovní strom (discovery::layer_is_untracked v apps/majordomus-cli/src/discovery/mod.rs, vybráno v apps/majordomus-cli/src/app.rs).

Jak to vidět

git status --porcelain --untracked-files=all > /tmp/before
majordomus init --personal
git status --porcelain --untracked-files=all | diff /tmp/before -
majordomus doctor | grep personal
bash test/run.sh 2979_a_personal_layer_changes_nothing_shared

Případ pracuje v repozitáři s upraveným a jedním nesledovaným souborem, protože čistý strom, který zůstane čistý, dokazuje málo. Spouští init --personal, update, capture install a --extend a po každém porovná stav. Commitne CLAUDE.md a vyžaduje, aby update to odmítl, nic nezapsal a nikdy kvůli tomu neradil --force; doctor nesmí tento soubor poměřovat pravidly této vrstvy. Sleduje jeden soubor vrstvy a vyžaduje, aby jej doctor pojmenoval. Sdílí vrstvu a vyžaduje, aby zmizel kryt a nic nebylo commitnuto. Instaluje skutečným instalátorem proti testovacímu release a vyžaduje Verified (personal).

Co nepokrývá

Osobní režim drží vrstvu stranou od toho, co repozitář sdílí. Není to řízení přístupu: soubory jsou na disku na očích. Není to ani způsob, jak obejít pravidla organizace o nástrojích; zda lze nástroj na codebase použít, je rozhodnutí organizace.

Neinstaluje hooky commit a push; .git/hooks/ je lokální, takže tam lze přidat dva řádky, které doctor jmenuje, a repozitář, jehož core.hooksPath ukazuje na sledovaný adresář, si ponechá vlastní. Osobní vrstva necestuje — ani s klonem, pushem ani stashem — a není zdrojem commitnutých projekcí, protože derive vidí to, co uvidí commit. Nástroj, který zapisuje do repozitáře bez volání guardu, není pokryt; tři zapisovatele, které tato distribuce dodává, ano.

Proč existuje

Tým přijímá nástroj na základě důkazů a důkazy plynou z používání. Dříve používání nástroje na skutečné práci znamenalo měnit soubory, které sdílí každý, takže osobní zkouška se stala návrhem dřív, než bylo co navrhovat. „Nezměnil jsem nic, co sdílíte“ je tvrzení o práci druhých a ručně psaný soubor exclude, který ho dřív zastupoval, nekontrolovalo nic. ADR 0145 o tom rozhoduje; pravidlo project.a-personal-layer-changes-nothing-shared to drží.

Detail vykreslený z docs/claims/personal-layer-changes-nothing-shared.md.

Od tvrzení k důkazu

  1. 1 · veřejné tvrzení

    Vrstva nainstalovaná s --personal je vlastní jednomu člověku ve sdíleném repozitáři: nemění žádný sledovaný soubor, žádný řádek .gitignore ani nic, co ukazuje git status, a příkaz, který to tvrdí, to ověří

    Vytvořeno na Install, Layer.

  2. 2 · kanonické tvrzení

    personal-layer-changes-nothing-shareddeklarovaný stav: zaručeno v docs/CLAIMS.yaml

    Definováno v přečtěte si to na tomto webu · docs/INSTALL.md

  3. 3 · implementace

    lib/common.sh

  4. 4 · test a scénáře

    Test: test/cases/2979_a_personal_layer_changes_nothing_shared.sh

    Provedeno v Používejte nástroj jako vlastní ve sdíleném repozitáři a navrhněte jej týmu, až si obhájí své místo.

  5. 5 · zaznamenané běhy

    zaznamenané důkazy: nespuštěno jak se zaznamenávají důkazy

Ověřte si to sami

Test běží v jednorázovém dočasném repozitáři a ověřuje chování, ne řetězec ve zdrojovém kódu.

z klonu repozitáře
bash test/run.sh 2979_a_personal_layer_changes_nothing_shared

Kde se toto tvrzení používá

pokryté odpovědnosti

Související tvrzení stejná implementace

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