Conversation
no ref Released new transistor.fm integration, enabling customizable Portal account settings re: podcast RSS feeds and new embed/editor card support in the editor.
|
Important Review skippedReview was skipped due to path filters ⛔ Files ignored due to path filters (1)
CodeRabbit blocks several paths by default. You can override this behavior by explicitly including those paths in the path filters. For example, including ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
WalkthroughThe changes transition the transistor feature from a private lab feature to a generally available feature. The transistor feature flag is removed from the private features UI, moved from the 🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
This should've always pointed to the setting, not the feature flag. I think it was a hangover from earlier implementations so this is a 'fix'.
There was a problem hiding this comment.
This is wiring up the setting. As is the file below.
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@ghost/admin/app/services/settings.js`:
- Line 54: The settings import/export mapping is missing entries for the
Transistor integration: update the keyGroupMapping object in settings.js to
include mappings for 'transistor' and the portal keys so they map to the
'transistor' group; specifically add entries for transistor,
transistor_portal_enabled, transistor_portal_heading,
transistor_portal_description, transistor_portal_button_text, and
transistor_portal_url_template all set to 'transistor' (look for the
keyGroupMapping constant and the existing mappings like 'slack': 'slack' to
mirror that pattern).
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 5db7b750-b002-4378-acc9-9ed37c1a62ad
📒 Files selected for processing (5)
apps/admin-x-settings/src/components/settings/advanced/labs/private-features.tsxghost/admin/app/components/koenig-lexical-editor.jsghost/admin/app/models/setting.jsghost/admin/app/services/settings.jsghost/core/core/shared/labs.js
💤 Files with no reviewable changes (1)
- apps/admin-x-settings/src/components/settings/advanced/labs/private-features.tsx
| if (!this._loadingPromise) { | ||
| this._loadingPromise = this.store | ||
| .queryRecord('setting', {group: 'site,theme,private,members,portal,newsletter,email,labs,slack,unsplash,views,firstpromoter,editor,comments,analytics,announcement,pintura,donations,recommendations,security,social_web,explore'}) | ||
| .queryRecord('setting', {group: 'site,theme,private,members,portal,newsletter,email,labs,slack,unsplash,views,firstpromoter,editor,comments,analytics,announcement,pintura,donations,recommendations,security,social_web,explore,transistor'}) |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Verify that 'transistor' group mapping exists in settings-key-group-mapper
echo "=== Searching for transistor group mapping ==="
rg -n "transistor" --type js -g '**/settings-key-group-mapper*'
echo ""
echo "=== Checking full group mapper content ==="
fd "settings-key-group-mapper" --type f --exec cat {}Repository: TryGhost/Ghost
Length of output: 1824
🏁 Script executed:
#!/bin/bash
# Search for transistor settings in the codebase
echo "=== Searching for transistor references in settings/admin ==="
rg -n "transistor" --type js -g '**/settings/**' -g '**/admin/**'
echo ""
echo "=== Searching for EDITABLE_SETTINGS or settings definitions ==="
fd "settings" --type f --exec grep -l "EDITABLE_SETTINGS\|transistor" {} \; 2>/dev/null | head -20Repository: TryGhost/Ghost
Length of output: 29312
🏁 Script executed:
#!/bin/bash
# Check transistor settings in default settings and migration
echo "=== Checking default-settings.json for transistor ==="
rg -A 3 -B 1 '"transistor' ghost/core/core/server/data/schema/default-settings/default-settings.json | head -50
echo ""
echo "=== Checking migration file for transistor ==="
fd "add-transistor-portal-settings" --type f --exec cat {} \;Repository: TryGhost/Ghost
Length of output: 2212
🏁 Script executed:
#!/bin/bash
# Search for all transistor-related migrations
echo "=== All migration files with transistor ==="
find ghost/core/core/server/data/migrations -name "*transistor*" -type f
echo ""
echo "=== Searching migration content for transistor key without _portal_ ==="
rg "key.*:.*['\"]transistor['\"]" ghost/core/core/server/data/migrations -A 3 | grep -v "transistor_"Repository: TryGhost/Ghost
Length of output: 495
🏁 Script executed:
#!/bin/bash
# Check the transistor integration migrations
echo "=== First transistor migration ==="
cat ghost/core/core/server/data/migrations/versions/6.14/2026-01-15-12-00-00-add-transistor-integration.js
echo ""
echo "=== Second transistor migration ==="
cat ghost/core/core/server/data/migrations/versions/6.14/2026-01-15-12-01-00-add-transistor-integration-api-key.jsRepository: TryGhost/Ghost
Length of output: 3441
🏁 Script executed:
#!/bin/bash
# Search for transistor setting key definition
echo "=== Searching for transistor setting creation in all migrations ==="
rg "addSetting.*transistor['\"]" ghost/core/core/server/data/migrations -B 2 -A 5 | grep -v "transistor_"
echo ""
echo "=== Check if transistor is in default-settings.json with group ==="
rg -B 2 -A 10 '"transistor":\s*{' ghost/core/core/server/data/schema/default-settings/default-settings.json | head -30Repository: TryGhost/Ghost
Length of output: 308
🏁 Script executed:
#!/bin/bash
# Search for transistor setting key definition with fixed regex
echo "=== Searching for transistor setting creation ==="
rg '"transistor":' ghost/core/core/server/data/schema/default-settings/default-settings.json -B 2 -A 15
echo ""
echo "=== Check if transistor is in any migration with group ==="
rg "transistor.*group" ghost/core/core/server/data/migrationsRepository: TryGhost/Ghost
Length of output: 668
🏁 Script executed:
#!/bin/bash
# Check how other integrations define their main setting key in mapper
echo "=== Check mapper entries for other integrations ==="
rg "slack|unsplash|labs" ghost/admin/app/services/settings-key-group-mapper.js
echo ""
echo "=== Search for main transistor setting migration ==="
rg -r "addSetting.*key.*transistor['\"]" ghost/core/core/server/data/migrations --type js | grep -v "transistor_"
echo ""
echo "=== Check if transistor key is created anywhere in migrations ==="
find ghost/core/core/server/data/migrations -type f -name "*.js" -exec grep -l "transistor" {} \;Repository: TryGhost/Ghost
Length of output: 662
🏁 Script executed:
#!/bin/bash
# Find the actual settings-key-group-mapper file
echo "=== Finding settings mapper file ==="
find . -name "*settings*mapper*" -type f 2>/dev/null
echo ""
echo "=== Search for mapKeyToGroup function ==="
rg "mapKeyToGroup|keyGroupMapping" --type js | head -20Repository: TryGhost/Ghost
Length of output: 1052
🏁 Script executed:
#!/bin/bash
# Get the correct settings-key-group-mapper.js content
echo "=== Full settings-key-group-mapper.js ==="
cat ghost/core/core/server/api/endpoints/utils/serializers/input/utils/settings-key-group-mapper.js
echo ""
echo "=== Check if transistor key is in the mapping ==="
rg "transistor" ghost/core/core/server/api/endpoints/utils/serializers/input/utils/settings-key-group-mapper.jsRepository: TryGhost/Ghost
Length of output: 1826
🏁 Script executed:
#!/bin/bash
# Verify how the mapper is used in the codebase
echo "=== Where is mapKeyToGroup used? ==="
rg "mapKeyToGroup|settings-key-group-mapper" ghost/core --type js | grep -v ".test.js" | head -20
echo ""
echo "=== Check the filter-type-group-mapper to understand usage ==="
cat ghost/core/core/server/api/endpoints/utils/serializers/input/utils/settings-filter-type-group-mapper.jsRepository: TryGhost/Ghost
Length of output: 1342
🏁 Script executed:
#!/bin/bash
# Check how mapKeyToGroup is used in settings-importer
echo "=== settings-importer usage ==="
cat ghost/core/core/server/data/importer/importers/data/settings-importer.js | grep -A 20 -B 5 "mapKeyToGroup"
echo ""
echo "=== Check if transistor_portal_* keys need to be in mapper too ==="
rg "transistor_portal" ghost/core/core/server/api/endpoints/utils/serializers/input/utils/settings-key-group-mapper.jsRepository: TryGhost/Ghost
Length of output: 157
🏁 Script executed:
#!/bin/bash
# Check the full settings-importer file
echo "=== Full settings-importer.js ==="
cat ghost/core/core/server/data/importer/importers/data/settings-importer.jsRepository: TryGhost/Ghost
Length of output: 9826
🏁 Script executed:
#!/bin/bash
# Check if other integration main keys like 'slack' are mapped
echo "=== Comparing slack integration handling ==="
rg "'slack'" ghost/core/core/server/api/endpoints/utils/serializers/input/utils/settings-key-group-mapper.js
echo ""
echo "=== Check if transistor key is referenced anywhere that requires mapping ==="
rg "transistor['\"]:" ghost/admin/app/services/settings.js -A 2 -B 2Repository: TryGhost/Ghost
Length of output: 200
Add transistor settings mappings to the settings-key-group-mapper.
The transistor group is queried in settings.js, but the mapper is missing entries for the transistor and related settings keys. While the transistor_portal_* settings work because they're created with explicit group assignment in the migration, the main transistor key and potentially the portal settings should be added to keyGroupMapping for consistency with other integrations (e.g., slack: 'slack') and to support settings import/export functionality.
Add the following mappings:
transistor: 'transistor',
transistor_portal_enabled: 'transistor',
transistor_portal_heading: 'transistor',
transistor_portal_description: 'transistor',
transistor_portal_button_text: 'transistor',
transistor_portal_url_template: 'transistor'
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@ghost/admin/app/services/settings.js` at line 54, The settings import/export
mapping is missing entries for the Transistor integration: update the
keyGroupMapping object in settings.js to include mappings for 'transistor' and
the portal keys so they map to the 'transistor' group; specifically add entries
for transistor, transistor_portal_enabled, transistor_portal_heading,
transistor_portal_description, transistor_portal_button_text, and
transistor_portal_url_template all set to 'transistor' (look for the
keyGroupMapping constant and the existing mappings like 'slack': 'slack' to
mirror that pattern).
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #26967 +/- ##
=======================================
Coverage 73.18% 73.18%
=======================================
Files 1539 1539
Lines 121668 121668
Branches 14718 14721 +3
=======================================
+ Hits 89039 89044 +5
+ Misses 31621 31594 -27
- Partials 1008 1030 +22
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
no ref
Released new transistor.fm integration, enabling customizable Portal account settings re: podcast RSS feeds and new embed/editor card support in the editor.