Skip to content

chore: white-label for RitualChain#1

Merged
BunsDev merged 1 commit into
mainfrom
whitelabel/ritualchain
Jun 30, 2026
Merged

chore: white-label for RitualChain#1
BunsDev merged 1 commit into
mainfrom
whitelabel/ritualchain

Conversation

@BunsDev

@BunsDev BunsDev commented Jun 30, 2026

Copy link
Copy Markdown
Member

White-label all Quackback branding → RitualChain branding. Product name, org references, domain (quackback.io → ritual.net), and internal package scopes updated.


Note

High Risk
Widget SDK, webhook consumers, and stored content/encryption keyed on old names may break without coordinated migrations; encryption salt/info changes can invalidate existing platform credentials until re-seeded.

Overview
Replaces Quackback with RitualChain across the product: user-facing copy, docs, legal/CLA, GitHub and cloud URLs (ritual.net), and monorepo package scopes (@quackback/*@ritualchain/*).

Several identifiers change behavior, not just labels. Rich-text embeds use the TipTap node ritualchainEmbed and data-ritualchain-embed placeholders (feature flag ritualchainEmbeds). Outbound webhooks document X-RitualChain-* headers instead of X-Quackback-*. The widget iframe protocol uses ritualchain:* postMessage types and ritualchain:anon-token localStorage keys. Integration credential encryption uses new HKDF info/salt strings; scripts and backfills treat feedback source_type ritualchain (replacing quackback). E2E and Docker helpers target ritualchain-dragonfly and updated branding assertions.

Reviewed by Cursor Bugbot for commit c2d80a2. Bugbot is set up for automated code reviews on this repo. Configure here.

Copilot AI review requested due to automatic review settings June 30, 2026 14:41

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 6 potential issues.

Fix All in Cursor

Bugbot Autofix prepared fixes for all 6 issues found in the latest run.

  • ✅ Fixed: E2E Redis container name mismatch
    • Updated docker-compose.yml Dragonfly container_name to ritualchain-dragonfly so e2e docker exec calls reach the running Redis instance.
  • ✅ Fixed: Feedback source type not migrated
    • Added SQL migration 0126 to rewrite quackback rows to ritualchain and taught ensureRitualChainFeedbackSource to rename any legacy source at startup.
  • ✅ Fixed: Stored embed nodes no longer parse
    • Added legacy quackbackEmbed node support in the editor, sanitizer normalization, HTML parsing, and embed hydration for data-quackback-embed placeholders.
  • ✅ Fixed: Zendesk app setting key renamed
    • Zendesk sidebar client now falls back to metadata.settings.quackback_url when ritualchain_url is unset.
  • ✅ Fixed: SSO DNS verification host renamed
    • Domain verification now checks both _ritualchain-verify and legacy _quackback-verify TXT hosts, with UI showing either record.
  • ✅ Fixed: Encryption HKDF labels changed
    • decrypt() now retries with legacy quackback HKDF salt and info strings when decryption with ritualchain labels fails.

Create PR

Or push these changes by commenting:

@cursor push 1fb4b58412

You can send follow-ups to the cloud agent here.

Reviewed by Cursor Bugbot for commit c2d80a2. Configure here.

// The portal-access decision is cached under 'settings:tenant'. Drop it so
// the dev server evaluates the new visibility on the next request.
execFileSync('docker', ['exec', 'quackback-dragonfly', 'redis-cli', 'del', 'settings:tenant'], {
execFileSync('docker', ['exec', 'ritualchain-dragonfly', 'redis-cli', 'del', 'settings:tenant'], {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

E2E Redis container name mismatch

Medium Severity

E2e helpers run docker exec against ritualchain-dragonfly, but local docker-compose.yml still names the Dragonfly service quackback-dragonfly. Magic-link rate-limit flushing and tenant-settings cache invalidation fail silently or error during e2e and local dev.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit c2d80a2. Configure here.

await sql`
INSERT INTO feedback_sources (id, source_type, delivery_mode, name, enabled)
VALUES (${id}, 'quackback', 'passive', 'Quackback', true)
VALUES (${id}, 'ritualchain', 'passive', 'RitualChain', true)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Feedback source type not migrated

High Severity

Scripts and runtime logic now treat the passive native source as ritualchain, while existing databases still store quackback on feedback_sources and raw_feedback_items. Startup can add a second source, backfills miss legacy rows, and pipeline checks like sourceType === 'ritualchain' no longer match historical data.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit c2d80a2. Configure here.

return [
{
tag: 'div[data-quackback-embed]',
tag: 'div[data-ritualchain-embed]',

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Stored embed nodes no longer parse

High Severity

TipTap embeds were renamed to ritualchainEmbed with data-ritualchain-embed placeholders, without compatibility for saved quackbackEmbed JSON or data-quackback-embed HTML. Existing posts, changelog entries, and chat content lose embed cards after upgrade.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit c2d80a2. Configure here.


const apiKey = metadata.settings.api_key
const baseUrl = metadata.settings.quackback_url
const baseUrl = metadata.settings.ritualchain_url

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Zendesk app setting key renamed

Medium Severity

The sidebar client reads metadata.settings.ritualchain_url only. Zendesk installations still configured with quackback_url no longer receive a base URL, breaking API calls until each app instance is reconfigured.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit c2d80a2. Configure here.

<p>Add this DNS TXT record, then click Verify:</p>
<code className="block break-all">
_quackback-verify.{domain.name} = qb-domain-verify={domain.verificationToken}
_ritualchain-verify.{domain.name} = qb-domain-verify={domain.verificationToken}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

SSO DNS verification host renamed

Medium Severity

Domain verification instructions and server lookup use _ritualchain-verify TXT records. Tenants who already published _quackback-verify records cannot pass verification or re-verify until DNS is updated, which can block SSO changes after upgrade.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit c2d80a2. Configure here.

const info = 'quackback:v1:integration-platform-credentials'
const key = Buffer.from(hkdfSync('sha256', secretKey, 'quackback-encryption-salt-v1', info, 32))
const info = 'ritualchain:v1:integration-platform-credentials'
const key = Buffer.from(hkdfSync('sha256', secretKey, 'ritualchain-encryption-salt-v1', info, 32))

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Encryption HKDF labels changed

High Severity

Integration credential encryption now derives keys with ritualchain HKDF salt and info strings. Ciphertext written under the previous quackback labels cannot be decrypted after upgrade, breaking SSO and integration secrets until credentials are re-entered.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit c2d80a2. Configure here.

@BunsDev BunsDev merged commit c1fd1e4 into main Jun 30, 2026
3 checks passed
@BunsDev BunsDev deleted the whitelabel/ritualchain branch June 30, 2026 14:46

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Copilot wasn't able to review this pull request because it exceeds the maximum number of files (300). Try reducing the number of changed files and requesting a review from Copilot again.

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.

2 participants