- Introduced `intent_context` and `semantic_brief` parameters in `try_llm_stage_specs` to improve context handling for stage specifications. - Updated `build_goal_analysis` to extract explicit exclusions from goal queries, enhancing constraint management. - Enhanced `roadmap_context_from_override` to enrich semantic briefs with path constraints and finalize stage specifications with intent context. - Incremented application version to reflect these updates.
14 KiB
Progressionsgraph — KI-Planung (Ist-Stand)
Stand: 2026-05-22 (Dokumentation) · App-Version: 0.8.218 · DB: Migration 088
Maßgeblich für Code: backend/version.py (APP_VERSION, DB_SCHEMA_VERSION)
Diese Datei ist die zentrale Referenz für die KI-gestützte Planung im Progressionsgraph.
Ältere Abschnitte inHANDOVER.md§2.8 undPLANNING_KI_ROADMAP.mdverweisen hierher.
Bezüge:
.claude/docs/working/PLANNING_PROGRESSION_ROADMAP_SPEC.md (Zielarchitektur) ·
.claude/docs/working/PLANNING_EXERCISE_SUGGEST_CONTEXT.md (Retrieval/Scoring) ·
.claude/docs/technical/SKILL_SCORING_SPEC.md (Fähigkeiten-Scoring) ·
docs/architecture/PLANNING_KI_ROADMAP.md (Produkt-Roadmap Phase G+)
1. Fachliche Abgrenzung
| Thema | Progressionsgraph (dieses Feature) | Trainingsplanung (Phase G, später) |
|---|---|---|
| Ziel | Curriculum / Technikpfad über Übungen | Konkrete Trainingseinheit für Gruppe |
| Kontext | Zieltext, Start/Ziel, Roadmap, optional Graph-Kanten | Gruppe, Historie, Termin, Rahmen |
| Pipeline | planning_progression_roadmap.py → Path-Builder |
Eigene Pipeline (noch offen) |
| Gruppenanalyse | Nein | Ja |
| Wiederverwendung | planning_skill_expectations.py, planning_exercise_form_context.py |
Gleiche Bausteine, andere Scopes |
Shinkan-Regel: Der Progressionsgraph ist keine persönliche Tracking-App und plant nicht für einzelne Sportler.
2. Trainer-Workflow (UI)
Aktuell in ExerciseProgressionPathBuilder.jsx (eingebettet in ExerciseProgressionGraphPanel.jsx):
① Ziel eingeben (+ optional Start/Ziel-Felder manuell)
② „Start/Ziel analysieren“ (optional, start_target_only)
③ „Roadmap vorschlagen“ (roadmap_only, LLM-Roadmap)
④ Roadmap bearbeiten (Major Steps + Stufen-Details)
⑤ „Übungen matchen“ (roadmap_first + roadmap_override)
⑥ Lücken mit KI schließen (gap_fill_offers + Vorbereitungs-Dialog)
⑦ „Pfad in Graph speichern“ (Sequenz-Kanten)
Bekannte UX-Schuld: Alle Schritte liegen auf einer langen Scroll-Seite — Überarbeitung als Wizard/Stepper ist geplant (separater UI-Chat). Briefing-Vorlage siehe unten §10.
3. Architektur (Module)
flowchart TB
subgraph ui [Frontend]
EPB[ExerciseProgressionPathBuilder]
GFM[ExerciseGapFillPrepModal]
PCtx[planningContextForExerciseAi.js]
end
subgraph api [API]
PPS[POST /api/planning/progression-path-suggest]
EAI[POST /api/exercises/ai/suggest]
SEQ[POST /api/exercise-progression-graphs/:id/edges/sequence]
PUT[PUT /api/exercise-progression-graphs/:id]
end
subgraph roadmap [Roadmap-Pipeline]
PR[planning_progression_roadmap.py]
ST087[Prompt 087 start_target]
ST078[Prompts 078/079 roadmap + stage_spec]
end
subgraph match [Match + QA]
PB[planning_exercise_path_builder.py]
RET[planning_exercise_retrieval.py]
PG[planning_exercise_progression.py]
SEM[planning_exercise_semantics.py]
end
subgraph skills [Fähigkeiten — wiederverwendbar]
PSE[planning_skill_expectations.py]
PEFC[planning_exercise_form_context.py]
AIF[planning_exercise_path_ai_fill.py]
end
subgraph persist [Persistenz Graph]
G088[(planning_roadmap JSONB — Migration 088)]
EDGES[(exercise_progression_edges)]
end
EPB --> PPS
EPB --> SEQ
EPB --> PUT
GFM --> EAI
PPS --> PR
PPS --> PB
PB --> RET
PB --> PG
PB --> PSE
AIF --> PEFC
PSE --> RET
SEQ --> EDGES
PUT --> G088
SEQ --> G088
3.1 Verantwortlichkeiten
| Modul | Aufgabe |
|---|---|
planning_progression_roadmap.py |
Phasen A–C: Zielanalyse, Roadmap, stage_specs; Start/Ziel-Auflösung (Trainer > KI > Regex) |
planning_exercise_path_builder.py |
suggest_progression_path: roadmap_first Match, QA, Gap-Offers |
planning_exercise_progression.py |
Graph auflösen, Nachfolger-Kanten für Retrieval-Bias |
planning_skill_expectations.py |
Skill-Erwartungen pro Scope (progression_stage, progression_path, später training_section) |
planning_exercise_form_context.py |
planning_context / Gap-Snapshot für Übungs-KI |
planning_exercise_path_ai_fill.py |
Gap-Fill-Angebote, goal_for_ai, context_preview |
progression_graph_planning_artifact.py |
Validierung planning_roadmap JSON (Schema v1, max. 64 KB) |
4. API — POST /api/planning/progression-path-suggest
4.1 Wichtige Request-Flags
| Feld | Typ | Bedeutung |
|---|---|---|
query |
string | Ziel / Entwicklungsrichtung (min. 3 Zeichen) |
max_steps |
int | Anzahl Major Steps (2–10) |
progression_graph_id |
int? | Gewählter Graph — siehe §5 |
roadmap_first |
bool | Match pro stage_spec statt iterativem Pfad |
roadmap_only |
bool | Nur Roadmap, keine Übungen |
start_target_only |
bool | Nur Start/Ziel-Analyse |
roadmap_override |
object | Trainer-bearbeitete major_steps + stage_specs |
start_situation, target_state, roadmap_notes |
string? | Strukturierte Eingabe (Priorität vor KI) |
include_llm_start_target |
bool | LLM-Extraktion Start/Ziel (Prompt 087) |
include_llm_roadmap |
bool | LLM Roadmap (Prompts 078/079) |
include_llm_intent |
bool | LLM Intent für Semantic Brief (Roadmap-Vorschlag: true seit 0.8.217) |
include_path_qa, include_ai_gap_fill |
bool | QS, Lücken-Angebote |
4.2 Wichtige Response-Felder
| Feld | Bedeutung |
|---|---|
progression_roadmap |
Artefakte A/B/C inkl. resolved_structured, stage_specs, prompt_slugs |
steps[] |
Gematchte Übungen; pro Schritt u. a. roadmap_*, skill_expectations |
path_skill_expectations |
Pfadweite Skill-Erwartungen |
gap_fill_offers[] |
Lücken mit context_preview, goal_for_ai |
path_qa |
QS inkl. roadmap_qa_mode: roadmap_first_lite |
4.3 Prompt-Slugs (nur in ai_prompts, nie Hardcoding)
| Slug | Migration | Phase |
|---|---|---|
planning_progression_start_target |
087 | Start/Ziel-Extraktion |
planning_progression_goal_analysis |
078 | Zielanalyse |
planning_progression_roadmap |
078 | Roadmap (micro → major) |
planning_progression_stage_spec |
079 | Stufenspezifikation |
5. Roadmap-Match — Stufen-Qualität (0.8.218)
Pro Major Step gilt:
- Stufen-Brief —
semantic_brief_for_stage()ergänztmust_phrasesum das Stufen-Lernziel. - Stufen-Gate —
exercise_passes_stage_learning_goal_gate()prüft Lernziel-Text in Titel/Summary/Ziel oder Mindest-semantic_score. - Kein Fallback — Bei
roadmap_firstwird nicht auf die globalegoal_queryzurückgefallen; passt keine Übung → Lücke (roadmap_unfilled) statt themenfremder Übung. - Retrieval — Bonus/Strafe im Hybrid-Score je nach Stufen-Passung.
- QS —
detect_off_topic_stepserkenntstage_mismatchanhandroadmap_learning_goal.
Tests: test_planning_roadmap_stage_match.py
6. Rolle des bestehenden Graphs
Wichtig — häufiges Missverständnis:
| Aspekt | Verhalten |
|---|---|
| KI-Pfadvorschlag | Baut einen neuen Übungspfad aus der Bibliothek (Roadmap-first), nicht aus vorhandenen Graph-Knoten als Start |
| Schritt 1 | Kein Anker → kein Graph-Bias |
| Ab Schritt 2 | Anker = vorherige Übung im Vorschlag → ausgehende Kanten im Graph werden geladen |
| Scoring | Nachfolger im Graph: Bonus progression (ca. 4–10 % Gewicht, Semantik/Profil dominieren) |
| Speichern | POST …/edges/sequence fügt Kanten hinzu — ersetzt den Graph nicht |
| Nicht implementiert | „Ab letztem Graph-Knoten erweitern“, bestehende Sequenz als Pfad-Start |
Code: planning_exercise_progression.py → apply_progression_context_to_pack → planning_exercise_retrieval.py (prog_hit).
7. Persistenz
6.1 Kanten (exercise_progression_edges)
- Übungsfolge als gerichtete Kanten
next_exercise - Varianten-aware (Migration 034)
- Kanten-Notizen aus Pfad-Begründungen oder Fallback-
segment_notes
6.2 Planungs-Artefakt (planning_roadmap JSONB, Migration 088)
Gespeichert am Graph-Container (exercise_progression_graphs), Schema v1:
{
"schema_version": 1,
"goal_query": "…",
"start_situation": "…",
"target_state": "…",
"roadmap_notes": "…",
"max_steps": 5,
"progression_roadmap": { },
"path_skill_expectations": { }
}
| Aktion | API |
|---|---|
| Speichern (Roadmap/Match) | PUT /api/exercise-progression-graphs/:id |
| Speichern (mit Pfad) | POST …/edges/sequence (optional planning_roadmap im Body) |
| Laden | GET /api/exercise-progression-graphs/:id → Frontend stellt Workflow-Felder wieder her |
Validierung: progression_graph_planning_artifact.py · Tests: test_progression_graph_planning_artifact.py
planning_roadmap ≠ Graph-Kanten: Metadaten für Wiederaufnahme der KI-Planung, nicht der Übungsgraph selbst.
8. Planungs-Intent (gemeinsam mit Trainingsplanung)
Modul: planning_intent_context.py — domänenneutral, wiederverwendbar in Phase G.
| Baustein | Progressionsgraph heute | Trainingsplanung (Phase G) |
|---|---|---|
build_planning_intent_context |
Aus goal_query, Zielanalyse, Notizen |
Aus section_guidance, Slot, Einheit |
explicit_exclusions |
Negationen (ohne/kein/nicht …) |
gleich |
path_anti_patterns |
→ jede stage_spec.anti_patterns |
→ Abschnitts-/Slot-Brief |
path_success_criteria |
→ success_criteria + Matching |
→ Slot-Erwartung |
finalize_stage_specs_with_intent |
Nach heuristischer/LLM-Roadmap | Analog für Sektionen |
LLM: Migration 089 — Prompts planning_progression_goal_analysis + planning_progression_stage_spec erhalten intent_context_json; Ausschlüsse nicht erfinden, nur aus Anfrage übernehmen.
Matching: anti_patterns + success_criteria → build_stage_match_brief → Retrieval-Gate (Titel + Summary + Goal).
9. Fähigkeiten-Scoring-Anbindung
Modul: planning_skill_expectations.py
| Scope | Verwendung heute | Phase G (vorbereitet) |
|---|---|---|
progression_path |
Einmaliges Pfad-Profil (path_skill_expectations) |
— |
progression_stage |
Pro Roadmap-Stufe vor Retrieval + in Gap-Kontext | — |
training_section |
— | Trainingsabschnitt |
framework_slot |
— | Rahmen-Slot |
Quellen: semantic_topic, text_match, load_profile (aus stage_spec).
Integration:
- Retrieval:
apply_expectations_to_target→ Hybrid-Score - UI: Tags pro Pfadschritt + Pfad-Header; Gap-Kontext „Erwartete Fähigkeiten“
- KI-Neuanlage:
expected_skillsincontext_preview/goal_for_ai
10. KI-Lücken (Gap-Fill)
Flow:
roadmap_unfilled/ QA-Lücken →gap_fill_offers- Trainer: „Vorbereiten & KI anlegen“ →
ExerciseGapFillPrepModal(Titel, Stufen-Lernziel, Ergänzungen) POST /api/exercises/ai/suggestmitplanning_context- Vorschau → Übung anlegen → in Pfad einfügen
Kontext-Helfer: frontend/src/utils/planningContextForExerciseAi.js
11. Implementierungsstände (Phasen)
| Phase | Inhalt | Status | Version |
|---|---|---|---|
| F0–F2 | Roadmap-Pipeline + LLM-Prompts 078/079 | ✅ | 0.8.204–205 |
| F3 | roadmap_first Match pro Stufe |
✅ | 0.8.206–209 |
| F4 | Roadmap-Review UI + roadmap_override |
✅ | 0.8.207 |
| F5 | Start/Ziel strukturiert + LLM 087 + Zwei-Schritt-UI | ✅ | 0.8.210–214 |
| F6 | Gap-Prep-Modal + reicher planning_context |
✅ | 0.8.212–214 |
| F7 | planning_skill_expectations (Retrieval + UI + Gap) |
✅ | 0.8.215–216 |
| F8 | Editierbare stage_specs in UI |
✅ | 0.8.216 |
| F9 | planning_roadmap Persistenz (Migration 088) |
✅ | 0.8.217 |
| F10 | Stufen-Lernziel-Gate beim Match (kein goal_query-Fallback) | ✅ | 0.8.218 |
| G | Trainingsplanung eigene Pipeline + Graph-Referenz | 🔲 | — |
| UX | Wizard/Stepper statt Scroll-Monolith | 🔲 | separater Chat |
12. Offenes Backlog (priorisiert)
- UI-Überarbeitung — Wizard mit 4 Schritten, progressive disclosure (Briefing unten)
- Graph-Erweiterungsmodus — Start ab gewähltem Knoten / letzter Sequenz
- Kontext auf allen Pfad-Schritten in UI (nicht nur Lücken)
- Trainingsplanung Phase G — Pipeline mit Gruppenkontext, Wiederverwendung
planning_skill_expectations - Enrichment / Prompt-Feintuning
- Mitai Workflow-Engine (langfristig)
Briefing-Vorlage UI-Chat (Copy-Paste)
Siehe Nutzer-Chat 2026-05-22 oder HANDOVER.md §2.8 — Abschnitt „UI-Überarbeitung“.
Kern: Wizard ① Ziel & Start/Ziel → ② Roadmap → ③ Match → ④ Lücken & Speichern; Backend-Pipeline unverändert lassen.
13. Tests
| Datei | Abdeckung |
|---|---|
test_planning_progression_roadmap.py |
Roadmap-Pipeline, Override, Start/Ziel |
test_planning_exercise_path_builder.py |
Pfad-Annotierung, Skill-Expectations auf Steps |
test_planning_skill_expectations.py |
Skill-Erwartungen, Scopes |
test_planning_intent_context.py |
Intent-Kontext, finalize stage_specs |
test_planning_exercise_path_ai_fill.py |
Gap-Fill, expected_skills in goal text |
test_planning_exercise_form_context.py |
planning_context, Gap-Snapshot |
test_progression_graph_planning_artifact.py |
JSONB-Artefakt-Validierung |
test_planning_exercise_progression.py |
Graph-Auflösung, Nachfolger |
14. Dokumenten-Index (Drift vermeiden)
| Frage | Primäre Quelle |
|---|---|
| Was ist der aktuelle Ist-Stand? | Diese Datei |
| Zielarchitektur / JSON-Artefakte | PLANNING_PROGRESSION_ROADMAP_SPEC.md |
| Retrieval, Hybrid-Score, Intents | PLANNING_EXERCISE_SUGGEST_CONTEXT.md |
| Produkt-Roadmap Phase G+ | PLANNING_KI_ROADMAP.md |
| Session-Handover / nächste Schritte | docs/HANDOVER.md §2.8 |
| Fähigkeiten-Scoring allgemein | SKILL_SCORING_SPEC.md |
| Versionen / Changelog | backend/version.py |
Pflege-Regel: Bei jeder abgeschlossenen Teilphase diese Datei + HANDOVER.md §2.8 + version.py CHANGELOG aktualisieren.
15. Changelog (Dokument)
| Datum | Änderung |
|---|---|
| 2026-05-22 | Erstfassung Ist-Stand 0.8.217 — zentrale Referenz nach F5–F9 |