Merge pull request 'make verifier inclut les preuves (make prouver --verifier)' (#3) from prouver-dans-verifier into main
Reviewed-on: #3
This commit is contained in:
commit
abb0a85d08
4 changed files with 32 additions and 9 deletions
|
|
@ -3,6 +3,14 @@
|
||||||
## 2026-07-20
|
## 2026-07-20
|
||||||
|
|
||||||
### Modifié
|
### 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é).**
|
- **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`.
|
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
|
- **`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
|
.PHONY: verifier
|
||||||
verifier: lint test inventaire-verifier site-verifier flux-verifier syntaxe
|
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
|
# Harnais de preuve : rejoue les preuves automatisables du registre et ecrit
|
||||||
# docs/audit/preuve-<date>.md (piece justificative horodatee, rejouable).
|
# docs/audit/preuve-<date>.md (piece justificative horodatee, rejouable).
|
||||||
|
# `make verifier` l'appelle en mode --verifier (preuves seules, aucun rapport ecrit).
|
||||||
.PHONY: prouver
|
.PHONY: prouver
|
||||||
prouver: ansible-runtime _instance-requise
|
prouver: ansible-runtime _instance-requise
|
||||||
python3 scripts/prouver.py
|
python3 scripts/prouver.py
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,13 @@ et liste à part les **déclarations d'intention** (⚪ invérifiables localemen
|
||||||
|
|
||||||
## Rapport avec `make verifier`
|
## Rapport avec `make verifier`
|
||||||
|
|
||||||
`make verifier` est la **porte de validation** au fil de l'eau (lint, tests, cohérence,
|
`make verifier` **inclut désormais les preuves** : il enchaîne ses vérifications au fil de
|
||||||
syntaxe) et s'arrête au premier échec. `make prouver` est complémentaire : il **exécute
|
l'eau (lint, tests, cohérence, syntaxe — arrêt au premier échec) puis termine par
|
||||||
tout** (sans s'arrêter au premier échec), **horodate** et **relie** chaque résultat aux
|
`python3 scripts/prouver.py --verifier` — les preuves du registre **sans écrire de rapport**
|
||||||
affirmations — pour produire une pièce présentable. Les deux réutilisent le même outillage.
|
(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 :
|
Usage :
|
||||||
python3 scripts/prouver.py # execute + ecrit docs/audit/preuve-<date>.md
|
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
|
from __future__ import annotations
|
||||||
|
|
@ -275,7 +276,11 @@ def _executer(preuve: dict) -> tuple[str, str]:
|
||||||
return "OK", dernier
|
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()
|
date = _dt.date.today().isoformat()
|
||||||
resultats: list[tuple[dict, str, str]] = []
|
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_echec = sum(1 for _, s, _ in resultats if s == "ECHEC")
|
||||||
n_saute = sum(1 for _, s, _ in resultats if s == "SAUTE")
|
n_saute = sum(1 for _, s, _ in resultats if s == "SAUTE")
|
||||||
conforme = n_echec == 0
|
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": "⚪"}
|
icone = {"OK": "✅", "ECHEC": "❌", "SAUTE": "⚪"}
|
||||||
|
|
||||||
lignes = [
|
lignes = [
|
||||||
|
|
@ -353,12 +363,9 @@ def main() -> int:
|
||||||
DOSSIER_AUDIT.mkdir(parents=True, exist_ok=True)
|
DOSSIER_AUDIT.mkdir(parents=True, exist_ok=True)
|
||||||
rapport = DOSSIER_AUDIT / f"preuve-{date}.md"
|
rapport = DOSSIER_AUDIT / f"preuve-{date}.md"
|
||||||
rapport.write_text("\n".join(lignes), encoding="utf-8")
|
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)}")
|
print(f"Rapport : {rapport.relative_to(RACINE)}")
|
||||||
return 0 if conforme else 1
|
return 0 if conforme else 1
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
raise SystemExit(main())
|
raise SystemExit(main(sys.argv[1:]))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue