Cordon — deterministische Änderungshüllen (Change Envelopes)
Cordon ist eine Akzeptanzschicht für Änderungen durch Coding-Agenten, die nach der Ausführung greift. Es erstellt einen Snapshot des aktuellen Git-HEAD, zeichnet eine explizite repository-relative Pfad- und Größenrichtlinie auf und akzeptiert das Ergebnis nur, wenn die Git-sichtbaren Änderungen innerhalb dieser Richtlinie bleiben und jeder unabhängige Verifizierer mit Exit-Code 0 beendet wird.
Verwenden Sie Cordon, wenn die Einschränkung „Der Agent soll nur X berühren“ durch Code überprüft werden muss und nicht vom Agenten merkt. Bezeichnen Sie Cordon nicht als Sandbox: ignorierte Dateien liegen außerhalb des v1-Evidenzmodells, und ein Prozess mit uneingeschränktem Dateisystemzugriff kann den Zustand von Cordon manipulieren.
Wählen Sie einen Modus
Anbieterneutral: Vorbereiten, beliebigen Agenten ausführen, prüfen
cordon arm "update parser only" \
--allow "src/parser/**" \
--allow "tests/parser/**" \
--deny "src/parser/generated/**" \
--max-files 8 \
--max-added-lines 400 \
--max-deleted-lines 200 \
--verify "python3 -m unittest discover -s tests"
# Führen Sie den Coding-Agenten selbst aus.
cordon check
Dieser Modus ruft keinen KI-Dienst auf.
Claude Code-Wrapper
cordon run "Fix the parser regression without changing generated files." \
--allow "src/parser/**" \
--allow "tests/parser/**" \
--deny "src/parser/generated/**" \
--verify "python3 -m unittest discover -s tests" \
--max-files 8 \
--max-added-lines 400 \
--max-deleted-lines 200 \
--max-turns 20 \
--max-budget-usd 2
Cordon startet einen frischen claude -p-Prozess mit JSON-Ausgabe, deaktivierter Sitzungspersistenz und dem Berechtigungsmodus acceptEdits. Ein fehlgeschlagener/unterbrochener Lauf kann mit einem neuen Prozess über cordon resume wiederholt werden, jedoch nur, solange die partiellen Git-sichtbaren Änderungen noch die vorbereitete Hülle erfüllen und die maximale Anzahl von Versuchen noch nicht erreicht ist.
Ergebnis ablesen
| Exit | Bedeutung |
|---|---|
0 | Audit akzeptiert |
2 | Cordon hat den Vorgang abgelehnt oder Zustand/Richtlinie ist ungültig |
3 | Agent/Prozess beendet, aber die Git-Richtlinie oder ein Verifizierer hat das Ergebnis abgelehnt |
4 | Der gekapselte Claude-Prozess ist fehlgeschlagen, zeitlich ausgelaufen oder hat das Limit der erfassten Ausgabe überschritten |
cordon status meldet die aktuelle Phase und das letzte Audit. cordon reset entfernt nur .cordon/; es setzt keine Repository-Dateien zurück, löscht oder committed sie nicht.
Richtlinienregeln
- Mindestens ein
--allow-Muster ist erforderlich. --denyhat immer Vorrang vor--allow.- Muster sind repository-relative Cordon-Globs:
*überschreitet kein/,**schon, und?matcht genau ein Nicht-/-Zeichen. - Cordon lehnt absolute Muster (
/x,./x), NUL-Bytes und explizite./..-Pfadsegmente ab. - HEAD-Bewegungen werden standardmäßig abgelehnt. Verwenden Sie
--allow-commitsnur, wenn Commits ein beabsichtigter Teil der Aufgabe sind. - Budgets sind inklusiv: der genaue Grenzwert wird akzeptiert; ein Wert darüber wird abgelehnt.
- Verifizierer werden mit
shlex.splitgeparst und direkt ausgeführt, nicht über eine Shell. Shell-Operatoren wie&&, Pipes und Redirects werden daher nicht interpretiert.
Zustand und Wiederherstellung
Cordon speichert den Zustand in .cordon/ und registriert /.cordon/ in .git/info/exclude. Es bearbeitet niemals .gitignore.
Cordon weigert sich auch, zu armieren, während eine verfolgte Datei das assume-unchanged- oder skip-worktree-Index-Flag trägt, da eine solche Datei nicht auditiert werden kann. Entfernen Sie das Flag mit git update-index --no-assume-unchanged <pfad> anstatt es zu umgehen.
Schreibvorgänge in den semantischen Zustand von Cordon erfolgen über temporäre Datei + fsync + os.replace. Ein Synchronisations-Inode der Länge Null, der über Git-Metadaten aufgelöst wird (cordon.lock), wird mit einer Betriebssystem-Advisony-Sperre gehalten; er ist nicht Teil des .cordon/-Zustands und wird niemals ersetzt, solange er gesperrt ist. Die Sperre verhindert, dass zwei Cordon-Operationen gleichzeitig denselben Repository-Zustand besitzen, einschließlich Vorbereitung/Einrichtung plus einem gekapselten Agentenversuch. Ein Claude-Versuch wird als running markiert, bevor das Kind gestartet wird; Tastaturunterbrechung wird als interrupted gespeichert; Engine-Fehler werden gespeichert und können fortgesetzt werden.
Was Cordon beweist – und was nicht
Cordon kann für die vorbereitete Basislinie und die Git-Implementierung, gegen die es läuft, beweisen, dass die Git-sichtbaren verfolgten Änderungen plus nicht-ignorierte unverfolgte Dateien, die zum Zeitpunkt des Audits beobachtet werden, seiner Richtlinie entsprechen und dass konfigurierte Verifiziererprozesse mit Exit-Code 0 beendet wurden.
Es beweist nicht:
- dass ignorierte Dateien unberührt geblieben sind;
- dass das Repository vor einem böswilligen Prozess sicher ist, der den Zustand neu schreiben kann;
- dass ein Verifizierer logisch korrekt ist;
- dass Berechtigungen/Hooks in einer Agentenlaufzeitumgebung nicht umgangen werden können;
- dass Code allein aufgrund eines kleinen Diffs sicher ist.
Überprüfen Sie den Diff nach der Annahme. Cordon ist ein deterministisches Tor, kein Ersatz für Code-Review oder OS-Sandboxing.
Vollständige Implementierungs- und Grenzdetails: README.md. Quellnachweise: RESEARCH.md. Reproduzierbare Tests und bekannte Grenzen: TEST_REPORT.md.