shinkan-jinkendo/.claude/docs/working/PROGRESSION_GRAPH_SLOT_EDITOR_SPEC.md
Lars 97efe66306
Some checks failed
Deploy Development / deploy (push) Successful in 42s
Test Suite / pytest-backend (push) Failing after 45s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 15s
Test Suite / k6 /health Baseline (push) Successful in 34s
Test Suite / playwright-tests (push) Successful in 1m21s
Implement EvaluateStepPayload and SlotContentEntry for Enhanced Planning Features
- Introduced EvaluateStepPayload class to facilitate evaluation of exercise steps with optional attributes for AI proposals and roadmap details.
- Added SlotContentEntry and SlotExerciseContent classes to manage exercise content within the progression graph planning artifact.
- Updated GraphPlanningRoadmapArtifact to include new slot contents and last findings attributes for improved data handling.
- Enhanced Exercise Progression Graph Panel with links to the new Slot Editor for streamlined editing of progression graphs.
- Incremented application version to reflect these updates.
2026-06-10 13:05:49 +02:00

2.7 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 & Routing

  • B.4: Route /progression-graphs/:id — Slots links, Findings rechts
  • Phase C: Übersicht mit Kacheln (Name, Start, Ziel)

Ersetzt schrittweise

  • Getrennte ExerciseProgressionPathBuilder-Wizard-UI + ProgressionChainEditor → integrierter ProgressionGraphEditor

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