Red-First, manipulationssicher
Effort: free — pure Reihenfolge-Disziplin: Der Test, den du ohnehin schreiben würdest, wird zuerst geschrieben, rot bewiesen und mit einem Commit versiegelt; der Manipulations-Check ist ein einzelnes git diff. Beseitigt: Tests, die nach dem Fix aufs Bestehen zugeschnitten wurden, und grüne Urteile, die ein Builder durchs Editieren des Tests verbogen hat.
Ein Test, der nach dem Fix geschrieben wird, beweist nichts — er wurde
passend geformt. Ein Test, den der Builder editieren kann, beweist noch
weniger — er lässt sich zum Bestehen verbiegen. Also kommt der Test zuerst,
wird versiegelt und unangetastet bewertet.
Wann einsetzen
Vor dem Losschicken jedes Builds oder Fixes, bei dem ein Test das gewollte
Verhalten festhalten kann. Das ist der Default für Bugfixes wie für neue
Fähigkeiten.
Schritte
- Schreib den fehlschlagenden Vertrags-Test. Er benennt das Verhalten,
das du willst — in der kleinsten Form, die sein Fehlen fangen würde. Er muss
jetzt sofort fehlschlagen.
- Beweis, dass er rot ist. Lass den Test laufen und sieh ihm beim
Fehlschlagen zu — aus dem richtigen Grund. Ein Test, der beim Import einen
Fehler wirft oder still durchläuft, ist nicht rot. Ein roter Test, den
niemand laufen ließ, ist eine Vermutung, keine Baseline.
- Committe den roten Test, BEVOR du den Builder losschickst. Notier die
Commit-Id. Dieser Commit ist die rote Baseline — das Manipulations-Siegel.
- Schick den Builder mit einem Job los: mach ihn grün. Dem Builder ist
verboten, die Test-Datei anzufassen. Sag das im Auftrag ausdrücklich.
- Bewerte unabhängig. Ein Bewerter, der die Änderung nicht geschrieben
hat, prüft zwei Dinge:
- der Test besteht jetzt;
- die Test-Datei ist Byte für Byte identisch mit der roten Baseline —
git diff <red-sha> HEAD -- tests/test_contract.py gibt nichts aus.
Jeder Diff auf der Test-Datei lässt die Bewertung durchfallen. Keine
Ausnahmen, auch nicht „nur ein Tippfehler-Fix“.
- Zieh eine strukturelle Wache zehn Punkt-Tests vor. Eine strukturelle
Wache ist ein Check (ein grep-Durchlauf, ein AST-Scan, eine Lint-Regel),
der beim NÄCHSTEN Verstoß fehlschlägt, nicht nur bei diesem einen. Eine
Wache schlägt zehn Punkt-Tests, die je einen Fall festnageln.
Harte Regeln
- Rot muss bewiesen rot sein. Laufen lassen, fehlschlagen sehen — vorher
zählt es nicht.
- Der Builder editiert den Test nie. Der leere Test-Datei-Diff seit der
roten Baseline gehört zum Landegate, er ist keine Höflichkeitsprüfung.
- Der Builder ist nie der Bewerter. Nimm eine andere Person, einen anderen
Agenten oder ein Modell aus einer anderen Familie als der des Builders.
- Grün allein ist kein Beweis. Grün + unangetasteter Test + unabhängige
Bewertung ist Beweis.
- Steht eine ganze Defekt-Klasse im Raum, bewache die Klasse. Punkt-Tests
stoppen diesen Bug; eine strukturelle Wache stoppt den nächsten.
Passt gut zu
- sniper-testing — beim Iterieren nur die Tests
fahren, die die Änderung berührt; ein voller Durchlauf beim Landen.
- seam-engineering — die Klassen-Fix-Disziplin,
zu der die strukturelle Wache gehört.
- blind-tribunal — unabhängige Bewerter, die den
Autor nie gesehen haben.
- repair-loop — die Schleife, die rot → grün →
bewiesen von Anfang bis Ende trägt.
1---2name: red-first-23description: Beim Losschicken jedes Builders — ein Agent, ein Modell oder du selbst — für eine Änderung, die ein Test beweisen soll. Committet einen bewiesen fehlschlagenden Vertrags-Test, bevor der Build startet, verbietet dem Builder, ihn anzufassen, und lässt einen unabhängigen Bewerter prüfen, dass der Test nie editiert wurde. Trigger words: red first, failing test first, contract test, red baseline, tamper-proof test, test before build, erst der rote Test, fehlschlagender Test zuerst, Vertrags-Test, rote Baseline, Test vor dem Build.4license: MIT5---67# Red-First, manipulationssicher8**Effort:** free — pure Reihenfolge-Disziplin: Der Test, den du ohnehin schreiben würdest, wird zuerst geschrieben, rot bewiesen und mit einem Commit versiegelt; der Manipulations-Check ist ein einzelnes git diff. Beseitigt: Tests, die nach dem Fix aufs Bestehen zugeschnitten wurden, und grüne Urteile, die ein Builder durchs Editieren des Tests verbogen hat.910Ein Test, der nach dem Fix geschrieben wird, beweist nichts — er wurde11passend geformt. Ein Test, den der Builder editieren kann, beweist noch12weniger — er lässt sich zum Bestehen verbiegen. Also kommt der Test zuerst,13wird versiegelt und unangetastet bewertet.1415## Wann einsetzen1617Vor dem Losschicken jedes Builds oder Fixes, bei dem ein Test das gewollte18Verhalten festhalten kann. Das ist der Default für Bugfixes wie für neue19Fähigkeiten.2021## Schritte22231. **Schreib den fehlschlagenden Vertrags-Test.** Er benennt das Verhalten,24 das du willst — in der kleinsten Form, die sein Fehlen fangen würde. Er muss25 jetzt sofort fehlschlagen.262. **Beweis, dass er rot ist.** Lass den Test laufen und sieh ihm beim27 Fehlschlagen zu — aus dem richtigen Grund. Ein Test, der beim Import einen28 Fehler wirft oder still durchläuft, ist nicht rot. Ein roter Test, den29 niemand laufen ließ, ist eine Vermutung, keine Baseline.303. **Committe den roten Test, BEVOR du den Builder losschickst.** Notier die31 Commit-Id. Dieser Commit ist die rote Baseline — das Manipulations-Siegel.324. **Schick den Builder mit einem Job los: mach ihn grün.** Dem Builder ist33 verboten, die Test-Datei anzufassen. Sag das im Auftrag ausdrücklich.345. **Bewerte unabhängig.** Ein Bewerter, der die Änderung nicht geschrieben35 hat, prüft zwei Dinge:36 - der Test besteht jetzt;37 - die Test-Datei ist Byte für Byte identisch mit der roten Baseline —38 `git diff <red-sha> HEAD -- tests/test_contract.py` gibt nichts aus.39 Jeder Diff auf der Test-Datei lässt die Bewertung durchfallen. Keine40 Ausnahmen, auch nicht „nur ein Tippfehler-Fix“.416. **Zieh eine strukturelle Wache zehn Punkt-Tests vor.** Eine strukturelle42 Wache ist ein Check (ein grep-Durchlauf, ein AST-Scan, eine Lint-Regel),43 der beim NÄCHSTEN Verstoß fehlschlägt, nicht nur bei diesem einen. Eine44 Wache schlägt zehn Punkt-Tests, die je einen Fall festnageln.4546## Harte Regeln4748- **Rot muss bewiesen rot sein.** Laufen lassen, fehlschlagen sehen — vorher49 zählt es nicht.50- **Der Builder editiert den Test nie.** Der leere Test-Datei-Diff seit der51 roten Baseline gehört zum Landegate, er ist keine Höflichkeitsprüfung.52- **Der Builder ist nie der Bewerter.** Nimm eine andere Person, einen anderen53 Agenten oder ein Modell aus einer anderen Familie als der des Builders.54- **Grün allein ist kein Beweis.** Grün + unangetasteter Test + unabhängige55 Bewertung ist Beweis.56- **Steht eine ganze Defekt-Klasse im Raum, bewache die Klasse.** Punkt-Tests57 stoppen diesen Bug; eine strukturelle Wache stoppt den nächsten.5859## Passt gut zu6061- [sniper-testing](../sniper-testing/SKILL.md) — beim Iterieren nur die Tests62 fahren, die die Änderung berührt; ein voller Durchlauf beim Landen.63- [seam-engineering](../seam-engineering/SKILL.md) — die Klassen-Fix-Disziplin,64 zu der die strukturelle Wache gehört.65- [blind-tribunal](../blind-tribunal/SKILL.md) — unabhängige Bewerter, die den66 Autor nie gesehen haben.67- [repair-loop](../repair-loop/SKILL.md) — die Schleife, die rot → grün →68 bewiesen von Anfang bis Ende trägt.