Skip to content

feat(onboarding): route 2nd+ app create to getting-started CLI steps - #3390

Open
riderx wants to merge 210 commits into
cursor/onboarding-cli-next-steps-4676from
cursor/onboarding-2nd-app-getting-started-aaa7
Open

riderx wants to merge 210 commits into
cursor/onboarding-cli-next-steps-4676from
cursor/onboarding-2nd-app-getting-started-aaa7

Conversation

@riderx

@riderx riderx commented Sep 19, 2026 •

Copy link
Copy Markdown
Member

Summary (AI generated)

  • Restored WebNative publish-intent A/B treatment UI in AppOnboardingFlow.vue (publish intent option, development-environment question, resume behavior, WebNative recommendation card)
  • Preserved feat(onboarding): route 2nd+ app create to getting-started CLI steps #3390 carve-outs: second-app getting-started redirect, getting-started-cli-panel, version-aware CLI steps, and no APP_ONBOARDING_STEP_IDS re-export

Motivation (AI generated)

Playwright register.spec.ts treatment test failed because Michael's restored AppOnboardingFlow.vue used a static intentOptions array without the publish intent or publish_app_question step. Treatment users could not see [data-test="onboarding-intent-publish"] after resume.

Business Impact (AI generated)

Unblocks onboarding A/B test validation for WebNativeApp publish-intent and hosted-builder recommendation flows without regressing the second-app getting-started experience.

Test Plan (AI generated)

  • bun run lint:deadcode — green
  • bun run typecheck:frontend — green
  • CI Playwright register.spec.ts WebNative treatment test
  • CI Playwright onboarding-setup.spec.ts (no regression)

Generated with AI

Open in Web Open in Cursor 

View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

Review in cubic

riderx and others added 30 commits September 3, 2026 04:07
* fix(admin): use typed 0.0 sentinel instead of avgIf for delivery stats

avgIf expands to if(cond, double1, NULL) and Analytics Engine 422s
because IF() branches must share a type. max(if(..., 0.0)) keeps both
branches Double and still prefers metadata duration over pairing.

Co-authored-by: Martin DONADIEU <martindonadieu@gmail.com>

* fix(admin): skip SQL strings and comments in avgIf lint

CodeRabbit: the no-conditional-agg-if rule used a raw regex and
flagged avgIf/sumIf/countIf inside literals and comments.

Co-authored-by: Martin DONADIEU <martindonadieu@gmail.com>

* test(admin): run live AE delivery queries concurrently

Avoid a 90s serial wait against a 60s Vitest timeout when the
Analytics Engine endpoint is slow.

Co-authored-by: Martin DONADIEU <martindonadieu@gmail.com>

* fix(admin): treat backslash-escaped quotes as inside SQL strings

ClickHouse/AE allows \'. skipSqlQuote now skips that escape so
avgIf inside a literal is not flagged.

Co-authored-by: Martin DONADIEU <martindonadieu@gmail.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
* fix(frontend): show clear trial and plan status in the navbar

Trial orgs are stored as Stripe canceled until they subscribe, so the
navbar was labeling an active trial as "Plan inactive". Resolve billing
state in one place and show free-trial days left, trial over, plan
active, or using credits.

Co-authored-by: Martin DONADIEU <martindonadieu@gmail.com>

* fix(frontend): coerce navbar billing flags for vue-tsc

Pinia store booleans can type as boolean | undefined, which failed
the frontend typecheck when passed into resolveOrgBillingStatus.

Co-authored-by: Martin DONADIEU <martindonadieu@gmail.com>

* fix(frontend): keep a single navbar billing link

When Upgrade or Manage is shown, the status chip is no longer a second
link to the same page. Plan active still uses the chip as the link.

Co-authored-by: Martin DONADIEU <martindonadieu@gmail.com>

* fix(frontend): address navbar billing review comments

Keep role=status on the non-interactive chip only, alphabetize the new
translation keys, and document why paid orgs with credits still show as
plan active.

Co-authored-by: Martin DONADIEU <martindonadieu@gmail.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
* fix(frontend): explain skipped organizations on CLI login page

Replace the bare "Skipped organizations" line with a card explaining what
it means, why an organization is skipped, and how to fix it. Applies to
both the AI prompt flow (?ai=1) and the terminal flow. Soften the AI
prompt API key notice and show it as an info card instead of a warning.

* fix(frontend): address CLI login skipped-orgs review comments

Use empty-state copy when no key exists, key skipped orgs by id, mention pending invites, and drop the noisy live region.

* fix(frontend): accept trailing-slash AI login URLs

Treat ?ai=1/ as AI mode and let the skipped-orgs card reload the page after the user fixes access.

* fix(frontend): align AI query mock and skipped-org i18n key order
…3271)

* feat(notifications): allow hosted upload of iOS APNs and Android FCM secrets

Add encrypted secret_ciphertext storage for notification provider configs so
hosted customers can upload .p8 and service-account JSON in the console instead
of relying on worker env vars. Self-host secret_ref path is unchanged.

* fix(i18n): add translation context for notification secret upload keys

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
* fix(frontend): say CLI login keys can be rotated later

* fix(frontend): keep trusted-terminal guidance on CLI login key

* test(frontend): assert CLI login trusted-terminal copy
…g emails (#3253)

* feat(cli): add --accept-incompatible for handled native mismatches

Let uploads and channel sets mark a native-package mismatch as intentional
so the crash-warning email is skipped when the app already guards missing
plugins at runtime.

Co-authored-by: Martin DONADIEU <martindonadieu@gmail.com>

* fix(cli): reject SDK acceptIncompatible with ignoreCompatibilityCheck

Keep the upload contract consistent with CLI flags: accepting a handled
native mismatch still requires running the compatibility check.

Co-authored-by: Martin DONADIEU <martindonadieu@gmail.com>

* fix(cli): clarify channel set accept-incompatible help

Channel set never sends the crash-warning email, so its flag text now
describes the warning-and-continue behavior. Email skip outcomes are
covered by a shared helper used by /private/events.

Co-authored-by: Martin DONADIEU <martindonadieu@gmail.com>

* fix(cli): parse SDK upload and channel options at the boundary

Reject non-boolean acceptIncompatible and conflicting ignoreCompatibilityCheck
before mapping to internal options.

Co-authored-by: Martin DONADIEU <martindonadieu@gmail.com>

* fix(cli): share channel-specific accept-incompatible help text

Keep the crash-warning-email wording on bundle upload and a named
channel variant for channel set.

Co-authored-by: Martin DONADIEU <martindonadieu@gmail.com>

* fix(api): split bundle-incompatible email helpers to lower complexity

Extract PostHog tracking and channel/version lookups from
buildBundleIncompatibleBentoEvent so Sonar cognitive complexity stays
under the 15 limit.

Co-authored-by: Martin DONADIEU <martindonadieu@gmail.com>

* fix(api): stringify apikey id before bundle-incompatible email tracking

trackBundleIncompatibleEmail expects a string apikeyId; apikeys.id is
numeric, so coerce it with toIdString at the call site.

Co-authored-by: Martin DONADIEU <martindonadieu@gmail.com>

* fix(api): record sent email after Bento lookup

Skip PostHog sent/sent_expected when org/app lookup fails
and the crash-warning email is not actually sent.

Co-authored-by: Martin DONADIEU <martindonadieu@gmail.com>

* fix(api): note sent tracking waits on lookup

Keep PostHog sent/sent_expected aligned with Bento emission.

Co-authored-by: Martin DONADIEU <martindonadieu@gmail.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

@coderabbitai review

Drop shareInFlightApiKeyLoad after CLI key loading moved to Getting Started;
add optional Playwright capture spec for PR screenshots.

Co-authored-by: Martin DONADIEU <martindonadieu@gmail.com>
@cursor
cursor Bot deployed to deepsec-pr September 19, 2026 18:05 Active
@github-actions

Copy link
Copy Markdown
Contributor

@coderabbitai review

… setup RPC

Re-export checklist step helpers for typecheck, map legacy publish_app_question
resume to details, and drop report_app_onboarding_setup after main removed it.

Co-authored-by: Martin DONADIEU <martindonadieu@gmail.com>
@cursor
cursor Bot deployed to deepsec-pr September 19, 2026 18:31 Active
@github-actions

Copy link
Copy Markdown
Contributor

@coderabbitai review

…moval

Co-authored-by: Martin DONADIEU <martindonadieu@gmail.com>
@cursor
cursor Bot deployed to deepsec-pr September 19, 2026 18:38 Active
@github-actions

Copy link
Copy Markdown
Contributor

@coderabbitai review

@github-actions

github-actions Bot commented Sep 19, 2026 •

Copy link
Copy Markdown
Contributor

Visual diff failed

Visual diff did not produce a report. Check the workflow logs and artifacts.

Commit: 3ce1692034e3c522b73b371daa18f94380f54aca
Download the HTML report from workflow artifacts (artifact: visual-diff-report-3ce1692034e3c522b73b371daa18f94380f54aca).

Open index.html from the artifact for side-by-side before/after/diff screenshots.

- Add Tinbase edge stubs for local screenshot capture when Docker Supabase is unavailable
- Fix onboarding flow steps (app id entry then icon skip) and webp export via ffmpeg
- Add real console screenshot for 2nd+ app getting-started page

Co-authored-by: Martin DONADIEU <martindonadieu@gmail.com>
@cursor
cursor Bot deployed to deepsec-pr September 19, 2026 20:28 Active
@github-actions

Copy link
Copy Markdown
Contributor

@coderabbitai review

…ght tests

- AppOnboardingCliSteps uses getAppOnboardingStepIds(todo_list_version) so v3
  compact checklist renders 7 steps instead of always using v2's 12
- Update onboarding-setup.spec.ts getting-started paths to expect
  getting-started-page/getting-started-cli-panel instead of fullscreen
  onboarding-setup-cli
- Fixture: mount fullscreen checklist at /onboarding/app for exploration
  tests and grant dashboard exploration on explore click

Co-authored-by: Martin DONADIEU <martindonadieu@gmail.com>
@cursor
cursor Bot deployed to deepsec-pr September 19, 2026 20:58 Active
@github-actions

Copy link
Copy Markdown
Contributor

@coderabbitai review

Co-authored-by: Martin DONADIEU <martindonadieu@gmail.com>
@cursor
cursor Bot deployed to deepsec-pr September 19, 2026 21:05 Active
@github-actions

Copy link
Copy Markdown
Contributor

@coderabbitai review

…OnboardingFlow

Re-port publish intent option, development-environment question, resume
behavior, and WebNative recommendation from main while preserving the
getting-started CLI panel and second-app redirect carve-outs from #3390.

Co-authored-by: Martin DONADIEU <martindonadieu@gmail.com>
@cursor
cursor Bot deployed to deepsec-pr September 19, 2026 21:23 Active
@github-actions

Copy link
Copy Markdown
Contributor

@coderabbitai review

…sion

Fixes ts/no-use-before-define lint failure blocking CI Playwright.

Co-authored-by: Martin DONADIEU <martindonadieu@gmail.com>
@cursor
cursor Bot deployed to deepsec-pr September 19, 2026 21:26 Active
@github-actions

Copy link
Copy Markdown
Contributor

@coderabbitai review

…update unit tests

Match main v-if on onboarding-create-org for Playwright register spec.
Refresh source-string unit asserts for trackedAnalyticsSteps and restored
WebNative flow; stub invokeCapgoApi on mount tests.

Co-authored-by: Martin DONADIEU <martindonadieu@gmail.com>
@cursor
cursor Bot deployed to deepsec-pr September 19, 2026 21:39 Active
@github-actions

Copy link
Copy Markdown
Contributor

@coderabbitai review

@sonarqubecloud

Copy link
Copy Markdown

This branch was successfully deployed

1 active deployment
deepsec-pr — 52330bfc Deployed Sep 19, 2026 by cursor[bot] via Scan PR changes #7378
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.

6 participants