basecamp/fizzy · error · NotImplementedError

Fizzy does not support Queenbee-initiated ownership transfer

Error message

Fizzy does not support Queenbee-initiated ownership transfers

What it means

Account#transferred_ownership! from the Account::QueenbeeIntegration concern (SaaS build only) deliberately raises NotImplementedError. The Queenbee integration interface defines this callback for ownership transfers initiated on the Queenbee side, but hosted Fizzy only supports Fizzy-initiated transfers, so the method is a hard guard; saas/test/models/account/queenbee_integration_test.rb asserts that it raises. Hitting it means your code path tried to apply a Queenbee-initiated ownership change to a Fizzy account, which the product forbids.

Source

Thrown at saas/app/models/account/queenbee_integration.rb:45

  def reactivate!
    reactivate
  end

  def canceled?
    cancelled?
  end

  def owner_name
    users.owner.first&.name
  end

  def owner_email
    users.owner.first&.identity&.email_address
  end

  def transferred_ownership!
    raise NotImplementedError, "Fizzy does not support Queenbee-initiated ownership transfers"
  end

  def plan
    "FreeV1"
  end

  def comped?
    false
  end

  def comped=(value)
  end
end

View on GitHub (pinned to 7aabe74580)

Solutions

  1. Do not call transferred_ownership!; the raise is intentional and test-asserted, so skip Queenbee-side transfer events in the dispatcher
  2. Implement ownership transfer inside Fizzy (reassign the owning user), then notify Queenbee through the outbound client API instead of accepting the reverse direction
  3. If you dispatch Queenbee events generically, filter the ownership-transfer event type in one place before method dispatch
  4. If the raise reaches production logs from an existing sync job, treat it as a signal that a new Queenbee event type needs an explicit handler (skip or alert), not a bug to patch by implementing the method silently

Example fix

# before: symmetric Queenbee event dispatch includes the transfer callback
when 'ownership.transferred' then account.transferred_ownership!

# after: transfers are Fizzy-initiated only; acknowledge and skip
when 'ownership.transferred'
  Rails.logger.info('Skipping Queenbee-initiated transfer for account ' + account.queenbee_id.to_s)
Defensive patterns

Strategy: try-catch

Validate before calling

return if event_name == 'ownership.transferred' # Fizzy raises NotImplementedError by design
account.transferred_ownership!

Try / catch

begin
  account.transferred_ownership!
rescue NotImplementedError => e
  Rails.logger.warn(e.message + ' for account ' + account.id.to_s)
end

Prevention

When it happens

Trigger: Calling account.transferred_ownership! on an Account that includes Account::QueenbeeIntegration. Typical call sites: a Queenbee event/webhook handler with a case that maps 'ownership transferred' events onto the integration methods, a generic sync job that invokes the whole interface, or a console/script exercising every callback.

Common situations: Implementing a handler for Queenbee account events (create, cancel, reactivate, transfer) and wiring every callback symmetrically; a Queenbee client gem upgrade that starts delivering a new ownership-transfer event type to existing Fizzy installs; a developer assuming the concern's public methods are all safe to call from the sync side.


AI-assisted analysis of basecamp/fizzy@7aabe74580 (2026-08-21). Data as JSON: /api/errors/05788e129588b198. Report an issue: GitHub.