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 archive

Pořiďte snímek sledovaného stromu, který lze číst nebo ověřit jinde.

Pořiďte snímek sledovaného stromu, který lze číst nebo ověřit jinde.

  • generated-output-mutating
  • systém
  • --json

Sadou souborů je git index, takže nic nesledovaného — žádný výstup buildu, žádná cache, žádné .ai/local/ — se nemůže přenést. Co profil vynechá navíc, je deklarováno v share/archive.yaml; profil, který vynechává odvozené cesty, čte .gitattributes, místo aby držel druhý seznam generovaných cest. Režim každé položky se bere z indexu a zapisuje do manifestu archivu a restore skript uvnitř archivu režimy vrátí a sestaví lokální git index, protože kopie, jejíž skripty nejsou spustitelné, selže kontrolami z vlastních důvodů.

Syntaxe

majordomus archive [<profile>] [--out <path>] [--format zip|tar.gz] [--dry-run] [--force] [--json] | majordomus archive --list [--json]

Ž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:doctor, watch, history, search, doctrine, version, knowledge, rules, bench.

Čte

  • share/archive.yaml
  • .ai/repo/archive.yaml
  • .gitattributes

Zapisuje

  • tmp/archives/

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

Snímek, který lze číst nebo kontrolovat jinde

Repozitář opouští stroj častěji, než se zdá: k modelu, který přečte všechno, k recenzentovi, který nemůže klonovat, k auditorovi, který musí spustit kontroly na kopii. Cestuje git index a pouze git index, takže nic nesledovaného nemůže uniknout; co se zahazuje navíc, je profil v share/archive.yaml, a profil, který zahazuje generované projekce, čte .gitattributes, místo aby vedl jejich druhý seznam.

Jaké snímky existují a který je výchozí

vrstva nainstalována
ano

Pro tento repozitář platí

# A repository with Majordomus installed and projections generated, and one commit of work.
"$MJ" init >/dev/null
"$MJ" update >/dev/null
mkdir -p lib docs
echo a > lib/a
echo d > docs/d
git add . && git commit -qm base

Spustit

$ majordomus archive --list

Výstup obsahuje

  • kontext
  • \(default\)
  • audit
  • governance

ukončení 0

Profily jsou deklarace, ne přepínače: každý jmenuje jiného čtenáře a souhrn říká, co je tomuto čtenáři dlužno. Repozitář může přidat vlastní v .ai/repo/archive.yaml, aniž by měnil nástroj.

Co by se přeneslo a proč zbytek ne

vrstva nainstalována
ano

Pro tento repozitář platí

# A repository with Majordomus installed and projections generated, and one commit of work.
"$MJ" init >/dev/null
"$MJ" update >/dev/null
mkdir -p lib docs
echo a > lib/a
echo d > docs/d
git add . && git commit -qm base

Spustit

$ majordomus archive --dry-run

Výstup obsahuje

  • kontext profilu
  • sledovaný soubor
  • nic nezapsáno

ukončení 0

Počet sledovaných souborů je uveden vedle počtu archivovaných, takže výběr, který tiše nic nezachytil, nemůže vypadat jako výběr, který zachytil vše. Každý vynechaný soubor je připsán pravidlu, které jej vynechalo.

Zapsáno a poté přečteno zpět

vrstva nainstalována
ano

Pro tento repozitář platí

# A repository with Majordomus installed and projections generated, and one commit of work.
"$MJ" init >/dev/null
"$MJ" update >/dev/null
mkdir -p lib docs
echo a > lib/a
echo d > docs/d
git add . && git commit -qm base

Spustit

$ majordomus archive --format tar.gz

Výstup obsahuje

  • OK archive
  • číst zpět
  • zapsáno tmp/archives/

ukončení 0

Archiv se před návratem příkazu otevře znovu. Počet položek musí odpovídat tomu, co bylo připraveno, a spustitelné soubory, které se dostaly dovnitř, musí vyjít ven — selhání, na které tento příkaz odpovídá, je kontejner, který tiše zahodil režimy souborů.

Žádost o snímek, který nikdo nedeklaroval

vrstva nainstalována
ano

Pro tento repozitář platí

# A repository with Majordomus installed and projections generated, and one commit of work.
"$MJ" init >/dev/null
"$MJ" update >/dev/null
mkdir -p lib docs
echo a > lib/a
echo d > docs/d
git add . && git commit -qm base

Spustit

$ majordomus archive nosuch

Výstup obsahuje

  • žádný profil
  • archive --list

ukončení 12

Exit 12 je MISSING_ARTIFACT a zpráva jmenuje příkaz, který vypíše, co existuje, místo aby to vypisovala tady.

Reference

Pořiďte snímek sledovaného stromu, který lze číst nebo ověřit jinde.

Repozitář opouští stroj častěji, než se zdá: k jazykovému modelu, který si ho přečte celý najednou, k recenzentovi, který nemůže klonovat, k auditorovi, který musí spustit kontroly na kopii. Dělalo se to ručně, pokaždé jinak, a ruční verze chybovala ve dvou věcech, které vyplavou až na druhém konci.

Putuje git index a jen git index. Nic nesledovaného se nikdy nearchivuje — ani výstup sestavení, ani cache, ani .ai/local/, což je vlastní stav tohoto checkoutu a nikdy se nesdílí. To je jedno pravidlo místo seznamu výjimek a díky tomu je bezpečné příkaz namířit na repozitář, který nikdo nečetl.

Co se vynechává nad to, je deklarováno, ne kódováno. share/archive.yaml drží profily; repozitář může přidat nebo nahradit jeden ve vlastním archive.yaml pod .ai/repo/. Profil, který odhazuje odvozené cesty, čte .gitattributes — každá projekce v tomto repozitáři je tam už označena merge=derived, z jiného důvodu — místo aby držel druhý seznam generovaných cest, což je duplikace, kterou .ai/repo/rules/project/commands-are-projections.v1.md odmítá.

Režimy se nesou výslovně. zip -X odstraní extra pole, která drží unixový režim, a rozbalený strom pak neobsahuje žádný spustitelný soubor: každý skript selže při spuštění, a na druhém konci to nelze odlišit od toho, že je repozitář rozbitý. Proto se režim každé položky čte z indexu — autority, ne z pracovního stromu —, zapisuje do _ARCHIVE/MANIFEST.txt a _ARCHIVE/restore.sh uvnitř archivu režimy vrací a vytváří místní git index, protože zdejší kontroly vyjmenovávají repozitář pomocí git ls-files a bez indexu nezkoumají nic a hlásí, že nic není špatně.

Každý archiv se čte zpět dřív, než se příkaz vrátí: počet položek musí odpovídat tomu, co bylo připraveno, a pokud spustitelné soubory dovnitř vstoupily a ven nevyšly, je to selhání, ne překvapení pro příjemce.

Čte: share/archive.yaml, archive.yaml pod .ai/repo/, když ho repozitář má, .gitattributes a index gitu. Zapisuje: tmp/archives/ — nebo kam řekne --out.

Dodávané profily:

ProfilPro
contextModel, který bude číst repozitář. Každý sledovaný zdroj, bez projekcí z něj generovaných.
auditSpuštění vlastních kontrol repozitáře na kopii. Každý sledovaný soubor, nic vynecháno, režimy a git index obnoveny.
governancePouze provozní kontrakt: .ai/, docs/, AGENTS.md, CLAUDE.md a žádný kód.
$ majordomus archive --dry-run
archive: profile context — 2299 of 2757 tracked file(s), 12919 KB of content
         left out: 10 (binary)
         left out: 443 (derived)
         left out: 5 (excluded)
         nothing written (--dry-run)

$ majordomus archive
OK   archive     prismatic-majordomus-context-20260911.zip — 2303 entr(ies) read back, 76 of them executable
archive: profile context — 2299 of 2757 tracked file(s), 12919 KB of content
         wrote tmp/archives/prismatic-majordomus-context-20260911.zip (5044 KB)

Behaviour:

  • --list vypíše profily s tím, k čemu každý slouží, a označí výchozí.
  • --dry-run hlásí výběr a důvod, proč byl každý soubor vynechán, a nezapisuje nic.
  • --out přepíše cíl; --format zip|tar.gz přepíše kontejner.
  • Existující výstupní soubor se odmítne s 15, pokud není zadáno --force, aby nešel pod rukama nahradit archiv, který někdo právě nahrává.
  • Cesta, kterou index jmenuje a pracovní strom už nemá, se počítá a hlásí, nechybí tiše.
  • --json vypíše jeden objekt s počty, důvody a cestou.

Skončí s 2 při chybě použití, s 12, když takový profil neexistuje nebo zip není na PATH, s 10, když profil nevybere žádný ze sledovaných souborů, s 15, když výstup existuje, a s 13, když se kontejner nepodařilo zapsat nebo se nenačte zpět jako to, co do něj vstoupilo.

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.

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.