shinkan-jinkendo/.claude/docs/working/PROGRESSION_GRAPH_SLOT_EDITOR_SPEC.md
Lars ee22b22970
All checks were successful
Deploy Development / deploy (push) Successful in 47s
Test Suite / pytest-backend (push) Successful in 44s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 14s
Test Suite / k6 /health Baseline (push) Successful in 34s
Test Suite / playwright-tests (push) Successful in 1m15s
Refactor Progression Graph Components and Consolidate UI
- Updated the `ProgressionGraphSlotEditorSpec.md` to reflect UI consolidation, removing separate editors and integrating functionalities into `ExerciseProgressionGraphPanel`.
- Refactored `ExerciseProgressionGraphPanel` to streamline the editing experience, removing unused state and logic for better performance.
- Enhanced `ProgressionGraphEditor` to support embedded usage and trigger callbacks on save, improving integration with other components.
- Simplified `ProgressionGraphEditPage` to redirect users to the exercises list with deep-linking support for selected graphs.
- Incremented application version to reflect these updates.
2026-06-10 15:42:29 +02:00

2.9 KiB

Progressionsgraph — Slot-Editor (Phase B)

Stand: 2026-06-10 · Status: In Umsetzung

Ziel

Ein Progressionsgraph = ein linearer Hauptpfad (Roadmap = strukturgebend). Jeder Major Step ist ein Slot mit:

  • primary — Hauptübung des Slots (Pfadknoten)
  • siblings — 0..n Schwestern (gleiche Stufe, edge_type: sibling)

KI-Entwürfe und Bibliotheksübungen leben im selben Slot-Modell, ohne sofortige Übungsanlage.

Slot-Zustände (kind)

kind Bedeutung
empty Noch keine Übung
library exercise_id (+ optional variant_id)
proposal KI-Entwurf (ai_suggestion, kein exercise_id)

Kanten

  • primary(n) → primary(n+1)next_exercise (nur befüllte Primärkette, lückenlos verbunden)
  • primary ↔ siblingsibling (pro Slot)

Leere Slots in der Roadmap sind erlaubt; Kanten nur zwischen aufeinanderfolgenden befüllten Primär-Slots.

Editor-Zustand (ProgressionGraphDraft)

{
  goalQuery, startSituation, targetState, roadmapNotes, maxSteps,
  majorSteps: MajorStep[],
  slots: Slot[],           // index = major_step_index
  pathSkillExpectations?,
  lastFindings?,           // path_qa-Snapshot
  dirty: boolean,
}

Hydration: planning_roadmap + Kanten → Slots; slot_contents[] für Entwürfe; Primärkette aus next_exercise.

Speichern: Batch-Delete bestehender Pfad-/Schwester-Kanten → edges/sequence (Primärkette) → einzelne sibling-Kanten → PUT/sequence mit Artefakt inkl. slot_contents, optional last_findings.

Findings-Panel

Nutzt path_qa (overall_ok, quality_score, issues, recommendations, gap_fill_offers, …).

API: POST /api/planning/progression-path-suggest mit evaluate_only: true und evaluate_steps[] — QA ohne Re-Match.

Persistenz: planning_roadmap.last_findings.

Artefakt-Erweiterung (GraphPlanningRoadmapArtifact)

Zusätzlich optional:

  • slot_contents[]{ major_step_index, primary, siblings[] }
  • last_findings — letzter path_qa-Snapshot

UI (konsolidiert)

  • Eine Oberfläche: ExerciseProgressionGraphPanel embeddet ProgressionGraphEditor (Slots + Findings)
  • Kein separater Slot-Editor, kein 4-Schritt-KI-Wizard, kein ProgressionChainEditor im Panel
  • Route /progression-graphs/:id → Redirect nach /exercises (Deep-Link wählt Graph)
  • Phase C: Übersicht mit Kacheln (Name, Start, Ziel)

Ersetzt (Legacy, nicht mehr im Panel)

  • ExerciseProgressionPathBuilder · ProgressionChainEditor — Code bleibt vorerst, nicht eingebunden

Implementierungsreihenfolge

ID Inhalt
B.0 Draft + Laden/Speichern Slots ↔ Kanten
B.1 Slot-Karten, Bibliothek + Entwurf
B.2 Findings-Panel + evaluate_only
B.3 Entwürfe im Artefakt + „Übung anlegen“
B.4 Route + Panel vereinfachen
B.5 last_findings + Phase-C-Vorbereitung