Files
ClaudeDo/docs/open.md
2026-06-09 22:48:33 +02:00

6.1 KiB

ClaudeDo — Offene Punkte

Stand: 2026-06-09. 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_commit gesetzt, diff_stat non-empty, Branch claudedo/<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', keine worktrees-Row, Git-Fehler im Log.
  • 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.
  • Worker-Autostart am Gerät: Logoff/Logon-Autostart, Update-Pfad, Uninstall entfernt die Startup-.lnk.

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 in IslandsShellViewModel / WorkerConnectionModalViewModel (es gibt keinen StatusBarViewModel mehr). Erst messen, dann ggf. fixen. Klein.
  • AgentMcpTools liegt in LifecycleMcpTools.cs — beim Suchen irreführend; in eigene Datei verschieben. Ein-Minuten-Fix, lohnt keinen Agent-Lauf — beim nächsten Worker-Touch mitnehmen.

Refactoring-Backlog (Review 2026-06-09, als ClaudeDo-Tasks in „Claude do" angelegt)

Befunde aus dem Code-Review nach dem Doku-Audit. Alle fünf sind als fertig formulierte Tasks (Idle) in der Liste „Claude do" angelegt; 1→2→3 müssen sequenziell laufen (gleiche Dateien: IWorkerClient, Fakes), 4 und 5 sind unabhängig.

  1. IWorkerClient-Parität: 15 Methoden, 2 Events und LastApproveTarget existieren nur auf der konkreten WorkerClient-Klasse; 7 Klassen hängen deshalb an der konkreten Klasse und sind nicht fake-bar.
  2. Merge-API-Naming: ContinueMerge/AbortMerge (Konflikt-Resolver) vs. ContinuePlanningMerge/AbortPlanningMerge (Unit-Merge) → Hub/Client-Ebene umbenennen in ContinueConflictMerge/AbortConflictMerge. TaskMergeService NICHT anfassen (wird auch vom PlanningMergeOrchestrator genutzt).
  3. DetailsIslandViewModel (1431 Zeilen) aufteilen: drei Sektions-VMs extrahieren (AgentSettings, Merge, Prep); visuelle Verifikation danach offen.
  4. Test-Hygiene: FakeClaudeProcess doppelt definiert, Hub-Fakes verstreut statt in Infrastructure/, SeedListWithAgentTag(Async) heißt noch nach dem entfernten Tag-System.
  5. FailAsync-Guard: erlaubt Queued→Failed, hat aber nur einen Caller (TaskRunner-Fehlerpfad eines laufenden Tasks) — erst beweisen, ob erreichbar, dann Guard einschränken oder Race dokumentieren.

Bewusst zurückgestellt: WorkerHub-Split nach Concern (~60 Methoden in einer Hub-Klasse). Die Interface-Parität (Punkt 1) löst das akute Testbarkeits-Problem; ein Hub-Split ist eine größere Architekturentscheidung → erst besprechen.

Bug-Befunde (Korrektheits-Review 2026-06-09, bestätigte als ClaudeDo-Tasks angelegt)

Bestätigt und als Tasks in „Claude do" angelegt:

  1. FinalizeParentDoneAsync umgeht den TaskStateService (PlanningMergeOrchestrator.cs:196) — Direkt-Write Status = Done ohne Guard; überschreibt einen mid-merge gecancelten Parent.
  2. TaskRunner ignoriert StartRunningAsync-Ergebnis (TaskRunner.cs:101/211) — Doppellauf-Race RunNow vs. Picker möglich.
  3. Unit-Merge nach Worker-Restart nicht abbrechbar — Orchestrator-State ist in-memory; Repo bleibt mid-merge, Parent festgefahren. Fix: stateless Abort-Pfad.
  4. DiffModalViewModel: stiller Falsch-Diff bei FromCommitRange ohne HeadCommit (Fallback auf Branch-Diff gegen das Listen-Working-Dir).

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 (OnChildFinishedAsync prüft CancelAsync-Ergebnis nicht) → Rest bleibt Queued+blocked.
  • Delete des letzten nicht-terminalen Kindes triggert kein TryAdvanceParentAsync → Parent kann in WaitingForChildren hängen (FK SET NULL rettet nur die Blocked-Kette).
  • ContinueMergeAsync staged per git add -A vor dem Konflikt-Check (Marker im Index, Abort danach ggf. unsauber).
  • HasChangesAsync zählt untracked Files → blockiert Merges unnötig (--untracked-files=no).
  • UnifiedDiffParser: Pfade mit Leerzeichen / git-gequotete Pfade aus diff --git falsch 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 in dotnet test; bleibt manueller Check (siehe oben). Tests nutzen FakeClaudeProcess.
  • 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 in mailbox-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).