Skip to main content

2026-09

v8.0.10 (2026-09-24)โ€‹

Catalyst v8.0.10

Release date: 2026-10-01
Gem: cm_admin v8.0.10
Compare: v8.0.9...v8.0.10

โœ… No breaking changes. No migrations required. This release is a safe drop-in upgrade โ€” no rake tasks, no database migrations, and no API changes to run. The bulk of the work hardens the release-automation pipeline so generated changelogs reliably reach main.


๐Ÿš€ Featuresโ€‹

  • ๐Ÿค– AI-powered changelog generation and Slack notifications for releases โ€” every gem release now automatically assembles release notes from CHANGELOG.md, the git log, merged PR bodies, and the docs diff via the OpenRouter API, publishes them to a monthly Docusaurus changelog page, and posts a rich Block Kit summary to Slack. No manual changelog writing required. #1580
  • ๐Ÿ”— PR links and embedded media in generated release notes โ€” each generated change entry now links back to its source PR, and GitHub attachment URLs found in PR bodies are preserved and embedded as inline images rather than being dropped. #1580
  • ๐Ÿ“Š Release registry with breaking-change and migration tracking โ€” a new releases.json registry records the version, date, and whether a release carries breaking changes or migrations, so downstream tooling can surface upgrade warnings programmatically. #1580
  • ๐ŸŒ releases.json served as a static file via Docusaurus โ€” the registry ships with the docs site and is available at a stable public URL. #1580
  • โš ๏ธ Warning badges and migration commands in generated release notes โ€” release notes now open with a prominent Breaking Changes / Migration Required badge and include the exact rake or migration commands to run when one applies. #1580

๐Ÿ› Bug Fixesโ€‹

  • ๐Ÿ” Changelog commits no longer silently dropped on non-fast-forward push rejections โ€” the docs push step now rebases on origin/main and retries up to 5 times with a 5s backoff. Previously a single git push origin main died whenever main advanced between checkout and push, so the September 2026 page and releases.json never landed on main. #1615
  • โ™ป๏ธ Docs-page updates are now idempotent โ€” job re-runs no longer duplicate a version's release section, and legacy ./<month> index links are migrated in place so re-runs can't insert duplicate entries. #1615
  • ๐Ÿ”— Changelog index links corrected to ./Changelog/<month> โ€” the previous relative links (./2026-09) resolved to /docs/2026-09, a missing page, because the index is served at /docs/Changelog without a trailing slash. #1615
  • ๐Ÿท๏ธ Release registry versions stored without the leading v โ€” versions are now stored in a numerically comparable format, and dedup handles both v8.0.9 and 8.0.9 so re-runs can't create duplicate entries. #1615
  • ๐ŸŒ docs_url now points at the live domain โ€” registry and Slack links now use docs.cm-admin.commutatus.com; the previously used cm-admin-docs.commutatus.com has no DNS records and would 404 for users. #1615

โœจ Improvementsโ€‹

  • ๐Ÿ“ฆ Pipeline-generated v8.0.9 artifacts added โ€” the September 2026 release-notes page and its releases.json registry entry are now committed, backfilling the release that the broken push step had dropped. #1615
  • ๐Ÿชถ Release registry simplified to track only version, date, breaking-change/migration flags, and docs URL, dropping redundant metadata. #1580
  • ๐Ÿงฉ response_format extracted into a dedicated method in the release-notes generator for readability. #1580
  • ๐Ÿ“ JSON schema moved into OpenRouter's response_format and the prompt template relocated to .github/prompts/prompt_template.txt. #1580
  • ๐Ÿ“ max_tokens increased to 4000 to prevent JSON truncation โ€” the model response was occasionally cut off mid-JSON, which caused changelog generation to silently fall back to raw git-log output. #1580
  • ๐Ÿ“ฆ Inline workflow scripts extracted out of YAML into .github/scripts and then relocated to .github/lib, making the workflows far easier to read and maintain. #1580
  • ๐Ÿงช Release creation and push skipped during test runs; escape_md cleaned up โ€” dry runs no longer create tags or push commits to main. #1580
  • ๐Ÿ”ง workflow_dispatch and pr_number test inputs removed from the changelog workflow now that the pipeline is stable. #1580
  • ๐Ÿ—‘๏ธ Obsolete notify_slack_release.sh script removed โ€” superseded by notify_slack_release.rb. #1580

โš ๏ธ Breaking Changesโ€‹

None in this release. โœ…

๐Ÿ“š Documentationโ€‹

  • ๐Ÿ“˜ ReleaseChangelog.md examples updated to match the new registry format and live domain โ€” the sample releases.json entry now shows "version": "7.2.26" (no leading v) and "docs_url": "https://docs.cm-admin.commutatus.com/docs/Changelog/2026-09", so anyone following the docs copies a working configuration. #1615
  • ๐Ÿ“‘ Changelog index link corrected in docs-site/docs/Changelog/index.md โ€” the September 2026 entry now points at ./Changelog/2026-09, matching the served URL structure. #1615
  • ๐Ÿ—“๏ธ September 2026 release-notes page published (docs-site/docs/Changelog/2026-09.md) โ€” documents the v8.0.9 release, including its feature, bug-fix, and improvement sections. #1615
  • ๐Ÿš€ "Releasing the Gem" (docs-site/docs/4. Deployment/ReleaseGem.md) โ€” covers the stable release-cm-gem.yml workflow (trigger, bump_type input, build/release/changelog job graph, required secrets and variables) and the beta release-beta-gem.yml workflow, including how beta version numbers are derived from existing v<base>.beta* tags. Also notes that beta releases are pre-releases and do not trigger the changelog workflow. #1580
  • ๐Ÿค– "Release Changelog & Notifications" (docs-site/docs/4. Deployment/ReleaseChangelog.md) โ€” documents the reusable changelog-release.yml workflow and each of its components: collect_context.sh, generate_release_notes.rb (including the JSON response shape and fallback behaviour when OpenRouter is unavailable), update_docs_page.sh, update_release_registry.rb, and notify_slack_release.rb. Also documents the prompt template location and how to tune generated note structure and tone. #1580
  • ๐Ÿ“‘ Changelog section index (docs-site/docs/Changelog/index.md) โ€” a landing page for the Changelog docs section listing recent months, with each monthly page (<YYYY-MM>.md) holding that month's AI-generated release notes. #1580

Release Notes โ€” September 2026

v8.0.9 (2026-09-24)โ€‹

Catalyst v8.0.9

Release date: September 24, 2026
Gem: cm_admin v8.0.9
Compare: v8.0.8...v8.0.9

โœ… No breaking changes. No migrations required. This release is a safe drop-in upgrade โ€” no rake tasks, no database migrations, and no API changes to run. The bulk of the work is release-automation tooling plus two UI fixes.


๐Ÿš€ Featuresโ€‹

  • ๐Ÿค– AI-powered changelog generation and Slack notifications for releases โ€” every gem release now automatically assembles release notes from CHANGELOG.md, the git log, merged PR bodies, and the docs diff via the OpenRouter API, publishes them to a monthly Docusaurus changelog page, and posts a rich Block Kit summary to Slack. No manual changelog writing required. #1580
  • ๐Ÿ”— PR links and embedded media in generated release notes โ€” each generated change entry now links back to its source PR, and GitHub attachment URLs found in PR bodies are preserved and embedded as inline images rather than being dropped. #1580
  • ๐Ÿ“Š Release registry with breaking-change and migration tracking โ€” a new releases.json registry records the version, date, and whether a release carries breaking changes or migrations, so downstream tooling can surface upgrade warnings programmatically. #1580
  • ๐ŸŒ releases.json served as a static file via Docusaurus โ€” the registry ships with the docs site and is available at a stable public URL. #1580
  • โš ๏ธ Warning badges and migration commands in generated release notes โ€” release notes now open with a prominent Breaking Changes / Migration Required badge and include the exact rake or migration commands to run when one applies. #1580

๐Ÿ› Bug Fixesโ€‹

  • ๐Ÿ”’ Custom form modal errors now render in shared alert banner markup, safely โ€” custom_form_submit_controller.js renders submit errors using the standard alert-banner structure instead of ad-hoc d-flex markup, so modal errors match the alert styling used elsewhere in cm-admin (_alert_banner.html.slim, _default_import_notes.html.slim). The server-provided message is now assigned via textContent rather than interpolated into innerHTML, closing an XSS vector whenever a server error message reflects user input. errorContainer is also null-guarded on both the submit and error paths, removing a latent TypeError when the container is absent. New spacing styles for ul, p, and li inside .alert-banner-text keep list-based alert content readable. #1614
  • ๐Ÿท๏ธ Catalyst branding in release notes and Slack notifications โ€” generated notes and Slack messages no longer leak internal project naming. #1580
  • ๐Ÿ“ max_tokens increased to 4000 to prevent JSON truncation โ€” the model response was occasionally cut off mid-JSON, which caused changelog generation to silently fall back to raw git-log output. #1580
  • ๐Ÿงช Release creation and push skipped during test runs; escape_md cleaned up โ€” dry runs no longer create tags or push commits to main. #1580
  • ๐Ÿงน Code review findings on the release automation addressed โ€” follow-up fixes from review of the changelog pipeline. #1580

โœจ Improvementsโ€‹

  • ๐ŸŽจ Export modal secondary button styling moved to SCSS @extend โ€” the modal footer now carries a [type="button"], .btn-secondary rule extending .btn, .btn-outline-dark, .btn-sm, .btn-icon-spacing, mirroring the existing primary-action rule. This fixes the export modal's Close button rendering as Bootstrap's solid btn-secondary instead of the cm-admin design-system outline style, which happened because the export modal renders outside the .cm-admin wrapper and never picked up .cm-admin .btn-secondary. The export modal's class list was simplified from btn btn-secondary to btn-secondary. #1613
  • ๐Ÿงฉ response_format extracted into a dedicated method in the release-notes generator for readability. #1580
  • ๐Ÿชถ Release registry simplified to track only version, date, breaking-change/migration flags, and docs URL, dropping redundant metadata. #1580
  • ๐Ÿ”ง workflow_dispatch and pr_number test inputs removed from the changelog workflow now that the pipeline is stable. #1580
  • ๐Ÿ“ฆ Inline workflow scripts extracted out of YAML into .github/scripts and then relocated to .github/lib, making the workflows far easier to read and maintain. #1580
  • ๐Ÿ“ JSON schema moved into OpenRouter's response_format and the prompt template relocated to .github/prompts/prompt_template.txt. #1580
  • ๐Ÿ’… Hash shorthand used for response_format and a redundant comment dropped. #1580
  • ๐Ÿ—‘๏ธ Obsolete notify_slack_release.sh script removed โ€” superseded by notify_slack_release.rb. #1580

โš ๏ธ Breaking Changesโ€‹

None in this release. โœ…

๐Ÿ“š Documentationโ€‹

Three new pages were added to the docs site (182 insertions across 3 files), documenting the release pipeline end to end:

  • ๐Ÿš€ "Releasing the Gem" (docs-site/docs/4. Deployment/ReleaseGem.md) โ€” covers the stable release-cm-gem.yml workflow (trigger, bump_type input, build/release/changelog job graph, required secrets and variables) and the beta release-beta-gem.yml workflow, including how beta version numbers are derived from existing v<base>.beta* tags. Also notes that beta releases are pre-releases and do not trigger the changelog workflow. #1580
  • ๐Ÿค– "Release Changelog & Notifications" (docs-site/docs/4. Deployment/ReleaseChangelog.md) โ€” documents the reusable changelog-release.yml workflow and each of its components: collect_context.sh, generate_release_notes.rb (including the JSON response shape and fallback behaviour when OpenRouter is unavailable), update_docs_page.sh, update_release_registry.rb, and notify_slack_release.rb. Also documents the prompt template location and how to tune generated note structure and tone. #1580
  • ๐Ÿ“‘ Changelog section index (docs-site/docs/Changelog/index.md) โ€” a new landing page for the Changelog docs section listing recent months, with each monthly page (<YYYY-MM>.md) holding that month's AI-generated release notes. #1580