Skip to content

first-run-ux: welcome modal + first-run gate (PR-B of #1101)#1150

Merged
joelteply merged 1 commit into
canaryfrom
intake/first-run-ux-welcome-canary
May 14, 2026
Merged

first-run-ux: welcome modal + first-run gate (PR-B of #1101)#1150
joelteply merged 1 commit into
canaryfrom
intake/first-run-ux-welcome-canary

Conversation

@joelteply
Copy link
Copy Markdown
Contributor

Summary

Refs #1126
Refs #1101
Supersedes the canary-intake portion of #1108.

Proof

  • Precommit: TypeScript compilation passed; staged ESLint fell back to repo baseline and held at 5464; browser smoke skipped because local stack did not answer ./jtag ping.
  • Pre-push: TypeScript clean; ESLint ratchet held at 5464; Rust compile/tests skipped because no Rust-relevant changes; Docker skipped because no Rust/docker changes.
  • Conflict resolution: MainWidget kept canary's empty initial route and added PR-B onboarding imports/render/persist flow; removed stale ROOM_UNIQUE_IDS import.

Stacked on top of PR-A (feat/empty-states-foundation), which adds the
ModalWidget primitive and the `hasOnboarded` field. PR-B is the
user-facing flow that consumes both.

What ships:

  - `widgets/onboarding/WelcomeModalWidget.ts` (new). Two short panels
    wrapped in `<modal-widget>`:
      1. Intro — what Continuum is, in one paragraph
      2. Hand-off — "Helper AI is in General. Send a message there to
         see the system in motion." Skip-keys note: optional cloud
         providers in Settings.
    Step indicator + Back/Next/Got-it buttons. Backdrop / Escape /
    X dismissal is treated as "completed" so the modal doesn't nag
    the user the next session.

  - MainWidget gate. In `onFirstRender`, checks
    `this.currentUser.hasOnboarded` (loaded by ReactiveWidget's
    connectedCallback before onFirstRender runs). Falsy → open the
    modal. On `welcome-complete`, persists `hasOnboarded: true` via
    `data/update` and reflects the value on the in-memory entity so a
    re-render doesn't re-open the modal. Persist failure is logged
    but not surfaced — the worst-case is "modal shows again next
    session."

  - Seed: `SYSTEM_ROOM_UNIQUE_IDS` extended with `'general'`. Previous
    set was `['settings', 'help', 'theme', 'canvas']`, so a fresh
    install put Helper AI into support rooms only and left General
    with no AI for users running with zero API keys. The welcome
    modal's hand-off copy now matches what's actually in the room.
    The constant is referenced from both the fresh-seed and
    existing-rooms paths in seed-continuum.ts, so the change applies
    in both flows.

Copy choices (per #1101 discussion):
  - Skip the API-key step — local inference is enough out-of-box
    after #336's model evaluation work; Settings is a follow-up, not a
    blocker.
  - Feature Helper AI specifically (not GeneralAI, which requires
    ANTHROPIC_API_KEY and won't be seeded for no-key users).
  - Tone: warm, brief, system-confident — three short paragraphs total
    across both panels. Easy to edit at the strings in WelcomeModalWidget.

`npm run build:ts` is green. Not visually validated locally — flow gate
is in the test plan.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@joelteply joelteply merged commit e543259 into canary May 14, 2026
4 checks passed
@joelteply joelteply deleted the intake/first-run-ux-welcome-canary branch May 14, 2026 12:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant