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.

Konsolidace dvou složek

co repozitář dnes zapisuje do stromu, ověřeno proti kódu a běžícímu binárnímu souboru, a seřazené řezy, které to omezují na `.ai/**` a `.majordomus/**` s vratnými mosty

Vykresleno z docs/TWO_FOLDER_CONSOLIDATION.md — stejného Markdownu, který ukazuje GitHub.

Výstup fáze 1 milníku two-folder-integration (úkol I1101, rozhodnutí ADR 0169). Vypisuje každou cestu, kterou Majordomus zapisuje, generuje nebo mění, když ho projekt přejímá, mimo .ai/ a .majordomus/. U každé cesty uvádí kód, který ji zapisuje, zda zápis cokoli zaznamenává, třídu, do které patří, a co s ní dělá kontrakt dvou složek.

Inventář byl sestaven 2026-10-16 proti d1162668036 dvěma způsoby a řádek se zde objeví, jen když ho našel jeden z nich:

  • Čtení zapisovatelů. Každý zápis v bin/majordomus, lib/*.sh, share/mods/claude-code/, site/static/install.sh a apps/majordomus-cli/src/** byl přečten: přesměrování, mv/cp/mkdir/ln, git config, update-ref, push, std::fs::write, create_dir_all, rename a symlink. Dočasné adresáře, které se odstraní před návratem příkazu, jsou vynechány, stejně jako zápisy, které probíhají jen uvnitř zdrojového stromu Majordomu (scripts/derive, scripts/ci/*, .just/*).
  • Měření adoptujícího. Nový repozitář git init s README, jedním zdrojovým souborem a jedním commitem byl adoptován s HOME a adresáře XDG ukazovaly na prázdný adresář. Spustil init, update, capture install, start, check, finish, doctor, context, handover, serve ensure/stop, worktree create, znovu update, generate --check, generate, completion install a continuity publish. Po každém kroku zaznamenal každou změněnou cestu mimo dva jmenné prostory, každý soubor v .git/ kromě objektů, git config --local, každý soubor pod HOME a každý sourozenecký adresář. Stejný běh byl zopakován s init --personal.

Výchozí část měření je test, ne paměť: případ test/cases/3113_the_adoption_footprint_is_inventoried.sh adoptuje nový repozitář pomocí init, update a capture install. Poté vyžaduje, aby se množina cest mimo dva jmenné prostory rovnala seznamu v výchozí adopci, vyžaduje, aby tento dokument pojmenoval každou z nich, a vyžaduje, aby osobní adopce nechala git status prázdné, zatímco její exclude blok pojmenovává každou cestu, kterou zapsala. Zapisovatel, který začne za sebou nechávat novou cestu, případ neprojde, dokud ji tento dokument nezaznamená.

Toto nahrazuje první čtení z 2026-09-06 (948dbd93, stále v historii jako 95d9a773c7f). Co se od toho čtení změnilo uvádí, v čem se mýlilo nebo co se od té doby pohnulo.

Třídy

Každý řádek nese jednu třídu. Třída říká, proč cesta existuje, a smlouva rozhoduje podle tohoto důvodu:

TřídaVýznam
canonicalJakmile je zapsán, je to soubor té osoby. Majordomus ho osadí a pak ho nevlastní. Přepsání by přepsalo něčí práci.
derivedVypočteno z vlastního obsahu .ai/ tohoto repozitáře. Je commitnuto, regenerovatelné a opatřeno razítkem nebo bannerem, a nikdy se nečte zpět jako vstup.
generatedPoloženo z distribuce nástroje (share/). Je bajt po bajtu shodné v každém repozitáři při jedné verzi a následuje nástroj, ne repozitář.
cachePřepočitatelný stav bez vlastního významu. Jeho smazání stojí čas a nic víc.
runtimeStav jednoho klonu, jednoho stroje nebo jednoho procesu. Nikdy necestuje přes git jako obsah, i když může žít v adresáři nebo refech samotného gitu.
accidentalZapsané v adopterovi, ačkoli tam neslouží žádnému účelu: projekce vlastního zdrojového stromu Majordomus, nebo výstup, který přistál v kořeni repozitáře z nedostatku jmenného prostoru.

Sloupec osudu používá tři slova. Bridge znamená, že cesta zůstává, kde je, protože ji tam čte spotřebitel mimo Majordomus, a kniha vlastnictví to zaznamenává (I1109). Move znamená, že jde do .ai/ nebo .majordomus/. Stop znamená, že se u adoptujícího přestane zapisovat.

1. Výchozí adopce

majordomus init, majordomus update, majordomus capture install: tři příkazy, které jmenuje ADOPTION.md. Případ 3113 vyžaduje, aby tento seznam byl přesný.

CestaZapsalRežimZaznamenalTřídaOsud
.gitignore — řádky .ai/local/ a .ai/repo/**/.tmp.*init: lib/init.sh:349-356 (mj_init_gitignore, připojit jednou na řádek); také migrate (lib/migrate.sh:207)připojí se k souboru osoby a vytvoří jej, pokud chybípouze vytištěný seznam created (lib/init.sh:354)canonical (soubor hostitelů)přesun: oba řádky vyjadřují hranici .ai/ a vejdou se do .ai/.gitignore (local/, repo/**/.tmp.*), který nepotřebuje žádný řádek roota
AGENTS.mdupdate: lib/update.sh:134-135, šablona share/providers/agents.tmpl, projekce deklarovaná v share/skeleton/policy.yaml:202-209celý soubor, razítko na řádku 1; odmítne ruční úpravu bez --force (lib/update.sh:98-111)razítko (hash politiky + hash obsahu); událost účetní knihy projections.updated bez názvů cílů (lib/update.sh:146)derivedmost: čte jej každý provider agenta v kořeni; v cílovém stavu se stane jediným spravovaným blokem (I1112)
CLAUDE.mdupdate, stejný kód, share/providers/claude-code.tmpljako AGENTS.mdjako AGENTS.mdderivedmost, zatímco Claude Code potřebuje vlastní kořenový soubor; jeden adaptér na poskytovatele (I1114)
GEMINI.mdupdate, stejný kód, share/providers/gemini.tmpljako AGENTS.mdjako AGENTS.mdderivedbridge, jako CLAUDE.md
.claude/settings.jsoncapture install: lib/capture.sh:2198-2200, tělo na :2393-2404create-only: existující soubor se nikdy nepřepíše; chybějící hooky se vypíší a příkaz končí kódem 15 (:2204-2220)nic; vlastnictví se odvozuje grepem cest shimů (:2209)canonical (nastavení osoby po prvním zápisu)most: Claude Code čte hooky jen zde
.claude/hooks/majordomus-capture, .claude/hooks/majordomus-session-start, .claude/hooks/majordomus-session-end, .claude/hooks/majordomus-session-compactcapture install: lib/capture.sh:2255-2279, tabulka na :249, :286vytvořit; přepsat jen tehdy, když soubor nese značku Written by `majordomus capture install` (:2263)řádek značky v shimu (:2364)generatedpřesunout: settings.json pojmenovává cestu příkazu, takže shimy mohou žít pod .majordomus/hooks/ a soubor nastavení zůstává jediným mostem
.claude/skills/majordomus-brief/, .claude/skills/majordomus-handover/capture install: lib/capture.sh:2326-2356, zkopírováno z share/mods/claude-code/*zapisuje se, dokud platí session.brief_on_interval / session.handover_on_fill (obojí platí v kostře, share/skeleton/policy.yaml:99-101); odstraňuje se soubor po souboru, když je klíč false (:2311-2341)značka na řádku 1 souboru hooks/register.tsgeneratedmost: Claude Code načítá mod jen z .claude/skills/

Měřený běh také vytvořil .claude/skills/majordomus-*/.claude-plugin/types/, který Claude Code založí při načtení modu a který vlastní .gitignore každého modu vylučuje.

Osobní adopce (init --personal) zapíše stejné cesty kromě .gitignore a přidá ještě jednu:

CestaZapsalRežimZaznamenalTřídaOsud
.git/info/exclude — blok mezi # >>> majordomus personal >>> a # <<< majordomus personal <<<lib/common.sh:333-351 (mj_personal_cover), volaný přes mj_personal_guard (:356-361) z init, update (lib/update.sh:126) a capture install (lib/capture.sh:2199, 2268, 2275, 2348); odstraněn příkazem init --shared (lib/common.sh:381-407)blok se přepisuje celý (dočasný soubor a mv); každá pokrytá cesta se přidává se svým sourozencem <path>.mj-tmpblok je záznam a mj_personal_verify (lib/common.sh:410-439) ho kontrolujeruntime (konfigurace klonu)bridge: git pro lokální ignorování klonu nečte nic jiného
CLAUDE.local.md místo CLAUDE.md, když projekt už sleduje CLAUDE.mdinit --personal přepíše politiku (lib/init.sh:237-294, personal_target na share/providers.yaml:122), pak ji update zapíšejako AGENTS.mdrazítko a blok excludederivedbridge

init --personal končí kódem 10, pokud se git status po něm nečte stejně jako před ním (lib/init.sh:166-171). Případ 3113 měří totéž pro celou osobní adopci.

2. Co životní cyklus dělá po adopci

Tyto zápisy se dějí po přijetí, protože hooky, které capture install položil, běží.

ÚčinekZapsalRežimZaznamenalTřídaOsud
Commit na aktuální větvi nesoucí záznam epizody pod .ai/repo/sessions/: git add do skutečného indexu, pak commit-tree a update-ref HEADshim SessionEnd → capture session --event end: lib/capture.sh:1908-1949plumbing, takže neběží žádný commit hook; podmíněno session.commit_record_on_end (v kostře pravda, share/skeleton/policy.yaml:85); v osobním režimu přeskočeno (:1915)zpráva commitu chore(session): record <id> a záznam reflogu session recordruntime (mutace historie)cesta je uvnitř .ai/; historie větví a index jsou mimo ni a kniha to musí pojmenovat jako mutaci historie, ne jako soubor
git fetch, potom git push <remote> HEAD:refs/heads/<branch>lib/capture.sh:1957-1986jen fast-forward, přes vlastní pre-push hook repozitářežádnéruntimejako výše; je řízeno session.push_record_on_end (v kostře true, :86)
Volné objekty z dočasného indexufinish --verify-command: lib/common.sh:68-79 (mj_worktree_tree_id), lib/finish.sh:195-201přidá nedosažitelné objekty; refy a skutečný index se nedotýkajíid stromu v MJ_FINISH_VTREEcachezůstává: git gc je sbírá

To je největší stopa, kterou Majordomus u adoptujícího zanechává a která není souborem. S výchozím nastavením každý SessionEnd commituje a pokouší se pushnout.

3. Příkazy, které adopter spouští podle vlastní volby

CestaZapsalSpouštěčRežimZaznamenalTřídaOsud
.claude/skills/<alias>/SKILL.mdapps/majordomus-cli/src/editors/claude.rs:26-42, editors/mod.rs:595-612generate, generate editorsodmítne soubor bez bannerů (editors/mod.rs:885); odstraní zastaralý soubor s bannerem (:951-962)banner (editors/mod.rs:848), sha256 a klíč odvození v editors::plan, docs/generated/artifacts.jsonderivedbridge (cesta, kterou poskytovatel objevuje). Jedna dovednost na každý alias vestavěné schopnosti se zapíše i v repozitáři bez dovedností: měřený adoptér dostal .claude/skills/intent/SKILL.md
.agents/skills/<id>/SKILL.mdeditors/mod.rs:75, :578-587generate, jeden na aktivní dovednost pod .ai/repo/skills/jako výšejako výšederivedbridge
.zed/tasks.jsoneditors/zed.rs:25,46generate, když justfile má veřejné receptypřepsání chráněné banneremjako výše; nikdy neodstraněno, když jeho úlohy zmizí (sken osiřelých pokrývá jen dva adresáře dovedností, editors/mod.rs:923-948)derivedbridge
AGENTS.md, CLAUDE.md, GEMINI.mdapps/majordomus-cli/src/providers.rs:47-138generaterežim souboru přepíše celý soubor bez kontroly ručních úprav, na rozdíl od shellového update; režim regionu vkládá mezi <!-- majordomus:begin --> a <!-- majordomus:end --> (providers.rs:22-24, :94-108)razítko (providers.rs:141), artifacts.jsonderivedbridge, jako v sekci 1; oba renderery jsou jedna vada (I1114)
docs/generated/** (86 souborů v měřeném adoptérovi: OpenAPI, CLI, registr, moduly, měření výkonu, poskytovatelé, web, changelog, graf, economics, manifest)apps/majordomus-cli/src/generate.rs:32 a cíle na :574-650, :735-746, :942, :1158-1240; manifest na :1864-1990; atomický zápis na :2446-2470generatepřepsat přes .<name>.mj-tmp.<pid> a renamebanner původu a docs/generated/artifacts.jsonderived (registr zahrnuje deklarativní druhy adoptujícího)přesunout do .majordomus/generated/: docs/ patří přejímateli
docs/INSTALL.md, site/static/install.sh, site/data/registry/distribution.jsongenerate.rs:900-1000, distribution/mod.rs:50-55generatepřepsatartifacts.jsonaccidental: vlastní instalátor a instalační stránka Majordoma, zapsané do cizího repozitářestop: hlídka, která už drží share/* a výstupy designu mimo adoptujícího (share_is_here, crate_is_here na generate.rs:697, :823-830), je nepokrývá
site/data/registry/{registry,evidence-subjects,why,why-graph,product,product-graph}.jsongenerate.rs:36, :786-818; evidence/subject.rs:98; site.rs:849, :962, :1325generatepřepsatartifacts.jsonaccidental u adoptujícího repozitáře bez webu Zolastop, nebo move s docs/generated/
deploy/Dockerfile, .dockerignoredeploy/render.rs:16-19, :348-361; generate.rs:837-860generate, jen když adoptující deklaruje objekty deploymentpřepsatartifacts.jsonderivedmost (Docker je čte na těchto cestách), zvolený deklarací deploymentu
<parent>/<repo>-wt/ a <repo>-wt/<branch>/worktree/path.rs:21, :151-161; worktree/service.rs:922-986worktree create, ensure; změřeno: adopter-shared-wt se objevil vedle adoptujícíhojen vytvořitpouze zpráva JSON příkazuruntimezáměrně zůstává mimo repozitář (topologie ADR 0021); kniha zaznamenává, že kontejner byl vytvořen
.envrc.local v propojeném worktree, symlink na kopii primárního, vytvořený jen tehdy, když ho git ignorujeworktree/direnv.rs:118-147worktree create, ensurejen vytvořitreportruntimezůstává (je to soubor dané osoby, sdílený)
úložiště schválení direnv, přes direnv allowworktree/direnv.rs:184-188worktree create/ensure/migrate, když je primární už schválenvlastní zápis direnvreportruntimezůstává; pojmenováno, aby odinstalace věděla, že jej nemá vracet Majordomus
tmp/archives/<repo>-<profile>-<date>.{zip,tar.gz}lib/archive.sh:325-334archivevytvoří; odmítne existující soubor bez --forcežádnéruntimemove: tmp/ není ignorováno init, takže se archiv u adoptujícího ukazuje jako nesledovaný
tmp/packs/<repo>-<profile>-<commit>/ s pack.jsonapps/majordomus-cli/src/pack/mod.rs:76, :1193-1282packnahrazuje jen uvnitř adresáře, který už drží pack.jsonpack.jsonruntimemove, jako tmp/archives/
tmp/majordomus-migrate-backup/<utc>/lib/migrate.sh:155-168migrate (jen rozvržení před .ai)vytvořit, ověřená kopieudálost knihy layout.migrated (lib/migrate.sh:216)runtimepřesunout
target/web/**, target/site/web/manifest.rs:19, :57-70; web/discover.rs:35-41; web/report/*; web/compose.rs:20, :42-134web manifest, web report, web composepřepsat; target/site/ se smaže a zkopíruje znovusurface.jsonruntimepřesun: v adoptujícím projektu v Rustu je target/ od Cargo
jakákoli cesta zadaná do --out / --filecommands/generate.rs:45-48, commands/evidence.rs:155-162, lib/usecase.sh:762, :814explicitpřepsatžádné—zůstává: osoba zvolila cestu

4. Git adresář, konfigurace a refy

ÚčinekZapsalSpouštěčZaznamenalTřídaOsud
.git/config: core.repositoryformatversion=1, extensions.worktreeConfig=trueapps/majordomus-cli/src/worktree/hooks.rs:265-281worktree create/ensure/migrate/repair, když primární nastaví core.hooksPath uvnitř sebe samaJSON příkazu (HooksPath::Set), neukládá seruntimebridge: git to čte jen tam; kniha musí pokrývat konfiguraci klonu, nejen soubory
.git/worktrees/<n>/config.worktree: core.hooksPathworktree/hooks.rs:219-223stejnéstejnéruntimebridge
refs/heads/<branch>, .git/worktrees/<n>/worktree/service.rs:924-940 (přes git worktree add)worktree create (změřeno)žádnéruntimezůstává (vlastní evidence gitu)
.git/majordomus/locks/worktrees.lockworktree/lock.rs:24, :60-96worktree remove/repair/migratežádnéruntimezůstává: společný adresář gitu je jediné místo, které sdílí každý worktree
.git/majordomus/integration/**, .git/majordomus/locks/integration-<base>.lockintegration/mod.rs:83, :116-150; integration/drain.rs:303-372, :823-832, :2403-2557prsevents.jsonlruntimezůstává
refs/majordomus/continuity, refs/majordomus/remotes/<remote>/continuity a push prvního na remotecontinuity/store.rs:35-39, :245-294, :410-445continuity publish/sync/resume (naměřeno: continuity publish vytvořilo refs/majordomus/continuity)samotné podepsané záznamycanonical (předávky člověka, publikované)zůstává: refs/majordomus/ je třetí jmenný prostor v prostoru refs gitu
refs/majordomus/prs/<n> (vynucené zrcadlo)integration/forge.rs:45, :1736-1809prs refreshžádnécachezůstává pod refs/majordomus/
refs/offload/in-<tag>, refs/offload/<tag>-derived; poté soubory připravené ve worktree dané osobyoffload/run.rs:387-388, :584-601, :655-659offload, jen když je deklarováno .ai/repo/offload/*.yamlžádnéruntimepřesun do refs/majordomus/offload/: jediný ref, který Majordomus zapisuje mimo svůj jmenný prostor refů

V bin/majordomus ani lib/*.sh není žádný zápis git config. core.hooksPath a merge.derived.* se tam objevují jen jako rada, kterou doctor vytiskne (lib/doctor.sh:157-161, :228-230). Žádný příkaz nezapisuje .git/hooks/. init vytiskne dva řádky hooku a žádný neinstaluje (lib/init.sh:200-226) a měřený běh potvrzuje, že .git/hooks/ zůstal beze změny.

5. Stroj, mimo repozitář

CestaZapsalSpouštěčZaznamenalTřídaOsud
$HOME/.local/bin/majordomus, $HOME/.local/bin/majordomus-mcp, $HOME/.local/share/majordomus/versions/<v>/, $HOME/.local/share/majordomus/.locksite/static/install.sh:41-42, :580-626instalátorRELEASE.json ve stromu verzígeneratedmimo smlouvu: instalace, ne adopce. Instalátor neupravuje žádný spouštěcí soubor shellu a jen vypíše radu k PATH
$XDG_STATE_HOME/majordomus/node.json, jinak $HOME/.local/state/majordomus/node.json (tajný klíč Ed25519, režim 0600)apps/majordomus-cli/src/mesh/identity.rs:140-165start serveru se zapnutým .ai/repo/mesh; jakýkoli zápis kontinuity; continuity devicežádnéruntimemimo kontrakt (jeden na stroj, sdílený každým repozitářem). Měřený adoptující mesh nezapíná a serve ensure pod HOME nezapsal nic
spravovaný blok v ~/.zshrc, ~/.bashrc nebo ~/.config/fish/config.fish, plus <rc>.majordomus.bakcommands/completion.rs:36-37 (značky), :44-148completion install (změřeno: blok se objevil v $HOME/.zshrc)značky; --remove je odstranígeneratedmimo smlouvu; již vratné
pravidla firewallu hostitelemesh/firewall.rs:489, :595-650, :1362sudo majordomus mesh firewall applyžádnéruntimemimo kontrakt; explicitní a privilegované

6. Co už existuje a která fáze to rozšiřuje

Každá pozdější fáze má mechanismus, od kterého vychází. Fáze, která vedle něj staví druhý, opakuje vadu, kterou má tento milník odstranit.

MechanismusKdeCo už děláFáze, která ji rozšiřuje
Osobní blok excludelib/common.sh:311-439 (mj_personal_cover, mj_personal_verify)záznam po klonu, ohraničený značkami, o každé cestě, kterou vrstva zapsala, přepisovaný celý, ověřovaný a znovu odstraňovaný pomocí init --sharedI1109, účetní kniha vlastnictví. Je to její první podoba, bez hashů. Kniha přidá hash nainstalované verze a pokryje konfiguraci a refy
Razítko poskytovatele a odmítnutí ruční úpravylib/update.sh:98-111, lib/common.sh:907-967; providers.rs:141hash, s nímž byl cíl zapsán, porovnaný s tím, co je na diskuI1111, odinstalace: „odmítne sáhnout na bridge, který člověk upravil“ je toto srovnání. Renderer v Rustu musí odmítnutí získat dřív, než může být jediným rendererem
Plán editorů: banner, state_of (Current/Stale/Absent/Conflict), conflicts, orphans, remove_orphans, sha256 a klíč odvozeníapps/majordomus-cli/src/editors/mod.rs:545-962, schopnost editors.statuspožadované soubory spočtené z modelu, porovnané se stromem, konflikty odmítnuty, sirotci odstraněniI1108, požadovaný stav a plán a I1110, idempotence. To už je reconciler pro jednu rodinu souborů; init se má stát stejného tvaru
capture install jako vyrovnánílib/capture.sh:2255-2356požadovaná množina z klíčů politiky; přepis hlídaný značkami; odebrání modu, jehož klíč se změnil na falseI1108 a I1112. Pravidlo, že soubor bez značky se nikdy nedotkne, se přenáší beze změny
docs/generated/artifacts.jsongenerate.rs:1864-1990cesta, dokument, zdroj, bajty a sha256 každého artefaktu, který generate zapisujeI1103 / I1106: inventář odvozených artefaktů. Nepokrývá výstupy fáze B z scripts/generate-site-data
Predikáty cizího stromu share_is_here, crate_is_heregenerate.rs:697, :823-830; commands/generate.rs:145držet share/* a výstupy designu mimo adoptujícíhoI1112 / I1116: stejný predikát zastaví nahodilé řádky z oddílu 3
Blok doplňovánícommands/completion.rs:36-148spravovaný blok se značkami, --dry-run, --remove a zálohaI1111 / I1112: tvar, který by měl mít každý spravovaný kořenový blok, včetně jediného dnes funkčního odinstalování
Rovnost git status před/po osobního initulib/init.sh:166-171; případ 3113dokazuje, že adopce nezměnila nic, co repozitář sdílíI1110 / I1122: důkazy idempotence a cizího repozitáře měří stejným způsobem
Události účetní knihy projections.updated, layout.migratedlib/update.sh:146, lib/migrate.sh:216záznamy dvou mutací jen pro připojováníI1109. projections.updated nejmenuje žádný cíl a init a capture install nevysílají žádnou událost

7. Co se změnilo od prvního čtení

Tyto opravy se měří proti 948dbd93:

  • Dokončování a prostředí existují. majordomus completion install zapisuje spravovaný blok do spouštěcího souboru shellu a majordomus env popisuje checkout. První čtení tvrdilo, že neexistuje ani jedno.
  • Nyní existuje jedna cesta odinstalace: completion install --remove. Nic jiného není vratné.
  • capture install zapisuje víc než hooky. Zapisuje dva mody Claude Code do .claude/skills/ a odstraňuje je, když se jejich klíč politiky vypne. generate zapisuje dovednosti editoru do .claude/skills/ a .agents/skills/ a .zed/tasks.json. Nic z toho nebylo v prvním čtení.
  • share/allow/commands.txt a share/allow/events.txt nyní říkají, čím jsou. Oba nesou banner AUTHORED FILE — no generator derives it yet. Stále jsou to ručně psané soubory ve generovaném adresáři.
  • Osobní adopce existuje a je to jediná adopce, která už vede záznam o tom, co zapsala (sekce 1).
  • Stále platí: init odmítne druhý běh s exit 15 (test/cases/01_init.sh); nic nevrací init, update ani capture install; share/events.yaml nemá událost init; README.md:476 stále říká, že každý generovaný soubor vzejde z jednoho spustitelného souboru, což scripts/generate-site-data stále popírá.

8. Defekty, které tento inventář našel, zaznamenány a zde neopraveny

Tato fáze nemění žádnou cestu. Každý defekt níže patří uvedené fázi:

  • generate v adoptérovi zapíše vlastní docs/INSTALL.md, site/static/install.sh a registr webu Majordomus (sekce 3) → I1112 / I1116.
  • Renderer poskytovatele v Rustu v režimu souboru přepíše ručně upravený AGENTS.md a migrate spouští update --force (lib/migrate.sh:220), které dělá totéž → I1111 / I1114.
  • update zapisuje $MJ_ROOT/$target bez ../ a absolutní cesty guard mj_norm_path (lib/common.sh:694-707) → I1102.
  • Zastaralé .zed/tasks.json se nikdy neodstraní → I1110.
  • Vytvoření worktree zapíná extensions.worktreeConfig ve sdíleném .git/config a říká to jen ve svém JSON → I1109.
  • refs/offload/* leží mimo refs/majordomus/ → I1104.
  • Commit SessionEnd z principu obchází commit hooky repozitáře → I1109 to zaznamenává; zda to zůstane výchozí, je rozhodnutí politiky, ne tohoto soupisu.

9. Seřazené řezy

Toto jsou úkoly milníku v pořadí, které soupis podporuje:

  1. I1102 / I1104: jmenné prostory jako typovaná smlouva. .ai/, .majordomus/ a refs/majordomus/ jsou jmenné prostory. .ai/.gitignore odebírá hraniční řádky z kořenového .gitignore.
  2. I1109: kniha vlastnictví, vyrostlá z osobního exclude bloku, pokrývající soubory, konfiguraci klonu, refy a mutace historie, každé s hashem, s nímž bylo zapsáno.
  3. I1108 / I1110: init jako reconciler v tvaru, který už plán editorů má: požadováno, skutečné, konflikt, sirotek. Druhý běh nic nezmění.
  4. I1112: kořen zredukovaný na mosty. Shimy .claude/hooks/ se přesunou pod .majordomus/ a nahodilé řádky sekce 3 přestanou.
  5. I1111: uninstall, s porovnáním otisku pro odmítnutí a --remove dokončovacího bloku jako vzorem.
  6. I1116: vlastní stopa tohoto repozitáře, přesunutá přes reconciler, nejdřív nanečisto.

10. Rizika

  • Soupis, kterému zapisovatel uteče, je horší než žádný. Opravňuje to, co už nepopisuje. Proto je výchozí adopce test (případ 3113), ne jen tabulka. Volitelné příkazy sekcí 3 až 5 drží toto čtení samo, dokud je kniha nezaznamená.
  • Shellový nástroj a spustitelný soubor v Rustu jsou dvě implementace jednoho produktu. Životní cyklus adopce žije v shellové a generate v rustové. Oba zapisují kořenové soubory poskytovatelů a ruční úpravu odmítá jen shellová. Každý řez, který přesune zapisovatele přes tuto hranici, musí zanechat jednoho zapisovatele, ne dva.

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