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.

majordomus migrate

Přesune data projektu z doby před .ai z .majordomus/ do .ai/, výslovně a se zálohou.

Přesune data projektu z doby před .ai z .majordomus/ do .ai/, výslovně a se zálohou.

  • generated-output-mutating
  • systém
  • běží před init

Běží jen na starém uspořádání. Lokální stav zkopíruje stranou dříve, než se cokoli pohne, nikdy nesmaže soubor, který nezná, a odmítne adresář, který obsahuje projektová data i instalaci nástroje.

Syntaxe

majordomus migrate [--dry-run]

Životní cyklus

  1. Nastavit
  2. Začít
  3. Pracovat
  4. Ověřit
  5. Uzavřít
  6. Prozkoumat

Další příkazy v této fázi:init, update, recover.

Čte

  • .majordomus/
  • share/skeleton/ai

Zapisuje

  • .ai/
  • tmp/majordomus-migrate-backup/
  • .gitignore
  • .ai/local/state/ledger.jsonl

Návratové kódy

Jen kódy, které tento příkaz může vrátit. Úplný kontrakt je na indexu příkazů.

  • 0 ok
  • 2 použití
  • 10 kontrakt nesplněn
  • 12 chybějící artefakt
  • 13 interní chyba
  • 15 odmítnuto

Opuštění starého rozložení, záměrně

migrate přesune projektová data z rozvržení před .ai pod .majordomus/ do přenosné vrstvy AI. Je explicitní, vypíše svůj plán, nejprve zkopíruje lokální stav stranou a nikdy nesmaže soubor, který nezná.

Plán a nic nezapsáno

--dry-run
ano
starší rozvržení
ano

Pro tento repozitář platí

# A repository still on the pre-.ai layout: project data under .majordomus/, no .ai/ at all.
# The tool no longer writes that layout, so it is assembled from a fresh installation.
. "$FIXTURE_SETUP/installed.sh"
mkdir -p .majordomus
for s in policy.yaml profiles prompts project; do [ -e ".ai/repo/$s" ] && mv ".ai/repo/$s" ".majordomus/$s"; done
mv .ai/local/state .majordomus/state
rm -rf .ai
sed -i.bak '/^\.ai\/local\/$/d' .gitignore && rm -f .gitignore.bak
git add -A && git commit -qm legacy

Spustit

$ majordomus migrate --dry-run

Výstup obsahuje

  • ^migrate: .majordomus/ \(pre-.ai layout\) -> .ai/
  • move .majordomus/policy.yaml -> .ai/repo/policy.yaml

ukončení 0

Každý soubor a kam půjde, ještě než se cokoli přesune. Plán, který překvapí, je plán k opětovnému přečtení, ne ke spuštění.

Samotný přesun

--dry-run
ne
starší rozvržení
ano

Pro tento repozitář platí

# A repository still on the pre-.ai layout: project data under .majordomus/, no .ai/ at all.
# The tool no longer writes that layout, so it is assembled from a fresh installation.
. "$FIXTURE_SETUP/installed.sh"
mkdir -p .majordomus
for s in policy.yaml profiles prompts project; do [ -e ".ai/repo/$s" ] && mv ".ai/repo/$s" ".majordomus/$s"; done
mv .ai/local/state .majordomus/state
rm -rf .ai
sed -i.bak '/^\.ai\/local\/$/d' .gitignore && rm -f .gitignore.bak
git add -A && git commit -qm legacy

Spustit

$ majordomus migrate

Výstup obsahuje

  • ^migrated: .ai/ is the layout

ukončení 0

Sledovaná polovina přistane pod .ai/repo/ a lokální polovina pod .ai/local/, které se od té chvíle ignoruje. Na konci běží doctor, takže první, co se na novém rozvržení uvidí, je jeho skutečný stav.

Není co migrovat a není žádná vrstva

--dry-run
ne
starší rozvržení
ne

Pro tento repozitář platí

# An empty git repository: no AI layer at all.
git commit -q --allow-empty -m base 2>/dev/null || true

Spustit

$ majordomus migrate

Výstup obsahuje

  • není co migrovat

ukončení 12

Repozitář bez jednoho či druhého rozvržení se nemigruje do existence; je mu řečeno, aby spustil init.

Reference

Přesunout projektová data repozitáře z uspořádání před .ai pod .majordomus/ do přenosné AI vrstvy pod .ai/, jednou a výslovně. Žádný běžný příkaz nemigruje: check, doctor, start a ostatní zastaré uspořádání odmítnou (12) a pojmenují tento příkaz.

Značky: starý je .ai/repo/policy.yaml; nový je .ai/manifest.yaml; .majordomus/bin/majordomus je instalace nástroje a nikdy data projektu.

Čte: každý soubor pod .majordomus/, manifest skeletonu (odtud jsou cíle), šablony nástroje (aby se odlišila nezměněná šablona od upravené). Zapisuje: .ai/README.md, .ai/manifest.yaml; kanonické soubory přesunuté do .ai/repo/ (git mv tam, kde jsou sledovány, aby historie následovala); .ai/local/state/ přesunuté do .ai/local/state/ a vyjmuté z indexu; zbytek vrstvy osazený ze skeletonu bez přepsání čehokoli, co se přesunulo; jeden řádek .ai/local/ v .gitignore; bajt po bajtu kopii stavu pod tmp/majordomus-migrate-backup/<utc>/state/ a starého providers/ pod .../providers/, ověřenou a vypsanou, než se kterékoli z nich dotkne; řádek ledgeru layout.migrated; poté update --force vykreslí projekce z tenkých bootstrapů nástroje a doctor posoudí výsledek, každý exit je hlášen na vlastním řádku.

Behaviour:

  • --dry-run vypíše celý plán, jeden řádek na soubor s jeho akcí a cílem, a nic nezapisuje. Stejná tabulka řídí skutečný běh.
  • templates/*.md shodné s vlastními v nástroji se zahodí; upravené se přesune do .ai/repo/templates/. generated/ se zahazuje: každá projekce teď nese vlastní razítko.
  • providers/ — tělo poskytovatele a monolitické šablony, které si ho vyžádaly — se do .ai/ nepřenáší. Tělo už neexistuje nikde a update žádné nevykresluje, takže by stará šablona zanechala v generovaném souboru doslovný token. Adresář se zkopíruje do zálohy, odstraní z indexu a ohlásí jedním řádkem: bootstrapy jsou nyní tenké adaptéry nástroje, přepsání pro repozitář patří pod .ai/repo/providers/<provider>.tmpl v novém formátu a pravidla těla patří pod .ai/repo/rules/project/ jako objekty pravidel (DOCTRINE.md popisuje formát).
  • Soubor v .majordomus/, který tato verze nezná, se nikdy nesmaže. Ohlásí se a .majordomus/ se odstraní, jen když je prázdný.
  • Odmítne (15) .majordomus/, který obsahuje policy.yaml i bin/majordomus, a pojmenuje bezpečný ruční krok; odmítne (15), když cíl pod .ai/ již existuje, a vypíše každý takový. V obou případech se nic nezapíše.
  • Starší politika, která se neparsuje nebo není verze 1, se odmítne (10) dřív, než se cokoli přesune: nejdřív ji oprav na místě.
  • Idempotentní: v repozitáři, který už má rozvržení .ai, to řekne a skončí s 0. Pokud není přítomno žádné rozvržení, skončí s 12 a jmenuje init.
  • Stav přestane být sledován: jeho trvanlivost je checkout plus záloha, ne branch. Commitněte sledovanou polovinu po kontrole git status.
$ majordomus migrate --dry-run
migrate: .majordomus/ (pre-.ai layout) -> .ai/ (ai-repository/v1)
  move  .ai/repo/policy.yaml -> .ai/repo/policy.yaml
  move  .ai/repo/profiles/debugging.yaml -> .ai/repo/profiles/debugging.yaml
  state .ai/local/state/current.yaml -> .ai/local/state/current.yaml
  drop  .majordomus/templates/handover.md    (identical to the tool's template)
  ...
dry run: nothing written

Důkazy

Každý případ níže běží v CI na Linuxu i macOS. Web se odmítne sestavit, pokud veřejný příkaz nemá behaviorální případ, negativní případ nebo ukázku.

Chování

Způsoby selhání

Ukázka

Testuje test/cases/34_command_fixtures.sh, který přehraje fixture a porovná ji s tím, co příkaz vypíše.

Záruky, které tento příkaz nese

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