Aller au contenu

La mise à jour

Utilitaires

Commande Description
grimoire context-pack Écrire un context-pack durable (contrat catalogue) pour le dépôt
grimoire update Mettre à jour grimoire-kit — alias de grimoire self update ; la wheel est vérifiée avant installation (--channel stable\|preview, --check, --offline, --from <bundle>)
grimoire self bundle <dossier> Construire le bundle hors ligne que self update --from installe (wheel, dépendances, SHA256SUMS, PROVENANCE.json)
grimoire verify-install Vérifier l'installation de grimoire-kit (--online : contre la wheel et le SHA256SUMS publiés)
grimoire debugger status État de la réalité et du débogage des agents
grimoire debugger claims Affirmations enregistrées par les agents
grimoire debugger plan Plan de débogage courant
grimoire debugger generate Générer les artefacts de débogage
grimoire debugger serve Servir la vue de débogage

L'alias court grimoire dbg existe pour debugger.

Confiance dans l'installation (trust_level)

grimoire self update ne laisse plus le gestionnaire (uv, pipx, pip) retélécharger « la dernière version » : il télécharge la wheel, la confronte à l'empreinte annoncée par PyPI et au SHA256SUMS de la release GitHub, puis installe ce fichier. Un écart, un fichier absent de la liste ou une liste injoignable refuse l'installation (« Nothing was installed »). Seule exception, affichée : une version antérieure à la première qui publie SHA256SUMS s'installe avec trust_level: pypi-only.

Sous uv tool, les --with et le --python de l'installation d'origine (lus dans uv-receipt.toml) sont rejoués ; une option qu'on ne sait pas rejouer (constraints, overrides, options, un --with par chemin, dépôt git ou index) refuse la mise à jour avec la commande manuelle correspondante. Une fois l'installation faite, le chemin de la wheel temporaire est retiré du reçu (uv-receipt.toml, ou pipx_metadata.json pour pipx) : uv tool upgrade / pipx upgrade continuent de fonctionner ensuite. Si ce reçu a une forme inconnue, il n'est pas touché et la commande qui refait une installation du registre est affichée.

Canaux, contrôle sans réseau et bundle hors ligne

Option de grimoire self update Effet
--channel stable (défaut) Plus haute version stable de PyPI. Ne choisit jamais une pré-version, même quand PyPI rend une pré-version comme info.version faute de stable.
--channel preview La plus haute entre la stable de PyPI et la pré-version publiée sur GitHub (une pré-version vX.Y.Z-rc1 n'est pas envoyée à PyPI, seulement à une release GitHub pre-release). Une pré-version ne s'installe que si le SHA256SUMS de sa release la liste : trust_level: release-only, jamais d'exception.
--check [--json] Rend up-to-date, update-available ou offline, sans rien télécharger ni installer. Code de sortie 0 dans ces trois cas, 1 si la vérification elle-même échoue.
--offline Aucune requête réseau, pas même la sonde de connectivité. Avec --check : statut offline. Sans --check : exige --from.
--from <dossier\|wheel> Installe un bundle hors ligne. Aucune requête, index fermé (--no-index / --offline), wheels seulement (--only-binary :all: / --no-build).

Un bundle est un dossier contenant la wheel de grimoire-kit, un SHA256SUMS et, si l'environnement n'a pas déjà les dépendances, leurs wheels. grimoire self bundle le construit (voir ci-dessous) ; à la main, pip download puis les empreintes de chaque wheel dans SHA256SUMS. Toute wheel du dossier doit figurer dans SHA256SUMS avec la bonne empreinte, sinon le bundle entier est refusé. Le gestionnaire n'est jamais pointé sur le dossier du bundle : self update copie la wheel du kit et les autres wheels du dossier (toutes listées, hachées après copie) dans un dossier temporaire et ne donne que celui-là à --find-links. Le reste du dossier (une page links.html, un sous-dossier, tout fichier qui n'est pas une wheel) est ignoré : pip suit les pages HTML d'un --find-links, et une wheel que SHA256SUMS ne liste pas ne peut pas entrer par là. Une pré-version dans un bundle exige --channel preview.

Limite écrite : le SHA256SUMS d'un bundle voyage avec ses fichiers, donc le niveau rendu est bundle, jamais verified : il garantit l'intégrité du bundle, pas son origine. Les dépendances sont copiées puis hachées comme la wheel du kit : rien n'est lu dans le dossier du bundle après la vérification. Hors ligne, gh attestation verify n'est pas rejoué.

Construire un bundle : grimoire self bundle <dossier>

À faire une fois, en ligne ; l'installation, elle, ne touche pas au réseau.

Option Effet
--version X.Y.Z Wheel de PyPI (défaut : la plus haute stable). Confrontée à l'empreinte de PyPI et au SHA256SUMS de la release, comme self update.
--from-release vX.Y.Z[-rc1] Wheel de la release GitHub (pré-versions comprises), confrontée au SHA256SUMS de cette release.
--wheel <chemin> Wheel locale (build du dépôt) : aucune source à vérifier, PROVENANCE.json le dit.
--with-deps Télécharge aussi les dépendances (pip download --only-binary=:all:, jamais une source à compiler).
--platform, --python-version, --implementation, --abi Cible de pip download pour un bundle destiné à une autre machine (exigent --with-deps).
--index-url, --find-links Miroir ou dossier de wheels pour les dépendances.
--python <interpréteur> Interpréteur dont le pip télécharge (grimoire installé par uv tool n'a pas de pip).
--skip-attestation Ne rejoue pas gh attestation verify ; consigné skipped.

Le dossier est créé (absent ou vide, jamais écrasé) avec : la wheel du kit, les wheels des dépendances, SHA256SUMS (tout le dossier, LF) et PROVENANCE.json (source, empreintes, niveau de vérification à la construction, état de l'attestation, cible). Avant d'être rendu, le bundle est relu par le lecteur de self update --from : s'il serait refusé, rien n'est écrit. Les étapes ci-dessus se rejouent à tout moment avec grimoire self update --from <dossier> --check, qui lit et vérifie sans installer.

Attestation : pour une wheel de PyPI ou de GitHub, gh attestation verify est rejoué à la construction. gh absent : l'attestation est marquée unverified (et la commande le répète). gh présent et vérification en échec : la construction est refusée. À l'installation le niveau reste bundle : la provenance est consignée, pas rejouée hors ligne.

Limites : les dépendances viennent d'un index sans empreinte publiée par le kit (leurs sommes attestent l'intégrité du dossier, pas l'origine). Les marqueurs d'environnement des dépendances (sys_platform...) sont évalués par pip sur la machine qui construit : pour une autre plateforme, --platform change le choix des fichiers mais une dépendance réservée à la plateforme cible peut manquer ; si l'installation échoue pour cette raison, construire sur la plateforme cible (ou fournir la dépendance via --find-links).

trust_level Sens
verified La wheel installée est celle de la release (PyPI et SHA256SUMS concordent, RECORD identique)
pypi-only Empreinte conforme à PyPI seul : la release ne publie pas de SHA256SUMS
release-only Pré-version GitHub : conforme au SHA256SUMS de sa release, seule source (PyPI n'a pas cette version)
bundle Bundle hors ligne : conforme au SHA256SUMS livré avec la wheel ; origine non confrontée à une source indépendante
intact Les fichiers installés correspondent à leur RECORD ; provenance non vérifiée
dev Installation éditable : rien à attester
unknown Pas de RECORD pour comparer
modified Au moins un fichier diffère de ce qui a été installé : doctor échoue, verify-install sort en 1

grimoire doctor affiche le niveau hors ligne ; grimoire verify-install --online va jusqu'à la comparaison avec la wheel publiée (pour une pré-version installée : celle de sa release GitHub). Les fichiers de chaque release (wheel, sdist, SBOM CycloneDX de la wheel seule, SHA256SUMS) portent aussi une attestation de provenance Sigstore : gh attestation verify <fichier> --repo Guilhem-Bonnet/Grimoire-kit.

Limites : les dépendances de grimoire-kit viennent de l'index sans empreinte publiée par le kit ; une somme et une attestation rendent la falsification plus coûteuse, pas impossible ; install.sh --legacy (clone de main) n'est pas couvert.