# Planungs-KI — Progressions-Roadmap (Phase F)

**Version:** 0.1  
**Datum:** 2026-06-07  
**Status:** VERBINDLICHE ZIELARCHITEKTUR — **F0–F9 umgesetzt** (0.8.217)  
**Geltungsbereich:** **Progressionsgraph** (`exercise_progression_graphs`) — **ohne** Gruppenanalyse

**Ist-Stand (Module, API, Graph-Verhalten, Persistenz):** `docs/architecture/PLANNING_PROGRESSION_GRAPH_KI.md`

**Bezüge:**  
`working/PLANNING_EXERCISE_SUGGEST_CONTEXT.md` · `working/AI_PLANNING_KI_MULTISTAGE_FORECAST.md` · `technical/AI_TRAINING_PLANNING_CONCEPT.md` · `technical/AI_PROMPT_TARGET_ARCHITECTURE.md` · `docs/architecture/PLANNING_KI_ROADMAP.md` · `docs/HANDOVER.md`

---

## 1. Entscheidung (2026-06-07)

### 1.1 Problem

Der Pfad-Builder (Phase C3/E) ist **retrieval-first**: Zieltext → N Übungen aus der Bibliothek → QS nachbessern. Das entspricht nicht der menschlichen Planung (Ziel → Roadmap → Stufenspezifikation → Übung).

### 1.2 Festlegung

| Thema | Entscheidung |
|--------|----------------|
| **Progressionsgraph** | **Roadmap-first** — Phasen A→B→C, dann Bibliothek (D), dann Feinausplanung (E) |
| **Gruppenanalyse** | **Nicht** in der Graphen-Pipeline — erst bei **Trainingsplanung** (Einheit/Rahmen) |
| **Mitai Workflow-Engine** | **Nicht** jetzt portieren — **Workflow-lite** (`PlanningProgressionPipeline`), später workflow-ready |
| **Ein Mega-Prompt** | **Verboten** — validierte Artefakte pro Phase |

### 1.3 Abgrenzung Trainingsplanung

```
Progressionsgraph-Pipeline     Trainingsplanungs-Pipeline (später)
─────────────────────────     ───────────────────────────────────
Ziel + N Major Steps          Gruppe + Historie + Termin + Rahmen
Kein Gruppenkontext           Kontext-Pack S0 (AI_PLANNING_KI_MULTISTAGE_FORECAST)
Curriculum / Technikpfad      Session-Füllung / Reihenfolge / Zeiten
```

---

## 2. Menschliches Vorbild → Phasen

| Mensch | Phase | Output-Artefakt | LLM |
|--------|-------|-----------------|-----|
| Startpunkt + Zielzustand | **A** Zielanalyse | `goal_analysis` | Optional (klein) |
| Zwischenziele, gewichten, auf N reduzieren | **B** Roadmap | `roadmap` (`micro_objectives[]`, `major_steps[N]`) | Ja |
| Belastung, Übungstyp, Lernziel je Stufe | **C** Stufenspezifikation | `stage_specs[]` | Teilweise |
| Bibliothek / Brücke | **D** Match | `step_matches[]` oder `gaps[]` | Nein (Retrieval) |
| Skizze + Feinplan | **E** Übungsentwurf | bestehend `suggestExerciseAi` | On-demand |

**Phase B** = Kern: 8–12 `micro_objectives` → Konsolidierung → exakt `max_steps` `major_steps`.

---

## 3. Pipeline-Orchestrator (Workflow-lite)

Modul: **`backend/planning_progression_roadmap.py`**

```python
ctx = ProgressionRoadmapContext(goal_query=..., max_steps=N, semantic_brief=...)
ctx = phase_a_goal_analysis(ctx)       # deterministisch + optional LLM
ctx = phase_b_roadmap(ctx)             # micro → major
ctx = phase_c_stage_specs(ctx)         # je major_step
# Phase D/E: bestehende path_builder / retrieval / ai_fill — speisen von ctx.major_steps
```

Jede Phase: `(ctx) → ctx`, Zwischenergebnisse in API-Response für **Human-in-the-loop** (Roadmap-Review vor Übungs-Match).

**Später:** jede Phase = Workflow-Knoten (Mitai-kompatibel), keine API-Änderung an Artefakten.

---

## 4. JSON-Artefakte (Pydantic)

### 4.1 `goal_analysis` (Phase A)

```json
{
  "primary_topic": "Mae Geri",
  "start_assumption": "Grundkenntnisse der Standführung, keine Perfektion",
  "target_state": "Sicherer, präziser Mae Geri unter Belastung und in Anwendung",
  "success_criteria": ["saubere Kammerhaltung", "Hüftführung", "Kime am Zielpunkt"],
  "constraints": { "partner_required": false, "equipment": [] }
}
```

### 4.2 `roadmap` (Phase B)

```json
{
  "micro_objectives": [
    { "id": "m1", "phase": "grundlage", "title": "Stellung und Kammerhaltung", "weight": 0.9, "depends_on": [] },
    { "id": "m2", "phase": "vertiefung", "title": "Hüft- und Kniekoordination", "weight": 0.85, "depends_on": ["m1"] }
  ],
  "major_steps": [
    {
      "index": 0,
      "phase": "grundlage",
      "learning_goal": "Stabile Mae-Geri-Grundstellung",
      "consolidates": ["m1"],
      "rationale": "Einstieg ohne Perfektionsdruck"
    }
  ],
  "consolidation_notes": ["Perfektion mit Anwendung zusammengeführt"]
}
```

### 4.3 `stage_spec` (Phase C, je Major Step)

```json
{
  "major_step_index": 2,
  "learning_goal": "…",
  "load_profile": ["präzision", "koordination"],
  "exercise_type": "kihon_einzel",
  "success_criteria": ["…"],
  "anti_patterns": ["reine Kraftübung ohne Technikbezug"]
}
```

---

## 5. API (schrittweise)

### 5.1 Erweiterung `POST /api/planning/progression-path-suggest`

| Feld (neu) | Default | Bedeutung |
|------------|---------|-----------|
| `roadmap_first` | `false` → später `true` | Roadmap-Pipeline vor Retrieval |
| `include_roadmap_preview` | `true` wenn `roadmap_first` | Artefakte A/B/C in Response |

**Response (neu):**

```json
{
  "progression_roadmap": {
    "goal_analysis": { },
    "roadmap": { },
    "stage_specs": [ ],
    "pipeline_phase": "roadmap_v1"
  },
  "steps": [ ]
}
```

**Übergangsphase (0.8.204):** `include_roadmap_preview=true` liefert Roadmap **parallel** zum bestehenden retrieval-first Pfad — UI kann Roadmap reviewen, Schritte bleiben vorerst retrieval-basiert.

**Zielphase (F2):** `roadmap_first=true` — Retrieval pro Major Step aus `stage_specs`, nicht mehr iterativ „beste nächste Übung“.

### 5.2 Prompt-Slugs — nur in `ai_prompts`, nie im Code

**Regel:** Prompt-**Texte** leben ausschließlich in der Tabelle `ai_prompts` (Superadmin bearbeitbar, Vorschau, `openrouter_model` pro Zeile). Python referenziert nur **Slugs** (`PROMPT_SLUG_*` in `planning_progression_roadmap.py`). Kein verstecktes Hardcoding von Templates.

| Slug | Phase | Migration |
|------|-------|-----------|
| `planning_progression_start_target` | Start/Ziel | **087** |
| `planning_progression_goal_analysis` | A | **078** |
| `planning_progression_roadmap` | B | **078** |
| `planning_progression_stage_spec` | C | **079** |

**API:** `include_llm_roadmap` (Default `true`) — lädt Prompts via `load_and_render_ai_prompt`. Bei Fehler/kein OpenRouter: **deterministischer Fallback** (kein stilles Versagen).

**Response:** `prompt_slugs` (genutzte Slugs), `prompt_slug_catalog` (Referenz), `llm_*_applied` Flags.

**Admin:** Templates unter Kategorie `training` pflegen — siehe `AI_PROMPT_SYSTEM_SPEC.md`.

---

## 6. UI-Roadmap

1. **F1:** Roadmap-Box unter Ziel-Eingabe (Major Steps als Karten, editierbar) — vor Übungsliste  
2. **F2:** Match-Ergebnis pro Major Step (Bibliothek / Lücke / KI anlegen)  
3. **F3:** `roadmap_first` als Default im Graph-Builder  

---

## 7. Was bewusst nicht in Phase F

- Gruppen-Historie, Belastungssteuerung der Gruppe  
- Mitai `workflow_engine` Port  
- Vollautomatisches Speichern ohne Trainer-Review  

---

## 8. Implementierungsstände

| ID | Inhalt | Status |
|----|--------|--------|
| **F0** | Spec + Doku + `planning_progression_roadmap.py` Scaffold | ✅ 0.8.204 |
| **F1** | `include_roadmap_preview` in API + deterministische A/B | ✅ 0.8.204 |
| **F2** | LLM Phase A/B/C über `ai_prompts` (078/079), `include_llm_roadmap` | ✅ 0.8.205 |
| **F3** | Retrieval aus `stage_specs` (roadmap_first) | ✅ 0.8.206–209 |
| **F4** | UI Roadmap-Review + `roadmap_override` | ✅ 0.8.207 |
| **F5** | Start/Ziel strukturiert + Prompt **087** + Zwei-Schritt-UI | ✅ 0.8.210–214 |
| **F6** | Gap-Prep + `planning_context` an Übungs-KI | ✅ 0.8.212–214 |
| **F7** | `planning_skill_expectations` | ✅ 0.8.215–216 |
| **F8** | Editierbare `stage_specs` in UI | ✅ 0.8.216 |
| **F9** | `planning_roadmap` JSONB (Migration **088**) | ✅ 0.8.217 |
| **G** | Trainingsplanung: eigene Pipeline + Workflow-Engine | 🔲 |

Details: `docs/architecture/PLANNING_PROGRESSION_GRAPH_KI.md`

---

## 9. Changelog

- **2026-05-22:** Ist-Stand F5–F9 dokumentiert; Verweis auf `PLANNING_PROGRESSION_GRAPH_KI.md`.
- **2026-06-07:** Erstfassung — Roadmap-first Entscheidung, Abgrenzung Graphen vs. Planung, Workflow-lite.
