Zdůvodnění
Kopie repozitáře, která opustí stroj, se čte tam, kde ji nikdo nemůže porovnat s originálem. Ručně zkopírovaný adresář nese, co pracovní strom náhodou obsahuje: výstup buildu v target/, strom závislostí, vnořený worktree, cache, lokální polovinu vrstvy AI, binárku, kterou model nepřečte a poskytovatel ji může odmítnout. Zip chatový model ve svém indexu souborů vůbec neprohledává. Obě selhání jsou na druhém konci tichá — čtenář vidí repozitář, ne chybu.
Výběr je tedy git index, nikdy adresář; co profil vynechává, je deklarováno jednou v share/archive.yaml a čte to archiv shellu i pack spustitelného souboru; a pack se dokazuje po zapsání, protože pack, který byl jen správně naplánován, je tvrzení o souboru, který nikdo nepřečetl zpět.
Požadované chování
- Sada souborů je git index a obsah jsou bloby indexu. Nic nesledovaného není nikdy kandidátem.
- Profil s
binary: dropvynechá soubor, jehož přípona je nabinary_extensions, a soubor, jehož obsah není text: bajt NUL, obsah, který není UTF-8 (balíček), nebo verdikt gitu-text(archiv). - Profil s
artifacts: dropvynechá každou cestu odpovídajícíartifact_paths, každý symbolický odkaz a (balíček) každý gitlink.includenikdy žádný z nich znovu nepřipustí. - Profil s
derived: dropvynechá to, co.gitattributesoznačujemerge=derived. - Balíček se odmítne sestavit, když vybraný soubor pojmenovává absolutní cestu vlastního checkoutu nebo domovský adresář balícího účtu, když je jeden soubor nad rozpočtem shardu, když je souborů víc, než profil dovoluje, a když je výběr prázdný.
pack buildověřuje, co zapsal, apack verifyodmítne balíček, jehož soubory nenesou digesty, které zaznamenává jeho manifest, který drží soubor, jejž manifest nejmenuje, nebo který nese zakázanou cestu, bajt NUL nebo soubor nad rozpočtem.- Obsah se přenáší tak, jak je commitnut; balíček nikdy žádný soubor nepřepisuje.
Chování při selhání
majordomus pack plan a pack build skončí s kódem 10 s pojmenováním každého nálezu (pack.file_too_large, pack.too_many_shards, pack.index_too_large, pack.leak, pack.empty, pack.no_limits) a nic nezapíšou; pack verify skončí s kódem 10 a jmenuje pack.tampered, pack.stray, pack.missing, pack.forbidden_path, pack.not_text, pack.over_budget nebo pack.manifest a s kódem 12, když manifest nelze přečíst, což není nikdy úspěch. Kontrola CI pack-plan spouští plán profilu chatgpt při každé změně, která jej může posunout.
Ověření
majordomus pack plan chatgpt
bash test/run.sh 871_pack_for_chatgpt 130_archive
cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib pack