make verifier inclut les preuves (make prouver --verifier) #3
4 changed files with 32 additions and 9 deletions
|
|
@ -3,6 +3,14 @@
|
|||
## 2026-07-20
|
||||
|
||||
### Modifié
|
||||
- **`make verifier` inclut désormais les preuves (`make prouver`).** `make verifier` se
|
||||
termine par `python3 scripts/prouver.py --verifier` : nouveau mode qui exécute toutes les
|
||||
preuves du registre (verdict + code de sortie) **sans écrire de rapport**, pour ne pas
|
||||
écraser la pièce justificative committée `docs/audit/preuve-<date>.md`. `make verifier`
|
||||
échoue donc si une preuve échoue. `make prouver` seul (sans `--verifier`) continue d'écrire
|
||||
le rapport horodaté. Vérifié : `make verifier` → CONFORME 16/16 (voûte exportée), aucun
|
||||
churn du rapport committé ; `make prouver` écrit toujours. Doc mise à jour
|
||||
(`docs/audit/README.md` § « Rapport avec `make verifier` »).
|
||||
- **Conformité Phase 2 — 3 incohérences internes corrigées (documentation d'autorité).**
|
||||
Aucun code Ansible touché ; le code SSH était déjà conforme à `AGENTS.md`.
|
||||
- **`CLAUDE.md` réduit à un pointeur mince** : autorité unique d'`AGENTS.md` + les cinq
|
||||
|
|
|
|||
2
Makefile
2
Makefile
|
|
@ -212,9 +212,11 @@ test:
|
|||
|
||||
.PHONY: verifier
|
||||
verifier: lint test inventaire-verifier site-verifier flux-verifier syntaxe
|
||||
python3 scripts/prouver.py --verifier
|
||||
|
||||
# Harnais de preuve : rejoue les preuves automatisables du registre et ecrit
|
||||
# docs/audit/preuve-<date>.md (piece justificative horodatee, rejouable).
|
||||
# `make verifier` l'appelle en mode --verifier (preuves seules, aucun rapport ecrit).
|
||||
.PHONY: prouver
|
||||
prouver: ansible-runtime _instance-requise
|
||||
python3 scripts/prouver.py
|
||||
|
|
|
|||
|
|
@ -69,7 +69,13 @@ et liste à part les **déclarations d'intention** (⚪ invérifiables localemen
|
|||
|
||||
## Rapport avec `make verifier`
|
||||
|
||||
`make verifier` est la **porte de validation** au fil de l'eau (lint, tests, cohérence,
|
||||
syntaxe) et s'arrête au premier échec. `make prouver` est complémentaire : il **exécute
|
||||
tout** (sans s'arrêter au premier échec), **horodate** et **relie** chaque résultat aux
|
||||
affirmations — pour produire une pièce présentable. Les deux réutilisent le même outillage.
|
||||
`make verifier` **inclut désormais les preuves** : il enchaîne ses vérifications au fil de
|
||||
l'eau (lint, tests, cohérence, syntaxe — arrêt au premier échec) puis termine par
|
||||
`python3 scripts/prouver.py --verifier` — les preuves du registre **sans écrire de rapport**
|
||||
(pour ne pas écraser la pièce justificative committée). Ainsi, `make verifier` échoue si une
|
||||
preuve échoue.
|
||||
|
||||
`make prouver` (sans `--verifier`) reste le mode **pièce justificative** : il exécute tout,
|
||||
**horodate** et **écrit** `docs/audit/preuve-<date>.md`. Les deux réutilisent le même
|
||||
outillage. (Quelques vérifications se recouvrent entre les deux étapes — coût assumé : la
|
||||
sortie détaillée de `verifier` est conservée, et `prouver` ajoute les preuves manquantes.)
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ requise absente — ne sont pas des echecs) ; 1 sinon.
|
|||
|
||||
Usage :
|
||||
python3 scripts/prouver.py # execute + ecrit docs/audit/preuve-<date>.md
|
||||
python3 scripts/prouver.py --verifier # preuves seules (verdict + code sortie), sans rapport
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
|
@ -275,7 +276,11 @@ def _executer(preuve: dict) -> tuple[str, str]:
|
|||
return "OK", dernier
|
||||
|
||||
|
||||
def main() -> int:
|
||||
def main(argv: list[str] | None = None) -> int:
|
||||
argv = sys.argv[1:] if argv is None else argv
|
||||
# --verifier : execute les preuves (verdict + code de sortie) sans ecrire de rapport,
|
||||
# pour un appel depuis `make verifier` (evite d'ecraser la piece justificative committee).
|
||||
ecrire_rapport = "--verifier" not in argv
|
||||
date = _dt.date.today().isoformat()
|
||||
resultats: list[tuple[dict, str, str]] = []
|
||||
|
||||
|
|
@ -300,6 +305,11 @@ def main() -> int:
|
|||
n_echec = sum(1 for _, s, _ in resultats if s == "ECHEC")
|
||||
n_saute = sum(1 for _, s, _ in resultats if s == "SAUTE")
|
||||
conforme = n_echec == 0
|
||||
print(f"{'CONFORME' if conforme else 'NON CONFORME'} : "
|
||||
f"{n_ok} OK, {n_echec} echec, {n_saute} saute.")
|
||||
if not ecrire_rapport:
|
||||
return 0 if conforme else 1
|
||||
|
||||
icone = {"OK": "✅", "ECHEC": "❌", "SAUTE": "⚪"}
|
||||
|
||||
lignes = [
|
||||
|
|
@ -353,12 +363,9 @@ def main() -> int:
|
|||
DOSSIER_AUDIT.mkdir(parents=True, exist_ok=True)
|
||||
rapport = DOSSIER_AUDIT / f"preuve-{date}.md"
|
||||
rapport.write_text("\n".join(lignes), encoding="utf-8")
|
||||
|
||||
print(f"{'CONFORME' if conforme else 'NON CONFORME'} : "
|
||||
f"{n_ok} OK, {n_echec} echec, {n_saute} saute.")
|
||||
print(f"Rapport : {rapport.relative_to(RACINE)}")
|
||||
return 0 if conforme else 1
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
raise SystemExit(main(sys.argv[1:]))
|
||||
|
|
|
|||
Loading…
Reference in a new issue