[Event Hubs] Add 2026-07-01-preview API version#44750
Conversation
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 14b08a3b-e248-4245-8e8f-0886ecca8df0
Next Steps to MergeNext steps that must be taken to merge this PR:
Comment generated by summarize-checks workflow run. |
API Change CheckAPIView identified API level changes in this PR and created the following API reviews
Comment generated by After APIView workflow run. |
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 14b08a3b-e248-4245-8e8f-0886ecca8df0
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 14b08a3b-e248-4245-8e8f-0886ecca8df0
|
Avocado suppression review requested for the five |
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 14b08a3b-e248-4245-8e8f-0886ecca8df0
|
|
||
| ``` yaml | ||
| directive: | ||
| - suppress: MISSING_APIS_IN_DEFAULT_TAG |
There was a problem hiding this comment.
Removed the MISSING_APIS_IN_DEFAULT_TAG directives in cb1352a. The PR-level comment retains the rationale for the five legacy routes so the Avocado approval label can be applied.
| reason: The legacy SKU region discovery route is not implemented by the current Event Hubs SKU controller. | ||
| where: $.paths["/subscriptions/{subscriptionId}/providers/Microsoft.EventHub/sku/{sku}/regions"] | ||
|
|
||
| - suppress: ResourceNameRestriction |
There was a problem hiding this comment.
Adding detail (from the agent review): the empty-name behavior comes from NamePattern = "" in the TypeSpec — FabricShortcut.tsp line 27 and UpgradePreferences.tsp line 27. The empty pattern disables name validation, which is what forced the ResourceNameRestriction suppression. If the service enforces a name shape, setting a real NamePattern removes the suppression; if arbitrary/empty names are genuinely valid, that is worth confirming explicitly.
There was a problem hiding this comment.
No, empty names are not valid. In cb1352a I added a non-empty pattern for fabricShortcutName; Upgrade Preferences is the literal singleton name default. The remaining scoped suppression is only for the existing clusterName and eventHubName parent parameters, whose shipped service contracts do not enforce a regex that can be introduced only for this preview.
| */ | ||
| #suppress "@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-envelope-property" "The service returns the parent namespace location in the existing ARM resource envelope." | ||
| @visibility(Lifecycle.Read) | ||
| location?: string; |
There was a problem hiding this comment.
Adding detail (from the agent review): location?: string on line 35 sits on the ProxyResource envelope, which required the arm-resource-invalid-envelope-property suppression on line 33. It is also the root cause of two other suppressions in readme.md — RequestSchemaForTrackedResourcesMustHaveTags and TrackedResourcePatchOperation — because the linter treats the resource as tracked-ish once location is on the envelope. Moving location into FabricShortcutProperties (as you suggested) removes all three suppressions in one change.
There was a problem hiding this comment.
The backend wire model keeps this in the ARM envelope: FabricShortcutArmResourceInfo inherits ArmResourceInfo<T>, where Location is a top-level [NotUserSettable] property, while FabricShortcutArmDescription has no location property. I kept that exact read-only shape and clarified the suppression rationale in cb1352a.
| /** | ||
| * The resource ID of the Log Analytics workspace. | ||
| */ | ||
| logAnalyticsResourceId?: string; |
There was a problem hiding this comment.
Adding detail (from the agent review): this is logAnalyticsResourceId?: string on line 106 — a fully-qualified ARM resource ID that should use armResourceIdentifier with a type restriction so ARM can perform RBAC linked-access checks (Section 2.4). Also worth checking premiumCapacityId on line 101: if it is an ARM resource ID it should get the same treatment; if it is a Fabric-internal (non-ARM) ID, plain string is fine.
There was a problem hiding this comment.
Updated in cb1352a to armResourceIdentifier restricted to Microsoft.OperationalInsights/workspaces; the regenerated Swagger now emits format: arm-id and the allowed resource type.
There was a problem hiding this comment.
Also confirmed premiumCapacityId is a Microsoft Fabric-internal capacity identifier, not an Azure Resource Manager resource ID, so it remains a plain string. Only logAnalyticsResourceId is an ARM ID and is now type-restricted.
| /** | ||
| * Properties of a Microsoft Fabric shortcut. | ||
| */ | ||
| #suppress "@azure-tools/typespec-azure-resource-manager/arm-resource-provisioning-state" "The service does not expose a provisioning state for this proxy resource." |
There was a problem hiding this comment.
The synchronous backend contract (FabricShortcutArmDescription : ArmDescription) does not define or return provisioningState. Shortcut lifecycle is exposed through the read-only domain-specific shortcutStatus instead. I clarified this rationale in cb1352a.
| /** | ||
| * Creates or updates a Microsoft Fabric shortcut. | ||
| */ | ||
| #suppress "@azure-tools/typespec-azure-resource-manager/arm-put-operation-response-codes" "The service returns 200 for both create and update." |
There was a problem hiding this comment.
The Fabric Shortcut PUT backend returns 200 for both create and update; the service CIT explicitly asserts HttpStatusCode.OK on create. The TypeSpec response and suppression intentionally match that deployed contract rather than advertising an unsupported 201.
| /** | ||
| * Creates or updates a Microsoft Fabric shortcut. | ||
| */ | ||
| #suppress "@azure-tools/typespec-azure-resource-manager/arm-put-operation-response-codes" "The service returns 200 for both create and update." |
There was a problem hiding this comment.
The service implementation returns 200 for Fabric Shortcut creation as well as update, and its lifecycle test asserts 200 on the initial PUT. A 201 response is not currently implemented, so the specification retains the scoped suppression.
| from: openapi.json | ||
| reason: Microsoft Fabric tenant, workspace, and artifact identifiers are UUIDs by definition. | ||
| where: $.definitions["Azure.Core.uuid"].format | ||
| - suppress: TrackedResourcePatchOperation |
There was a problem hiding this comment.
Moving location would change the JSON wire contract. The backend response type inherits ArmResourceInfo<T>, where Location is a top-level read-only envelope property; FabricShortcutArmDescription has no location property. The tracked-resource findings are therefore false positives caused by accurately modeling that existing backend shape, so the narrowly scoped suppressions must remain unless the service contract changes.
| ``` yaml | ||
| openapi-type: arm | ||
| tag: package-2026-01 | ||
| tag: package-2026-07-preview |
There was a problem hiding this comment.
[NEW] 🔴 Blocking [Section 11.2] readme.md - line 29 - Default AutoRest tag changed from stable to preview.
Classification reasoning: Introduced in this PR — the global default tag was package-2026-01 (stable) at base SHA 33edaba4 and is changed to package-2026-07-preview here.
The global default tag must point to the latest stable version; SDK consumers get the default tag by default and it must be GA. Changing it to a preview also forced the new MISSING_APIS_IN_DEFAULT_TAG suppressions below (the preview omits legacy routes the stable default carried).
Suggested fix: Restore tag: package-2026-01 as the global default and keep package-2026-07-preview as its own named tag only.
There was a problem hiding this comment.
Fixed in 6036a83: the global default tag is restored to stable package-2026-01; package-2026-07-preview remains available as its named tag.
| */ | ||
| #suppress "@azure-tools/typespec-azure-core/no-closed-literal-union" "The service validates the value against this fixed set and rejects unknown values." | ||
| @added(Versions.v2026_07_01_preview) | ||
| union FabricShortcutType { |
There was a problem hiding this comment.
[NEW] 🟠 Warning [enum-best-practices] FabricShortcut.tsp - line 124 - Closed (non-extensible) enum.
FabricShortcutType (line 124) and FabricShortcutStatus (line 141) here, plus UpgradePreferenceDayOfWeek (UpgradePreferences.tsp line 135) and ExceptionWindowAction (line 163), emit modelAsString: false via the no-closed-literal-union suppression. Extensible enums (modelAsString: true) should be used so new values can be added later without a breaking change — relevant for FabricShortcutStatus/FabricShortcutType.
Classification reasoning: New enums introduced in this PR.
Suggested fix: Remove the closed-union suppression and model these as open (extensible) unions.
There was a problem hiding this comment.
These unions are intentionally closed because the backend uses closed C# enums with StringEnumConverter and rejects unknown values. Making the specification extensible would tell SDKs to accept values that the service does not accept, so the scoped suppressions preserve the actual contract.
| * Creates or updates a Microsoft Fabric shortcut. | ||
| */ | ||
| #suppress "@azure-tools/typespec-azure-resource-manager/arm-put-operation-response-codes" "The service returns 200 for both create and update." | ||
| createOrUpdate is ArmResourceCreateOrReplaceSync< |
There was a problem hiding this comment.
[NEW] 🟠 Warning [RPC-Put-V1-11] FabricShortcut.tsp - line 170 - PUT returns only 200, not 201 on create.
Both createOrUpdate operations (here, and UpgradePreferences.tsp line 188) use ArmResourceUpdatedResponse (200 only) and suppress PutResponseCodes. PUT must return 201 for creation and 200 for replacement so clients/SDKs can distinguish create from update.
Classification reasoning: New operations in this PR.
Suggested fix: Return ArmResourceCreatedResponse | ArmResourceUpdatedResponse (201 + 200) and drop the suppression, unless the service genuinely cannot emit 201.
There was a problem hiding this comment.
The service genuinely cannot emit 201 today. Fabric Shortcut CIT asserts 200 on create, and UpgradePreferencesRequestCoordinator.PutUpgradePreferencesAsync returns HttpStatusCode.OK after persisting. The 200-only responses and scoped suppressions match the implementation.
| * Deletes a Microsoft Fabric shortcut. | ||
| */ | ||
| #suppress "@azure-tools/typespec-azure-resource-manager/arm-delete-operation-response-codes" "The service returns 200 when the shortcut is deleted." | ||
| delete is ArmResourceDeleteSync< |
There was a problem hiding this comment.
[NEW] 🟠 Warning [RPC-Delete-V1-01] FabricShortcut.tsp - line 188 - Sync DELETE missing 204.
delete returns 200 only and suppresses DeleteResponseCodes/DeleteOperationResponses. A synchronous DELETE must define 200 + 204 + default (204 when the resource does not exist — never 404).
Classification reasoning: New operation in this PR.
Suggested fix: Add a 204 response.
There was a problem hiding this comment.
The Fabric Shortcut delete implementation and CIT use 200 on successful deletion; 204 is not implemented. The specification keeps the 200-only response with narrowly scoped suppressions rather than claiming an unsupported response.
| from: openapi.json | ||
| reason: Fabric shortcut deletion returns an empty 200 response on success. | ||
| where: $.paths["/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventHub/namespaces/{namespaceName}/eventhubs/{eventHubName}/fabricShortcuts/{fabricShortcutName}"].delete.responses | ||
| - suppress: GuidUsage |
There was a problem hiding this comment.
[NEW] 🔵 Suggestion [R3017 GuidUsage] readme.md - line 331 - Over-scoped GuidUsage suppression.
The suppression targets the shared $.definitions["Azure.Core.uuid"].format, covering tenantId (FabricShortcut.tsp line 86 — acceptable, Entra-adjacent) as well as workspaceId/artifactId (lines 91/96), which are Microsoft Fabric identifiers, not Entra IDs. format: uuid on ARM control-plane is discouraged except for Entra IDs, and R3017 requires Azure API review board sign-off.
Classification reasoning: New suppression in this PR.
Suggested fix: Confirm the ARMModelingAutoSignedOff sign-off covers the non-Entra Fabric identifiers; otherwise keep workspaceId/artifactId as string.
There was a problem hiding this comment.
The backend validates tenantId, workspaceId, and artifactId with Guid.TryParse, so all three are UUIDs in the service contract. The suppression is scoped to the emitted shared UUID definition and requires ARM/API review sign-off; changing the Fabric IDs to unconstrained strings would weaken the contract.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 14b08a3b-e248-4245-8e8f-0886ecca8df0
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 14b08a3b-e248-4245-8e8f-0886ecca8df0
Summary
2026-07-01-previewEvent Hubs management API version based on2026-01-01.Validation
oav validate-spec.2026-01-01operations and schemas remain unchanged in the new preview version.Purpose of this PR
Due diligence checklist