# Release 2026-09-01 — Review-Remediation 1.2.0

## Was ausgeliefert wird

| Feld | Wert |
|---|---|
| Branch | `feat/review-remediation` |
| Branch-Stand bei Redaktion | `7fc8877`; final gemergter Branch-Tip `5a88498` (inkl. Doku-Sweep 2026-09-02) |
| Merge-Commit auf `main` | `c565d5cc7aa5af7db133929159043e6f382395e3` (PR #7, gemergt 2026-09-02) |
| Version | 1.2.0 (`pyproject.toml`) |
| Zielumgebung | GitHub Pages, https://deltatree.github.io/BestAiConfig — deployt der Nachtlauf (`deploy.yml`) nach dem Merge |
| Deploy | Manuell per `workflow_dispatch` (Lauf 33610794570, grün); live seit Build-Stempel 2026-09-02T08:53:27Z; verifiziert: 144 Artefakte, `install.artifact_hashes` vorhanden, `bootstrap.sh` erreichbar. Ausgelöst von `deltatree` per Claude Code |
| Ausgelöst von | `deltatree`, per Auftrag an Claude Code (Session 2026-09-01) |
| Testnachweis | Volle Suite grün je Story; Merge-Gate-Lauf auf `5a88498` am 2026-09-02: 628 Tests, 1963 Subtests, 8:15 min, grün |
| Artefakte | 144, unverändert; `manifest.json` trägt neu `install.artifact_hashes` |

## Der Anlass

Die adversariale Projekt-Review vom 2026-09-01 fand zehn Befunde plus
zwei Nebenbefunde. Der Owner entschied: alle beheben, Lizenz MIT.
Vertrag: `_bmad-output/specs/spec-review-remediation/SPEC.md` (CAP-1
bis CAP-12), umgesetzt als Epic 5 in acht Stories.

| Story | Änderung |
|---|---|
| 5.1 | MIT-`LICENSE`, README-Abschnitt "License and Provenance" |
| 5.2 | `ci.yml`: Testsuite bei jedem Push und Pull Request |
| 5.3 | pytest-Dev-Gruppe; Smoke-Lauf (505 Tests, ~2 s) dokumentiert |
| 5.4 | Compiler `--help`; unbekannte Flags sind Usage-Fehler |
| 5.5 | sha256 je Artefakt im Manifest; Bootstrap prüft beim Staging |
| 5.6 | Roster 955→871/1000 Wörter; Trigger abgegrenzt; Security-Regel kuratiert; drei Defers CLOSED |
| 5.7 | Compiler in sechs Module (größte Datei 1.050 statt 4.777 Zeilen) |
| 5.8 | Version 1.2.0, Gate-Kosten-Messung, dieser Record |

## Abhängigkeiten

Laufzeit unverändert: keine (`dependencies = []`). Neu ist die reine
Entwickler-Gruppe `dev = ["pytest"]`; `uv.lock` löst sie auf
`pytest 9.0.2` mit `iniconfig 2.3.0`, `packaging 26.0` und
`pluggy 1.6.0` auf. Ausgeliefert wird davon nichts.

## Konfiguration

Der Build liest wie bisher nur `GITHUB_REPOSITORY` beziehungsweise
`RULES_BASE_URL` (Basis-URL der Registry; ohne beide gilt der
dokumentierte Platzhalter). Keine neuen Schlüssel, keine Secrets.

## Reproduzierbarkeit

Zweifacher Compile desselben Stands erzeugt byte-identische Artefakte
mit einer bekannten Ausnahme: die einzige Timestamp-Zeile der
Landing-Page (`index.html`, NFR-3). Nachweis im Story-Record 5.7
(154 von 155 Dateien hash-gleich, Abweichung nur diese Zeile).

## Rollback

Gesamtdauer: unter 10 Minuten. Für eine Person ohne Vorwissen:

1. `git revert -m 1 c565d5cc7aa5af7db133929159043e6f382395e3` auf `main` ausführen.
   Bestätigung: `git log -1` zeigt den Revert-Commit.
   Wenn nicht: Arbeitskopie prüfen (`git status`), Konflikt lösen oder
   abbrechen mit `git revert --abort`.
2. `git push origin main`.
   Bestätigung: der Revert erscheint auf GitHub unter Commits.
   Wenn nicht: Zugriffsrechte prüfen, erneut pushen.
3. Nächtlichen Deploy abwarten oder `gh workflow run deploy.yml --ref main`.
   Bestätigung: der Actions-Lauf endet grün; die Seite zeigt einen
   neuen Build-Zeitstempel im Footer.
   Wenn nicht: AD-5 greift — die Pages behalten den letzten grünen
   Stand; Fehlerlog des Laufs lesen.
4. Keine Datenmigration enthalten; ein Reverse-Pfad entfällt.

Hinweis: Ein Rollback vor dem Merge ist trivial — den PR nicht mergen;
`main` und die Pages bleiben unberührt (Probe 2026-09-01: Branch-Stand
weicht von `main` ab, Live-Seite unverändert — der wirksame
Rollback-Mechanismus dieser Release-Form).

## Nebenbefunde aus der Umsetzung

- Der Nebenbefund "public/manifest.json ist getrackt" aus der Review
  war falsch (Fehldeutung einer check-ignore-Ausgabe); nichts zu tun.
- Die Compiler-Hälfte von Story 5.5 landete im 5.4-Commit `f33330a`
  (gleiche Datei, Hunks nicht getrennt); die Commit-Botschaft nennt
  beide Stories.
