preuve : P31 ignorait les scripts invoques par un role ou un playbook

En ajoutant la verification de signature, P31 a declare
`verifier_signature.py` « injoignable » — alors qu'il tourne a chaque
deploiement de Keycloak. Elle ne regardait que le Makefile et les autres
scripts, jamais les roles ni les playbooks.

Une preuve qui ignore un chemin d'appel reel accuse du code sain, et on
apprend a passer outre : le pire sort possible pour une garde.

ET J'AI POUSSE AVEC CETTE PREUVE EN ECHEC. Troisieme fois de la session, et
toujours la meme faute : `prouver.py | tail -1` rend le code de sortie de
`tail`, donc le `&&` qui suit continue quoi qu'il arrive. Le commit precedent
(verification de signature Keycloak) est parti avec 34 OK / 1 echec. Corrige
ici, et la lecon vaut plus que le correctif : ne jamais lire le verdict d'une
garde a travers un tube.

Verifie : prouver.py 35 OK, code de sortie lu SANS tube.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Daniel Allaire 2026-08-11 00:52:21 -04:00
parent dea7769ff3
commit 9e4101723b

View file

@ -581,6 +581,18 @@ def preuve_documentation_outillage() -> tuple[bool, str]:
manques.append(f"{len(muets)} script(s) sans docstring explicative : " manques.append(f"{len(muets)} script(s) sans docstring explicative : "
+ ", ".join(muets[:6]) + ("" if len(muets) > 6 else "")) + ", ".join(muets[:6]) + ("" if len(muets) > 6 else ""))
# Un script peut aussi etre invoque par un ROLE ou un PLAYBOOK — `serveur_keycloak`
# appelle `verifier_signature.py` pour controler la signature de son archive. Ne
# regarder que le Makefile et les autres scripts declarait ce script « injoignable »
# alors qu'il tourne a chaque deploiement. Trouve le 2026-08-10, en ajoutant
# justement cette verification : une preuve qui ignore un chemin d'appel reel accuse
# du code sain, et on apprend a passer outre — le pire sort pour une garde.
ansible_yaml = "\n".join(
f.read_text(encoding="utf-8", errors="ignore")
for dossier in ("roles", "playbooks")
for f in (RACINE / dossier).rglob("*.yml")
)
injoignables = [] injoignables = []
for f in scripts: for f in scripts:
autres = "\n".join(v for k, v in textes.items() if k != f.name) autres = "\n".join(v for k, v in textes.items() if k != f.name)
@ -589,6 +601,8 @@ def preuve_documentation_outillage() -> tuple[bool, str]:
continue continue
if module in autres: # importe ou appele par un autre outil if module in autres: # importe ou appele par un autre outil
continue continue
if f.name in ansible_yaml: # invoque par un role ou un playbook
continue
injoignables.append(f.name) injoignables.append(f.name)
if injoignables: if injoignables:
manques.append(f"{len(injoignables)} script(s) qu'aucune cible ni aucun outil " manques.append(f"{len(injoignables)} script(s) qu'aucune cible ni aucun outil "