- Bereinigt alle Dockerfiles (market, content, b2b) von COPY gemini_api_key.txt.
- Aktualisiert market_intel_orchestrator.py und b2b_marketing_orchestrator.py, um API-Keys strikt aus Umgebungsvariablen zu lesen.
- Verhindert Build-Fehler durch fehlende lokale Token-Dateien.
- Korrigiert den COPY-Pfad für b2b_marketing_orchestrator.py (liegt im Unterordner).
- Entfernt gemini_api_key.txt COPY-Befehl (Token kommt aus ENV).
- Ermöglicht erfolgreichen Build des Gesamt-Stacks.
- Entfernt PRAGMA journal_mode=WAL, da dies auf dem Synology-Docker-Volume zu persistierenden Transaktions-Rollbacks führt.
- Behält PRAGMA mmap_size=0 und Timeout-Erhöhung bei, um Locking-Probleme im Standard-Journal-Modus zu minimieren.
- Ziel: Erfolgreiche Datenbank-Commits wiederherstellen.
- Setzt PRAGMA synchronous=NORMAL und PRAGMA mmap_size=0.
- Deaktiviert Memory Mapping, da dies auf Docker-Volumes (Synology) oft zu I/O-Fehlern und fehlgeschlagenen Commits führt.
- Soll die mysteriösen ROLLBACKs im Company Explorer beheben.
- Entfernt Abhängigkeit von Umgebungsvariablen für DB-Pfade in config.py (Explorer) und queue_manager.py (Connector).
- Setzt die Pfade fest auf /data/companies_v3_fixed_2.db und /data/connector_queue.db.
- Dies stellt sicher, dass die Anwendungen zwingend auf die korrekt gemounteten Volumes zugreifen.
- Stellt die Docker-Konfiguration von Einzeldatei-Mounts auf Verzeichnis-Mounts (./data:/data) um.
- Dies behebt das Problem der verschwundenen oder asynchronen Datenbanken auf Synology/Docker-Umgebungen.
- Gewährleistet, dass Host-Skripte und Container-Prozesse garantiert auf dieselbe physische Datenbankdatei zugreifen.
- Implementiert die Filter-Logik, die Webhooks nur verarbeitet, wenn sich Name oder Webseite geändert haben.
- Dies verhindert effektiv jede Form von Endlosschleifen (Echos), da unsere eigenen UDF-Updates nun ignoriert werden.
- Stellt den produktiven Standard des Systems wieder her.
- Behebt die kritische Kollision von ProgIDs in der Standard-Konfiguration.
- Führt detailliertes 'Before/After' Logging für alle Feldvergleiche ein.
- Optimiert die Idempotenz-Prüfung, um Webhook-Loops bei identischen Daten zu verhindern.
- Stellt sicher, dass das System auch dann stabil bleibt, wenn User und Bot die gleiche ID 528 teilen.
- Verschiebt alle Datenbank-Mounts im Container nach /data/.
- Verhindert, dass der /app Code-Mount die Datenbankdateien überschreibt oder blockiert.
- Betrifft alle Dienste mit persistenter Datenbank.
- Synchronisiert die Pfade in config.py (Explorer) und queue_manager.py (Connector).
- Ändert den internen Datenbank-Pfad im Company Explorer auf /app/data/.
- Passt die docker-compose.yml an, um Datenbanken nach /app/data/ zu mounten, anstatt direkt nach /app/.
- Dies verhindert, dass der Code-Mount (./company-explorer:/app) den Datenbank-Mount überschreibt oder blockiert.
- Gilt für company-explorer und connector-superoffice.
- Implementierung von Multi-Stage-Builds mit Fokus auf minimales Runtime-Image.
- Nutzung von --no-install-recommends und aggressive Bereinigung von apt-Caches.
- Entfernung von Test-Dateien und Build-Tools aus dem finalen Image.
- Deaktivierung des uvicorn Auto-Reloads für stabilere Produktion-Umgebung.
- Nutzt SQLAlchemy Events, um PRAGMA journal_mode=WAL beim Verbindungsaufbau zu erzwingen.
- Erhöht den SQLite-Timeout auf 30 Sekunden.
- Behebt die COMMIT / ROLLBACK Endlosschleife und Locking-Fehler im Company Explorer.
- Aktiviert den SQLite WAL-Modus für echtes Concurrent Reading/Writing.
- Optimiert get_next_job, um unnötige EXCLUSIVE-Locks zu vermeiden.
- Dies stellt sicher, dass Jobs nach der Verarbeitung korrekt als COMPLETED markiert werden und der Worker nicht in einer Wiederholungsschleife gefangen bleibt.
- Führt clean_text_for_so Hilfsfunktion ein, die KI-Texte auf 200 Zeichen kürzt.
- Vergleicht und sendet nur noch gekürzte Texte an SuperOffice, um Differenzen durch serverseitige Kürzung zu vermeiden.
- Fügt detailliertes Logging für erkannte Änderungen hinzu.
- Verhindert so die Endlosschleife bei Benutzern mit ID 528 (Bot-ID).
- Aktualisiert den Zeitstempel in SuperOffice nur noch dann, wenn auch andere inhaltliche Änderungen vorliegen.
- Dies verhindert, dass der Worker durch seine eigene Zeitstempel-Aktualisierung ständig neue Webhooks triggert (besonders relevant, da User und Bot die gleiche ID 528 teilen).
- Beruhigt das System und führt zu stabilen 'SUCCESS' Zuständen im Dashboard.
- Ändert die Circuit-Breaker-Logik in worker.py, damit Events von ID 528 (Bot/User-ID) nicht mehr sofort übersprungen werden.
- Dies ermöglicht manuelle Änderungen durch den Benutzer, der aktuell dieselbe ID wie der Bot verwendet.
- Mögliche Echos werden weiterhin geloggt, aber zur Verarbeitung freigegeben.
- Wiederherstellung aller Dienste in der mit korrigierten Pfaden (, ).
- Rückverschiebung aktiver Skripte ( etc.) aus dem Archiv an ihre operativen Orte.
- Hinzufügen von zur automatischen Prüfung aller Docker-Pfade.
- Systemstatus: Validiert und bereit für Umzug auf neue Infrastruktur.
- Erweitert die JobQueue um die Methode mark_as_deleted.
- Passt den Worker an, um bei ContactNotFoundException (404) den Status DELETED zu vergeben.
- Verbessert das Logging für den Wackler-Filter.
- Aktualisiert das Dashboard-Styling für den neuen DELETED-Status.
- Aktualisiert die Volume-Mount-Pfade für und .
- Beide Datenbanken wurden in das -Verzeichnis verschoben, die Pfade in der wurden nun entsprechend angepasst.
- Dies behebt die Fehler, bei denen beide Container nach einem Neustart den Zugriff auf ihre Datenbanken verloren haben.
- Aktualisiert den Pfad für das Volume-Mount der in , um auf den neuen Speicherort im -Verzeichnis zu verweisen.
- Behebt den Fehler, bei dem der -Container nach einem Neustart auf eine leere Datenbank zugegriffen hat.
- Fügt eine Early-Exit-Bedingung zum Worker hinzu, um Jobs zu überspringen, die weder eine ContactId noch eine PersonId enthalten.
- Behebt das Problem, dass 'test.ping'-Jobs oder andere fehlerhafte Payloads zu 'FAILED'-Einträgen führen.
- Fügt den expliziten Volume-Mount für die in der wieder hinzu.
- Die vorherige Entfernung dieser Zeile führte dazu, dass der Container nach einem den Zugriff auf die existierende Datenbank verlor und eine neue, leere Datenbank erstellte.
- Entfernt fälschlicherweise gemountete einzelne DB-Dateien, da das gesamte Projekt-Verzeichnis bereits gemountet wird.
- Behebt potentielle Fehler durch fehlende Dateien wie .
- Fügt eine zum hinzu, die bei einem HTTP 404 Fehler ausgelöst wird.
- Fängt diese im ab.
- Markiert Jobs, die sich auf nicht (mehr) existierende Kontakte oder Personen beziehen, als anstatt .
- Dies verhindert, dass die Fehlerwarteschlange mit Jobs für gelöschte Entitäten überläuft, was das Hauptproblem der "failed"-Jobs löst.
- Dokumentiert in GEMINI.md die Lösung für / Fehler in Docker-Containern.
- Beschreibt die Umstellung auf lokale IP-Adresse und token-basierte Authentifizierung für direkte Container-zu-Container-Kommunikation mit Gitea.
- Enthält detaillierte Schritte zur Konfiguration und Verifizierung der Git Remote URL.
- Konsolidiert Dockerfiles in .
- Verschiebt Datenbank- und Log-Dateien in .
- Organisiert Konfigurations- und Modelldateien in .
- Fasst Shell-Skripte in zusammen.
- Verschiebt nach .
- Verschiebt nach .
- Das Verzeichnis wurde in verschoben.
- Behält Kern-Dateien (, , , , etc.) im Root-Verzeichnis, um die Lauffähigkeit zu gewährleisten.
- Organisiert eine Vielzahl von Skripten aus dem Root-Verzeichnis in thematische Unterordner, um die Übersichtlichkeit zu verbessern und die Migration vorzubereiten.
- Verschiebt SuperOffice-bezogene Test- und Hilfsskripte in .
- Verschiebt Notion-bezogene Synchronisations- und Import-Skripte in .
- Archiviert eindeutig veraltete und ungenutzte Skripte in .
- Die zentralen Helfer und bleiben im Root, da sie von mehreren Tools als Abhängigkeit genutzt werden.
- Erstellt eine umfassende README.md im Verzeichnis .
- Beschreibt die Startprozeduren und Abhängigkeiten für den "Fotograf.de Scraper" und den "Google Docs Teilnehmerlisten-Generator".
- Enthält wichtige Hinweise zur manuellen Erstellung von Credentials-Dateien und die Notwendigkeit, diese in Zukunft über Umgebungsvariablen zu verwalten.
- Identifiziert und isoliert die Skripte für den "Fotograf.de"-Scraper und den Google Docs-Listengenerator.
- Verschiebt die zugehörigen Dateien in ein neues Archivverzeichnis (), um sie von den aktiven Projekten zu trennen.
- Fügt -Dateien mit Dokumentation zur Ausführung und den Abhängigkeiten für jedes der archivierten Projekte hinzu.