From 4ba66cb51052ce11895035e36c4a429063c9412d Mon Sep 17 00:00:00 2001 From: claude-dev Date: Sun, 2 Aug 2026 18:30:27 +0000 Subject: [PATCH] =?UTF-8?q?feat(studio):=20Einstellungen-Reiter=20je=20Fal?= =?UTF-8?q?l,=20KI-Weg=20w=C3=A4hlbar=20und=20sichtbar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Das Studio konnte Fälle bisher nur anlegen, nicht bearbeiten. Es gab kein Einstellungs-Panel, alle Felder waren nach dem Anlegen eingefroren. Wer etwas ändern wollte, musste zurück in die klassische Ansicht. Für die geplante Ablösung der klassischen Ansicht ist das der erste Blocker. Neuer Reiter Einstellungen in der Fallnavigation, unter Export. Er führt alle Felder des klassischen Bearbeiten-Modals: Titel, Beschreibung, die drei Quellenschalter, Sichtbarkeit, KI-Verarbeitung, Aktualisierung mit Intervall und Startzeit, Aufbewahrung und die drei E-Mail-Benachrichtigungen. Gespeichert wird nur, was sich geändert hat. Zwei Gründe. Der Server aktualisiert feldweise, unverändert zurückgereichte Werte würden trotzdem geschrieben. Und eine unbeabsichtigte Änderung am Intervall kann einen laufenden Zeitplan verstellen. Die Wahl des KI-Wegs, also Anthropic gegen die EU-Fassung über Bedrock Frankfurt, fehlte im Studio vollständig. Sie steht jetzt im Reiter und im Anlege-Dialog, wortgleich zur klassischen Ansicht. Beim Umstellen erscheint ein Hinweis, dass bereits erzeugte Inhalte auf dem bisherigen Weg entstanden sind und die Änderung ab dem nächsten Lauf greift. Läuft gerade ein Schritt, sagt der Reiter das ebenfalls. Dazu die Kennzeichen EU und Anthropic in Fallliste und Kopfzeile. Sie erscheinen nur, wenn der Fall ausdrücklich auf einen Weg gestellt ist. Ohne Angabe gilt die Vorgabe der Organisation, dann bleibt es unbeschriftet. Zwei Feinheiten. Das Intervall wird in der größten glatt aufgehenden Einheit gezeigt, 1440 Minuten also als ein Tag. Und der X-Schalter bleibt bedienbar, wenn der Fall X bereits nutzt, sonst ließe er sich nach dem Wegfall des letzten Zugangs nicht mehr abschalten. Prüfungen ohne Browser und ohne Netzzugriff. 57 Fälle für den Reiter, dazu 29 für die Struktur beider Oberflächen, die prüfen, dass jedes onclick auf eine vorhandene Methode zeigt, dass keine ID doppelt vergeben ist und dass jedes Design-Token ohne Fallback auch definiert ist. Cache-Buster auf 20260802b. Co-Authored-By: Claude Opus 5 (1M context) --- CLAUDE.md | 7 +- src/static/css/studio.css | 109 ++++++++++ src/static/dashboard.html | 6 +- src/static/js/studio.js | 234 +++++++++++++++++++++ src/static/studio.html | 139 ++++++++++++- tests/test_falleinstellungen.js | 359 ++++++++++++++++++++++++++++++++ tests/test_studio_struktur.py | 140 +++++++++++++ 7 files changed, 985 insertions(+), 9 deletions(-) create mode 100644 tests/test_falleinstellungen.js create mode 100644 tests/test_studio_struktur.py diff --git a/CLAUDE.md b/CLAUDE.md index b3ec33c..7423c26 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -136,7 +136,7 @@ src/: static/: index.html: "Login-Seite (Magic-Link), JS inline" dashboard.html: "Hauptdashboard (Sidebar + Reiter-Ansicht + 8 Modals + Chat-Widget)" - studio.html: "Studio (3-Spalten-Werkstatt, online nur fuer info@ sichtbar - Gating rein clientseitig)" + studio.html: "Studio (3-Spalten-Werkstatt, online nur fuer info@ sichtbar - Gating rein clientseitig). Reiter Einstellungen ersetzt das Bearbeiten-Modal der klassischen Ansicht und enthaelt die Wahl des KI-Wegs je Fall." css/: style.css: "AegisSight Design System (Dark/Light Theme, alle Komponenten)" studio.css: "Studio-spezifische Styles" @@ -144,7 +144,7 @@ src/: api.js: "REST-API-Client (fetch, Auth-Header, 30s Timeout, 403 -> Nur-Lese-Modus)" app.js: "Hauptlogik: ThemeManager, NotificationCenter, App-Objekt (181 KB)" components.js: "UI-Rendering: Sidebar, Faktenchecks, Toasts, Progress, Karte (geteilt mit Studio)" - studio.js: "Kompletter Studio-Controller (109 KB)" + studio.js: "Kompletter Studio-Controller (116 KB), enthaelt auch den Einstellungen-Reiter je Fall" chat.js: "Chat-Assistent Widget (Bedienfragen)" pipeline.js: "Grafische Analysepipeline (11 Schritte, Live-Animation)" layout.js: "Reiter-Umschalter je Lage (merkt letzten Reiter; enthaelt noch gridstack-Legacy-Stubs)" @@ -168,6 +168,9 @@ tests/: test_faktencheck_belegtiefe.py: "Belegzaehlung nach Medienhaus, Nachbedingung fuer bestaetigte Fakten, Sperre gegen das Hochstufen von developing, getrennte Bezeichnungen fuer Widerspruch und Widerlegung" test_rss_treffer.py: "Keyword-Matching der RSS-Auswertung: Mehrwort-Begriffe treffen wortweise, Auftrag verlangt Einzelbegriffe und Eigennamen" test_bedrock_wiederholung.py: "Wiederholung des EU-Wegs bei Kapazitaets- und Kontingentfehlern, Staffelung, Zeit- und Wartebudget, Sichtbarkeit im Refresh-Protokoll" + test_sammelaktionen.js: "Sammelaktionen der Seitenleiste im klassischen Dashboard, Auswahlmodus, Filterbeachtung, Loeschbestaetigung (Aufruf mit node)" + test_falleinstellungen.js: "Einstellungen-Reiter im Studio, Formular fuellen, nur Geaendertes speichern, KI-Weg umstellen samt Warnhinweis, Abo nachladen (Aufruf mit node)" + test_studio_struktur.py: "Strukturpruefung beider Oberflaechen ohne Browser, eindeutige IDs, jedes onclick zeigt auf eine vorhandene Methode, Cache-Buster, Design-Tokens" test_quellenausgabe.py: "Ausgabetreue des Quellenverzeichnisses: Nummern aus dem Lagebild statt Zeilennummern, keine Kappung, ein Verlag ein Name, Statistik deckungsgleich mit dem Verzeichnis" ``` diff --git a/src/static/css/studio.css b/src/static/css/studio.css index 632d82e..b183d15 100644 --- a/src/static/css/studio.css +++ b/src/static/css/studio.css @@ -1377,3 +1377,112 @@ .chat-offer-focus{font-size:12px;opacity:.7;margin-bottom:8px;} .chat-offer-btn{cursor:pointer;} .chat-offer-btn:disabled{opacity:.6;cursor:default;} + +/* === Einstellungen des Falls ========================================== */ +/* Ersetzt das Bearbeiten-Modal der klassischen Ansicht. Eine Spalte mit + begrenzter Breite, damit die Felder auf breiten Schirmen nicht auseinander + laufen. */ +.settings-panel { + max-width: 560px; + padding: 4px 2px 16px; +} + +.settings-panel .form-group { + margin-bottom: 16px; +} + +.settings-panel label { + display: block; + margin-bottom: 6px; + font-size: 13px; + font-weight: 500; + color: var(--text-secondary); +} + +.settings-panel .toggle-label { + display: flex; + margin-bottom: 0; +} + +.settings-panel input[type="text"], +.settings-panel input[type="number"], +.settings-panel input[type="time"], +.settings-panel select, +.settings-panel textarea { + width: 100%; +} + +.settings-panel textarea { + min-height: 72px; + resize: vertical; +} + +/* Hinweis auf einen gerade laufenden Schritt */ +.settings-note { + margin-bottom: 16px; + padding: 10px 12px; + border-radius: var(--radius); + border: 1px solid var(--border); + background: var(--bg-elevated); + font-size: 12px; + color: var(--text-secondary); +} + +.settings-note[hidden] { + display: none; +} + +/* Warnung, sobald der KI-Weg vom gespeicherten Stand abweicht */ +.settings-warn { + margin-top: 8px; + padding: 8px 10px; + border-left: 2px solid var(--warning); + background: var(--tint-warning); + color: var(--text-secondary); +} + +.settings-warn[hidden] { + display: none; +} + +.settings-foot { + display: flex; + align-items: center; + gap: 8px; + padding-top: 12px; + border-top: 1px solid var(--border); +} + +/* Der Zustandstext schiebt die Knoepfe nach rechts */ +.settings-state { + flex: 1; + min-width: 0; + font-size: 12px; + color: var(--text-tertiary); +} + +.settings-state.ok { + color: var(--success); +} + +.settings-state.fehler { + color: var(--error); +} + +/* Kennzeichen des KI-Wegs in der Fallliste. Schrumpft nicht, der Titel + kuerzt sich stattdessen. */ +.case-ai-tag { + flex-shrink: 0; + font-size: 10px; + font-weight: 700; + letter-spacing: 0.02em; + text-transform: uppercase; +} + +.case-ai-tag.ai-eu { + color: #10B981; +} + +.case-ai-tag.ai-anthropic { + color: var(--text-disabled); +} diff --git a/src/static/dashboard.html b/src/static/dashboard.html index 040d3f2..6b57189 100644 --- a/src/static/dashboard.html +++ b/src/static/dashboard.html @@ -13,7 +13,7 @@ - +