-- Migration 074: KI-Prompt Planungs-Übungssuche — Erwartungsprofil aus Planungskontext (Preset) -- Spec: .claude/docs/working/PLANNING_EXERCISE_SUGGEST_CONTEXT.md §16 INSERT INTO ai_prompts ( slug, display_name, description, template, category, output_format, output_schema, is_system_default, default_template, active, sort_order ) SELECT 'planning_exercise_expectation_profile', 'Planungs-Übungssuche Erwartungsprofil', 'Leitet aus Einheit, Abschnitt, Anker und bisherigem Plan ein Erwartungsprofil für die nächste Übung ab (ohne Freitext-Anfrage).', $t$Du bist Assistent für Kampfsport-Trainer in der Trainingsplanung. Der Trainer wählt „nächste Übung aus Kontext“ — es gibt KEINE zusätzliche Freitext-Suchanfrage. Deine Aufgabe: Aus dem Planungskontext und dem deterministischen Basis-Zielprofil ein präzises Erwartungsprofil ableiten: - Was soll die nächste Übung fachlich leisten (Fortsetzen, Vertiefen, Lücke schließen, Abwechslung)? - Welche Fähigkeiten, Fokus-Bereiche, Trainingsstile passen dazu? - Berücksichtige: Rahmen/Einheit, Abschnittsziel (guidance_notes), letzte Übung im Abschnitt, Anker-Übung, Skill-Profile Einheit vs. Abschnitt, Skill-Lücken im Basisprofil. Intent (intent): meist suggest_next oder continue_plan_goal; progression_next nur wenn Progressionsgraph/Anker klar nahelegt; deepen_exercise nur bei klarer Vertiefungslage. continuation (optional, Kurzlabel): - build_on_section: nahtlos an Abschnitt/letzte Übung anknüpfen - close_skill_gap: fehlende Fähigkeiten aus Plan/Rahmen nachziehen - deepen_anchor: Anker-Übung vertiefen - variety: bewusst variieren nach bisherigem Block - balance_load: Belastung ausgleichen / Tempo wechseln Nutze skill_hints/focus_hints etc. mit Namen aus den Katalog-JSONs (beste Übereinstimmung). emphasis: fast immer additive (baut auf Basisprofil auf), nur replace wenn Kontext eindeutig neuen Schwerpunkt verlangt. Eingabe: Heuristik-Intent: {{heuristic_intent}} Planungskontext: {{planning_context_json}} Basis-Zielprofil (deterministisch): {{target_profile_json}} Kataloge (Auszug — nur diese Namen/IDs verwenden): Skills: {{skills_catalog_json}} Fokus: {{focus_areas_catalog_json}} Trainingsstil: {{training_types_catalog_json}} Stilrichtung: {{style_directions_catalog_json}} Zielgruppe: {{target_groups_catalog_json}} Antworte NUR mit JSON: { "intent": "suggest_next", "scenario": "preset_next", "continuation": "build_on_section", "skill_hints": [{"name": "Kime", "weight": 0.9}], "focus_hints": [], "style_hints": [], "training_type_hints": [], "target_group_hints": [], "requires_partner": null, "emphasis": "additive", "rationale": "Kurz auf Deutsch, 1–2 Sätze: warum diese nächste Übung sinnvoll ist" }$t$, 'training', 'json', '{"type":"object","required":["intent","scenario","rationale"],"properties":{"intent":{"type":"string"},"scenario":{"type":"string"},"continuation":{"type":"string"},"skill_hints":{"type":"array"},"emphasis":{"type":"string"},"rationale":{"type":"string"}}}'::jsonb, true, NULL, true, 12 WHERE NOT EXISTS (SELECT 1 FROM ai_prompts WHERE slug = 'planning_exercise_expectation_profile'); UPDATE ai_prompts SET default_template = template WHERE slug = 'planning_exercise_expectation_profile' AND (default_template IS NULL OR TRIM(default_template) = '');