Skip to content

v0.3.2

Latest

Choose a tag to compare

@rameerez rameerez released this 17 Sep 00:07
· 3 commits to main since this release

Three correctness fixes and one new seam, from an integration review against a real host.

Fixed

  • A busy stack can no longer evict other people from the inbox. The grouped-inbox window is now taken per counterpart, so one desk with many recent conversations cannot consume another counterpart's row. At most twice the row limit is materialized.
  • Lifecycle events fire after commit, and stay silent on rollback. conversation_created and participant_left previously ran inside the transaction, so a subscriber could act on a conversation that never existed.
  • An author no longer has to be a messager. Signing a desk's reply is about who wrote it, not about holding a seat, so staff need not be given acts_as_messager just to sign. The author must be persisted; the host decides who may sign for a shared identity, and the HTTP controller never accepts an author from request parameters.

Added

  • Chats::SendRateLimited — the send-rate budget as a controller concern, so a product built on chats (its own composer, its own controller) shares one configured budget with the chat composer instead of inventing a second one.

    config.send_rate_limit = { to: 60, within: 1.minute }  # shared; nil disables

Upgrading

Nothing to do. If you were relying on an author having to be a messager, note that constraint is gone by design.

Verified

Tests 324 runs, 1350 assertions, 0 failures
Databases SQLite, PostgreSQL
Rails 7.1, 7.2, 8.1

What's Changed

  • Fix product integrity on chats 0.3.1; prepare 0.3.2 by @rameerez in #5

Full Changelog: v0.3.1...v0.3.2