Commit graph

27 Commits

Autor SHA1 Nachricht Datum
claude-dev
695983245d fix(bericht): keine Doppelverweise und keine Platzhalter im Quellenverzeichnis
Zwei Befunde aus dem Bericht zu Lage 60 vom 02.08.2026.

1. Doppelte Verweise, ein Folgefehler des Dubletten-Zusammenfuehrens. Zeigten
   zwei Nummern auf dieselbe Adresse, wurden beide Verweise auf dieselbe neue
   Nummer umgeschrieben und standen dann nebeneinander: "[24][24]". Im Bericht
   kam das dreimal vor, in der gespeicherten Fassung nicht. Aufeinanderfolgende
   Verweise auf dieselbe Nummer werden jetzt zusammengezogen.

2. Platzhalter ohne Adresse. Das Modell hatte einen Eintrag {"nr": 12, "name":
   "Quelle", "url": ""} erzeugt. Der Bericht druckte ihn als "12 Quelle" ohne
   Adresse und die Statistik fuehrte ein Medium namens "Quelle". Ein Eintrag
   ohne Adresse ist kein pruefbarer Beleg und kommt nicht mehr ins
   Verzeichnis; der Verweis darauf wird wie ein verwaister behandelt und
   entfernt.

Gegenprobe an Lage 60: aus 30 Eintraegen werden 26 (drei doppelte Adressen
zusammengefuehrt, ein Platzhalter entfernt), die Zaehlung bleibt lueckenlos,
kein doppelter Verweis mehr im Text.

Neu sind 4 Pruefungen, insgesamt laufen 220 ohne Netzzugriff und ohne Kosten.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-02 01:41:28 +02:00
claude-dev
9868a9748a fix(recherche): Suchbegriffe treffen wieder, Verzeichnis ohne Dubletten
Vier Befunde aus dem Vergleich vom 02.08.2026, sortiert nach Wirkung.

1. Mehrwort-Suchbegriffe fielen im RSS-Abgleich durch. Dieselbe Lage lieferte
   je nach Titel 79 oder 17 Treffer. Die Keyword-Erzeugung liefert bei
   politisch formulierten Titeln Phrasen ("migrationskrise spanien",
   "aufnahmeverfahren eu"), das Matching verglich sie als starre Zeichenfolge.
   Die Schlagzeile "Migrationskrise in Spanien" enthaelt "migrationskrise
   spanien" nicht, wegen des Wortes dazwischen. Aus 53 Artikeln wurden so 16.
   Eine Phrase trifft jetzt, wenn alle ihre Bestandteile im Text vorkommen,
   unabhaengig von Reihenfolge und Abstand. Die Genauigkeit bleibt erhalten,
   nur die starre Reihenfolge faellt weg.

   Dazu der Auftrag an die Keyword-Erzeugung: Einzelwoerter statt Phrasen, und
   die harten Eigennamen der Lage sind Pflicht. Bei den betroffenen Laeufen
   fehlte "ceuta" komplett, dafuer stand "europol migration" in der Liste, was
   den Europol-Feed anzog und sieben themenfremde Pressemitteilungen
   einbrachte, die der Topic-Filter danach wieder aussortieren musste.

2. Dubletten im Quellenverzeichnis. Lage 56 fuehrte 30 Eintraege fuer 28
   Adressen, zweimal dieselbe tagesschau-Meldung unter je zwei Nummern.
   Ausgerechnet die strittigste Behauptung, der offene Brief der 22 Staaten,
   stuetzte sich damit auf "3 Quellen", von denen zwei derselbe Artikel waren.
   Gleiche Adresse heisst jetzt ein Eintrag, Verweise auf die entfernte Nummer
   werden auf den behaltenen umgebogen. Verglichen wird ohne Schema, www und
   Endschraegstrich.

3. Die Zeitleiste wird deterministisch sortiert. Im selben Bericht sprang der
   letzte Eintrag von 12:44 zurueck auf 17:47. Der Auftrag verlangt die
   Sortierung zwar vom Modell, im prominentesten Kapitel darf sie aber nicht
   von dessen Sorgfalt abhaengen. Gegenprobe an Lage 56: 23:23, 22:09, 17:47,
   16:58 statt des Sprungs ans Ende.

4. Weiterleitungen zaehlen als ein Beleg. Sie verbergen ihr Zielmedium, also
   laesst sich nicht behaupten, dass dahinter verschiedene Redaktionen stehen.
   Die bisherige Einzelzaehlung stellte den Anthropic-Weg rechnerisch besser:
   in Lage 57 standen 10 ausgewiesene Belege fuer 7 Haeuser, weil vier der elf
   Adressen news.google.com-Weiterleitungen waren.

Gegenprobe an beiden gespeicherten Laeufen: Lage 56 zeigt 28 statt 30
Verzeichniseintraege, beide Berichte zaehlen lueckenlos, die Zeitleiste ist
sortiert.

Neu sind 26 Pruefungen, insgesamt laufen 206 ohne Netzzugriff und ohne Kosten.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-02 00:43:28 +02:00
claude-dev
3495409377 fix(faktencheck): Belegtiefe zaehlt Medienhaeuser, Widerspruch ist keine Widerlegung
Block 2 der Auswertung des Ceuta-Vergleichs vom 01.08.2026. Der Faktencheck der
EU-Fassung zeigte dort drei Fehler, die alle dieselbe Wurzel haben: Der Status
behauptete eine Belegtiefe, die niemand nachgerechnet hat.

1. Die Zaehlung war kaputt. Das Muster fuer die Quellenzaehlung war
   r'https?://' ohne den Rest der Adresse, findall lieferte also eine Liste aus
   "https://"-Bruchstuecken und len(set(...)) ergab immer 1 oder 2. Daher stand
   im Bericht eine Behauptung als BESTAETIGT mit 1 Quelle, obwohl vier Haeuser
   in der Evidenz standen, und der gesamte Faktencheck der Anthropic-Fassung
   wies durchgehend 1 bis 2 Quellen aus. Die Adresse wird jetzt vollstaendig
   erfasst.

2. Gezaehlt wird nach Medienhaus, nicht nach Fundstelle. Sechs France24-Treffer,
   davon vier Videofassungen derselben Meldung, sind ein Haus. Grundlage ist die
   registrierbare Domain aus services/media_registry.py. Weiterleitungsportale
   bekommen keine gemeinsame Identitaet, hinter news.google.com koennen
   beliebige Zeitungen stecken. Nachgerechnet an Lage 53 sinken die Angaben von
   9 auf 6, von 8 auf 4 und von 7 auf 5 Belege.

3. Neue Nachbedingung. pruefe_belegtiefe stuft jeden Fakt ab, dessen Status mehr
   behauptet als vorliegt: confirmed braucht zwei, established drei unabhaengige
   Haeuser. Ein Primaerbeleg (Originalzitat im Interview, amtliche Mitteilung,
   Urteil) traegt allein, dafuer liefert das Modell jetzt "evidence_type". Damit
   verschwindet auch die Unterkonfidenz der Gegenprobe, in der ein ZDF-Interview
   als unbestaetigt galt, obwohl der Kritisierte dort selbst spricht.

4. Die Nachhak-Runde stuft "developing" nicht mehr hoch. Sie hatte die
   Behauptung "Der Ausloeser ist weiterhin unklar" auf BESTAETIGT gesetzt, weil
   developing in der Statusordnung die niedrigste Stufe ist. Eine Unklarheit
   laesst sich nicht bestaetigen. Ausserdem rechnet die Runde die Belegzahl nach
   dem Hochstufen neu und nimmt die Stufe zurueck, wenn die Belege sie nicht
   decken.

5. Widerspruch und Widerlegung sind getrennt. "contradicted" meint laut Auftrag
   Belege, die einander widersprechen, wurde aber als "Widerlegt" angezeigt. Im
   Bericht stand deshalb die sachlich zutreffende Spanne von 50.000 bis 60.000
   Grenzuebertritten als widerlegt, obwohl die Evidenz woertlich sagt "Die
   Zahlen variieren je nach Quelle". Jetzt: contradicted = "Widersprüchlich",
   der neue Status "false" = "Widerlegt" und setzt einen entkraeftenden Beleg
   voraus. Angepasst in Bericht, Oberflaeche, beiden Sprachdateien, Farben und
   Statusordnung.

6. Ein verbindlicher Regelblock haengt an jedem Faktencheck-Auftrag
   (bewertungsregeln()): Unabhaengigkeit heisst verschiedene Medienhaeuser,
   Agenturuebernahmen zaehlen einmal, unterschiedliche Zahlen verschiedener
   Erhebungsstellen sind kein Widerspruch sondern eine Spanne mit Zuordnung,
   und Aussagen ueber den Kenntnisstand ("Der Ausloeser ist unklar") sind keine
   pruefbaren Behauptungen und gehoeren nicht in den Faktencheck.

Die Aenderungen wirken auf beide Modellwege. Die Fixtures in test_eu_factcheck
liefern jetzt Belege aus mehreren Haeusern, weil eine einzelne Quelle keine
Bestaetigung mehr traegt.

Nachgerechnet an beiden gespeicherten Laeufen: kein Fakt wird durch die neue
Nachbedingung abgestuft, die Belegzahlen werden aber durchgehend ehrlicher.

Neu sind 27 Pruefungen, insgesamt laufen 156 ohne Netzzugriff und ohne Kosten.

Offen: Die Oberflaechen-Aenderungen (components.js, app.js, style.css, i18n)
sind noch nicht in den Lokal-Fork portiert.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-01 22:01:30 +02:00
claude-dev
f87d377082 fix(bericht): lueckenlose Quellennummern, Medienname statt Feed-Name
Nachtrag zum Quellenverzeichnis, aufgefallen am Export der EU-Lage 53 vom
01.08.2026.

1. Lueckenlose Zaehlung im Bericht. Das Modell nummeriert alle vorgelegten
   Meldungen durch, zitiert aber nur einen Teil. Das Verzeichnis sprang
   dadurch von 20 auf 22, 24, 26, was fachlich stimmt, beim Leser aber wie
   ein Fehler aussieht. Export und Text werden jetzt gemeinsam auf 1 bis n
   umgeschrieben. Die gespeicherten Nummern bleiben unangetastet, damit sie
   ueber Folge-Refreshes stabil bleiben. Verweise, fuer die es keinen
   Verzeichniseintrag gibt, werden dabei entfernt statt verschoben: nach einer
   Umnummerierung wuerden sie sonst auf einen fremden Eintrag zeigen.

2. Der kuratierte Medienname schlaegt den Feed-Namen. Bisher gewann der
   haeufigste gelieferte Name, und das war der Name des RSS-Feeds. Im Bericht
   stand deshalb "Guardian World", "NYT Top Stories", "BBC Europe" und
   "FT Europe". Jetzt: The Guardian, New York Times, BBC, Financial Times.

3. Weiterleitungsportale werden nicht mehr zusammengefasst. Die Gruppierung
   nach Domain warf in der Anthropic-Fassung vier Zeitungen zusammen, weil
   Deutschlandfunk, Kurier, SZ.de und tagesschau.de dort alle als
   news.google.com-Link vorliegen. Der Umweg wird jetzt in der Statistik
   offen ausgewiesen, statt die Medien zu verschmelzen.

4. Ein Quelleneintrag zerfaellt nicht mehr ueber die Seitengrenze. Nummer und
   Name standen am Fuss der einen, die Adresse am Kopf der naechsten Seite.

Gegenprobe an beiden Laeufen des Ceuta-Vergleichs: Lage 53 zeigt 25 Quellen
lueckenlos von 1 bis 25, Lage 52 22 von 1 bis 22, in beiden Faellen loest
jeder Verweis im Text auf und kein Eintrag zerfaellt ueber eine Seite.

Neu sind 11 Pruefungen, insgesamt laufen 129 ohne Netzzugriff und ohne Kosten.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-01 21:50:38 +02:00
claude-dev
58aec2edd5 fix(bericht): Quellenverzeichnis gibt die Nummern aus dem Lagebild wieder
Der Vergleich zweier Berichte zur selben Lage (Ceuta, 01.08.2026) zeigte in
beiden Fassungen Textverweise, die im gedruckten Verzeichnis nicht auftauchten.
Die EU-Fassung zitierte bis [28] bei 25 aufgefuehrten Quellen, die
Anthropic-Fassung bis [29] bei 22.

Ursache war nicht die Analyse. In der Datenbank passen Text und Liste in beiden
Laeufen exakt zusammen, keine einzige Referenz ohne Eintrag. Das PDF-Template
druckte jedoch die laufende Zeilennummer (loop.index) statt der Quellennummer
aus dem Lagebild (src.nr). Sobald die Nummern Luecken haben, und das ist der
Normalfall, weil nicht jede gesammelte Meldung zitiert wird, verschiebt sich
ab der ersten Luecke jeder Beleg. Lage 53 hat die Nummern 1 bis 20, 22, 24, 26,
27, 28: gedruckt wurde 1 bis 25, aus Quelle 28 wurde Zeile 25.

Behoben:

1. Das Verzeichnis druckt src.nr. Gegenprobe an den echten Daten beider Laeufe:
   vorher fehlten in Lage 53 die Verweise [22] bis [28], jetzt loest jede der
   25 Referenzen auf, in Lage 52 alle 22.

2. Keine Kappung des Verzeichnisses mehr. Im Umfang "Bericht" wurde bei 30
   Eintraegen abgeschnitten, hoehere Referenzen im Text waren damit
   grundsaetzlich unaufloesbar.

3. Die Word-Ausgabe bekommt ueberhaupt erst ein Quellenverzeichnis. Bisher
   verwies der Text dort auf [1], [2], ohne dass die Datei die Nummern
   irgendwo aufloeste.

4. Die Quellenstatistik bezieht sich jetzt auf dieselbe Grundmenge wie das
   Verzeichnis. Vorher zaehlte sie alle gesammelten Artikel (49) und stand
   damit neben einem Verzeichnis mit 25 Eintraegen, was wie eine Aufwertung
   der Quellenbasis wirkte. Die Summe der Spalte Belege entspricht jetzt der
   Zahl der Eintraege, ein Hinweis nennt zusaetzlich die insgesamt
   ausgewerteten Meldungen.

5. Ein Verlag wird unter einem Namen gefuehrt. Bisher trennte der Bericht
   "Guardian UK", "Guardian World" und "The Guardian" oder "tagesschau" und
   "tagesschau.de" in eigene Zeilen und blaehte damit die Vielfaltsstatistik
   auf. Die neue services/media_registry.py bestimmt die Identitaet ueber die
   registrierbare Domain und waehlt den haeufigsten Namen. Aus 20
   Statistikzeilen der EU-Fassung werden so 11 echte Medien. Sie kennt
   ausserdem Weiterleitungsportale und liest die Sprache aus der Adresse,
   sodass english.elpais.com nicht mehr als DE gefuehrt wird.

Neu sind 22 Pruefungen, insgesamt laufen 118 ohne Netzzugriff und ohne Kosten.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-01 21:41:38 +02:00
claude-dev
3e64539aa3 Bericht-Export: "Neueste Entwicklungen" sauber formatieren
Live-Monitoring-Lagen (adhoc) zeigten im Export die Entwicklungen als
Bullet-Liste mit "[DD.MM. HH:MM] Text" und Quellen-Links. Jetzt:

- Abschnitt heisst "Neueste Entwicklungen" statt "Zusammenfassung"
  (Ueberschrift, Inhaltsverzeichnis). Title folgt dem Inhalt.
- Pro Eintrag eigene Datum/Uhrzeit-Zeile (TT.MM.JJ, HH:MM Uhr),
  darunter als eigener Absatz der Meldungstext.
- Keine Links: Quellen-Klammern {Name|URL} und [N]-Zitate werden entfernt.
- Gilt fuer PDF und DOCX. Research-Lagen und KI-Executive-Summary
  unveraendert.

Nebenbei: DOCX-Export crashte bei Beschreibungen ueber 255 Zeichen
(python-docx Core-Property "subject" Limit). Subject wird jetzt gekappt.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 06:50:25 +00:00
Claude (claude-dev)
279df0f56b feat(export): neutrale Export-Variante ohne Firmenbranding
Beim Bericht-Export lässt sich im Modal nun zwischen "Mit
AegisSight-Branding" und "Ohne Firmen-Branding" wählen. Im
neutralen Modus entfallen Logo, AegisSight-Zeile auf dem
Deckblatt und Branding-Footer; die Datei-Metadaten werden
neutralisiert. Das Deckblatt mit Titel, Stand und Ersteller
bleibt erhalten. Betrifft PDF und DOCX.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 18:39:21 +00:00
Claude Code
a2d4c77813 feat(backend): Lokalisierung der weiteren Pipeline-Bereiche
- incidents.enhance_description: ENHANCE_PROMPT_RESEARCH/ADHOC nun pro
  Sprache (DE/EN), Auswahl via _enhance_template(type, org_lang_iso).
- pipeline_tracker.get_pipeline_steps(lang_iso) liefert die Schritt-
  Definition lokalisiert. /api/incidents/{id}/pipeline reicht Org-Sprache
  durch.
- chat._build_prompt(output_language): SYSTEM_PROMPT laesst sich per
  format() in Org-Sprache rendern (nur Output-Anweisung). Chat-Router
  zieht Sprache aus Org-Setting.
- report_generator: FC_STATUS_LABELS_DE/EN + _fc_labels(lang_iso).
  PDF-Template bleibt vorerst deutsch (Phase 9).

Bewusst draussen (Phase 4): entity_extractor (Backend-intern, keine UI),
source_suggester (Admin in Verwaltung), geoparsing (liefert bereits
englische Ortsnamen).

Phase 4 von 8 (eng_demo / Org-Sprache).
2026-05-13 21:04:20 +00:00
b1f8113207 Bericht-Export: drei Verbesserungen
1. Faktencheck immer vollständig
   PDF-Export hatte im scope=report einen [:20]-Cap, der vollständige
   Faktencheck wurde nur bei scope=full gerendert. Jetzt ungekürzt
   überall, sortiert chronologisch absteigend (DB-Sortierung).

2. Status-Labels aus Frontend übernommen
   FC_STATUS_LABELS hatte nur 4 Werte; in der DB existieren aber 7+
   (confirmed/unconfirmed/contradicted/developing/established/
   unverified/disputed). Folge: "contradicted" und drei weitere
   wurden auf englisch ausgegeben. Jetzt 1:1 vom Monitor-UI:
     contradicted → "Widerlegt"
     developing   → "Unklar"
     established  → "Gesichert"
     unverified   → "Ungeprüft"

3. Adhoc-Export: Neueste Entwicklungen statt Executive Summary
   Bei Live-Monitoring-Lagen ist die generische Executive Summary
   weniger aussagekräftig als die kompakten "Neueste Entwicklungen"-
   Bullets. Endpoint nutzt jetzt:
     - adhoc + latest_developments vorhanden → latest_developments
       (Markdown -> HTML konvertiert)
     - adhoc + leer → cached/generierte Executive Summary (Fallback)
     - research → unverändert Executive Summary

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 23:32:36 +02:00
claude-dev
285df86c7b Export-Metadaten: Umlaut-Fix, xmpMM:VersionID + History
- dc:rights und xmpRights:UsageTerms: Empfaenger -> Empfänger (echte Umlaute)
- Scope-Labels: Vollstaendiger Bericht -> Vollständiger Bericht (zwei Stellen)
- DOCX-Fallback-Text: verfuegbar -> verfügbar
- xmpMM:VersionID: Snapshot-Count der Lage (Proxy fuer Berichts-Revision).
  Router laedt COUNT(*) FROM incident_snapshots und reicht es durch.
- xmpMM:History: Audit-Event pro Export als rdf:Seq-Eintrag mit Timestamp,
  softwareAgent, InstanceID, Scope und Version. Single-Event-Format aus
  pragmatischem Grund (pikepdf-API unterstuetzt keine nativen stEvt-
  Strukturen; Raw-XML-Injection waere dafuer noetig).
2026-04-20 19:33:18 +00:00
claude-dev
5add8d9d59 Export-Metadaten: Dublin Core, xmpRights und xmpMM nachruesten
Zusaetzliche XMP-Felder im PDF:
- dc:publisher (Organisation, Fallback AegisSight)
- dc:identifier (urn:aegissight:incident:<id>:<timestamp>)
- dc:date (Dokumentendatum, ergaenzend zu xmp:CreateDate)
- dc:format (application/pdf)
- dc:type (Report)
- dc:rights (Vertraulichkeitshinweis)
- pdf:Producer im XMP gespiegelt
- xmpRights:Marked (True) und xmpRights:UsageTerms (= dc:rights)
- xmpMM:DocumentID + xmpMM:InstanceID (UUIDs, frisch pro Export)

Damit koennen DMS-Systeme die Berichte versionieren, eindeutig
identifizieren und Vertraulichkeitshinweise anzeigen.
2026-04-20 19:23:54 +00:00
claude-dev
949df868ff Export: XMP-Metadatenblock und CreationDate/ModDate via pikepdf nachziehen
WeasyPrint 68.1 schreibt weder XMP noch Create-/ModDate ins PDF. Das Post-
Processing via pikepdf ergaenzt beide:

- Info-Dict: /CreationDate + /ModDate im PDF-Standardformat
  (D:YYYYMMDDHHmmSS+HHmm) aus Incident.created_at / updated_at
- XMP-Block mit Dublin Core (dc:title, dc:creator, dc:description,
  dc:subject, dc:language), PDF (pdf:Keywords) und XMP (CreatorTool,
  CreateDate, ModifyDate, MetadataDate) Namespaces

Damit werden die Exporte sowohl von klassischen Tools (Explorer, Finder)
als auch von DMS-Systemen (SharePoint, Bridge, Acrobat) vollstaendig
indexiert. Fallback: Bei Fehler im Post-Processing wird das Original-PDF
zurueckgegeben, Export schlaegt nie fehl.
2026-04-20 19:15:14 +00:00
claude-dev
9293e66d01 Export-Metadaten: category_labels JSON-robust parsen, Keyword-Sanitizer
- category_labels ist in der DB ein JSON-Dict (primary/secondary/tertiary/
  mentioned), nicht ein Komma-String. Der bisherige split(",") fuehrte dazu,
  dass ein nacktes { als Keyword durchrutschte. WeasyPrint bricht den
  PDF-Keywords-Stream an dieser Stelle ab, weil { in PDF-Syntax eine
  Sonderbedeutung hat — Ergebnis war "OSINT, Live-Monitoring, AegisSight, {".
- Neuer Parser: erst JSON (Dict oder Liste), Fallback auf Komma-String.
- _sanitize_keyword(): filtert {, }, [, ], Backslash und normalisiert
  Whitespace in allen Keywords (Defense in Depth).
2026-04-20 19:09:38 +00:00
claude-dev
c0f68e40a5 Export: PDF/DOCX-Dateimetadaten (Title, Author, Subject, Keywords, Category, Comments)
- Neue Helper-Funktion _build_export_metadata baut einheitliches Metadaten-Dict
- PDF via HTML-Meta-Tags (title, author, description, keywords, generator, lang)
- DOCX via doc.core_properties (title, author, subject, keywords, comments,
  category, last_modified_by, language, content_status, created, modified)
- Keywords aus OSINT + Typ + Organisation + category_labels + Top-5-Orten
- Comments-Feld mit strukturiertem Block (Incident-ID, Typ, Scope, Umfang, Orte)
- Router laedt Organisation + Top-Orte aus article_locations und reicht sie durch
2026-04-20 18:58:34 +00:00
Claude
0ea7f9e305 report-export: verlinkte Zitate in Zusammenfassung und Bericht 2026-04-14 17:55:01 +00:00
claude-dev
3379151fa7 Export: Alle verbleibenden Grautöne auf Navy #0a1832 für Drucklesbarkeit
- PDF: Seitenzahlen, Timeline-Datum/-Quelle, Report-Footer, Lagebild-Timestamp
- DOCX: Dokument-Footer

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 01:17:57 +00:00
claude-dev
96463824a7 Export: Executive Summary → Zusammenfassung, Deckblatt-Farben druckfähig
- Alle sichtbaren "Executive Summary"-Bezeichnungen durch "Zusammenfassung" ersetzt
  (PDF/DOCX-Überschrift, Dateiname, Fallback-Texte)
- Deckblatt-Farben von #888/#aaa auf Navy #0a1832 geändert für
  bessere Lesbarkeit beim Druck (PDF-Template + DOCX)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 00:42:55 +00:00
claude-dev
4358020c83 Export-Fix: published_at als int abfangen (TypeError)
pub kann int sein statt String -- str() Konvertierung vor Slicing.
2026-04-11 22:51:26 +00:00
claude-dev
db662f4538 Zusammenfassung: Kompatibilitaet mit bestehendem ÜBERBLICK
- Frontend + Backend erkennen jetzt sowohl ## ZUSAMMENFASSUNG als
  auch ## ÜBERBLICK als Zusammenfassungs-Sektion
- Inkrementelles Prompt weist Modell an, ÜBERBLICK in
  ZUSAMMENFASSUNG umzubenennen und als Bullet-Points zu formatieren
- Bestehende Lagen zeigen Zusammenfassung sofort in der Kachel
2026-04-11 22:12:23 +00:00
claude-dev
fa12d4cfd6 Export: Zusammenfassung-Sektion, Checkbox-Auswahl, neue Reihenfolge
Research-Briefings:
- Neue Sektion ZUSAMMENFASSUNG mit Bullet-Points als erstes Element
- UEBERBLICK entfernt, durch ZUSAMMENFASSUNG ersetzt
- Inkrementelles Briefing ebenfalls angepasst

Export-System:
- Zusammenfassung wird direkt aus dem Bericht extrahiert (kein
  separater KI-Aufruf mehr fuer Research-Lagen)
- Reihenfolge: Zusammenfassung > Recherchebericht > Faktencheck > Quellen > Timeline
- Sections-basiert statt scope-basiert (rueckwaertskompatibel)
- Checkbox-Dialog statt Radio-Buttons im Frontend
- Bereiche: Zusammenfassung, Recherchebericht, Faktencheck, Quellen, Timeline, Karte
- PDF und DOCX Templates angepasst
- Backend akzeptiert sections-Parameter (kommagetrennt)
2026-04-11 20:56:04 +00:00
Claude Dev
6fc0a8c4f6 fix: Sektions-Ueberschrift "Recherchebericht" statt "Analyse"
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 21:54:57 +01:00
Claude Dev
ca271f3822 fix: Recherche-Export zeigt "Analyse" statt "Lagebild" als Sektions-Ueberschrift
Bei Incidents vom Typ research wird in PDF und DOCX nun korrekt
"Analyse" statt "Lagebild" als Ueberschrift verwendet.
Fallback-Texte auf neutrale Formulierung geaendert.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 21:53:45 +01:00
Claude Dev
d0f99f4e5b Export: Klassifizierung (offen/dienstgebrauch/vertraulich) komplett entfernt 2026-03-25 23:50:57 +01:00
Claude Dev
77c89aa13a Report: Lagebericht kompakter — Limits für Faktencheck/Quellen/Quellenverzeichnis
- Lagebild auf ~4000 Zeichen gekürzt (scope=report), Hinweis auf Vollständigen Bericht
- Faktencheck: Top 20 im Lagebericht (alle im Vollständigen)
- Quellenstatistik: Top 20 im Lagebericht
- Quellenverzeichnis: Top 30 im Lagebericht, URLs kleiner (7pt) mit word-break
- Quellenreferenzen [1234] aus Text entfernt
- Sektionsreihenfolge: Exec Summary -> Faktencheck -> Quellenstatistik -> Lagebild
- Lagebericht jetzt ~8-10 Seiten statt 196
2026-03-25 02:05:29 +01:00
Claude Dev
a1c50cfd96 Fix: Description vom Deckblatt entfernt + Code-Fence Bereinigung im Parser
- Deckblatt zeigt nur noch Titel, Typ, Klassifizierung (keine Description)
- Parser entfernt Markdown Code-Fences vor JSON-Parsing
2026-03-25 01:50:47 +01:00
Claude Dev
cc8c6fd268 Fix: Executive Summary Parser — akzeptiert JSON, Markdown und nummerierte Listen 2026-03-25 01:38:37 +01:00
Claude Dev
f7deafd14a Export-System: PDF/Word mit Executive Summary, Deckblatt, Klassifizierung
- Neuer report_generator.py: WeasyPrint (PDF) + python-docx (Word)
- 3 Stufen: Executive Summary (KI-generiert), Lagebericht, Vollständiger Bericht
- 3 Klassifizierungsstufen: Offen, Nur für den Dienstgebrauch, Vertraulich
- Deckblatt mit AegisSight Logo, Titel, Typ, Klassifizierung
- Executive Summary: Claude Haiku verdichtet Lagebild auf 3-5 Kernpunkte
- Jinja2 HTML-Template für PDF (A4-optimiert)
- Alte Exporte entfernt (Markdown, JSON, Browser-Print)
- Neues Export-Modal im Dashboard (Umfang/Format/Stufe)
2026-03-25 01:28:47 +01:00