feat: Sitzungsfreigabe für MCP-Bestätigungen + LessonStatus.Cancelled
Sitzungsfreigabe: McpConfirmDialog bietet zwei Checkboxen ("diese Art
von Aktion" / "alle KI-Aktionen für den Rest der Sitzung nicht mehr
nachfragen"), nur beim Bestätigen wirksam. IMcpConfirmationService.
ConfirmAsync bekommt einen per [CallerMemberName] automatisch
befüllten operationKey - kein bestehender Aufruf musste geändert
werden. Freigaben leben als In-Memory-Bookkeeping auf der
Confirmation-Service-Instanz, gelten bis App-Ende, werden aber trotzdem
geloggt, damit stillschweigende Bestätigungen nicht spurlos bleiben.
Grund: 17 identische Bestätigungen in Folge für eine neu generierte
Unterrichtseinheit sind unzumutbar.
LessonStatus.Cancelled ("Ausgefallen") als Alternative zu
delete_lesson für Stunden, die nur ausgefallen sind (Exkursion,
Feiertag), aber als Ereignis dokumentiert bleiben sollen. Als
Cancelled=4 angehängt (bestehende LiteDB-Werte 0/1 sind fix). Konsistent
wie "bereits durchgeführt" behandelt an allen Stellen, die bisher nur
auf Conducted prüften: Terminverschiebung, Fortschrittsanzeige,
Hausaufgabe-kontrollieren-Erinnerung, "nächste Stunde"-Vorschlag.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -2684,6 +2684,45 @@ folgenden Punkte gehören direkt in `LehrerApp.Desktop`:
|
||||
stillschweigend zu überschreiben (die bestehende `EnsureTargetIsFree`-Prüfung in
|
||||
`LessonSchedulingService` greift unverändert).
|
||||
|
||||
- [x] **4.5.32** Sitzungsfreigabe für den Bestätigungsdialog + `LessonStatus.Cancelled`
|
||||
(2026-09-12, Nutzer-Feedback: 17x "Phase hinzufügen" einzeln bestätigen müssen ist
|
||||
unzumutbar).
|
||||
- **Sitzungsfreigabe:** `McpConfirmDialog` bietet jetzt zwei Checkboxen ("diese Art von
|
||||
Aktion" / "alle KI-Aktionen für den Rest der Sitzung nicht mehr nachfragen"), nur beim
|
||||
Bestätigen wirksam (Ablehnen + Checkbox wäre widersprüchlich, wird ignoriert — siehe
|
||||
`McpConfirmDialog.axaml.cs`). `IMcpConfirmationService.ConfirmAsync` bekommt einen neuen
|
||||
`operationKey`-Parameter, bewusst per `[CallerMemberName]` automatisch befüllt (Name der
|
||||
aufrufenden Tool-Methode, z.B. "AddLessonPhase") — kein bestehender Aufruf in den
|
||||
Tool-Klassen musste dafür geändert werden. Freigaben leben als reines In-Memory-Bookkeeping
|
||||
auf der `AvaloniaMcpConfirmationService`-Singleton-Instanz, gelten bis zum Beenden der App
|
||||
(neuer Prozess = neue Instanz = wieder alles ungetraut), nie persistiert. Automatisch
|
||||
bestätigte Aufrufe werden trotzdem geloggt (`AppLogger.Info`), damit stillschweigende
|
||||
Bestätigungen nicht spurlos bleiben.
|
||||
- **`LessonStatus.Cancelled`** ("Ausgefallen") als Alternative zu `delete_lesson`, wenn eine
|
||||
Stunde nur ausgefallen ist (Exkursion, Feiertag, Vertretung), aber als Ereignis
|
||||
dokumentiert bleiben soll — als `Cancelled = 4` angehängt (nicht eingefügt, siehe
|
||||
Kommentar auf dem Enum: bestehende LiteDB-Werte 0/1 sind fix). `delete_lesson`s
|
||||
Tool-Beschreibung weist jetzt aktiv auf diese Alternative hin.
|
||||
`LessonStatusDisplay.Options`/`ToName`/`FromName` erweitert — der bestehende
|
||||
Status-Auswahl-`ComboBox` in `LessonDialog.axaml` (bindet bereits an `StatusOptions`)
|
||||
zeigt "Ausgefallen" dadurch automatisch an, ohne XAML-Änderung.
|
||||
- Konsistente Behandlung wie bereits durchgeführte Stunden an allen Stellen, die bisher
|
||||
nur auf `Conducted` prüften (eine ausgefallene Stunde ist ebenfalls "resolved", nicht
|
||||
mehr offen): `LessonSchedulingService.Move`/`SplitAndMoveSecondPart` (nicht mitverschoben
|
||||
bzw. Fortsetzung auf Entwurf zurückgesetzt), `GroupOverviewViewModel.LoadNextLesson`
|
||||
(nicht als nächste Stunde vorgeschlagen), `AdvanceLessonStatus` (Endzustand, kein
|
||||
Weiterschalten). Fortschrittsanzeige (`UnitSummary`) zählt ausgefallene Stunden weder
|
||||
zum Pensum noch zu den gehaltenen Stunden (Nenner sinkt statt künstlich zu wachsen).
|
||||
- `LoadOpenHomeworkCheck`/`HasUnhandledHomework` (Hausaufgabe-kontrollieren-Erinnerung)
|
||||
überspringen ausgefallene Stunden bei der Suche nach der "letzten Stunde" — sonst hätte
|
||||
eine ausgefallene Stunde mit liegengebliebenem Hausaufgabentext fälschlich weiter genagt.
|
||||
- 9 neue Tests: 2 in
|
||||
[LessonSchedulingServiceTests.cs](LehrerApp.Desktop.Tests/LessonSchedulingServiceTests.cs),
|
||||
neues [LessonStatusDisplayTests.cs](LehrerApp.Desktop.Tests/LessonStatusDisplayTests.cs)
|
||||
(Round-Trip aller Status-Namen + Fortschrittsberechnung), 1 in
|
||||
[McpToolsTests.cs](LehrerApp.Desktop.Tests/McpToolsTests.cs) (belegt den
|
||||
`[CallerMemberName]`-Mechanismus ohne echtes UI).
|
||||
|
||||
**Wichtige Abweichung von der ursprünglichen Planung (5.2):** Vor der Umsetzung zeigte sich,
|
||||
dass 5.2 wie ursprünglich beschrieben eine zweite, parallele Fehlzeiten-Erfassung neben dem
|
||||
bereits bestehenden Anwesenheits-Tracking aus Kapitel 3 (`ParticipationEntry.Attendance`,
|
||||
|
||||
Reference in New Issue
Block a user