fix: Report und Alarm-Mail konsistent (gemeinsamer Renderer)
Behebt vier vom Nutzer gemeldete Inkonsistenzen zwischen Report und E-Mail: 1. E-Mail ⊊ Report: Es gab zwei divergierende Renderer (alerter._format_body und __main__._render_markdown). Jetzt EIN gemeinsamer Renderer (scanner/report.py:render_markdown), den beide nutzen → identischer Inhalt, keine Divergenz mehr möglich. 2. KI im Report unsichtbar: Der Report rief klartext_befunde OHNE ai_result auf (KI-Satz fehlte im "Was bedeutet das?") und die Zusammenfassungs-Tabelle hatte keine KI-Zeile. Jetzt: KI-Satz im Klartext + Zeilen "KI-Funde" und "KI nicht geprüft" in der Tabelle. 3. Fehlende URL in Kommandos: approve/report/ai-dismiss standen ohne Target da (nicht ausführbar). Neuer Helfer plain.scanner_cmd(target, rest) injiziert das Target überall → "python -m scanner https://site approve --all". 4. "Level: YELLOW" aber "Score: 0": Der angezeigte Score war nur der Inhalts- Diff-Score; KI-/Cloak-/Asset-Scores flossen ins Level, aber nicht in den Score. cmd_scan/cmd_check aggregieren jetzt alle Teil-Scores → Score und Level passen zusammen. Tests: 254 grün (+4: Body==Report, Kommandos-mit-Target, Score-Anzeige, Level-Badge). alerter._format_body delegiert nur noch an render_markdown. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
125d80e7f9
commit
3ab313e733
5 changed files with 327 additions and 398 deletions
|
|
@ -93,7 +93,25 @@ class TestFormatBody:
|
|||
|
||||
def test_body_contains_level(self):
|
||||
body = _format_body(_report("red"))
|
||||
assert "RED" in body
|
||||
assert "[ALARM]" in body # rotes Level-Badge im technischen Teil
|
||||
assert "🔴" in body # Ampel-Symbol im Klartext-Teil
|
||||
|
||||
def test_body_equals_report_renderer(self):
|
||||
"""E-Mail-Body muss exakt der Dateibericht sein (eine Quelle der Wahrheit)."""
|
||||
from scanner.report import render_markdown
|
||||
rep = _report("yellow")
|
||||
assert _format_body(rep) == render_markdown(rep)
|
||||
|
||||
def test_commands_include_target_url(self):
|
||||
"""Alle Scanner-Kommandos in der Mail enthalten das Target (direkt ausführbar)."""
|
||||
body = _format_body(_report("yellow", "https://meine-seite.de"))
|
||||
assert "python -m scanner https://meine-seite.de approve --all" in body
|
||||
|
||||
def test_score_reflects_findings_not_just_zero(self):
|
||||
"""Bei YELLOW darf der angezeigte Score nicht 0 sein, wenn Gründe vorliegen."""
|
||||
rep = _report("yellow")
|
||||
rep["assessment"]["score"] = 40 # aggregierter Gesamt-Score (z. B. aus KI)
|
||||
assert "Score:** 40" in _format_body(rep)
|
||||
|
||||
def test_body_contains_reasons(self):
|
||||
body = _format_body(_report("yellow"))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue