Le contrôle des preuves¶
Gardes du dépôt : grimoire gates repo¶
Dans un clone du kit, une seule commande lance les gardes que la CI exécute :
cliquet de taille, cohérence du CHANGELOG, prose émise, waivers de dépendances,
actions épinglées par SHA, tenets de CONTRIBUTING.md, audience et commandes
citées de la documentation, chiffres de vitrine sourcés. Le pre-commit
(hook repo-gates, au pre-push), le job lint de ci-sdk.yml et make gates
appellent la même commande. Une garde qui ne peut pas rendre son verdict (script
absent, délai dépassé) est « non évaluée » et fait échouer l'exécution.
| Commande | Description |
|---|---|
grimoire gates repo [--profile dev\|release] [--only <garde>] [--json] [--root .] |
Exécute les gardes ; code 1 si l'une échoue ou n'a pas été évaluée, code 2 hors d'un clone du kit |
Le profil dev (défaut) juge une branche : un commit feat/fix/perf exige
une entrée sous [Unreleased]. Le profil release juge le tag : [Unreleased]
vide, section la plus récente égale à version.txt.
Standard agentique gouverné¶
Le groupe grimoire standard pilote le standard agentique (profils, patterns gouvernés, preuves). Référence des patterns : Contrôles gouvernés.
| Commande | Description |
|---|---|
grimoire standard profiles |
Lister les profils (starter → production) |
grimoire standard needs |
Lister les besoins projet (groupés par tier) |
grimoire standard plan --needs <id> |
Prévisualiser le plan (profil + patterns + extras) sans rien écrire |
grimoire standard init [.] --needs <id> |
Générer les artefacts standard du projet |
grimoire standard verify |
Vérifier les artefacts (fail-closed) |
grimoire standard audit |
Rapport de conformité + gaps restants |
grimoire standard score |
Calculer et persister un score de conformité ; rapporte à part rules_enforced (règles de pack vérifiées), rules_advisory, rules_failing, rules_unevaluated et rules_unclassified |
grimoire standard gate check [--strict] [--no-run] |
Gate CI : échoue si une preuve obligatoire manque ; chaque manque nomme son chemin et un remède copiable. --strict exécute lui-même gate run-tests si la tâche doit une preuve d'exécution et qu'aucun run vert et frais n'existe ; --no-run restaure l'ancien comportement |
grimoire standard gate run-tests |
Exécuter la commande de test connue et enregistrer le verdict (test-run.json) |
grimoire standard task scaffold [--task-id X] [--dry-run] |
Créer, s'ils manquent seulement, les artefacts par tâche que les gates exigent (enveloppe, pack de preuve, registre d'affirmations, dossier d'acceptance, context bundle, decision trace), pré-remplis depuis le Mission Ledger ; idempotent ; le hook SessionStart le fait déjà pour la tâche active |
grimoire standard fix [--apply] |
Planifier / appliquer des correctifs sûrs |
grimoire standard doctor |
Vérifier la disponibilité des extras technologiques |
grimoire standard pattern |
Lister / inspecter les patterns |
grimoire standard detect-providers |
Détecter les providers LLM disponibles |
grimoire standard traceability [projet] |
Matrice exigences / contrôles / preuves de la norme ; avec un projet, le verdict de verify par artefact |
grimoire standard upstream |
Le standard amont a-t-il avancé depuis la révision épinglée (sortie 0/2/3) |
Sous-groupes (chacun avec --help) : board, memory, context, decision, rules, hooks, gate, events, pattern, knowledge, task.
Preuves d'une plage git : grimoire evidence resolve¶
Juge chaque preuve écrite dans une plage de commits contre les objets git de la
tête de plage, jamais contre l'arbre de travail. Les preuves d'une plage sont les
jetons de la cellule Preuve (chemin:ligne, chemin#L12-L20, @sha256:,
test-run.json#<run_id>, mem:, URL, texte libre) des lignes de
claim-ledger.md qu'un commit de la plage a écrites ou modifiées (git blame).
Le journal chaîné evidence-log.jsonl n'en fait pas partie : il est local et
ignoré par git.
| Commande | Description |
|---|---|
grimoire evidence resolve <base>..<head> [--project-root .] |
Un statut par preuve ; code 1 dès qu'une preuve n'est pas resolved, code 2 sur une plage illisible ou hors d'un dépôt git |
grimoire evidence resolve <commit> |
Les preuves écrites par ce seul commit |
grimoire -o json evidence resolve <plage> |
Même verdict en JSON : anchor (base, tête, commits, tête publiée), summary, une entrée par preuve avec claim_commit, status, reason, fingerprint |
| Statut | Sens |
|---|---|
resolved |
La cible existe à la tête et correspond : lignes citées identiques à celles du commit qui a écrit l'affirmation, empreinte épinglée égale, run enregistré vert et inchangé |
stale |
La cible existe à la tête mais ne correspond plus (lignes modifiées depuis l'affirmation, empreinte différente, run remplacé ou rouge) |
missing |
La cible n'existe pas à la tête (fichier non commité, ligne hors du fichier, nœud de test absent, chemin hors du projet, affirmation « prouvé » sans preuve) |
unknown |
Rien dans git ne permet de trancher : mémoire, URL, texte libre, fichier absent au commit de l'affirmation, test-run.json illisible ou sans empreinte |
Seul resolved compte : un statut inconnu n'est jamais rendu comme résolu. Une
plage sans preuve rend empty (code 0) et le dit : rien n'est prouvé, rien
n'est réfuté. head_published dit si la tête est contenue dans une branche
distante ; une tête locale peut encore être réécrite.
Journal de preuve rompu : grimoire evidence chain explain¶
Le journal evidence-log.jsonl est chaîné (chaque ligne porte le prev de la précédente). standard verify distingue deux cas :
- Ligne sans
previntercalée, la chaîne continue autour (evidence.chain_broken, message « sansprevintercalée(s) ») : ce qu'écrit le hook d'une version antérieure du kit pendant unpip install -U. La ligne suivante prolonge la ligne non chaînée. - Toute autre rupture (ligne chaînée modifiée ou supprimée, lignes manquantes en fin de journal, ancre qui ne suit plus, ligne non chaînée en queue) : ambiguë, donc rupture. Elle ne s'explique pas.
Seul le premier cas s'explique, jamais en réécrivant ni en rechaînant le journal. L'humain tape, comme message entier :
La phrase n'est reçue que d'un tour humain d'un hôte nommé (hors GRIMOIRE_UNATTENDED=1), comme Override Gate ; aucune tâche tenue n'est exigée, la rupture du repli bootstrap s'explique aussi. Le CLI ne peut pas attester une origine humaine (un agent le lance par Bash) : grimoire evidence chain explain --task-id <id> --line <n> [--reason "<texte>"] n'écrit rien, il diagnostique la ligne (code 1 si elle n'est pas explicable) et imprime la phrase à taper.
L'acquittement va dans _grimoire-output/.runs/evidence/<tâche>/evidence-chain-acks.authority.jsonl, protégé par la garde d'autorité (Write, Edit et Bash qui l'écrivent sont refusés). Il porte la raison, l'auteur (utilisateur, hôte, session), la date et l'empreinte de la ligne et de ses deux voisines : une autre rupture, ou une voisine modifiée, n'est pas couverte. Effet : evidence.chain_broken (erreur) devient evidence.chain_break_explained (avertissement qui cite raison, auteur et date) dans standard verify, gate check et le gate Stop. La rupture reste listée. L'ancre, figée à la première ligne non chaînée, est dite par evidence.chain_anchor_frozen.
Limite : un agent qui exécute du code arbitraire peut écrire ce fichier par une voie que la garde de chemin ne prévoit pas ; l'acquittement rend l'explication visible, pas infalsifiable. Il ne dit pas que la ligne est innocente.
Hooks git¶
| Commande | Description |
|---|---|
grimoire hooks list |
Lister les hooks disponibles et leur état d'installation |
grimoire hooks status |
Résumer l'état d'installation — sortie 1 si incomplet |
grimoire hooks install |
Installer les hooks git Grimoire dans le dépôt |