gardes du contrat / conformite (pull_request) Failing after 18s
Une exception de domaine est une règle qui a un nom, un throw, presque toujours une épreuve, et souvent aucune déclaration. Si le réglage le demande (gardes_nommees, adr), le journal rend les candidats qu'aucun parcours ne cite, avec leur strate et ce qui les cite. Rien ne devient un constat, aucun état ne change de sens, la section n'existe pas sans les clés : additif, ignorable. Ce qu'un dessin de trois lecteurs (Java annoté, SQL, réconciliation) voulait démontrer, abattu par l'objecteur mandaté, ces quarante lignes le démontrent : huit exceptions de domaine chez openathle, zéro déclarée. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
99 lines
5.1 KiB
Markdown
99 lines
5.1 KiB
Markdown
# L'instrument — où chaque garde vit réellement
|
||
|
||
Chaque garde vit à son étage ; l'instrument regarde où elle est réellement
|
||
posée. Il court **dans la CI de la juridiction observée** — la juridiction se
|
||
mesure elle-même ; le registre publie l'instrument et reçoit les constats
|
||
(`temoin/ADR-018`, `prismagram-corpus/ADR-061` §2.6 et §2.8).
|
||
|
||
## Ce qu'il constate
|
||
|
||
Pour chaque invariant que la juridiction déclare dans le front-matter de ses
|
||
parcours (`invariants:`), l'instrument cherche chaque fichier qui le **nomme**
|
||
et rend un état :
|
||
|
||
| État | Sens |
|
||
|---|---|
|
||
| `domicilie` | nommé par une épreuve à son étage dû, nulle part au-dessus |
|
||
| `renforce` | nommé par des épreuves à son étage dû **et** au-dessus — défense en profondeur, signalée positivement, jamais blâmée |
|
||
| `mal_domicilie` | nommé par des épreuves **uniquement hors** de son étage dû — le seul écart |
|
||
| `aucun_locus` | nommé par aucune épreuve |
|
||
|
||
L'instrument constate la **nomination**, pas l'exécution : c'est la CI de la
|
||
juridiction qui fait passer ses épreuves ; l'instrument dit seulement où elles
|
||
habitent. Un même identifiant déclaré avec deux énoncés différents est une
|
||
homonymie : elle est portée dans le constat, jamais résolue ici.
|
||
|
||
## Le réglage — il appartient à la juridiction
|
||
|
||
L'instrument ne connaît aucun chemin d'aucun projet : toute convention vit
|
||
dans un fichier de réglage que la juridiction tient dans son dépôt, et que
|
||
chaque constat épingle par son empreinte. Voir
|
||
[`selftest/fixture/reglage.yaml`](selftest/fixture/reglage.yaml) pour la forme
|
||
complète : `juridiction`, `cadence_heures`, `parcours`, `strates` (la première
|
||
— ou celle marquée `due: true` — est l'étage dû), `epreuves`, `sortie`,
|
||
`journal_execution`.
|
||
|
||
## La correspondance vers une échelle tierce (`rang`, optionnel)
|
||
|
||
Une juridiction peut faire correspondre chacune de ses strates à une échelle
|
||
tierce (p. ex. les rangs 1–5 de Percursus) en déclarant `rang: N` sur la
|
||
strate, dans son réglage. L'instrument émet alors `rangs_constates` dans
|
||
chaque constat — **seulement si toutes les strates constatées portent un
|
||
rang** : une correspondance partielle laisserait deviner, et deviner n'est
|
||
pas constater — et publie la table complète (`correspondance_rangs`) dans le
|
||
journal d'exécution, pour joindre les constats anciens, qui ne se réécrivent
|
||
jamais. La grossièreté se dit dans le réglage (en commentaire) : un rang
|
||
absent de la correspondance est un rang que la juridiction ne sait pas
|
||
instrumenter, pas un rang qui va de soi.
|
||
|
||
## Les gardes nommées — des candidats, jamais des constats (optionnel)
|
||
|
||
Une exception de domaine est une règle qui a un nom, un `throw`, presque
|
||
toujours une épreuve — et souvent aucune déclaration. Si le réglage porte
|
||
`gardes_nommees` (motifs de fichiers) et `adr` (où chercher les citations),
|
||
le journal d'exécution rend `gardes_nommees: { total, sans_declaration,
|
||
candidats }` — seuls ceux qu'aucun parcours ne cite sont listés, avec leur
|
||
strate et ce qui les cite (ADR, épreuve). L'instrument **mesure une existence,
|
||
il ne déclare rien** : déclarer un candidat (un invariant dans le parcours qui
|
||
le porte) ou décider que non reste à la juridiction. Rien ne devient un
|
||
constat, aucun état ne change de sens ; sans les clés, la section n'existe pas.
|
||
|
||
Pourquoi si peu : c'est le plus petit instrument qui prouve que le code tient
|
||
des règles que nul n'a déclarées. Mesuré chez openathle le jour de son
|
||
écriture — huit exceptions de domaine, zéro citée par un parcours.
|
||
|
||
## Ce qu'il écrit — chez la juridiction, jamais ailleurs
|
||
|
||
- **`sortie`** : les constats, en **ajout seul**, et **seulement quand l'état
|
||
change** — un constat inchangé ne produit aucun événement. Chaque constat
|
||
porte ses pièces (chemin, ligne, strate), sa révision, l'empreinte du
|
||
réglage : il est recalculable par quiconque clone le dépôt.
|
||
- **`journal_execution`** : réécrit à **chaque** exécution — le témoin de
|
||
fraîcheur. Un journal plus vieux que la cadence déclarée est un écart que le
|
||
lecteur du dépôt constate ; jamais un silence.
|
||
|
||
## Exécution
|
||
|
||
```sh
|
||
node instrument/run.mjs --config docs/parcours/_meta/strates.yaml
|
||
# --repo DIR : racine du dépôt mesuré (défaut : répertoire courant)
|
||
# --dry-run : affiche les constats sans rien écrire
|
||
```
|
||
|
||
Sort en erreur **uniquement** sur prérequis cassé (réglage absent ou
|
||
illisible, aucun parcours, aucun invariant) — jamais sur un écart constaté :
|
||
l'écart est le produit, pas une panne. `npm run instrument:selftest` joue
|
||
l'auto-épreuve sur une juridiction d'essai jetable.
|
||
|
||
## Limites dites (v0)
|
||
|
||
- Seuls les invariants déclarés dans les parcours sont mesurés ; un invariant
|
||
qui ne vit que dans une ADR n'est pas encore vu.
|
||
- La citation est textuelle (mot entier) ; une épreuve qui vérifie sans nommer
|
||
n'est pas constatée — nommer ses invariants dans ses épreuves est le geste
|
||
que l'instrument récompense.
|
||
- Une citation est attribuée à l'identifiant que les parcours déclarent ; si
|
||
une ADR déclare un homonyme, l'attribution peut se tromper. Unifier son
|
||
espace de noms d'invariants est un geste de la juridiction, en amont de
|
||
toute mesure.
|