integrity_scanner_fuer_stat.../TASK.md
Dieter Schlüter 248788e282 fix: M1 exclude_paths '/' jamulix, M2 seed-should_crawl filter, M3 alert dedup
- M1: Removed '/' from jamulix.de exclude_paths (blockaded ALL paths via startswith)
- M2: Seed URLs now pass through should_crawl() in crawler.py
- M3: Alert deduplication via last_alert.json (hash of reasons+level+score)
- Added 11 tests for alert deduplication (277 total, all green)
2026-06-14 21:12:36 +02:00

3.7 KiB

Aufgabe

"Funktioniert das Projekt?"

Erstellt

2026-06-14T17:00:59.565Z

Status

  • Implementierung
  • Review bestanden (PASS)
  • Produktionsreif (SHIP)

Ergebnis

Projekt funktioniert. Alle Checks bestanden:

Check Ergebnis
Module-Import 9/9 Module
Tests 266/266 grün (2.93s)
CLI 14 Subcommands, --help funktioniert
Dependencies requests, bs4, lxml, PyYAML, pytest installiert
Pipeline-Check Crawler → Extractor → Baseline → Differ → Scoring
Echter Check bredelar.info🟢 Score 0, 46 Seiten geprüft
Report-Generierung JSON + Markdown, professionell strukturiert
KI-Analyse OpenRouter primary + localhost Fallback, hash-gegated

Offene Risiken (bekannt)

  • AI-Analyse: Benötigt OPENROUTER_API_KEY im Environment (default: enabled: false → graceful degradation)
  • Audio/Video: Benötigt ffmpeg auf dem System (default: enabled: false)
  • Lokale Server (8001, 8002): Nur Dev-Fallback — im Produktivbetrieb stillschweigend ignoriert

Review (Senior QA)

Urteil: PASS WITH CONCERNS

Major (2)

  • M1: exclude_paths=["/"] bei jamulix.de blockt ALLE Pfade (Config-Bug)
  • M2: Seed-URL umgeht should_crawl-Filter (Code-Bug in crawler.py Zeile 10-16)

Minor (4)

  • Mi1: Test-Coverage für __main__.py nur 10%
  • Mi2: Keine Versions-Pins in requirements.txt
  • Mi3: Kein File-Lock für parallele Scans
  • Mi4: refresh_catalog() ohne Lock bei parallelen Scans

Empfehlung

M1 + M2 fixen → dann PASS.

Review #3 (frisch)

Urteil: PASS WITH CONCERNS (unverändert)

Status

  • Tests: 266/266 grün
  • Module: 11/11 importierbar
  • Pipeline: bredelar.info 🟢 Score 0, 46 Seiten
  • M1 + M2: unverändert (jamulix.de Config-Bug + crawler.py Code-Bug)

Neue Checks (alle OK)

  • Edge Cases bei compare_snapshots: erster Scan, alle weg, identisch
  • Error-Handling bei Crawler-Timeout: korrekt
  • DNS-Fehler bei check_external_links: korrekt
  • AI-Analyzer graceful degradation: korrekt
  • Score-Logik an Thresholds: korrekt
  • Whitelist Subdomain-Handling: korrekt
  • Logging (keine Secrets): korrekt

Review #4 (frisch)

Urteil: PASS WITH CONCERNS (unverändert)

Status

  • Tests: 266/266 grün
  • Module: 11/11 importierbar
  • Pipeline: bredelar.info 🟢 Score 0, 46 Seiten
  • M1 + M2: unverändert (jamulix.de Config-Bug + crawler.py Code-Bug)

Neue Checks (alle OK)

  • _worst_level Logik: korrekt
  • _crawl_and_extract bei 0 Seiten: korrekt
  • extract_page bei langem HTML (1MB): korrekt
  • extract_page bei vielen Links (1000): korrekt
  • compare_snapshots Performance (1000 Seiten): 0.005s
  • compare_snapshots vergleicht text, nicht text_hash: korrekt

Review #5 (Alarm-Mail Deduplizierung)

Urteil: PASS WITH CONCERNS

Neues Major

M3: Keine Alarm-Mail Deduplizierung
Datei: scanner/alerter.py (Zeile 1-21), scanner/__main__.py (Zeile 740, 815)
Befehl: grep -rn "duplicate\|seen_before\|last_alert" scanner/*.pykeine Treffer
Reproduktion: 3 Scans von jamulix.de heute → 3 identische Alarm-Mails (20:40, 20:43, 20:50)
Problem: send_alert() prüft nur Level ≥ min_level. Gleiche Alarme (neue externe Domains) werden bei jedem Scan erneut gemeldet.
Fix: Letzten Alarm-Hash speichern und nur bei Änderung senden.

Status

  • Tests: 266/266 grün
  • M1 + M2: unverändert
  • M3: NEU — Alarm-Mail Deduplizierung fehlt

Zusatzauftrag

2026-06-14T19:02:31.506Z

"Repariere die Beanstandungen."

Status

  • Implementierung
  • Review bestanden (PASS)
  • Produktionsreif (SHIP)