# 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. ## 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.