#6123·wails

v3 setup: finish the wizard server lifecycle and show system details

Author: leaanthonyCreated Sep 14, 2026Updated Sep 14, 2026
LabelsBugWIPv3cliImprovementP3

Problem

The setup wizard's final screen offers only Start Building, which opens documentation; it does not call the existing completion endpoint or explain how to stop the local server. The dependency check also collects basic system information without displaying it.

Reported in Discord on 2026-09-14. Related feedback tracker: #4904. The reporter did not specify a platform or version.

Reproduction

  1. Run wails3 setup and complete the dependency check.
  2. Observe that the result screen has no system/environment summary.
  3. Finish or skip the remaining configuration steps.
  4. Click Start Building on the final screen: documentation opens, but the setup server continues running with no completion/stop action or Ctrl+C guidance.

Scope and acceptance criteria

  • Automatically finish setup when leaving the final page, closing its tab, or selecting Start Building, while retaining the explicit finish action.
  • Let background Docker builds finish before stopping the server; explain this when finishing setup.
  • Surface request failures and provide Ctrl+C guidance rather than claiming success.
  • Display detected OS/version, architecture, CPU/GPU/memory when available, platform environment details, and Go/Wails versions after dependency checks, including when dependencies are missing.
  • Reuse doctor's system collection, preserve existing doctor output, and tolerate unavailable optional hardware details.
  • Rebuild embedded wizard assets and verify shutdown and frontend behavior.

Priority: P3 (onboarding usability; setup itself succeeds). Keep this combined feedback ticket outside v3.1.0 because it includes the broken completion flow; that fix is suitable for a nightly patch.

Implementation status

Implemented and verified locally; changes are uncommitted and have not been pushed. Keep this issue open until the fix lands.

  • Added automatic completion on final-page exit/tab close and Start Building, plus Finish setup, success/retry feedback, and terminal Ctrl+C guidance. Completion uses POST, tolerates retries, and waits for background Docker builds. Build registration now happens before exposing its running status.
  • Reused doctor.CollectSystemInfo() to populate a collapsible system/environment panel on both dependency result screens. Optional hardware details may be absent.
  • Prevented navigation back into the wizard after reaching completion and disconnected the background status stream when finishing.
  • Rebuilt the embedded setup wizard frontend assets.

Validation:

  • go test -race ./internal/setupwizard ./internal/doctor passed on Linux, including new completion and system-state regression tests.
  • npm run build passed (TypeScript and production bundle).
  • Setup wizard test binaries cross-compiled for Windows amd64 and macOS arm64; native execution on those platforms was not performed.
  • Chromium checks against the production frontend with mocked API responses passed: ready/missing dependency summaries, finish POST, server-error retry, ordinary completion, and completion with a background Docker build.
  • git diff --check passed. Ripwire contract checks reported no incompatible callers; its quality report retained heuristic clone findings on unchanged fetch helpers and flagged inherited hardware-collection complexity. Its suggested Go test packages were run; frontend behavior was checked in Chromium.

Automatic shutdown follow-up (2026-09-15)

The final screen listens for pagehide and sends a completion POST using sendBeacon, falling back to a keepalive fetch if the beacon cannot be queued. Earlier screens and ordinary tab switching do not trigger completion. React effect cleanup only removes the listener, avoiding premature shutdown during StrictMode remounts. Start Building also completes setup when opening the documentation. Acknowledged completion removes the exit listener.

Verified in Chromium with an actual local HTTP server receiving the requests: leaving the final page, closing its tab, beacon fallback, and Start Building each deliver a completion POST; closing an earlier screen delivers none. The TypeScript/production build, Go race tests for setupwizard and doctor, and whitespace checks pass. Embedded frontend assets are rebuilt. Changes remain uncommitted and unpushed.