Ensure sibling controller readiness?

You have to ensure the receiving controller is connected and setTimeout is a perfectly valid way to do that. Another solution is to wait on an empty promise:

connect: ->
  Promise.resolve().then =>
     @outlet.dispatchEvent(new CustomEvent('updatePreview', detail: { preview: "<strong>Hiya</strong>" }))