Session 2026-04-26: 5vor8 kaputte Telegram-Links — Strukturfix + Pre-Send-HEAD-Check #86

Open
opened 2026-04-26 18:28:50 +00:00 by orbitalo · 0 comments
Owner

Was wurde gemacht

User meldete einen 404-Link in einem 5vor8-Telegram-Post (@Diendemleben_bot). Diagnose ergab eine LLM-URL-Halluzination: das Modell qwen-2.5-72b-instruct (über OpenRouter) ersetzte beim Reproduzieren der WordPress-URL Bindestriche durch Underscores (covid-injektionen -> covid_injektionen) und erzeugte damit 404er.

Zwei-stufige Verteidigung deployt:

1. Strukturfix (CT 109 / rss-manager)

  • Datei: /opt/rss-manager/auto_5vor8.py
  • Helper _enforce_correct_link(text, wp_url) strippt nach der KI-Antwort alle arakavanews.com-URLs aus dem Output und setzt deterministisch die echte wp_url ein (aus der WordPress-REST-API-Response).
  • Damit ist eine falsche URL strukturell unmöglich, egal was die KI ausgibt.
  • Mitcommittet: ausstehender 16.04.-Fix (OpenRouter-URL+Bearer, Sarkasmus-Prompt, 72b-Modell).
  • Commit: 393032f — gepusht zu orbitalo/rss-manager.

2. Defense-in-Depth (CT 112 / fuenfvoracht)

  • Datei: /opt/fuenfvoracht/src/bot.py
  • Helper _check_arakava_links(text) pingt vor jedem bot.send_* jede arakavanews.com-URL per HEAD (stdlib urllib, keine zusätzliche Dependency).
  • Liefert eine URL nicht 200, wird das Posting abgebrochen, Artikel bleibt approved, Reviewer-Alarm geht raus.
  • Fängt drei Bug-Klassen ab: KI-Halluzinationen die Stufe 1 verpasst, nachträglich gelöschte WP-Posts, Cloudflare/WP-Ausfälle.
  • Commit: 61b1fd3 — gepusht zu orbitalo/fuenfvoracht.
  • Bot-Container neu gebaut via docker compose up -d --build bot.

Verifikation

  • _enforce_correct_link im echten CT-109-Container getestet: kaputte URL wird strukturell durch korrekte ersetzt.
  • _check_arakava_links im echten Bot-Container getestet: HTTP 200 ✓, HTTP 404 wird erkannt und mit Fehlertext zurückgegeben.

Infra-Änderungen

  • Keine. Reine Code-Anpassungen in den jeweiligen App-Repos.

Probleme & Lessons Learned

  • git stash drop zu früh: Hatte vor dem git rebase 3 fremde Files gestasht, dann den Stash gedropt bevor er wiederhergestellt war. Stash wurde über den Hash aus dem Dropped-Output mit git stash apply <hash> zurückgeholt. Lehre: Niemals git stash drop machen ohne explizit geprüft zu haben dass die Inhalte zurück im Working Tree sind. Besser direkt git pull --rebase --autostash.
  • Repos sind eigenständig, nicht bind-mount: rss-manager und fuenfvoracht haben jeweils eigene Forgejo-Repos auf den CTs. Auto-Sync trifft auf diese nicht zu. Bei Commits: nur eigene Files mit git add <file> stagen, niemals -a, da fremde uncommitted Mods aus parallelen Sessions im WT liegen.
  • requests fehlt im Bot-Container: In requirements-bot.txt nicht enthalten. Bestehender import requests as _rq im Memory-Service-Event-Block ist stiller Bug (→ Memory-Events gehen nie raus). Fix nutzt deshalb stdlib urllib.
  • homelab-brain-Verzeichnisse: Sowohl fuenfvoracht/ als auch fuenfvoacht/ (Tippfehler) existieren. Aktiv ist fuenfvoracht/ (→ in OpenMemory dokumentiert).

Nächste Schritte

  • Nächsten Auto-5vor8-Run beobachten (passiert beim nächsten Dr.-Bines-Substack-Artikel automatisch in CT 109). Im Log auf 5vor8 KI-Text generiert fuer: achten und resultierenden Telegram-Post in @DieneDemLeben auf korrekte URL prüfen.
  • Sollte je ein Pre-Send-HEAD-Check auslösen: Reviewer-Notification erscheint im Bot-Channel mit ⛔ Posting abgebrochen — kaputter Link! und der konkreten URL inkl. Status. Der Artikel bleibt approved, also manuell editieren oder aus DB flöhen.
  • Optional später: requests zu requirements-bot.txt hinzufügen, damit der Memory-Service-Event-Block in bot.py (Zeile ~248) endlich funktioniert.

Betroffene Systeme

  • CT 109 (rss-manager): auto_5vor8.py geändert, Service neu gestartet (systemctl restart rss-manager), läuft.
  • CT 112 (fuenfvoracht): src/bot.py geändert, Bot-Container neu gebaut + gestartet, bot_started-Event im Log.
  • Forgejo-Repos: orbitalo/rss-manager (393032f), orbitalo/fuenfvoracht (61b1fd3).
## Was wurde gemacht User meldete einen 404-Link in einem 5vor8-Telegram-Post (`@Diendemleben_bot`). Diagnose ergab eine **LLM-URL-Halluzination**: das Modell `qwen-2.5-72b-instruct` (über OpenRouter) ersetzte beim Reproduzieren der WordPress-URL Bindestriche durch Underscores (`covid-injektionen` -> `covid_injektionen`) und erzeugte damit 404er. Zwei-stufige Verteidigung deployt: ### 1. Strukturfix (CT 109 / `rss-manager`) - Datei: `/opt/rss-manager/auto_5vor8.py` - Helper `_enforce_correct_link(text, wp_url)` strippt nach der KI-Antwort **alle** `arakavanews.com`-URLs aus dem Output und setzt deterministisch die echte `wp_url` ein (aus der WordPress-REST-API-Response). - Damit ist eine falsche URL strukturell unmöglich, egal was die KI ausgibt. - Mitcommittet: ausstehender 16.04.-Fix (OpenRouter-URL+Bearer, Sarkasmus-Prompt, 72b-Modell). - Commit: `393032f` — gepusht zu `orbitalo/rss-manager`. ### 2. Defense-in-Depth (CT 112 / `fuenfvoracht`) - Datei: `/opt/fuenfvoracht/src/bot.py` - Helper `_check_arakava_links(text)` pingt vor jedem `bot.send_*` jede `arakavanews.com`-URL per HEAD (stdlib `urllib`, keine zusätzliche Dependency). - Liefert eine URL nicht 200, wird das Posting abgebrochen, Artikel bleibt `approved`, Reviewer-Alarm geht raus. - Fängt drei Bug-Klassen ab: KI-Halluzinationen die Stufe 1 verpasst, nachträglich gelöschte WP-Posts, Cloudflare/WP-Ausfälle. - Commit: `61b1fd3` — gepusht zu `orbitalo/fuenfvoracht`. - Bot-Container neu gebaut via `docker compose up -d --build bot`. ### Verifikation - `_enforce_correct_link` im echten CT-109-Container getestet: kaputte URL wird strukturell durch korrekte ersetzt. - `_check_arakava_links` im echten Bot-Container getestet: HTTP 200 ✓, HTTP 404 wird erkannt und mit Fehlertext zurückgegeben. ## Infra-Änderungen - Keine. Reine Code-Anpassungen in den jeweiligen App-Repos. ## Probleme & Lessons Learned - **`git stash drop` zu früh**: Hatte vor dem `git rebase` 3 fremde Files gestasht, dann den Stash gedropt bevor er wiederhergestellt war. Stash wurde über den Hash aus dem `Dropped`-Output mit `git stash apply <hash>` zurückgeholt. Lehre: Niemals `git stash drop` machen ohne explizit geprüft zu haben dass die Inhalte zurück im Working Tree sind. Besser direkt `git pull --rebase --autostash`. - **Repos sind eigenständig, nicht bind-mount**: `rss-manager` und `fuenfvoracht` haben jeweils eigene Forgejo-Repos auf den CTs. Auto-Sync trifft auf diese nicht zu. Bei Commits: nur eigene Files mit `git add <file>` stagen, niemals `-a`, da fremde uncommitted Mods aus parallelen Sessions im WT liegen. - **`requests` fehlt im Bot-Container**: In `requirements-bot.txt` nicht enthalten. Bestehender `import requests as _rq` im Memory-Service-Event-Block ist stiller Bug (→ Memory-Events gehen nie raus). Fix nutzt deshalb stdlib `urllib`. - **homelab-brain-Verzeichnisse**: Sowohl `fuenfvoracht/` als auch `fuenfvoacht/` (Tippfehler) existieren. Aktiv ist `fuenfvoracht/` (→ in OpenMemory dokumentiert). ## Nächste Schritte - Nächsten Auto-5vor8-Run beobachten (passiert beim nächsten Dr.-Bines-Substack-Artikel automatisch in CT 109). Im Log auf `5vor8 KI-Text generiert fuer:` achten und resultierenden Telegram-Post in `@DieneDemLeben` auf korrekte URL prüfen. - Sollte je ein Pre-Send-HEAD-Check auslösen: Reviewer-Notification erscheint im Bot-Channel mit `⛔ Posting abgebrochen — kaputter Link!` und der konkreten URL inkl. Status. Der Artikel bleibt `approved`, also manuell editieren oder aus DB flöhen. - Optional später: `requests` zu `requirements-bot.txt` hinzufügen, damit der Memory-Service-Event-Block in `bot.py` (Zeile ~248) endlich funktioniert. ## Betroffene Systeme - **CT 109** (`rss-manager`): `auto_5vor8.py` geändert, Service neu gestartet (`systemctl restart rss-manager`), läuft. - **CT 112** (`fuenfvoracht`): `src/bot.py` geändert, Bot-Container neu gebaut + gestartet, `bot_started`-Event im Log. - **Forgejo-Repos**: `orbitalo/rss-manager` (`393032f`), `orbitalo/fuenfvoracht` (`61b1fd3`).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: orbitalo/homelab-brain#86
No description provided.