2026-04-21 14:26:12 +02:00
# Shinkan Jinkendo Version Information
2026-05-05 08:41:43 +02:00
APP_VERSION = " 0.8.8 "
BUILD_DATE = " 2026-05-05 "
DB_SCHEMA_VERSION = " 20260505035 "
2026-04-21 14:26:12 +02:00
MODULE_VERSIONS = {
" auth " : " 1.0.0 " ,
" profiles " : " 1.0.0 " ,
" clubs " : " 0.1.0 " ,
" groups " : " 0.1.0 " ,
" skills " : " 0.1.0 " ,
" methods " : " 0.1.0 " ,
2026-05-03 18:07:52 +02:00
" exercises " : " 2.3.0 " , # Progressionsgraph: Sequenz-API, Varianten-Knoten, UX Ketten (Migration 034)
2026-04-21 14:26:12 +02:00
" training_units " : " 0.1.0 " ,
" training_programs " : " 0.1.0 " ,
2026-05-05 08:41:43 +02:00
" planning " : " 0.4.0 " ,
2026-04-24 14:41:52 +02:00
" import_wiki " : " 1.0.0 " ,
2026-04-21 14:26:12 +02:00
" admin " : " 1.0.0 " ,
" membership " : " 1.0.0 " ,
2026-04-23 14:22:17 +02:00
" catalogs " : " 1.5.0 " , # Updated: Trainer Contexts API (Migration 012)
2026-04-27 13:13:36 +02:00
" maturity_models " : " 1.4.0 " , # matrix_stack_bundle: vollständiger Katalog+Modelle+Bindings Export/Import
2026-04-21 14:26:12 +02:00
}
CHANGELOG = [
2026-05-05 08:41:43 +02:00
{
" version " : " 0.8.8 " ,
" date " : " 2026-05-05 " ,
" changes " : [
" DB 035: Trainingsrahmenprogramm (Rahmen, Ziele, Slots, Slot-Übungen); plan_mode concrete|library " ,
" DB 035: training_plan_templates.visibility + Backfill club (CURR-007/008) " ,
" API: CRUD /api/training-framework-programs (AuthZ wie Übungs-/Planungsbibliothek) " ,
] ,
} ,
2026-05-03 18:07:52 +02:00
{
" version " : " 0.8.7 " ,
" date " : " 2026-04-30 " ,
" changes " : [
" DB 034: Progressionskanten mit optionalen Varianten-Endpunkten " ,
" API: POST …/edges/sequence (Reihe auf einmal); POST …/edges/delete-batch " ,
" Frontend Progressions-UI: Sequenz-Editor, Ketten-Ansicht, Variantenwahl " ,
] ,
} ,
2026-04-30 11:47:50 +02:00
{
" version " : " 0.8.6 " ,
" date " : " 2026-04-30 " ,
" changes " : [
" DB 033: exercise_progression_edges.notes (Entwicklungsziel) " ,
" API: Kanten mit notes; JOIN Übungstitel in Listen; PUT Kanten-Notiz " ,
" Frontend: Progressionsgraphen-Tab unter Übungen + Bereich in Übung bearbeiten " ,
] ,
} ,
{
" version " : " 0.8.5 " ,
" date " : " 2026-04-30 " ,
" changes " : [
" DB 032: exercise_progression_graphs + exercise_progression_edges (Übung→Übung, edge_type next_exercise) " ,
" API: CRUD Progressionsgraphen und Kanten unter /api/exercise-progression-graphs " ,
] ,
} ,
2026-04-29 12:29:39 +02:00
{
" version " : " 0.8.4 " ,
" date " : " 2026-04-27 " ,
" changes " : [
" run_migrations: Warteschlange nach numerischem Präfix der Dateien (stabile Reihenfolge auch bei ungleich langen Zahlen wie 9 vs 10) " ,
] ,
} ,
{
" version " : " 0.8.3 " ,
" date " : " 2026-04-28 " ,
" changes " : [
" Migrationen: Warteschlange aller fehlenden *.sql; idempotent über schema_migrations " ,
" Ausführung vorzugsweise psql -1 -f (eine Transaktion pro Datei); Fallback psycopg2 + sqlparse.split " ,
" requirements: sqlparse wenn kein psql im PATH " ,
] ,
} ,
{
" version " : " 0.8.2 " ,
" date " : " 2026-04-28 " ,
" changes " : [
" main: run_migrations — Exit-Code auswerten; bei Fehler kein API-Start (verhindert Prod ohne Skill-Tabellen wie 022) " ,
" SKIP_DB_MIGRATE=1 optional für lokale Runs ohne Datenbank " ,
] ,
} ,
{
" version " : " 0.8.1 " ,
" date " : " 2026-04-28 " ,
" changes " : [
" skills: JSONB keywords per psycopg2.extras.Json (verhindert 500 wenn keywords als Objekt/Array gesendet wird) " ,
" GET /api/health/ready: DB-Verbindung + Kern-Tabellen + schema_migrations_count (ohne Auth, für Prod-Debugging) " ,
] ,
} ,
2026-04-28 10:59:09 +02:00
{
2026-04-28 16:31:45 +02:00
" version " : " 0.8.0 " ,
" date " : " 2026-04-28 " ,
" changes " : [
" DB 031: Trainingsvorlagen (Sektionen) + Struktur pro Einheit (Sektionen, Übungen/Notizen, Dauer) " ,
" API: /api/training-plan-templates CRUD; Trainingseinheiten mit sections[] + plan_template_id " ,
" Trainingsplanung UI: Abschnitte, Zwischen-Anmerkungen, Vorlagen auswählen / speichern " ,
] ,
} ,
2026-04-28 16:34:27 +02:00
{
" version " : " 0.7.9 " ,
2026-04-28 10:59:09 +02:00
" date " : " 2026-04-27 " ,
" changes " : [
" Übungsvarianten: POST/PUT/DELETE /api/exercises/ {id} /variants + reorder " ,
" Übung bearbeiten: voller Varianten-Editor (Speichern pro Variante, Reihenfolge, Voraussetzung) " ,
" Übung Ansehen: Varianten-Metadaten (Dauer, Schwierigkeit, Material, Progression) " ,
" GET /exercises Detail: Varianten-Sortierung sequence_order → progression_level " ,
] ,
} ,
2026-04-28 09:30:33 +02:00
{
" version " : " 0.7.8 " ,
" date " : " 2026-04-27 " ,
" changes " : [
" DB 030: training_unit_exercises.exercise_variant_id (FK exercise_variants) " ,
" GET /exercises?include_variants=true liefert Varianten für Trainingsplanung " ,
" Trainingseinheiten: optional exercise_variant_id beim Anlegen/Aktualisieren " ,
] ,
} ,
2026-04-27 18:25:23 +02:00
{
" version " : " 0.7.7 " ,
" date " : " 2026-04-27 " ,
" changes " : [
" DB 029: Fähigkeitsstufen Einheit (basis– optimierung), model_levels Namen 1– 5 " ,
" Übungen: GET /exercises Filter Stilrichtung, Trainingsstil, Zielgruppe, Fähigkeits-Stufe min/max, ai_search (Volltext-Platzhalter) " ,
" API: exercise_skills Level-Normalisierung bei Schreiben/Lesen; Wiki-Import Slugs statt Zahl in DB " ,
] ,
} ,
2026-04-27 13:13:36 +02:00
{
" version " : " 0.7.6 " ,
" date " : " 2026-04-27 " ,
" changes " : [
" API: GET/POST /api/admin/matrix-stack (shinkan.matrix_stack.v1) – Fähigkeitskatalog, Reifegradmodelle, Kontext-Bindings für Test→Prod " ,
2026-04-27 14:27:25 +02:00
" DB 028: exercise_media (Embed/Metadaten), exercise_skills VARCHAR-Level/Intensität; API: POST/PUT/DELETE Medien, /media Static; Übungen-Listen-Fokus " ,
2026-04-27 13:13:36 +02:00
] ,
} ,
2026-04-27 13:05:18 +02:00
{
" version " : " 0.7.5 " ,
" date " : " 2026-04-27 " ,
" changes " : [
" Resolve/Export: Legacy M:N nur noch, wenn für den Fokus keine Kontext-Bindings existieren (korrekte Striktheit für Fokus+Trainingsstil / Teil-Kontexte) " ,
] ,
} ,
2026-04-27 12:48:22 +02:00
{
" version " : " 0.7.4 " ,
" date " : " 2026-04-27 " ,
" changes " : [
" DB 027: Bindings Fokus+Trainingsstil ohne Stilrichtung " ,
" resolve: alle passenden Bindings nach Spezifität mergen " ,
" API: Export/Import JSON (Modell + aufgelöste Matrix) " ,
] ,
} ,
2026-04-27 12:35:48 +02:00
{
" version " : " 0.7.3 " ,
" date " : " 2026-04-27 " ,
" changes " : [
" DB 026: maturity_model_context_bindings (Fokus / Stilrichtung / Trainingsstil) " ,
" API: resolve merged mehrere Modelle; CRUD Bindings; training_type_id Query " ,
" Admin-Tab Kontext-Zuordnung " ,
] ,
} ,
2026-04-27 11:42:03 +02:00
{
" version " : " 0.7.2 " ,
" date " : " 2026-04-27 " ,
" changes " : [
" DB: Migration 025 – maturity_model_focus_areas / _style_directions / _target_groups (M:N) " ,
" Bootstrap-Reifegradmodell für alle importierten Skills (Wiki), Stufen 1– 5 " ,
" API+UI: Kontext als Mehrfachauswahl; Matrix zeigt Haupt-/Untergruppe pro Fähigkeit " ,
] ,
} ,
2026-04-27 11:32:30 +02:00
{
" version " : " 0.7.1 " ,
" date " : " 2026-04-27 " ,
" changes " : [
" DB: Migration 024 – maturity_models, model_levels, model_skills, model_skill_levels " ,
" API: CRUD Reifegradmodelle, Matrix-Pflege, resolve-Kontext " ,
" Frontend: Admin Fähigkeitsmatrix (/admin/maturity-models) " ,
] ,
} ,
feat: Exercises v2.0 + Migrations 014/016/017 (Clean-Room Rebuild)
BREAKING CHANGES:
- exercises.py komplett neu gebaut (kein Legacy-Code)
- Legacy-Felder entfernt: age_groups, focus_area, secondary_areas, training_character
- Nur M:N Relations, keine JSONB-Kataloge
Migrations:
- Migration 014: Variant Progression + Search Vector + Legacy DROP
- exercise_variants: progression_level, sequence_order, prerequisite_variant_id
- exercises: search_vector (tsvector für Volltext-Suche)
- DROP age_groups, focus_area, secondary_areas, training_character
- Helper: update_timestamp() Funktion für Triggers
- Migration 016: Saved Exercise Searches
- saved_exercise_searches (profile_id, name, filters JSONB)
- Migration 017: Exercise Blocks + Template Blocks
- exercise_blocks (name, description, goal, is_template)
- exercise_block_items (exercise_id, variant_id, sequence_order, is_placeholder, placeholder_criteria)
Backend (exercises.py v2.0):
- GET /exercises: Volltext-Suche via tsvector, M:N Joins
- GET /exercises/{id}: enrich_exercise_detail() mit allen M:N Relations
- POST /exercises: M:N Relations (focus_areas_multi, training_styles_multi, target_groups_multi, age_groups, skills)
- PUT /exercises: Partial Update + M:N Relations
- DELETE /exercises: Cascade-Check für exercise_block_items
Architecture:
- Issue #53 konform: Import = Feld-Zuordnung, keine fachliche Interpretation
- Helper: enrich_exercise_detail() für vollständige Objekte
- Helper: assign_exercise_relations() für M:N Management (DELETE+INSERT Pattern)
Docs:
- SMW_IMPORTER_GAP_ANALYSIS.md: Vollständige Gap-Analyse + Umsetzungsplan
Version: 0.7.0
Module: exercises 2.0.0
Schema: 20260424002
2026-04-24 15:04:27 +02:00
{
" version " : " 0.7.0 " ,
" date " : " 2026-04-24 " ,
" changes " : [
" BREAKING: Exercises v2.0 - Clean-Room Rebuild (kein Legacy-Code) " ,
" DB: Migration 014 - Variant Progression + Search Vector + Legacy DROP (age_groups, focus_area, secondary_areas, training_character) " ,
" DB: Migration 016 - Saved Exercise Searches " ,
" DB: Migration 017 - Exercise Blocks + Template Blocks " ,
" Backend: exercises.py komplett neu nach EXERCISES_API_SPEC.md v1.2 " ,
" Backend: Nur M:N Relations, keine JSONB-Kataloge mehr " ,
" Backend: enrich_exercise_detail() für vollständige Objekte " ,
" Backend: assign_exercise_relations() für M:N Management " ,
" API: GET /exercises - Volltext-Suche via tsvector " ,
" API: POST/PUT /exercises - M:N Relations (focus_areas_multi, training_styles_multi, etc.) " ,
" Issue #53 konform: Import = Feld-Zuordnung, keine fachliche Interpretation " ,
]
} ,
2026-04-24 14:41:52 +02:00
{
" version " : " 0.6.0 " ,
" date " : " 2026-04-24 " ,
" changes " : [
" Feature: MediaWiki Import (SMW Direct API) " ,
" DB: Migration 018 - wiki_import_log + wiki_import_references " ,
" Backend: SmwClient (login, browse, ask, categorymembers) " ,
" Backend: SmwMapper (SMW Properties → exercises/skills/methods) " ,
" Backend: import_wiki Router (preview, execute, status, logs, discover) " ,
" Config: MEDIAWIKI_API_URL=https://karatetrainer.net/api.php " ,
]
} ,
2026-04-23 14:22:17 +02:00
{
" version " : " 0.5.0 " ,
" date " : " 2026-04-23 " ,
" changes " : [
" Feature: Trainer-Kontext-System für fokussierte Ansichten " ,
" DB: Migration 012 - exercise_training_characters (M:N) " ,
" DB: Migration 012 - trainer_contexts (Trainer-Profil-System) " ,
" Backend: CRUD API für Trainer-Kontexte (/api/trainer-contexts) " ,
" Frontend: TrainerContextsPage für Verwaltung eigener Arbeitsbereiche " ,
" Architektur: Flat Catalogs + Smart Filtering für 1000+ Übungen " ,
" Architektur: NULL = ' für alles geeignet ' , M:N = spezifische Zuordnung " ,
]
} ,
2026-04-23 12:10:27 +02:00
{
" version " : " 0.4.0 " ,
" date " : " 2026-04-23 " ,
" changes " : [
" BREAKING: Migration 010 - Umbenennung training_styles → style_directions " ,
" BREAKING: Migration 011 - Neue Dimension training_types (Breitensport/Leistungssport) " ,
" DB: Konsistente Terminologie - Stilrichtungen vs. Trainingsstile " ,
" DB: Neue Tabelle training_types mit Seed-Daten (Breitensport, Leistungssport, Wettkampf) " ,
" DB: Neue Junction-Tabelle exercise_training_types (M:N) " ,
" Architektur: Fokusbereich → Stilrichtung → Trainingsstil → Zielgruppe (alle M:N) " ,
2026-04-23 12:24:50 +02:00
" Backend: Alle SQL Queries aktualisiert auf neue Tabellennamen (style_directions, style_direction_target_groups) " ,
" Backend: API Parameter umbenannt (training_style_id → style_direction_id) " ,
" Backend: CRUD Endpoints für training_types hinzugefügt " ,
2026-04-23 12:10:27 +02:00
]
} ,
2026-04-23 10:37:56 +02:00
{
" version " : " 0.3.4 " ,
" date " : " 2026-04-23 " ,
" changes " : [
" BREAKING: Migration 009 - Zielgruppen M:N Refactoring " ,
" DB: target_groups.training_style_id entfernt (jetzt global unabhängig) " ,
" DB: Neue Junction-Tabelle training_style_target_groups (M:N) " ,
" API: 5 neue Endpoints für M:N Management (GET/POST/PUT/DELETE + hierarchy) " ,
" API: GET /training-style-target-groups mit Enrichment (focus_area_name, training_style_name) " ,
" API: GET /training-styles/hierarchy für Tree-View (verschachtelte Struktur) " ,
" API: POST /training-style-target-groups mit Upsert-Logik " ,
" Backward-Compatible: exercise_target_groups weiterhin unterstützt " ,
" Architecture: Eine Zielgruppe kann mehreren Stilen zugeordnet werden " ,
]
} ,
2026-04-23 09:00:28 +02:00
{
" version " : " 0.3.3 " ,
" date " : " 2026-04-23 " ,
" changes " : [
" Fix: Admin-Navigation - Redirect /admin → /admin/catalogs " ,
" Fix: Admin-Link funktioniert jetzt (vorher 404) "
]
} ,
2026-04-23 08:55:54 +02:00
{
" version " : " 0.3.2 " ,
" date " : " 2026-04-23 " ,
" changes " : [
" Feature: Zielgruppen-Verwaltung komplett (Backend + Frontend) " ,
" API: GET/POST/PUT/DELETE /target-groups mit hierarchischem Kontext (focus_area → training_style → target_group) " ,
" Admin UI: Neuer Tab ' Zielgruppen ' in Katalogverwaltung " ,
" UX: Create/Edit-Forms mit Training-Stil-Auswahl, Altersbereich (min/max) " ,
" UX: Hierarchie-Anzeige in Liste (Fokusbereich → Stil → Zielgruppe) " ,
" Protection: DELETE mit CASCADE-Schutz (Fehler wenn Übungen zugeordnet) " ,
]
} ,
2026-04-23 08:51:45 +02:00
{
" version " : " 0.3.1 " ,
" date " : " 2026-04-23 " ,
" changes " : [
" Feature: Exercises-Router unterstützt M:N Zuordnungen " ,
" API: GET /exercises/ {id} liefert focus_areas[], training_styles[], target_groups[], age_groups_catalog[] " ,
" API: POST/PUT /exercises akzeptiert focus_areas_multi[], training_styles_multi[], target_groups_multi[], age_groups_catalog[] " ,
" Pattern: DELETE+INSERT für M:N Updates (konsistent mit skills) " ,
" Backward-Compatible: Legacy FK-Felder (focus_area_id, training_style_id) bleiben erhalten " ,
]
} ,
2026-04-23 08:46:56 +02:00
{
" version " : " 0.3.0 " ,
" date " : " 2026-04-23 " ,
" changes " : [
" BREAKING: M:N Beziehungen für Übungen (statt 1:1) " ,
" Migration 008: M:N Zuordnungstabellen (exercise_focus_areas, exercise_styles, exercise_target_groups, exercise_age_groups) " ,
" Feature: Hierarchische Katalog-Struktur (Fokusbereich → Stil → Zielgruppe) " ,
" Feature: Zielgruppen-Verwaltung (training_styles.focus_area_id Hierarchie) " ,
" Feature: Primary/Secondary Assignments (is_primary Flag) " ,
" Doku: DATABASE_SCHEMA.md + DOMAIN_MODEL.md kontinuierlich gepflegt " ,
" Architecture: Smart Cascade-Logik (RESTRICT, Rerouting, Move) " ,
]
} ,
2026-04-23 08:05:11 +02:00
{
" version " : " 0.2.0 " ,
" date " : " 2026-04-23 " ,
" changes " : [
" Feature: Admin-verwaltbare Kataloge (Focus Areas, Training Styles, Training Characters, Skill Categories) " ,
" Feature: Trainer-Fokusbereich-Zuordnung für rollenbasierte Filterung " ,
" Migration 007: Katalog-Tabellen + Seed-Daten " ,
" Frontend: AdminCatalogsPage mit 5 Tabs (CRUD für alle Kataloge) " ,
" Frontend: ExercisesPage nutzt Katalog-Dropdowns (kein Hard-Coding mehr) " ,
" Frontend: Trainingsstil-Dropdown hinzugefügt (fehlte komplett) " ,
" Standardisierung: Alle Formulare mit Labels oben, volle Breite, linksbündig " ,
]
} ,
2026-04-21 14:26:12 +02:00
{
" version " : " 0.1.0 " ,
" date " : " 2026-04-21 " ,
" changes " : [
" Initial MVP Setup " ,
" Feature: Übungsverwaltung (Kern-Modul) " ,
" Feature: Fähigkeiten- und Methodenkataloge " ,
" Feature: Trainingsplanung für Gruppen " ,
" Feature: Trainingsabschnitte mit Kombinations-Flag " ,
" Feature: MediaWiki-Import (einseitig) " ,
" Feature: Freigabelogik (privat/Verein/offiziell) " ,
" Infrastructure: Auth + Membership von Mitai übernommen " ,
]
}
]