7.3 KiB
Verifikations-Handoff (2026-07-23)
Konsolidierte manuelle Verifikationen aus docs/open.md + Memory-Ständen — gedacht für eine frische Session, die diese Punkte am laufenden System durchspielt. Mika bedient die UI, die Session protokolliert Pass/Fail.
Vorbedingungen: Worker + App laufen (SignalR-Port lt. ~/.todo-app/worker.config.json, aktuell 37821; External MCP 47822). Testliste ClaudeDoTests (C:\TestRepos\ClaudeDoTests) für zerstörungsfreie Runs nutzen.
Achtung: 7 Bugfix-/Chore-Tasks vom 2026-07-23 (createdBy claude-code-gap-analysis) liegen in der Queue der Liste „Claude do". Die Merge-bezogenen Checks (Abschnitte 2 und 4) erst NACH Review/Merge dieser Tasks final abhaken — sie ändern ggf. genau dieses Verhalten.
Nacharbeit: Erledigtes aus docs/open.md austragen, dieses File danach löschen.
1. Detail-Insel & Diff-Viewer (reines Durchklicken)
- Detail-Insel komplett: Output/Git/Session-Tabs, Merge-Sektion, Agent-Settings-Overrides (InheritedBadge korrekt), Prep-Panel — nach dem VM-Split (
DetailsIslandViewModel→ Sektions-VMs) alles gebunden, keine leeren Panels. - Diff-Viewer: Dateiliste, Added/Deleted/Renamed/Binary-Erkennung, Commit-Range-Diff nach einem Merge.
- DiffModal-Fehler-State: Commit-Range ohne aufgezeichnete Commits → „Diff nicht mehr verfügbar" statt Crash/leer.
- „children need attention"-Band auf dem Session-Tab eines Parents mit failed/blocked Kind.
2. Worktree-Pipeline (3 falsifizierbare Fälle)
- Happy-Path: Task mit WorkingDir →
worktrees.state='active',head_commitgesetzt,diff_statnon-empty, Branchclaudedo/<id[:8]>existiert auf Disk. - No-Changes-Run: →
status='Done',head_commit IS NULL,diff_stat IS NULL. - Kein Git-Repo (WorkingDir =
C:\Temp): →status='Failed', KEINEworktrees-Row, Git-Fehler im Log.
3. Planning-Flow-Walkthrough
- Draft → Finalize → Kette: Finalize queued NICHT automatisch (Kinder bleiben Idle); „Queue plan" setzt alle nicht-terminalen Kinder Queued, Kette läuft sequenziell durch (blocked-by löst sich je Vorgänger).
- Parent landet nach letztem terminalen Kind in WaitingForReview; Approve merged die ganze Unit (Parent-Worktree falls Active + jedes Done-Kind in Reihenfolge).
- UnfinishedPlanning-Modal: Resume / FinalizeNow / Discard.
4. Merge-Editor (Rider-Style 3-Pane) mit echtem Konflikt
Konflikt provozieren: gleiche Datei auf main ändern, während der Task-Branch sie ändert. Beide Wege testen: (a) Single-Task-Approve mit Konflikt, (b) Planning-Unit-Merge mit Konflikt in einem Subtask (PlanningMergeConflict → Editor öffnet pro Subtask).
- Drei Panes: MAIN read-only | Result editierbar | INCOMING read-only; Konfliktblöcke rot, aufgelöst grün, in allen Panes.
- Gutter-Toggle
›/‹: Seite rein/raus, Klickreihenfolge = Reihenfolge im Result; main/incoming/beide/keine möglich. - Nur Konfliktregionen im Result editierbar (Stable read-only); Edits fließen in den Block zurück.
- Synchrones vertikales Scrollen; File-Switcher bei mehreren Dateien;
M conflicts · K resolved-Readout; Conflict-Ruler (Klick springt). - Continue erst aktiv, wenn ALLE Konflikte in ALLEN Dateien gelöst; Binär-Guard greift.
- Abort: Tree sauber, Task bleibt WaitingForReview.
- Bekannte Kanten (nur gegenprüfen, nicht als Fail werten): leere Ours-Seite → null-lange Result-Region (Accept geht, Handtippen fummelig); Gutter-Y-Ausrichtung bei sehr hohen Fenstern/großem Scroll; vertikaler Drift nachfolgender Blöcke nach Konflikt mit ungleicher Zeilenzahl.
5. Embedded ConPTY / Mission Control
- Kritisch: Task-basiert (Kontextmenü „Open ConPTY session"): frischer Task → Worktree wird on-demand angelegt,
claudestartet — verifizieren, dass der Task-Prompt wirklich GESENDET wird (Antwort beginnt), nicht nur im Eingabefeld vorbefüllt ist. - Ad-hoc: „New session"-Button → Ordnerwahl → freie Session im gewählten Verzeichnis.
- Grid↔Tabs-Toggle; Close killt den Prozess + entfernt die Kachel; mehrere Sessions parallel; Pane-Resize reflowt das TUI.
- Resume: im Worktree-Dir per
claude --continuemöglich (ClaudeDo persistiert die ConPTY-Session-Id bewusst nicht).
6. Pick up in terminal
- Sichtbarkeit: Kontextmenü-Eintrag + Terminal-Button (ArrowOut) NUR bei WaitingForReview und Failed; bei Idle/Running/Queued/Done nicht.
- Klick → neues Windows-Terminal im Worktree-Verzeichnis,
claude --resume <id>nimmt die Session mit Kontext wieder auf. - Fehlerfälle surfacen sauber (Footer-Strip bzw. Fehlerdialog): laufende/gequeuete Task, keine persistierte Session-Id, kein aktiver Worktree.
- Bekannte Kante: parked-Idle (reject-park) hat oft Session+Worktree, zeigt die Aktion aber bewusst NICHT (Idle nicht unterscheidbar). Nervt das in der Praxis →
CanPickUpInTerminalerweitern.
7. AskUser (Frage aus laufendem Task)
- Task, dessen Prompt eine Rückfrage erzwingt → Frage erscheint im Task-Monitor (Mission Control), Prozess wartet.
- Antwort inline absenden → Run läuft mit der Antwort weiter.
- Timeout-/Cleanup-Verhalten der PendingQuestionRegistry (Frage unbeantwortet lassen): Task schlägt kontrolliert fehl, UI räumt die Frage auf (MCP_TOOL_TIMEOUT-Gotcha).
8. Session Skills (E2E + UI)
- Settings → Skills:
https://github.com/DietrichGebert/ponytailinstallieren → 6 Skills erscheinen (ponytail, -help, -review, -audit, -debt, -gain), auf Commit gepinnt, Dateien unter~/.todo-app/session-skills/<name>/. - Skill per-Task (Agent-Settings-Flyout) oder global aktivieren → Task laufen lassen → im Worktree liegt
.claude/skills/<name>/, Agent kann ihn nutzen,git statusim Worktree bleibt sauber (info/exclude greift). - Gegenprobe: nicht-aktivierte/andere interaktive Session sieht den Skill NICHT (kein Leak nach
~/.claude). - UI: Skills-Tab (Install-Zeile, Karten mit Update/Remove), Checkbox-Listen im General-Tab + AgentConfigEditor (Flyout-Höhe!), leerer Zustand (0 Skills — Empty-State fehlt evtl., dann entscheiden), lange Namen/URLs (Trimming).
9. Attachments (Drag & Drop + MCP)
- Drop aufs Detail-Pane: „Drop to attach"-Overlay, Datei erscheint in der Liste, landet unter
~/.todo-app/attachments/<taskId>/; „Add file…"-Picker; Remove-Button. ComposedPreviewenthält die Attachment-Pfade („## Reference files").- MCP:
add_task_attachment/list_task_attachments/remove_task_attachment; Running-Task verweigert add/remove.
10. Daily Prep (Prime) & Weekly Report
- Prime-Trigger: Schedule feuert bzw. „Plan day" manuell → Prep-Log streamt live,
daily-prep.logenthält letzten Run, MyDay-Auswahl respektiertDailyPrepMaxTasks. - Weekly Report: Range-Default „seit letztem Standup-Wochentag → heute", Markdown rendert, Cache pro Range.
11. Self-Update & Autostart (am Gerät)
- Update-Banner → Update durchführen → danach „up to date".
- Autostart: Logoff/Logon startet den Worker (Startup-
.lnk); Update-Pfad erhält den Autostart; Uninstall entfernt die.lnk.
12. Status-Bar / RunNow (Mini-Codecheck, erst messen)
- Worker trennen/verbinden → prüfen, ob RunNow-Enable pro Task-Row sauber re-evaluiert (Connection-State lebt in
IslandsShellViewModel). Nur fixen, wenn tatsächlich kaputt.