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.

Předat repozitář někomu, kdo ho nemůže naklonovat

Pořiďte snímek, který model přečte nebo kontrola v něm může běžet, bez odesílání čehokoli nesledovaného a bez ztráty režimů souborů cestou.

zaručeno Znalosti repozitářezákladnímaintaineragentzapisuje stav

Situace

Repozitář musí jít někam, kde se nedá naklonovat: do kontextu jazykového modelu, k recenzentovi na uzamčeném stroji, do sítě bez připojení k internetu, do auditu, který musí kontroly spustit na kopii. Ručně je to git ls-files, tar a seznam výjimek přepisovaný z paměti a selhává dvěma způsoby, které se projeví až na druhém konci — kde nikdo nemůže kopii s originálem porovnat a kde obě selhání vypadají, jako by byl rozbitý repozitář, a ne chybná kopie. Něco nesledovaného putovalo, co nemělo, nebo zmizela souborová oprávnění a nic ve stromu nepoběží.

Co spouštíte

  • archive --list: profily, každý je jiný čtenář, a tedy jiný snapshot
  • archive --dry-run: co by se přeneslo, s každým vynechaným souborem připsaným pravidlu, které jej vynechalo
  • archive: snímek, ověřený svým vlastním kontejnerem dřív, než se příkaz vrátí

Scénář

setup: installed
given:
  - 'a repository with the layer installed and its files committed'
steps:
  - id: profiles
    run: ['archive', '--list']
    note: 'the snapshots are declarations in share/archive.yaml, not flags'
    expect:
      exit: 0
      stdout_contains: ['context', 'audit', 'governance']
  - id: what-would-travel
    run: ['archive', '--dry-run']
    note: 'the count archived is stated beside the count tracked, so a selection that matched nothing cannot look like one that matched everything'
    expect:
      exit: 0
      stdout_contains: ['profile context', 'tracked file', 'nothing written']
  - id: written-and-read-back
    run: ['archive', '--format', 'tar.gz']
    note: 'the archive is opened again before the command returns'
    expect:
      exit: 0
      stdout_contains: ['OK   archive', 'read back']
  - id: no-such-profile
    run: ['archive', 'nosuch']
    note: 'exit 12 is MISSING_ARTIFACT, and the message names the command that lists what exists'
    expect:
      exit: 12
      stdout_contains: ['no profile', 'archive --list']
then:
  - 'nothing untracked is in the archive, because the file set is the git index'
  - 'every entry carries the mode the index records, and the archive says so in its own manifest'
  - 'the archive was read back before the command returned, and an unreadable one is a failure rather than a delivery'

Výsledek

Jedno gesto místo zapamatovaného zaklínadla. Co se vynechává, je deklarováno, ne přepisováno, a deklarace, kterou čte pro generované soubory, je .gitattributes, kterou repozitář už udržuje z jiného důvodu — takže neexistuje druhý seznam, který by zastaral. Kopie dorazí se svými režimy a lze ji jedním skriptem zprovoznit, což znamená, že kontrola, která v ní selže, selhala z důvodu, který patří repozitáři.

Scénář

Provedeno proti skutečnému nástroji v repozitáři připraveném pomocí installed, při každém generování tohoto webu. To, co následuje, není popis toho, co by se mělo stát; je to to, co se stalo.

dáno

  • repozitář s nainstalovanou vrstvou a commitnutými soubory

kdy

  1. 1majordomus archive --list
  2. 2majordomus archive --dry-run
  3. 3majordomus archive --format tar.gz
  4. 4majordomus archive nosuch

pak

  • v archivu není nic nesledovaného, protože sada souborů je index gitu
  • každá položka nese režim, který index zaznamenává, a archiv to uvádí ve svém manifestu
  • archiv byl přečten zpět, než se příkaz vrátil, a nečitelný archiv je selhání, ne dodání

Co nástroj udělal

Důkazy o běhu, ze kterého byla tato stránka vygenerována: pass, kroků: 4. Výstup je normalizovaný: cesta k repozitáři, časová razítka, identifikátory a doby trvání jsou zástupné hodnoty, nic dalšího se neupravuje.

Testováno v test/cases/94_use_cases.sh, který spouští každý scénář a odmítne krok, jehož zaznamenaný výstup není tím, co vyprodukoval.

  1. snímky jsou deklarace v share/archive.yaml, nikoli přepínače

    context      Context for a language model  (default)
                 Every tracked source, without the projections generated from it, under one orientation document.
    chatgpt      Sources for a ChatGPT project
                 Every tracked source as token-bounded Markdown shards a ChatGPT project's file search indexes, without binaries, worktrees, links, build output, projections or recorded measurements.
    audit        A faithful copy the gates can run in
                 Every tracked file, nothing dropped, with the modes and a local git index restored.
    governance   The operating contract alone
                 The AI layer, the documentation and the provider bootstraps, without any code.
    archive: 4 profile(s)
    • exit 0
    • stdout_contains /context/
    • stdout_contains /audit/
    • stdout_contains /governance/
  2. počet archivovaných je uveden vedle počtu sledovaných, takže výběr, který nic neodpovídal, nemůže vypadat jako ten, který odpovídal všemu

    archive: profile context — 104 of 104 tracked file(s), 251 KB of content
             nothing written (--dry-run)
    • exit 0
    • stdout_contains /profile context/
    • stdout_contains /tracked file/
    • stdout_contains /nothing written/
  3. archiv je znovu otevřen dříve, než se příkaz vrátí

    OK   archive     repo-context-<date>.tar.gz — 108 entr(ies) read back, 1 of them executable
    archive: profile context — 104 of 104 tracked file(s), 251 KB of content
             wrote tmp/archives/repo-context-<date>.tar.gz (<size> KB)
    • exit 0
    • stdout_contains /OK archive/
    • stdout_contains /read back/
  4. exit 12 je MISSING_ARTIFACT a zpráva jmenuje příkaz, který vypíše, co existuje

    majordomus: archive: no profile 'nosuch' (run: majordomus archive --list)
    • ukončení 12
    • stdout_contains /no profile/
    • stdout_contains /archive --list/

Proč to nástroj ví

Řetězec od této stránky ke kódu: případ užití jmenuje příkazy, pravidla a tvrzení; každé pravidlo se dispatchuje z registru a každé tvrzení jmenuje test, který ho dokazuje; scénář výše provedl příkazy. Nic v tomto řetězci není text o záměru.

Uplatněné záruky

Související případy užití

Vypočteno z toho, co sdílejí: tvrzení, pravidla, příkazy, kategorie, aplikace. Tento seznam nikdo neudržuje.

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