Files
published-language/instrument/README.md
T
temoin-agentandClaude Fable 5.1 654042d0fa
gardes du contrat / conformite (pull_request) Successful in 17s
Gardes nommées, reprise de revue : « nommée » jamais « déclarée », exclusions, registre du refus
Les trois corrections retenues de la revue extérieure d'openathle#275 —
que j'avais amendées sur la branche d'une PR déjà fusionnée, donc jamais
livrées : les champs disent ce qu'ils mesurent (nommee_par_parcours,
_par_adr, _par_epreuve — un parcours peut porter la règle en prose sans
nommer la classe) ; une absence n'est pas une règle (gardes_exclues, par
motif — exclue = non observée) ; décider que non a un réceptacle
(gardes_ecartees, registre de la juridiction, lu jamais écrit). Le
journal porte ses motifs : la limite est dite là où la mesure s'écrit.
La triade est mesurée : sans_epreuve.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 21:13:02 +02:00

112 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 et un `throw` — et souvent
ni épreuve ni déclaration. Si le réglage porte `gardes_nommees` (motifs de
fichiers) et `adr` (où chercher les citations), le journal rend
`gardes_nommees: { motifs, total, non_nommees_par_un_parcours, sans_epreuve,
ecartees, differees, candidats }`. Trois précautions, chacune répondant à une
faute possible :
- **« Nommée », jamais « déclarée ».** Un parcours peut porter la règle en
langue naturelle sans nommer la classe ; l'instrument n'observe que la
nomination, et les champs le disent (`nommee_par_parcours`, `_par_adr`,
`_par_epreuve`). Absent ≠ non déclaré.
- **Une exception n'est pas un invariant.** Une absence (`NotFound`) n'est une
règle pour personne : la juridiction l'exclut par motif (`gardes_exclues`).
- **Décider que non a un réceptacle.** Un registre de la juridiction
(`gardes_ecartees` : `nom`, `decision: ecarte | differe`, `motif`, `jusqu_au`),
que l'instrument **lit et n'écrit jamais** : l'écarté sort des candidats et
reste dans le compte ; le différé revient à sa date.
L'instrument **mesure une existence, il ne déclare rien** ; rien ne devient un
constat, aucun état ne change de sens ; sans les clés, la section n'existe pas.
Sa limite est dans le journal (`motifs`) : ce qui ne porte pas le motif —
`require`, objets-valeurs, contraintes de schéma — lui est invisible.
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.