| name | checkpoint |
| description | Gate qualité post-modification : typecheck + lint + tests + doc-update + security-scan. Rapport dans 07_Hermes/checkpoint-reports/. Déclenchable à la demande, par task-runner (delegate_task) ou par cron daily. |
| version | 1.0.0 |
| platforms | ["linux","macos"] |
| metadata | {"hermes":{"tags":["checkpoint","quality","ci","lint","tests","security"],"related_skills":["task-runner","pipeline","vault-memory"],"model":"deepseek-v4-full","cron":"0 18 * * *"}} |
checkpoint
Adaptation de 2b3 (08) — ULK → Hermes. Carte :
docs/backlog/2026-06-28-SPEC-HERMES-CHECKPOINT/CARD.md (P0, GitHub #273). Gap historique #2.
Gate qualité après toute modification notable : typecheck → lint → tests → doc-update → security-scan, rapport dans le vault. Skill terminale (leaf) : invoquée par d'autres
(task-runner, pipeline) via delegate_task, ou par cron pour un checkpoint daily.
Runtime & modèles
- DeepSeek V4 full : lance les checks (bash), agrège les résultats, rédige le rapport.
- Ne code pas : checkpoint détecte les problèmes, il ne les corrige pas. La correction
est une responsabilité séparée (task-runner /
fix-errors, qui délèguent le coding à
Mistral 3.5 via vibe). Donc pas de délégation vibe ici.
- Ne commit pas : responsabilité séparée (skill
git-commit future / pipeline).
Config per-project (obligatoire)
07_Hermes/checkpoint-config.md — un check par item de liste, forme
"check|<nom>|<commande>" (format lu tel quel par checkpoint.sh) :
project: <slug>
checks:
- "check|typecheck|swift build"
- "check|lint|swiftlint"
- "check|tests|swift test"
- "check|security|trufflehog filesystem . --no-update"
skip: [security]
⚠️ Le parseur s'ancre sur le préfixe - "check| : une map YAML
(typecheck: "…") n'est pas reconnue et produirait 0 check exécuté.
Procédure
- Health check vault : refuse d'écrire si
07_Hermes/ n'est pas initialisé.
- Exécute les 5 checks en séquence, résilient (un fail n'arrête pas les suivants).
- Rapport par check :
status pass|fail, output tronqué, durée.
- Écrit
07_Hermes/checkpoint-reports/YYYY-MM-DD-HH.md — frontmatter status, checks[],
duration (lisible par Obsidian Bases).
- Mode
--fast : typecheck + lint seulement (< 30 s sur les projets Swift courants).
Implémentation (v1 runnable)
Cœur déterministe livré : checkpoint.sh (à côté de ce SKILL.md). Lit les checks
depuis 07_Hermes/checkpoint-config.md (entrées "check|<nom>|<cmd>"), les exécute en
séquence résiliente, écrit le rapport dans 07_Hermes/checkpoint-reports/<stamp>.md.
Options : --fast (typecheck+lint), --stamp <ts> (horodatage déterministe).
checkpoint.sh "$HERMES_VAULT" --fast
Testé hors-LLM/hors-réseau via hermes/tests/checkpoint.test.sh (fixture hermes/test-vault/,
4 cas : all-pass, fail résilient, --fast, health check). L'interprétation des échecs et la MAJ
doc restent au modèle (DeepSeek V4 full).
Critères d'acceptation
Pièges
- checkpoint NE commit pas et NE corrige pas — séparation des responsabilités.
- Chemins de commandes variables (Swift vs TypeScript) → config per-project obligatoire.
trufflehog peut être long → en dernier, skippable via skip:.
- Ne pas écrire dans
07_Hermes/ si le vault n'est pas initialisé (check de santé au démarrage).