8.3 KiB
ClaudeDo — Offene Punkte
Stand: 2026-06-10. Nur noch offene Punkte. Was erledigt ist, steht in den Commits und im Code — nicht hier.
Manuelle Verifikation (offen)
Kein Code-Aufwand, nur Durchspielen mit explizit notiertem Pass-Kriterium. Der Großteil der Pipeline ist laut User bereits in der Praxis getestet; hier das, was noch ein falsifizierbares Observable braucht.
- Worktree-Pipeline:
- Worktree-Happy-Path →
worktrees.state='active',head_commitgesetzt,diff_statnon-empty, Branchclaudedo/<id>auf Disk. - No-Changes-Run →
status='Done',head_commit IS NULL,diff_stat IS NULL. - Kein Git-Repo (
working_dir=C:\Temp) →status='Failed', keineworktrees-Row, Git-Fehler im Log.
- Worktree-Happy-Path →
- Feature-Walkthroughs: Planning-Session-Flow (Draft→Finalize→Chain), Prime/Daily-Prep-Trigger, Weekly-Report-Generierung, Self-Update (Banner → Update → „up to date").
- UI-Sichtprüfung (neu, 2026-06-09): Diff-Viewer (Dateiliste, Added/Deleted/Renamed/Binary-Erkennung, Commit-Range-Diff nach Merge) und das „children need attention"-Band auf dem Session-Tab des Parents.
- UI-Sichtprüfung (neu, 2026-06-10, nach Refactoring-Merges): Detail-Insel komplett durchklicken (Output/Git/Session-Tabs, Merge-Sektion, Agent-Settings-Overrides, Prep-Panel) —
DetailsIslandViewModelwurde in Sektions-VMs aufgeteilt, Bindings angepasst. Außerdem: DiffModal-Fehler-State „Diff nicht mehr verfügbar" (Commit-Range ohne aufgezeichnete Commits) und der In-App-Konflikt-Resolver (Hub-Methoden umbenannt). - UI-Sichtprüfung (neu, 2026-06-19, Rider-Style 3-Pane Merge-Editor): Echten Konflikt auslösen (Single-Task-Approve mit Konflikt und Planning-Unit-Merge) und prüfen: drei Panes (Ours read-only | Result editierbar | Theirs read-only), Konfliktblöcke rot / aufgelöst grün in allen Panes, Inline-Accept
›/‹in den Zwischen-Guttern landen die jeweilige Seite im Result, nur Konfliktregionen im Result editierbar (Stable read-only), synchrones vertikales Scrollen, File-Switcher bei mehreren Dateien,M conflicts · K resolved-Readout, Continue erst bei allen Konflikten gelöst, Binär-Guard. Bekannte Kanten: (1) Konflikt mit leerer Ours-Seite → Result-Region ist null-lang (Gutter via 1-Zeichen-Probe positioniert, Accept funktioniert; nur Hand-Tippen in die leere Region ist fummelig). (2) Gutter-Y nutztTranslatePointvom Result-TextView— bei sehr hohen Fenstern / großen Scrollständen die Ausrichtung gegenprüfen. (3) Blöcke richten sich nur über Stable-Text aus; nach einem Konflikt mit unterschiedlicher Zeilenzahl je Seite driften nachfolgende Blöcke vertikal (aligned/virtual-space Scroll ist bewusst zurückgestellt). - Worker-Autostart am Gerät: Logoff/Logon-Autostart, Update-Pfad, Uninstall entfernt die Startup-
.lnk. - In-App Interactive Sessions (neu, 2026-06-26): ersetzt den externen
wt-„Run interactively"-Launch durch einen In-App-Streaming-Chat (StreamingClaudeSession,claude --input-format stream-json). Real-CLI-Smoke (kein xUnit, kein Claude in Tests):- Task rechtsklick → „Run interactively" startet keinen Terminal mehr; der Stream erscheint im Detail-Output-Tab des (selektierten) Tasks und als Monitor in Mission Control.
- Composer: Nachricht tippen + Enter/Send → erscheint sofort als
log-user-Zeile in Akzentfarbe (viaLogKindForegroundConverter, lokale Bindung schlägt den dim Style), Claude antwortet im selben Prozess. - Senden während Claude arbeitet = Queue (Default): die Nachricht wird gepuffert und beim
resultdes laufenden Turns abgeschickt (kein Interrupt). Mehrere Queue-Nachrichten FIFO, eine pro Turn. - Interrupt opt-in: der kleine ■-Stop-Button neben Send unterbricht den laufenden Turn (
control_request/interrupt, verifiziert mit CLI 2.1.191; Abbruch-result=error_during_execution, als Turn-Ende behandelt) — danach flusht die ggf. gequeute Nachricht im selben Prozess mit erhaltenem Kontext. Stop-Button ist immer sichtbar solange live (Interrupt im Idle ist ein No-op; Turn-in-flight wird nicht in die UI gebroadcastet). - Session-Ende: Prozess-Exit/Stop →
InteractiveSessionEnded, Composer verschwindet, Monitor wird „done". - Sicht-Konsistenz: Mission-Control-Composer (SessionTerminalView-Bottom-Row mit Send-Button) vs. Detail-Composer (WorkConsole-Shell-Prompt
❯ … [Send]) sehen unterschiedlich aus — ggf. angleichen.
- Drag-and-drop file attachments on the detail pane: verify the "Drop to attach" hover overlay, drop round-trip (file appears in the list), "Add file…" picker, remove button, and that files land under
~/.todo-app/attachments/<taskId>/. Also verify the MCPAddTaskAttachment/ListTaskAttachments/RemoveTaskAttachmenttools and that a Running task refuses add/remove. (Manual; can't be unit-tested.)
Offene Code-Punkte
- Status-Bar Live-Update: Prüfen, ob
RunNow-Enable/Disable pro Task-Row bei Connection-Change sauber re-evaluiert. Connection-Status lebt inIslandsShellViewModel/WorkerConnectionModalViewModel(es gibt keinenStatusBarViewModelmehr). Erst messen, dann ggf. fixen. Klein. AgentMcpToolsliegt inLifecycleMcpTools.cs— beim Suchen irreführend; in eigene Datei verschieben. Ein-Minuten-Fix, lohnt keinen Agent-Lauf — beim nächsten Worker-Touch mitnehmen.
Nachklapp Refactoring-/Bug-Runde (2026-06-09/10)
Alle 9 Review-Tasks (5 Refactorings, 4 Bugfixes) sind umgesetzt und gemerged; Details in den Commits. Offen geblieben:
DetailsIslandViewModelist nach dem Split noch 1258 Zeilen (Ziel war ~800) — die drei Sektions-VMs (AgentSettings, Merge, Prep) sind extrahiert, weitere Extraktion (z.B. ChildOutcomes/Subtasks-Sektion) lohnt erst, wenn die Datei wieder wächst.- Bewusst zurückgestellt: WorkerHub-Split nach Concern (~60 Methoden in einer Hub-Klasse). Die Interface-Parität löst das akute Testbarkeits-Problem; ein Hub-Split ist eine größere Architekturentscheidung → erst besprechen.
- Lessons learned: Der
StartRunningAsync-Guard-Task hat isoliert grün getestet, aber den Queue-Pfad gebrochen (Picker claimt vor dem Dispatch) — Integrationsfix74ca2e0. Bei parallelen Tasks, die denselben Pfad berühren, nach JEDEM Merge-Schwung die volle Suite auf main fahren.
Bug-Befunde (Korrektheits-Review 2026-06-09)
Plausibel, noch nicht einzeln verifiziert (bei Gelegenheit prüfen):
- Cancel eines
WaitingForChildren-Parents kaskadiert nicht auf laufende/queued Kinder (verwaiste Worktree-Commits). - Ketten-Kaskade stoppt an einem
Idle-Mittelglied (OnChildFinishedAsyncprüftCancelAsync-Ergebnis nicht) → Rest bleibtQueued+blocked. - Delete des letzten nicht-terminalen Kindes triggert kein
TryAdvanceParentAsync→ Parent kann inWaitingForChildrenhängen (FKSET NULLrettet nur die Blocked-Kette). ContinueMergeAsyncstaged pergit add -Avor dem Konflikt-Check (Marker im Index, Abort danach ggf. unsauber).HasChangesAsynczählt untracked Files → blockiert Merges unnötig (--untracked-files=no).UnifiedDiffParser: Pfade mit Leerzeichen / git-gequotete Pfade ausdiff --gitfalsch geparst.- Kleinkram: MergePreview-Race bei schnellem Target-Wechsel, CTS-Dispose-Leak in Debounce-Saves,
Environment.CurrentDirectory-Fallback im Konflikt-Dialog, Doppel-Continue-Fenster im Orchestrator.
Geprüft und verworfen (keine Bugs): ReviewFeedback-„Endlosschleife" (Fallback existiert), Cross-Thread-Crashes im DetailsIslandViewModel (Dispatcher-Marshalling im WorkerClient), Chain-Wedge nach Child-Delete (FK ON DELETE SET NULL), \ No newline-Parsing.
Bewusst verworfen (nicht erneut vorschlagen)
- CI-Build/Test-Pipeline — push-to-main + release-on-push deckt das ab; Tests laufen am Ende jeder Session.
- Real-
claude-Smoke-Test als xUnit-Test — kein Claude indotnet test; bleibt manueller Check (siehe oben). Tests nutzenFakeClaudeProcess. architecture.md/ ADRs — die per-Projekt-CLAUDE.md-Dateien sind die lebende Doku; ADRs lohnen solo nicht.- Task-Mailbox-Integration — geparkt; das generische
mcp__mailbox__*-Plugin reicht (Begründung inmailbox-proposal.md). - Tag-Negation, Tag-Multi-Select, Notes-
lists.kind-Switch, Install-Service-Skript — durch die aktuelle Architektur überholt (Tag-System entfernt, Notes/Autostart anders gelöst).