diff --git a/docs/open.md b/docs/open.md index 2e57bcdf..5cc8d5df 100644 --- a/docs/open.md +++ b/docs/open.md @@ -140,19 +140,21 @@ verifiziert**: ## Offene Verifikation (2026-08-05, Environment Checks / SystemCheckPage) -**Voraussetzung, bevor irgendeiner der Punkte unten geprüft werden kann:** die Branches -`claudedo/06aca9b3afec4b939f59b627bfe21737` (Checks + SystemCheckPage) und -`claudedo/40272c0bb3b14562b59c022d09c382b6` (ExecutableResolver-Wiring in -`ClaudeDo.Worker`) müssen erst gemerged werden — sie lagen bei dieser Abschluss-Session -noch nicht auf `main`. Build/Test-Nachweis unten stammt aus einer lokalen Scratch-Integration -beider Branches, nicht aus `main` selbst. Details → `installer-preflight` in -`docs/explore-notes/README.md` und den neuen Abschnitt „Environment Checks" in -`src/ClaudeDo.Installer/CLAUDE.md`. +Checks + SystemCheckPage (`claudedo/06aca9b3…`) und das ExecutableResolver-Wiring im Worker +(`claudedo/40272c0b…`) sind seit 2026-08-06 auf `main` gemerged; die frühere „erst mergen"- +Voraussetzung ist erledigt. Details → `installer-preflight` in `docs/explore-notes/README.md` +und der Abschnitt „Environment Checks" in `src/ClaudeDo.Installer/CLAUDE.md`. -**Update 2026-08-06:** der „Claude Help Me"-Button ist jetzt implementiert -(`Core/ClaudeHelpLauncher.cs` + `SystemCheckPageViewModel`/-View), gebaut + unit-getestet -(`ClaudeDo.Installer.Tests`/`ClaudeDo.Localization.Tests` grün). Die Diagnose-Sektion -(Config-Modus/`SettingsWindow`) bleibt **nicht implementiert** — eigener Folge-Task. +**Update (2026-08-06):** beide Folge-Features sind jetzt implementiert und auf `main`. + +- Diagnose-Sektion (Config-Modus/`SettingsWindow`): `Pages/DiagnosePage/` + geteilte + `Checks/CheckListViewModel.cs`/`Checks/CheckListView.xaml` (auch von `SystemCheckPage` + genutzt, keine zweite Implementierung). Unit-getestet + (`tests/ClaudeDo.Installer.Tests/Pages/DiagnosePage/DiagnosePageViewModelTests.cs`). +- „Claude Help Me"-Button: `Core/ClaudeHelpLauncher.cs` + `SystemCheckPageViewModel`/-View, + unit-getestet (`tests/ClaudeDo.Installer.Tests/Core/ClaudeHelpLauncherTests.cs`). + +Beides **nicht visuell verifiziert**: - [x] Help-Me-Button ist deaktiviert, wenn `claude-cli` nicht `Ok` ist oder `claude-auth` `Failed` ist (bleibt aktiv bei `Unknown`), mit erklärendem Tooltip — unit-getestet. @@ -160,12 +162,16 @@ beider Branches, nicht aus `main` selbst. Details → `installer-preflight` in Session hat den Diagnose-Report gelesen — **nicht verifiziert** (der eigentliche Terminal-Start/`wt.exe`-Zusammenspiel und die Session-Qualität sind nur über die injizierte `IProcessLauncher`-Fake getestet, nie mit einem echten Terminal/CLI). -- [ ] Diagnose-Sektion im Config-Modus zeigt die echten installierten Pfade/Ports, und der - laufende Worker auf 47821 gilt nicht als Konflikt — **nicht umsetzbar, Feature existiert - nicht.** +- [ ] Platzierung des Help-Me-Buttons: er sitzt seit dem Merge der Diagnose-Sektion in einer + **eigenen Zeile unter** dem geteilten Check-Listen-Footer (der reservierte Slot *im* + Footer entfiel mit der Extraktion nach `CheckListView.xaml`). Optisch prüfen, ob das + so bleiben soll oder ob der Button in den geteilten Footer gehört. +- [ ] Diagnose-Sektion im Config-Modus: Öffnen von SettingsWindow löst keinen Prüflauf aus, Klick + auf „Erneut prüfen" schon; zeigt die echten installierten Pfade/Ports (nicht die + InstallContext-Defaults), und der laufende Worker auf dem konfigurierten SignalR-Port gilt + nicht als Konflikt — **unit-verifiziert, visueller Durchlauf noch offen.** -Sobald die beiden Branches oben gemerged sind, sind folgende Punkte real prüfbar (gebaut + -unit-getestet gegen die Scratch-Integration, aber **nicht visuell verifiziert**): +Weitere Punkte, gebaut + unit-getestet auf `main`, aber **nicht visuell verifiziert**: - [ ] SystemCheckPage: Layout, Icon-/Farbwirkung der vier Status (Ok grün / Warnung orange / Fehler rot / Unbekannt grau — `StatusGreenBrush`/`StatusOrangeBrush`/`StatusRedBrush`/ diff --git a/src/ClaudeDo.Installer/App.xaml.cs b/src/ClaudeDo.Installer/App.xaml.cs index 4cb440fd..8465d71c 100644 --- a/src/ClaudeDo.Installer/App.xaml.cs +++ b/src/ClaudeDo.Installer/App.xaml.cs @@ -11,6 +11,7 @@ using ClaudeDo.Installer.Core.Interfaces; using ClaudeDo.Installer.Localization; using ClaudeDo.Localization; using ClaudeDo.Releases; +using ClaudeDo.Installer.Pages.DiagnosePage; using ClaudeDo.Installer.Pages.InstallPage; using ClaudeDo.Installer.Pages.PathsPage; using ClaudeDo.Installer.Pages.ServicePage; @@ -155,6 +156,10 @@ public partial class App : Application sc.AddSingleton(); sc.AddSingleton(); sc.AddSingleton(); + sc.AddSingleton(sp => new DiagnosePageViewModel( + sp.GetRequiredService(), + sp.GetRequiredService>(), + InstallerWorkerConfig.Load)); // Steps — execution order matters for the FreshInstall pipeline (IEnumerable). // Double-registered as both IInstallStep and concrete type so the Update pipeline diff --git a/src/ClaudeDo.Installer/CLAUDE.md b/src/ClaudeDo.Installer/CLAUDE.md index 59118972..9a02c039 100644 --- a/src/ClaudeDo.Installer/CLAUDE.md +++ b/src/ClaudeDo.Installer/CLAUDE.md @@ -128,12 +128,6 @@ The Apps & Features uninstall string and "Rerun Installer" both point at ` **Merge status (2026-08-06): `Checks/`, `SystemCheckPage`, `ExecutableResolver`, and the -> "Claude Help Me" button below are on this branch.** The 2026-08-05 note about two unmerged -> task branches applied to an earlier state; the "Claude Help Me" button follow-up has since -> landed (see below). The Config-mode Diagnose section in `SettingsWindow` is still **not** -> implemented — see `docs/open.md`. - `Checks/` holds one `IEnvironmentCheck` per concern, run in parallel by `EnvironmentCheckService.RunAllAsync`: | Check | Severity | What it verifies | @@ -156,6 +150,10 @@ regardless of severity (an indeterminate result — e.g. the CLI not found, so v can't be checked — must not strand the user; the underlying `Error`-severity check for the CLI itself, `ClaudeCliCheck`, is what blocks in that case). +The check-row rendering and the check-run logic (busy state, summary text, Recheck command) live +in one place — `Checks/CheckListViewModel.cs` + `Checks/CheckListView.xaml` — composed by every +page that hosts a check list, not duplicated per page. + `SystemCheckPage` (`Pages/SystemCheckPage/`) hosts the check list in the **FreshInstall** wizard only, registered via `PageResolver` at `Order = 1` (directly after `WelcomePage`); `WizardViewModel` filters it back out in `Update` mode along with Paths/Service/UiSettings. Checks run automatically @@ -164,8 +162,8 @@ on page entry (`LoadAsync`, guarded against double-entry). "Next" is disabled vi subscribes to `PropertyChanged` on the current page so a live recheck can flip it back. A "Recheck" button re-runs `EnvironmentCheckService.RunAllAsync` (disabled while already running). -**"Claude Help Me" button** (`Core/ClaudeHelpLauncher.cs`) — a second footer button next to -"Recheck", enabled only when `claude-cli` is `Ok` and `claude-auth` is not `Failed` (`Unknown` +**"Claude Help Me" button** (`Core/ClaudeHelpLauncher.cs`) — a second button below the shared +check-list footer, enabled only when `claude-cli` is `Ok` and `claude-auth` is not `Failed` (`Unknown` stays enabled — an indeterminate login state shouldn't block the one feature that could help diagnose it). `BuildReportAsync` renders all check results (Id/Severity/Status/Message table, plus the full `Detail` of any `Failed` check) and system info (OS, `dotnet --list-runtimes`, @@ -175,7 +173,15 @@ user) and deliberately excludes credentials/tokens/env-var dumps. `LaunchTermina `wt.exe -d %TEMP% cmd.exe /k ` (or `cmd.exe /k ` if `wt.exe` isn't resolvable) via the injectable `IProcessLauncher`, pointing the initial prompt at that report file. Errors from either step surface as `ClaudeHelpError` on the page, never an -exception. +exception. It reads the last report via `CheckListViewModel.LastReport`, so it re-evaluates on +every check run. -**Not implemented:** a Diagnose section in `SettingsWindow` (Config mode) that re-runs the same -checks against the installed configuration — still speced as a follow-up, no code yet. +`DiagnosePage` (`Pages/DiagnosePage/`) hosts the same `CheckListView` in `SettingsWindow` (Config +mode only, `ShowInSettings = true` / `ShowInWizard = false`, `Order = 5` — after UiSettings). +Nothing here blocks navigation and checks do **not** auto-run on load — only on a "Recheck" click. +Unlike the wizard, its `InstallContext` is built from the **installed** configuration +(`InstallerWorkerConfig.Load()` for `ClaudeBin`/`SignalRPort`, the shared `InstallContext` for +`InstallDirectory`/`ExternalMcpPort`), refreshed on every `LoadAsync()` — not the wizard-default +`InstallContext` the DI container hands out, which is only populated once a page's `ApplyAsync` +(i.e. Save) runs. `DiagnosePage` intentionally has **no** "Claude Help Me" button — that one is +wizard-only. diff --git a/src/ClaudeDo.Installer/Checks/CheckListView.xaml b/src/ClaudeDo.Installer/Checks/CheckListView.xaml new file mode 100644 index 00000000..7d44db53 --- /dev/null +++ b/src/ClaudeDo.Installer/Checks/CheckListView.xaml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +