# Release 2026-09-02 — Anleitung und Release-Records öffentlich auf Pages

## Was ausgeliefert wird

| Feld | Wert |
|---|---|
| Merge-Commit auf `main` | `1b04624896f78e369cf7d2909588e6f3e507f0e2` (PR #13) |
| Version | 1.2.0 unverändert (`pyproject.toml`); Compiler-Erweiterung ohne Regeländerung |
| Zielumgebung | GitHub Pages, https://deltatree.github.io/BestAiConfig |
| Deploy | Manuell per `workflow_dispatch` (Lauf 33650546733, grün, 5:30 min); live seit Build-Stempel 2026-09-02T15:50:16Z. Ausgelöst von `deltatree` per Claude Code |
| Testnachweis | Volle Suite doppelt grün: GitHub-CI 3:28 min auf Python 3.12 und lokal (651 Tests auf Python 3.14) |
| Verifikation live | `docs/README.md` liefert HTTP 200 und ist byte-identisch zur Quelle; `docs/releases/` trägt 6 Records; `index.html` zeigt die Sektion "Guide and release records"; `manifest.json` enthält kein `docs` |

## Die Änderung

Das Repository bleibt privat. Der Compiler kopiert jetzt die Anleitung
(`README.md`) und jeden Release-Record (`docs/releases/*.md`)
byte-identisch nach `public/docs/`. Die Landing-Page verlinkt sie in
einer eigenen Sektion: Guide zuerst, danach die Records, der neueste
zuerst. Pages liefert nur `public/` aus; Quellen, Compiler und Tests
bleiben unsichtbar.

Absicherung: `docs/` ist im Baum reserviert, steht nie im Manifest und
wird nie in ein Zielprojekt installiert. Der Validate-Gate prüft jede
Doku-Datei auf aktive Inhalte (Script-Tags, Iframes, Javascript-Links),
auf Windows-Zeilenenden und auf genau ein Zeilenende am Schluss. Nur
`README.md` und `releases/*.md` sind unter `docs/` erlaubt. Symlinks
werden nie gefolgt. Ein Test lässt die echten Records des Repos durch
den Gate, damit ein kaputter Record vor dem Nachtlauf auffällt.

Spec: `_bmad-output/implementation-artifacts/spec-public-docs-and-releases-on-pages.md`.

Bekannte Grenze: relative Links der veröffentlichten README auf
Repo-Dateien wie `sources.json` laufen auf der Seite ins Leere. Die
README bleibt bewusst die einzige Quelle.

Zwischenfall im ersten CI-Lauf: `Path.read_text(newline="")` gibt es
erst ab Python 3.13; CI läuft auf 3.12. 61 Tests brachen mit
`TypeError`. Fix `8dcb584` liest die Datei mit `open(...)`. Lehre: Vor
dem Push die Python-Version der CI beachten.

## Abhängigkeiten und Konfiguration

Keine Laufzeit-Abhängigkeiten. Dev-Gruppe laut `uv.lock`: `pytest
9.1.1`. Der Build liest nur `GITHUB_REPOSITORY` (aus der CI-Umgebung)
beziehungsweise `RULES_BASE_URL`; keine Secrets außer dem von GitHub
gestellten `GITHUB_TOKEN` für den Pages-Push.

## Reproduzierbarkeit

Zwei lokale Builds des Merge-Commits mit `GITHUB_REPOSITORY=deltatree/BestAiConfig`
waren byte-identisch, `diff -r` ohne Ausgabe. Die Timestamp-Zeile in
`index.html` bleibt die bekannte Abweichung (NFR-3); beide Builds fielen
hier in dieselbe Sekunde.

## Rollback

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

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