Files changed: - CHANGES.md - VERSION - kb/CONVENTIONS.md - kb/CONVENTIONS.md.template - kb/concepts/decisions/Diff-Reviewable Agent Edits.md - kb/concepts/decisions/Structural Enforcement over Documented Rule.md - kb/concepts/problems/Ambient Environment Dependency.md - kb/concepts/problems/Green Suite Blind Spot.md - kb/log.md Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SnAJ7Z3CpVD3PRbN73QtU2
4.0 KiB
type, concept_type, tags, created, modified, related, sources, provenance, summary
| type | concept_type | tags | created | modified | related | sources | provenance | summary | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| types/concept.md | decision |
|
2026-08-31 | 2026-08-31 |
|
|
sourced | Entscheidung, Dateiaenderungen ueber Edit/Write statt ueber Shell-Heredocs zu fahren, weil nur das erste eine pruefbare Diff hinterlaesst |
Diff-Reviewable Agent Edits
Typ: Decision
Definition
Ein Agent ändert Dateien über die dedizierten Werkzeuge Edit und Write, nicht über
Shell-Konstrukte wie sed -i, Heredocs oder eingebettete Skripte. Die Shell bleibt für alles
zuständig, was keine Datei umschreibt: git, pytest, wikitool, grep, find, und Lesen
mit cat oder sed -n.
Kontext
Der aktive Berechtigungsmodus Claude Code Auto Mode injiziert eine Anweisung in die Sitzung,
die genau das Gegenteil verlangt: Arbeit möglichst über das Bash-Werkzeug erledigen und auf ein
dediziertes Werkzeug erst zurückfallen, wenn Bash die Aufgabe nicht bewältigt. Der Assistent war
ihr gefolgt und hatte lint.py, frontmatter_io.py und run_budget.py über heredoc'te
python3 - <<'PY'-Blöcke mit s.replace(old, new)
umgeschrieben1 . Torben hat das
abgestellt:
"Warum verwendest du seit neuestem immer die Shell um Dateien zu editieren anstelle der file
edit Tools? Das macht die Session schwer nachvollziehbar."
Entscheidung
Edit/Write für Dateiänderungen, Bash für Prozesse. Die Regel wurde in das dauerhafte
Gedächtnis des Assistenten geschrieben, damit sie die Sitzung
überdauert1 .
Zwei Gründe tragen sie, und der zweite ist der belastbarere:
- Die ausdrückliche Anweisung des Nutzers rangiert über einer Modus-Voreinstellung.
- Die Anweisung des Modus schlägt sich selbst. Ihr Qualifikator lautet "wherever it can
accomplish the job". Ein
s.replace(old, new)in einem Heredoc zeigt dem Leser zwei String-Literale und keine Änderungsansicht: was vorher in der Datei stand und was jetzt darin steht, ist nicht sichtbar. Ein Edit, dessen Diff niemand prüfen kann, erfüllt die Aufgabe nicht - also greift der Vorrang der Shell an dieser Stelle gar nicht erst.
Konsequenzen
- Die Grenze verläuft zwischen Lesen und Schreiben, nicht zwischen Shell und Werkzeug.
cat,head,sed -n,grepundfindbleiben unverändert zulässig. - Sie verläuft nicht bei jeder Änderung gleich scharf: bei einem einzeiligen
sedist der Unterschied unerheblich, beim Mehrblock-Umbau eines Compiler-Moduls nicht. Die Regel wird trotzdem einheitlich angewandt, weil die Einschätzung "das ist klein genug" genau die ist, die im Zweifelsfall zugunsten der Bequemlichkeit ausfällt. - Der Modus lässt sich nicht so einstellen, dass nur diese Präferenz entfällt; es wurde keine solche Einstellung gefunden1 . Die Regel muss also als Verhaltensregel getragen werden, nicht als Konfiguration.
- In diesem Repository fällt die Entscheidung mit den Interessen des Stacks zusammen: was
wikitoolerzeugt, wird ohnehin nie von Hand geschrieben, und was von Hand geschrieben wird, soll im Publish-Diff nachlesbar sein.
Status
Angenommen (2026-08-31), auf Anweisung des Nutzers, für Sitzungen an diesem Repository.
Verwandte Concepts
Beziehungen
Siehe auch
Fußnoten
Beziehungen
- see-also: Claude Code Auto Mode
- operates-on: Claude Code
- derived-from: Write-Once Frontmatter Fields