From 6cddb05b838a0f6b117a20c0d3e4b97c50831f67 Mon Sep 17 00:00:00 2001 From: claude-dev Date: Sat, 11 Apr 2026 16:51:33 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20Quellen-Suffix-Refs=20([22b])=20auf=20Ba?= =?UTF-8?q?sisquelle=20aufl=C3=B6sen=20statt=20Platzhalter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Claude vergibt manchmal Buchstaben-Suffixe an Quellennummern (z.B. [22b] statt [22]). Bisher wurden dafür leere Platzhalter-Quellen erstellt. Jetzt wird geprüft ob die Basisnummer existiert und die Referenz im Text korrigiert. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/agents/orchestrator.py | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/src/agents/orchestrator.py b/src/agents/orchestrator.py index 04a4eed..a1c3b6b 100644 --- a/src/agents/orchestrator.py +++ b/src/agents/orchestrator.py @@ -1152,15 +1152,28 @@ class AgentOrchestrator: defined_nrs.add(nr) # Keep alphanumeric like '389a' missing_nrs = sorted(referenced_nrs - defined_nrs) if missing_nrs: - logger.warning( - "Incident %d: %d Quellennummern im Summary ohne Eintrag in sources: %s", - incident_id, len(missing_nrs), missing_nrs[:20] - ) - # Platzhalter einfuegen damit die Nummern nicht unverlinkt bleiben + truly_missing = [] for nr in missing_nrs: - sources.append({"nr": nr, "name": "Quelle", "url": ""}) - logger.info("Platzhalter fuer fehlende Quelle [%d] eingefuegt", nr) - sources.sort(key=lambda s: int(s.get("nr", 0)) if isinstance(s.get("nr"), int) or (isinstance(s.get("nr"), str) and str(s.get("nr", "")).isdigit()) else 9999) + # Buchstaben-Suffix (z.B. "22b") -> Basisnummer (22) aufloesen + if isinstance(nr, str) and _re.match(r"^\d+[a-z]$", nr): + base_nr = int(nr[:-1]) + if base_nr in defined_nrs: + new_summary = new_summary.replace(f"[{nr}]", f"[{base_nr}]") + logger.info( + "Incident %d: Suffix-Ref [%s] auf Basisquelle [%d] aufgeloest", + incident_id, nr, base_nr + ) + continue + truly_missing.append(nr) + if truly_missing: + logger.warning( + "Incident %d: %d Quellennummern im Summary ohne Eintrag in sources: %s", + incident_id, len(truly_missing), truly_missing[:20] + ) + for nr in truly_missing: + sources.append({"nr": nr, "name": "Quelle", "url": ""}) + logger.info("Platzhalter fuer fehlende Quelle [%s] eingefuegt", nr) + sources.sort(key=lambda s: int(s.get("nr", 0)) if isinstance(s.get("nr"), int) or (isinstance(s.get("nr"), str) and str(s.get("nr", "")).isdigit()) else 9999) # Sicherstellen dass alle nr-Werte Integer sind (Claude liefert manchmal Strings) if sources: