Skip to main content

2026-10

v8.2.3 (2026-10-14)โ€‹

Catalyst v8.2.3 โ€” Date not provided

๐Ÿ”„ WARNING: Migration Required โ€” Saved page views replace CmIndexPreference; the generated migration creates ct_page_views and drops cm_index_preferences. Update custom filter_with scopes to accept the additional condition argument. Run:

bin/rails generate cm_admin:ct_page_view
bin/rails db:migrate

๐Ÿš€ Featuresโ€‹

  • ๐Ÿ”Ž Advanced filters and saved page views: Added nested filter groups with per-field operators and AND/OR conditions, plus per-user views that save filters, sorting, columns, page size, and view type. Filter parameters are compressed in URLs, with backward-compatible plain-JSON decoding. This replaces CmIndexPreference; custom filter_with scopes must accept an additional condition argument. #1637
  • ๐Ÿ” Improved OTP entry: Replaced the single OTP field with six digit boxes, including paste and SMS autofill support, keyboard navigation, and a resend countdown. Updated sign-in and reset-password screens. #1656

๐Ÿ› Bug Fixesโ€‹

  • ๐Ÿ“Š Pie chart labels: Enabled labels by default and added a formatter showing the name, value, and percentage. #1655 Pie chart label example Pie chart label example
  • ๐Ÿงฐ Select filters: Respect allow_empty_option: false and show the option label in chips when a single choice is available. #1650
  • ๐Ÿงญ Custom actions: Make button and link actions navigate outside Turbo Frames so they load the full page. #1654
  • ๐Ÿ“ Show-page card layout: Prevent long unbreakable content and embedded images from overflowing card-info grids across browsers. #1657

โœจ Improvementsโ€‹

  • ๐Ÿ’ฌ Hatchbox deployment notifications: Restored a compact Slack layout with a status title, one-line message, and action buttons. Added fallback notification text for mobile previews; failure notifications retain their visual emphasis. #1658

โš ๏ธ Breaking Changesโ€‹

  • ๐Ÿ”„ Page-view preferences and custom filter scopes: CtPageView replaces CmIndexPreference, and the migration drops the old preference table. Update custom filter_with scopes for the new condition argument before deploying. Generate and run the migration using the commands in the warning above. #1637

๐Ÿ“š Documentationโ€‹

  • ๐Ÿ“– Updated the HatchboxScripts guide to describe the compact Slack notification format and renamed โ€œView on Hatchboxโ€ button. #1658
  • ๐Ÿงญ Expanded the v8.2.0 upgrade guide with guidance for sidebar query: entries that pass filters, including how to use filter defaults or the current user's default CtPageView. #1637

v8.2.2 (2026-10-13)โ€‹

Catalyst v8.2.2

Date: Not specified

๐Ÿ”„ WARNING: Migration Required โ€” Saved page views replace CmIndexPreference and add the ct_page_views table; the generated migration also drops cm_index_preferences. Custom filter_with scopes must also be updated to accept the additional condition argument.

bin/rails generate cm_admin:ct_page_view
bin/rails db:migrate

๐Ÿš€ Featuresโ€‹

  • ๐Ÿ”Ž Added advanced filters with nested condition groups, field-specific operators, and AND/OR logic. #1637
  • ๐Ÿ’พ Added per-user saved page views for filters, sorting, columns, page size, and view type, with CRUD, duplication, defaults, and automatic saving. #1637
  • ๐Ÿ” Redesigned OTP verification with six individual digit boxes, paste and autofill support, keyboard navigation, and a resend countdown for sign-in and password-reset flows. #1656

๐Ÿ› Bug Fixesโ€‹

  • ๐Ÿ“Š Added visible pie-chart labels with a formatter that displays the name, value, and percentage. #1655

    Pie chart labels example Pie chart labels example

  • ๐Ÿงญ Fixed custom button and link actions so navigation exits Turbo Frames and loads the full page. #1654

  • ๐Ÿท๏ธ Fixed single-select filter chips to show the option label for one-option collections, and made allow_empty_option: false suppress the โ€œ(Empty)โ€ choice. #1650

  • ๐Ÿงฑ Fixed show-page card-info grids overflowing when descriptions contain long unbreakable content. Descriptions now wrap, and embedded images scale to fit their container. #1657

โœจ Improvementsโ€‹

  • ๐Ÿ”— Advanced-filter parameters are compressed in URLs, with backward-compatible decoding of plain JSON parameters. #1637
  • โŒจ๏ธ OTP entry supports SMS one-time-code autofill, paste across digit boxes, and keyboard navigation. #1656

โš ๏ธ Breaking Changesโ€‹

  • โš ๏ธ Custom filter_with scopes must accept an additional condition argument for advanced filtering. The saved page views migration replaces CmIndexPreference and drops the cm_index_preferences table; review any data in that table before migrating. #1637

๐Ÿ“š Documentationโ€‹

  • ๐Ÿ“š Updated the changelog with the v8.2.1 release notes. f33ebeb82

v8.2.1 (2026-10-13)โ€‹

Catalyst v8.2.1

Date: Not specified

๐Ÿš€ Featuresโ€‹

No feature changes in this release.

๐Ÿ› Bug Fixesโ€‹

  • ๐Ÿงฑ Fixed show-page card-info grids overflowing when descriptions contain long, unbreakable content such as URLs or long IDs. Descriptions now wrap, and embedded images scale to fit their container. #1657

โœจ Improvementsโ€‹

No other improvements in this release.

โš ๏ธ Breaking Changesโ€‹

No breaking changes in this release.

๐Ÿ“š Documentationโ€‹

  • ๐Ÿ“š Updated the changelog with the v8.2.0 release notes. 98c9c7937

v8.2.0 (2026-10-13)โ€‹

Catalyst v8.2.0

Date: Not specified

โš ๏ธ WARNING: Breaking Changes โ€” filter_with scopes for :single_select, :multi_select, :date, and :range filters now receive (value, condition). Update these scopes to accept the new arguments; date and range scopes now receive the raw value string instead of separate from and to values. Upgrade guide

๐Ÿ”„ WARNING: Migration Required โ€” Saved Views replace Index Preferences. Generate and run the migration to create ct_page_views; it drops cm_index_preferences without migrating its data. Back up that table first if you need to retain its data.

rails generate cm_admin:ct_page_view
rails db:migrate

๐Ÿš€ Featuresโ€‹

  • ๐Ÿ”Ž Advanced Filters: Build nested condition groups using AND/OR logic and field-specific operators such as is_not, greater_than, and is_empty. Advanced conditions work with supported select, date, and range filters. #1637
  • ๐Ÿ’พ Saved Views: Save and reuse per-user index configurations, including filters, sort order, visible columns, page size, and view type. Views can be duplicated, set as defaults, and shared through links. This replaces Index Preferences. #1637

๐Ÿ› Bug Fixesโ€‹

  • ๐Ÿฅง Pie charts now show labels by default, with each label displaying the slice name, value, and percentage. #1655

    Pie chart with labels Pie chart label details

  • ๐Ÿงญ Custom button and link actions in dropdowns and popups now navigate outside Turbo Frames and load the destination as a full page. #1654

  • ๐Ÿ”Ž Select filters now honor allow_empty_option: false; single-option filter chips also show the option label instead of its raw value. #1650

โœจ Improvementsโ€‹

  • ๐Ÿ”— Filter parameters are now compressed in URLs using zlib and base64url-encoded JSON. Existing nested filter hashes and plain JSON remain supported; use CmAdmin::Utils.decode_filter_params when reading filter parameters in application code. #1637
  • ๐ŸŽ›๏ธ Advanced filters support serialized and restorable filter state, dynamic operator options, and preservation of URL parameters when saved views are applied or cleared. #1637

โš ๏ธ Breaking Changesโ€‹

  • ๐Ÿ› ๏ธ filter_with scope signatures changed: Select, date, and range filter scopes now receive (value, condition = nil). Date and range scopes receive the raw value string (for example, "18 to 30") instead of separate from and to arguments. Update lambda scopes to accept the new signature; strict-arity lambdas can raise ArgumentError otherwise. Search scopes are unchanged. #1637
  • ๐Ÿ—‚๏ธ Index Preferences were removed: CmIndexPreference and cm_index_preferences are replaced by Saved Views and CtPageView. The generated migration drops the old table, and its data is not migrated. #1637

๐Ÿ“š Documentationโ€‹

  • ๐Ÿ“š Added guides for Advanced Filters and Saved Views, expanded custom filter scope documentation, documented the ct_page_view generator, and added a v8.2.0 upgrade guide covering breaking changes, migration steps, and filter URL handling. c58bc0fcd

v8.1.15 (2026-10-13)โ€‹

Catalyst v8.1.15

Date: Not specified

๐Ÿš€ Featuresโ€‹

๐Ÿ› Bug Fixesโ€‹

  • ๐Ÿฅง Pie charts now show labels by default, with a formatter displaying each sliceโ€™s name, value, and percentage. #1655

    Pie chart with labels Pie chart label details

  • ๐Ÿงญ Custom button and link actions in dropdown and popup options now navigate outside Turbo Frames, loading their destinations as full pages. #1654

  • ๐Ÿ”Ž Single- and multi-select filters now respect allow_empty_option: false. Single-option filters also display the selected optionโ€™s label in the chip instead of its raw value. #1650

โœจ Improvementsโ€‹

โš ๏ธ Breaking Changesโ€‹

๐Ÿ“š Documentationโ€‹

  • ๐Ÿ“š Updated the monthly changelog and release metadata with the v8.1.14 release notes. e301a8196

v8.1.14 (2026-10-13)โ€‹

Catalyst v8.1.14

Date: Not specified

๐Ÿš€ Featuresโ€‹

๐Ÿ› Bug Fixesโ€‹

  • ๐Ÿฅง Pie charts now show labels by default, with a formatter displaying each sliceโ€™s name, value, and percentage. #1655

    Pie chart with labels Pie chart label details

  • ๐Ÿงญ Custom button and link actions in dropdown and popup options now navigate outside Turbo Frames, so destinations load as full pages. #1654

โœจ Improvementsโ€‹

โš ๏ธ Breaking Changesโ€‹

๐Ÿ“š Documentationโ€‹

  • ๐Ÿ“š Updated the monthly changelog and release metadata with v8.1.13 release notes. 9929c567a

v8.1.13 (2026-10-13)โ€‹

Catalyst v8.1.13

Date: Not specified

๐Ÿš€ Featuresโ€‹

  • ๐Ÿ”Ž Global search now includes configured sidebar links, including nested links, and uses sidebar labels and icons when presenting matching destinations. Duplicate URLs are removed, and the empty state appears only when there are no record or navigation matches. #1643

    Video explanation

๐Ÿ› Bug Fixesโ€‹

  • ๐Ÿงญ Custom button and link actions in dropdown and popup options now navigate outside Turbo Frames, ensuring navigation loads the full page. #1654

โœจ Improvementsโ€‹

  • ๐Ÿ“Š Dashboard table descriptions now wrap below the title across the available width, while sort and export buttons stay aligned on the heading row. #1647

    Dashboard table layout before the update

    Dashboard table layout after the update

  • ๐Ÿ“ฆ Consolidated dependency updates across the gem, feature app, root npm workspace, and docs site. Updates include Devise 5.0.4, Lexxy-related dependencies, and multiple Ruby and npm packages. #1651

  • โœ๏ธ Updated the Lexxy rich text editor dependency to stable version 1.0.0. #1649

  • ๐ŸŽจ Updated the navigation icons for the Role and CronJob models. #1645

โš ๏ธ Breaking Changesโ€‹

๐Ÿ“š Documentationโ€‹

v8.1.12 (2026-10-09)โ€‹

Catalyst v8.1.12 โ€” Date not provided

๐Ÿš€ Featuresโ€‹

  • ๐Ÿ”Ž Global search now includes configured sidebar links, including nested links. Sidebar labels and model names remain searchable, and matching suggestions use configured labels and icons without duplicate URLs. #1643

    Watch the video explanation

๐Ÿ› Bug Fixesโ€‹

No bug fixes in this release.

โœจ Improvementsโ€‹

  • ๐Ÿ“ฆ Consolidated 16 dependency updates across the gem, feature app, docs site, and root npm workspace. This includes Devise 4.9.4 โ†’ 5.0.4, a major-version upgrade, along with Ruby and JavaScript dependency updates. #1651

โš ๏ธ Breaking Changesโ€‹

No breaking changes in this release.

๐Ÿ“š Documentationโ€‹

  • ๐Ÿ“š Clarified when @policy_model is reset during sidebar link search. Commit 49cb47bb6
  • ๐Ÿ“š Updated the docs-site changelog for v8.1.11. Commit a19d122ba

v8.1.11 (2026-10-09)โ€‹

Catalyst v8.1.11 โ€” Date not provided

๐Ÿš€ Featuresโ€‹

No new features in this release.

๐Ÿ› Bug Fixesโ€‹

  • ๐Ÿ› Updated the dashboard table widget layout so descriptions wrap beneath the heading at full width, while the sort and export buttons remain aligned beside the title. This prevents long descriptions from being clipped or crowding the action buttons. #1647

    Before Dashboard table header before the layout change

    After Dashboard table header after the layout change

โœจ Improvementsโ€‹

  • โœจ Updated the Lexxy rich text editor dependency to stable version 1.0.0, moving Catalyst from the 0.x beta series. Existing Action Text integration remains compatible. #1649
  • โœจ Updated the sidebar icons for the CmRole and CmCronJob models to standardize navigation across Catalyst applications. #1645

โš ๏ธ Breaking Changesโ€‹

No breaking changes in this release.

๐Ÿ“š Documentationโ€‹

No documentation changes in this release.

v8.1.10 (2026-10-09)โ€‹

Catalyst v8.1.10

Date: Not provided

๐Ÿš€ Featuresโ€‹

No new features in this release.

๐Ÿ› Bug Fixesโ€‹

No user-facing bug fixes in this release.

โœจ Improvementsโ€‹

  • ๐ŸŽจ Navigation icons โ€” Updated the CmRole and CmCronJob icons so they are defined consistently in the modelsโ€™ admin configuration. #1645
  • ๐Ÿ”ข MCP decimal serialization โ€” Normalize BigDecimal values to floats for JSON compatibility, including values returned through the serializable_hash fallback; improve decimal handling during serialization. #1641 #1642
  • ๐Ÿงพ MCP field schemas and values โ€” Improve enum schema handling, include nil for nullable enum values, and add explicit string casting and type conversion for field values. #1640 #1644
  • ๐ŸŽซ Support-ticket validation and migration templates โ€” Scope platform_ticket_id uniqueness validation to the Catalyst installation and generate foreign-key columns as bigint. The template change affects newly generated migrations; no database migration is required for existing installations. #1639
  • โš™๏ธ Release tooling โ€” Prevent SIGPIPE failures during release context collection and let the notes generator process larger inputs and outputs. #1638

โš ๏ธ Breaking Changesโ€‹

No breaking changes in this release.

๐Ÿ“š Documentationโ€‹

  • ๐Ÿ“– Changelog โ€” Updated the documentation changelog with the v8.1.9 release notes, covering that releaseโ€™s improvements and documentation updates. 05f3e912b

v8.1.9 (2026-10-08)โ€‹

Catalyst v8.1.9

Date: Not provided

๐Ÿš€ Featuresโ€‹

No new features in this release.

๐Ÿ› Bug Fixesโ€‹

No user-facing bug fixes in this release.

โœจ Improvementsโ€‹

  • ๐Ÿงฎ MCP decimal serialization โ€” Normalize BigDecimal field values to floats for JSON compatibility, including values returned through the serializable_hash fallback. #1641 #1642
  • ๐Ÿงพ MCP field schemas and serialization โ€” Improve enum handling, include nil for nullable enum values, and add explicit string casting and type conversion for field values. #1640 #1644
  • ๐ŸŽซ Support-ticket validation and migration templates โ€” Scope platform_ticket_id uniqueness validation to the Catalyst installation and generate foreign-key columns as bigint. The template change applies to newly generated migrations; no database migration is required for existing installations. #1639
  • โš™๏ธ Release tooling โ€” Prevent SIGPIPE failures when collecting release context and allow the notes generator to process larger inputs and outputs. #1638

โš ๏ธ Breaking Changesโ€‹

No breaking changes in this release.

๐Ÿ“š Documentationโ€‹

  • ๐Ÿ“– Changelog โ€” Added the v8.1.8 release notes to the documentation changelog, summarizing that releaseโ€™s features, fixes, improvements, and documentation updates. af79b70ee

v8.1.8 (2026-10-08)โ€‹

Catalyst v8.1.8

Date: Not provided

๐Ÿš€ Featuresโ€‹

No new features in this release.

๐Ÿ› Bug Fixesโ€‹

No user-facing bug fixes in this release.

โœจ Improvementsโ€‹

  • ๐Ÿงฎ MCP decimal serialization โ€” Normalize BigDecimal field values to floats for JSON compatibility, including values returned through the serializable_hash fallback. #1642 #1641
  • ๐Ÿงพ MCP field schemas โ€” Improve enum handling and provide consistent nullable type information across field schemas. #1640
  • ๐ŸŽซ Support-ticket validation and migration templates โ€” Scope platform_ticket_id uniqueness validation to the Catalyst installation and generate foreign-key columns as bigint. This affects newly generated migrations; no database migration is required for existing installations. #1639
  • โš™๏ธ Release tooling โ€” Make release-context collection more robust and allow the notes generator to process larger inputs and outputs. #1638

โš ๏ธ Breaking Changesโ€‹

No breaking changes in this release.

๐Ÿ“š Documentationโ€‹

  • ๐Ÿ“– Changelog โ€” Added the v8.1.7 release notes to the documentation changelog, summarizing that releaseโ€™s features, fixes, improvements, and documentation updates. 1317b17d3

v8.1.7 (2026-10-08)โ€‹

Catalyst v8.1.7

Date: Not provided

๐Ÿš€ Featuresโ€‹

No new features in this release.

๐Ÿ› Bug Fixesโ€‹

  • ๐Ÿ› ๏ธ Release workflow context collection โ€” Prevented SIGPIPE failures during release-context collection and avoided command-line size limits by passing context files as paths. #1638

โœจ Improvementsโ€‹

  • ๐Ÿงฉ MCP field serialization โ€” Normalized BigDecimal field values to floats for JSON compatibility, including values returned through the serializable_hash fallback. #1641
  • ๐Ÿงพ MCP field schemas โ€” Improved enum handling and made nullable type information consistent across field schemas. #1640
  • ๐ŸŽซ Support-ticket validation and migration templates โ€” Scoped platform_ticket_id uniqueness validation to the Catalyst installation and changed generated foreign-key columns from integer to bigint. This template change affects newly generated migrations; no database migration is required for existing installations. #1639
  • โš™๏ธ Release-notes tooling โ€” Increased the input and output budgets and updated context handling so the generator can process larger release inputs. #1638

โš ๏ธ Breaking Changesโ€‹

No breaking changes in this release.

๐Ÿ“š Documentationโ€‹

  • ๐Ÿ“– Changelog โ€” Added the v8.1.6 release notes to the documentation changelog, including summaries of that releaseโ€™s features, fixes, improvements, and documentation updates. 1317b17d3

v8.1.6 (2026-10-08)โ€‹

Catalyst v8.1.6

Date: Not provided

๐Ÿš€ Featuresโ€‹

No new features in this release.

๐Ÿ› Bug Fixesโ€‹

  • ๐Ÿ› ๏ธ Release workflow context collection โ€” Fixed SIGPIPE failures when collecting release context and avoided command-line size limits by passing context files as paths. #1638

โœจ Improvementsโ€‹

  • ๐Ÿงฉ MCP field schemas โ€” Improved enum handling by mapping explicit enum fields to strings and using enum values in the schema. Field schemas now consistently support nullable types. #1640
  • ๐ŸŽซ Support-ticket validation and migration templates โ€” Scoped platform_ticket_id uniqueness validation to the Catalyst installation, refined type checking and code consistency, and changed generated foreign key columns from integer to bigint. The template change applies to newly generated migrations; no database migration is required for this release. #1639
  • โš™๏ธ Release-notes generation โ€” Increased the generatorโ€™s input and output budgets and updated how release context is passed, allowing it to handle larger release inputs. #1638

โš ๏ธ Breaking Changesโ€‹

No breaking changes in this release.

๐Ÿ“š Documentationโ€‹

  • ๐Ÿ“– Changelog โ€” Added v8.1.5 release notes to the documentation changelog, covering its features, bug fixes, improvements, and webhook setup details. be3427d6d

v8.1.5 (2026-10-08)โ€‹

Catalyst v8.1.5

Date: Not provided

๐Ÿ› Bug Fixesโ€‹

  • ๐Ÿ› ๏ธ Release workflow context collection โ€” Fixed SIGPIPE failures during release context collection and avoided command-line size limits by passing context files as paths. The workflow can now handle larger documentation diffs. #1638

โœจ Improvementsโ€‹

  • ๐ŸŽซ Support-ticket validation and migration templates โ€” Scoped platform_ticket_id uniqueness validation to the Catalyst installation, improved type checking and code consistency, and changed foreign key columns in the migration template from integer to bigint. The template change applies to migrations generated in the future; no database migration is required for this release. #1639
  • โš™๏ธ Release-notes generation โ€” Increased the release-notes input and output budgets and updated how release context is passed to the generator, allowing it to process larger release inputs. #1638

๐Ÿ“š Documentationโ€‹

  • ๐Ÿ“– Changelog โ€” Added the v8.1.4 release notes to the documentation changelog, including feature, bug-fix, improvement, and webhook setup details. baad7e483

โš ๏ธ Breaking Changesโ€‹

  • โœ… No breaking changes are noted for this release.

v8.1.4 (2026-10-08)โ€‹

Catalyst v8.1.4

Released: October 17, 2026

๐Ÿš€ Featuresโ€‹

  • ๐Ÿช Webhook event logging and Postmark delivery tracking โ€” Added a webhook logging system with asynchronous processing, an admin UI for inspecting events, and Postmark delivery tracking with recipient-level statuses. Webhook payloads are stored through ActiveStorage, and events can be associated with records for debugging and auditing. #1507

    Email log delivery tracking Email log recipient statuses Social beat email log Email log attachment Email log attachment

  • ๐Ÿ“ Page descriptions in the index navbar โ€” Index pages can now display a page description in the top navbar, with styling for secondary text and links. #1632

    Index page description in the navbar

๐Ÿ› Bug Fixesโ€‹

  • ๐Ÿ› ๏ธ Release workflow SIGPIPE failures โ€” Fixed release context collection failing when git log output was piped through head. The workflow now passes context using file paths, avoiding command-line size limits and allowing larger docs diffs. #1638

โœจ Improvementsโ€‹

  • ๐Ÿ” OTP generation and verification โ€” Consolidated OTP creation and verification into OtpRequest.generate! and OtpRequest.verify?, centralized the expiry duration, and removed the requirement to pass a user object through email delivery. #1626
  • โš™๏ธ Devise OTP initialization โ€” Register Devise modules through config.to_prepare, add an autoload for CmAdminAuthenticatable, and avoid OTP checks when a custom authentication method is configured. #1633
  • โœ‰๏ธ Email log display titles โ€” Email log pages now use a display title in the [id] subject format. #1630
  • ๐Ÿช Webhook processing and event records โ€” Webhook handling now uses a generic router and service-based processing, with payload attachments, UUIDs, and event associations. #1507

๐Ÿ“š Documentationโ€‹

  • ๐Ÿ“– Webhook setup and generator guides โ€” Added a webhook logging guide covering configuration, controller overrides, routing, processing, and the admin UI. Updated the generator reference with cm_admin:add_webhook_events, its migration details, and the ActiveStorage setup requirement. #1636
  • ๐Ÿงพ Release documentation โ€” Updated the release changelog documentation with the current default notes-generation model. #1638

โš ๏ธ Breaking Changesโ€‹

  • โœ… No breaking changes are noted for this release.

Optional webhook setup: To enable webhook event logging, generate the table and run the migration. Webhook payload storage also requires ActiveStorage to be installed and configured.

rails generate cm_admin:add_webhook_events
rails db:migrate
rails active_storage:install

v8.0.16 (2026-10-05)โ€‹

v8.0.16

Released: October 17, 2026


โœจ Improvementsโ€‹

  • โ™ป๏ธ OTP generation and verification logic consolidated โ€” The OTP flow has been refactored into a single, self-contained path on OtpRequest, removing the previous dependency on a user object. This makes OTP handling easier to reason about and reuse across email- and non-email-based delivery. โ€” #1626

    • ๐Ÿงฎ New OTP_EXPIRY_IN_MINUTES constant โ€” Extracted the expiry window into a single constant, now used by both the timed_out and active scopes so expiry logic can't drift between them.
    • ๐Ÿ—๏ธ New OtpRequest.generate! class method โ€” Handles OTP creation end-to-end, including automatic cleanup of expired and active requests before generating a new one.
    • โœ… New OtpRequest.verify? class method โ€” Validates a submitted OTP and updates the relevant statuses in one call.
    • ๐Ÿ“จ deliver_otp simplified โ€” Now always calls send_otp instead of branching on whether a user or a raw email was supplied.
    • โœ‰๏ธ deliver_via_email signature updated โ€” Accepts the email address directly as a parameter rather than resolving it from a user.

    โ„น๏ธ These are internal API changes. If your application overrides or calls deliver_otp / deliver_via_email directly, update the call sites to pass the email explicitly.

๐Ÿ“š Documentationโ€‹

  • ๐Ÿ“ Changelog updated for v8.0.15 โ€” Added the v8.0.15 entry to docs-site/docs/Changelog/2026-10.md, covering the lazy-loaded dashboard widgets, the nested-forms view-toggle fix, and the env-driven Hatchbox deploy scripts (including the deployment_alerts breaking change and the deploy_config:sync migration steps). โ€” dc6bad29f
  • ๐Ÿ—‚๏ธ Release metadata refreshed โ€” docs-site/static/releases.json updated so the new changelog entry is picked up by the docs site. โ€” dc6bad29f

v8.0.15 (2026-10-01)โ€‹

v8.0.15

Released: October 16, 2026


โš ๏ธ WARNING: Breaking Changes

The deployment_alerts cm-admin config accessor has been removed. Hatchbox deployment notifications are now controlled by the DEPLOYMENT_ALERTS environment variable. Any initializer that sets config.deployment_alerts will raise NoMethodError and must be updated.

๐Ÿ”„ WARNING: Migration Required

The .hatchbox deploy scripts are now fully environment-driven, so the deploy-config/ directory checksum has changed. Sync the updated config and set the new environment variables before your next deploy.

bash bundle update cm-admin rake cm_admin:deploy_config:sync

Then commit the updated deploy-config/ folder before deploying โ€” Hatchbox picks it up from git, not from a boot-time copy. Also set APP_NAME and APP_URL (and optionally DEPLOYMENT_ALERTS=false) in your Hatchbox environment variables.


๐Ÿš€ Featuresโ€‹

  • โšก Lazy-loaded dashboard widgets via Turbo Frames โ€” Dashboard pages now render instantly with skeleton placeholders, and each widget (chart, metric card, table) fetches its content asynchronously from a dedicated endpoint (GET /:dashboard_name/widget/:widget_index). Adds a cm_dashboard_widget controller action, collect_dashboard_widgets / collect_section_widgets / widget_name view helpers, a new _dashboard_widget partial, and a .cm-dashboard-skeleton pulse animation. Section widgets on show pages remain backward compatible. โ€” #1579

    Dashboard widgets loading with skeleton placeholders

๐Ÿ› Bug Fixesโ€‹

  • ๐Ÿฉน Nested forms now initialize and toggle the configured view correctly โ€” The active state is kept in sync between the nested table and grid view controls, and nested forms initialize in grid mode when default_view_type is configured as :grid. Previously the selected grid icon did not match the rendered table layout, and switching views left the previous control active. Fixed by adding the selector attribute expected by the Stimulus view-toggle handler to both controls and applying the grid-table class during server-side rendering when grid is the configured default. โ€” #1623
  • ๐Ÿฉน Misconfigured environments no longer send broken deploy notifications โ€” Previously a missing app name or URL produced a Slack notification with a blank app name and broken buttons. The scripts now detect blank required values (APP_NAME, APP_URL, SLACK_WEBHOOK_URL) as soon as the config loads and post a single, explicit "config not available" notice naming the Hatchbox app, environment, and server, then exit cleanly. โ€” #1608

โœจ Improvementsโ€‹

  • ๐Ÿ”ง Hatchbox deploy scripts are now fully env-driven โ€” app_name, app_url, env_name, slack_webhook, deployment_alerts?, and the new server_name are read from environment variables instead of CmAdmin.config, Rails.env, or app credentials. This decouples the copied .hatchbox scripts from gem internals and removes their dependency on values like the be_url credential and project_name. โ€” #1608
  • ๐Ÿš Deploy hooks run under plain ruby โ€” Hook scripts no longer boot Rails, and they source ~/.asdf-vars when present so HATCHBOX_SERVER_NAME / HATCHBOX_SERVER_ID are available per Hatchbox docs. โ€” #1608
  • โฑ๏ธ HTTP timeouts on the Slack POST โ€” Open/read timeouts were added so a hung webhook can no longer stall a deploy step. โ€” #1608
  • ๐Ÿ’ฌ Clearer config-unavailable notification โ€” The notice now includes environment and server lines plus an Environment Variables button that deep-links to the app's Hatchbox env-vars page (https://hatchbox.io/apps/<APP_ID>/env_vars). โ€” #1608
  • ๐Ÿชต Simplified notification script error handling and logging โ€” Reduced branching and clearer log output in hatchbox_notification.rb. โ€” #1608
  • ๐Ÿงน Removed duplicate deployment config directory โ€” Cleaned up a redundant deploy-config/ copy in the gem source. โ€” #1608
  • ๐Ÿ”„ Project workflow rules and lockfile platform entries synced โ€” Refreshed the project's AI workflow rules and yarn.lock platform-specific optional package entries. โ€” #1623

โš ๏ธ Breaking Changesโ€‹

  • ๐Ÿ’ฅ CmAdmin.config.deployment_alerts removed โ€” The toggle is now the DEPLOYMENT_ALERTS environment variable. Remove the accessor from your initializer:

    ruby

    config/initializers/cm_admin.rb โ€” DELETE THIS

    CmAdmin.configure do |config| config.deployment_alerts = false end

    and instead set it in your Hatchbox environment variables:

    DEPLOYMENT_ALERTS=false

    โ€” #1608

๐Ÿ“š Documentationโ€‹

  • ๐Ÿ“˜ 4. Deployment/HatchboxScripts.md rewritten โ€” Documents the new environment-variable table (APP_NAME, APP_URL, SLACK_WEBHOOK_URL, HATCHBOX_APP_ID + LOG_ID, HATCHBOX_SERVER_NAME, RAILS_ENV, DEPLOYMENT_ALERTS), the env-driven lib/config.rb, the Config Not Available flow, the updated ruby-based file layout, and how to skip notifications via DEPLOYMENT_ALERTS=false. โ€” #1608
  • ๐Ÿ“˜ 3. Features/CmAdminConfiguration.md updated โ€” Removed the deployment_alerts config row and its section, replacing it with a pointer to the DEPLOYMENT_ALERTS environment variable. โ€” #1608
  • ๐Ÿ“ Changelog and release metadata โ€” Added the 2026-10 changelog entry, updated the changelog index, and refreshed static/releases.json. โ€” fad7db117

v8.0.14 (2026-10-01)โ€‹

v8.0.14

Released: October 9, 2026


โš ๏ธ WARNING: Breaking Changes

The deployment_alerts cm-admin config accessor has been removed. Hatchbox deployment notifications are now controlled by the DEPLOYMENT_ALERTS environment variable. Any initializer that sets config.deployment_alerts will raise NoMethodError and must be updated.

๐Ÿ”„ WARNING: Migration Required

The .hatchbox deploy scripts are now fully environment-driven, so the deploy-config/ directory checksum has changed. Sync the updated config and set the new environment variables before your next deploy.

bash bundle update cm-admin rake cm_admin:deploy_config:sync

Then commit the updated deploy-config/ folder before deploying โ€” Hatchbox picks it up from git, not from a boot-time copy. Also set APP_NAME and APP_URL (and optionally DEPLOYMENT_ALERTS=false) in your Hatchbox environment variables.


๐Ÿš€ Featuresโ€‹

  • โšก Lazy-loaded dashboard widgets via Turbo Frames โ€” Dashboard pages now render instantly with skeleton placeholders, and each widget (chart, metric card, table) fetches its content asynchronously from a dedicated endpoint (GET /:dashboard_name/widget/:widget_index). Adds a cm_dashboard_widget controller action, collect_dashboard_widgets / collect_section_widgets / widget_name view helpers, a new _dashboard_widget partial, and a .cm-dashboard-skeleton pulse animation. Section widgets on show pages remain backward compatible. โ€” #1579

    Dashboard widgets loading with skeleton placeholders

๐Ÿ› Bug Fixesโ€‹

  • ๐Ÿฉน Misconfigured environments no longer send broken deploy notifications โ€” Previously a missing app name or URL produced a Slack notification with a blank app name and broken buttons. The scripts now detect blank required values (APP_NAME, APP_URL, SLACK_WEBHOOK_URL) as soon as the config loads and post a single, explicit "config not available" notice naming the Hatchbox app, environment, and server, then exit cleanly. โ€” #1608

โœจ Improvementsโ€‹

  • ๐Ÿ”ง Hatchbox deploy scripts are now fully env-driven โ€” app_name, app_url, env_name, slack_webhook, deployment_alerts?, and the new server_name are read from environment variables instead of CmAdmin.config, Rails.env, or app credentials. This decouples the copied .hatchbox scripts from gem internals and removes their dependency on values like the be_url credential and project_name. โ€” #1608
  • ๐Ÿš Deploy hooks run under plain ruby โ€” Hook scripts no longer boot Rails, and they source ~/.asdf-vars when present so HATCHBOX_SERVER_NAME / HATCHBOX_SERVER_ID are available per Hatchbox docs. โ€” #1608
  • โฑ๏ธ HTTP timeouts on the Slack POST โ€” Open/read timeouts were added so a hung webhook can no longer stall a deploy step. โ€” #1608
  • ๐Ÿ’ฌ Clearer config-unavailable notification โ€” The notice now includes environment and server lines plus an Environment Variables button that deep-links to the app's Hatchbox env-vars page (https://hatchbox.io/apps/<APP_ID>/env_vars). โ€” #1608
  • ๐Ÿชต Simplified notification script error handling and logging โ€” Reduced branching and clearer log output in hatchbox_notification.rb. โ€” #1608
  • ๐Ÿงน Removed duplicate deployment config directory โ€” Cleaned up a redundant deploy-config/ copy in the gem source. โ€” #1608

โš ๏ธ Breaking Changesโ€‹

  • ๐Ÿ’ฅ CmAdmin.config.deployment_alerts removed โ€” The toggle is now the DEPLOYMENT_ALERTS environment variable. Remove the accessor from your initializer:

    ruby

    config/initializers/cm_admin.rb โ€” DELETE THIS

    CmAdmin.configure do |config| config.deployment_alerts = false end

    and instead set it in your Hatchbox environment variables:

    DEPLOYMENT_ALERTS=false

    โ€” #1608

๐Ÿ“š Documentationโ€‹

  • ๐Ÿ“˜ 4. Deployment/HatchboxScripts.md rewritten โ€” Documents the new environment-variable table (APP_NAME, APP_URL, SLACK_WEBHOOK_URL, HATCHBOX_APP_ID + LOG_ID, HATCHBOX_SERVER_NAME, RAILS_ENV, DEPLOYMENT_ALERTS), the env-driven lib/config.rb, the Config Not Available flow, the updated ruby-based file layout, and how to skip notifications via DEPLOYMENT_ALERTS=false. โ€” #1608
  • ๐Ÿ“˜ 3. Features/CmAdminConfiguration.md updated โ€” Removed the deployment_alerts config row and its section, replacing it with a pointer to the DEPLOYMENT_ALERTS environment variable. โ€” #1608
  • ๐Ÿ“ Changelog and release metadata โ€” Added the 2026-10 changelog entry, updated the changelog index, and refreshed static/releases.json. โ€” d5b1f948d

Release Notes โ€” October 2026

v8.0.13 (2026-10-01)โ€‹

  • Merge pull request #1579 from commutatus/CT-318 (defb59ec5)

  • Merge pull request #1622 from commutatus/fix/new-slack-changelog-structure (b257557c3)

  • feat(changelog): restructure Slack release notification format (cec992ffb)

  • Merge pull request #1620 from commutatus/fix/changelog-token-limit (8a21b3ff7)

  • docs: update changelog for v8.0.12 (02a809040)

  • fix(changelog): raise release notes output budget and bound prompt input (e8c479314)

  • refactor(dashboard): identify lazy widgets by generated id (97b8a53c1)

  • Merge branch 'main' of github.com:commutatus/cm-admin into CT-318 (5d3c0595b)

  • refactor(dashboard): address PR #1579 review feedback (18964c6f5)

  • feat(dashboard): add lazy loading for dashboard widgets via Turbo Frames (0afc287a0)