Files
abdulive/docs/handoff.md
T
ZeasyAlexandClaude Opus 5 5f6301268a Native Windows-Auslieferung statt Container
Docker faellt weg. Das Projekt hat keine npm-Abhaengigkeiten und Node fuehrt
TypeScript direkt aus - der Container schrieb nur noch drei Programme fest,
und dafuer braucht es keine Virtualisierung, sondern einen Ordner.

Der Anlass war, dass ADR-0004 zwar `docker compose pull` versprach, es aber
nie ein veroeffentlichtes Image gab. Wer installieren wollte, musste
whisper.cpp aus dem Quelltext uebersetzen.

Plattformschicht (packages/core/src/platform.ts):
- Programme werden neben der Anwendung gesucht, nicht im PATH
- Daten unter %LOCALAPPDATA%, damit Installation und Update ohne
  Administratorrechte auskommen
- Schriften mitgeliefert: ohne fontsdir setzt libass wortlos eine
  Ersatzschrift ein - gemessen 720 statt 826 Pixel Zeilenbreite

Windows-Eigenheiten, an echtem ffmpeg 8.1 durchprobiert:
- Pfade im Filtergraphen brauchen alle drei Schritte (Vorwaertsschraegstriche,
  escapter Doppelpunkt, Anfuehrungszeichen); je zwei davon reichen nicht
- `nice` gibt es nicht, ersetzt durch os.setPriority

Auslieferung:
- scripts/build-package.ts baut das Paket, laeuft auch unter Linux
- install.ps1 ohne Administratorrechte, Autostart ueber den Aufgabenplaner
- update legt neue Fassungen bereit; eingespielt wird beim naechsten Start,
  nie mitten im Stream
- ZIP lesen und schreiben ohne Abhaengigkeiten (packages/core/src/zip.ts)

Kein `irm ... | iex`-Einzeiler: git.zeasy.dev antwortete instanzweit mit einer
Umleitung auf /user/login, und `iex` fuehrte die Anmeldeseite als PowerShell
aus. Der Updater verfolgt Umleitungen jetzt nicht und hat keine erfundene
Vorgabeadresse mehr.

Ausserdem: backup.ps1 war an zwei Stellen dokumentiert, aber nie geschrieben.

ADR-0007 ersetzt ADR-0004. 84 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:39:26 +02:00

5.5 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

Einen Einzeiler zum Nachladen gibt es nicht — git.zeasy.dev ist komplett angemeldet-only. Wo die Pakete liegen sollen, ist die naechste offene Entscheidung, und ohne sie funktioniert auch abdulive update nicht.

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 gebaut und in Teilen geprüft — Manifest, Download, Prüfsumme und Bereitlegen laufen. Der eigentliche Tausch durch launcher.ps1 ist noch nie im Feld passiert. Vor dem ersten echten Update einmal künstlich durchspielen.