Implemented transparent hash version upgrade mechanism that automatically detects and upgrades outdated pipeline version hashes during comparison operations without persisting changes.
Implemented VersionedHash class to provide structured, type-safe access to version hash strings throughout the platform, improving code maintainability and enabling future hash algorithm upgrades.
Removed the pipeline_version_created audit event in favor of the existing pipeline_updated event, which already tracks pipeline version creation.
Added tristate checkboxes to category rows in the custom roles permissions table, allowing users to quickly select or deselect all permissions within a category.
Consolidated Members, Teams, and Collaborators pages into the Access Control page as tabs with pagination support for Teams list and empty-state components.
Added admin endpoint GET /api/admin/orgs/{orgId}/roles to list organization roles.
Added endpoint GET /orgs/{orgId}/users/{userId}/roles to list user roles in organization.
Added maxCustomRolesPerOrg quota definition and enforcement, limiting the number of custom roles per organization.
Fixed Open in new tab functionality for workflow reports by implementing a separate route with report path passed as query parameter.
Fixed step status indication mechanism in launch forms to properly track all controls registered to a section, including those registered after initial creation.
Fixed Data Explorer path decoding to be null-safe, preventing test failures.
Fixed an issue causing custom pipeline info fetch error messages to be incorrectly removed when selecting the same value again in pipeline, revision, or main script fields.
Fixed an issue causing the Launchpad to display empty optimization buttons when optimization status is not set.
Prevent conda Studios from auto-starting when the organization exceeds Studio session limits.
Temporarily disabled Data Explorer integration test that relies on Google Cloud public bucket after access to the bucket changed.