Skip to content

feat(tui): wizard deep-polish — online search, preset & config-mode entry, summary#148

Open
fullstackjam wants to merge 4 commits into
fix/review-v063-findingsfrom
feat/wizard-deep-polish
Open

feat(tui): wizard deep-polish — online search, preset & config-mode entry, summary#148
fullstackjam wants to merge 4 commits into
fix/review-v063-findingsfrom
feat/wizard-deep-polish

Conversation

@fullstackjam

Copy link
Copy Markdown
Member

What does this PR do?

Closes the UX gaps found when comparing the Redesign v5 wizard against v0.63: restores online search on the select screen, routes -p <preset> and slug/-u/--from/alias installs through the full wizard (config mode) instead of the linear-prompt + pipeline stitch, adds a completion summary with failed-package names, per-package npm timings, small-terminal handling, and colour-profile-aware hover.

Why?

The v0.63 comparison showed the new wizard was better on the bare-install path but regressed in two places (online search gone, remote/preset installs got a stitched two-era UX) and had polish gaps (no failure recap on the DONE screen, raw truecolor hover escapes, broken frames under 60×15, npm rows without timing). Detail per change is in the three commit messages.

Testing

  • go vet ./... passes
  • Relevant tests added or updated — 10 new tests: online-search debounce/dedupe/toggle lifecycle, preset auto-advance, config-mode select/confirm/plan/post-install deferral, PlanForRemoteSelection, completion summary, small-terminal hint, hover degradation, CLI wizard routing
  • Tested locally — full L1 green (25 packages incl. archtest); driven end-to-end on a real pty (tmux, isolated $HOME, quitting before install): install bare, install -p developer, install --from <config.json>, online search against the live openboot.dev API, 50×10 terminal

Cross-repo checklist

  • Does this need a docs/content update in openboot.dev? — possibly: install-page copy that describes the slug install flow (3-way prompt) is now the wizard on TTY
  • Does this change the CLI ↔ server API contract? — no (uses the existing search endpoint)

Notes for reviewer

  • Stacked on fix(tui): v0.63 review follow-ups — abort lifecycle, slug post-install, wizard lows #147 — merge that first; GitHub will retarget this PR to main when the base branch is deleted.
  • Sync-source installs deliberately keep their linear diff pre-flight: they run the add-only sync.Execute engine, and folding that into the config wizard changes semantics — left for its own PR.
  • promptCustomizeAndApply + RunConfigCustomizer are still live for the dry-run/update/non-TTY paths and the sync customizer — not dead code.

Sequential npm installs now time each package and emit the duration as
the StepOK detail, so the wizard log shows npm rows with the same
timing brew rows get (npm batch installs have no per-package timing to
report, so those rows stay clean rather than showing invented numbers).
… small terminals

Closes the UX gaps found in the v0.63 comparison:

- select screen regains online search (lost in the Redesign v5 rewrite):
  filtering fires a debounced openboot.dev lookup; hits are deduped
  against the catalog, badge-marked, and picks are homed in a synthetic
  'online' sidebar category so they survive clearing the filter.
  PlanFromSelection gains an online parameter so their type info
  reaches categorization.
- 'install -p <preset>' (and OPENBOOT_PRESET) on a TTY now enters the
  full wizard with the loadout preselected on the select screen,
  instead of the linear pre-flight + pipeline-screen stitch. Unknown
  presets keep the linear path and its clear error.
- completion appends a summary to the log tail — counts plus the names
  of failed packages, which had scrolled away by the DONE screen.
- elapsed times render as 3m24s instead of raw seconds everywhere.
- terminals below 60x15 get a resize hint instead of a broken frame.
- the hover background derives its escape from the active lipgloss
  colour profile, so it downsamples on 256/16-colour terminals and
  disappears cleanly without colour support.
…g mode)

Remote-config installs on a TTY previously got a stitched experience:
linear 3-way prompt + the old full-screen customizer, then a jump into
the wizard's live install screen. They now enter the wizard proper via
RunForConfig: boot probe → select (the config's own packages as sidebar
categories, all preselected, installed tools marked) → review plan →
live install.

- installer.PlanForRemoteSelection builds the plan from the config
  filtered to the wizard selection, plus openboot.dev search picks;
  everything declarative (git, shell, dotfiles, prefs, dock, login
  items, post-install) flows through planFromRemoteConfig unchanged.
- config mode never interposes the git screen — the git step already
  keeps an existing config and no-ops when absent, matching the old
  slug pipeline behavior; the review screen says so instead of
  rendering an empty identity.
- post-install can't host its confirm inside the alt-screen: the review
  screen surfaces it as an informational row, the streamed apply strips
  it, and the CLI runs it after teardown from the returned plan
  (mirroring the pipeline path's R1 fix).
- sync-source installs are unchanged (diff pre-flight + RunPipeline);
  --pick, --silent, --dry-run, --update and non-TTY keep their flows.
- promptCustomizeAndApply + RunConfigCustomizer remain for the
  dry-run/update/non-TTY prompt paths and the sync customizer.
@github-actions github-actions Bot added installer Package installation logic tests Tests only ui Terminal UI docs labels Jul 15, 2026
… gate

The two online-search message cases pushed Update to complexity 22
(gate is 20). Moving the ctrl+c abort semantics into their own method
reads better than a nolint and drops Update back under the gate.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs installer Package installation logic tests Tests only ui Terminal UI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant