chimera-list-exemptions-not-obligations
Ein Gate, das auflistet, was zu prüfen ist, ist fail-open — die Seite, an die niemand gedacht hat, ist die, die bricht. Liste stattdessen die Ausnahmen auf, jede mit einer schriftlichen Begründung, und der Standard wird Fehlschlag.
Verliehen von der Person, die die Karte gelesen hat — nicht von der Datei über sich selbst behauptet. Eine Karte, die der Agent während eines Laufs mit nicht vertrauenswürdigen Inhalten destilliert, kommt kontaminiert zur Welt und wird bis zur Prüfung zurückgehalten, bevor sie jemals abgerufen wird.
Wann sie in den Sinn kommt
- ein Build-Gate schreiben
- eine Regel im ganzen Paket durchsetzen
- handgepflegte Liste zu prüfender Dateien
- eine Oberfläche hat ihre Garantie verloren
- einen neuen Einstiegspunkt hinzufügen
In Vermeiden und Prüfen steckt meist der Wert. Tun ist der Abschnitt, den alle schreiben.
Der Kartentext oben ist eine Übersetzung. Das englische Original ist das, was die CLI importiert, was der Agent zur Laufzeit liest und was der Hash unten bezeugt.
Auslöser
Sie setzen eine Eigenschaft durch, die an jeder Stelle einer bestimmten Art gelten muss: Jede unbeaufsichtigte Oberfläche geht durch das Governance-Profil, jeder Writer passiert das Gate, jede API-Route regeneriert ihr Schema. Die Regel ist ein Satz, aber die Stellen wurden zu unterschiedlichen Zeiten von unterschiedlichen Händen geschrieben, und keine davon nennt das Ding so, wie die anderen es nennen.
Das gilt nicht, wenn die Population konstruktionsbedingt geschlossen ist — eine Regel über die drei Einträge einer Dispatch-Tabelle ist durch die Tabelle bereits aufgezählt. Dieses Muster rechtfertigt seine Kosten nur, wenn eine neue Stelle in einer Datei auftauchen kann, die es noch nicht gibt.
Tun
- Zählen Sie die Population maschinell auf. Laufen Sie über jede
*.pyunterhalb des Pakets (PACKAGE.rglob("*.py")), nicht über eine handgeschriebene Liste der Dateien, die Ihnen gerade bekannt sind. - Erkennen Sie die Stelle strukturell. Parsen Sie den AST und laufen Sie ihn nach dem Aufruf ab,
der Sie interessiert; ein
grepkann eine zusammengebaute Registry nicht von denselben Wörtern in einem Docstring unterscheiden, und dieser Docstring wird existieren, weil jemand einen Kommentar über den Fix schreiben wird. - Laufen Sie verschachtelte Scopes ab und schlüsseln Sie nach der umschließenden Kette —
chimera/cli/main.py:solve._run_solve. Die eine Oberfläche, die Chimera verloren hat, baute ihre Registry innerhalb einerfactory()-Closure auf (chimera/server/manager.py:_gateway_on_message.factory), unsichtbar für einen Durchlauf, der nur auf Top-Level-Funktionen schaute. - Machen Sie den Standard zu FEHLSCHLAG. Halten Sie ein
EXEMPT: dict[str, str]von Stellen-Schlüssel auf schriftlich festgehaltene Begründung, und lassen Sie die Assertion jede gefundene Stelle auflisten, die kein Schlüssel darin ist. - Schreiben Sie die Begründung als Satz über genau diese Stelle, und trennen Sie die Arten von Begründung. „attended: interactive REPL" (ein Mensch kann Strg-C drücken) ist eine viel stärkere Behauptung als „assembles an equivalent stack from its own flags" — die zweite markiert eine zu konsolidierende Doppelimplementierung, keine ausgemachte Antwort.
- Fügen Sie einen zweiten Test hinzu, der prüft, dass jeder
EXEMPT-Schlüssel weiterhin eine lebende Stelle benennt, damit die Liste den Code, den sie entschuldigt, nicht überleben und zur Formalität verrotten kann.
Vermeiden
Die Verpflichtungsliste:
SURFACES = ["serve", "cron", "mcp", "a2a", "platform"] # fails OPEN
for name in SURFACES:
assert_governed(name)
gegenüber der Ausnahmeliste:
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]
Die erste Fassung von Chimeras Governance-Gate war die obere: Sie parste eine einzige Datei und
benannte fünf Oberflächen. chimera/server/manager.py — der Discord-Bot, den der
Messaging-Schalter der Desktop-App startet, derselbe Bot, den serve --discord ausführt — baute
seine Registry noch drei Wochen nach dem Sweep ungoverned auf, der ihn eigentlich hätte abdecken
sollen. Er hat das Gate nie verletzt. Er wurde nie angeschaut.
Vermeiden Sie außerdem eine Ausnahme ohne Begründung. Ein nacktes EXEMPT: set[str] ist eine Liste
zu überspringender Prüfungen, die ein Jahr später niemand mehr überprüfen kann; der eine Satz sind
die gesamten Kosten des Eintrags und sein gesamter Wert.
Prüfen
Füttern Sie das Gate mit einer Quelle, die die Regel verletzt, und prüfen Sie, dass sie gefangen wird, auch aus einer verschachtelten Funktion heraus — sonst lässt ein AST-Bug das Gate für immer bestehen und die Garantie hört still auf zu existieren:
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)]
Dann die andere Hälfte: Ein Aufruf, der bereits in der konformen Form eingepackt ist, darf nicht markiert werden, sonst bräuchte jede konforme Stelle eine Ausnahme und die Liste würde aufhören, etwas zu bedeuten.
Die binäre Frage: Löschen Sie einen Eintrag aus EXEMPT und lassen Sie erneut laufen. Wird die
Suite rot und benennt genau diese Stelle? Wenn nicht, liest das Gate nicht die Liste, die Sie
glauben.
Risiko
Die Liste umzudrehen verlagert die Kosten auf denjenigen, der eine legitime neue Stelle hinzufügt: Ein unbeteiligter PR wird rot mit einem Fehler über Governance, an die er nicht gedacht hat. Das ist der beabsichtigte Tausch, aber nur, wenn die Fehlermeldung beide Wege zur Konformität nennt — leite es durch das Profil, oder füge die Ausnahme mit einer Begründung hinzu. Ein Gate, das bei Arbeit anschlägt, für deren Absicherung es nicht gebaut wurde, wird so lange kleingeredet, bis es bei nichts mehr anschlägt.
Die strukturelle Erkennung ist außerdem enger, als sie sich anfühlt. Sie fängt die eine Form, die sie kennt; eine Oberfläche, die Tools über einen anderen Aufruf zusammenbaut oder eine vorgefertigte Registry von woanders importiert, liegt außerhalb des Durchlaufs, und der grüne Build sagt nichts über sie. Fixieren Sie die Abdeckung der Datei, die regressiert ist, namentlich in einem eigenen Test, damit ein Durchlauf, der diese Datei still nicht mehr abdeckt, fehlschlägt statt zu bestehen.
Verwenden
Die Karte ist Daten. Klonen Sie das Repository und importieren Sie sie über den Pfad — was über das Netz kommt, gilt als kontaminiert und wird bis zur Freigabe zurückgehalten. Das ist das gewünschte Verhalten und der Grund, warum es hier keinen Einzeiler-Installer gibt.
git clone https://github.com/brcampidelli/chimera-agent.gitchimera skills-import chimera-agent/skills/chimera-list-exemptions-not-obligations/SKILL.mdIntegrität
SHA-256 der Datei in der veröffentlichten Fassung. Wer sie importiert, kann prüfen, dass das Empfangene dem entspricht, was diese Seite gezeigt hat.
243034feb6f9a9a06be65cfb2bf4db159e4fbcc0e7210475dffe540600227ef7