Du verstehst, dass forward momentum — der Drang weiterzugehen — der größte Feind von Korrektheit ist. Du kennst die Disziplin der Verifikations-Rituale: was sie sind, warum sie spannungsarm wirken müssen, und wie sie atomare Commits ermöglichen.
Konkret nach Tier 3: Du hast ein eigenes Verifikations-Ritual, das du bewusst anwendest, und du strukturierst Commits so, dass jeder Commit für sich verifiziert ist.
Beim Debuggen von iMenu galt die iDev-Direktive: „Erst verifizieren, dann erweitern."
In acht aufeinanderfolgenden Bug-Fixes wurde vor dem Commit jedes Mal:
Acht Bugs, acht atomare Commits, keiner musste später revidiert werden.
Das klingt langsam, ist aber das Gegenteil. Die Reibung saß an der richtigen Stelle. Keine „ich war mir sicher, aber doch nicht ganz"-Momente, kein „eigentlich sollte das laufen"-Druck, kein „wir gucken später".
A) Die Tests sind grün.
B) Der Fix tut, was er soll.
Diese beiden sind nicht dasselbe. Wenn dein Test-Suite den Pfad gar nicht abdeckt, der gebrochen war, sagen grüne Tests nichts über den Fix aus.
Konkret aus der iMenu-Session: der vergessene self._render-Aufruf war in einem set_interval(2.0, self._render). Kein Unit-Test deckte den Timer ab. Tests blieben grün. Der Bug hat trotzdem zwei Sekunden nach Overlay-Öffnung die App umgeworfen.
Nur die echte Ausführung des Code-Pfads beweist, dass der Fix wirkt. Tests erhöhen das Vertrauen — sie ersetzen die Verifikation nicht.
Du hast einen Bug gefunden. Du hast eine Idee, wie du ihn fixt. Du schreibst den Fix. Dein Verstand sagt: „weiter, weiter, der nächste Bug wartet."
Das ist forward momentum. Es ist ein Gefühl, kein Argument. Und es ist die häufigste Ursache von:
Die Antwort darauf ist nicht „mehr Disziplin" — es ist ein Ritual, das die Momentum-Pause erzwingt.
Sechs Schritte. Jeden aufschreiben.
Bevor du den Fix schreibst:
HYPOTHESE: Das Overlay friert, weil set_interval(2.0, self._render)
auf eine umbenannte Methode zeigt. Der AttributeError im Timer-
Callback wird im UI-Thread nicht sichtbar — er verstummt im Loop.
Wenn du das nicht aufschreiben kannst, hast du den Bug noch nicht verstanden — und kannst keinen Fix verifizieren.
GREEN-LIGHT-KRITERIEN:
- Overlay öffnen mit `s`
- 5 Sekunden warten — kein Freeze
- Tastendruck `q` — Overlay schließt
- Sessions-Liste hat sich mindestens einmal aktualisiert
Genau die Schritte, die du nachher tatsächlich tun wirst. Nicht abstrakt.
Klein halten. Eine Sache pro Commit. Den Rest später.
Genau die Schritte aus Schritt 2 durchführen. Nicht ähnliche Schritte. Nicht „sollte schon stimmen". Genau diese.
Atomar. Die Commit-Nachricht beantwortet drei Fragen:
fix(SessionsOverlay): replace renamed _render with _update_display
WAS: set_interval-Callback zeigt jetzt auf _update_display.
WARUM: Methode wurde in Commit a4f48 umbenannt, ein Aufruf blieb.
WIE VERIFIZIERT: Overlay 5s offen gehalten, periodisches Update sichtbar,
Schließen mit `q` funktioniert.
Die „Wie verifiziert"-Zeile ist die wichtigste — sie ist dein zukünftiges Argument, dass dieser Commit gut war.
Erst jetzt. Ein Bug pro Iteration. Kein „während ich dabei bin, noch dieses und das".
Schritte 1, 2 und 5 fühlen sich wie Reibung an. Sie sind die Ersparnis. Drei Wochen später, wenn etwas explodiert, sagt der Commit dir genau, was er getestet hat — du musst nicht raten.
Bau dein eigenes Ritual. Mindestens diese drei Elemente:
Du fängst an, einen Bug zu jagen. Auf dem Weg fällst du über einen anderen. „Den fixe ich auch mal eben." Beide landen im selben Commit. Verifiziert wurde keiner einzeln.
Drei Wochen später bricht einer der beiden Fixes etwas. git revert rollt beide zurück. Der unschuldige Fix verschwindet auch. Du musst ihn neu schreiben.
Faustregel: Ein Bug pro Commit, eine Verifikation pro Commit. Was du nebenbei findest, kommt auf eine Liste — nicht in den aktuellen Diff.
In manchen Setups läuft ein Auto-Commit-Sweep im Hintergrund. Während du selbst etwas änderst, kann ein Hintergrund-Agent committen. Atomare Commits sind hier nicht nur Disziplin — sie sind der einzige Weg, die Spuren auseinanderzuhalten:
# Was hat _meine_ Hand getan?
git log --author="Daniel Klier" --since="1 hour ago"
# Was ist im selben Zeitraum noch passiert?
git log --since="1 hour ago"
Wenn dein „Fix" mehrere Bugs vermischt und gleichzeitig der Sweep läuft, ist die Forensik ein Tag Arbeit. Wenn jeder Commit eine Hypothese und eine Verifikation trägt, ist sie zwei Minuten.
Such die letzten drei Commits, die du gemacht hast. Pro Commit:
Wenn du eine Frage nicht beantworten kannst, schreib das nächste Mal ein bisschen mehr in die Commit-Nachricht. Nicht für jetzt — für dich in drei Wochen.
~/my Auto-Commit-Sweep — der praktische Grund, warum atomare Commits keine Tugend, sondern Notwendigkeit sind