# Release 2026-08-12 — Regel für den Bericht an die Person

## Was ausgeliefert wurde

| Feld | Wert |
|---|---|
| Commit auf `main` | `0dec3904008b8919f753a5cc43af2764dc516fd2` |
| Commit auf `gh-pages` | `7271c9d5ec6cd8262d3dff8ef06d890dbb4940c6` |
| Vorheriger Stand auf `gh-pages` | `6813e73a7b9348f7cf29147a54286a085872266f` |
| Zielumgebung | GitHub Pages, https://deltatree.github.io/BestAiConfig |
| Zeitpunkt | 2026-08-12, 13:20 UTC (Workflow-Start) |
| Ausgelöst von | `deltatree` über `gh workflow run deploy.yml --ref main` |
| Workflow-Lauf | https://github.com/deltatree/BestAiConfig/actions/runs/31600879950 |
| Dauer | 3 Minuten 26 Sekunden |
| Pull Request | https://github.com/deltatree/BestAiConfig/pull/5 |
| Artefakte | 126, vorher 123 |

## Der Anlass

Eine fertige Zusammenfassung bestand alle installierten Lesbarkeitsziele.
Sie war trotzdem schwer zu lesen.

| Maß | Wert | Ziel | Urteil |
|---|---|---|---|
| Satzlänge im Schnitt | 10,0 Wörter | unter 15 | grün |
| Flesch/Amstad | 64 | ab 60 | grün |
| Wiener Sachtextformel | 6,8 | bis 8 | grün |
| LIX | 38 | unter 50 | grün |

Der Text trug rund 40 unerklärte Fachbegriffe auf 320 Wörter. Er enthielt
sechs Sätze ohne Verb. Er begann mit einem Branch-Namen statt mit dem
gefundenen Rechtsverstoß. Keine der vier Formeln sieht einen dieser drei
Fehler. Kurze Bruchstücke ohne Verb heben den Wert sogar.

## Was sich geändert hat

| Regel | Änderung |
|---|---|
| `work-report` | neu: Ergebnis zuerst, dann die Entscheidung, dann die Fakten |
| `readability-measures` | zählt unerklärte Begriffe und Sätze ohne Verb mit |
| `depth-projection` | die Zusammenfassung entsteht auf jeder Stufe |
| `skill-router` | erreicht die neue Regel über den Berührungspunkt `work-report` |

## Abhängigkeiten

Unverändert. Das Projekt hat keine Laufzeitabhängigkeiten
(`dependencies = []`).

| Werkzeug | Version | Quelle |
|---|---|---|
| Python | 3.12 | `actions/setup-python@v6`, gepinnt im Workflow |
| `actions/checkout` | v7 | gepinnt im Workflow |
| `peaceiris/actions-gh-pages` | v4 | gepinnt im Workflow |

## Konfiguration, die der Build liest

Unverändert gegenüber
[2026-08-10-install-time-language-option.md](2026-08-10-install-time-language-option.md).
Dieses Release fügt keinen Schlüssel hinzu und entfernt keinen.

## Reproduzierbarkeit

```
build 1: 479c0b5b32eaec07c925c0b1ab9914b505e5c8ea19b98d98f64158aebd93ddd2
build 2: 479c0b5b32eaec07c925c0b1ab9914b505e5c8ea19b98d98f64158aebd93ddd2
```

Beide Bauläufe liefen aus einer Kopie von `0dec390`, mit
`GITHUB_REPOSITORY=deltatree/BestAiConfig`. Der Wert ist der Hash über alle
Dateien in `public/`. Die Bauläufe sind byteweise identisch. Es gibt keine
bekannte Abweichung.

## Prüfung vor dem Merge

| Prüfung | Ergebnis |
|---|---|
| `python3 -m unittest discover` | 607 Tests, 0 Fehler, 349 Sekunden |
| Neue Tests in `tests/test_work_report.py` | 15 |
| Dieselben 15 Tests auf dem Stand davor | 15 rot |
| `python3 src/compile_rules.py` | `validate: 136 ok, 0 FAIL` |

## Datenmigration

Keine im Sinne einer Datenbank. Der Installer legt beim Anwender drei neue
Dateien an: `.claude/skills/work-report/SKILL.md`,
`.clinerules/work-report.md` und `.cursor/rules/work-report.mdc`. Er ändert
drei vorhandene Dateien der Regelverzeichnisse. Der Rückwärtsschritt dafür
steht unten als Schritt 5.

## Rollback

Der Rollback dauert etwa 6 Minuten. Du brauchst Schreibrechte auf das
Repository und `git`.

**Schritt 1 — Hole den aktuellen Stand.**

```
git fetch origin gh-pages
```

Erwartete Ausgabe: keine Fehlermeldung, Status 0. Bei einer Fehlermeldung
prüfe die Netzverbindung und `gh auth status`.

**Schritt 2 — Prüfe den vorherigen Stand.**

```
git log --oneline -3 origin/gh-pages
```

Erwartete Ausgabe: oberste Zeile `7271c9d deploy: 0dec390...`, zweite Zeile
`6813e73 deploy: fe5883d...`. Weicht die oberste Zeile ab, hat jemand nach
dir ausgeliefert. Halte an und kläre das zuerst.

**Schritt 3 — Setze `gh-pages` zurück.**

```
git push --force-with-lease origin 6813e73a7b9348f7cf29147a54286a085872266f:gh-pages
```

Erwartete Ausgabe: eine Zeile mit `forced update`. Bei `stale info`
wiederhole Schritt 1 und 2.

**Schritt 4 — Warte auf das Auslieferungsnetz.**

```
until ! curl -fsS "https://deltatree.github.io/BestAiConfig/manifest.json?cb=$$" \
  | grep -q "work-report"; do sleep 10; done
```

Erwartete Ausgabe: der Befehl endet. Dann liefert GitHub Pages wieder 123
Artefakte ohne die neue Regel aus. Das dauert bis zu 2 Minuten. Endet der
Befehl nach 5 Minuten nicht, prüfe
https://github.com/deltatree/BestAiConfig/deployments.

**Schritt 5 — Nimm die Regel bei den Anwendern zurück.**

Führe diesen Befehl in jedem der drei Projekte aus, erst nach Schritt 4:

```
curl -fsSL https://deltatree.github.io/BestAiConfig/bootstrap.sh \
  | bash -s -- --yes --language German --skip-tools
```

Erwartete Ausgabe: die letzte Zeile lautet
`[bootstrap] install complete: 123 artifact(s) from https://deltatree.github.io/BestAiConfig`.
Der Installer besitzt die Regelverzeichnisse, also entfernt er die drei
neuen Dateien selbst. Eigene Regeln mit `local` im Namen bleiben liegen.
Steht dort weiter 126, liefert Pages noch den neuen Stand aus. Gehe zurück
zu Schritt 4.

**Schritt 6 — Nimm den Code auf `main` zurück.**

```
git revert -m 1 0dec3904008b8919f753a5cc43af2764dc516fd2
git push origin main
```

Erwartete Ausgabe: ein neuer Commit `Revert "Merge pull request #5"`. Ohne
diesen Schritt liefert der nächste nächtliche Lauf den Stand wieder aus.

## Rollback-Probe

| Datum | Dauer | Ergebnis |
|---|---|---|
| noch nicht durchgeführt | — | — |

Dieser Rollback ist ein Plan, keine bewiesene Prozedur. Führe ihn einmal
gegen die laufende Auslieferung aus, spätestens bis 2026-11-08, und trage
Datum und gemessene Dauer hier ein. Die Frist ist dieselbe wie im Release
vom 2026-08-10. Beide Proben lassen sich in einem Durchgang erledigen.

## Ausgerollt auf

Geprüft mit einem Hash-Vergleich: jede der 126 Dateien im Projekt gegen
dieselbe Datei auf https://deltatree.github.io/BestAiConfig.

| Projekt | Ergebnis |
|---|---|
| `BestAiConfig` (dogfood) | 126 von 126 Dateien gleich, 0 abweichend, 0 fehlend |
| `lys_landingpage` | 126 von 126 Dateien gleich, 0 abweichend, 0 fehlend |
| `linkyourskill.ai` | 126 von 126 Dateien gleich, 0 abweichend, 0 fehlend |

Alle drei Läufe liefen mit `--skip-tools`. Der BMAD-Werkzeugkasten blieb
also unberührt. In `lys_landingpage` und `linkyourskill.ai` blieben die
vorhandenen eigenen Änderungen unangetastet; in beiden Projekten wurde
nichts committet.
