Skip to content

feat(desktop): polish onboarding harness#2039

Merged
wesbillman merged 9 commits into
mainfrom
onboarding-harness-polish
Jul 18, 2026
Merged

feat(desktop): polish onboarding harness#2039
wesbillman merged 9 commits into
mainfrom
onboarding-harness-polish

Conversation

@cynfria

@cynfria cynfria commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Why

Refresh the machine onboarding harness and default-agent settings steps to match the new two-step design while preserving the existing setup/config functionality.

What

  • Reskin the harness selection cards with detected provider logos, loading state, animated selection, and setup/installed badges
  • Split and compact the default agent settings step with custom dropdowns, disabled placeholders, and provider-gated model/effort choices
  • Add the community-step back path to return to agent defaults during onboarding review
  • Extend onboarding e2e coverage for loading, selection, setup, dropdown gating, and save coalescing

Risk Assessment

Medium-low — changes are concentrated in desktop onboarding and shared agent config field presentation. Existing settings defaults are preserved, and the focused onboarding flow is covered by e2e tests.

References

  • bin/pnpm --dir desktop exec biome check ... passed
  • bin/pnpm --dir desktop run typecheck passed
  • bin/pnpm --dir desktop exec playwright test --project=smoke tests/e2e/onboarding-agent-defaults.spec.ts passed, 12 tests
  • Pre-push hooks passed: desktop, mobile, Tauri, Rust, and full test hook

Generated with Codex

@cynfria
cynfria marked this pull request as ready for review July 17, 2026 18:50
@cynfria
cynfria requested a review from a team as a code owner July 17, 2026 18:50
@cynfria
cynfria force-pushed the onboarding-harness-polish branch 3 times, most recently from b4280f6 to 7f6d44d Compare July 17, 2026 21:39
@cynfria
cynfria force-pushed the onboarding-harness-polish branch from 7f6d44d to 18408ee Compare July 18, 2026 05:32

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two existing-flow regressions block this as written; this is not a UI-only change:

  1. A successful installer result bypasses readiness/authentication. runtimeCanAdvanceOnboarding(runtime, installSuccess) returns true unconditionally when installSuccess is true. For a newly installed Claude/Codex CLI, installation does not establish account auth, and the query invalidation/re-probe may still report logged out/unknown. Nevertheless the card becomes “INSTALLED” and Next advances immediately. The new keyboard test codifies this shortcut with a stale not-installed catalog rather than proving the re-probed runtime is actually available and authenticated. Keep installation success distinct from runtime readiness; advance only after the refreshed catalog satisfies the normal availability/auth gate (and show/setup auth otherwise).

  2. Rapid multi-selection can persist an older choice than the UI shows. Every toggle starts an independent getGlobalAgentConfigsetGlobalAgentConfig request. Unlike the old single-select flow, cards remain interactive while isSelectionSaving, so A→A+B launches overlapping writes. The sequence number only suppresses stale React callbacks; it does not serialize/cancel backend writes. If the first write finishes last, persisted preferred_runtime is A while local selection/defaults show B (and Next re-enables when only the newest request finishes, even if an older write is still running). Serialize/coalesce selection writes and keep the gate saving until the queue drains; add a delayed/out-of-order toggle regression test.

wesbillman and others added 4 commits July 18, 2026 09:56
Require refreshed runtime discovery and authentication before advancing after
an install, and serialize preferred-runtime writes so rapid selections cannot
persist stale state.

Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Remove unrelated global auth-probe classification from the onboarding polish.
The established readiness contract treats a successful CLI status probe as
authenticated, including CLI-supported API-key credentials.

Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Restore the established onboarding, settings, persistence, and authentication behavior. Keep only supported runtime branding and fall back to catalog avatars for unknown runtimes.

Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
wesbillman
wesbillman previously approved these changes Jul 18, 2026

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-reviewed the full branch and reduced it to UI-only runtime branding. Existing single-select onboarding, navigation, auth/readiness, persistence, shared settings, and test-bridge behavior are restored; unsupported Gemini branding is removed. The remaining diff only adds supported Claude/Codex/Goose assets, a runtime icon renderer with catalog-avatar/terminal fallback, and uses it in the existing runtime cards. Clean desktop build, typecheck, Biome, and onboarding-agent-defaults smoke suite (15/15) pass on current main.

Restore the intended two-step, multi-harness onboarding redesign after the
review trim removed it too broadly. Keep the targeted readiness and persistence
fixes, established CLI auth semantics, and supported-runtime-only branding.

Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
@wesbillman
wesbillman dismissed their stale review July 18, 2026 16:32

Superseded: this approval incorrectly removed the intended onboarding redesign. The redesign is restored at 4742615; a fresh approval will follow current-head CI and merge-base review.

@wesbillman
wesbillman enabled auto-merge (squash) July 18, 2026 16:38
@wesbillman
wesbillman merged commit 66a0f7b into main Jul 18, 2026
25 checks passed
@wesbillman
wesbillman deleted the onboarding-harness-polish branch July 18, 2026 17:00
wesbillman added a commit that referenced this pull request Jul 18, 2026
The onboarding model list can run long (Databricks discovery returns
dozens of models) and the custom dropdown from #2039 dropped the
typeahead search the persona dialog combobox already has. Add an
inline filter input to AgentDropdownSelect, enabled for the model
field, matching the persona combobox behavior.

Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants