Compare commits
No commits in common. "abb0a85d089c7a18693e9700a9a6315cba07a3e4" and "6c4eb6c39037bbd1d51f70fff924ff61c93c7aa6" have entirely different histories.
abb0a85d08
...
6c4eb6c390
4 changed files with 9 additions and 32 deletions
|
|
@ -3,14 +3,6 @@
|
||||||
## 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,11 +212,9 @@ 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,13 +69,7 @@ et liste à part les **déclarations d'intention** (⚪ invérifiables localemen
|
||||||
|
|
||||||
## Rapport avec `make verifier`
|
## Rapport avec `make verifier`
|
||||||
|
|
||||||
`make verifier` **inclut désormais les preuves** : il enchaîne ses vérifications au fil de
|
`make verifier` est la **porte de validation** au fil de l'eau (lint, tests, cohérence,
|
||||||
l'eau (lint, tests, cohérence, syntaxe — arrêt au premier échec) puis termine par
|
syntaxe) et s'arrête au premier échec. `make prouver` est complémentaire : il **exécute
|
||||||
`python3 scripts/prouver.py --verifier` — les preuves du registre **sans écrire de rapport**
|
tout** (sans s'arrêter au premier échec), **horodate** et **relie** chaque résultat aux
|
||||||
(pour ne pas écraser la pièce justificative committée). Ainsi, `make verifier` échoue si une
|
affirmations — pour produire une pièce présentable. Les deux réutilisent le même outillage.
|
||||||
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,7 +15,6 @@ 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
|
||||||
|
|
@ -276,11 +275,7 @@ def _executer(preuve: dict) -> tuple[str, str]:
|
||||||
return "OK", dernier
|
return "OK", dernier
|
||||||
|
|
||||||
|
|
||||||
def main(argv: list[str] | None = None) -> int:
|
def main() -> 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]] = []
|
||||||
|
|
||||||
|
|
@ -305,11 +300,6 @@ def main(argv: list[str] | None = None) -> 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 = [
|
||||||
|
|
@ -363,9 +353,12 @@ def main(argv: list[str] | None = None) -> 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(sys.argv[1:]))
|
raise SystemExit(main())
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue