feat: Phase 0 - Workflow Engine Foundation
Backend:
- DB-Migration 034: workflow_definitions, workflow_question_catalog, workflow_executions
- ai_prompts.question_augmentations JSONB-Spalte (Hybridmodell: Prompt-Defaults)
- 6 Grundtypen Fragenergänzungen mit Normalisierungsregeln (Seed-Daten)
- Pydantic-Modelle (16 Models, 11 Enums) in workflow_models.py
- Workflow-Engine: Graph-Parsing, Topologische Sortierung, DAG-Validierung
- Dispatcher-Erweiterung type='workflow' (Stub für Phase 1-3)
- Adjacency Lists, Erreichbarkeits-Prüfungen, Zyklen-Erkennung
Testing:
- 22 Unit-Tests (alle bestanden): Graph-Parsing, Validierung, Topologische Sortierung
- Fixtures: simple_valid_graph, parallel_graph, branching_graph
Version:
- APP_VERSION 0.9i
- DB_SCHEMA_VERSION 20260403
- Module: workflow 0.1.0
Anforderungsanalyse: .claude/task/Workflow_engine_prompting_engine/anforderungsanalyse_umsetzungsplan.md
Konzept-Basis: .claude/task/Workflow_engine_prompting_engine/konzept_workflow_engine_konsolidated.md
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 16:55:51 +02:00
|
|
|
|
"""
|
|
|
|
|
|
Application Version Information
|
|
|
|
|
|
|
|
|
|
|
|
Semantic Versioning: MAJOR.MINOR.PATCH
|
|
|
|
|
|
- MAJOR: Breaking Change, DB-Migration inkompatibel
|
|
|
|
|
|
- MINOR: Neues Feature, neues Modul
|
|
|
|
|
|
- PATCH: Bugfix, kleine Änderung, Refactor
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
2026-09-12 14:35:57 +02:00
|
|
|
|
APP_VERSION = "0.9v"
|
|
|
|
|
|
BUILD_DATE = "2026-09-12"
|
2026-09-13 10:36:08 +02:00
|
|
|
|
DB_SCHEMA_VERSION = "20260912e" # 068 nutrition unmapped/recipe indexes
|
feat: Phase 0 - Workflow Engine Foundation
Backend:
- DB-Migration 034: workflow_definitions, workflow_question_catalog, workflow_executions
- ai_prompts.question_augmentations JSONB-Spalte (Hybridmodell: Prompt-Defaults)
- 6 Grundtypen Fragenergänzungen mit Normalisierungsregeln (Seed-Daten)
- Pydantic-Modelle (16 Models, 11 Enums) in workflow_models.py
- Workflow-Engine: Graph-Parsing, Topologische Sortierung, DAG-Validierung
- Dispatcher-Erweiterung type='workflow' (Stub für Phase 1-3)
- Adjacency Lists, Erreichbarkeits-Prüfungen, Zyklen-Erkennung
Testing:
- 22 Unit-Tests (alle bestanden): Graph-Parsing, Validierung, Topologische Sortierung
- Fixtures: simple_valid_graph, parallel_graph, branching_graph
Version:
- APP_VERSION 0.9i
- DB_SCHEMA_VERSION 20260403
- Module: workflow 0.1.0
Anforderungsanalyse: .claude/task/Workflow_engine_prompting_engine/anforderungsanalyse_umsetzungsplan.md
Konzept-Basis: .claude/task/Workflow_engine_prompting_engine/konzept_workflow_engine_konsolidated.md
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 16:55:51 +02:00
|
|
|
|
|
|
|
|
|
|
MODULE_VERSIONS = {
|
|
|
|
|
|
"auth": "1.2.0",
|
|
|
|
|
|
"profiles": "1.1.0",
|
2026-04-07 10:15:13 +02:00
|
|
|
|
"reference_values": "1.3.0",
|
2026-04-06 19:51:23 +02:00
|
|
|
|
"admin_reference_value_types": "1.0.0",
|
feat: Phase 0 - Workflow Engine Foundation
Backend:
- DB-Migration 034: workflow_definitions, workflow_question_catalog, workflow_executions
- ai_prompts.question_augmentations JSONB-Spalte (Hybridmodell: Prompt-Defaults)
- 6 Grundtypen Fragenergänzungen mit Normalisierungsregeln (Seed-Daten)
- Pydantic-Modelle (16 Models, 11 Enums) in workflow_models.py
- Workflow-Engine: Graph-Parsing, Topologische Sortierung, DAG-Validierung
- Dispatcher-Erweiterung type='workflow' (Stub für Phase 1-3)
- Adjacency Lists, Erreichbarkeits-Prüfungen, Zyklen-Erkennung
Testing:
- 22 Unit-Tests (alle bestanden): Graph-Parsing, Validierung, Topologische Sortierung
- Fixtures: simple_valid_graph, parallel_graph, branching_graph
Version:
- APP_VERSION 0.9i
- DB_SCHEMA_VERSION 20260403
- Module: workflow 0.1.0
Anforderungsanalyse: .claude/task/Workflow_engine_prompting_engine/anforderungsanalyse_umsetzungsplan.md
Konzept-Basis: .claude/task/Workflow_engine_prompting_engine/konzept_workflow_engine_konsolidated.md
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 16:55:51 +02:00
|
|
|
|
"weight": "1.0.3",
|
|
|
|
|
|
"circumference": "1.0.1",
|
|
|
|
|
|
"caliper": "1.0.1",
|
2026-07-24 16:59:12 +02:00
|
|
|
|
"activity": "1.2.1", # Legacy CSV import: activity_entries feature enforcement
|
2026-09-13 14:38:42 +02:00
|
|
|
|
"nutrition": "1.3.5", # Listen-Dialog: Mapping an der Zutat; Suche Listen/eigene vor BLS
|
2026-09-13 10:40:13 +02:00
|
|
|
|
"tandoor": "1.0.1", # Router-Import ohne future-annotations (Backend startet)
|
2026-09-12 18:23:01 +02:00
|
|
|
|
"bls": "1.0.5", # GET /bls/units
|
feat: Phase 0 - Workflow Engine Foundation
Backend:
- DB-Migration 034: workflow_definitions, workflow_question_catalog, workflow_executions
- ai_prompts.question_augmentations JSONB-Spalte (Hybridmodell: Prompt-Defaults)
- 6 Grundtypen Fragenergänzungen mit Normalisierungsregeln (Seed-Daten)
- Pydantic-Modelle (16 Models, 11 Enums) in workflow_models.py
- Workflow-Engine: Graph-Parsing, Topologische Sortierung, DAG-Validierung
- Dispatcher-Erweiterung type='workflow' (Stub für Phase 1-3)
- Adjacency Lists, Erreichbarkeits-Prüfungen, Zyklen-Erkennung
Testing:
- 22 Unit-Tests (alle bestanden): Graph-Parsing, Validierung, Topologische Sortierung
- Fixtures: simple_valid_graph, parallel_graph, branching_graph
Version:
- APP_VERSION 0.9i
- DB_SCHEMA_VERSION 20260403
- Module: workflow 0.1.0
Anforderungsanalyse: .claude/task/Workflow_engine_prompting_engine/anforderungsanalyse_umsetzungsplan.md
Konzept-Basis: .claude/task/Workflow_engine_prompting_engine/konzept_workflow_engine_konsolidated.md
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 16:55:51 +02:00
|
|
|
|
"photos": "1.0.0",
|
|
|
|
|
|
"insights": "1.3.0",
|
|
|
|
|
|
"prompts": "1.1.0",
|
2026-04-22 08:38:38 +02:00
|
|
|
|
"admin": "1.4.1", # Produkt-Dashboard-Standard GET/DELETE: merge_missing_catalog_widgets
|
feat: Phase 0 - Workflow Engine Foundation
Backend:
- DB-Migration 034: workflow_definitions, workflow_question_catalog, workflow_executions
- ai_prompts.question_augmentations JSONB-Spalte (Hybridmodell: Prompt-Defaults)
- 6 Grundtypen Fragenergänzungen mit Normalisierungsregeln (Seed-Daten)
- Pydantic-Modelle (16 Models, 11 Enums) in workflow_models.py
- Workflow-Engine: Graph-Parsing, Topologische Sortierung, DAG-Validierung
- Dispatcher-Erweiterung type='workflow' (Stub für Phase 1-3)
- Adjacency Lists, Erreichbarkeits-Prüfungen, Zyklen-Erkennung
Testing:
- 22 Unit-Tests (alle bestanden): Graph-Parsing, Validierung, Topologische Sortierung
- Fixtures: simple_valid_graph, parallel_graph, branching_graph
Version:
- APP_VERSION 0.9i
- DB_SCHEMA_VERSION 20260403
- Module: workflow 0.1.0
Anforderungsanalyse: .claude/task/Workflow_engine_prompting_engine/anforderungsanalyse_umsetzungsplan.md
Konzept-Basis: .claude/task/Workflow_engine_prompting_engine/konzept_workflow_engine_konsolidated.md
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 16:55:51 +02:00
|
|
|
|
"stats": "1.0.1",
|
|
|
|
|
|
"exportdata": "1.1.0",
|
|
|
|
|
|
"importdata": "1.0.0",
|
|
|
|
|
|
"membership": "2.1.0",
|
2026-04-11 08:45:00 +02:00
|
|
|
|
"workflow": "0.7.0", # Part 3: Inline Prompts (reference + inline mode)
|
2026-04-22 12:04:37 +02:00
|
|
|
|
"app_dashboard": "1.17.1", # history_overview_viz: Bereichs-Kacheln einzeln per show_section_*
|
2026-07-24 16:59:12 +02:00
|
|
|
|
"csv_import": "0.4.0", # Mapping validation on copy/import; validate endpoint; error_details UI
|
|
|
|
|
|
"admin_csv_templates": "0.3.1", # Format check includes import_row_processing parity
|
feat: Phase 0 - Workflow Engine Foundation
Backend:
- DB-Migration 034: workflow_definitions, workflow_question_catalog, workflow_executions
- ai_prompts.question_augmentations JSONB-Spalte (Hybridmodell: Prompt-Defaults)
- 6 Grundtypen Fragenergänzungen mit Normalisierungsregeln (Seed-Daten)
- Pydantic-Modelle (16 Models, 11 Enums) in workflow_models.py
- Workflow-Engine: Graph-Parsing, Topologische Sortierung, DAG-Validierung
- Dispatcher-Erweiterung type='workflow' (Stub für Phase 1-3)
- Adjacency Lists, Erreichbarkeits-Prüfungen, Zyklen-Erkennung
Testing:
- 22 Unit-Tests (alle bestanden): Graph-Parsing, Validierung, Topologische Sortierung
- Fixtures: simple_valid_graph, parallel_graph, branching_graph
Version:
- APP_VERSION 0.9i
- DB_SCHEMA_VERSION 20260403
- Module: workflow 0.1.0
Anforderungsanalyse: .claude/task/Workflow_engine_prompting_engine/anforderungsanalyse_umsetzungsplan.md
Konzept-Basis: .claude/task/Workflow_engine_prompting_engine/konzept_workflow_engine_konsolidated.md
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 16:55:51 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CHANGELOG = [
|
2026-09-12 14:35:57 +02:00
|
|
|
|
{
|
|
|
|
|
|
"version": "0.9v",
|
|
|
|
|
|
"date": "2026-09-12",
|
|
|
|
|
|
"changes": [
|
|
|
|
|
|
"BLS 4.0 Stammdaten (dynamische Attribute, Upsert über bls_code)",
|
|
|
|
|
|
"Lernendes FDDB-Mapping ohne KI, änder- und löschbar",
|
|
|
|
|
|
"Optionale nutrition_items, Import-Policy, Fasten-/Lücken-Marken",
|
2026-09-12 14:57:13 +02:00
|
|
|
|
"BLS-Import als Hintergrundjob (kein Proxy-504)",
|
2026-09-12 15:31:20 +02:00
|
|
|
|
"Zuordnen: Katalog-Suche nach Name (Popup), nicht nach BLS-Code",
|
|
|
|
|
|
"FDDB-Listen/Rezepte importieren und Tagebuchzeilen in Zutaten auflösen",
|
2026-09-12 15:49:14 +02:00
|
|
|
|
"Zuordnungen und Listen als JSON exportieren/importieren (Dev → Prod)",
|
|
|
|
|
|
"Zuordnen: Mapping unabhängig vom Nährwert-Rebuild; eigener Katalogeintrag; Mengeneinheiten",
|
2026-09-12 16:14:24 +02:00
|
|
|
|
"Inline-Vorschläge (Haferflocken → Hafer Flocken), Bestätigen in der Zeile, Neu anlegen",
|
|
|
|
|
|
"Zuordnen: Suche und Bestätigen ohne Browser-Freeze (Index-Cache, Batch-Vorschläge, kein Seiten-Reload)",
|
|
|
|
|
|
"Zuordnen: Zeitraum 14 Tage / 4 Wochen / 90 Tage / Alle — zuerst aktuelle Tagebuchnamen",
|
2026-09-12 16:59:24 +02:00
|
|
|
|
"Katalogsuche: Fettgehalt (9,5 / 10 %) bleibt erhalten, Joghurt 10% vor >3,5%",
|
|
|
|
|
|
"Eigenes Lebensmittel: beliebige Katalog-Stoffe (EPA/DHA/…) plus Portionsumrechnung auf 100 g",
|
|
|
|
|
|
"Zuordnen: Mapping-Export robust; Rezepte anlegen/bearbeiten; Admin-Mapping direkt ändern",
|
2026-09-12 18:23:01 +02:00
|
|
|
|
"Rezept-Dialog: Zutaten aus Zuordnungen und Katalog suchen; Tandoor später",
|
|
|
|
|
|
"Rezeptzutaten: Menge + Einheit (EL/TL/Prise/Stück); Umrechnung auf Gramm",
|
|
|
|
|
|
"Zuordnen: Mitai = Liste/Kombination; gekochte Rezepte Tandoor + Ausbeute später",
|
2026-09-13 10:36:08 +02:00
|
|
|
|
"Tandoor: persönlicher Zugang (URL + Token) in Einstellungen, Verbindungstest, kein Import",
|
2026-09-12 14:35:57 +02:00
|
|
|
|
],
|
|
|
|
|
|
},
|
2026-07-24 16:59:12 +02:00
|
|
|
|
{
|
|
|
|
|
|
"version": "0.9u",
|
|
|
|
|
|
"date": "2026-07-24",
|
|
|
|
|
|
"changes": [
|
|
|
|
|
|
"Gitea #37: Activity legacy CSV import — activity_entries feature enforcement + UsageBadge UI",
|
|
|
|
|
|
"Gitea #38: Nutrition FDDB import — UsageBadge + deaktivierte Import-Zone bei Limit",
|
|
|
|
|
|
"Gitea #71: Universal CSV — Dry-Run/Format-Check Parität import_row_processing; Mapping-Validierung bei Copy/Import; strukturierte error_details in Nutzer-UI",
|
|
|
|
|
|
],
|
|
|
|
|
|
},
|
2026-04-20 14:47:22 +02:00
|
|
|
|
{
|
2026-04-20 14:51:27 +02:00
|
|
|
|
"version": "0.9t",
|
|
|
|
|
|
"date": "2026-04-20",
|
|
|
|
|
|
"changes": [
|
|
|
|
|
|
"Phase C: data_layer/nutrition_chart_payloads (E1/E2/E4) — gemeinsam mit /api/charts/*",
|
|
|
|
|
|
"nutrition-history-viz: chart_payloads + chart_payloads_days; Verlauf NutritionCharts ohne 3 Extra-HTTP-Calls",
|
|
|
|
|
|
],
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
2026-04-20 14:47:22 +02:00
|
|
|
|
"version": "0.9s",
|
|
|
|
|
|
"date": "2026-04-20",
|
|
|
|
|
|
"changes": [
|
|
|
|
|
|
"Phase B: body-history-viz weight.trend_kpi (Gewichtstrend-Urteil im data_layer/body_viz)",
|
|
|
|
|
|
"History Körper-KPIs: keine Client-Schwellen für WHR/WHtR; KF%-Farbe über Interpretations-Status",
|
|
|
|
|
|
"Kcal vs. Gewicht: kein Frontend-TDEE-Fallback; Hinweis bei <5 gemeinsamen Tagen",
|
|
|
|
|
|
],
|
|
|
|
|
|
},
|
2026-04-20 14:43:31 +02:00
|
|
|
|
{
|
|
|
|
|
|
"version": "0.9r",
|
|
|
|
|
|
"date": "2026-04-20",
|
|
|
|
|
|
"changes": [
|
|
|
|
|
|
"History Phase A: GET /api/charts/activity-last-updated (data_layer fitness_viz, gleiche Quelle wie last_updated im Fitness-Bundle)",
|
|
|
|
|
|
"History: entfernt toten Initial-Load listWeight/listCaliper/listCirc/listNutrition/listActivity(25k); Profil/Insights/Prompts + Activity-Datum",
|
|
|
|
|
|
],
|
|
|
|
|
|
},
|
2026-04-11 08:45:00 +02:00
|
|
|
|
{
|
|
|
|
|
|
"version": "0.9q",
|
|
|
|
|
|
"date": "2026-04-11",
|
|
|
|
|
|
"changes": [
|
|
|
|
|
|
"Workflow Engine Part 3: Inline Prompts",
|
|
|
|
|
|
"Frontend: Radio Buttons (Reference/Inline), InlineTemplateEditor Component",
|
|
|
|
|
|
"Frontend: Placeholder Picker für Inline-Templates, Cursor-Position Tracking",
|
|
|
|
|
|
"Backend: load_prompt_template() unterstützt inline_template",
|
|
|
|
|
|
"Backend: WorkflowNode.inline_template Feld hinzugefügt",
|
|
|
|
|
|
"Serialization: inline_template speichern/laden in graph_data",
|
|
|
|
|
|
"Validation: Prüft dass entweder prompt_slug ODER inline_template gesetzt",
|
|
|
|
|
|
],
|
|
|
|
|
|
},
|
2026-04-09 21:37:19 +02:00
|
|
|
|
{
|
|
|
|
|
|
"version": "0.9p",
|
|
|
|
|
|
"date": "2026-04-09",
|
|
|
|
|
|
"changes": [
|
|
|
|
|
|
"Issue #21 Phase 1: Migration 042/043 (csv_field_mappings, csv_import_log, Seeds)",
|
|
|
|
|
|
"csv_parser: core (Decode/Delimiter/Sample), module_registry, type_converter, permissions",
|
|
|
|
|
|
"API /api/csv: modules, limits, mappings, analyze, copy",
|
|
|
|
|
|
"API /api/admin/csv-templates: CRUD System-Templates, import-limits (system_config)",
|
2026-04-10 06:03:21 +02:00
|
|
|
|
"Issue #21: POST /api/csv/import + executor (nutrition Aggregat/Tag, weight, Blutdruck); activity 501",
|
2026-04-10 06:15:21 +02:00
|
|
|
|
"Issue #21: GET-Analyse über alle Vorlagen; Import nur mapping_id; GUI ohne Modul-Dropdown",
|
2026-04-10 06:03:21 +02:00
|
|
|
|
"v9c_cleanup_features.sql: FK-sichere csv_import→data_import Reihenfolge",
|
2026-04-09 21:37:19 +02:00
|
|
|
|
],
|
|
|
|
|
|
},
|
2026-04-05 07:07:49 +02:00
|
|
|
|
{
|
|
|
|
|
|
"version": "0.9n",
|
2026-04-08 10:32:18 +02:00
|
|
|
|
"date": "2026-04-06",
|
2026-04-05 07:07:49 +02:00
|
|
|
|
"changes": [
|
2026-04-08 12:26:28 +02:00
|
|
|
|
"Admin: Widgets × Features (Migration 041, AND-Gates, Hybrid mit widget_catalog)",
|
2026-04-08 10:32:18 +02:00
|
|
|
|
"Admin: Produkt-Dashboard-Systemstandard (Migration 040 system_config, API, UI)",
|
2026-04-05 07:07:49 +02:00
|
|
|
|
"Phase 4: End Node Template Engine",
|
|
|
|
|
|
"workflow_models.py: EndNodeOutputMode enum (AUTO, TEMPLATE)",
|
|
|
|
|
|
"workflow_executor.py: execute_end_node() with Jinja2 template rendering",
|
|
|
|
|
|
"Template Context: {{node_id.analysis_core}}, {{node_id.decision_signals.key}}",
|
|
|
|
|
|
"Conditional Rendering: {% if node_id %} for optional paths",
|
|
|
|
|
|
"AUTO Mode: Backward compatible concatenation of all analyses",
|
|
|
|
|
|
"TEMPLATE Mode: Custom Jinja2 templates with placeholder support",
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
feat: Phase 4 - Join Nodes and Path Consolidation
Backend Implementation (v0.9m, workflow 0.5.0):
- join_evaluator.py (394 lines): Join-Strategie-Evaluator
- evaluate_join_node(): Hauptlogik für Join-Node Execution
- Join-Strategien: wait_all, wait_any, best_effort
- Skip-Handling: ignore_skipped, use_placeholder, require_minimum
- Result Consolidation: merge analysis_cores, combine signals
- Partial Execution: korrekte Behandlung von SKIPPED/FAILED Pfaden
- workflow_executor.py: execute_join_node() Integration
- BFS-Traversierung erweitert für Join-Nodes
- NodeExecutionState List → Dict Konvertierung für Signale
- Signal-Name-Kollisionen via node_id Präfix gelöst
Testing (49 Tests passing):
- test_phase4_join_nodes.py: 18 neue Unit Tests
- Join-Strategien (wait_all, wait_any, best_effort)
- Skip-Handling (ignore, placeholder)
- Result Consolidation (merge, combine)
- Partial Execution (mixed status paths)
- Helper Functions (collect, check, merge, combine)
- Backward Compatibility: 31 Phase 2/3 Tests (alle passing)
- test_phase2_workflow_executor.py: 1 Test aktualisiert
- test_phase3_logic_evaluator.py: 20 Tests unverändert
Konzept: konzept_workflow_engine_konsolidated.md (Sektion 8.8)
Anforderungsanalyse: phase4_anforderungsanalyse.md
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 12:27:31 +02:00
|
|
|
|
{
|
|
|
|
|
|
"version": "0.9m",
|
|
|
|
|
|
"date": "2026-04-04",
|
|
|
|
|
|
"changes": [
|
|
|
|
|
|
"Phase 4: Join Nodes and Path Consolidation",
|
|
|
|
|
|
"join_evaluator.py: Join-Strategie-Evaluator (wait_all, wait_any, best_effort)",
|
|
|
|
|
|
"Path Status Collection: Sammelt incoming paths, prüft Ausführungsstatus",
|
|
|
|
|
|
"Result Consolidation: Merged analysis_cores + combined signals (mit node_id Präfix)",
|
|
|
|
|
|
"Skip-Handling: IGNORE_SKIPPED, USE_PLACEHOLDER, REQUIRE_MINIMUM",
|
|
|
|
|
|
"Partial Execution: Korrekte Behandlung von SKIPPED/FAILED Pfaden",
|
|
|
|
|
|
"workflow_executor.py: execute_join_node() Implementation",
|
|
|
|
|
|
"NodeExecutionState: List[NormalizedSignal] korrekt konvertiert zu Dict",
|
|
|
|
|
|
"Unit-Tests Phase 4: 18 Tests für Join Nodes (alle passing)",
|
|
|
|
|
|
"Phase 2/3 Backward Compatibility: 31 Tests (alle passing)",
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
feat: Phase 3 - Logic Nodes + Conditional Branching
Backend:
- logic_evaluator.py (NEU, 307 Zeilen): Deterministischer Logic Evaluator
- Vergleichsoperatoren: EQ, NEQ, IN, NOT_IN, GT, LT, GTE, LTE, CONTAINS
- Logische Operatoren: AND, OR, NOT mit Verschachtelung
- Resolve signal references (node_id.question_type)
- Error handling für UNCLEAR/INVALID/NOT_DECIDABLE Signale
- workflow_executor.py (ERWEITERT):
- execute_logic_node(): Bedingungen evaluieren, Pfade aktivieren/deaktivieren
- execute_workflow(): BFS-Traversierung mit Edge-Activation statt Sequential
- _apply_fallback(): 4 Fallback-Strategien (CONSERVATIVE_SKIP, DEFAULT_PATH, UNCERTAINTY_PATH, DOCUMENT_ONLY)
- _has_active_incoming_edge(): Prüft ob Node erreichbar ist
- _get_edges_by_label(): Findet then/else/uncertainty Pfade
- workflow_models.py (ERWEITERT):
- LogicOperator.CONTAINS hinzugefügt
- version.py: 0.9k → 0.9l, workflow 0.3.0 → 0.4.0
Tests:
- test_phase3_logic_evaluator.py (NEU): 20 Unit Tests (alle passing)
- Comparison operators (EQ, NEQ, IN, GT, LT, CONTAINS)
- Logical operators (AND, OR, NOT)
- Nested expressions
- Error handling (missing refs, UNCLEAR/INVALID signals)
- test_phase2_workflow_executor.py (AKTUALISIERT): 11 Tests (alle passing)
- execute_node() graph parameter hinzugefügt (Phase 3 requirement)
- test_execute_node_unknown_type: logic → join (logic jetzt implementiert)
- test_phase3_workflow_branching.py (NEU): Integration Tests vorbereitet
- Erfordert vollständige DB-Mock-Strategie (wird in E2E-Test nachgeholt)
Phase 2 Backward Compatibility: ✅ Alle Phase 2 Tests bestehen weiterhin
Konzept: .claude/task/Workflow_engine_prompting_engine/konzept_workflow_engine_konsolidated.md
Anforderungsanalyse: .claude/task/Workflow_engine_prompting_engine/phase3_anforderungsanalyse.md
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 08:02:22 +02:00
|
|
|
|
{
|
|
|
|
|
|
"version": "0.9l",
|
|
|
|
|
|
"date": "2026-04-04",
|
|
|
|
|
|
"changes": [
|
|
|
|
|
|
"Phase 3: Logic Nodes + Conditional Branching",
|
|
|
|
|
|
"logic_evaluator.py: Deterministischer Logic Evaluator (EQ, NEQ, IN, GT, LT, CONTAINS, AND, OR, NOT)",
|
|
|
|
|
|
"workflow_executor.py: Conditional Branching via BFS-Traversierung mit Edge-Activation",
|
|
|
|
|
|
"execute_logic_node(): Bedingungen evaluieren, then/else Pfade aktivieren",
|
|
|
|
|
|
"Fallback-Strategien: CONSERVATIVE_SKIP, DEFAULT_PATH, UNCERTAINTY_PATH, DOCUMENT_ONLY",
|
|
|
|
|
|
"workflow_models.py: CONTAINS Operator hinzugefügt",
|
|
|
|
|
|
"Unit-Tests Phase 3: 20 Tests für Logic Evaluator (alle passing)",
|
|
|
|
|
|
"Phase 2 Backward Compatibility: 11 Tests aktualisiert (alle passing)",
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
feat: Phase 2 - Normalisierung + Workflow Executor
Backend:
- normalization_engine.py (200 Zeilen): Synonym-Mapping, 5 Statuswerte
* normalize_decision_signal(): Kaskade (exact → case → synonym → invalid)
* apply_synonym_mapping(): DB-basierte Synonyme (case-insensitive)
* normalize_all_signals(): Batch-Processing gegen Katalog
* load_question_catalog(): Lädt normalization_rules aus DB
- workflow_executor.py (440 Zeilen): Sequenzielle Workflow-Ausführung
* execute_workflow(): Traversiert DAG in topologischer Reihenfolge
* execute_node(): Führt analysis nodes aus (start/end = no-op)
* aggregate_results(): Kombiniert analysis_core + normalized_signals
* save_execution_state(): Persistiert in workflow_executions
- workflow_models.py: Erweitert um Phase 2 Models
* SignalStatus Enum (valid, normalized, unclear, invalid, not_decidable)
* NormalizedSignal (question_type, raw_value, normalized_value, status)
* NodeExecutionState (node_id, status, analysis_core, normalized_signals)
* ExecutionResult (execution_id, workflow_id, status, node_states, aggregated_result)
- workflow_engine.py: Neue Funktion get_execution_order()
* Flattened topological sort für sequenzielle Execution
* Phase 7: Wird zu levels (parallele Execution)
- prompt_executor.py: execute_workflow_prompt() Implementierung
* Ruft workflow_executor.execute_workflow() auf
* Konvertiert ExecutionResult zu API-Response
- routers/workflows.py (230 Zeilen): Workflow Execution API
* POST /api/workflows/{id}/execute (mit enable_debug)
* GET /api/workflows/executions/{id} (lädt gespeicherten State)
* GET /api/workflows (listet alle aktiven Workflows)
* GET /api/workflows/{id} (lädt einzelnen Workflow mit Graph)
- main.py: Router-Registrierung (workflows.router)
Tests:
- test_phase2_normalization.py (17 Tests): Alle Normalisierungs-Szenarien
* Exact match, case-insensitive, synonym mapping, invalid, whitespace
* Batch-Normalisierung, not_in_catalog, mixed validity
- test_phase2_workflow_executor.py (10 Tests): Executor + Aggregation
* aggregate_results mit verschiedenen Konstellationen
* execute_node für start/end/analysis/unknown
* Integration mit question_augmenter + result_container_parser
Alle 27 Unit-Tests bestanden.
version: 0.9k (backend)
module: workflow 0.3.0
Konzept: .claude/task/Workflow_engine_prompting_engine/anforderungsanalyse_umsetzungsplan.md (Phase 2)
2026-04-03 21:20:23 +02:00
|
|
|
|
{
|
|
|
|
|
|
"version": "0.9k",
|
|
|
|
|
|
"date": "2026-04-03",
|
|
|
|
|
|
"changes": [
|
|
|
|
|
|
"Phase 2: Normalisierung + Workflow Executor",
|
|
|
|
|
|
"normalization_engine.py: Synonym-Mapping, 5 Statuswerte (valid, normalized, unclear, invalid, not_decidable)",
|
|
|
|
|
|
"workflow_executor.py: Sequenzielle Workflow-Ausführung, Node-State-Tracking, Ergebnis-Aggregation",
|
|
|
|
|
|
"Integration in prompt_executor.py: Dispatcher für type='workflow'",
|
|
|
|
|
|
"API-Router workflows.py: POST /workflows/{id}/execute, GET /workflows/executions/{id}",
|
|
|
|
|
|
"Unit-Tests Phase 2: 27 Tests (normalization_engine + workflow_executor)",
|
|
|
|
|
|
"Erweitert: workflow_models.py (NormalizedSignal, NodeExecutionState, ExecutionResult)",
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
2026-04-03 18:02:25 +02:00
|
|
|
|
{
|
|
|
|
|
|
"version": "0.9j",
|
|
|
|
|
|
"date": "2026-04-03",
|
|
|
|
|
|
"changes": [
|
|
|
|
|
|
"Phase 1: Fragenergänzung + Strukturierter Container",
|
|
|
|
|
|
"question_augmenter.py: Hybrid-Modell (Knotengebundene Fragen überschreiben Prompt-Defaults)",
|
|
|
|
|
|
"result_container_parser.py: Markdown-Sektionen (Analysekern, Entscheidungsanteil, Begründungsanker)",
|
|
|
|
|
|
"Integration in execute_base_prompt(): Fragenergänzung vor LLM-Call, Parsing nach LLM-Response",
|
|
|
|
|
|
"API-Router workflow_questions.py: CRUD für workflow_question_catalog",
|
|
|
|
|
|
"Unit-Tests Phase 1: 25 Tests (question_augmenter + result_container_parser)",
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
feat: Phase 0 - Workflow Engine Foundation
Backend:
- DB-Migration 034: workflow_definitions, workflow_question_catalog, workflow_executions
- ai_prompts.question_augmentations JSONB-Spalte (Hybridmodell: Prompt-Defaults)
- 6 Grundtypen Fragenergänzungen mit Normalisierungsregeln (Seed-Daten)
- Pydantic-Modelle (16 Models, 11 Enums) in workflow_models.py
- Workflow-Engine: Graph-Parsing, Topologische Sortierung, DAG-Validierung
- Dispatcher-Erweiterung type='workflow' (Stub für Phase 1-3)
- Adjacency Lists, Erreichbarkeits-Prüfungen, Zyklen-Erkennung
Testing:
- 22 Unit-Tests (alle bestanden): Graph-Parsing, Validierung, Topologische Sortierung
- Fixtures: simple_valid_graph, parallel_graph, branching_graph
Version:
- APP_VERSION 0.9i
- DB_SCHEMA_VERSION 20260403
- Module: workflow 0.1.0
Anforderungsanalyse: .claude/task/Workflow_engine_prompting_engine/anforderungsanalyse_umsetzungsplan.md
Konzept-Basis: .claude/task/Workflow_engine_prompting_engine/konzept_workflow_engine_konsolidated.md
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 16:55:51 +02:00
|
|
|
|
{
|
|
|
|
|
|
"version": "0.9i",
|
|
|
|
|
|
"date": "2026-04-03",
|
|
|
|
|
|
"changes": [
|
|
|
|
|
|
"Phase 0: Workflow Engine Foundation",
|
|
|
|
|
|
"DB-Migration 034: workflow_definitions, workflow_question_catalog, workflow_executions",
|
|
|
|
|
|
"Pydantic-Modelle für Workflow-Graph (WorkflowGraph, Node, Edge, Condition)",
|
|
|
|
|
|
"Graph-Parsing, Topologische Sortierung, DAG-Validierung",
|
|
|
|
|
|
"Dispatcher-Erweiterung: type='workflow' (Stub-Implementierung)",
|
|
|
|
|
|
"Unit-Tests für Phase 0 (Graph-Parsing, Zyklen-Erkennung, Erreichbarkeit)",
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"version": "0.9h+",
|
|
|
|
|
|
"date": "2026-03-28",
|
|
|
|
|
|
"changes": [
|
|
|
|
|
|
"Phase 0c: Multi-Layer Data Architecture Complete",
|
|
|
|
|
|
"Data Layer Migration (97 Funktionen in 6 Modulen)",
|
|
|
|
|
|
"20 neue Chart Endpoints (E1-E5, A1-A8, R1-R5, C1-C4)",
|
|
|
|
|
|
"Single Source of Truth für Datenberechnungen",
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
]
|