diff --git a/docs/handoff.md b/docs/handoff.md index c594fcb..f22a62e 100644 --- a/docs/handoff.md +++ b/docs/handoff.md @@ -1,6 +1,6 @@ # Übergabe -Stand **2026-09-25**, letztes gebautes Paket 0.5.4. Wer hier weitermacht, +Stand **2026-10-04**, letztes gebautes Paket 0.5.4. Wer hier weitermacht, liest zuerst diese Seite, dann [`07-mvp-plan.md`](07-mvp-plan.md). Für Abdu selbst gibt es das [Handbuch](handbuch/handbuch.pdf). @@ -20,7 +20,7 @@ Auslöser bis zum fertigen Short steht im Code vollständig. Geprüft ist sie | S5 Onboarding + Sichtung | offen | | | S6 Erstchatter-Begrüßung | offen | | -281 Tests, alle grün. Was noch fehlt, steht vollständig in +288 Tests, alle grün. Was noch fehlt, steht vollständig in [`offene-punkte.md`](offene-punkte.md). ## Neu: der Dienst läuft zentral @@ -83,9 +83,18 @@ Durchlauf, im Entwurfsmodus. ## Das Overlay steht -Fünf Browser-Sources unter `apps/overlay-web/public`, ausgeliefert vom -Overlay-Server: Einblendungen, Chat, Statusleiste, Effekte, Pausenbild. Kein -Build, kein Framework - OBS lädt die Dateien direkt. +Browser-Sources unter `apps/overlay-web/public`, ausgeliefert vom +Overlay-Server: Einblendungen, Chat, Kamerarahmen, Statusleiste, Effekte, +Pausenbild, Vorlesen, Liegestütze. Kein Build, kein Framework - OBS lädt die +Dateien direkt. + +**Nächste Sitzung: das Overlay wird neu gemacht.** Gestaltung von Grund auf, +nicht nur der Kamerarahmen. Was bleiben sollte, weil es Fehler verhindert, die +man erst im Stream bemerkt: `client.js` (Neuverbinden, Wachhund, +Schnappschuss, `Overlay.esc`), der durchsichtige Hintergrund und die Kontur +aus `theme.css`, `?probe=1` zum Ansehen im Browser. Die Ereignisse auf dem Bus +(`apps/overlay-server/src/bus.ts`) sind die Schnittstelle, an der sich die +neuen Seiten festhalten können. Die Ereignisse kommen über Server-Sent Events statt WebSocket. Warum, und was gegen die tote Browser-Source nach einem Neustart getan ist, steht in @@ -161,6 +170,37 @@ Zeichenketten, jede Belohnung war ohne Meldung unwirksam - auch das Beispiel in `config.example.yaml`. Behoben und getestet; die bestehenden Dateien werden nachweislich gleich gelesen wie vorher. +## Kanalpunkte: Liegestütze + +Seit 2026-10-04 scharf. Die Belohnung „5 Liegestütze" gab es auf Twitch schon +(von Hand angelegt, 61 Einlösungen bis dahin). Sie steht jetzt in der +Hub-Konfiguration mit `aktion: liegestuetze`, `anzahl: 5`, zugeordnet über den +Titel. Wird sie auf Twitch umbenannt, zählt der Hub nicht mehr mit. + +| | | +|---|---| +| Zähler | `apps/hub/src/liegestuetze.ts`, Tabelle `zaehler` (Migration 003), übersteht Neustarts | +| Offen | Einlösung +5. Auf der Übersicht −1/−5/−10, Setzen, auf 0 | +| Gemacht | Was mit −1/−5/−10 abgezogen wird. Setzen zählt nicht, das ist Korrektur. Eigenes Feld zum Korrigieren | +| Neuer Stream | Gemacht auf 0, offen bleibt. Nicht beim Neustart des Hubs mitten im Stream, nicht bei einer Lücke bis 5 Minuten | +| Overlay | `/liegestuetze`, 420×200. `?verstecken=1`, `?gemacht=0`, `?titel=...` | + +**Ungeprüft im Stream.** Getestet mit Probeserver und Browser. Weder eine +echte Einlösung noch das Nullen beim Streamstart ist seit dem Ausrollen +passiert. Der Zähler startete bei 0 offen, die 61 alten Einlösungen sind nicht +übernommen. In OBS ist die Quelle noch nicht eingetragen. + +**Die Belohnung ist nicht über die API angelegt.** Der Hub kann ihre +Einlösungen deshalb nicht als erledigt melden und schreibt bei jeder eine +Warnung ins Log. Für das Zählen egal. Eine ältere Belohnung „10 Liegestütze" +(12 Einlösungen bis 2026-09-24) steht nicht in der Konfiguration. + +**Nebenbei behoben: die Vorlese-Freigabe auf der Übersicht war tot.** +`POST /tts` landete bei der Overlay-Seite `/tts` statt bei der Freigabe, auf +dem Hub ohne Schlüssel sogar mit 403. „Vorlesen", „Ablehnen" und „Sofort +still" haben damit nie gewirkt. Overlay-Seiten werden jetzt nur bei GET +ausgeliefert. Gegen eine echte Warteschlange nicht nachgeprüft. + ## Der Discord-Server steht Dazugekommen seit der letzten Übergabe, und kein Teil des MVP: der @@ -217,6 +257,16 @@ nichts Vertrauliches mehr hineinschreiben, auch nicht in die Doku. (`ZeasyAlex/abdulive`) und `discord` (`ZeasyAlex/abdulive_-discord`). Wer pusht, pusht auf beide, sonst laufen sie auseinander. +**`deploy-hub.sh` schiebt den Arbeitsstand, nicht den Commit.** Liegt +Unfertiges herum, landet es im LXC. Sauber ausrollen aus einem eigenen +Checkout: + +```bash +git worktree add --detach ../abdulive-deploy HEAD +../abdulive-deploy/scripts/deploy-hub.sh +git worktree remove ../abdulive-deploy +``` + Die Begründungen stehen in [`decisions/`](decisions/), acht ADRs. Wer eine davon umwerfen will, liest sie vorher. ADR-0004 (Docker) ist durch ADR-0007 ersetzt; die Analyse darin bleibt lesenswert, weil zwei der vier @@ -417,14 +467,15 @@ malt. Das war vorher nicht zu erraten. `mode: live`. Das ist der kleinste verbleibende Handgriff mit der größten Wirkung. -**Den Kamerarahmen fertig machen** und die Statusleiste damit ablösen. +**Das Overlay neu machen** (nächste Sitzung, siehe oben). Der Kamerarahmen +als Entwurf geht darin auf, die Statusleiste soll ersetzt werden. Danach die +Liegestütze-Quelle in OBS eintragen und im Stream einmal beobachten. **`apps/recap` bauen.** Angefangen, aber nicht committet: `apps/recap/src/recap.ts` und Ergänzungen in `packages/db/src/repos.ts` liegen nur im Arbeitsstand (die Typprüfung meckert dort noch über `url: undefined`). Der Webhook liegt -bereit, der Hub hat die Daten. Achtung: `deploy-hub.sh` schiebt den ganzen -Arbeitsstand, der halbe Recap liegt also schon im LXC. Er wird nur von nichts -aufgerufen. +bereit, der Hub hat die Daten. Seit 2026-10-04 wird aus einem sauberen +Checkout ausgerollt, der halbe Recap liegt also nicht mehr im LXC. **Danach S5.** Nicht wegen des Codes, sondern weil das Werkzeug ohne Sichtungsseite für Abdu nicht bedienbar ist. Die Kette funktioniert, aber sie @@ -458,7 +509,7 @@ auf denselben Klick. Auf dem Stream-PC bleibt das Discord-Token leer. **Der Overlay-Schlüssel steht in der Adresse.** Damit steht er in jedem OBS-Profil und auf jedem Screenshot der Einstellungen. Neu würfeln geht auf -der Übersichtsseite, aber danach müssen alle fünf Adressen in OBS neu +der Übersichtsseite, aber danach müssen alle Adressen in OBS neu eingetragen werden. **Das Overlay hat nie unter Last gelaufen.** Geprüft ist es gegen den