Files
abdulive/docs/handoff.md
T
ZeasyAlexandClaude Opus 5 08f7c21450 Veroeffentlichung ueber Gitea, BOM-Toleranz, Tests fuer den YAML-Leser
Das Repo ist jetzt oeffentlich, die Pakete haengen an der Veroeffentlichung
`latest`. Damit funktioniert `abdulive update` ohne Token.

- config.example.yaml traegt die gepruefte Update-Adresse
- .gitea/workflows/release.yml baut beim Tag und ersetzt `latest`
- Byte Order Mark: Notepad und `Set-Content -Encoding utf8` schreiben eines,
  und ohne Behandlung hiess der erste Schluessel in der config.yaml
  "\ufeffchannel" - die Einstellung waere stillschweigend ignoriert worden
- Der YAML-Leser hatte gar keine Tests; er liest die Konfiguration, an der
  alles haengt. Jetzt acht.

Der Updater ist einmal komplett durchgelaufen: 0.4.0 erkannt, 119 MB geladen,
Pruefsumme geprueft, bereitgelegt, von launcher.ps1 getauscht.

93 Tests, Typpruefung sauber.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AhVSfMFdWnXKCv5JfLnArZ
2026-09-09 17:43:43 +02:00

5.6 KiB

Übergabe

Stand 2026-09-09. Wer hier weitermacht, sollte diese Seite zuerst lesen und danach 07-mvp-plan.md.

Wo das Projekt steht

Vier von sieben Scheiben des MVP „Clip-Knopf" sind gebaut. Die Kette vom Auslöser bis zum fertigen Short steht im Code vollständig — geprüft ist sie überall dort, wo es ohne Abdus Stream-PC ging.

Scheibe Stand Nachweis
S0 Toolchain + Auslieferung fertig check-env nativ ohne harte Fehler, Paket gebaut und installiert
S1 Einrichtung, Auth, DB, Chat fertig Daemon läuft, Chat verbunden, Secrets verschlüsselt
S2 OBS + !clip Code fertig, nicht abgenommen braucht laufendes OBS
S3 9:16-Render fertig Durchlauf mit künstlicher Aufnahme
S4 Untertitel fertig Durchlauf mit echtem deutschen Clip
S5 Onboarding + Sichtung offen —
S6 Erstchatter-Begrüßung offen —

79 Tests, alle grün. Vollständige Liste dessen, was noch fehlt: offene-punkte.md.

Was jemand wissen muss, bevor er etwas anfasst

Es gibt keine Abhängigkeiten und keinen Build. Node 24 bringt SQLite, WebSocket, fetch und die Ausführung von TypeScript mit. node apps/cli/main.ts läuft direkt. Deshalb gilt: nur löschbare TypeScript-Syntax — keine enum, keine Parameter-Properties im Konstruktor, keine namespace. erasableSyntaxOnly in der tsconfig.json erzwingt das und hat schon einen echten Fehler gefangen.

Alles läuft unter einem Dach, in einem Prozess. Schwere Arbeit (ffmpeg, whisper) läuft als Kindprozess und darf abstürzen. Der Ingest darf nie sterben — was er nicht mitschreibt, ist für immer weg.

Zugangsdaten kommen aus der Weboberfläche, nicht aus einer Datei. Sie liegen verschlüsselt neben der Datenbank, aber bewusst nicht in ihr — die Datenbank wird gesichert und weitergereicht, die Geheimnisse nicht.

Rohdateien gehören in den Arbeitsordner, nicht neben den OBS-Puffer. Das war unter Docker ein Zeitproblem (Encodieren über die WSL2-Brücke kostete ein Vielfaches) und ist nativ nur noch Ordnung — der Wiedergabepuffer-Ordner gehört OBS.

Die Begründungen stehen in decisions/, sieben ADRs. Wer eine davon umwerfen will, sollte sie vorher lesen; jede hat einen Grund, der beim Bauen aufgetaucht ist. ADR-0004 (Docker) ist durch ADR-0007 ersetzt — die Analyse darin bleibt trotzdem lesenswert.

Loslegen

Auf Abdus Rechner läuft eine native Windows-Anwendung — kein Docker, kein WSL2, nichts zu übersetzen (ADR-0007):

Expand-Archive .\abdulive-0.5.0-win-x64.zip -DestinationPath .\abdulive
.\abdulive\install.ps1
abdulive fetch-model
abdulive check-env

Das Repo ist seit 2026-09-09 oeffentlich, die Pakete haengen an der Veroeffentlichung latest. Einen irm … | iex-Einzeiler gibt es trotzdem nicht — Rohdateien liefert Gitea als text/plain, und ein Fehlschlag saehe aus wie ein PowerShell-Syntaxfehler statt wie ein Fehlschlag.

Ausführlich in 05-setup.md.

Zum Entwickeln reicht ein Checkout und Node 24 oder neuer:

node apps/cli/main.ts check-env
node --test "packages/**/*.test.ts" "apps/**/*.test.ts"
node scripts/build-package.ts --version 0.5.0     # baut dist/*.zip

Typprüfung (das Einzige, wofür npm gebraucht wird):

npm i typescript@5.9 @types/node
npx tsc --noEmit

Die drei Dinge, die Abdu tun muss

  1. Broadcaster-Konto verbinden. Die beiden Twitch-Apps (dev.twitch.tv/console/apps, Redirect-URI http://localhost:4792/callback) kann auch jemand anders anlegen — sie hängen nicht am Kanal. Was nur Abdu kann: auf der Einrichtungsseite eingeloggt als er selbst auf „Mit Twitch verbinden" klicken. Dafür muss die Anwendung auf seinem Rechner schon laufen; die Seite hört nur auf 127.0.0.1.
  2. OBS einrichten: obs-websocket an (Port 4455), Wiedergabepuffer 90 s, Hotkey auf „Wiedergabepuffer speichern", getrennte Audiospuren.
  3. Layout umstellen nach obs-layout.md. Die Ausrichtungsvorlage in OBS über die Szene legen, Quellen einpassen, wieder ausblenden. Danach calibrate zur Kontrolle.

Ohne Punkt 1 liest das Toolkit den Chat anonym mit und kann nichts senden. Ohne Punkt 2 gibt es keine Clips. Ohne Punkt 3 sitzt der Ausschnitt schief.

Wo ich weitermachen würde

S5. Nicht wegen des Codes, sondern weil das Werkzeug ohne Einrichtungs- Assistenten und Sichtungsseite für Abdu nicht bedienbar ist. Die Kette funktioniert, aber sie hat noch keine Oberfläche, die jemand ohne Erklärung benutzt. Abnahmekriterium steht im Plan: Ein Fremder kommt von „nichts eingerichtet" bis zum ersten eigenen Clip, ohne die Dokumentation zu lesen.

Davor, wenn Gelegenheit ist: S2 an einem laufenden OBS abnehmen. Das ist die einzige ungeprüfte Stelle in der ganzen Kette, und alles Weitere hängt daran.

Womit ich nicht zufrieden bin

Die Untertitel sind brauchbar, nicht gut. ggml-small verhört sich hörbar („Danke" wurde „Dank es"), die Schrift ist unauffällig, und das fortlaufende Einfärben ist nicht der Stil, der auf Shorts trägt. Sechs konkrete Verbesserungen stehen in offene-punkte.md.

Und: Das Aufräumen im Arbeitsordner fehlt komplett. Rohdateien sammeln sich unbegrenzt an. Das ist die Lücke, die als Erstes weh tun wird.

Der Updater ist einmal komplett durchgelaufen: 0.4.0 erkannt, 119 MB von git.zeasy.dev geladen, Prüfsumme geprüft, bereitgelegt, von launcher.ps1 getauscht, pending aufgeräumt. Was noch nie lief, ist die CI-Pipeline.