eschutho opened a new pull request, #43145:
URL: https://github.com/apache/superset/pull/43145
> ⚠️ **Merge order: land after #2294** (the "too many icons" PR) — both edit
`OnboardingWizard.tsx` (`STEP_META` / `renderWorkspace`). This branch is off
`main` and will be **rebased onto `main` once #2294 merges**, keeping both sets
of changes. Do not merge before #2294.
## Context / Problem
After finishing the first-run onboarding wizard, the final CTA reads **"Open
my board →"**. But the step that actually creates the user's board + first AI
teammate (the **workspace** step) was skippable. A user who skipped it reached
the `done` step with an empty `boardId` **and** empty `sessionId`, so
`handleOnboardingComplete` fell through to `navigate('/')` and dumped them on
the homepage instead of a board.
## Goal
Completing the onboarding wizard must **always** land the user on a board —
never the homepage.
## Changes
**A. The board/teammate step is now required.**
- `apps/agor-ui/src/components/OnboardingWizard/OnboardingWizard.tsx`: the
`workspace` step is the only step that creates the board (`boards.create`,
named after the teammate) and the teammate seed (`teammateName`). It is now
`skippable: false`, so the "Skip for now" affordance no longer renders for it
(it's gated on the existing `isSkippable` derivation — no new markup).
- To keep "required" from being annoying, the teammate name is **prefilled**
with a sensible default (`Scout`) instead of blocking on an empty field. The
existing `canProceed` guard already requires a non-empty name (or an existing
board), so completion now guarantees a board + teammate exist. The name remains
fully editable.
- The other steps (persona, llm, integrations) stay skippable — no flow,
field, or option was dropped.
**B. Completion never navigates to `/`.**
- `apps/agor-ui/src/App.tsx` (`handleOnboardingComplete`): the final
fallback chain now resolves a board destination in order — seeded `sessionId` →
wizard-created `result.boardId` → the user's existing `mainBoardId` (verified
against the store) → any existing board — using the centralized
`boardPath`/`sessionPath` builders. The bare `navigate('/')` is gone. With fix
A in place a board always exists, so the later fallbacks are
belt-and-suspenders.
**C. Teammate name stays editable on the workspace step (live-testing
follow-up).**
- The workspace step used to swap the name+avatar editor for a read-only
**"Board already set up"** card whenever a board existed (`verifiedBoard ||
createdBoardId`). That hid the name field after pressing **Back** (the board is
created on proceed) and whenever the user already had a board — so the teammate
could never be (re)named — and the copy was board-centric on a step titled
*Name your AI teammate*.
- Now the editor is **always rendered** (prefilled with the current
name/emoji); the read-only card is dropped.
- Proceed handler is board-aware: if a board was created **earlier this same
pass**, it `patch`es that board's `name`/`icon` (Back → edit → forward renames
the same board, no duplicate); a board that **pre-existed onboarding** is
carried forward **without renaming** (it's the user's own); otherwise a board
is created as before.
- CTA reconciled to a single `Continue →`; `canProceed` requires a non-empty
(prefilled) name.
**D. Primary-CTA copy describes the button's actual action (copy
consistency).**
- `primaryLabel` in `OnboardingWizard.tsx`: the button label must describe
its forward action and must not morph on transient selection/visited state when
the action is unchanged.
- `persona`: always `Continue →` — the button just advances whether or not a
persona is selected, so the `This is me →` variant was gratuitous. Dropped
`selectedPersona` from the memo deps now that it's unused there.
- `integrations`: `Connect when done →` → `Continue →` — this button only
advances to the summary (`goToStep('done')`); connecting tools happens via the
per-tool buttons inside the step body, so the old label misdescribed the action.
- `llm`/`workspace`/`done` labels are unchanged (their labels genuinely
track distinct actions).
## How I verified
- `apps/agor-ui/src/components/OnboardingWizard/OnboardingWizard.test.tsx`:
- Rewrote the old "lets the user skip every step" test (it asserted you
could skip the assistant step) into one asserting the **workspace step is
required** (no "Skip for now" button, name prefilled with `Scout`, board
created) and that **completion always emits a non-empty `boardId`**, never the
homepage.
- Updated the two board-reuse tests: they no longer assert the "Board
already set up" card; instead they assert the **name field is editable even
when a board exists** and that a **pre-existing board is never renamed**
(`create`/`patch` not called).
- Added a test that going **Back** to the workspace step keeps the name
editable and that editing then re-proceeding **`patch`es the same board** (no
duplicate `create`).
- Updated the persona/full-flow/Back tests that advanced via `This is me
→` / `Connect when done →` to use the reconciled `Continue →` label.
- **32/32** wizard tests pass, plus 33 App-component tests.
- `biome check` clean on the touched files.
- `tsc -b` typecheck clean for `apps/agor-ui`.
- Self code-review against `context/guidelines/frontend.md`: no new UI
primitives/components (the change removes a bespoke read-only card and reuses
the existing AntD `Input`/`EmojiPickerInput` editor), no new inline
styles/CSS/`--ant-*` strings, AntD `Button`/`Input`/`Tooltip` still own all
visual/disabled/a11y states, and the required step never blocks (prefilled name
→ enabled Continue).
Multi-tenancy: no tenant-owned resource or boundary is crossed — this is
client-side wizard flow + navigation only; board/teammate creation continues to
go through the same authenticated services.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---
### Verified green (AGORgeous assistant)
- **CI: all 3 checks pass** — `Lint, typecheck, build, test` ✅ · `Build &
push` ✅ · `Pack + boot + curl` ✅.
- Ran the wizard suite locally on this branch: **31/31 pass**.
- Booted the branch env and confirmed the app serves (HTTP 200) for live
click-through.
- Tracks Notion bug **"Skipping All Onboarding Questions"** (P1) →
https://app.notion.com/p/3b98718b646580318817c5de132b3c7c
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]