Das Repo hatte keine CI. Der Workflow folgt dem Muster, das im
Nachbarprojekt lserver produktiv läuft: Tag v*.*.* baut, lädt die
Bundles als Artefakte hoch und hängt sie an ein Gitea-Release.
Zwei Jobs. Windows läuft auf dem Runner-Label `windows` (VM 131
winbuild) und liefert MSI und NSIS. Linux läuft bewusst NICHT auf
`ubuntu-latest`: auf diesem Runner ist das Label auf
docker://node:22-bookworm gemappt, also einen Container mit Node, aber
ohne Rust und ohne GTK — der Job wäre bei cargo abgebrochen.
Nachgesehen in /var/lib/gitea-runner/.runner. Das Host-Label heißt
linux-amd64 und hat die vollständige Toolchain.
macOS hat keinen Runner; der Weg für lokale .dmg-Builds steht als
Kommentar im Workflow und in docs/tauri-release.md.
AppImage ist ein eigener Schritt mit continue-on-error, weil es laut
Infrastruktur-Doku an linuxdeploy/FUSE scheitert — deb und rpm sollen
davon nicht mitgerissen werden. APPIMAGE_EXTRACT_AND_RUN und NO_STRIP
sind gesetzt, patchelf war auf dem Runner nicht installiert und wurde
nachgezogen.
Vermerkt ist auch die Falle, die lserver einen Tag CI gekostet hat:
sobald .gitea/workflows/ existiert, ignoriert Gitea .github/workflows/
vollständig — ohne roten Lauf, einfach still.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013HC9HLrUU1LNwkzp8nkDLX
docs/ war leer. Jetzt drei Dateien, jede Behauptung am Code verifiziert:
* deployment.md — docker compose, Migrationsweg, vollständige Env-Referenz
mit den Fallstricken (P-256-taugliches PDS_JWT_SECRET, Pflicht-aber-tot
S3_BUCKET_APPVIEW), Release-Build, systemd-Units, Reverse-Proxy inkl. des
Hinweises, dass die AppView CORS Any liefert und der Proxy den Header
ersetzen statt ergänzen muss, Health-Checks und Cursor-Verhalten beim
Neustart.
* architecture.md — Crate-Verantwortlichkeiten, ASCII-Datenfluss, beide
DB-Schemata. Hält fest, was die Topologie erklärt: die eigene PDS speist
keinen Firehose, eigene Records erreichen die AppView nur über den
Best-Effort-Push.
* tauri-release.md — Signing-Keys, v2-Updater-Config, latest.json, Build pro
Plattform. Der _comment in tauri.conf.json war irreführend: active/dialog
sind v1-Reste, die der v2-Updater ignoriert; dass nichts passiert, liegt
daran, dass niemand check() aufruft und das Plugin nicht installiert ist.
README bekommt Phase 8, eine Doku-Übersicht, korrigierte Testanleitung
(src-tauri ist ein eigener Workspace und wird von cargo test --workspace
nicht erfasst) und einen Abschnitt "Bekannte Lücken" statt der bisher
lückenlosen Erfolgsmeldung.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013HC9HLrUU1LNwkzp8nkDLX