TypeSpec Assessment

3 TypeSpec changes for Chaos

TypeSpec source diff: 232dfa71843fd574be49ba91a918ee7d3e7bfec3 → a3b8933eb6ce030faa6abc6d354fc97e30f02e96

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.

Azure Guidelines

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

3 of 3 semantic intents assessed · 4 documents selected

LRO behavior changes in an existing API versionThe LRO modeling and no-openapi requirements are satisfied, but the existing version is modified in place despite generated SDK invocation and result-contract breaks.
failed

Expected

Use Azure LRO decorators and correct final results instead of raw OpenAPI extensions, and introduce caller-visible basic-to-LRO operation changes through API versioning.

ARM long-running operations — ARM long-running operation templates
ARM long-running (asynchronous) operation templates allow you to customize the LRO headers returned in the initial response, while retaining the correct `finalResult` value that matches the result of the operation.
Azure Core `no-openapi` rule — Azure Core no-openapi rule
Raw OpenAPI decorators change the OpenAPI output without informing other emitters such as SDKs, so SDKs can misrepresent the wire API.
Evolving APIs — Evolving APIs
Versioning allows you to evolve your API without breaking existing clients. By using versioning decorators, you can specify when resources, operations, or properties are added, removed, or changed.

Actual

The change correctly replaces raw OpenAPI LRO extensions with Azure.Core decorators, but changes execute and cancel from basic methods to Location-polled LROs within the existing 2026-05-01-preview API version.

specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioConfiguration.tsp:22-84, specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioConfiguration.tsp:48-55, specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioConfiguration.tsp:57-65, specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioConfiguration.tsp:67-74, specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioConfiguration.tsp:76-83, specification/chaos/resource-manager/Microsoft.Chaos/Chaos/workspace.tsp:17-79, specification/chaos/resource-manager/Microsoft.Chaos/Chaos/workspace.tsp:71-78, specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioRun.models.tsp:15-41, specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioRun.models.tsp:23-27, specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioRun.models.tsp:29-35, specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioRun.models.tsp:37-40, specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioRun.tsp:16-53, specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioRun.tsp:20-34, specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioRun.tsp:34-36, specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioRun.tsp:38-40, specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioRun.tsp:44-52, specification/chaos/resource-manager/Microsoft.Chaos/Chaos/lro-helpers.tsp:46-81, specification/chaos/resource-manager/Microsoft.Chaos/Chaos/lro-helpers.tsp:74-74

specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioConfiguration.tsp:22-84
22-  #suppress "@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes" "LRO POST returns 202 with Location header for polling; final result obtained by polling the Location URL"
23-  @pollingOperation(ScenarioRuns.get)
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioConfiguration.tsp:22-84
22-  #suppress "@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes" "LRO POST returns 202 with Location header for polling; final result obtained by polling the Location URL"
23-  @pollingOperation(ScenarioRuns.get)
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioConfiguration.tsp:22-84
22-  #suppress "@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes" "LRO POST returns 202 with Location header for polling; final result obtained by polling the Location URL"
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioConfiguration.tsp:22-84
22-  #suppress "@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes" "LRO POST returns 202 with Location header for polling; final result obtained by polling the Location URL"
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/workspace.tsp:17-79
17-  #suppress "@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes" "Async LRO POST returning 202 + Location, not a synchronous POST"
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioRun.models.tsp:15-41
15+using TypeSpec.Http;
16+/**
17+ * Indicates the scenario run is still in progress. Clients polling via the
18+ * Location header should continue polling until a 200 response is returned.
19+ * The body reflects the current run state at the time of the poll.
20+ */
21+model ScenarioRunInProgressResponse {
22+  ...AcceptedResponse;
23+
24+  /**
25+   * The URL where the status of the long-running operation can be polled.
26+   */
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioRun.tsp:16-53
16-import "@typespec/openapi";
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioRun.tsp:16-53
16-using TypeSpec.OpenAPI;
17+@removed(Microsoft.Chaos.Versions.v2025_01_01)
18+   *
19+   * This endpoint is also the polling target for ScenarioConfigurations.execute
20+   * and ScenarioRuns.cancel (final-state-via: location). While the run is in
21+   * progress the service returns 202 with a Location header pointing back to
22+   * this URL; clients must keep polling until they receive 200, which carries
23+   * the final ScenarioRun body.
24-  #suppress "@azure-tools/typespec-azure-resource-manager/arm-resource-operation" "LRO polling endpoint that returns body in both 200 and 202"
25-  #suppress "@azure-tools/typespec-azure-resource-manager/no-response-body" "LRO polling endpoint returns body in 202 to reflect current status"
26-  #suppress "@azure-tools/typespec-azure-core/polling-operation-no-status-monitor" "LRO uses final-state-via:location pattern, not status monitor"
27-  @summary("Get a scenario run.")
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioRun.tsp:16-53
16-  #suppress "@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes" "LRO POST returns 202 with Location header for polling; final result obtained by polling the Location URL"
17-  #suppress "@azure-tools/typespec-azure-core/polling-operation-no-status-monitor" "LRO uses final-state-via:location pattern"
18-  @pollingOperation(ScenarioRuns.get)
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/lro-helpers.tsp:46-81
46-import "@typespec/openapi";
47-using TypeSpec.OpenAPI;
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/lro-helpers.tsp:46-81
46-#suppress "@azure-tools/typespec-azure-core/no-openapi" "Required for LRO extensions in OpenAPI output"
47-@extension("x-ms-long-running-operation", true)
48-@extension(
49-  "x-ms-long-running-operation-options",
50-  #{ `final-state-via`: "location" }
51-)
52+@Azure.Core.useFinalStateVia("location")
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/lro-helpers.tsp:46-81
46-#suppress "@azure-tools/typespec-azure-core/no-openapi" "Required for LRO extensions in OpenAPI output"
47-@extension("x-ms-long-running-operation", true)
48-@extension(
49-  "x-ms-long-running-operation-options",
50-  #{ `final-state-via`: "location" }
51-)
52+@Azure.Core.useFinalStateVia("location")
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/lro-helpers.tsp:46-81
46-#suppress "@azure-tools/typespec-azure-core/no-openapi" "Required for LRO extensions in OpenAPI output"
47-@extension("x-ms-long-running-operation", true)
48-@extension(
49-  "x-ms-long-running-operation-options",
50-  #{ `final-state-via`: "location" }
51-)
52+@Azure.Core.useFinalStateVia("location")

No applicable guideline was found for: Use ARM resource-identifier scalars for resource ID propertiesRename fifteen generated C# SDK symbols.

Downstream breaking changes

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

ScenarioConfigurations.executeThe normalized SDK method contract changes directly.
Direct method change

Target normalized SDK method: Microsoft.Chaos.ScenarioConfigurations.execute

Contract areaBeforeAfter
SDK methodMethod kindScenarioConfigurations.execute changes from a basic method to an LRO method, changing invocation and result consumption for existing SDK callers.
basic
lro
SDK methodLong-running behaviorScenarioConfigurations.execute gains Location-based polling and completion behavior, requiring existing callers to handle a long-running operation.
none
{
  "finalStateVia": "location",
  "logicalResult": "Microsoft.Chaos.ScenarioRun",
  "pollingStep": "model",
  "finalStep": "finalOperationLink",
  "statusMonitorStep": "nextOperationLink"
}
SDK methodReturn type (body output)
void
ScenarioRun
Why this is breaking:
  • ScenarioConfigurations.execute changes from no SDK result to returning ScenarioRun through an LRO, so existing callers must adopt a polling result contract.
  • ScenarioConfigurations.execute changes from a basic method to an LRO method, changing invocation and result consumption for existing SDK callers.
  • ScenarioConfigurations.execute gains Location-based polling and completion behavior, requiring existing callers to handle a long-running operation.

Language-neutral TCGC evidence is shown; generated language signatures are not fabricated.

ScenarioRuns.cancelThe normalized SDK method contract changes directly.
Direct method change

Target normalized SDK method: Microsoft.Chaos.ScenarioRuns.cancel

Contract areaBeforeAfter
SDK methodLong-running behaviorScenarioRuns.cancel gains Location-based polling and completion behavior, requiring existing callers to handle a long-running operation.
none
{
  "finalStateVia": "location",
  "logicalResult": "Microsoft.Chaos.ScenarioRun",
  "pollingStep": "model",
  "finalStep": "finalOperationLink",
  "statusMonitorStep": "nextOperationLink"
}
SDK methodMethod kindScenarioRuns.cancel changes from a basic method to an LRO method, changing invocation and result consumption for existing SDK callers.
basic
lro
SDK methodReturn type (body output)
void
ScenarioRun
Why this is breaking:
  • ScenarioRuns.cancel changes from no SDK result to returning ScenarioRun through an LRO, so existing callers must adopt a polling result contract.
  • ScenarioRuns.cancel gains Location-based polling and completion behavior, requiring existing callers to handle a long-running operation.
  • ScenarioRuns.cancel changes from a basic method to an LRO method, changing invocation and result consumption for existing SDK callers.

Language-neutral TCGC evidence is shown; generated language signatures are not fabricated.

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

ParameterType

ParameterType

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

Contract areaBeforeAfter
SDK type contractParameterType
Existing C# SDK type names remain stable.
C# renames ParameterType to ChaosScenarioParameterType.
Why this is breaking: C# changes ParameterType to ChaosScenarioParameterType, so existing source references must use the new type name.
ConfigurationFiltersConfirmed SDK type finding retained without a deterministic SDK method mapping.
Method mapping unavailable

ConfigurationFilters

ConfigurationFilters

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

Contract areaBeforeAfter
SDK type contractConfigurationFilters
Existing C# SDK type names remain stable.
C# renames ConfigurationFilters to ChaosScenarioConfigurationFilters.
Why this is breaking: C# changes ConfigurationFilters to ChaosScenarioConfigurationFilters, so existing source references must use the new type name.
PermissionsFixConfirmed SDK type finding retained without a deterministic SDK method mapping.
Method mapping unavailable

PermissionsFix

PermissionsFix

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

Contract areaBeforeAfter
SDK type contractPermissionsFix
Existing C# SDK type names remain stable.
C# renames PermissionsFix to ChaosPermissionsFixData.
Why this is breaking: C# changes PermissionsFix to ChaosPermissionsFixData, so existing source references must use the new type name.
ValidationConfirmed SDK type finding retained without a deterministic SDK method mapping.
Method mapping unavailable

Validation

Validation

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

Contract areaBeforeAfter
SDK type contractValidation
Existing C# SDK type names remain stable.
C# renames Validation to ChaosScenarioValidationData.
Why this is breaking: C# changes Validation to ChaosScenarioValidationData, so existing source references must use the new type name.
whatIfModeConfirmed SDK type finding retained without a deterministic SDK method mapping.
Method mapping unavailable

whatIfMode

PermissionsFixProperties.whatIfMode

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

Contract areaBeforeAfter
SDK type contractwhatIfMode
Existing C# SDK property names remain stable.
C# renames PermissionsFixProperties.whatIfMode to IsWhatIfMode.
Why this is breaking: C# changes PermissionsFixProperties.whatIfMode to IsWhatIfMode, so existing property references must use the new name.
ConfigurationExclusionsConfirmed SDK type finding retained without a deterministic SDK method mapping.
Method mapping unavailable

ConfigurationExclusions

ConfigurationExclusions

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

Contract areaBeforeAfter
SDK type contractConfigurationExclusions
Existing C# SDK type names remain stable.
C# renames ConfigurationExclusions to ChaosScenarioConfigurationExclusions.
Why this is breaking: C# changes ConfigurationExclusions to ChaosScenarioConfigurationExclusions, so existing source references must use the new type name.
requiredConfirmed SDK type finding retained without a deterministic SDK method mapping.
Method mapping unavailable

required

ScenarioParameter.required

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

Contract areaBeforeAfter
SDK type contractrequired
Existing C# SDK property names remain stable.
C# renames ScenarioParameter.required to IsRequired.
Why this is breaking: C# changes ScenarioParameter.required to IsRequired, so existing property references must use the new name.
WorkspaceEvaluationConfirmed SDK type finding retained without a deterministic SDK method mapping.
Method mapping unavailable

WorkspaceEvaluation

WorkspaceEvaluation

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

Contract areaBeforeAfter
SDK type contractWorkspaceEvaluation
Existing C# SDK type names remain stable.
C# renames WorkspaceEvaluation to ChaosWorkspaceEvaluationData.
Why this is breaking: C# changes WorkspaceEvaluation to ChaosWorkspaceEvaluationData, so existing source references must use the new type name.
PrivateAccessPropertiesConfirmed SDK type finding retained without a deterministic SDK method mapping.
Method mapping unavailable

PrivateAccessProperties

PrivateAccessProperties

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

Contract areaBeforeAfter
SDK type contractPrivateAccessProperties
Existing C# SDK type names remain stable.
C# renames PrivateAccessProperties to ChaosPrivateAccessProperties.
Why this is breaking: C# changes PrivateAccessProperties to ChaosPrivateAccessProperties, so existing source references must use the new type name.
PrivateAccessConfirmed SDK type finding retained without a deterministic SDK method mapping.
Method mapping unavailable

PrivateAccess

PrivateAccess

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

Contract areaBeforeAfter
SDK type contractPrivateAccess
Existing C# SDK type names remain stable.
C# renames PrivateAccess to ChaosPrivateAccess.
Why this is breaking: C# changes PrivateAccess to ChaosPrivateAccess, so existing source references must use the new type name.
OperationErrorConfirmed SDK type finding retained without a deterministic SDK method mapping.
Method mapping unavailable

OperationError

OperationError

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

Contract areaBeforeAfter
SDK type contractOperationError
Existing C# SDK type names remain stable.
C# renames OperationError to ChaosOperationError.
Why this is breaking: C# changes OperationError to ChaosOperationError, so existing source references must use the new type name.
RecommendationConfirmed SDK type finding retained without a deterministic SDK method mapping.
Method mapping unavailable

Recommendation

Recommendation

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

Contract areaBeforeAfter
SDK type contractRecommendation
Existing C# SDK type names remain stable.
C# renames Recommendation to ChaosScenarioRecommendation.
Why this is breaking: C# changes Recommendation to ChaosScenarioRecommendation, so existing source references must use the new type name.
whatIfConfirmed SDK type finding retained without a deterministic SDK method mapping.
Method mapping unavailable

whatIf

FixResourcePermissionsRequest.whatIf

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

Contract areaBeforeAfter
SDK type contractwhatIf
Existing C# SDK property names remain stable.
C# renames FixResourcePermissionsRequest.whatIf to IsWhatIf.
Why this is breaking: C# changes FixResourcePermissionsRequest.whatIf to IsWhatIf, so existing property references must use the new name.
PrivateAccessPatchConfirmed SDK type finding retained without a deterministic SDK method mapping.
Method mapping unavailable

PrivateAccessPatch

PrivateAccessPatch

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

Contract areaBeforeAfter
SDK type contractPrivateAccessPatch
Existing C# SDK type names remain stable.
C# renames PrivateAccessPatch to ChaosPrivateAccessPatch.
Why this is breaking: C# changes PrivateAccessPatch to ChaosPrivateAccessPatch, so existing source references must use the new type name.
DiscoveredResourceConfirmed SDK type finding retained without a deterministic SDK method mapping.
Method mapping unavailable

DiscoveredResource

DiscoveredResource

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

Contract areaBeforeAfter
SDK type contractDiscoveredResource
Existing C# SDK type names remain stable.
C# renames DiscoveredResource to ChaosDiscovered.
Why this is breaking: C# changes DiscoveredResource to ChaosDiscovered, so existing source references must use the new type name.

Semantic intents

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

Use ARM resource-identifier scalars for resource ID propertiesChanges five scenario-configuration resource ID properties from plain strings to `Azure.Core.armResourceIdentifier` without changing their emitted wire contracts.
modify
Changed TypeSpec source (2)
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioConfiguration.models.tsp
    * The resource id for the affected resource.
    */
   @visibility(Lifecycle.Read)
-  resourceId: string;
+  resourceId: Azure.Core.armResourceIdentifier;
 
   /**
    * The missing permissions.
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioConfiguration.models.tsp
    * The resource id for the affected resource.
    */
   @visibility(Lifecycle.Read)
-  resourceId: string;
+  resourceId: Azure.Core.armResourceIdentifier;
 
   /**
    * The error code.
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioConfiguration.models.tsp
    * The target Azure resource ID.
    */
   @visibility(Lifecycle.Read)
-  targetResourceId: string;
+  targetResourceId: Azure.Core.armResourceIdentifier;
 
   /**
    * The managed identity principal ID.
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioConfiguration.models.tsp
    * The created role assignment resource ID (null if failed or what-if mode).
    */
   @visibility(Lifecycle.Read)
-  roleAssignmentId?: string;
+  roleAssignmentId?: Azure.Core.armResourceIdentifier;
 
   /**
    * Error details if the assignment failed.
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/workspaceEvaluation.models.tsp
    * The workspace ID this evaluation belongs to.
    */
   @visibility(Lifecycle.Read)
-  workspaceId: string;
+  workspaceId: Azure.Core.armResourceIdentifier;
 
   /**
    * The number of scenarios to evaluate.

specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioConfiguration.models.tsp:218, specification/chaos/resource-manager/Microsoft.Chaos/Chaos/workspaceEvaluation.models.tsp:29

Affected operations (0)

No directly affected REST operation.

modify
Changed TypeSpec source (1)
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/client.tsp
 @@clientName(Scenario, "ChaosScenario", "csharp");
 @@clientName(ScenarioRun, "ChaosScenarioRun", "csharp");
 @@clientName(ScenarioConfiguration, "ChaosScenarioConfiguration", "csharp");
+@@clientName(DiscoveredResource, "ChaosDiscovered", "csharp");
+@@clientName(PrivateAccess, "ChaosPrivateAccess", "csharp");
+@@clientName(PrivateAccessPatch, "ChaosPrivateAccessPatch", "csharp");
+@@clientName(PrivateAccessProperties, "ChaosPrivateAccessProperties", "csharp");
 @@clientName(ExperimentExecution, "ChaosExperimentExecution", "csharp");
 @@clientName(Experiment, "ChaosExperiment", "csharp");
 @@clientName(ExperimentExecution, "ChaosExperimentExecution", "csharp");
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/client.tsp
 @@clientName(Action, "ChaosAction", "csharp");
 @@clientName(ActionVersion, "ChaosActionVersion", "csharp");
 @@clientName(ActionKind, "ChaosActionKind", "csharp");
+@@clientName(
+  ConfigurationExclusions,
+  "ChaosScenarioConfigurationExclusions",
+  "csharp"
+);
+@@clientName(
+  ConfigurationFilters,
+  "ChaosScenarioConfigurationFilters",
+  "csharp"
+);
+@@clientName(OperationError, "ChaosOperationError", "csharp");
+@@clientName(ScenarioParameter.required, "IsRequired", "csharp");
+@@clientName(ParameterType, "ChaosScenarioParameterType", "csharp");
+@@clientName(FixResourcePermissionsRequest.whatIf, "IsWhatIf", "csharp");
+@@clientName(PermissionsFix, "ChaosPermissionsFixData", "csharp");
+@@clientName(PermissionsFixProperties.whatIfMode, "IsWhatIfMode", "csharp");
+@@clientName(Recommendation, "ChaosScenarioRecommendation", "csharp");
+@@clientName(Validation, "ChaosScenarioValidationData", "csharp");
+@@clientName(WorkspaceEvaluation, "ChaosWorkspaceEvaluationData", "csharp");
 @@clientName(
   ActionSupportedTargetType,
   "ChaosActionSupportedTargetType",

specification/chaos/resource-manager/Microsoft.Chaos/Chaos/client.tsp

Affected operations (0)

No directly affected REST operation.

Convert scenario execution and cancellation actions to Location-based LROsReworks scenario configuration execution and scenario run cancellation as Location-polled ARM long-running operations, replaces raw OpenAPI LRO extensions with Azure.Core decorators, and adds the in-progress response model.
modify
Changed TypeSpec source (5)
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioConfiguration.tsp
   /**
    * Execute the scenario execution with the given scenario configuration.
    */
-  #suppress "@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes" "LRO POST returns 202 with Location header for polling; final result obtained by polling the Location URL"
-  @pollingOperation(ScenarioRuns.get)
   execute is ArmResourceActionNoContentAsyncWithLocationResult<
     ScenarioConfiguration,
     void,
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioConfiguration.tsp
   /**
    * Cancel the currently running scenario execution.
    */
-  #suppress "@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes" "LRO POST returns 202 with Location header for polling; final result obtained by polling the Location URL"
   @removed(Microsoft.Chaos.Versions.v2026_05_01_preview)
-  @pollingOperation(ScenarioRuns.get)
   cancel is ArmResourceActionNoContentAsyncWithLocationResult<
     ScenarioConfiguration,
     void,
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioConfiguration.tsp
   /**
    * Validate the given scenario configuration.
    */
-  #suppress "@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes" "LRO POST returns 202 with Location header for polling; final result obtained by polling the Location URL"
   validate is ArmResourceActionNoContentAsyncWithLocationResult<
     ScenarioConfiguration,
     void,
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioConfiguration.tsp
   /**
    * Fixes resource permissions for the given scenario configuration.
    */
-  #suppress "@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes" "LRO POST returns 202 with Location header for polling; final result obtained by polling the Location URL"
   fixResourcePermissions is ArmResourceActionNoContentAsyncWithLocationResult<
     ScenarioConfiguration,
     FixResourcePermissionsRequest,
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/workspace.tsp
   /**
    * Refreshes recommendation status for all scenarios in a given workspace.
    */
-  #suppress "@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes" "Async LRO POST returning 202 + Location, not a synchronous POST"
   refreshRecommendations is ArmResourceActionNoContentAsyncWithLocationResult<
     Workspace,
     void,
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioRun.models.tsp
 import "./scenario.models.tsp";
 
 using TypeSpec.Rest;
+using TypeSpec.Http;
 using Azure.ResourceManager;
 using Azure.Core;
 using Azure.Core.Traits;
 
 namespace Microsoft.Chaos;
 
+/**
+ * Indicates the scenario run is still in progress. Clients polling via the
+ * Location header should continue polling until a 200 response is returned.
+ * The body reflects the current run state at the time of the poll.
+ */
+model ScenarioRunInProgressResponse {
+  ...AcceptedResponse;
+
+  /**
+   * The URL where the status of the long-running operation can be polled.
+   */
+  @header("Location")
+  location: url;
+
+  /**
+   * The number of seconds the client should wait before polling again.
+   */
+  @minValue(0)
+  @maxValue(2147483647)
+  @header("Retry-After")
+  retryAfter?: int32;
+
+  /**
+   * The current scenario run state at the time of the poll.
+   */
+  @bodyRoot body: ScenarioRun;
+}
+
 /**
  * Model that represents the scenario run.
  */
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioRun.tsp
 import "@azure-tools/typespec-azure-resource-manager";
 import "@typespec/rest";
 import "@typespec/http";
-import "@typespec/openapi";
 import "./scenarioRun.models.tsp";
 import "./lro-helpers.tsp";
 
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioRun.tsp
 using TypeSpec.Versioning;
 using TypeSpec.Http;
 using TypeSpec.Rest;
-using TypeSpec.OpenAPI;
 
 namespace Microsoft.Chaos;
 
 @added(Microsoft.Chaos.Versions.v2026_05_01_preview)
+@removed(Microsoft.Chaos.Versions.v2025_01_01)
 @armResourceOperations
 interface ScenarioRuns {
   /**
    * Get a scenario run.
+   *
+   * This endpoint is also the polling target for ScenarioConfigurations.execute
+   * and ScenarioRuns.cancel (final-state-via: location). While the run is in
+   * progress the service returns 202 with a Location header pointing back to
+   * this URL; clients must keep polling until they receive 200, which carries
+   * the final ScenarioRun body.
    */
-  #suppress "@azure-tools/typespec-azure-resource-manager/arm-resource-operation" "LRO polling endpoint that returns body in both 200 and 202"
-  #suppress "@azure-tools/typespec-azure-resource-manager/no-response-body" "LRO polling endpoint returns body in 202 to reflect current status"
-  #suppress "@azure-tools/typespec-azure-core/polling-operation-no-status-monitor" "LRO uses final-state-via:location pattern, not status monitor"
-  @summary("Get a scenario run.")
-  @autoRoute
-  @armResourceRead(ScenarioRun)
-  @get
-  get(...ResourceInstanceParameters<ScenarioRun>):
-    | ArmResponse<ScenarioRun>
-    | (AcceptedResponse & {
-        @doc("The Location header contains the URL where the status of the long running operation can be checked.")
-        @header("Location")
-        location: string;
-
-        @doc("The Retry-After header can indicate how long the client should wait before polling the operation status.")
-        @header("Retry-After")
-        retryAfter?: int32;
-
-        @bodyRoot body: ScenarioRun;
-      })
-    | ErrorResponse;
+  #suppress "@azure-tools/typespec-azure-resource-manager/arm-resource-operation" "LRO polling endpoint that returns body in both 200 and 202 responses."
+  #suppress "@azure-tools/typespec-azure-resource-manager/no-response-body" "LRO polling endpoint returns body in 202 to reflect the current run state."
+  get is ArmResourceRead<
+    ScenarioRun,
+    Response = ArmResponse<ScenarioRun> | ScenarioRunInProgressResponse
+  >;
 
   /**
    * Get a list of scenario runs.
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioRun.tsp
   /**
    * Cancel the currently running scenario execution.
    */
-  #suppress "@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes" "LRO POST returns 202 with Location header for polling; final result obtained by polling the Location URL"
-  #suppress "@azure-tools/typespec-azure-core/polling-operation-no-status-monitor" "LRO uses final-state-via:location pattern"
   @added(Microsoft.Chaos.Versions.v2026_05_01_preview)
-  @pollingOperation(ScenarioRuns.get)
   cancel is ArmResourceActionNoContentAsyncWithLocationResult<
     ScenarioRun,
     void,
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/lro-helpers.tsp
 import "@azure-tools/typespec-azure-resource-manager";
 import "@typespec/http";
 import "@typespec/rest";
-import "@typespec/openapi";
 
 using Azure.ResourceManager;
 using Azure.Core;
 using TypeSpec.Http;
 using TypeSpec.Rest;
-using TypeSpec.OpenAPI;
 
 namespace Microsoft.Chaos;
 
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/lro-helpers.tsp
 #suppress "@azure-tools/typespec-azure-core/documentation-required" "template"
 #suppress "@azure-tools/typespec-azure-resource-manager/arm-resource-operation" "template"
 #suppress "@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes" "Custom LRO operation with specific response codes"
-#suppress "@azure-tools/typespec-azure-core/no-openapi" "Required for LRO extensions in OpenAPI output"
 @autoRoute
 @armResourceAction(Resource)
 @post
-@extension("x-ms-long-running-operation", true)
-@extension(
-  "x-ms-long-running-operation-options",
-  #{ `final-state-via`: "location" }
-)
+@Azure.Core.useFinalStateVia("location")
 op ArmResourceActionAsyncWithLocation<
   Resource extends Azure.ResourceManager.Foundations.Resource,
   Request extends TypeSpec.Reflection.Model | void,
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/lro-helpers.tsp
 #suppress "@azure-tools/typespec-azure-core/documentation-required" "template"
 #suppress "@azure-tools/typespec-azure-resource-manager/arm-resource-operation" "template"
 #suppress "@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes" "Custom LRO operation with specific response codes"
-#suppress "@azure-tools/typespec-azure-core/no-openapi" "Required for LRO extensions in OpenAPI output"
 @autoRoute
 @armResourceAction(Resource)
 @post
-@extension("x-ms-long-running-operation", true)
-@extension(
-  "x-ms-long-running-operation-options",
-  #{ `final-state-via`: "location" }
-)
+@Azure.Core.useFinalStateVia("location")
 op ArmResourceActionNoContentAsyncWithLocationResult<
   Resource extends Azure.ResourceManager.Foundations.Resource,
   Request extends TypeSpec.Reflection.Model | void,
specification/chaos/resource-manager/Microsoft.Chaos/Chaos/lro-helpers.tsp
 #suppress "@azure-tools/typespec-azure-core/documentation-required" "template"
 #suppress "@azure-tools/typespec-azure-resource-manager/arm-resource-operation" "template"
 #suppress "@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes" "Custom LRO operation with specific response codes"
-#suppress "@azure-tools/typespec-azure-core/no-openapi" "Required for LRO extensions in OpenAPI output"
 @autoRoute
 @armResourceAction(Resource)
 @post
-@extension("x-ms-long-running-operation", true)
-@extension(
-  "x-ms-long-running-operation-options",
-  #{ `final-state-via`: "location" }
-)
+@Azure.Core.useFinalStateVia("location")
 op ArmResourceActionNoBodyAsyncWithLocation<
   Resource extends Azure.ResourceManager.Foundations.Resource,
   Request extends TypeSpec.Reflection.Model | void,

specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioConfiguration.tsp:22, specification/chaos/resource-manager/Microsoft.Chaos/Chaos/workspace.tsp:17, specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioRun.models.tsp:15, specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioRun.tsp:16, specification/chaos/resource-manager/Microsoft.Chaos/Chaos/lro-helpers.tsp:46

Affected operations (1)
ScenarioRuns_GetGET/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Chaos/workspaces/{workspaceName}/scenarios/{scenarioName}/runs/{runId}2026-05-01-preview
Contract areaBeforeAfter
Response header202 · Location
string
string uri

REST contract changed: responses.

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 · 1 declaration checked

Appendix

Potential limits

None

Projects and compiler status

ProjectModeBaseline commit@versionTarget commit@versionBaseline AutoRest / TCGCTarget AutoRest / TCGC
specification/chaos/resource-manager/Microsoft.Chaos/Chaosexisting-api-version232dfa71843fd574be49ba91a918ee7d3e7bfec3@2026-05-01-preview
base · affected-existing-version
a3b8933eb6ce030faa6abc6d354fc97e30f02e96@2026-05-01-preview
current · affected-existing-version
succeeded / succeededsucceeded / succeeded

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

Guidance fetched

Guidance coverage and retrieval evidence
{
  "status": "failed",
  "coverage": {
    "semanticIntentCount": 3,
    "assessedIntentCount": 3,
    "selectedDocumentCount": 4,
    "unassessedIntentIds": []
  },
  "sharedSearch": {
    "catalogRanking": [
      {
        "rank": 1,
        "catalogOrder": 16,
        "title": "ARM long-running operations",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/arm/long-running-operations/",
        "score": {
          "exactSymbol": 4,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 10
        },
        "selectionRationale": "Matches the changed Location-based ARM LRO behavior and headers."
      },
      {
        "rank": 2,
        "catalogOrder": 31,
        "title": "Azure Core `no-openapi` rule",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/libraries/azure-core/rules/no-openapi/",
        "score": {
          "exactSymbol": 4,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 10
        },
        "selectionRationale": "Matches the removed no-openapi suppressions and raw OpenAPI extensions."
      },
      {
        "rank": 3,
        "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": "Governs behavior-changing modifications to an existing versioned ARM API."
      },
      {
        "rank": 4,
        "catalogOrder": 7,
        "title": "ARM resource types and modeling",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/arm/resource-type/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 6
        },
        "selectionRationale": "Matches ARM resource identifiers, models, and properties."
      },
      {
        "rank": 5,
        "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": "Matches modified ARM operations and LRO actions."
      },
      {
        "rank": 6,
        "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 ARM operation interfaces."
      },
      {
        "rank": 7,
        "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 decorator semantics."
      },
      {
        "rank": 8,
        "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 decorator semantics."
      },
      {
        "rank": 9,
        "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": 3,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 6
        },
        "selectionRationale": "Matches generic Azure LRO patterns."
      },
      {
        "rank": 10,
        "catalogOrder": 20,
        "title": "ARM common types",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/arm/add-common-types/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 6
        },
        "selectionRationale": "Matches ARM model and identifier usage."
      },
      {
        "rank": 11,
        "catalogOrder": 21,
        "title": "Models",
        "canonicalUrl": "https://typespec.io/docs/language-basics/models/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 6
        },
        "selectionRationale": "Matches the model and property changes."
      },
      {
        "rank": 12,
        "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 customization and LRO decorator changes."
      },
      {
        "rank": 13,
        "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 usage."
      },
      {
        "rank": 14,
        "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 removed OpenAPI-specific decorators."
      },
      {
        "rank": 15,
        "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 decorators but not a namespace change."
      },
      {
        "rank": 16,
        "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 decorators but not portal behavior."
      },
      {
        "rank": 17,
        "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 preview versioning generally, but no version was added."
      },
      {
        "rank": 18,
        "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 versioning generally, but no stable version was added."
      },
      {
        "rank": 19,
        "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 versioning generally, but no preview version was added."
      },
      {
        "rank": 20,
        "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": 0,
          "total": 5
        },
        "selectionRationale": "Matches versioning generally, but no stable version was added."
      },
      {
        "rank": 21,
        "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 not content negotiation."
      },
      {
        "rank": 22,
        "catalogOrder": 2,
        "title": "Versioning overview",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/versioning/01-about-versioning/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 0,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 3
        },
        "selectionRationale": "Provides general versioning context but no change-specific construct."
      },
      {
        "rank": 23,
        "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": "ARM guidance without a matching extension-resource change."
      },
      {
        "rank": 24,
        "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": "ARM guidance without a private-endpoint change."
      },
      {
        "rank": 25,
        "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": "ARM guidance without a private-link change."
      },
      {
        "rank": 26,
        "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": "ARM guidance without a perimeter change."
      },
      {
        "rank": 27,
        "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": "ARM guidance without a paging-parameter change."
      },
      {
        "rank": 28,
        "catalogOrder": 22,
        "title": "Enums",
        "canonicalUrl": "https://typespec.io/docs/language-basics/enums/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 0,
          "servicePlane": 2,
          "changeContext": 0,
          "total": 2
        },
        "selectionRationale": "General ARM-applicable guidance; no enum declaration changed."
      },
      {
        "rank": 29,
        "catalogOrder": 23,
        "title": "Scalars",
        "canonicalUrl": "https://typespec.io/docs/language-basics/scalars/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 0,
          "servicePlane": 2,
          "changeContext": 0,
          "total": 2
        },
        "selectionRationale": "General ARM-applicable scalar guidance."
      },
      {
        "rank": 30,
        "catalogOrder": 30,
        "title": "Directives",
        "canonicalUrl": "https://typespec.io/docs/language-basics/directives/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 0,
          "servicePlane": 2,
          "changeContext": 0,
          "total": 2
        },
        "selectionRationale": "General ARM-applicable guidance; the suppression was removed."
      },
      {
        "rank": 31,
        "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."
      }
    ],
    "documents": [
      {
        "rank": 1,
        "catalogOrder": 16,
        "title": "ARM long-running operations",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/arm/long-running-operations/",
        "score": {
          "exactSymbol": 4,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 10
        },
        "selectionRationale": "Matches the changed Location-based ARM LRO behavior and headers.",
        "guidance": [
          {
            "section": "ARM long-running operation templates",
            "excerpt": "ARM long-running (asynchronous) operation templates allow you to customize the LRO headers returned in the initial response, while retaining the correct `finalResult` value that matches the result of the operation.",
            "queryTerms": [
              "LRO",
              "Location",
              "finalResult"
            ],
            "examples": [],
            "applicableDeclarationIds": [
              "declaration-2caa7e8c582fa254",
              "declaration-342190062fe21bef",
              "declaration-42d22d744dbadac0",
              "declaration-462b286c48e80b14",
              "declaration-4e6785e3fd6c14b6",
              "declaration-51f8321feaf63705",
              "declaration-6772621d58825c99",
              "declaration-6ed9fe17dabb3ec4",
              "declaration-7223dd2c6f662e8e",
              "declaration-76f31b8a81dcb8e5",
              "declaration-99e7eb4caeecae4f",
              "declaration-a6040788c889759b",
              "declaration-b724ffb86d553126",
              "declaration-b83be927db86cf01",
              "declaration-bb6863688e9f4caf",
              "declaration-d4a1b51bd36bdcc3",
              "declaration-d7d34ee7cb83cb00",
              "declaration-f449301f3ea800f9"
            ]
          }
        ],
        "noRelevantGuidance": false,
        "retrievedAt": "2026-09-17T11:24:44.6744090Z",
        "contentHash": "sha256:42a192158c0c8d74ae55c56fc6a7651f5e6a05b51f93fad4d0191da1b0156a09"
      },
      {
        "rank": 2,
        "catalogOrder": 31,
        "title": "Azure Core `no-openapi` rule",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/libraries/azure-core/rules/no-openapi/",
        "score": {
          "exactSymbol": 4,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 10
        },
        "selectionRationale": "Matches the removed no-openapi suppressions and raw OpenAPI extensions.",
        "guidance": [
          {
            "section": "Azure Core no-openapi rule",
            "excerpt": "Raw OpenAPI decorators change the OpenAPI output without informing other emitters such as SDKs, so SDKs can misrepresent the wire API.",
            "queryTerms": [
              "no-openapi",
              "@extension",
              "SDK"
            ],
            "examples": [],
            "applicableDeclarationIds": [
              "declaration-2caa7e8c582fa254",
              "declaration-342190062fe21bef",
              "declaration-42d22d744dbadac0",
              "declaration-462b286c48e80b14",
              "declaration-4e6785e3fd6c14b6",
              "declaration-51f8321feaf63705",
              "declaration-6772621d58825c99",
              "declaration-6ed9fe17dabb3ec4",
              "declaration-7223dd2c6f662e8e",
              "declaration-76f31b8a81dcb8e5",
              "declaration-99e7eb4caeecae4f",
              "declaration-a6040788c889759b",
              "declaration-b724ffb86d553126",
              "declaration-b83be927db86cf01",
              "declaration-bb6863688e9f4caf",
              "declaration-d4a1b51bd36bdcc3",
              "declaration-d7d34ee7cb83cb00",
              "declaration-f449301f3ea800f9"
            ]
          }
        ],
        "noRelevantGuidance": false,
        "retrievedAt": "2026-09-17T11:24:44.6744090Z",
        "contentHash": "sha256:18cd1660fb248b4b76429a36b980f82e61e9e2631e28856e18c5c49ff49eac2e"
      },
      {
        "rank": 3,
        "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": "Governs behavior-changing modifications to an existing versioned ARM API.",
        "guidance": [
          {
            "section": "Evolving APIs",
            "excerpt": "Versioning allows you to evolve your API without breaking existing clients. By using versioning decorators, you can specify when resources, operations, or properties are added, removed, or changed.",
            "queryTerms": [
              "versioning",
              "operations",
              "existing clients"
            ],
            "examples": [],
            "applicableDeclarationIds": [
              "declaration-2caa7e8c582fa254",
              "declaration-342190062fe21bef",
              "declaration-42d22d744dbadac0",
              "declaration-462b286c48e80b14",
              "declaration-4e6785e3fd6c14b6",
              "declaration-51f8321feaf63705",
              "declaration-6772621d58825c99",
              "declaration-6ed9fe17dabb3ec4",
              "declaration-7223dd2c6f662e8e",
              "declaration-76f31b8a81dcb8e5",
              "declaration-99e7eb4caeecae4f",
              "declaration-a6040788c889759b",
              "declaration-b724ffb86d553126",
              "declaration-b83be927db86cf01",
              "declaration-bb6863688e9f4caf",
              "declaration-d4a1b51bd36bdcc3",
              "declaration-d7d34ee7cb83cb00",
              "declaration-f449301f3ea800f9"
            ]
          }
        ],
        "noRelevantGuidance": false,
        "retrievedAt": "2026-09-17T11:24:44.6744090Z",
        "contentHash": "sha256:5faf5fd80807690729c00dab44ebcfa1d698166dfb0caefc516bdf325fcfd630"
      },
      {
        "rank": 4,
        "catalogOrder": 7,
        "title": "ARM resource types and modeling",
        "canonicalUrl": "https://azure.github.io/typespec-azure/docs/howtos/arm/resource-type/",
        "score": {
          "exactSymbol": 0,
          "patternCategory": 3,
          "servicePlane": 2,
          "changeContext": 1,
          "total": 6
        },
        "selectionRationale": "Matches ARM resource identifiers, models, and properties.",
        "guidance": [
          {
            "section": "Resource modeling",
            "excerpt": "Resources are modeled in TypeSpec by choosing a base resource type, defining rp-specific properties, and optionally mixing in standard envelope properties.",
            "queryTerms": [
              "resource",
              "model",
              "properties"
            ],
            "examples": [],
            "applicableDeclarationIds": [
              "declaration-093010d621963a62",
              "declaration-2e1900676b35bd4f",
              "declaration-456c2aa54f019a46",
              "declaration-4cc91b5c06fd7a4d",
              "declaration-60ebf3b787a982bd",
              "declaration-75b41b9222358fbd",
              "declaration-8ce42704b5b649ae",
              "declaration-c7e26d0e1780a407",
              "declaration-f1e636e2050f7207"
            ]
          }
        ],
        "noRelevantGuidance": false,
        "retrievedAt": "2026-09-17T11:24:44.6744090Z",
        "contentHash": "sha256:ef06cc8c4ff5460ec25618308b77dd9e6185723b60b3ab2badaccdffce78baca"
      }
    ]
  },
  "intentAssessments": [
    {
      "semanticIntentId": "semantic-60ce39fe11fc0e5e",
      "decision": "no-applicable-guidance",
      "blockers": []
    },
    {
      "semanticIntentId": "semantic-817ce31481ec83c7",
      "decision": "no-applicable-guidance",
      "blockers": []
    },
    {
      "semanticIntentId": "semantic-f390441d62829acb",
      "decision": "applicable-fail",
      "blockers": []
    }
  ],
  "retrievalFailures": [],
  "blockers": []
}

Changed files

  • specification/chaos/resource-manager/Microsoft.Chaos/Chaos/client.tsp (committed)
  • specification/chaos/resource-manager/Microsoft.Chaos/Chaos/lro-helpers.tsp (committed)
  • specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioConfiguration.models.tsp (committed)
  • specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioConfiguration.tsp (committed)
  • specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioRun.models.tsp (committed)
  • specification/chaos/resource-manager/Microsoft.Chaos/Chaos/scenarioRun.tsp (committed)
  • specification/chaos/resource-manager/Microsoft.Chaos/Chaos/workspace.tsp (committed)
  • specification/chaos/resource-manager/Microsoft.Chaos/Chaos/workspaceEvaluation.models.tsp (committed)

Timing and model input

{
  "timings": {
    "metadataMs": 929,
    "fetchMs": 141,
    "scopeDiscoveryMs": 70,
    "setupExcludingFetchMs": 5715,
    "comparisonMs": 123,
    "changeDiscoveryMs": 78,
    "workspacePreparationMs": 4248,
    "projectDiscoveryMs": 67,
    "totalMs": 102650,
    "semanticAnalysisMs": 2669,
    "restAnalysisMs": 37,
    "downstreamAnalysisMs": 27,
    "documentQualityAnalysisMs": 1
  },
  "inputAccounting": {
    "budgetTier": "small",
    "budgetBytes": 131072,
    "bytes": 83874,
    "estimatedTokens": 20969,
    "retained": {
      "evidenceSets": 17,
      "facts": 26,
      "semanticReviewUnits": 3,
      "restCandidates": 0,
      "downstreamCandidates": 16,
      "downstreamRootCauses": 12,
      "complianceSearchRequests": 3,
      "inferenceRequests": 2
    },
    "omittedRedundant": {
      "rawEmitterArtifacts": true,
      "compilerLogs": true,
      "unchangedInventories": true,
      "unreferencedFacts": true,
      "unreferencedDeterministicFacts": true,
      "sourceChanges": true,
      "repeatedDeclarationIds": true,
      "repeatedReviewUnitEvidence": true
    },
    "inference": {
      "requestCount": 2,
      "inferredCandidateCount": 15,
      "noImpactCount": 0,
      "blockedCount": 0
    },
    "compliance": {
      "catalogEntriesScored": 31,
      "documentsFetched": 4,
      "documentBytesFetched": 700,
      "guidanceExcerptsRetained": 4,
      "guidanceExcerptBytesRetained": 700
    }
  }
}

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