chimera-list-exemptions-not-obligations
Une barrière qui énumère ce qu'il faut vérifier échoue en laissant passer — le site que personne n'a pensé à ajouter est celui qui casse. Énumérez plutôt les exemptions, chacune avec une raison écrite, et le défaut devient l'échec.
Conférée par la personne qui a relu la fiche, et non revendiquée par le fichier lui-même. Une fiche que l'agent distille au cours d'une exécution ayant consommé du contenu non fiable naît contaminée et reste en attente de relecture avant d'être un jour récupérée.
Quand elle vient à l'esprit
- écrire un contrôle de build
- imposer une règle à tout le package
- une liste de fichiers maintenue à la main
- une surface a perdu sa garantie
- ajout d'un nouveau point d'entrée
C'est dans À éviter et Vérifier que se trouve d'ordinaire la valeur. À faire est la section que tout le monde écrit.
Le corps de la fiche ci-dessus est une traduction. L'original anglais est ce que la CLI importe, ce que l'agent lit à l'exécution et ce que l'empreinte ci-dessous atteste.
Déclencheur
Vous faites respecter une propriété qui doit tenir sur chaque site d'un certain type : chaque surface non surveillée passe par le profil de gouvernance, chaque écrivain passe la barrière, chaque route d'API régénère son schéma. La règle tient en une phrase, mais les sites ont été écrits à des moments différents par des mains différentes, et aucun n'appelle ce que les autres appellent.
Cela ne s'applique pas quand la population est close par construction — une règle portant sur les trois entrées d'une table de dispatch est déjà énumérée par la table. Ce motif ne vaut son coût que lorsqu'un nouveau site peut apparaître dans un fichier qui n'existe pas encore.
À faire
- Énumérez la population mécaniquement. Parcourez chaque
*.pydu paquet (PACKAGE.rglob("*.py")), pas une liste écrite à la main des fichiers que vous connaissez. - Détectez le site de façon structurelle. Parsez et parcourez l'AST pour trouver l'appel qui vous intéresse ; un
grepne sait pas distinguer un registre réellement assemblé des mêmes mots à l'intérieur d'une docstring, et cette docstring existera, parce que quelqu'un écrira un commentaire à propos du correctif. - Parcourez les portées imbriquées et indexez par la chaîne englobante —
chimera/cli/main.py:solve._run_solve. La seule surface que Chimera a laissé passer avait son registre construit dans une fermeturefactory()(chimera/server/manager.py:_gateway_on_message.factory), invisible pour un parcours qui ne regardait que les fonctions de premier niveau. - Faites en sorte que le défaut soit l'ÉCHEC. Tenez un seul
EXEMPT: dict[str, str]associant la clé du site à une raison écrite, et faites en sorte que l'assertion liste chaque site trouvé qui n'y figure pas comme clé. - Écrivez la raison comme une phrase portant sur ce site précis, et distinguez les types de raison. « attended: interactive REPL » (une personne peut faire Ctrl-C) est une affirmation bien plus forte que « assembles an equivalent stack from its own flags » — la seconde signale une implémentation en double à consolider, pas une réponse définitive.
- Ajoutez un second test vérifiant que chaque clé de
EXEMPTdésigne encore un site vivant, pour que la liste ne puisse pas survivre au code qu'elle excuse et pourrir en simple formalité.
À éviter
La liste des obligations :
SURFACES = ["serve", "cron", "mcp", "a2a", "platform"] # fails OPEN
for name in SURFACES:
assert_governed(name)
face à la liste des exemptions :
EXEMPT = {"chimera/cli/main.py:chat": "attended: interactive REPL"} # fails CLOSED
assert not [s for s in every_site_in_the_package() if s not in EXEMPT]
La première version de la barrière de gouvernance de Chimera était celle du haut : elle parsait un seul fichier et nommait
cinq surfaces. chimera/server/manager.py — le bot Discord que démarre le bouton Messaging de l'application de bureau,
le même bot que lance serve --discord — a construit son registre sans gouvernance pendant trois semaines après
la passe censée l'avoir couvert. Il n'échouait jamais à la barrière. Il n'a jamais été regardé.
Évitez aussi une exemption sans raison. Un simple EXEMPT: set[str] est une liste de vérifications à sauter que
personne ne peut relire un an plus tard ; la phrase unique est tout le coût de l'entrée et toute sa
valeur.
Vérifier
Donnez à la barrière un source qui viole la règle et vérifiez qu'il est bien détecté, y compris depuis l'intérieur d'une fonction imbriquée — sinon un bug d'AST fait passer la barrière pour toujours et la garantie cesse discrètement d'exister :
src = "def serve():\n def factory():\n r = default_registry(ws)\n"
assert _bare_registry_calls(ast.parse(src), "m.py") == [("m.py:serve.factory", 3)]
Puis l'autre moitié : un appel déjà enveloppé dans la forme conforme ne doit pas être signalé, sinon chaque site conforme aurait besoin d'une exemption et la liste ne voudrait plus rien dire.
La question binaire : supprimez une entrée de EXEMPT et relancez. La suite passe-t-elle au rouge en nommant exactement
ce site ? Si non, la barrière ne lit pas la liste que vous croyez.
Risque
Inverser la liste déplace le coût sur quiconque ajoute un nouveau site légitime : une PR sans rapport passe au rouge avec une erreur de gouvernance à laquelle son auteur ne pensait pas. C'est le compromis voulu, mais seulement si le message d'échec indique les deux façons de se conformer — faire passer par le profil, ou ajouter l'exemption avec une raison. Une barrière qui se déclenche sur du travail qu'elle n'a pas été conçue pour défendre finit par être négociée à la baisse jusqu'à ne plus se déclencher sur rien.
La détection structurelle est aussi plus étroite qu'elle n'en a l'air. Elle attrape la seule forme qu'elle connaît ; une surface qui assemble ses outils par un autre appel, ou qui importe un registre déjà construit depuis ailleurs, est hors du parcours et le build vert n'en dit rien. Épinglez nommément la couverture du fichier qui a régressé dans son propre test, pour qu'un parcours qui cesse silencieusement de couvrir ce fichier échoue au lieu de passer.
L'utiliser
La fiche est une donnée. Clonez le dépôt et importez-la par son chemin — ce qui arrive par le réseau est traité comme contaminé et retenu pour approbation, ce qui est le comportement souhaitable et la raison pour laquelle il n'y a pas d'installateur en une ligne ici.
git clone https://github.com/brcampidelli/chimera-agent.gitchimera skills-import chimera-agent/skills/chimera-list-exemptions-not-obligations/SKILL.mdIntégrité
SHA-256 du fichier tel qu'il est publié. Qui l'importe peut vérifier que ce qu'il a reçu correspond à ce que cette page affichait.
243034feb6f9a9a06be65cfb2bf4db159e4fbcc0e7210475dffe540600227ef7