docs(installer,worker): document Environment Checks + note unmerged prerequisite gap
Documents the Checks/ + SystemCheckPage feature (gating rule, check list,
FreshInstall-only placement) and the ExecutableResolver/.cmd-shim wiring in
ClaudeDo.Worker's ClaudeCliPreflight/ClaudeProcess. Adds docs/explore-notes/installer-preflight.md
(bumped/corrected against the actual implementation) and links it from the
explore-notes README and root CLAUDE.md.
The underlying code lives only on unmerged task branches (06aca9b3.../40272c0b...),
not on main yet, and two follow-up features ("Claude Help Me" button, Config-mode
Diagnose section) were never implemented because they blocked on that same missing
merge. Both gaps are called out explicitly in the new docs and in docs/open.md's
verification checklist, instead of being asserted as done.
This commit is contained in:
@@ -31,8 +31,8 @@ the on-disk installer to run the *app* update. App-update detection is unaffecte
|
||||
|
||||
| Mode | Condition | Window |
|
||||
|---|---|---|
|
||||
| `FreshInstall` | No `install.json` | Full wizard (all pages) |
|
||||
| `Update` | `install.json` present + newer release available | Wizard — Welcome + Install pages only |
|
||||
| `FreshInstall` | No `install.json` | Full wizard: Welcome → **SystemCheck** → Paths → Service → UiSettings → Install |
|
||||
| `Update` | `install.json` present + newer release available | Wizard — Welcome + Install pages only (SystemCheck **not** shown) |
|
||||
| `Config` | Current version, or Gitea API unreachable | `SettingsWindow` (settings / repair / uninstall) |
|
||||
|
||||
## Install Pipelines
|
||||
@@ -60,7 +60,8 @@ Installer/
|
||||
ConfigModels, InstallerService, UninstallRunner, PageResolver,
|
||||
AutostartShortcut, ShortcutFactory, ProcessRunner, DarkTitleBar
|
||||
Interfaces/ — IInstallStep + StepResult/StepStatus/StepProgress, IInstallerPage
|
||||
Pages/ — WelcomePage, PathsPage, ServicePage, UiSettingsPage, InstallPage
|
||||
Checks/ — environment preflight checks, see "Environment Checks" below
|
||||
Pages/ — WelcomePage, SystemCheckPage, PathsPage, ServicePage, UiSettingsPage, InstallPage
|
||||
(each: ViewModel + View.xaml)
|
||||
Views/ — WizardWindow(+WizardViewModel), SettingsWindow(+SettingsViewModel)
|
||||
```
|
||||
@@ -124,3 +125,52 @@ and restored if it fails.
|
||||
| `%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\ClaudeDo Worker.lnk` | Worker autostart |
|
||||
|
||||
The Apps & Features uninstall string and "Rerun Installer" both point at `<InstallDir>\uninstaller\ClaudeDo.Installer.exe` with no `/uninstall` flag — Config mode is detected from `install.json`.
|
||||
|
||||
## Environment Checks
|
||||
|
||||
> **Merge status (2026-08-05): not yet on `main`.** The `Checks/` folder, `SystemCheckPage`,
|
||||
> and `ExecutableResolver` described below exist only on unmerged task branches
|
||||
> (`claudedo/06aca9b3afec4b939f59b627bfe21737` for the Installer side,
|
||||
> `claudedo/40272c0bb3b14562b59c022d09c382b6` for the `ClaudeDo.Worker` wiring). Build/test
|
||||
> verification for this section was done against a local scratch integration of both, not
|
||||
> against this repo's actual `main`. Merge them (or re-derive equivalent commits) before trusting
|
||||
> this section against the checked-out code. See `docs/open.md` for the outstanding gap this
|
||||
> leaves (`Checks/` and `SystemCheckPage` are real, but the "Claude Help Me" button and the
|
||||
> Config-mode Diagnose section described as follow-ups were never implemented — both follow-up
|
||||
> tasks blocked on this same missing merge and shipped no code).
|
||||
|
||||
`Checks/` holds one `IEnvironmentCheck` per concern, run in parallel by `EnvironmentCheckService.RunAllAsync`:
|
||||
|
||||
| Check | Severity | What it verifies |
|
||||
|---|---|---|
|
||||
| `GitCheck` | Error | `git` resolvable (via `ExecutableResolver`) and runs |
|
||||
| `WriteAccessCheck` | Error | install dir + `%APPDATA%` (or first existing parent) are writable |
|
||||
| `ClaudeCliCheck` | Error | `claude` resolvable on PATH, including npm `.cmd`/`.bat`/`.ps1` shims |
|
||||
| `ClaudeVersionCheck` | Error | resolved `claude --version` ≥ `ClaudeVersionCheck.MinimumVersion` (currently `2.1.220`) |
|
||||
| `ClaudeAuthCheck` | Error | `claude auth status --json` reports `loggedIn: true` (never sends a prompt) |
|
||||
| `GitIdentityCheck` | Warning | `git config user.name`/`user.email` are set |
|
||||
| `PortCheck` | Warning | `SignalRPort`/`ExternalMcpPort` are free, or already owned by a running `ClaudeDo.Worker` |
|
||||
| `PermissionModeAutoCheck` | Warning | CLI's `--help` still lists `auto` as a `--permission-mode` choice |
|
||||
|
||||
Each check returns a `CheckResult` with `CheckStatus` (`Ok` / `Failed` / `Unknown`). A check that
|
||||
throws is caught by `EnvironmentCheckService` and turned into `Unknown`, never a crash.
|
||||
|
||||
**Gating rule:** `EnvironmentCheckReport.HasBlockingError` is true only when a check with
|
||||
`Severity == Error` has `Status == Failed`. Warnings never block, and `Unknown` never blocks
|
||||
regardless of severity (an indeterminate result — e.g. the CLI not found, so version/auth/auto-mode
|
||||
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).
|
||||
|
||||
`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
|
||||
on page entry (`LoadAsync`, guarded against double-entry). "Next" is disabled via
|
||||
`IInstallerPage.BlocksNavigation` (`IsRunning || HasBlockingError`) — `WizardViewModel.CanGoNext`
|
||||
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).
|
||||
|
||||
**Not implemented (see merge-status note above):** a "Claude Help Me" button that launches an
|
||||
external terminal with a live `claude` session for setup troubleshooting, and a Diagnose section
|
||||
in `SettingsWindow` (Config mode) that re-runs the same checks against the installed configuration.
|
||||
Both were speced as follow-up tasks; both blocked before writing any code because their prerequisite
|
||||
(this section) wasn't on `main` yet.
|
||||
|
||||
Reference in New Issue
Block a user