Add "restore version as new latest" with deprecation support for AI Catalog items
## Summary Allow item owners to restore an older released version as a new latest version, with the ability to mark the replaced version as deprecated. Deprecated versions are excluded from consumer version selection. Parent issue: gitlab-org/gitlab#596982 ## Changes ### DB migration - Add `deprecated` boolean column to `ai_catalog_item_versions` (default: `false`, not null) ### Model (`ee/app/models/ai/catalog/item_version.rb`) - Add scopes: `not_deprecated`, `released` - Allow updating `deprecated` on released versions (bypass `validate_readonly` for this field) ### GraphQL schema - Expose `deprecated` field on `VersionInterface` - Add optional `exclude_deprecated` filter to `ItemVersionsFinder` ### New service: `Ai::Catalog::ItemVersions::RestoreService` - Copy `definition` and `schema_version` from source version into a new version record - Bump version number (minor) from latest released - Set `release_date`, `created_by`, update `latest_version` and `latest_released_version` on item - Optionally mark current latest as deprecated (default: true) - Wrap in transaction ### New GraphQL mutation: `AiCatalogItemVersionRestore` - Arguments: `id` (version to restore from), `deprecate_current` (boolean, default true) - Returns: newly created `ItemVersion` - Authorization: `admin_ai_catalog_item` (Maintainer/Owner of owning project) ### Audit events - Add relevant audit events
issue