- DB-Migration: language und bias Spalten zur sources-Tabelle hinzugefuegt
- Alle 254 Quellen mit Metadaten befuellt (Sprache, politische Ausrichtung)
- SourceResponse-Modell um language/bias Felder erweitert
- Info-Icon (i) mit Hover-Tooltip nach source-group-name eingefuegt
- Tooltip zeigt Typ, Sprache und Ausrichtung der jeweiligen Quelle
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Telegram-Quellen haben kein domain-Feld, daher wurde der interne
Gruppierungsschluessel _single_<id> als Anzeigename verwendet.
Jetzt wird bei _single_-Prefix auf den tatsaechlichen Kanalnamen zurueckgegriffen.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Internationale Quellen, Sichtbarkeit, Faktencheck: Jeder Zustand beginnt in eigener Zeile
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- CSS-only Tooltip-System (.info-icon mit data-tooltip Attribut)
- Modal: Art der Lage, Internationale Quellen, Telegram, Sichtbarkeit, Aufbewahrung
- Dashboard: Faktencheck-Kachel (erklärt Status-Kategorien)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
4 feste Farbstufen (primary/secondary/tertiary/mentioned) mit
variablen Labels pro Lage, die von Haiku generiert werden.
- DB: category_labels Spalte in incidents, alte Kategorien migriert
(target->primary, response/retaliation->secondary, actor->tertiary)
- Geoparsing: generate_category_labels() + neuer Prompt mit neuen Keys
- QC: Kategorieprüfung auf neue Keys umgestellt
- Orchestrator: Tuple-Rückgabe + Labels in DB speichern
- API: category_labels im Locations- und Lagebild-Response
- Frontend: Dynamische Legende aus API-Labels mit Fallback-Defaults
- Migrationsskript für bestehende Lagen
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- CSS: min-height:0 und height:100% für Flex-Container
- JS: Höhe wird immer explizit aus der Gridstack-Kachel berechnet,
nicht nur als Fallback unter 50px
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Neuer Button zwischen Reload und Schließen. Toggled zwischen
normalem Fenster und Vollbild. Icon wechselt zwischen Expand/Collapse.
Schließen und Reset beenden Vollbild automatisch.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Reload-Button (kreisförmiger Pfeil) neben dem Schließen-Button.
Wird erst sichtbar nach der ersten Nachricht. Setzt Konversation
zurück, leert den Verlauf und zeigt die Begrüßung erneut.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Zeigt "X Artikel aus Y Quellen" direkt im Header der Quellenübersicht-Kachel,
sodass die Info auch ohne Aufklappen sichtbar ist.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Phasen haben nur noch Mindest-Floors (queued 2%, recherche 12%,
analyse 35%, faktencheck 65%), keinen Deckel mehr. Der Balken
kriecht global asymptotisch Richtung 95% (0.5% des Restwegs pro
500ms), sodass er nie stehenbleibt. Phasenwechsel geben sichtbare
Boosts nach oben, complete snappt auf 100%.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Balken kriecht jetzt asymptotisch innerhalb jeder Phase
(queued 2-10%, recherche 12-30%, analyse 33-60%, faktencheck 65-92%)
statt bei Phasenwechsel hart zu springen. 3% des Restwegs pro
500ms-Tick sorgt für gleichmäßige Bewegung unabhängig von der
Phasendauer.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- File input in feedback modal (max 3 images, 5 MB each)
- Frontend validation for file count and size
- Backend: multipart/form-data with UploadFile, MIME attachments
- Images attached to feedback email as base64-encoded attachments
- Only JPEG and PNG allowed (validated server-side)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Reset scrollTop on summary-content and factcheck-list containers
so scroll position from previous incident is not preserved.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Prevents brief flash of previous incident content (Lagebild,
Faktencheck, Quellen, Timeline, title) while new data loads.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The double-rAF callbacks from resizeTileToContent fire after the
initial scrollTop=0 reset. Add a scroll event listener that forces
scrollTop=0 during the entire rendering phase, then remove it after
3 animation frames (covering all double-rAF resize callbacks).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove grid-stack-animate class before rendering to prevent CSS
transitions from causing browser scroll-follow to repositioned tiles.
Re-enable animation after content is loaded and scroll is reset.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Der Scroll zum Faktencheck wurde durch den display:none->flex Wechsel
und/oder GridStack-Init ausgeloest. overflow:hidden wird jetzt ganz
am Anfang von selectIncident gesetzt, BEVOR das incident-view
sichtbar wird. Erst 500ms nach Abschluss aller Render-Operationen
wird overflow wiederhergestellt.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Scroll-Event-Listener setzt scrollTop=0 bei jedem Scroll-Versuch
waehrend 500ms nach dem Laden. Verhindert zuverlaessig, dass
GridStack, Leaflet oder Fokus-Aenderungen den View verschieben.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>