schema : le marqueur du champ requis, et l entree de CHANGELOG qui manquait
Some checks are pending
verifier / verifier (push) Waiting to run

Deux dettes des commits 0eaceb1 et 03c628d.

La premiere se voyait a l ecran : le marqueur « requis » se collait au
libelle et se lisait « Base requis », « Secret (Vault) requis ». Il
devient une asterisque discrete portant l infobulle « Champ requis ».

La seconde est une entorse a la regle 5 : les deux commits precedents
ont livre le schema derive et le premier formulaire genere SANS entree
de CHANGELOG. Elle est ecrite ici, avec sa limite dite franchement — un
registre sur six est genere, et le trou de la nomenclature reste ouvert.

make prouver : CONFORME, 60 OK, 0 echec, 1 saute.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
This commit is contained in:
Daniel Allaire 2026-09-08 16:34:25 -04:00
parent 03c628d5e1
commit 34b7ec3886
2 changed files with 49 additions and 1 deletions

View file

@ -1,5 +1,50 @@
# CHANGELOG — Set-OPS
## 2026-09-08 — La forme des registres cesse d'etre recopiee : elle est derivee
**61 preuves (P01-P61, dont une conditionnelle). `make prouver` : CONFORME, 60 OK, 0 echec,
1 saute.**
### Le probleme
La forme du plan etait ecrite TROIS FOIS : dans les constantes du moteur (`ETATS_SERVEUR`,
`PORTEES_BD`, `AUTORITES_DNS`), dans les formulaires du GUI, et dans la documentation. Rien
ne les tenait ensemble. Ajouter une portee de base de donnees demandait trois gestes, et le
troisieme s'oubliait sans qu'aucun controle ne s'en apercoive.
### Ce qui change
`scripts/schema_plan.py` (nouveau) derive un JSON Schema des SIX registres du plan
— `serveurs`, `applications`, `bases_donnees`, `serveurs_bd`, `domaines_publics`,
`nomenclature` — en IMPORTANT les enumerations du moteur plutot qu'en les recopiant. Le
resultat est versionne dans `docs/audit/schema-plan.json` : 42 champs, regenerable par
`make schema`. Il est versionne, et non recalcule a chaud, pour qu'une divergence se voie
dans un diff.
Le schema porte ce que JSON Schema seul ne dit pas : `x-source-valeurs` (liste fermee
alimentee a l'execution depuis l'inventaire), `x-source-selon` (liste dependant d'un autre
champ), `x-clef` (l'attribut qui identifie l'entite), `x-requis`.
**Le formulaire des bases de donnees du GUI n'est plus ecrit a la main.** Il est construit
au chargement depuis le schema servi par `/api/inventaire`. Le chemin de SAUVEGARDE aussi
derive du schema : les champs ecrits sont ceux que le schema declare, avec ses valeurs par
defaut — plus une liste de champs recopiee dans le JS.
`P61` garde l'ensemble : le schema doit couvrir tout ce que les plans REELS contiennent.
Son controle negatif : retirer un champ du schema le fait echouer.
### La limite, dite franchement
**UN registre sur six est genere.** Les cinq autres formulaires restent ecrits a la main.
Et le trou connu reste ouvert : `couverture_gui.py verifier` echoue toujours sur
`nomenclature.categorie` et `nomenclature.service` — deux champs presents dans les plans
reels que le GUI ne sait pas ecrire. Le schema les DECRIT deja ; c'est le passage de la vue
nomenclature au generateur qui fermera le trou, par construction.
Enfin : le formulaire genere a ete eprouve en rendant son HTML avec la vraie reponse de
l'API, pas dans un navigateur.
## 2026-09-06 — Tournee des 74 documents : ce que le depot disait de lui-meme avait vieilli
**57 preuves (P01-P57, dont une conditionnelle). `make prouver` : CONFORME, 56 OK, 0 echec,

View file

@ -2037,7 +2037,10 @@ HTML = r"""<!doctype html>
function champDepuisSchema(cle, spec, valeur, entite, surChangement) {
const titre = echapper(spec.title || cle);
const aide = spec.description ? ` title="${echapper(spec.description)}"` : '';
const req = (spec['x-requis'] ? ' <span class="dsn">requis</span>' : '');
// Marqueur discret : le schema SAIT ce qui est requis, le formulaire ecrit a la
// main ne le montrait pas. Une asterisque plutot que le mot « requis », qui se
// collait au libelle et se lisait « Base requis ».
const req = (spec['x-requis'] ? '<abbr class="dsn" title="Champ requis" style="text-decoration:none"> *</abbr>' : '');
const appel = (expr) => `${surChangement}('${cle}', ${expr})`;
// Liste fermee : soit fixe (enum), soit alimentee a l'execution, soit dependante