# Review Prompt: Exercises System Specifications

**Zweck:** Vollständiger Review der erstellten Spezifikationen gegen ursprüngliche Anforderungen und User-Ergänzungen

**Reviewer:** Plan Agent (oder anderer spezialisierter Agent)

**Status:** ✅ Review abgeschlossen + Fixes implementiert

**Datum:** 2026-04-24
**Review-Datum:** 2026-04-24
**Ergebnis:** APPROVED WITH CHANGES – alle BLOCKER und MAJOR Issues behoben

---

## 1. Kontext & Auftrag

Du bist ein Plan Agent, der die erstellten Spezifikationen für das Exercise System in Shinkan Jinkendo reviewt. Deine Aufgabe ist es, die 7 Core-Specs gegen die ursprünglichen Anforderungen und User-Ergänzungen zu prüfen und sicherzustellen, dass **keine Anforderungen vergessen** wurden und **keine architektonischen Drifts** entstanden sind.

---

## 2. Zu reviewende Spezifikationen

### 2.1 Core Specs (Phase 0 Foundation)

**Lokation:** `c:/Dev/shinkan-jinkendo/.claude/docs/technical/`

1. **EXERCISES_ARCHITECTURE.md** (ca. 800 Zeilen)
   - Architektur-Entscheidungen
   - Exercise/Variant/Block/Series Definitionen
   - Media-Strategie
   - API-Konventionen
   - DB-Konventionen
   - Decision Log

2. **UI_COMPONENTS_SPEC.md** (ca. 600 Zeilen)
   - Base Components (Chip, MultiSelect, Accordion, DragDropList)
   - Exercise Components (Card, QuickInfo, VariantCard, MediaGallery, MediaUploader)
   - Layout Patterns
   - Responsive Breakpoints
   - Accessibility

3. **EXERCISES_API_SPEC.md** (ca. 574 Zeilen)
   - Alle Endpoints (Exercises, Variants, Media)
   - Request/Response Beispiele
   - Validierung Rules
   - Error Format
   - HTTP Status Codes

4. **EXERCISES_FRONTEND_ROUTING.md** (ca. 400 Zeilen)
   - Route-Struktur
   - Navigation Patterns
   - State Management (URL, Local, Context)
   - Deep Linking
   - Navigation Guards
   - Performance (Lazy Loading, Prefetching)

5. **MEDIA_UPLOAD_SPEC.md** (ca. 500 Zeilen)
   - Hybrid Upload-Strategie (Lokal + Embeds)
   - Upload-Flow (Client + Server)
   - Embed-Parsing (YouTube, Vimeo, Instagram, TikTok)
   - Media-Galerie
   - Drag & Drop Reordering
   - Security & Performance

6. **SEARCH_FILTER_SPEC.md** (ca. 450 Zeilen)
   - Multi-Layer Search (Keyword, Katalog, Meta)
   - Volltext-Suche (tsvector)
   - Frontend Filter-UI
   - Erweiterte Filter (Multi-Select, Range, Equipment)
   - Faceted Search
   - Saved Searches
   - Sortierung

7. **EXERCISES_DATABASE_FINAL.md** (ca. 600 Zeilen)
   - Migration 014 (Variant Progression + Search Vector)
   - Migration 015 (Semantic Matching - Optional)
   - Migration 016 (Saved Searches)
   - Vollständige Tabellenstruktur
   - Indizes
   - Constraints & Business Rules
   - Trigger-Funktionen

---

## 3. Ursprüngliche Anforderungen

### 3.1 User-Anforderungen (Initial Message)

**Quelle:** Erste User-Message in Session

**Kern-Anforderungen:**

1. **Formatierte Ausgabe:** Übungen mit Embedded Videos, Zeichnungen, optimiert für verschiedene Use Cases
2. **Varianten:** Mehrere Varianten mit progressiven Schwierigkeitsstufen
3. **Exercise Series:** Progression durch Varianten derselben Übung
4. **Exercise Blocks:** Sammlungen verschiedener Übungen
5. **Multi-dimensionale Kategorisierung:** Stil, Fokus, Zielgruppe, Fähigkeiten-Matrix mit Levels
6. **Trainingsplan-Integration:** Muss mit Trainingsplan-System integrieren
7. **MediaWiki-Import:** Direct API Integration (NICHT export-basiert)
8. **Robustheit:** Kein ständiger Drift, skalierbar, umfassend

**Spec-First Approach gewählt:** Alle Specs VOR Implementation

### 3.2 User-Ergänzungen (Follow-up)

**Quelle:** Zweite User-Message mit 5 Klarstellungen

**Präzisierungen:**

1. **Priorisierung OK:** Spec-First Ansatz bestätigt
2. **Web + Mobile Priorität (NICHT Print/PDF):**
   - Kurze vs. detaillierte Beschreibungen für Trainingspläne
3. **Media-Strategie:** Lokaler Upload + YouTube/Instagram Embeds
4. **Exercise Series vs. Blocks Klarstellung:**
   - **Series:** Progressive Varianten derselben Übung (via Variant-Metadata)
   - **Blocks:** Gruppierung VERSCHIEDENER Übungen (neue Entity)
   - **Template Blocks:** Blocks mit Platzhaltern (gefüllt beim Planen)
5. **MediaWiki Import:** Via Direct API (NICHT Export)

### 3.3 Referenz-Dokumente

**Quelle:** Zu lesende Dokumente vor Spec-Erstellung

1. **shinkan_anforderungsdokument_entwurf.md** (1425 Zeilen)
   - Fachliche Anforderungen
   - Reifegradmodelle
   - Übungen & Methoden
   - Trainingsplanung
   - MVP Scope: Trainer-fokussiert

2. **DOMAIN_MODEL.md** (Version 0.3.4)
   - Hierarchische Struktur: Fokusbereich → Stil → Zielgruppen (M:N)
   - Primary/Secondary Pattern für M:N
   - Migration 009 deployed (Zielgruppen M:N Refactoring)

3. **DATABASE_SCHEMA.md** (Version 0.3.4)
   - Existierende M:N Tabellen
   - Migrations 001-013 deployed

4. **backend/routers/exercises.py** (454 Zeilen)
   - Existierendes CRUD
   - Enrichment-Pattern für M:N Relations
   - Filter-Support

5. **backend/migrations/005_exercises.sql**
   - Base exercises table
   - exercise_skills, exercise_variants, exercise_media

6. **backend/migrations/008_mn_exercise_relations.sql**
   - M:N Migration (focus_areas, styles, target_groups, age_groups)

7. **frontend/src/pages/ExercisesPage.jsx** (609 Zeilen)
   - Existierende UI (Grid, Filters, Modal)
   - Limitation: Nutzt M:N Backend-Daten NICHT

---

## 4. Review-Kriterien

### 4.1 Vollständigkeit (Completeness)

**Prüfe gegen ursprüngliche Anforderungen:**

- [ ] **Formatierte Ausgabe:** Sind Embedded Videos, Zeichnungen, verschiedene Use Cases abgedeckt?
- [ ] **Varianten mit Progression:** Sind progressive Schwierigkeitsstufen spezifiziert?
- [ ] **Exercise Series:** Ist Progression durch Varianten klar definiert (OHNE separate Entity)?
- [ ] **Exercise Blocks:** Ist Gruppierung verschiedener Übungen spezifiziert?
- [ ] **Template Blocks:** Sind Platzhalter-Blocks für Planung definiert?
- [ ] **Multi-dimensionale Kategorisierung:** Sind Stil, Fokus, Zielgruppe, Skills mit Levels abgedeckt?
- [ ] **Trainingsplan-Integration:** Ist Integration mit Training Plan System spezifiziert?
- [ ] **MediaWiki-Import:** Ist Direct API Integration (NICHT Export) spezifiziert?
- [ ] **Kurz vs. Detail:** Sind verschiedene Beschreibungslängen für Trainingspläne definiert?

### 4.2 Konsistenz (Consistency)

**Prüfe gegen Referenz-Dokumente:**

- [ ] **DOMAIN_MODEL.md:** Folgen Specs der hierarchischen Struktur (Fokusbereich → Stil → Zielgruppen)?
- [ ] **M:N Pattern:** Wird `is_primary` Flag korrekt genutzt?
- [ ] **DATABASE_SCHEMA.md:** Bauen Migrationen 014-016 auf 001-013 auf?
- [ ] **Existierender Code:** Sind Specs kompatibel mit `backend/routers/exercises.py`?
- [ ] **Migration-Pattern:** Folgen neue Migrationen dem idempotenten DO $$ Pattern?

### 4.3 Architektonische Korrektheit (No Drift)

**Prüfe gegen User-Ergänzungen:**

- [ ] **Series vs. Blocks:** Ist die Unterscheidung klar und korrekt umgesetzt?
  - Series = Progression durch Varianten (Metadata in `exercise_variants`)
  - Blocks = Neue Entity für Gruppierung verschiedener Übungen
- [ ] **Media-Strategie:** Hybrid (Lokal + Embeds) korrekt spezifiziert?
- [ ] **Keine Cloud-Only Annahme:** Lokaler Upload vorhanden?
- [ ] **Direct API statt Export:** MediaWiki-Import via API spezifiziert?

### 4.4 Technische Machbarkeit (Feasibility)

- [ ] **Performance:** Sind Performance-Targets realistisch (<50ms List, <150ms Search)?
- [ ] **Skalierbarkeit:** DB-Schema skaliert auf 5.000+ Übungen?
- [ ] **Security:** File-Upload-Validierung mit python-magic (nicht nur Extension)?
- [ ] **UX:** Mobile-Optimierung (Filter-Drawer, Sticky Search, Bottom-Nav) vorhanden?

### 4.5 Gaps & Fehlende Features

**Prüfe auf vergessene Features:**

- [ ] **Trainingscharakter (M:N):** Ist `exercise_training_characters` spezifiziert?
- [ ] **Fähigkeiten-Levels:** Sind `required_level` und `target_level` in `exercise_skills` definiert?
- [ ] **Visibility-Workflow:** Ist `private → club → official` Status-Flow spezifiziert?
- [ ] **Permissions:** Sind Owner-Checks (nur Ersteller darf bearbeiten) definiert?
- [ ] **Pagination:** Ist Pagination in List-Endpoints spezifiziert?
- [ ] **Reordering:** Ist Drag & Drop Reordering für Variants + Media definiert?

---

## 5. Review-Prozess

### 5.1 Schritt-für-Schritt Anleitung

**Schritt 1: Dokumente lesen**
1. Lies alle 7 Core-Specs vollständig durch
2. Mache dir Notizen zu Auffälligkeiten
3. Markiere unklare oder widersprüchliche Stellen

**Schritt 2: Checkliste durchgehen**
1. Gehe durch Abschnitt 4.1 (Vollständigkeit) - jede Anforderung einzeln prüfen
2. Gehe durch Abschnitt 4.2 (Konsistenz) - gegen Referenz-Docs prüfen
3. Gehe durch Abschnitt 4.3 (Architektur) - gegen User-Ergänzungen prüfen
4. Gehe durch Abschnitt 4.4 (Machbarkeit) - technische Risiken bewerten
5. Gehe durch Abschnitt 4.5 (Gaps) - fehlende Features identifizieren

**Schritt 3: Cross-Check zwischen Specs**
1. ARCHITECTURE.md ↔ API_SPEC.md: Sind Decisions in API umgesetzt?
2. API_SPEC.md ↔ DATABASE_FINAL.md: Matchen Endpoints zur DB-Struktur?
3. UI_COMPONENTS_SPEC.md ↔ FRONTEND_ROUTING.md: Passen Komponenten zu Routes?
4. MEDIA_UPLOAD_SPEC.md ↔ DATABASE_FINAL.md: Passt `exercise_media` Tabelle?
5. SEARCH_FILTER_SPEC.md ↔ DATABASE_FINAL.md: Ist `search_vector` definiert?

**Schritt 4: Gap-Analyse**
1. Erstelle Liste aller **fehlenden** Anforderungen
2. Erstelle Liste aller **widersprüchlichen** Definitionen
3. Erstelle Liste aller **unklaren** Spezifikationen
4. Erstelle Liste aller **technischen Risiken**

**Schritt 5: Review-Report erstellen**
1. Folge Template in Abschnitt 6
2. Fülle alle Abschnitte vollständig aus
3. Sei konkret: Datei + Zeile + Problem + Lösungsvorschlag

---

## 6. Review-Report Template

**Nutze dieses Template für deinen Review-Report:**

```markdown
# Exercise System Specs - Review Report

**Reviewer:** [Dein Agent-Name]  
**Review-Datum:** [Datum]  
**Review-Dauer:** [ca. X Minuten]  
**Gesamtbewertung:** [APPROVED / APPROVED WITH CHANGES / REJECTED]

---

## 1. Executive Summary

[2-3 Sätze: Sind die Specs bereit für Implementation? Größte Probleme?]

---

## 2. Vollständigkeit (Completeness)

### 2.1 Erfüllte Anforderungen ✅

- [x] Formatierte Ausgabe: Abgedeckt in MEDIA_UPLOAD_SPEC.md (Abschnitt 4)
- [x] Varianten mit Progression: Abgedeckt in EXERCISES_DATABASE_FINAL.md (Migration 014)
- [... weitere ...]

### 2.2 Fehlende Anforderungen ❌

| Anforderung | Wo fehlt es? | Kritikalität | Lösungsvorschlag |
|-------------|--------------|--------------|------------------|
| Exercise Blocks Entity | EXERCISES_ARCHITECTURE.md erwähnt, aber nicht in DATABASE_FINAL.md | HIGH | Migration 017 für `exercise_blocks` Tabelle hinzufügen |
| Template Blocks Platzhalter | Nirgendwo spezifiziert | MEDIUM | Erweitere `exercise_blocks` um `is_template` + `placeholders` JSONB |
| ... | ... | ... | ... |

---

## 3. Konsistenz (Consistency)

### 3.1 Inkonsistenzen zwischen Specs

| Problem | Betroffene Dateien | Impact | Fix |
|---------|-------------------|--------|-----|
| API_SPEC.md definiert `age_groups_catalog` als JSONB, aber DOMAIN_MODEL.md sagt M:N | API_SPEC.md Zeile 104, DOMAIN_MODEL.md Abschnitt 3 | MEDIUM | Entscheide: JSONB ODER M:N (empfohlen: M:N für Konsistenz) |
| ... | ... | ... | ... |

### 3.2 Inkonsistenzen mit Referenz-Dokumenten

| Problem | Spec-Datei | Referenz-Dokument | Fix |
|---------|-----------|-------------------|-----|
| DOMAIN_MODEL.md sagt Zielgruppen sind global (M:N), aber API_SPEC.md zeigt `target_group_id` als FK | API_SPEC.md Zeile 267 | DOMAIN_MODEL.md Abschnitt 3.3 | Korrigiere API_SPEC zu M:N Array |
| ... | ... | ... | ... |

---

## 4. Architektur-Drift

### 4.1 Abweichungen von User-Ergänzungen

| User-Anforderung | Spec-Umsetzung | Konform? | Problem / Fix |
|-----------------|----------------|----------|---------------|
| "Series = Varianten-Progression OHNE separate Entity" | EXERCISES_ARCHITECTURE.md Abschnitt 2.2 definiert Series korrekt als Metadata | ✅ JA | - |
| "Blocks = neue Entity für verschiedene Übungen" | EXERCISES_ARCHITECTURE.md erwähnt, DATABASE_FINAL.md fehlt Migration | ❌ NEIN | Migration 017 fehlt |
| "Direct API statt Export" | Nirgendwo spezifiziert | ❌ NEIN | Neue Spec MEDIAWIKI_IMPORT_SPEC.md nötig |
| ... | ... | ... | ... |

---

## 5. Technische Risiken

| Risiko | Betroffene Spec | Wahrscheinlichkeit | Impact | Mitigation |
|--------|----------------|-------------------|--------|------------|
| tsvector auf großen Texten langsam | SEARCH_FILTER_SPEC.md | MEDIUM | HIGH | Teste Performance mit 10.000 Zeichen Execution-Text |
| 50MB File-Upload blockiert Server | MEDIA_UPLOAD_SPEC.md | HIGH | MEDIUM | Chunk-Upload oder separater Upload-Worker |
| pgvector Extension nicht verfügbar | DATABASE_FINAL.md Migration 015 | LOW | LOW | Migration 015 ist optional (Phase 2) |
| ... | ... | ... | ... | ... |

---

## 6. Gap-Analyse

### 6.1 Komplett fehlende Features

1. **Exercise Blocks Implementation**
   - Wo benötigt: DATABASE_FINAL.md, API_SPEC.md, UI_COMPONENTS_SPEC.md
   - Kritikalität: HIGH (User-Anforderung #4)
   - Aufwand: 1 Migration + 3 Endpoints + 2 Komponenten

2. **Template Blocks mit Platzhaltern**
   - Wo benötigt: DATABASE_FINAL.md, API_SPEC.md
   - Kritikalität: MEDIUM (User-Anforderung #4 Teil 2)
   - Aufwand: Erweitere Blocks-Tabelle + 1 Endpoint

3. **MediaWiki Direct API Import**
   - Wo benötigt: Neue Spec MEDIAWIKI_IMPORT_SPEC.md
   - Kritikalität: HIGH (User-Anforderung #7)
   - Aufwand: Neue Spec + Backend-Integration

4. [... weitere ...]

### 6.2 Unvollständig spezifizierte Features

1. **Trainingsplan-Integration**
   - Status: Erwähnt in ARCHITECTURE.md, aber keine konkreten Endpoints
   - Fehlende Details: Wie werden Übungen in Pläne eingefügt? API-Struktur?
   - Fix: Erweitere API_SPEC.md um `/training-plans/{id}/exercises` Endpoints

2. [... weitere ...]

---

## 7. Kritische Findings (Must-Fix vor Implementation)

### 🔴 BLOCKER (Implementation NICHT starten ohne Fix)

1. **Exercise Blocks fehlen komplett**
   - Impact: Kern-Anforderung #4 nicht erfüllt
   - Fix: Migration 017 + API-Endpoints + UI-Komponenten spezifizieren

2. **MediaWiki-Import nicht spezifiziert**
   - Impact: Kern-Anforderung #7 nicht erfüllt
   - Fix: Neue Spec MEDIAWIKI_IMPORT_SPEC.md erstellen

### 🟠 MAJOR (Fix vor Phase 1 Abschluss)

1. **age_groups: JSONB vs. M:N Inkonsistenz**
   - Impact: Daten-Modell unklar, spätere Migration schwierig
   - Fix: Entscheide für M:N (Konsistenz) oder JSONB (Einfachheit)

2. [... weitere ...]

### 🟡 MINOR (Fix in Phase 2 akzeptabel)

1. **Semantic Matching (Migration 015) optional**
   - Impact: Nice-to-have Feature, kein MVP-Blocker
   - Fix: Kein Fix nötig, als Phase 2 markieren

2. [... weitere ...]

---

## 8. Empfehlungen

### 8.1 Vor Implementation starten

1. **Fixe alle BLOCKER:** Exercise Blocks + MediaWiki-Import spezifizieren
2. **Kläre MAJOR Issues:** age_groups Inkonsistenz auflösen
3. **Ergänze Extended Specs:** VARIANTS_PROGRESSION_SPEC.md, EXERCISE_BLOCKS_SPEC.md, PERMISSIONS_VISIBILITY_SPEC.md
4. **User-Review:** Zeige Specs dem User, hole Feedback zu Blocks/Template-Blocks

### 8.2 Implementation-Reihenfolge (falls APPROVED)

**Phase 1A - Foundation:**
1. Migration 014 (Search Vector + Variant Progression)
2. Migration 016 (Saved Searches)
3. Backend: GET/POST/PUT/DELETE `/exercises` + `/exercises/{id}/variants`
4. Frontend: ExercisesListPage + ExerciseDetailPage (ohne Blocks)

**Phase 1B - Media:**
1. Backend: `/exercises/{id}/media` Endpoints
2. Frontend: MediaUploader + MediaGallery Komponenten

**Phase 1C - Search:**
1. Backend: Search + Filter in GET `/exercises`
2. Frontend: SearchFilterBar Komponente

**Phase 2 - Blocks (nach BLOCKER-Fix):**
1. Migration 017 (Exercise Blocks)
2. Backend: `/exercise-blocks` Endpoints
3. Frontend: BlockEditor Komponente

**Phase 3 - Import:**
1. MEDIAWIKI_IMPORT_SPEC.md erstellen
2. Backend: MediaWiki API Connector
3. Frontend: Import-UI

---

## 9. Positive Findings ✅

[Was ist gut gelaufen? Was ist besonders gut spezifiziert?]

1. **Sehr detaillierte API-Spec:** Alle Request/Response-Beispiele vorhanden
2. **Konsistentes M:N Pattern:** is_primary Flag durchgängig genutzt
3. **Performance-bewusst:** Indizes, Caching, Lazy Loading spezifiziert
4. **Accessibility:** ARIA, Keyboard-Nav, Skip-Links definiert
5. [... weitere ...]

---

## 10. Nächste Schritte

### Für Spec-Autor (Original Agent):
1. [ ] Fixe BLOCKER #1: Exercise Blocks spezifizieren
2. [ ] Fixe BLOCKER #2: MediaWiki-Import spezifizieren
3. [ ] Kläre MAJOR Issue: age_groups JSONB vs. M:N
4. [ ] Aktualisiere betroffene Specs (siehe Abschnitt 7)

### Für User:
1. [ ] Lese Executive Summary + Kritische Findings
2. [ ] Entscheide über Blocks/Template-Blocks Umsetzung
3. [ ] Priorisiere MediaWiki-Import (jetzt oder später?)
4. [ ] Gib Feedback zu age_groups Entscheidung

### Für Implementation:
- **WARTE** bis alle BLOCKER gefixt sind
- **DANACH:** Starte mit Phase 1A (Foundation)

---

**Review abgeschlossen:** [Datum/Uhrzeit]  
**Nächster Review:** [Nach BLOCKER-Fixes]
```

---

## 7. Wichtige Hinweise für Reviewer

### 7.1 Sei konkret

❌ **SCHLECHT:** "Die API-Spec ist inkonsistent"  
✅ **GUT:** "API_SPEC.md Zeile 267 zeigt `target_group_id` als FK, aber DOMAIN_MODEL.md Abschnitt 3.3 definiert Zielgruppen als M:N"

### 7.2 Priorisiere nach Impact

- **BLOCKER:** Verhindert Implementation-Start
- **MAJOR:** Muss vor Phase 1 Abschluss gefixt werden
- **MINOR:** Kann in Phase 2 gefixt werden

### 7.3 Schlage Lösungen vor

Nicht nur Probleme nennen, sondern auch:
- Konkrete Fix-Vorschläge
- Alternative Ansätze
- Trade-offs aufzeigen

### 7.4 Sei fair

- Lobe gute Spezifikationen
- Erkenne schwierige Trade-offs an
- Berücksichtige MVP-Scope (nicht alles muss perfekt sein)

---

## 8. Erfolgs-Kriterien für APPROVED

Specs sind **APPROVED**, wenn:

1. ✅ Alle User-Anforderungen (1-8) spezifiziert sind
2. ✅ Alle User-Ergänzungen (1-5) korrekt umgesetzt sind
3. ✅ Keine architektonischen Widersprüche existieren
4. ✅ Specs konsistent mit Referenz-Dokumenten sind
5. ✅ Keine BLOCKER-Issues offen sind
6. ✅ Technische Machbarkeit gegeben ist
7. ✅ Implementation-Reihenfolge klar definiert ist

Specs sind **APPROVED WITH CHANGES**, wenn:
- 1-2 MAJOR Issues existieren (aber klar, wie zu fixen)
- Mehrere MINOR Issues existieren
- Implementation kann starten, während Fixes parallel gemacht werden

Specs sind **REJECTED**, wenn:
- 3+ BLOCKER Issues existieren
- Fundamentale architektonische Probleme vorhanden
- Große Teile der Anforderungen fehlen

---

## 9. Beispiel-Review-Snippet

**So sollte ein gutes Review-Finding aussehen:**

```markdown
### 🔴 BLOCKER #1: Exercise Blocks fehlen in DB-Schema

**Problem:**
- EXERCISES_ARCHITECTURE.md Abschnitt 2.3 definiert Exercise Blocks als "Gruppierung verschiedener Übungen"
- EXERCISES_DATABASE_FINAL.md (Migration 014-016) enthält KEINE `exercise_blocks` Tabelle
- API_SPEC.md spezifiziert KEINE `/exercise-blocks` Endpoints

**Impact:**
- User-Anforderung #4 ("Exercise Blocks: Sammlungen verschiedener Übungen") NICHT erfüllt
- Trainingsplan-Integration (Anforderung #6) ohne Blocks schwierig

**Betroffene Dateien:**
- EXERCISES_DATABASE_FINAL.md (fehlt Migration 017)
- EXERCISES_API_SPEC.md (fehlt Abschnitt "Exercise Blocks")
- UI_COMPONENTS_SPEC.md (fehlt "BlockEditor" Komponente)

**Lösungsvorschlag:**

1. **Migration 017: Exercise Blocks**
```sql
CREATE TABLE exercise_blocks (
    id SERIAL PRIMARY KEY,
    name VARCHAR(200) NOT NULL,
    description TEXT,
    is_template BOOLEAN DEFAULT FALSE,
    placeholders JSONB, -- für Template-Blocks
    created_by INT REFERENCES profiles(id),
    created_at TIMESTAMP DEFAULT NOW()
);

CREATE TABLE exercise_block_items (
    id SERIAL PRIMARY KEY,
    block_id INT REFERENCES exercise_blocks(id) ON DELETE CASCADE,
    exercise_id INT REFERENCES exercises(id) ON DELETE CASCADE,
    sequence_order INT NOT NULL,
    notes TEXT,
    UNIQUE(block_id, sequence_order)
);
```

2. **API-Endpoints ergänzen:**
- `GET /exercise-blocks` - List blocks
- `POST /exercise-blocks` - Create block
- `PUT /exercise-blocks/{id}` - Update block
- `POST /exercise-blocks/{id}/items` - Add exercise to block
- `PUT /exercise-blocks/{id}/items/reorder` - Reorder exercises

3. **UI-Komponente spezifizieren:**
- BlockEditor mit Drag & Drop für Exercise-Reihenfolge
- Template-Modus mit Platzhalter-UI

**Aufwand:** ~4-6h (1 Migration + 5 Endpoints + 1 Komponente spezifizieren)

**Kritikalität:** BLOCKER - Implementation kann ohne Blocks NICHT User-Anforderungen erfüllen
```

---

## 10. Review starten

**Bereit? Dann:**

1. Lies alle 7 Spec-Dokumente gründlich
2. Gehe die Checkliste durch (Abschnitt 4)
3. Erstelle deinen Review-Report (Template Abschnitt 6)
4. Sei konkret, fair und konstruktiv
5. Priorisiere nach Impact (BLOCKER > MAJOR > MINOR)

**Viel Erfolg beim Review! 🚀**

---

**Letzte Aktualisierung:** 2026-04-24  
**Version:** 1.0  
**Autor:** Claude Code (Spec-Ersteller)
