[KRITISCH] Live-Bot-Code (CT116) divergiert von Forgejo - vor Sync-Reaktivierung auflösen #123

Closed
opened 2026-06-21 18:21:31 +00:00 by orbitalo · 1 comment
Owner

Warum kritisch

Das ist das produktive Homelab-System (hausmeister-bot + die gesamte Homelab-Doku). Es muss IMMER laufen. Aktuell laeuft der Bot auf un-versioniertem Code, der nur durch einen Zufall (deaktivierter Sync) nicht ueberschrieben wird. Das muss sauber aufgeloest werden.

Lage (verifiziert 21.06.2026, read-only)

  • CT116 (homelab-ai-bot, laeuft auf pve-hetzner) startet den produktiven Telegram-Bot hausmeister-bot aus /opt/homelab-ai-bot (ExecStart=/opt/bot-venv/bin/python telegram_bot.py, aktiv seit 05.06.2026).
  • Bind-Mount: Host /opt/homelab-brain/homelab-ai-bot -> CT /opt/homelab-ai-bot.
  • /root/homelab-brain ist nur ein SYMLINK auf /opt/homelab-brain (gleiche .git-Inode 4587529). Es ist also EIN Repo, nicht zwei.
  • Git-Autor "Homelab Cursor homelab@orbitalo.net" = Identitaet frueherer Cursor-Agent-Commits. Kein Fremdzugriff (niemand eingeloggt, letzter Login 13.05. von Pulse).

Die Divergenz (das Risiko)

Der lokale Live-Stand weicht von origin/main ab:

  • 3 Commits fehlen auf origin/main (per git merge-base --is-ancestor geprueft):
    • 00837a43 fix(bot): Systemvorhersage bei OpenRouter-404 nicht als Erfolg senden
    • 4829b012 fix(savetv): keine Aufnahme wenn Film bereits in Jellyfin
    • 16667efb fix(savetv): Batch-Umbenennung fuer Raw-Backlog und NAS-Skript
  • Uncommittete Edits im Arbeitsbaum (3.-5. Juni): homelab-ai-bot/llm.py, telegram_bot.py, monitor.py, core/loki_client.py, JELLYFIN.md, infrastructure/STATE.md u.a. (auch nur lokal).

Die Mine

/opt/homelab-brain/scripts/sync_state.py (REPO=/opt/homelab-brain) macht beim Lauf git reset --hard FETCH_HEAD (Zeile 391) -> wuerde die 3 Commits + ALLE uncommitteten Edits vernichten, der Bot faellt auf den Forgejo-Stand zurueck (verliert savetv-Fixes + OpenRouter-404-Fix).

  • Auto-Sync ist in /etc/crontab seit April DEAKTIVIERT (# DISABLED for patch ...), kein systemd-Timer. Nur deshalb hat die Arbeit ueberlebt.

Bereits gesichert (kein Datenverlust mehr moeglich)

Kompletter Live-Stand (3 Commits + alle uncommitteten/untracked Dateien) als Branch gesichert + nach Forgejo gepusht:

  • backup/live-state-20260621 (Commit eff73994).
  • Snapshot wurde mit temporaerem Index erstellt -> Arbeitsbaum/HEAD/Bot unveraendert.

REGEL bis zur Aufloesung

Den Sync NICHT reaktivieren (Cron-Zeile in /etc/crontab auskommentiert lassen, sync-state.sh nicht manuell starten), bis die Divergenz nach origin/main gebracht ist.

To-Do morgen (in Ruhe, ein Rutsch)

  1. Diff der 3 Commits + der uncommitteten Edits sichten (was ist relevant vs. obsolet). Basis: Branch backup/live-state-20260621.
  2. Entscheiden, was offiziell wird, und sauber nach origin/main bringen (Live == Repo).
  3. Arbeitsbaum sauber machen (uncommittete Edits committen oder verwerfen, .bak/.pyc aufraeumen).
  4. ERST DANN entscheiden, ob der Auto-Sync wieder aktiviert wird - und vorher pruefen, dass reset --hard FETCH_HEAD dann nichts Wertvolles mehr trifft.
  5. Topologie (Symlink/Bind-Mount/Bot-Pfad/Sync-Gefahr) in CT999-Doku festhalten.

Kontext in OpenMemory gespeichert. Verwandt: Telemetrie/Dashboard-Arbeit 20./21.06. (#121, #122).

## Warum kritisch Das ist das produktive Homelab-System (hausmeister-bot + die gesamte Homelab-Doku). Es muss IMMER laufen. Aktuell laeuft der Bot auf **un-versioniertem Code**, der nur durch einen Zufall (deaktivierter Sync) nicht ueberschrieben wird. Das muss sauber aufgeloest werden. ## Lage (verifiziert 21.06.2026, read-only) - **CT116** (`homelab-ai-bot`, laeuft auf pve-hetzner) startet den produktiven Telegram-Bot `hausmeister-bot` aus `/opt/homelab-ai-bot` (`ExecStart=/opt/bot-venv/bin/python telegram_bot.py`, aktiv seit 05.06.2026). - Bind-Mount: Host `/opt/homelab-brain/homelab-ai-bot` -> CT `/opt/homelab-ai-bot`. - **`/root/homelab-brain` ist nur ein SYMLINK auf `/opt/homelab-brain`** (gleiche `.git`-Inode 4587529). Es ist also EIN Repo, nicht zwei. - Git-Autor **"Homelab Cursor <homelab@orbitalo.net>"** = Identitaet frueherer Cursor-Agent-Commits. **Kein Fremdzugriff** (niemand eingeloggt, letzter Login 13.05. von Pulse). ## Die Divergenz (das Risiko) Der lokale Live-Stand weicht von `origin/main` ab: - **3 Commits fehlen auf `origin/main`** (per `git merge-base --is-ancestor` geprueft): - `00837a43` fix(bot): Systemvorhersage bei OpenRouter-404 nicht als Erfolg senden - `4829b012` fix(savetv): keine Aufnahme wenn Film bereits in Jellyfin - `16667efb` fix(savetv): Batch-Umbenennung fuer Raw-Backlog und NAS-Skript - **Uncommittete Edits** im Arbeitsbaum (3.-5. Juni): `homelab-ai-bot/llm.py`, `telegram_bot.py`, `monitor.py`, `core/loki_client.py`, `JELLYFIN.md`, `infrastructure/STATE.md` u.a. (auch nur lokal). ## Die Mine `/opt/homelab-brain/scripts/sync_state.py` (REPO=`/opt/homelab-brain`) macht beim Lauf **`git reset --hard FETCH_HEAD`** (Zeile 391) -> wuerde die 3 Commits + ALLE uncommitteten Edits **vernichten**, der Bot faellt auf den Forgejo-Stand zurueck (verliert savetv-Fixes + OpenRouter-404-Fix). - Auto-Sync ist in `/etc/crontab` **seit April DEAKTIVIERT** (`# DISABLED for patch ...`), kein systemd-Timer. Nur deshalb hat die Arbeit ueberlebt. ## Bereits gesichert (kein Datenverlust mehr moeglich) Kompletter Live-Stand (3 Commits + alle uncommitteten/untracked Dateien) als Branch gesichert + nach Forgejo gepusht: - **`backup/live-state-20260621`** (Commit `eff73994`). - Snapshot wurde mit temporaerem Index erstellt -> Arbeitsbaum/HEAD/Bot **unveraendert**. ## REGEL bis zur Aufloesung **Den Sync NICHT reaktivieren** (Cron-Zeile in `/etc/crontab` auskommentiert lassen, `sync-state.sh` nicht manuell starten), bis die Divergenz nach `origin/main` gebracht ist. ## To-Do morgen (in Ruhe, ein Rutsch) 1. Diff der 3 Commits + der uncommitteten Edits sichten (was ist relevant vs. obsolet). Basis: Branch `backup/live-state-20260621`. 2. Entscheiden, was offiziell wird, und sauber nach `origin/main` bringen (Live == Repo). 3. Arbeitsbaum sauber machen (uncommittete Edits committen oder verwerfen, `.bak`/`.pyc` aufraeumen). 4. ERST DANN entscheiden, ob der Auto-Sync wieder aktiviert wird - und vorher pruefen, dass `reset --hard FETCH_HEAD` dann nichts Wertvolles mehr trifft. 5. Topologie (Symlink/Bind-Mount/Bot-Pfad/Sync-Gefahr) in CT999-Doku festhalten. Kontext in OpenMemory gespeichert. Verwandt: Telemetrie/Dashboard-Arbeit 20./21.06. (#121, #122).
Author
Owner

Gelöst am 2026-06-22

Die Divergenz ist aufgelöst und die Ursache strukturell entschärft. Abgleich mit der To-Do-Liste:

  1. Diffs gesichtet — 3 ungepushte Commits (16667efb, 4829b012, 00837a43) + uncommittete Juni-Edits (llm.py → Grok-4.3, telegram_bot.py Timeout-Refactor, monitor.py Hermes-Checks, core/loki_client.py Error-Filter) als relevant bestätigt.
  2. Sauber nach origin/main — Inzwischen war origin/main um 7 Infra/Doku-Commits weitergewandert (divergent). In einem separaten Worktree (Bot unberührt) auf origin/main aufgebaut: 3 Fixes cherry-picked + 1 sauberer Edit-Commit, konfliktfrei (per merge-tree verifiziert), Fast-Forward gepusht. Live == Forgejo.
  3. Arbeitsbaum gesäubert — getrackte .pyc entfernt (git rm --cached), *.bak/*-bak in .gitignore, Junk-Dateien gelöscht.
  4. Sync-Reaktivierung — mit Härtung statt blind: sync_state.py git_sync() hat jetzt einen Guard: vor git reset --hard FETCH_HEAD wird geprüft, ob der Arbeitsbaum uncommittete Änderungen oder ungepushte Commits hat. Wenn ja → Sync bricht ab + Telegram-Alarm (sync_guard), reset --hard wird übersprungen, Arbeit bleibt erhalten; der Watchdog läuft weiter. Beide Pfade getestet (clean + dirty), Auto-Sync (Cron */15) reaktiviert und per echtem Tick verifiziert. Die „Mine" kann strukturell nichts Wertvolles mehr treffen.
  5. Topologie dokumentiert — CT999-Doku container/ct-116-hausmeister-bot.md aktualisiert (Symlink/Bind-Mount/Bot-Pfad/Sync-Guard/Vorfall).

Endstand: Live-HEAD == origin/main, Arbeitsbaum sauber, Bot läuft, Backup-Branch backup/live-state-20260621 (eff73994) bleibt als Sicherung erhalten.

Folgeschritt (separat, kein Blocker): Architektur-Alternativen zum Eigenbau-Sync evaluieren (gitopper / Forgejo Actions Push-Deploy / Portainer GitOps), da reset --hard im Deploy ein bekanntes Anti-Pattern ist.

Schließe das Issue.

## Gelöst am 2026-06-22 Die Divergenz ist aufgelöst und die Ursache strukturell entschärft. Abgleich mit der To-Do-Liste: 1. **Diffs gesichtet** — 3 ungepushte Commits (`16667efb`, `4829b012`, `00837a43`) + uncommittete Juni-Edits (`llm.py` → Grok-4.3, `telegram_bot.py` Timeout-Refactor, `monitor.py` Hermes-Checks, `core/loki_client.py` Error-Filter) als relevant bestätigt. 2. **Sauber nach `origin/main`** — Inzwischen war `origin/main` um 7 Infra/Doku-Commits weitergewandert (divergent). In einem separaten Worktree (Bot unberührt) auf `origin/main` aufgebaut: 3 Fixes cherry-picked + 1 sauberer Edit-Commit, konfliktfrei (per `merge-tree` verifiziert), Fast-Forward gepusht. **Live == Forgejo.** 3. **Arbeitsbaum gesäubert** — getrackte `.pyc` entfernt (`git rm --cached`), `*.bak`/`*-bak` in `.gitignore`, Junk-Dateien gelöscht. 4. **Sync-Reaktivierung — mit Härtung statt blind:** `sync_state.py` `git_sync()` hat jetzt einen **Guard**: vor `git reset --hard FETCH_HEAD` wird geprüft, ob der Arbeitsbaum uncommittete Änderungen **oder** ungepushte Commits hat. Wenn ja → **Sync bricht ab + Telegram-Alarm (`sync_guard`)**, `reset --hard` wird übersprungen, Arbeit bleibt erhalten; der Watchdog läuft weiter. Beide Pfade getestet (clean + dirty), Auto-Sync (Cron `*/15`) reaktiviert und per echtem Tick verifiziert. Die „Mine" kann strukturell nichts Wertvolles mehr treffen. 5. **Topologie dokumentiert** — CT999-Doku `container/ct-116-hausmeister-bot.md` aktualisiert (Symlink/Bind-Mount/Bot-Pfad/Sync-Guard/Vorfall). **Endstand:** Live-HEAD == `origin/main`, Arbeitsbaum sauber, Bot läuft, Backup-Branch `backup/live-state-20260621` (`eff73994`) bleibt als Sicherung erhalten. **Folgeschritt (separat, kein Blocker):** Architektur-Alternativen zum Eigenbau-Sync evaluieren (gitopper / Forgejo Actions Push-Deploy / Portainer GitOps), da `reset --hard` im Deploy ein bekanntes Anti-Pattern ist. Schließe das Issue.
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#123
No description provided.