Skip to content

fix: Bugfix-Sweep – Worker-Lebensdauer, HTML-Export, RAG-Verdrahtung, Extraktion - #1

Merged
lukisch merged 1 commit into
masterfrom
claude/busy-ride-trvb0o
Oct 6, 2026
Merged

lukisch merged 1 commit into
masterfrom
claude/busy-ride-trvb0o

Conversation

@lukisch

@lukisch lukisch commented Oct 6, 2026

Copy link
Copy Markdown
Collaborator

Zusammenfassung

Code-Review mit anschließenden Fixes. Die schwersten Befunde:

  • App-Abbruch: QThread: Destroyed while thread is still running. Ein Worker wurde schon im Abschluss-Slot verworfen, eine laufende Extraktion wurde ersetzt, und closeEvent hat nicht auf Worker gewartet.
  • HTML-Export: Er erlaubte Script-Injection, z. B. <img onerror>, <script> oder javascript:-Links aus LLM-Ausgaben.
  • RAG:
    • Embeddings liefen synchron im GUI-Thread.
    • Nach einem Wechsel in den Einstellungen konnte der Chat Chunks aus fremden Projekten abfragen.
    • Die angezeigte „Konfidenz“ war in Wahrheit eine Distanz.
  • Verlorene Dateien: Dateien aus Menü, Toolbar oder „Ordner hinzufügen“ wurden nie extrahiert.

Fixes

  • Worker: neues src/gui/worker_utils.py (retain_until_finished, stop_workers). Alle Worker laufen über _start_tracked_worker. Abbruch über requestInterruption, und closeEvent wartet auf alle Worker.
  • Export: ReportExporter.markdown_to_html escaped den gesamten Text und erlaubt nur http, https und mailto als Link-Schema. Der Titel wird escaped. Die GUI nutzt diese eine Implementierung.
  • TXT-Export entfernt nur noch Markdown-Syntax (C#, #12 und file_name bleiben erhalten). YAML-Front-Matter wird per json.dumps gequotet. Pandoc läuft mit Timeout und klaren Fehlermeldungen.
  • RAG:
    • Indexierung über den bestehenden Index-Worker.
    • Der Chat bekommt immer den aktuellen DocumentManager; ohne Dokumentfilter keine RAG-Abfrage.
    • Relevanz-Scores statt Distanz.
    • Re-Index bettet zuerst ein und ersetzt erst danach.
    • Index-Flags werden synchronisiert.
  • Projekte: Neue Projekte übernehmen die gespeicherte LLM-Konfiguration. Öffnen erfolgt per ID. Das aktuelle Projekt wird vor dem Wechsel gespeichert. Projektordner bekommen ein uuid-Suffix.
  • Dateien: Alle Hinzufüge-Wege starten die Extraktion, und die Warteschlange verliert keine Dateien mehr. Die unterstützten Dateitypen stehen in einer gemeinsamen Liste (.pptx/.html/.htm neu dabei, .odt/.ods entfernt).
  • Extraktion:
    • Excel behält 0/False.
    • RTF: \uN-Fallback wird korrekt übersprungen, Multibyte-Codepages werden richtig dekodiert.
    • BOM/UTF-16-Erkennung.
    • PPTX-Folien in numerischer Reihenfolge.
    • fitz/openpyxl/extract_msg werden geschlossen.
  • Sonstiges:
    • Ollama-Verfügbarkeit wird lazy und erneut geprüft.
    • Der Chat rendert Plaintext.
    • Translator erkennt deutsche Hinweiswörter jetzt nur als ganze Wörter.
    • Companion-Notizen werden per Projekt-ID gespeichert (workspace.id im Export, abwärtskompatibel).

Tests

  • python -m pytest -q mit der vollständigen requirements.txt (langchain, chromadb): 147 passed, 3 skipped (vorher 103 passed).
  • 44 neue Regressionstests in tests/test_bugfixes_2026_10.py.
  • Web Companion: npm test → 60/60 (2 neue Tests).
  • tests/linux_platform_smoke.py → ok.

Nicht enthalten: eigene Chroma-Collections pro Projekt. Das ist unnötig, weil Dokument-IDs uuid4 sind und jede Abfrage nach IDs gefiltert wird. Ebenfalls nicht enthalten: ein persistenter Extraktions-Cache.

🤖 Generated with Claude Code

https://claude.ai/code/session_014VFa8w68q2cEYMqHQqfiH2


Generated by Claude Code

… Extraktion

- QThread-Worker werden bis finished gehalten (kein "Destroyed while
  thread is still running"), closeEvent stoppt und wartet auf Worker,
  laufende Extraktion wird nicht mehr ersetzt (worker_utils.py)
- HTML-Export: gesamter Text wird escaped, Titel escaped, nur
  http/https/mailto-Links; GUI nutzt den gehärteten ReportExporter
- RAG: Indexierung nicht mehr synchron im GUI-Thread; Chat bekommt immer
  den aktuellen DocumentManager (keine projektfremden Chunks); Relevanz
  statt Distanz als Konfidenz; Re-Index bettet erst ein, dann ersetzt er
- Projekte: neue Projekte übernehmen die gespeicherte LLM-Konfiguration,
  Öffnen per ID, aktuelles Projekt wird vor dem Wechsel gespeichert,
  eindeutige Projektordner
- Dateien aus Menü/Ordner werden extrahiert, Warteschlange verliert keine
  Dateien mehr; Dateitypen aus einer gemeinsamen Liste (.pptx/.html)
- Extraktion: Excel-Nullwerte, RTF-\uN/Codepages, BOM/UTF-16, PPTX-
  Folienreihenfolge, Ressourcen werden geschlossen
- TXT-Export entfernt nur Markdown-Syntax; YAML-Front-Matter gequotet;
  Pandoc mit Timeout; Chat rendert Plaintext; Ollama-Verfügbarkeit wird
  erneut geprüft; Translator-Wortgrenzen; Companion-Notizen per Projekt-ID

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014VFa8w68q2cEYMqHQqfiH2
@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown

Welcome! 👋 Thanks for your first pull request in this repository.

A maintainer will review it soon. Please make sure:

  • Your changes are tested
  • Documentation is updated if needed
  • The PR description explains what and why

Thanks for contributing!

@lukisch
lukisch merged commit fd6c9f2 into master Oct 6, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants