neuer Viewport für Admin-Seiten
All checks were successful
Deploy Development / deploy (push) Successful in 54s
Build Test / pytest-backend (push) Successful in 4s
Build Test / lint-backend (push) Successful in 0s
Build Test / build-frontend (push) Successful in 15s

This commit is contained in:
Lars 2026-04-11 11:32:46 +02:00
parent 3541c416f9
commit 28b6fb28d5
3 changed files with 109 additions and 3 deletions

View File

@ -0,0 +1,11 @@
Folgende Ergebnisse des Tests:
- Valididierung gibt immer noch keine Aufschlüsse was für Fehler und Warning es sind, Es zeigt immer nur noch die Anzahl der entsprechenden Fehler/Warnungen
- Speichern als kurzes PopUp -- gut
- In der Node selbst wird nun eine Fehlermeldung ausgegeben. Das ist gut. In größen Workflows aber schwierig den Fehler zu lokalisieren.
- In der automatischen Zusammenfassung in der Endnode kommt als Überschrift, z.B. Node 10, anstatt den Node-Name auszugeben.
- Alle Änderungen an Nodes scheinen automatisch in den Gesamtflow übernommen zu werden. Diese werden dann nach dem Speichern aktiv. Da muss man sehr vorsichtig sein, bei kurzen Änderungen und dem Ausprobieren.
- Der Testlauf "Execute" sollte auf dem aktuellen Workflowstand ausgeführt werden, auch wenn dieser vom gespeicherten Abweicht. Ich würde natürlich vor dem Speichern den Workflow testen können. Prüfe und bewerte diesen Punkt, setze ihn aber noch nicht um.
- Die Workflows werden aktuell nicht in Analyse und den verfügbaren KI-Asuwertungen angezeigt. ggf. weil wir sie aktuell noch keinem Bereich zuordnen können. Diesen könnten wir ggf. über die Start-Node im Workflow konfigurieren.
- Das löschen von Knoten und Kanten funktioniert aktuell nur über Backspace nicht über entfernen
- Wir sollten auch dafür sorgen, dass jeweils nur eine Start-Node, End-Node in einem Workflow existiert, Prüfe ob mehrere End-Nodes sinnvoll sind, da wir ja auch Logik-Pfade abbilden und ggf. auch eine route beschreiten, die ein anderes Ende hat. (Prüfe, ob das heute schon möglich wäre!)
- Als zukünftige Ausbaustufe sollten wir überlegen, ob wir auch Trigger implementieren, z.B. um Kurzstatements zu generieren, wenn neue Daten hereinkommen und wir diese Bewertungen aktualisieren wollen

View File

@ -18,6 +18,8 @@
--header-h: 52px;
--font: system-ui, -apple-system, 'Segoe UI', sans-serif;
--capture-content-max: 800px;
/* Admin: nutzt volle Hauptspalte bis zu dieser Obergrenze (siehe .app-main:has(.admin-shell)) */
--admin-main-max: min(1560px, calc(100vw - 220px));
}
@media (prefers-color-scheme: dark) {
:root {
@ -619,13 +621,16 @@ a.analysis-split__nav-item {
.admin-page {
width: 100%;
min-width: 0;
}
/* Desktop: volle Breite der Admin-Spalte (nicht wie Erfassung 800px); Lesegröße leicht skaliert */
@media (min-width: 1024px) {
.admin-page {
max-width: var(--capture-content-max);
margin-left: auto;
margin-right: auto;
max-width: 100%;
margin-left: 0;
margin-right: 0;
font-size: clamp(15px, 0.88rem + 0.25vw, 18px);
}
}
@ -841,6 +846,11 @@ a.analysis-split__nav-item {
box-sizing: border-box;
}
/* Admin: mehr horizontaler Raum für Tabellen auf großen Screens (:has ~2022+, sonst bleibt 1200px) */
.app-main:has(.admin-shell) {
max-width: var(--admin-main-max);
}
/* Dashboard (P3): Begrüßung + Kennzahlen-Zeile */
.dashboard-greeting {
display: flex;

View File

@ -0,0 +1,85 @@
#!/usr/bin/env python3
"""
Test placeholder resolution in inline templates
This script simulates what happens in workflow_executor.load_prompt_template()
"""
import sys
sys.path.insert(0, 'backend')
from placeholder_resolver import get_placeholder_example_values, get_placeholder_catalog
from prompt_executor import resolve_placeholders
# Test profile_id (use first profile in dev DB)
PROFILE_ID = "019601b5-d65a-738f-a1e7-b3f69bb97f69" # Lars profile from dev
def test_placeholder_resolution():
"""Test the exact same logic as in workflow_executor.load_prompt_template()"""
# Test template with spaces in placeholders (as user showed)
template = "Hallo {{ name }}, du bist {{ age }} Jahre alt und {{ geschlecht }}."
print("=" * 80)
print("PLACEHOLDER RESOLUTION TEST")
print("=" * 80)
print(f"\nTemplate:\n{template}\n")
# Step 1: Load placeholders (same as workflow_executor)
print("Step 1: Loading placeholders...")
processed_placeholders = get_placeholder_example_values(PROFILE_ID)
print(f" Loaded {len(processed_placeholders)} placeholders")
print(f" Sample keys (first 5): {list(processed_placeholders.keys())[:5]}")
# Step 2: Clean keys (same as workflow_executor)
print("\nStep 2: Cleaning keys...")
cleaned_placeholders = {
key.replace('{{', '').replace('}}', '').strip(): value
for key, value in processed_placeholders.items()
}
print(f" Cleaned keys (first 5): {list(cleaned_placeholders.keys())[:5]}")
print(f" Sample values:")
print(f" name = {cleaned_placeholders.get('name')}")
print(f" age = {cleaned_placeholders.get('age')}")
print(f" geschlecht = {cleaned_placeholders.get('geschlecht')}")
variables = cleaned_placeholders
# Step 3: Load catalog
print("\nStep 3: Loading catalog...")
try:
catalog = get_placeholder_catalog(PROFILE_ID)
print(f" Catalog loaded with {len(catalog)} categories")
except Exception as e:
catalog = None
print(f" Catalog failed: {e}")
# Step 4: Resolve placeholders
print("\nStep 4: Resolving placeholders...")
debug_info = {}
resolved = resolve_placeholders(
template=template,
variables=variables,
debug_info=debug_info,
catalog=catalog
)
print(f" Resolved placeholders: {debug_info.get('resolved_placeholders', {})}")
print(f" Unresolved placeholders: {debug_info.get('unresolved_placeholders', [])}")
# Result
print("\n" + "=" * 80)
print("RESULT")
print("=" * 80)
print(f"\nResolved template:\n{resolved}\n")
# Check if placeholders were resolved
if '{{' in resolved:
print("❌ FAILED: Some placeholders were not resolved!")
return False
else:
print("✅ SUCCESS: All placeholders resolved!")
return True
if __name__ == "__main__":
success = test_placeholder_resolution()
sys.exit(0 if success else 1)