Skip to content

Removed unused Ember onboarding checklist#27768

Open
kevinansfield wants to merge 1 commit intoTryGhost:mainfrom
kevinansfield:codex/remove-ember-onboarding-cleanup
Open

Removed unused Ember onboarding checklist#27768
kevinansfield wants to merge 1 commit intoTryGhost:mainfrom
kevinansfield:codex/remove-ember-onboarding-cleanup

Conversation

@kevinansfield
Copy link
Copy Markdown
Member

@kevinansfield kevinansfield commented May 7, 2026

What changed

  • Removed the old Ember onboarding checklist components, helpers, and share modal.
  • Reduced the remaining Ember onboarding service to only initialize preferences before handing off to React.
  • Removed retired dashboard CSS and stale dashboard-derived selectors from the Ember admin styles.
  • Updated Ember onboarding acceptance coverage to focus on the setup-to-React handoff.

Why

The onboarding checklist now lives in React, so the old Ember implementation and its dashboard-era styling were dead code still shipping in the admin bundle.

no issue

The onboarding checklist now lives in React, so the old Ember components, helpers, dashboard styles, and checklist-specific tests no longer need to ship in the admin bundle.
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 7, 2026

Review Change Stack

Walkthrough

This pull request removes the Ember-based onboarding checklist UI from the dashboard and simplifies the onboarding service to coordinate with a React-based onboarding implementation. The change deletes seven Ember components and helpers, refactors the OnboardingService to remove public getters and action methods while retaining startChecklist to initialize onboarding state, updates stylesheet imports to replace dashboard.css with billing/post-history/post-preview layouts, removes onboarding and attribution box styling rules, and refactors acceptance tests to validate service state initialization and React redirect behavior for owner and non-owner users.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: removal of the unused Ember onboarding checklist component and related code.
Description check ✅ Passed The description is directly related to the changeset, clearly explaining what was removed and why, with specific examples of components, helpers, and CSS files affected.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands and usage tips.

@kevinansfield kevinansfield marked this pull request as ready for review May 7, 2026 12:58
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
ghost/admin/app/services/onboarding.js (1)

6-17: 💤 Low value

Consider guarding against overwriting existing onboarding state.

startChecklist() unconditionally overwrites any existing userSettings.onboarding data. If called more than once (e.g., user revisits /setup/done), this would reset progress like completedSteps and startedAt.

If the route already guards against re-entry for users with existing onboarding state, this is fine. Otherwise, a simple guard would prevent accidental resets:

🛡️ Optional guard to preserve existing onboarding state
 async startChecklist() {
     const userSettings = JSON.parse(this.session.user.accessibility || '{}');

+    if (userSettings.onboarding) {
+        return; // Already initialized
+    }
+
     userSettings.onboarding = {
         completedSteps: [],
         checklistState: 'started',
         startedAt: new Date().toISOString()
     };

     this.session.user.accessibility = JSON.stringify(userSettings);
     await this.session.user.save();
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ghost/admin/app/services/onboarding.js` around lines 6 - 17, startChecklist
currently unconditionally replaces
session.user.accessibility.userSettings.onboarding and will reset progress;
modify startChecklist to first parse this.session.user.accessibility into
userSettings and check if userSettings.onboarding already exists and is an
object—if it does, do not overwrite existing
completedSteps/checklistState/startedAt (or only set missing fields like
checklistState='started' when absent); if onboarding is absent, initialize it as
now; after merging/preserving existing fields, stringify back to
this.session.user.accessibility and call await this.session.user.save(). Use the
function name startChecklist and properties this.session.user.accessibility,
userSettings.onboarding, and this.session.user.save to locate the change.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@ghost/admin/app/services/onboarding.js`:
- Around line 6-17: startChecklist currently unconditionally replaces
session.user.accessibility.userSettings.onboarding and will reset progress;
modify startChecklist to first parse this.session.user.accessibility into
userSettings and check if userSettings.onboarding already exists and is an
object—if it does, do not overwrite existing
completedSteps/checklistState/startedAt (or only set missing fields like
checklistState='started' when absent); if onboarding is absent, initialize it as
now; after merging/preserving existing fields, stringify back to
this.session.user.accessibility and call await this.session.user.save(). Use the
function name startChecklist and properties this.session.user.accessibility,
userSettings.onboarding, and this.session.user.save to locate the change.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: c4569e1b-f922-4bfd-9ffc-326c6dc453b6

📥 Commits

Reviewing files that changed from the base of the PR and between 59b314d and 9dd6f95.

📒 Files selected for processing (13)
  • ghost/admin/app/components/dashboard/onboarding-checklist.hbs
  • ghost/admin/app/components/dashboard/onboarding-checklist.js
  • ghost/admin/app/components/dashboard/onboarding/share-modal.hbs
  • ghost/admin/app/components/dashboard/onboarding/share-modal.js
  • ghost/admin/app/components/dashboard/onboarding/step.hbs
  • ghost/admin/app/helpers/is-onboarding-step-completed.js
  • ghost/admin/app/helpers/onboarding-step-class.js
  • ghost/admin/app/services/onboarding.js
  • ghost/admin/app/styles/app-dark.css
  • ghost/admin/app/styles/app.css
  • ghost/admin/app/styles/layouts/content.css
  • ghost/admin/app/styles/layouts/dashboard.css
  • ghost/admin/tests/acceptance/onboarding-test.js
💤 Files with no reviewable changes (10)
  • ghost/admin/app/styles/app.css
  • ghost/admin/app/components/dashboard/onboarding/step.hbs
  • ghost/admin/app/helpers/is-onboarding-step-completed.js
  • ghost/admin/app/components/dashboard/onboarding-checklist.hbs
  • ghost/admin/app/helpers/onboarding-step-class.js
  • ghost/admin/app/components/dashboard/onboarding/share-modal.js
  • ghost/admin/app/components/dashboard/onboarding-checklist.js
  • ghost/admin/app/components/dashboard/onboarding/share-modal.hbs
  • ghost/admin/app/styles/app-dark.css
  • ghost/admin/app/styles/layouts/content.css

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.

1 participant