TypeSpec Assessment

3 TypeSpec changes for RecoveryServices and RecoveryServicesBackup

TypeSpec source diff: 519e87e016492a37ce9ea6ac0fdf80d26767f47d → efe76fb07ac03d9c54e2c64de15ef3ff90fc4030

Preview NoticeThe TypeSpec Assessment Assistant is in preview; official validation and review remain the source of truth.

The TypeSpec Assessment Assistant is currently in preview. Its goal is to help service developers build confidence earlier in the TypeSpec authoring workflow by providing contextual analysis, risk identification, and guidance on potential downstream impacts.

This report is intended as a review reference and learning aid only. It does not replace official ARM API, Azure API Stewardship, Azure Breaking Change reviews, and should not be treated as authoritative review feedback or approval for specification changes. Official validation tools, generated artifacts, and reviewer feedback remain the source of truth for merge and release decisions.

Downstream breaking changes

Method impact and affected intents at a glance; expand for before/after evidence.

bmsPrepareDataMoveConfirmed SDK type finding retained without a deterministic SDK method mapping.
Method mapping unavailable

bmsPrepareDataMove

BackupResourceStorageConfigsNonCRR.bmsPrepareDataMove

Precise method path, location and baseline/target role unavailable. Aggregate root locations are not method-specific evidence.

Contract areaBeforeAfter
SDK type contractbmsPrepareDataMove
Existing Go SDK client placement remains stable.
Go is newly excluded from the client-location customization for BackupResourceStorageConfigsNonCRR.bmsPrepareDataMove.
Why this is breaking: Go no longer applies the bmsPrepareDataMove client-location override, so existing Go callers may need to obtain the method from a different generated client.
bmsTriggerDataMoveConfirmed SDK type finding retained without a deterministic SDK method mapping.
Method mapping unavailable

bmsTriggerDataMove

BackupResourceStorageConfigsNonCRR.bmsTriggerDataMove

Precise method path, location and baseline/target role unavailable. Aggregate root locations are not method-specific evidence.

Contract areaBeforeAfter
SDK type contractbmsTriggerDataMove
Existing Go SDK client placement remains stable.
Go is newly excluded from the client-location customization for BackupResourceStorageConfigsNonCRR.bmsTriggerDataMove.
Why this is breaking: Go no longer applies the bmsTriggerDataMove client-location override, so existing Go callers may need to obtain the method from a different generated client.
getOperationStatusConfirmed SDK type finding retained without a deterministic SDK method mapping.
Method mapping unavailable

getOperationStatus

BackupResourceConfigOperationStatuses.getOperationStatus

Precise method path, location and baseline/target role unavailable. Aggregate root locations are not method-specific evidence.

Contract areaBeforeAfter
SDK type contractgetOperationStatus
Existing Go SDK client placement remains stable.
Go is newly excluded from the client-location customization for BackupResourceConfigOperationStatuses.getOperationStatus.
Why this is breaking: Go no longer applies the getOperationStatus client-location override, so existing Go callers may need to obtain the method from a different generated client.
moveRecoveryPointConfirmed SDK type finding retained without a deterministic SDK method mapping.
Method mapping unavailable

moveRecoveryPoint

RecoveryPoints.moveRecoveryPoint

Precise method path, location and baseline/target role unavailable. Aggregate root locations are not method-specific evidence.

Contract areaBeforeAfter
SDK type contractmoveRecoveryPoint
Existing Go SDK client placement remains stable.
Go is newly excluded from the client-location customization for RecoveryPoints.moveRecoveryPoint.
Why this is breaking: Go no longer applies the moveRecoveryPoint client-location override, so existing Go callers may need to obtain the method from a different generated client.

Semantic intents

Impact links are visible at a glance; expand for changed TypeSpec source, followed by affected operations.

Publish a new API versionCarries 24 existing operations into the new API version. This publication intent is reported deterministically and is not used for inference, guideline findings, or breaking-change relationships.
modify
Changed TypeSpec source (3)
specification/recoveryservices/resource-manager/Microsoft.RecoveryServices/RecoveryServices/main.tsp
    * The 2026-01-01 API version.
    */
   v2026_01_01: "2026-01-01",
+
+  /**
+   * The 2026-02-01 API version.
+   */
+  v2026_02_01: "2026-02-01",
 }
 
 interface Operations
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp
  * Threat status of the container
  */
 @added(Versions.v2026_01_31_preview)
+@removed(Versions.v2026_02_01)
 union SourceSideScanStatus {
   string,
 
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp
  * Threat summary for the container
  */
 @added(Versions.v2026_01_31_preview)
+@removed(Versions.v2026_02_01)
 union SourceSideScanSummary {
   string,
 
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp
  * Source side threat information
  */
 @added(Versions.v2026_01_31_preview)
+@removed(Versions.v2026_02_01)
 model SourceSideScanInfo {
   /**
    * Threat status of the container
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp
  * Threat status of the recovery point
  */
 @added(Versions.v2026_01_31_preview)
+@removed(Versions.v2026_02_01)
 union ThreatStatus {
   string,
 
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp
  * Threat Status Types
  */
 @added(Versions.v2026_01_31_preview)
+@removed(Versions.v2026_02_01)
 union ThreatState {
   string,
 
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp
  * Threat Severity Types
  */
 @added(Versions.v2026_01_31_preview)
+@removed(Versions.v2026_02_01)
 union ThreatSeverity {
   string,
 
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp
  * Recovery Point Threat information
  */
 @added(Versions.v2026_01_31_preview)
+@removed(Versions.v2026_02_01)
 model ThreatInfo {
   /**
    * Threat Subject
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp
  * Type of the protection policy
  */
 @added(Versions.v2026_01_31_preview)
+@removed(Versions.v2026_02_01)
 union VMWorkloadPolicyType {
   string,
 
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp
  * Protection type in case protected as part of a parent.
  */
 @added(Versions.v2026_01_31_preview)
+@removed(Versions.v2026_02_01)
 union ProtectionLevel {
   string,
 
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp
  * The state of instance protection.
  */
 @added(Versions.v2026_01_31_preview)
+@removed(Versions.v2026_02_01)
 union InstanceProtectionReadiness {
   string,
 
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp
 
   /** Snapshot restore point type */
   @added(Versions.v2026_01_31_preview)
+  @removed(Versions.v2026_02_01)
   Snapshot: "Snapshot",
 
   /** Full, differential, and snapshot restore point types */
   @added(Versions.v2026_01_31_preview)
+  @removed(Versions.v2026_02_01)
   FullDifferentialAndSnapshot: "FullDifferentialAndSnapshot",
 }
 
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp
 
   /** HANA scale-out container type */
   @added(Versions.v2026_01_31_preview)
+  @removed(Versions.v2026_02_01)
   HanaScaleoutContainer: "HanaScaleoutContainer",
 }
 
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp
    * Source side threat information
    */
   @added(Versions.v2026_01_31_preview)
+  @removed(Versions.v2026_02_01)
   sourceSideScanInfo?: SourceSideScanInfo;
 }
 
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp
    * Threat status of the recovery point
    */
   @added(Versions.v2026_01_31_preview)
+  @removed(Versions.v2026_02_01)
   threatStatus?: ThreatStatus;
 
   /**
    * Recovery point threat information.
    */
   @added(Versions.v2026_01_31_preview)
+  @removed(Versions.v2026_02_01)
   @identifiers(#[])
   threatInfo?: ThreatInfo[];
 }
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp
  * Patch Request content to update recovery point for given RecoveryPointId
  */
 @added(Versions.v2026_01_31_preview)
+@removed(Versions.v2026_02_01)
 model UpdateRecoveryPointRequest {
   /**
    * Resource properties.
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp
  * Recovery Point Contract for Update Recovery Point API.
  */
 @added(Versions.v2026_01_31_preview)
+@removed(Versions.v2026_02_01)
 model PatchRecoveryPointInput {
   /**
    * Properties of Recovery Point
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp
  * Recovery Point Properties Contract for Update Recovery Point API.
  */
 @added(Versions.v2026_01_31_preview)
+@removed(Versions.v2026_02_01)
 model PatchRecoveryPointPropertiesInput {
   /**
    * Expiry time of Recovery Point in UTC.
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp
    * Type of the protection policy
    */
   @added(Versions.v2026_01_31_preview)
+  @removed(Versions.v2026_02_01)
   vmWorkloadPolicyType?: VMWorkloadPolicyType;
 
   /**
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp
    * Name of the parent protected item (e.g., SQL Instance name) when this database is protected as part of a parent.
    */
   @added(Versions.v2026_01_31_preview)
+  @removed(Versions.v2026_02_01)
   parentProtectedItem?: string;
 
   /**
    * Protection type in case protected as part of a parent.
    */
   @added(Versions.v2026_01_31_preview)
+  @removed(Versions.v2026_02_01)
   protectionLevel?: ProtectionLevel;
 }
 
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp
  */
 #suppress "@azure-tools/typespec-azure-core/casing-style" "Existing API uses SQL acronym in naming"
 @added(Versions.v2026_01_31_preview)
+@removed(Versions.v2026_02_01)
 model AzureVmWorkloadSQLInstanceProtectedItem extends ProtectedItem {
   /**
    * This property will be used as the discriminator for deciding the specific types in the polymorphic chain of types.
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp
    * List of databases included in recovery point.
    */
   @added(Versions.v2026_01_31_preview)
+  @removed(Versions.v2026_02_01)
   @identifiers(#[])
   includedDatabases?: DatabaseInRP[];
 }
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp
    */
   #suppress "@azure-tools/typespec-azure-core/casing-style" "Preserving existing API naming convention from prior swagger versions"
   @added(Versions.v2026_01_31_preview)
+  @removed(Versions.v2026_02_01)
   baseSnapshotRPId?: string;
 
   /**
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp
    */
   #suppress "@azure-tools/typespec-azure-core/casing-style" "Preserving existing API naming convention from prior swagger versions"
   @added(Versions.v2026_01_31_preview)
+  @removed(Versions.v2026_02_01)
   baseRPDatasourceId?: string;
 
   /**
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp
    */
   #suppress "@azure-tools/typespec-azure-core/casing-style" "Preserving existing API naming convention from prior swagger versions"
   @added(Versions.v2026_01_31_preview)
+  @removed(Versions.v2026_02_01)
   getLatestRPOnly?: boolean;
 }
 
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp
  */
 #suppress "@azure-tools/typespec-azure-core/casing-style" "Preserving original API naming convention"
 @added(Versions.v2026_01_31_preview)
+@removed(Versions.v2026_02_01)
 model DatabaseInRP {
   /**
    * Datasource Id for the database.
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp
  */
 #suppress "@azure-tools/typespec-azure-core/casing-style" "Existing API uses SAP acronym in naming"
 @added(Versions.v2026_01_31_preview)
+@removed(Versions.v2026_02_01)
 model AzureVmWorkloadSAPHanaScaleoutProtectableItem
   extends WorkloadProtectableItem {
   /**
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/main.tsp
    * The 2026-01-31-preview API version.
    */
   v2026_01_31_preview: "2026-01-31-preview",
+
+  /**
+   * The 2026-02-01 API version.
+   */
+  v2026_02_01: "2026-02-01",
 }
 
 interface Operations

specification/recoveryservices/resource-manager/Microsoft.RecoveryServices/RecoveryServices/main.tsp:37, specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp:267, specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/main.tsp:43

Affected operations (24)

Showing 10 operation cards; the remaining 14 are listed below.

DeletedVaults_GetGET/subscriptions/{subscriptionId}/providers/Microsoft.RecoveryServices/locations/{location}/deletedVaults/{deletedVaultName}2026-02-01

HTTP signature and represented payload contract unchanged.

DeletedVaults_GetOperationStatusGET/subscriptions/{subscriptionId}/providers/Microsoft.RecoveryServices/locations/{location}/deletedVaults/{deletedVaultName}/operations/{operationId}2026-02-01

HTTP signature and represented payload contract unchanged.

DeletedVaults_ListBySubscriptionIdGET/subscriptions/{subscriptionId}/providers/Microsoft.RecoveryServices/locations/{location}/deletedVaults2026-02-01

HTTP signature and represented payload contract unchanged.

DeletedVaults_UndeletePOST/subscriptions/{subscriptionId}/providers/Microsoft.RecoveryServices/locations/{location}/deletedVaults/{deletedVaultName}/undelete2026-02-01

HTTP signature and represented payload contract unchanged.

GetOperationResultGET/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/operationResults/{operationId}2026-02-01

HTTP signature and represented payload contract unchanged.

GetOperationStatusGET/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/operationStatus/{operationId}2026-02-01

HTTP signature and represented payload contract unchanged.

Operations_ListGET/providers/Microsoft.RecoveryServices/operations2026-02-01

HTTP signature and represented payload contract unchanged.

PrivateLinkResources_GetGET/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/privateLinkResources/{privateLinkResourceName}2026-02-01

HTTP signature and represented payload contract unchanged.

PrivateLinkResources_ListGET/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/privateLinkResources2026-02-01

HTTP signature and represented payload contract unchanged.

RecoveryServices_CapabilitiesPOST/subscriptions/{subscriptionId}/providers/Microsoft.RecoveryServices/locations/{location}/capabilities2026-02-01

HTTP signature and represented payload contract unchanged.

Other affected operations (14)

RecoveryServices_CheckNameAvailability (POST, 2026-02-01); RegisteredIdentities_Delete (DELETE, 2026-02-01); ReplicationUsages_List (GET, 2026-02-01); Usages_ListByVaults (GET, 2026-02-01); VaultCertificates_Create (PUT, 2026-02-01); VaultExtendedInfo_CreateOrUpdate (PUT, 2026-02-01); VaultExtendedInfo_Get (GET, 2026-02-01); VaultExtendedInfo_Update (PATCH, 2026-02-01); Vaults_CreateOrUpdate (PUT, 2026-02-01); Vaults_Delete (DELETE, 2026-02-01); Vaults_Get (GET, 2026-02-01); Vaults_ListByResourceGroup (GET, 2026-02-01); Vaults_ListBySubscriptionId (GET, 2026-02-01); Vaults_Update (PATCH, 2026-02-01).

Exclude Go from four client-location customizationsExtends four `@@clientLocation` language filters from `!csharp` to `!csharp,!go`, preserving REST behavior while changing where the affected methods are generated in the Go SDK.
modify
Changed TypeSpec source (1)
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/back-compatible.tsp
 
 @@clientLocation(BackupResourceStorageConfigsNonCRR.bmsPrepareDataMove,
   Microsoft.RecoveryServices,
-  "!csharp"
+  "!csharp,!go"
 );
 @@clientLocation(BackupResourceStorageConfigsNonCRR.bmsTriggerDataMove,
   Microsoft.RecoveryServices,
-  "!csharp"
+  "!csharp,!go"
 );
 @@clientLocation(BackupResourceConfigOperationStatuses.getOperationStatus,
   Microsoft.RecoveryServices,
-  "!csharp"
+  "!csharp,!go"
 );
 
 @@clientLocation(PrivateEndpointConnectionResources.get,
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/back-compatible.tsp
 
 @@clientLocation(RecoveryPoints.moveRecoveryPoint,
   Microsoft.RecoveryServices,
-  "!csharp"
+  "!csharp,!go"
 );
 
 @@clientLocation(ProtectionContainersOperationGroup.refresh,

specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/back-compatible.tsp

Affected operations (0)

No directly affected REST operation.

Remove the recovery-point update operation in 2026-02-01Applies `@removed(Versions.v2026_02_01)` to `RecoveryPoints.update`, excluding the operation from the new stable API version while retaining it in earlier versions.
modify
Changed TypeSpec source (1)
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/RecoveryPointResource.tsp
    */
   #suppress "@azure-tools/typespec-azure-resource-manager/arm-resource-patch" "Recovery point updates use UpdateRecoveryPointRequest model which does not include tags property"
   @added(Versions.v2026_01_31_preview)
+  @removed(Versions.v2026_02_01)
   @patch(#{ implicitOptionality: true })
   update is ArmCustomPatchSync<
     RecoveryPointResource,

specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/RecoveryPointResource.tsp:40

Affected operations (0)

No directly affected REST operation.

Azure Guidelines

Findings and affected intents at a glance; expand for expected guidance and actual changes.

2 of 2 semantic intents assessed · 4 documents selected

No Azure Guidelines findings.

No applicable guideline was found for: Exclude Go from four client-location customizations.

REST breaking changes

Operation impact and affected intents at a glance; expand for before/after evidence.

No confirmed REST breaking changes.

Documentation Completeness

Checks only whether newly added operation, model, enum, and interface declarations have a nonempty effective TypeSpec description.

0 findings · 0 declarations checked

Appendix

Potential limits

None

Projects and compiler status

ProjectModeBaseline commit@versionTarget commit@versionBaseline AutoRest / TCGCTarget AutoRest / TCGC
specification/recoveryservices/resource-manager/Microsoft.RecoveryServices/RecoveryServicesnew-api-versionefe76fb07ac03d9c54e2c64de15ef3ff90fc4030@2026-01-01
current · previous-latest-stable
efe76fb07ac03d9c54e2c64de15ef3ff90fc4030@2026-02-01
current · newest-added-version
succeeded / succeededsucceeded / succeeded
specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackupnew-api-versionefe76fb07ac03d9c54e2c64de15ef3ff90fc4030@2026-01-01
current · previous-latest-stable
efe76fb07ac03d9c54e2c64de15ef3ff90fc4030@2026-02-01
current · newest-added-version
succeeded / succeededsucceeded / succeeded

Pull request: Not available for this local pre-PR assessment.

Guidance fetched

Guidance coverage and retrieval evidence
{
  "status": "passed",
  "coverage": {
    "semanticIntentCount": 2,
    "assessedIntentCount": 2,
    "selectedDocumentCount": 4,
    "unassessedIntentIds": []
  },
  "sharedSearch": {
    "catalogRanking": [
      {
        "rank": 1,
        "catalogOrder": 1,
        "title": "Evolving APIs",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/versioning/06-evolving-apis/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 6
        },
        "selectionRationale": "Directly governs removing operations in a new version of an existing ARM API."
      },
      {
        "rank": 2,
        "catalogOrder": 2,
        "title": "Versioning overview",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/versioning/01-about-versioning/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 6
        },
        "selectionRationale": "Covers versioned ARM API evolution and versioning-decorator use."
      },
      {
        "rank": 3,
        "catalogOrder": 6,
        "title": "Add stable after stable",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/versioning/05-stable-after-stable/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 6
        },
        "selectionRationale": "Exactly matches the 2026-01-01 stable to 2026-02-01 stable transition."
      },
      {
        "rank": 4,
        "catalogOrder": 12,
        "title": "ARM resource operations",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/arm/resource-operations/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 6
        },
        "selectionRationale": "Covers ARM PATCH operation requirements and recommended templates."
      },
      {
        "rank": 5,
        "catalogOrder": 13,
        "title": "Azure.ResourceManager interface reference",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/libraries/azure-resource-manager/reference/interfaces/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 6
        },
        "selectionRationale": "Matches the changed ARM operation interface category."
      },
      {
        "rank": 6,
        "catalogOrder": 14,
        "title": "TypeSpec.Rest decorators",
        "canonicalUrl": "https://typespec.io/docs/libraries/rest/reference/decorators/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 6
        },
        "selectionRationale": "Matches operation decorators and resource-operation semantics."
      },
      {
        "rank": 7,
        "catalogOrder": 15,
        "title": "Azure.ResourceManager decorators",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/libraries/azure-resource-manager/reference/decorators/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 6
        },
        "selectionRationale": "Matches ARM operation decorators and the modified operation context."
      },
      {
        "rank": 8,
        "catalogOrder": 24,
        "title": "Decorators",
        "canonicalUrl": "https://typespec.io/docs/language-basics/decorators/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 6
        },
        "selectionRationale": "Matches the decorator-change category but is less specific than versioning guidance."
      },
      {
        "rank": 9,
        "catalogOrder": 25,
        "title": "Built-in decorators",
        "canonicalUrl": "https://typespec.io/docs/standard-library/built-in-decorators/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 6
        },
        "selectionRationale": "Matches standard decorator use but is less specific than the versioning documents."
      },
      {
        "rank": 10,
        "catalogOrder": 26,
        "title": "OpenAPI decorators",
        "canonicalUrl": "https://typespec.io/docs/libraries/openapi/reference/decorators/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 6
        },
        "selectionRationale": "Matches the broad decorator category but not the changed versioning decorator."
      },
      {
        "rank": 11,
        "catalogOrder": 27,
        "title": "Change provider namespace",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/arm/change-provider-namespace/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 6
        },
        "selectionRationale": "Matches ARM decorator usage, but no provider namespace changed."
      },
      {
        "rank": 12,
        "catalogOrder": 28,
        "title": "Azure Portal default experiences",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/azure-portal/default-experiences/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 6
        },
        "selectionRationale": "Matches ARM decorator usage, but no portal experience changed."
      },
      {
        "rank": 13,
        "catalogOrder": 3,
        "title": "Add preview after preview",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/versioning/02-preview-after-preview/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 0,
          "total": 5
        },
        "selectionRationale": "Matches ARM versioning but not the stable-to-stable transition."
      },
      {
        "rank": 14,
        "catalogOrder": 4,
        "title": "Add stable after preview",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/versioning/03-stable-after-preview/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 0,
          "total": 5
        },
        "selectionRationale": "Matches ARM versioning but the baseline selected for this change is stable."
      },
      {
        "rank": 15,
        "catalogOrder": 5,
        "title": "Add preview after stable",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/versioning/04-preview-after-stable/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 0,
          "total": 5
        },
        "selectionRationale": "Matches ARM versioning but the target version is stable."
      },
      {
        "rank": 16,
        "catalogOrder": 29,
        "title": "Content negotiation",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/azure-core/content-negotiation/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 3,
          "servicePlane": 0,
          "changeContext": 1,
          "total": 4
        },
        "selectionRationale": "Matches decorators and operations but targets data-plane content negotiation."
      },
      {
        "rank": 17,
        "catalogOrder": 7,
        "title": "ARM resource types and modeling",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/arm/resource-type/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 0,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 3
        },
        "selectionRationale": "Applies to the ARM service and modified resource operation but not specifically to removal/versioning."
      },
      {
        "rank": 18,
        "catalogOrder": 21,
        "title": "Models",
        "canonicalUrl": "https://typespec.io/docs/language-basics/models/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 0,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 3
        },
        "selectionRationale": "Applies generally to referenced ARM models, but no model declaration changed."
      },
      {
        "rank": 19,
        "catalogOrder": 22,
        "title": "Enums",
        "canonicalUrl": "https://typespec.io/docs/language-basics/enums/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 0,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 3
        },
        "selectionRationale": "Applies generally to ARM enums, but no enum declaration changed."
      },
      {
        "rank": 20,
        "catalogOrder": 23,
        "title": "Scalars",
        "canonicalUrl": "https://typespec.io/docs/language-basics/scalars/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 0,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 3
        },
        "selectionRationale": "Applies generally to ARM scalars, but no scalar declaration changed."
      },
      {
        "rank": 21,
        "catalogOrder": 8,
        "title": "Specific extension resource sample",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/samples/resource-manager/resource-types/specific-extension/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 0,
          "servicePlane": 2,
          "changeContext": 0,
          "total": 2
        },
        "selectionRationale": "Applies to ARM but no extension resource pattern changed."
      },
      {
        "rank": 22,
        "catalogOrder": 9,
        "title": "Private endpoints",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/arm/private-endpoints/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 0,
          "servicePlane": 2,
          "changeContext": 0,
          "total": 2
        },
        "selectionRationale": "Applies to ARM but no private endpoint construct changed."
      },
      {
        "rank": 23,
        "catalogOrder": 10,
        "title": "Private links",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/arm/private-links/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 0,
          "servicePlane": 2,
          "changeContext": 0,
          "total": 2
        },
        "selectionRationale": "Applies to ARM but no private link construct changed."
      },
      {
        "rank": 24,
        "catalogOrder": 11,
        "title": "Network security perimeter",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/arm/network-security-perimeter/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 0,
          "servicePlane": 2,
          "changeContext": 0,
          "total": 2
        },
        "selectionRationale": "Applies to ARM but no network security perimeter construct changed."
      },
      {
        "rank": 25,
        "catalogOrder": 16,
        "title": "ARM long-running operations",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/arm/long-running-operations/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 0,
          "servicePlane": 2,
          "changeContext": 0,
          "total": 2
        },
        "selectionRationale": "Applies to ARM but no long-running behavior changed."
      },
      {
        "rank": 26,
        "catalogOrder": 18,
        "title": "Azure.ResourceManager data types",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/libraries/azure-resource-manager/reference/data-types/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 0,
          "servicePlane": 2,
          "changeContext": 0,
          "total": 2
        },
        "selectionRationale": "Applies to ARM but no paging parameter or ARM data type changed."
      },
      {
        "rank": 27,
        "catalogOrder": 20,
        "title": "ARM common types",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/arm/add-common-types/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 0,
          "servicePlane": 2,
          "changeContext": 0,
          "total": 2
        },
        "selectionRationale": "Applies to ARM but no common type definition changed."
      },
      {
        "rank": 28,
        "catalogOrder": 30,
        "title": "Directives",
        "canonicalUrl": "https://typespec.io/docs/language-basics/directives/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 0,
          "servicePlane": 2,
          "changeContext": 0,
          "total": 2
        },
        "selectionRationale": "Applies across service planes, but no directive or suppression changed."
      },
      {
        "rank": 29,
        "catalogOrder": 17,
        "title": "Azure.Core long-running operations",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/azure-core/long-running-operations/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 0,
          "servicePlane": 0,
          "changeContext": 0,
          "total": 0
        },
        "selectionRationale": "No data-plane long-running operation changed."
      },
      {
        "rank": 30,
        "catalogOrder": 19,
        "title": "TypeSpec pagination",
        "canonicalUrl": "https://typespec.io/docs/standard-library/pagination/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 0,
          "servicePlane": 0,
          "changeContext": 0,
          "total": 0
        },
        "selectionRationale": "No data-plane paging construct changed."
      },
      {
        "rank": 31,
        "catalogOrder": 31,
        "title": "Azure Core `no-openapi` rule",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/libraries/azure-core/rules/no-openapi/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 0,
          "servicePlane": 0,
          "changeContext": 0,
          "total": 0
        },
        "selectionRationale": "No OpenAPI-specific decorator or suppression changed."
      }
    ],
    "documents": [
      {
        "rank": 1,
        "catalogOrder": 1,
        "title": "Evolving APIs",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/versioning/06-evolving-apis/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 6
        },
        "selectionRationale": "Directly governs removing operations in a new version of an existing ARM API.",
        "guidance": [
          {
            "section": "Removing models, properties, and operations",
            "excerpt": "To remove models, properties, or operations starting from a specific version, use the `@removed` decorator.",
            "queryTerms": [
              "@removed",
              "operation",
              "version"
            ],
            "examples": [],
            "applicableDeclarationIds": [
              "declaration-5e32102d56ca757f",
              "declaration-f2de9808ed873d0d"
            ]
          }
        ],
        "noRelevantGuidance": false,
        "retrievedAt": "2026-09-17T11:20:37.0825604Z",
        "contentHash": "sha256:0428372857524a5530236ee505534eab1eed3dca4d65727b3ea1b5aaa6046547"
      },
      {
        "rank": 2,
        "catalogOrder": 2,
        "title": "Versioning overview",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/versioning/01-about-versioning/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 6
        },
        "selectionRationale": "Covers versioned ARM API evolution and versioning-decorator use.",
        "guidance": [
          {
            "section": "About versioning",
            "excerpt": "TypeSpec uses a versioning library that models the changes in each new version of the API, rather than having a separate API description for each api-version.",
            "queryTerms": [
              "versioning library",
              "new version",
              "API changes"
            ],
            "examples": [],
            "applicableDeclarationIds": [
              "declaration-5e32102d56ca757f",
              "declaration-f2de9808ed873d0d"
            ]
          }
        ],
        "noRelevantGuidance": false,
        "retrievedAt": "2026-09-17T11:20:37.0825604Z",
        "contentHash": "sha256:23cdb92562954237e4e8808a7fccee81e4bde9a9611c0bd40945d5b1843a7605"
      },
      {
        "rank": 3,
        "catalogOrder": 6,
        "title": "Add stable after stable",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/versioning/05-stable-after-stable/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 6
        },
        "selectionRationale": "Exactly matches the 2026-01-01 stable to 2026-02-01 stable transition.",
        "guidance": [
          {
            "section": "Add a stable version after a stable version",
            "excerpt": "If any types are removed in this stable (unlikely) mark these with an `@removed` decorator referencing the new version",
            "queryTerms": [
              "stable",
              "@removed",
              "new version"
            ],
            "examples": [],
            "applicableDeclarationIds": [
              "declaration-5e32102d56ca757f",
              "declaration-f2de9808ed873d0d"
            ]
          }
        ],
        "noRelevantGuidance": false,
        "retrievedAt": "2026-09-17T11:20:37.0825604Z",
        "contentHash": "sha256:8b88854537eedc0535924be64376f1e9f8b98c88b1ff4240988061ddf05d96a6"
      },
      {
        "rank": 4,
        "catalogOrder": 12,
        "title": "ARM resource operations",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/arm/resource-operations/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 6
        },
        "selectionRationale": "Covers ARM PATCH operation requirements and recommended templates.",
        "guidance": [
          {
            "section": "Update (PATCH)",
            "excerpt": "The `ArmCustomPatch*` templates are the recommended choice for PATCH operations. They take the resource type and your custom PATCH request type as parameters, giving you full control over the PATCH schema.",
            "queryTerms": [
              "PATCH",
              "update",
              "ArmCustomPatch"
            ],
            "examples": [],
            "applicableDeclarationIds": [
              "declaration-5e32102d56ca757f",
              "declaration-f2de9808ed873d0d"
            ]
          }
        ],
        "noRelevantGuidance": false,
        "retrievedAt": "2026-09-17T11:20:37.0825604Z",
        "contentHash": "sha256:1f056dc387128ebb8c2ebfe774071aed20bd2d9161e14f2bde73bffd83b6a98a"
      }
    ]
  },
  "intentAssessments": [
    {
      "semanticIntentId": "semantic-5912dfb5b267fac7",
      "decision": "no-applicable-guidance",
      "blockers": []
    },
    {
      "semanticIntentId": "semantic-7dfdeff150654217",
      "decision": "applicable-pass",
      "blockers": []
    }
  ],
  "retrievalFailures": [],
  "blockers": []
}

Changed files

  • specification/recoveryservices/resource-manager/Microsoft.RecoveryServices/RecoveryServices/main.tsp (committed)
  • specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/back-compatible.tsp (committed)
  • specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/main.tsp (committed)
  • specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/models.tsp (committed)
  • specification/recoveryservicesbackup/resource-manager/Microsoft.RecoveryServices/RecoveryServicesBackup/RecoveryPointResource.tsp (committed)

Timing and model input

{
  "timings": {
    "metadataMs": 952,
    "fetchMs": 115,
    "scopeDiscoveryMs": 65,
    "setupExcludingFetchMs": 14702,
    "comparisonMs": 106,
    "changeDiscoveryMs": 72,
    "workspacePreparationMs": 13123,
    "projectDiscoveryMs": 209,
    "totalMs": 110804,
    "semanticAnalysisMs": 3592,
    "restAnalysisMs": 77,
    "downstreamAnalysisMs": 665,
    "documentQualityAnalysisMs": 1
  },
  "inputAccounting": {
    "budgetTier": "small",
    "budgetBytes": 131072,
    "bytes": 11029,
    "estimatedTokens": 2758,
    "retained": {
      "evidenceSets": 3,
      "facts": 0,
      "semanticReviewUnits": 2,
      "restCandidates": 0,
      "downstreamCandidates": 0,
      "downstreamRootCauses": 0,
      "complianceSearchRequests": 2,
      "inferenceRequests": 2
    },
    "omittedRedundant": {
      "rawEmitterArtifacts": true,
      "compilerLogs": true,
      "unchangedInventories": true,
      "unreferencedFacts": true,
      "unreferencedDeterministicFacts": true,
      "sourceChanges": true,
      "repeatedDeclarationIds": true,
      "repeatedReviewUnitEvidence": true
    },
    "inference": {
      "requestCount": 2,
      "inferredCandidateCount": 4,
      "noImpactCount": 0,
      "blockedCount": 0
    },
    "compliance": {
      "catalogEntriesScored": 31,
      "documentsFetched": 4,
      "documentBytesFetched": 588,
      "guidanceExcerptsRetained": 4,
      "guidanceExcerptBytesRetained": 588
    }
  }
}

Provenance: model-input.json, dimensions/document-quality-input.json, inference.json, compliance-search-evidence.json, assessment-judgment.json, preparation-manifest.json