# 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)