fix: Quellen-Suffix-Refs ([22b]) auf Basisquelle auflösen statt Platzhalter
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) <noreply@anthropic.com>
Dieser Commit ist enthalten in:
@@ -1152,15 +1152,28 @@ class AgentOrchestrator:
|
|||||||
defined_nrs.add(nr) # Keep alphanumeric like '389a'
|
defined_nrs.add(nr) # Keep alphanumeric like '389a'
|
||||||
missing_nrs = sorted(referenced_nrs - defined_nrs)
|
missing_nrs = sorted(referenced_nrs - defined_nrs)
|
||||||
if missing_nrs:
|
if missing_nrs:
|
||||||
logger.warning(
|
truly_missing = []
|
||||||
"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
|
|
||||||
for nr in missing_nrs:
|
for nr in missing_nrs:
|
||||||
sources.append({"nr": nr, "name": "Quelle", "url": ""})
|
# Buchstaben-Suffix (z.B. "22b") -> Basisnummer (22) aufloesen
|
||||||
logger.info("Platzhalter fuer fehlende Quelle [%d] eingefuegt", nr)
|
if isinstance(nr, str) and _re.match(r"^\d+[a-z]$", 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)
|
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)
|
# Sicherstellen dass alle nr-Werte Integer sind (Claude liefert manchmal Strings)
|
||||||
if sources:
|
if sources:
|
||||||
|
|||||||
In neuem Issue referenzieren
Einen Benutzer sperren