Please note: the release version corresponding to the release date is that of the Backstage Open Source version. We encourage all customers to upgrade their Backstage instance to the latest version alongside their Spotify Plugins for Backstage upgrades. View Backstage Open Source Release Notes here.
Import-with-update flow: When importing YAML for tracks, checks, or campaigns, a diff dialog now shows side-by-side comparison of current vs. incoming versions, allowing selective updates instead of silently skipping duplicates.
Check error visibility: Checks with collector errors now retain their previous state but display a warning indicator and structured error details. Includes a new "Has Errors" filter on the check entities page.
Badge customization in No-Code UI: Badge color and custom SVG configuration added to the track builder for track and per-level medal badges.
Exemptions REST API: New GET /exemptions endpoint to query exemptions by check or track, with pagination. New endpoints to revoke and restore exemptions.
Configurable Jira annotation key: Jira fact collector now supports a custom entity annotation for JQL queries instead of the default.
Configurable request body size limit: New soundcheck.requestSizeLimit config option (defaults to 10MB).
ETag caching for HTTP fact collector: HTTP collector now supports ETag-based caching.
Track MCP actions accept names/descriptions: Track-related MCP actions now accept track names and descriptions as alternatives to track IDs.
CSV export for exemptions: Exemptions on the Check Page can now be exported as CSV.
Fixed
Fixed campaign chart y-axis missing percentage unit and time-window picker disappearing when selected range has no data.
Fixed historical status charts displaying UTC dates instead of local timezone on Track, Check, and Campaign overview charts.
Fixed track overview chart not using custom badge colors configured on track levels.
Fixed compliance percentage showing 100% for imperfect pass rates.
Fixed certification tab names not truncating for long names; badges no longer appear distorted.
Fixed session expiry showing raw GraphQL error text instead of a friendly "session expired" message.
Fixed EntityFilter in OpenAPI Schema to support both object and array.
Fixed POST /checks/execute to support dryRun as string instead of boolean.
Fixed Soundcheck entity page extensions (content tab, card, group overview) not being overridable in the new Backstage frontend system by removing explicit type annotations that hid their config schemas.
Fixed in-memory catalog entity generator quitting early due to transient errors.
Fixed get-rolled-up-tech-insights MCP action timing out on large tenants.
Fixed MCP actions leaking raw server errors to AI clients on failure.
Change
Migrated Entity Soundcheck Tab to Backstage UI.
Updated Current Status card with separate count/percentage columns.
Improved Check Historical Status chart — fixed Y-axis, added human-readable labels and detailed tooltips.
Updated Campaign Historical Status Chart to match Track Historical Status Chart functionality.
Allow filtering of Check Entities by Not Reported status.
Added warning on Track/Check/Campaign pages when they are dual-defined in YAML and NCUI.
Added badge to Track/Check/Campaign list pages when they are dual-defined in YAML and NCUI.
Invalid Liquid templates in check messages now surface a warning on the Check Detail page.
Hardened error handling in MCP create/update/configure actions to surface human-readable messages.
Allow tracks with empty levels to load instead of failing validation - surface a "No checks" warning badge.
Prevent check deletion if it's associated with a track.
Deprecated legacy campaign notification system.
Deprecated legacy filter format with warnings.
Added TTL to the in-memory L1 cache to prevent stale entity counts when L2 cache refresh fails.
Added preserveStateOnError option to the POST /results API that prevents error results from overriding existing non-error states.
Added catalog fallback for CatalogIndexer cache misses so newly registered entities are found between rebuilds.
Added Pairwise Comparison Voting for hack events. Event organizers can now create pairwise judging sessions where participants compare hacks side-by-side to determine rankings. The system uses the Crowd-BT algorithm to produce statistically rigorous results from individual comparisons, requiring fewer total judgments than traditional voting. Enable with the skillExchange.enablePairwiseVoting configuration flag.
Change
Newer hack events now appear first when selecting an event while creating or editing a hack post.
Category filters in the hacks sidebar now update based on the selected event, showing only relevant categories.
All plugins now leverage native Backstage UI headers as introduced in Backstage v1.49.0. If you are using the New Frontend System, it’s important to update Backstage and the Spotify Plugins at the same time, in order to prevent duplicated or missing page headers.
Expanded campaign reminder notification templates: Custom notification titles and descriptions now support Liquid template variables (e.g. {{ campaign.name }}, {{ ownerEntityRef }}) and markdown-style hyperlinks.
Added UI configuration for custom fact collectors: Customers can now configure custom fact collectors directly from the UI without editing YAML.
Added matchAll mode to the SCM regex fact collector : When enabled, finds all occurrences of a pattern in a file and returns { matchCount, matches[] }. The NCUI gains a corresponding "Match All Mode" option (mutually exclusive with Capture Groups mode).
Added check conflict detection : Soundcheck now detects and surfaces a warning when a check is defined in both YAML and the NCUI, and provides remediation guidance.
Added owner and status filters to list pages : Owner and status filters are now available on the Track, Campaign, and Check List pages.
Added Entity Kind filter to Insights pages : Track and Check Insights pages now support filtering by entity kind.
Added "Not Applicable" count to the Checks page : The Current Status panel now includes a "Not Applicable" count.
Added copy-to-clipboard buttons : Now available in the fact explorer, check dry run, and YAML preview.
Added job queue status to the integrations page : Collectors now display job queue status in the integrations view.
Added UI support for SCM cacheFullResultsForEtags : This setting can now be configured from the integrations page without editing YAML.
Fixed
Fixed notifications being sent for draft campaigns
Fixed owner field showing entity ID instead of display name on the Track page
Fixed PagerDuty schedule display in integrations
Fixed custom number of days filter on the Historical Status chart
Fixed campaign notification text for campaigns past their target date
Fixed checker updates failing to propagate filter and metadata changes to dependent tracks
Fixed check selection dropdown to keep selected checks visible
Fixed incorrect titles appearing on page load — Names are now dynamically loaded from the catalog entity.
Fixed check and track filters not applying to the entity table by default
Fixed "Fix With Fleetshift" column display condition in the Checks Table
Fixed SCM fact collector using wrong annotation for file lookups — Now correctly uses backstage.io/source-location instead of view-url when both annotations point to different repositories.
Fixed custom badge colors from track YAML not applying in the frontend
Fixed an issue where a bad configuration could cause some integration collections to fail.
Fixed a bug that could cause the SCM collector to fail to collect scheduled tasks.
Fixed intermittent 500 errors.
Fixed GroupHierarchyService to self-heal after initial refresh failure.
Change
Improved Soundcheck's group selector UI
Changed default table page size to 20 results per page
Hid the documentation info icons for custom fact collectors without a documentation page
Launched Spotify Track Templates - ready-to-use tracks designed to make onboarding fast and easy. Spotify Track Templates automatically create tracks, checks, and required integration configuration, so teams can start getting value from Soundcheck with minimal setup. Creating tracks using Spotify Templates
Added Event Queue Metrics Logging. Soundcheck can now be configured to log event queue metrics, offering greater visibility into backend job processing and overall system performance. Job Queue Statistics
Fixed
Fixed an issue where applying a filter on the Check and Track Insights pages could display data for all catalog entities rather than the filtered selection.
Fixed Soundcheck track overview filtering for multiple selected owners.
Fixed an issue where results could be cleared when modifying the filter of a check.
Fixed an issue where check exemptions and stored check results could get out of sync.
Fixed an issue that could display entity references instead of names in Soundcheck tables.
Dropdowns in Soundcheck no longer auto select values when hovered over and not clicked.
Fixed an issue where the fact explorer could show an empty fact if fact collection failed.
Fixed an issue where the SCM fact collector would incorrectly use the backstage.io/view-url annotation to resolve the entity's source location when it pointed to a non-SCM URL (e.g., S3).
Fixed an issue where, in certain scenarios, the "Configure" button was incorrectly disabled for integrations with a custom No-Code UI.
Fixed an issue where the SonarQube integration displayed an error in the UI after clicking "Configure".
Fixes worker pool concurrency issues, race conditions, and memory leaks to improve reliability and performance.
Change
Removed the addStartingConfigurations flag, which allowed the installation of initial configurations for Soundcheck checks, tracks, and integrations.
Added an optional metadataAnnotations argument to the request body of the /campaigns/entities endpoint.
Insights filters (facets, date range, and dates) when applied will now also be saved in URL query parameters. Users can share filtered views via URL and maintain filter state when navigating between segments.
Introduced an optional CacheWarmingService that pre-warms long-running values used by Tech Insights (TI) and Tech Insights Explorer (TIE), helping improve page load times for large organizations or those with complex group structures. This feature is fully opt-in—if no configuration is provided, Soundcheck behavior remains unchanged. Performance Tuning Documentation
Improved UI navigation for the Soundcheck Integrations (fact collectors). Users will now be able to collapse multiple fact-collection configurations in the SCM fact collectors, making finding and navigating these facts much easier.
Fixed
Fixed an issue where updating manual checks would clear existing results. Non-functional changes, such as renaming a check or updating its description, will no longer remove saved results.
Fixed a case where broken cache provider connections could cause some pages to load indefinitely. Cache operations now respect the configurable soundcheck.cache.timeoutMs setting (default: 5000 ms) and will fall back to recomputing values if the timeout is exceeded.
Fixed a duplicate and conflicting react-aria dependency that caused issues for some customers.
Change
Added ‘created’ and ‘updated’ timestamps for Check & Track database tables for better visibility into changes over time.
Check, Track, and Campaign tables sorting tabs are now reflected in the URL search parameters, making table views easier to share and revisit.
Removed the deprecated Tech-Health service, with all functionality now provided through Tech Insights.
Pushes policy creation, update, publication and deletion as audit events. This enhances security and compliance by providing a traceable log of policy mutations within the system through Backstage's Auditor Service.
Initial release of Skill Exchange Actions, introducing two new, idempotent actions — search-skills and search-experts — for programmatic discovery of skills and experts within your organization. [docs]
Enables AI assistants and automation workflows to query organizational skill data safely and predictably.
Supports flexible filtering (by skill name, category, related skills, teams, and more) to power richer internal tooling.
Fixed issue where not defining the name properly could cause the config to be continuously reset(Removed default value causing infinite loop in SonarQube)
BullMQ custom Job IDs have been updated to use dots instead of colons, aligning with the latest validation rules.
Fixed an issue where the number of applicable tracks and campaigns displayed on the Tech Insights status tile did not match the actual number shown in the table below in some cases.
Fixed an issue where SCM YAML facts were not displayed in the Integration No-Code UI.
Change
Improved efficiency of retrieval of entity references from catalog.
Fixed an issue where long Plugin or Action names overlapped each other within the filter dropdown, preventing readability.
Fixed an issue where the export button was missing under certain circumstances.
Change
Insights-Backend: dropped support for PostgreSQL 13, as this version is no longer under active support by the PostgreSQL group. The minimum PostgreSQL version is now 14.
RBAC-Backend: dropped support for PostgreSQL 13, as this version is no longer under active support by the PostgreSQL group. The minimum PostgreSQL version is now 14.
Soundcheck gets a bold upgrade — Tech Insights is now your default landing page, delivering faster performance, streamlined navigation, and a Backstage UI-aligned experience that puts actionable insights front and center. This also includes a redesigned, intuitive, and easy to use group hierarchy filter.
Note: This upgrade is behind a feature flag, follow the documentation to enable it!
Please be sure that @backstage/ui is installed in your Backstage app when enabling this feature.
The "Entities Owner Filter" now searches by name, title, and description, making it easier to find the teams for which you’re searching.
Added sunset notice as a dismissible banner on the Soundcheck Tech Health page.
Fixed
Fixed a stability issue if the remote configuration of checks, tracks, or SCM integration is invalid.
Fixed an issue where the collectors page would error if there are incorrectly formatted values.
Fixed an issue where a check’s rule path was missing in the UI when using a non-default path resolver.
Resolved an issue where the "Cannot edit check" warning would occasionally appear after updating a check.
Added a status filter for the entities table on the Campaign Insights page.
Added support for personal access token (bearer token) authentication in the Jira integration. docs
Added support for the issues-count Jira fact that returns the number of issues matching a JQL query. docs
Fixed
Fixed an issue where Check Insights page history didn't respect applied status filters.
Fixed an issue where conditional permissions were incorrectly hiding or showing the edit button.
Fixed an issue where fetching checks returned all checks even when check IDs were provided to filter by.
Fixed an issue where using the default issues-search name for a Jira fact prevented the fact collection from executing.
Change
Breaking Change: The config option soundcheck.remote_file_updates has been deprecated in favor of soundcheck.remoteFileUpdates. You can continue to use the old option for now, but it will be removed in a future release.
Breaking Change: The config option soundcheck.programs has been deprecated in favor of soundcheck.tracks. You can continue to use the old option for now, but it will be removed in a future release.
The searchPage external route now defaults to search.root, removing the need to include a binding for this route in bindRoutes when setting up the Backstage frontend, unless you want to override it to point to a different route.
Introduced configurable admin moderation via skillExchange.admins.postCleanupAdmins (a list of user entity references granted delete and archive permissions).
Admins can now delete or archive Skill Exchange content directly in the UI; these controls are visible only to admins. Post owners still retain the ability to delete their own content.
Applies to: hacks, hack events, mentorships, and mentorship events.
Admins can now remove integration UI configurations directly from the database via each Integration’s Details page.
Updated the campaign insights page to match the layout and display the same information as the track insights page.
Added Error state as a filter option in check insights.
Fixed
Resolved an issue with track history charts that could cause them to exceed 100%.
Resolved an issue that could prevent newly created tracks and campaigns from being shown in the UI immediately.
Fixed display issue on campaign form with long list of checks selected.
Checks page is now reset to the first page when an owner filter is applied.
Entity links on the Campaign, Track, and Check Insight pages now navigate to the Soundcheck tab with the appropriate Campaign/Track/Check selected when possible.
Added triggered syncing of collector configs when there is an update to the config triggered by the UI.
Fixed import / export icons for checks and tracks.
Improved caching for glob patterns:
Added option to cache and use full SCM responses for eTags for the SCM fact collector via the cacheFullResultsForEtags config option. This decreases API calls consumed by SCM when using glob patterns at the cost of increased cache sizes.
Soundcheck remote file (eTag) caches are now retained for 7 days.
Change
Added a banner to show a warning when a collector is missing required/recommended configurations.
GitHub Fact Collector will now return an error message as a fact instead of an error state if dependabot alerts are not enabled for a repository.
Updated SCM collectors (SCM, GitHub, GitLab, Azure DevOps) to return collection errors instead of undefined facts if entity location URL is unsupported or integration details are not found.
Updated default time units from hours to days in Checks and Integrations UI.
Updated campaign milestones to make descriptions optional.
If you've annotated your Scaffolder Templates with the backstage.io/time-saved annotation, the Backstage Insights plugin will aggregate and display time savings metrics in the Headlines and Usage tabs.
For New Backstage Frontend System users:
The Insights plugin now includes the Analytics Implementation that was previously provided by @spotify/backstage-plugin-analytics-module-insights. When upgrading, you can uninstall @spotify/backstage-plugin-analytics-module-insights.
Change
The ability to configure the Backstage Insights plugin using keys under the app.analytics.backstageInsights object in app configuration is deprecated and will be removed in a future release. Please place your config directly under backstageInsights at the root of your config YAML.
The ability to configure event collection via the Backstage proxy backend has been deprecated and will be removed in a future release. Please remove backstageInsights.useProxy or app.analytics.backstageInsights.useProxy from your app config.
Added improvements to validation when using date range filters
Introduced support for the @backstage/ui header component. This feature can be activated using the configuration setting: skillExchange.enableSkillExchangeHeaderV2: true.
Expanded localization support with additional translation options available across all Skill Exchange pages.
Fixed
Resolved a navigation issue on the homepage when accessing the 'My Hacks' section.
Corrected missing translation labels on the Hack Metrics pages.
Addressed a potential XSS vulnerability related to how images are served.
Fixed a markdown rendering error that caused improper formatting of comments on hacks.
Draft Tracks: You can now mark tracks as draft! Draft Tracks are perfect for testing and verification, allowing you to refine your Track before making it visible by default. Say goodbye to the pressure of getting everything perfect on the first try!
Manual Checks: Soundcheck now supports the creation of manual checks, which can be easily set up using the UI and added to tracks. The status of a manual check can be updated directly on the entity’s Soundcheck page in the Track tab by simply clicking the check. Unlike automated checks, manual checks require user input to complete, making them ideal for tasks such as, "Did my team review our published documentation this quarter?"
Applicability Rules for Checks: Checks now support applicability rules, enabling them to evaluate one or more facts to determine whether they are applicable. These rules are reassessed each time the check is executed.
Fields that support markdown, i.e. check pass/fail messages, descriptions, now allow certain html tags like details/summary.
Added possibility to configure top-level filter, caching and frequency in YAML for SonarQube integration.
Check Exemptions: Soundcheck now supports check exemptions, allowing an entity owner to mark an entity as exempt from a specific check. Exempted checks are treated as passing for Track levels and certifications. Justification is required when creating an exemption, and exemptions can be revoked if needed.
Fixed
Improved the error message displayed when no checks are applicable for a track.
Removed an outdated banner.
Updated integrations UI to make it more clear when configs are removed.
Improved the performance of the SCM collector.
Improved the performance of Soundcheck’s aggregations.
Fixed the issue when
Fixed validation of fact names (prohibited spaces). SonarQube integration always used default metric keys if the fact name measures is used.
Fixed the issue when SonarQube project-tags fact was collected as an empty array.
Resolved an issue where duplicate milestone notifications were being sent. This occurred because milestones were being deleted and recreated instead of updated.
Fixed a bug in campaign update notifications where the DateTime object was missing the correct equality operator.
Change
Enhanced Track Insights Page: The Track Insights page has been redesigned to provide more detailed information about the current state of a track, while also delivering improved performance for a smoother experience.
Improved Filtering for Track and Check Insights: Track and Check Insights now include a new filter sidebar, making it clearer which filters are active. Filters are now staged, allowing you to review your selections and apply them by clicking “Apply Filter”.
Added configuration parameters that allow users to opt in to install default checks and tracks
Most cache entry keys are now postfixed with the Soundcheck version. This should prevent cache incompatibilities between versions.
Improved UI for adding levels to a track and checks to a campaign.
Breaking change: SonarQube projects fact will contain only the details about the project associated with an entity.
Added default limit of SonarQube issues to be collected (1000) to prevent out of memory issues.
Custom translations: Custom configure the use of words: Embeds, Mentorships, or Hacks within Skill Exchange, to use alternative naming conventions that are aligned with your organization.
Feature path customization: Embed, mentor and hack urls can be customized under the skillExchange.embedsPath, skillExchange.mentorsPath and skillExchange.hacksPath configs.
Notification customization: Notifications can now be customized by creating your own message builder for embeds, mentorships and/or hacks.
Updated the YAML parser to include support for anchors and ensure it no longer fails when encountering unrecognized tags. Additionally, introduced basic support for the !reference tag, enabling local dereferencing.
Some performance improvements to certification status history
Fixed an issue when the track and campaign insights pages would show N/A in the checks column while there were applicable checks
Fixed an issue when annotation and label filters containing dots were not applied correctly for checks, tracks and campaigns
Fixed an issue when liquid templates are not resolved correctly for HTTP fact collector’s headers
Fixes to Exporting Checks and Tracks to YAML - Exclusion filters are now exported
Minor UI and UX improvements on the Soundcheck for Entity page
Change
Checks which are not applicable or exempt (exemptions coming soon) are no longer shown on an entity's Soundcheck tab. Their visibility can be toggled via a settings button.
Added a new view in the “Usage” tab, enabling analysis of arbitrary actions taken by users in Backstage. It can be used, for example, to drill down to page views in TechDocs, UI interactions in the Catalog, or to understand custom plugin usage. Find out more here.
Fixed
Fixed an issue causing the “Users” segment to render incorrectly in Firefox
Fixed a bug that could cause metrics to be aggregated using unexpected groups
Fixed a bug that prevented the hostFilter configuration from working under some circumstances
Fixed a bug that could prevent entity display names from rendering in trend tables
Fixed links throughout the Usage tab so that they can be opened in a new tab
Change
The deprecated externalRoutes.searchPageRouteRef route binding has been removed
Added support for specifying a group filter in the configuration. This filters groups down to those relevant to Soundcheck.
Enhanced the date operator for creating checks, allowing users to input values like -P1Y
Added support for exclusion filters in Soundcheck. Users can now exclude specific entities from a check. Excluded Entities will show up as not reported on the overview page
Soundcheck now records resolved values and rule evaluation details, making this information accessible on the frontend for improved transparency.
Fixed
Added sanity checking to SonarQube integration and increased page size.
Resolved an issue where the Not Reported count was not being calculated correctly when a state filter was used.
Fixed an issue where Resolved Value could be undefined in the Check Result Details view when the check is run manually.
Resolved an issue where track entities were not always considering check applicability when calculating the pass percentage.
Made minor performance improvements.
Change
Check dry runs now use cached facts if they are available.
Out of the box checks, tracks, and collectors no longer specify a lifecycle filter (for new installations only).
BREAKING Soundcheck's /results endpoint was updated to authenticate requests.
The endpoint now requires that that credentials be included in the request, and that the user identified in the credentials has the soundcheck.check.update permission.
BREAKING Soundcheck's /facts endpoint was updated to authenticate requests, and deny users without the new update facts permission.
The endpoint now requires that that credentials be included in the request, and that the user identified in the credentials has the new soundcheck.fact.update permission.
Updated the team search dropdown in Home and Embeds to use the human readable spec.profile.displayName instead of metadata.name.
Fixed a bug that resulted in invalid date inputs on the Hack Metrics dashboard. The date selection now allows for dates to be chosen in a more flexible manner.
Fixed a bug where teams with malformed entity profile specs were showing up as empty strings in dropdowns.
It’s now possible to add descriptions to roles as a way to capture intentions and notes.
Change
Entity display names are now used when displaying or searching role members. If you need to see the raw entity name, it’s now displayed as a tooltip on hover.
When someone adds new entries for integrations like SCM, GitHub, GitLab, or Kubernetes in the UI, the system now automatically fills in some default settings from a configuration file (YAML), saving time and effort.
Added Initial Delay to integration UI config. Previously this was a YAML only config option.
Added RegEx Flags configuration option to SCM Integration No-Code UI. Previously this was a YAML only config option.
Removed support for the legacy backend from Soundcheck, please make sure you have migrated to the new backend system.
Check, Track and Campaign applicability filters now use standard catalog entity filters. Checks, Tracks, and Campaigns created in the UI will use this filter format and automatically migrate existing checks/tracks when updating. Existing Checks, Tracks, and Campaigns using the legacy format will still work as intended.
Old Format
filter:
catalog:
kind: Component
New Format
filter:
kind: Component
Change
Added better display when there is no data or there are no applicable entities on the track and campaign insights pages.
Aligned SCM Integration UI with rest of Integration UI styles.
Increased scheduled checks' timeout from 15 min to 60 min.
Removed read only check, track and campaign edit pages.
Support for the legacy Backstage backend system is now officially deprecated in all plugins.
Exports used to wire up plugins using the legacy backend system will be removed in the
February 2025 release of the bundle.
Customers who have not yet migrated away from the legacy backend system are encouraged to
do so beforehand to ensure a smooth upgrade in February. Please refer to the Backend System migration guide
for details on how.
Added batch size configuration to UI for integrations.
Added GitHub BranchRules fact type (returns all active rules that apply to the specified branch).
Overview pivot view toggle setting is now saved in local storage.
Allow scheduling collectors for multiple facts for a given entity if a custom fact collector provides multiple fact references in the CollectionConfig object.
The Overview page now fetches items from cache and database. This should improve load times for users with large amounts of entities and/or checks.
Array operators (in, notIn, contains, doesNotContain) will now use equality if provided with non-arrays. This makes them easier to use when a path resolver may or may not return an array when a single-element array is selected.
Fixed
Fix for checks not executing when facts were submitted via the API.
Fix potential 431 errors on the overview page that could be triggered when the selected owner had a large number of subgroups.
Fact collectors with human durations will now execute tasks scheduled from prior startups at their originally scheduled time.
Small fix to include the path resolver in exported checks.
Resolves an issue with initial page size on the insight pages.
Include track applicability when calculating passed and total count for overview page progress bar.
Change
BREAKING: Updated the Sonarqube fact collector to collect paged results. This is a minor breaking change, as we have also updated the collector to return facts in line with the responses given by Sonarqube. The fact schemas presented in the UI now also fully match the data available in the 'project' and 'issues' responses.
BREAKING: Updated the DataDog fact collector to return paginated results when collecting DataDog SLO facts. This is a minor breaking change as the return type of the fact has been updated to be an array.
BREAKING: Updated schema descriptors for PagerDuty facts.
Updated the PagerDuty fact collector to return paginated results when collecting PagerDuty incidents facts.
Removed campaign card from Soundcheck overview page. This campaign card has been superseded by the campaign insights page.
Support for the legacy Backstage backend system is now officially deprecated in all plugins.
Exports used to wire up plugins using the legacy backend system will be removed in the
February 2025 release of the bundle.
Customers who have not yet migrated away from the legacy backend system are encouraged to
do so beforehand to ensure a smooth upgrade in February. Please refer to the Backend System migration guide
for details on how.
Soundcheck now offers an improved campaign insights user experience. By clicking on a
campaign, you can see the number of days remaining, track progress trends, and explore a wealth
of additional insights to enhance your campaign experience! This feature is still maturing.
Added notifications to campaigns for passing milestones.
For customers with active campaigns that have already passed milestones, there will be a
one-time burst of notifications for all such passed milestones across all campaigns.
Added Batch Size
configuration for all integrations (Note this is YAML only for this release).
Added Custom Resources as a collectable fact type for the kubernetes plugin.
Added No-Code UI configuration option for GitLab and New Relic collectors.
Fixed
Fixed PagerDuty Integration Service Schema.
Security
Due to the continued identification of vulnerabilities related to jsonpath-plus, we’ve replaced the dependency with a different library - nimma.
Change
BREAKING: Special characters in the path parameter must be escaped.
For example: path: $.metadata.annotations[pagerduty.com/integration-key] must now be path: $.metadata.annotations['pagerduty.com/integration-key']
Added all groups to track and check insights filter selection.
The primary action for checks has been changed from "edit" to "view." on the checks page.
We now allow setting a Custom default title for the header bar through the title property of the RoutingPage.
Soundcheck will now only enable the execute check buttons for checks that it can actually execute.The button will be disabled if the check cannot actually be executed.
Replaced tabs on the overview page with a dropdown menu, allowing users to select entity group and type.
Introduced a pivot toggle for viewing entities on the X-axis.
Implemented a text search bar to find entities by name.
Historical check status now includes a date for each entry.
Security
Due to a CVE with jsonpath-plus, Soundcheck has switched its JSON path evaluator to the nimma package. This is a breaking change. While most paths that are supported by jsonpath-plus are also supported by nimma, some advanced path queries may break and need to be updated.
Fixed
Fixed detection of rate limit errors for SCM collectors for some integrations.
Fixed an issue with applying lifecycle filters to track insights.
Fixed an issue where searching for a track/check/campaign by name was not redirecting to the first page of results.
Archived campaigns will no longer show up on various pages
Change
Adjusted Soundcheck header styling to show up better on certain backgrounds.
Soundcheck now Supports custom cert TLS config for redis queues.
Check templates are designed to streamline the check creation process, helping Soundcheck users get started quickly with pre-filled configurations. Users still have the option to create their own custom checks if desired.
Getting Started With Soundcheck.
Soundcheck now has a welcome page which provides actions targeted towards new users. These actions will guide them to relevant introductory tasks, enhancing their experience by offering guidance during their first interactions with Soundcheck.
Acess this new page via the link on the banner of any other Soundcheck page.
New Tooltip for NL Badges
If an entity is not certified at any level, a tooltip will appear on hover to indicate the entity's uncertified status and provide guidance.
Fact Collectors can now return Collection Errors that will be visible on the UI.
Soundcheck now supports default SCM and Github collector configurations on startup that collect the facts necessary for the pre-canned tracks and checks. Users have to set the following flag in the config before starting backstage.
Support previously YAML only features in Check Form:
Added ‘NOT’ expression to rules input in check form
Added Operator prefixes all:, any:, none: input to Check Rule operator inputs. This allows for checking all the elements in a fact value that is an array.
Added Fact and List rule value inputs to Soundcheck Check form.
Added PathResolver to Check Form.
Added No-Code UI configuration option for DataDog, Jira, Kubernetes, PagerDuty, SonarQube and SCM Fact Collectors.
Fixed
Fixed the 'View Detail' button to show a disabled view if the check is not defined in Soundcheck. This occurs when the check result is submitted directly via the API or added directly to the database.
Soundcheck forms for Check Tracks and Campaigns are now a regular page. Create pages now have a route, i.e. /soundcheck/tracks/create.
Improved the performance of check result aggregations.
Fixed an issue that could cause fact collectors to have their configuration set more often than necessary.
Resolved an issue where the ‘exists’ extractor could cause a NotFoundError rather than determining that the file does not exist.
Fixed an issue for excessive error message lengths for check results.
Change
We have renamed the 'Collectors' tab to 'Integrations' to improve user understanding. This is a UI-only change; the backend will continue to refer to 'collectors’.
Moved Campaign view page off of full screen dialog into its own page.
Collector configurations now merge the configurations provided in YAML with the configurations provided via the UI allowing them to be overridden.This allows config options like secrets to be provided in the YAML (or Config manager) but things like collection configs to be provided via NCUI.
Check Form owner select now auto selects the logged in user by default.
Optimized and replaced owner select on Track, Check, and Campaign forms with autocompletes.
Kubernetes Fact Collector now collects facts on entities with either the backstage.io/kubernetes-label-selector or backstage.io/kubernetes-id annotation. Before, the backstage.io/kubernetes-id annotation was required.
Kubernetes Fact Collector better supports collecting facts on a k8s cluster registered in the Backstage catalog.
Soundcheck Page Headers are now dynamic based on the current page.
Migrated soundcheck backend modules to the new auth system.
Mentorship events are released. This is a new feature that will enable event post creation, deletion, and association for mentorships. Individual mentorship posts can now be associated with a mentorship event to group a subset of mentorship posts together.
Adopters can configure a set of remote URLs that contain configuration files that Skill Exchange can read from. This allows adopters to host their configuration for embed priority levels, skills and locations separately.
Fixed
Profile Search on the home page of the Skill Exchange plugin now has a configuration option added. When enabled, this will allow the search to make use of the Search APIs filters, improving results for certain search engines. To enable, add the following configuration option to the plugin config:
skillExchange:
useFilteredProfileSearch: true
Theme colors across Skill Exchange were updated for improved readability and consistent use.
Icon colors were updated for improved accessibility and theming across Mentorships.
Change
Removed deprecated skillIngestion from config. Please refer to defaultLists in the docs.
Soundcheck now has a new Check Insights page allowing users to view compliance for a check across their Software Catalog.
Added a sticky header with entity names to the Soundcheck Overview page
Soundcheck now supports authoring checks which validate the elements of arrays.
Prefixing an operator with all: will validate that all elements in the array satisfy the condition.
Prefixing an operator with any: will validate that at least one element in the array satisfies the condition.
Prefixing an operator with none: will validate that no elements in the array satisfies the condition.
Soundcheck can now be extended with custom path resolvers. Path resolvers are used to extract values out of facts for comparison within checks. By default Soundcheck uses JSON Path, however this can be overridden on a check by setting the pathResolver. Soundcheck now supports the following path resolvers: jsonpath (default), lodash, jmespath, jsonata.
Added support for collecting facts from glob paths for the SCM fact collector.
Added clearer labels for the overview page tabs when there are categories with the same type.
Improved the performance of track insights by adding configurable batching and a batchSize option to the entity caching options to control how many entities are pulled from the catalog at a time when refreshing entity caches.
Soundcheck now enqueues fewer certification jobs in response to check result updates, reducing the number of calls it makes to the software catalog.
Rule operator input in the create new check form now allows a free form string to be inputted to use custom or advanced operators
An entity is now considered certified in a level if there are no applicable checks for the entity within that level.
Soundcheck now supports the ability to execute checks on demand from the Entity page.
Added support for 'not' conditions in Check rules via yaml.
Updates the 'Does Not Contain' array operator to return true if the array is missing/undefined.
Added an 'error' state to possible check result states. If errors are encountered when executing a check, the error will be shown in the check details section in the entity overview.
SCM Fact Collector now supports conditional calls with e-tags. The fact collector will automatically handle 304 Not Modified status codes to reduce the overall api usage. If using the old backend system users will need to include the PluginCacheManager when using this version.
Fixed
Fixed the check progress indicators on the Soundcheck overview page and the campaigns pages to show total progress instead of page progress.
Fixed an issue where multiple backstage instances running Soundcheck would see only one instance pick up changes for remotely provided configurations, including checks, tracks, and the SCM configuration.
Fixed an issue where the horizontal scroll bar would be hidden if there were many entities on the overview page.
Ensures that the group tab in tech health displays only groups and no other types of entities.
Change
Updated the SCM regex facts to accept an optional flags definition, which must match:/^[gimsuy]+$/
Changed scrollbar background colors to match the rest of the layout components.
New experimental feature to display metrics for your hack events. Customers can now access charts covering various KPIs and export data to spreadsheets. To enable, toggle the skill-exchange-enable-hack-metrics feature flag from the Backstage settings.
Fixed
Resolved issue in Hacks where the scroll position in lists was not preserved during navigation.
Resolved issue on skill profiles page where users were not able to scroll the page.
Feedback: Backstage champions can now run pop up surveys to collect attitudinal data from Backstage users and understand more about their development experience.
Fixed
Fixed a bad link in the user engagement headline card.
Fixed an issue where the names of entities are not being output correctly using the presentation API
Soundcheck now integrates with Gitlab collecting facts and building checks based on data directly from GitHub
Added tooltip showing counts on the track insights pages for pass rates
Added an exists operator which validates whether data exists at a given path within a fact
Users can now export tracks and checks to yaml from the UI. Exports can be performed via the drop down menu on the Track and Check cards on their respective list pages
Fixed
Fixed discrepancies in Tech Health numbers.
Resolved an issue with certification writes and added migration scripts to correct any erroneous rows that have already been written.
Fixed an issue that prevented use of the grid view on Soundcheck Tech-Health pages.
Resolved an issue that can sometimes occur when reading persisted Tech Health filters from local storage.
Pressing the 'View Campaign' button sent to Slack by Soundcheck no longer shows a warning icon next to it when pressed
Minor performance improvements to the Track Insights page.
Fixed RateLimitErrors being incorrectly logged as fact collection failures.
Fixed parsing of factNames that contain /
Scopes within fact ref strings can now contain / and : by enclosing the scope in single quotes. For example: scm:'my/branch'/test.
Fixed a problem when, in some cases, fact scope is not respected by SCM fact collector.
Fixed a problem when, in some cases, fact scope is not respected by Github fact collector.
Fixed an issue where the Slack integration was attempting to connect even when no credentials were provided.
Change
Added Operator and filter extension points for the new backend system
Standardized caching by making minor changes to how github collector caches facts
Made the factName configuration parameter optional for all SCM collectors, Azure DevOps, GitHub and GitLab Fact Collectors.
Added edit option to the drop down menu on summary cards for checks, tracks and campaigns page
The rule input field in the Check form for creating and editing checks will now cast string values for booleans and numbers when the form is submitted.
Added theme overrides using the following component name CheckResultStateBox for customization of the check result box in the Soundcheck tab of the component pages.
The following check status states are available for override:
Custom thumbnails for hacks can be created from a new extension point. The thumbnail is generated from hack metadata and returns a URL to the thumbnail image.
When a generator is registered, a panel will be included in the hack forms that allows the user to trigger the thumbnail generation. The generator will be called with the title and pitch of the hack, and the URL returned will be used as the thumbnail for the hack post.
This feature is currently in alpha and it is very likely to change in the future.
A new configuration setting allows integrators to enable voting for the same hack in multiple categories.
To activate this feature, add the skillExchange.experimental.allowMultipleVotesPerHack flag to your app-config.yaml file.
Hack followers are now visible on the hack details page.
Fixed
Fixed an issue with hack card display in search suggestions.
Fixed some spacing issues with the new layouts in Hacks and Embeds views.
Change
Enhanced the Tag input field on the hack input form for a smoother user experience. Now, values remain saved even when the field is deselected, eliminating the need to press enter.
Enhanced visual styling of the hack list view.
Refined error messages in the hack form for clearer input guidance.
Improved hack form usability by highlighting required fields.
Soundcheck can now integrate with Jira, collecting facts and building checks based on data directly from Jira
Soundcheck can now integrate with Azure DevOps, collecting facts and building checks based on data directly from Azure DevOps
Added support for a new fact type “Incidents” to PagerDuty fact collector
Soundcheck’s Track Insights view now takes track and check applicability into account
Added the ability to override the default initial delay for collections in Soundcheck by providing an initialDelay within a CollectionConfig
Fixed
Fixed an issue in Soundcheck with limiting executions of scheduled checks when rate limit errors are encountered
Fixed issues with data discrepancies when viewing Tech Health results by adding timed tasks which will remove results from latest and history for (a) any entities that are no longer present in catalog and (b) any checks that are missing in the latest tables
Fixed an issue that can occur when Soundcheck is interrupted on startup and which may cause data discrepancies between history and latest when viewing the Tech Health results
Fixed an issue where scheduled checks created through Soundcheck’s No Code UI would apply to more entities than specified in the filter
Fixed an edge case where the Soundcheck overview page could paginate out of order
Fixed an issue in Soundcheck limiting the exporting of the full dataset available in Soundcheck’s Tech Health view
Fixed an issue in the filter dropdown where owner names could be displayed incorrectly
Fixed a pagination issue in Tech Health limiting entities and team pagination from functioning in Soundcheck
Change
BREAKING: For users still using the legacy backend for Backstage, to maintain functionality of the SCM collector, they will need to update the ScmFactCollector in packages/backend/src/plugins/soundcheck.ts:
Soundcheck now has tooltips to notify users they may not have the ability to configure Collectors that have been defined in YAML
Removed a configuration option to enable the non-virtualized Soundcheck Overview table
Removed the createUrlReader utility method (previously used by other Soundcheck packages to construct a UrlReader)
Improved the accuracy of how Track progress is calculated from Soundcheck’s Track Insights view
Newly redesigned cards for Hacks and Events and enabled customization of card styles using the theme overrides. The component and their rules names are:
SkillExchangeCard - The main card container.
root
SkillExchangeCardTitle - The card title.
root
SkillExchangeCardMedia - Card images.
root
SkillExchangeCardActions - The card button container.
root
SkillExchangeCardDescription - Cards descriptions are typically used for the large text content of the card, such as Hack or Event descriptions.
root
content
SkillExchangeCardActionArea - The card action area is used for the primary interaction of the card, such as clicking the card to navigate to a new page. It typically covers the cards title and description.
root
Google Slides, Loom videos, and videos shared from Google Drive can now be seamlessly viewed directly within the Hack details view when added as demo or pitch resources.
Fixed
It’s now possible to add labels to Hacks and Events resource links
The main navigation tabs, search bars, and filter sidebar for Hacks, Embeds and Mentorships have been made sticky when scrolling, so it's easier to use these controls when viewing pages with lots of content.
The Hack and Event navigations tabs have been combined into the main header to save screen real estate.
Fixed
Removed support for the legacy Skill Exchange Docker backend service. Support for this service has been deprecated since version 0.9.0, and disabled by default. Any users still using the legacy backend service should migrate to the new Node.js backend service using the instructions here.
Fixed style issue with Hack sidebar navigation when using the dark mode theme.
Fixed a bug where commas in Hack names were not being escaped when exporting vote results as a CSV.
The new Backstage backend system is now supported by the following plugins:
RBAC
Soundcheck
Insights
Skill Exchange
This new backend system was built to make it simpler to install backend plugins and keep projects up to date. It also changed the foundation to one that makes it a lot easier to evolve plugins and the system itself with minimal disruption or cause of breaking changes.
Benefits to bundle plugin users
Simplified Installations
Sane Defaults (Easier for adopters who already use the above plugins to keep them up-to-date)
Extending Plugins
Developer Friendly
No migrations or updates are required at this time; customers may continue to run their Backstage backends using the “old” system without issue. If you are already running the new backend system, or plan to migrate in the future, you can find instructions on how to install our plugins in the new backend system in our docs for example.
Soundcheck adopters can now view insights for tracks to help them understand which checks within their tracks need attention along with an entity view that helps them understand the % of checks passing against each entity.
Soundcheck Overview Page: Campaign cards have been redesigned to appear in a collapsible accordion. The information shown on the cards now aims to give a quick high level summary of the campaign's progress.
Campaign Details Page: The progress of the campaign shown on this page now closely mirrors the same grid view of the Overview page. Users will now be able to see how entities are progressing on a per-check basis.
Campaign Notifications: Added optional support for campaign email notifications.
Tech Health updates
All filters on the Tech Health pages have a tooltip with a description of what each filter does.
Limited the number of filter options being rendered to improve performance.
Fixed rendering issues with Tech Health filters under the dark theme.
Improved Tech Health caching and overall performance.
Added warning field to a check definition (both YAML and No Code UI). This generates warning outcomes rather than outright failures. A warning suggests that the check did not pass successfully, however, this discrepancy will not impact the entity's certification at the given level.
Added in breadcrumb navigation for Soundcheck.
Checks and tracks can now be stored in files and referenced by URL. This will enable configurations to be stored and retrieved via URL (such as within a Github repo) for these Soundcheck configurations.
Soundcheck's functionality can now be extended by providing it with custom operators.
A default Entity Owner for Soundcheck Tech Health filters is now automatically selected
We've enhanced the system by introducing dynamic rate limit management for Sonarqube, Pagerduty, SCM, Github, and Techinsights TPI fact collectors. Now, these TPI fact collectors emit RateLimitErrors when they encounter 429 errors. In response to this, Soundcheck will pause and retry rate limited requests.
Fixed
Fixed ‘Days left’ calculation for campaigns.
Fixed campaign deletion Slack notification not being sent
Fixed an issue that was causing a warning on several Soundcheck pages.
Graceful handling of slack API connection errors
Fixed an issue where using the search by name feature of the Track library would only search the current page.
Resolved an issue with the check validation schema.
Front-end validation for descriptions are now more consistent with YAML and backend.
Updated catalog utils to leverage one another rather than calling catalog directly.
Introducing the new and updated Skill Profile skill edit experience, users will now be able to select from a list of suggested skills based off of their current skill selections.
Skill suggestions
Suggested skills are powered by other users who have similar skill sets.
Suggested skills are also powered by discipline associations defined in the skill ingestions YAML. See below for more information.
Skill ingestion
Skills through ingestion are now treated as the source of truth for all skills used throughout Skill Exchange, rendering previously user created custom skills obsolete.
User created custom skills will now be deduped as long as a skill with the same name is defined in the skill ingestion YAML.
Skills can now be defined with two extra optional fields: subset and disciplines. Please refer to the Defining Skills for Ingestion section for more information.
On the Hack events page, events are categorized by 'Ongoing', 'Upcoming' or 'Past', to easily identify which events are currently running.
SonarQube integration plugin supports the extraction of the following facts:
Projects
Project Tags
Issues
Soundcheck’s Tech Health Page now includes a filter for Entity Systems.
Added a defaultSelectedGroupType configuration option to pre-select a group whose spec.type equals the configured type in the group selector on Soundcheck overview page. To enable this option, add the configuration to your app-config.yaml:
soundcheck:
overview:
defaultSelectedGroupType: team
Users will now be informed when their search filters do not match any entries in the check or track libraries.
Users on the campaign's edit form are now able to click on any step heading to go to that step.
The Soundcheck overview page will persist and restore the users’ last selected group.
Added a field to the track creation form in No-Code UI for a "Documentation URL".
If users want to improve Soundcheck Tech Health page performance they can enable data caching.
Caching can be configured using the configuration show below:
# The configuration should be added to the soundcheck portion of app-config.yaml:
soundcheck:
techHealth:
caching:
trends:
enabled: true
cacheTtl: 720
snapshots:
enabled: true
cacheTtl: 15
caching: A section in which caching per data type can be enabled/disabled. Default value is 'true' for both types.
trends: A section in which trend data caching can be configured.
snapshots: A section in which snapshot data caching can be configured.
enabled: A boolean value indicating whether caching is enabled for the data type. Default value is 'true'.
cacheTtl: The number of minutes for which the data will be cached, if enabled. Default value is 15 minutes for snapshots and 1440 (24 hours) for trends.
Added loading indicator to overview page.
In addition to markdown, check pass and fail messages now also support Liquid templating.
The following variables are available for use in templates:
entity - The entity the check was executed on.
facts - A map of facts used by the check. Individual facts can be looked up in this map by fact reference. For example, facts['catalog:default/entity_descriptor'].
Here is an example of a pass message using templates. In this example, Soundcheck would replace {{ entity.metadata.name }} with the name of the entity the check was executed on, and {{ fact.data.integrationKey }} with the PagerDuty integration key from the fact used by the check.
{{ entity.metadata.name }} has a PagerDuty Integration Key defined: {{ fact.data.integrationKey }}
Fixed
Resolved an issue that could cause errors related to attempting to delete rows from a table before it exists on startup.
Improved how the campaign owner name is displayed in Soundcheck Slack notifications.
Fixed issue where filters were editable when viewing a Check or Track in read-only mode.
Fixed issue that prevents users from viewing Checks and Tracks created via configuration file.
Improved the performance of the queries that power Soundcheck's Tech Health aggregations.
Fixed autocomplete for facts in the Check form so that options are now properly filtered.
Fixed an issue where certain collectors were showing the "Configure" button as clickable when it should have been disabled.
Fixed an issue with the loading state of the library pages in Soundcheck.
Fixed an edge case in getEntityPassRates. This resolves an issue in an edge case where no results match the given entity refs.
Change
Entity owner filters in the No Code UI will now allow all groups to be selectable, not just entity owners. This is useful in combination with the nested owner filtering changes introduced in a previous patch.
The /results endpoint used to POST check results to Soundcheck has been modified: the endpoint no longer returns a list of updated results back to the caller.
If callers still wish to use the old functionality they may add returnUpdatedResults=true as a query parameter to the endpoint URL.
As an example, instead of posting results to /api/soundcheck/results, a caller will now need to post to /api/soundcheck/results?returnUpdatedResults=true to get the same response as before.
This change minimizes often unused network throughput and reduces the amount of data that needs to be sent over the wire.
Added consistent usage of links for the owners of specific campaigns in Soundcheck.
Updated visibility for soundcheck backend's secret config values.
Soundcheck no longer allows unrecognized keys in configurations. This should make it easier to identify misconfigurations but may cause validation errors with existing misconfigured instances.
Added two additional string operators: startsWith and endsWith. The startsWith operator tests if a string starts with a given string. The endsWith operator tests if a string ends with a given string.
Editable Collectors are now linkable via the following url structure /collectors/:collectorId.
Introducing the hack digest feature, where users can get Slack updates on the hacks they have been following on a configurable schedule.
For adopters who have their Slack integration running, and would like to schedule periodic Slack updates (edits to the hack or new comments) to users who follow hacks, they can specify a cron value to their app-config.yaml (or equivalent) file. This cron value dictates the frequency with which users will receive updates on their hacks, if any updates exist since the last updates were sent. See the the following screenshot for an example:
# The configuration should be added to the skillExchange portion of app-config.yaml:
skillExchange:
# ...
hackUpdateNotificationsCron: '0 17 * * 1'
# ...
This example configuration will send out updates to users on hacks they are following at 17:00 every Monday.
Fixed
Fixed an issue where users would be able to vote on their own hacks.
Fixed issue with hack pagination that was stopping you loading more hacks after the first page.
Fixed skill search logic to fix a bug in which duplicate search API calls were fired unnecessarily.
We are thrilled to introduce Campaigns within Soundcheck. Soundcheck's Campaigns feature equips organizations to strategically target and manage specific short-term initiatives including built-in Slack notifications when the status of a campaign changes.
Some examples include "Upgrade Spring libraries" to use a specific version of spring boot or "Update log4j lib"
Adopters can create, edit, delete, and archive a campaign.
Integration with email notifications will follow soon.
The PagerDuty Third Party plugin now integrates with Soundcheck. Learn more here.
Checks may now compare the value of two different facts. For example, you can create a check which validates that a component's name in the Software Catalog matches the name specified in package.json.
Owner filters on Campaigns, Checks, and Tracks now work hierarchically. For example, if OrgA is the parent of team1 and team2 applying the owner filter on OrgA will make it applicable to entities owned by OrgA, team1, or team2.
Check results with the state 'not-applicable' can now be submitted to Soundcheck via its REST API.
The soundcheck.checks configuration now supports individual check configurations and arrays of check configurations. This allows you to organize related checks into a file or multiple files and seamlessly include them in the main soundcheck.checks configuration using the $include directive.
Fixed
Resolved an issue with the GitHub fact collector where a ‘403 Not Modified’ could be interpreted as an error rather than branch protections not being configured under certain circumstances.
Resolved an issue that could prevent entity owner filters from being used in Soundcheck's Tech-Health pages.
Resolved an issue with fact collector permissions being inadvertently tied to track permissions.
Resolved an issue that was preventing boolean comparisons in checks from working correctly when the check was created through the UI.
Resolved an issue that could prevent filters from being applied to Github fact collections configured through the UI.
Change
Improved certification history cleanup logic. It now retains certain history outside of the specified window so that the Tech Health page can correctly calculate historical aggregations.
Improved check result history cleanup logic. It now retains certain history outside of the specified window so that the Tech Health page can correctly calculate historical aggregations.
Relaxed Soundcheck’s validation of entity references to allow for names longer than 64 characters.
Minor performance improvement when persisting check results.
Increased payload size limits to support the submission of larger batches of results and/or facts.
Added the possibility to set up advanced check and track applicability filters to extend entity filter functionality. Custom filter functions can now be passed to the Soundcheck Builder when instantiating Soundcheck to perform arbitrary applicability evaluation. See the soundcheck-backend README for full details.
The Github fact collector will now return the previously retrieved branch protection data when Github responds with '404 Not Modified' instead of undefined.
Added strict enforcement of fact collector configuration schemas. Unrecognized keys are no longer allowed to help users identify misconfigurations.
Introduced Policy Tester: a system that tests the behavior of RBAC policies.
This feature allows RBAC policy admins to configure tests against their permissions, providing a comprehensive view of policy decisions prior to production release.
The interface enables administrators to selectively choose specific permissions, and observe the outcomes applied to designated role(s) within their policy.
Fixed
Fixed a bug where stale data could be shown in the UI after publishing a policy.
Skills without defined levels are no longer included on a user's profile.
Updated line heights on hack cards to be more consistent.
Resolved spacing bug for bulleted markdown lists.
Updated the vote count logic when using vote sessions with unlimited number of votes for hacks.
Change
BREAKING: The Skill Exchange Slack integration now supports adding embed and
mentorship participants directly through a button in Slack (instead of linking
to the post).
If you are currently using Skill Exchange with Slack, you have to make changes in order to keep using the Slack integration. For instructions, see the README.
The default sort for the Events page is now sorted by last updated date in descending order.
Pulse now offers a Progress Bar that helps track engagement of surveys and is automatically available to Pulse users. With the Progress Bar, respondents are informed of their progress, which can help minimize survey abandonment rates.
Soundcheck users have access to a single, aggregated view of metrics and trends that gives teams and leaders the ability to understand the tech health of their components.
Soundcheck now contains a “Tech Health” tab where users can both view and filter aggregate Soundcheck results across teams, components, checks, and tracks.
Users can now configure the Github fact collector via Soundcheck’s No Code UI .
If you already have a config YAML file setup, you will be unable to use No Code UI to configure your collector. In order to use the No Code UI, simply remove the YAML file/reference and you will have access to configure from No Code UI.
Configure is only enabled if the user has the collector update permission.
Introduced before and after date operators, expanding Soundcheck’s capabilities to assess whether a provided date/time fact value occurs earlier or later than a specified date/time, or relative to the current date/time adjusted by a duration.
Fixed
Resolved an issue where newly added Checks would not immediately show up in the Track UI.
Soundcheck's ScmFactCollector can now be dynamically configured with new collector configurations after startup.
Resolved an issue where newly added Checks would not immediately show up in the Track UI.
Resolved an issue where changing Fact was not clearing the Path/Operator/Value fields in the Check UI.
Resolved an issue where the text for warning messages on the Soundcheck Group page was not accurate.
Tooltips in the overview table now support markdown in check descriptions.
Change
Fact collectors may now optionally include a name and brief description. This will help users identify and describe fact collectors.
Support for multiple "expressions" per level when creating check rules has been added. This provides greater flexibility when creating expressions for checks and allows multiple sets of expressions, which enables more complex rule creation.
Added /tracks endpoint, providing programmatic access to Soundcheck tracks. See the Soundcheck README for full details and query parameters.
Soundcheck's No Code UI now supports the creation and editing of check schedules. This allows users to create schedules for their checks and provides both the ability to specify schedules in cron notation or in an ‘every three days’ type specification.
Fixed
Fact collection no longer occurs one minute after startup, instead each fact collector executes on their specified schedule(s). This limits the surge of fact collection during initialization and can help to alleviate rate-limiting restrictions.
Check and Track Pages’ pagination is fixed. Users can navigate through their checks and tracks with the pagination controls at the bottom of those pages with greater ease.
Increased the number of certifications returned when populating the Overview page. Upcoming fixes will add pagination to the Overview page. This release significantly increases the number of entities that the Overview page can load to 500 from 50.
Correlated: A virtualized table is now used by default on Soundcheck's overview page. With the potential for a much larger number of components to be present on the Overview page, the page has been modified to be virtualized which will prevent performance degradation when viewing a large number of components.
Resolved an issue with check/track filters where an error message would be displayed when the facet had no values.
Change
Fact collectors may now optionally include a name and brief description. This will help users identify and describe fact collectors.
Insights now captures a more complete group hierarchy related to signed in users. This means that if groups are organized hierarchically in the Software Catalog, Insights captures not only the groups that a user is directly a member of, but also that group's parents, recursively up the org hierarchy. This allows the user dashboard to be segmented not just by teams, but also by other higher-level groups like departments or business units.
It's now possible to configure a filter for what types of groups are captured, for example: filtering out groups that only exist to grant access to applications, interest groups, etc.
Added a No-Code UI for checks and tracks management. No-Code UI is a powerful user interface built into the Soundcheck plugin that allows users to manage checks and tracks without writing YAML code. For more information, check out the documentation.
Integrated Soundcheck with the RBAC plugin. Admins can now use the RBAC plugin to manage (allow and restrict) what individual users or groups can do within Soundcheck. For next steps, check out the documentation.
Fixed
Added "No certifications available" warning on Soundcheck overview page in case the selected group doesn't own any entities that have applicable tracks configured.
We now allow configuring checks for null rules in Soundcheck (see example below).
checks:
- id: has_description
rule:
factRef: github:default/repo_details
path: $.description
operator: notEqual
value: null
passedMessage: Repo has a description
failedMessage: Repo does not have a description
Change
Soundcheck programs are now called Soundcheck tracks - we believe that the term “track” provides a clearer and more intuitive understanding of the program's content. You may still see some references to “Programs” throughout Soundcheck (for example in .yaml configuration); future releases will cover the renaming of the remaining occurrences.
Added the ability to filter Mentorships posts by location.
Added pagination to Home page search and teams to search results with highlighting.
Fixed
Fixed a bug where modifying a hack's status might remove associated skills.
Users no longer need to refresh a page after saving or following posts to see their changes reflected.
Closing a hack detail modal will no longer cause the list view to reload and scroll to the top of the page.
Fixed error that occurs while deleting hack event vote session.
Fixed error when modifying the categories on an existing event.
Fixed a bug causing an error when deleting hacks with comments.
Fixed issues with skill ingestion and user management of default skills.
If an integrator now sets the systemUser configuration for skill ingestion, then those skills will be visible to other users.
Custom skills a user creates are not visible to other users to add to their profile. Only their user-created skills and the default skills are available.
If the System User deletes a skill, then it's removed from any post and user profiles it's related to.
Change
Minor UI accessibility improvements to embed and mentorship cards.
Minor improvements to the home page search autocomplete and filters.
Embeds and mentorships are now ordered by creation date, with the newest entries first.
Deleting an event now unlinks it from any associated hacks.
Clicking the 'Delete' button in the hack and event edit forms will scroll the confirmation message into view.
Added advanced filtering and segmentation functionality to gain valuable insights into Backstage adoption with the default dimensions like 'User group', 'Entity kind' and 'Lifecycle' or custom dimensions.
Added custom period selection for any date range going back 90 days
Added tailored dashboards for surfacing insights into user, catalog, search and template usage activity
Change
Moved insights from the accounts page on backstage.spotify.com to a frontend plugin with insights surfaced directly in a customer’s Backstage instance. Current customers will need to undergo a low-lift migration by installing the frontend Insights plugin.
Added support for displaying tabs for entities without types (like entities with kind System or Domain) on the Soundcheck Overview page.
Such entities will be grouped by their kind and displayed on the tabs with corresponding names (in case at least one track is applicable to such entities).
Fixed
Resolved an issue with resolving Azure DevOps URLs.
Change
Updated Readme.md to include how to create catalog and Soundcheck checks.
Fixed an bug causing the frontend to show an error when options property is missing in a policy.
Fixed a bug where the "any-allow" resolution strategy was not honored when importing a policy using the UI "import" button. The system now correctly matches the imported policy's resolution strategy.
Added the ability to filter Embed posts by location. This includes custom location ingestion so that organization-specific locations can be used to filter posts.
Fixed
Fixed a bug to improve searchability of Skill Profiles.
Fixed contrast text when creating an Embed post.
Change
Search results where a filter is set to a specific location no longer also include locations that are "flexible".
Updated navigation text for Embeds and Hacks.
Minor UI improvements to the skills listed on Embed cards.
Minor styling fix to the Embed text editor placeholders.
The Github fact collector now supports collecting facts on the languages used within a repository.
This means you can now create checks based on the specific languages detected in your repository. For example, if you have a website component and want to ensure it’s built using TypeScript, you can set up a check to verify that with this new feature.
Added initial integration with Azure DevOps. This integration enables Soundcheck to collect information on your software components from their Azure DevOps projects.
Fixed
Numerous enhancements to ensure compliance with accessibility standards.
Soundcheck can now execute a check if at least one fact within an Any clause is present rather than requiring all facts.
Instead of needing all the facts within an Any clause, we’ve made it possible for Soundcheck to execute a check as long as at least one fact is present. You can now create rules based on the availability of just one fact, making your checks more versatile and adaptable to your specific needs.
Addressed a small issue with the Github fact collector where, if no branch protections were in place an error message would be logged, causing unnecessary confusion.
Resolved an issue related to joining paths for certain Source Control Management (SCM) providers.
Resolved an issue related to scheduled checks. Previously, the results of these checks were not being persisted as they should have been. Now the results of scheduled checks are being persisted as intended.
Change
Fact collector installation instructions are now updated in the README.
RBAC policy authors can now customize authorization resolution for users with multiple roles. Set your decision resolution strategy effortlessly from our new policy options page shown below:
Set the default resolution strategy to 'any-allow' for new authorization policies. The default for policies created previously will remain 'first-match'.
Insights is soon moving away from backstage.spotify.com (read more on this blog) first with added support for the Insights Backend plugin. Here’s what you need to know:
There is a new Insights backend package, @spotify/backstage-plugin-insights-backend, which you should install as soon as possible. Support for using the proxy-based configuration will be removed in the future.
@spotify/backstage-plugin-analytics-module-insights has been updated to forward analytics events to the new Insights backend plugin. If you are unable to install the Insights backend at this time, you can add this configuration to temporarily keep proxy-based event forwarding:
The Soundcheck entity card can now accept a custom title.
Set this in your EntityPage.tsx file as a property of the EntitySoundcheckCard:
<EntitySoundcheckCard title="My Custom Title" />
Added operators supporting comparison of semantic versions.
Facts submitted to the /facts endpoint may now be cached by providing a cache configuration
Fact timestamps are now optional, defaulting to submission time.
Added Soundcheck / Tech Insights integration, allowing the use of Tech Insight facts from within Soundcheck.
Change
Made improvements to the loading of the overview page table. The table can now support the display of more components. We made this change so that the overview page would be more performant for teams that own a large number of components.
Fixed
Fixed issue where the Learn More URL was not being rendered.
Removed extra scrollbars from the Soundcheck overview page.
Resolved an issue with checks executed against multiple entities. Before, if multiple entities relied on a single fact collector, sometimes the results would not be reported correctly.
Fixed 401 error when fetching entities from the catalog with authentication middleware. This was preventing the SoundCheck overview from loading, if an authentication middleware was used.
Resolved an issue with the Soundcheck fact store that caused records to be re-inserted instead of updated. This caused the Soundcheck database to grow for no reason.
Resolved browser warnings on the overview page.
Updated styling to resolve misaligned borders for the tables on the overview page.
Resolved an issue with the validation of facts submitted to the /facts endpoint.
As of version 0.9.0, Skill Exchange no longer requires a Docker service backend to operate, and replaces it with the @spotify/backstage-plugin-skill-exchange-backend plugin. This greatly simplifying the installation and maintenance of the Skill Exchange plugin. After updating to this version you'll be able to safely remove the Docker service and its containers. Migration of the existing data is possible by configuring the backend plugin to connect to the existing database used by the Docker service. For more information about this and how to upgrade, please refer to the migration section of the Skill Exchange plugin. The Docker backend service is now deprecated, and support will cease with the next version. If you'd like to opt out of this update and keep using an external Docker service for the time being, you can do so by following these configuration instructions.
Filtering in the search dropdowns for Embeds and Mentorships is now case-insensitive.
Prevent empty searches in home, embeds, mentorships and hacks.
Improved highlighting of invalid media fields in the Hack form for better understandability.
The "Interested in Contributing" button is now hidden on the details page for Adoptable hacks that haven't been claimed yet.
Stop error message when using filter dropdown for Skill Exchange posts in development environment.
Fixed
Fixed a bug with adding or searching for a custom skill containing the letter E or M.
Fixed a bug where empty skill names were allowed as custom skills.
Fixed a stale cache issue when bookmarking Embeds and Mentorships.
Fixed a bug that would cause an error to appear when a user edited their skills.
Added a virtualizeOverviewPage configuration option to only render parts of the Soundcheck overview page that are in-view. This improves performance for teams that have a large amount of entities.
To enable this option, add the configuration to your app-config.yaml:
soundcheck:
virtualizeOverviewPage: true
Added ability to filter entity types out of the Soundcheck overview page if they have no associated entities.
For example in the screenshot below, the fictional team Backstage does not have any Libraries associated with it and we do not show the tab in soundcheck
Program descriptions now support markdown content.
Added the Soundcheck Fact Framework, including support for fact collection and check execution. See the README for additional details.
Added SoundcheckBuilder which simplifies wiring up soundcheck-backend.
Added GitHub integration for fact extraction from GitHub repositories. See the modules README for additional details, including configuration details.
Added SCM module for out-of-the-box third party integration with select common source control management providers.
Initial release of soundcheck-client. Provides a FactsApi for submitting facts to soundcheck as well as a FactsClient which implements the API and which can be used to submit facts to a soundcheck instance.
Change
Cleaned up some unnecessary output in published packages.
Added Fact Framework utilities shared between Soundcheck backend and frontend.
Updated User and Team dropdown fields in Hacks and Embed forms to use the Catalog API for finding entities, rather than the Search API. This means search indexing no longer needs to be enabled to create new posts.
Fixed
Fixed routing issues where users cannot create or view Hack events.
The role’s member table now shows the namespace of the members if it differs from the default namespace (following the same pattern as the members search dropdown and catalog page).
Added automatic sorting for the members table by type, namespace, and alphabetically, rather than by order added.
Soundcheck now returns an error if a check result with an invalidly formatted entity reference is submitted to the /results endpoint. Read more about this new feature.