From ff8bafae3b90b0562803b550e4ad7d055fceccba Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 27 Jan 2026 20:27:33 +0000 Subject: [PATCH 01/12] Initial plan From 2d11108b209db691d9fda6ec1a567195c74c6ee1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 27 Jan 2026 20:37:25 +0000 Subject: [PATCH 02/12] Add managedByExtended to allowed body top level properties Co-authored-by: raosuhas <11067581+raosuhas@users.noreply.github.com> --- docs/body-top-level-properties.md | 2 +- docs/rules.md | 2 +- .../rulesets/src/native/functions/arm-resource-validation.ts | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/body-top-level-properties.md b/docs/body-top-level-properties.md index ce757a690..dee6d7229 100644 --- a/docs/body-top-level-properties.md +++ b/docs/body-top-level-properties.md @@ -15,7 +15,7 @@ ARM OpenAPI(swagger) specs ## Description Top level properties should be one of `name`, `type`, `id`, `location`, `properties`, `tags`, `plan`, `sku`, `etag`, -`managedBy`, `identity`, `systemData`, `extendedlocation`. Per [ARM guidelines](https://github.com/cloud-and-ai-microsoft/resource-provider-contract/blob/master/v1.0/resource-api-reference.md), +`managedBy`, `managedByExtended`, `identity`, `systemData`, `extendedlocation`. Per [ARM guidelines](https://github.com/cloud-and-ai-microsoft/resource-provider-contract/blob/master/v1.0/resource-api-reference.md), top level properties of a resource should be only ones from the allowed set. ## How to fix diff --git a/docs/rules.md b/docs/rules.md index 7f2703807..e7f0d2d33 100644 --- a/docs/rules.md +++ b/docs/rules.md @@ -154,7 +154,7 @@ Please refer to [body-properties-names-camel-case.md](./body-properties-names-ca ### BodyTopLevelProperties Top level properties should be one of `name`, `type`, `id`, `location`, `properties`, `tags`, `plan`, `sku`, `etag`, -`managedBy`, `identity`, `systemData`, `extendedlocation`. Per [ARM guidelines](https://github.com/cloud-and-ai-microsoft/resource-provider-contract/blob/master/v1.0/resource-api-reference.md), +`managedBy`, `managedByExtended`, `identity`, `systemData`, `extendedlocation`. Per [ARM guidelines](https://github.com/cloud-and-ai-microsoft/resource-provider-contract/blob/master/v1.0/resource-api-reference.md), top level properties of a resource should be only ones from the allowed set. Please refer to [body-top-level-properties.md](./body-top-level-properties.md) for details. diff --git a/packages/rulesets/src/native/functions/arm-resource-validation.ts b/packages/rulesets/src/native/functions/arm-resource-validation.ts index 0bd9144c0..d5f00c3d5 100644 --- a/packages/rulesets/src/native/functions/arm-resource-validation.ts +++ b/packages/rulesets/src/native/functions/arm-resource-validation.ts @@ -77,6 +77,7 @@ export function* armResourcePropertiesBag(openapiSection: any, options: {}, ctx: "sku", "etag", "managedby", + "managedbyextended", "identity", "kind", "zones", @@ -144,6 +145,7 @@ export function* bodyTopLevelProperties(openapiSection: any, options: {}, ctx: R "sku", "etag", "managedby", + "managedbyextended", "identity", "kind", "zones", @@ -155,7 +157,7 @@ export function* bodyTopLevelProperties(openapiSection: any, options: {}, ctx: R if (!allowedBodyTopLevelProperties.includes(propName.toLowerCase())) { yield { location: ["definitions", re.modelName], - message: `Top level properties should be one of name, type, id, location, properties, tags, plan, sku, etag, managedBy, identity, zones. Model definition '${re.modelName}' has extra properties ['${propName}'].`, + message: `Top level properties should be one of name, type, id, location, properties, tags, plan, sku, etag, managedBy, managedByExtended, identity, zones. Model definition '${re.modelName}' has extra properties ['${propName}'].`, } } } From c99fb088ddb8147ba55d120ea6929f9335dd5cee Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 27 Jan 2026 20:40:11 +0000 Subject: [PATCH 03/12] Add test case for managedByExtended property support Co-authored-by: raosuhas <11067581+raosuhas@users.noreply.github.com> --- .../native/tests/migrated-arm-rule-tests.ts | 7 + ...op-level-properties-managedByExtended.json | 285 ++++++++++++++++++ 2 files changed, 292 insertions(+) create mode 100644 packages/rulesets/src/native/tests/resources/body-top-level-properties-managedByExtended.json diff --git a/packages/rulesets/src/native/tests/migrated-arm-rule-tests.ts b/packages/rulesets/src/native/tests/migrated-arm-rule-tests.ts index 4e3f4dd55..cd87d4dff 100644 --- a/packages/rulesets/src/native/tests/migrated-arm-rule-tests.ts +++ b/packages/rulesets/src/native/tests/migrated-arm-rule-tests.ts @@ -21,6 +21,13 @@ describe("IndividualAzureTests", () => { assertValidationRuleCount(messages, ruleName, 1) }) + test("body top level resource with managedByExtended should pass", async () => { + const fileNames = ["body-top-level-properties-managedByExtended.json"] + const ruleName = "BodyTopLevelProperties" + const messages: LintResultMessage[] = await collectTestMessagesFromValidator(fileNames, OpenApiTypes.arm, ruleName) + assertValidationRuleCount(messages, ruleName, 0) + }) + test("tracked resource must have patch", async () => { const fileNames = ["armResource/trackedResourceNoPatch.json", "armResource/trackedResourceCommon.json"] const ruleName = "TrackedResourcePatchOperation" diff --git a/packages/rulesets/src/native/tests/resources/body-top-level-properties-managedByExtended.json b/packages/rulesets/src/native/tests/resources/body-top-level-properties-managedByExtended.json new file mode 100644 index 000000000..18491f245 --- /dev/null +++ b/packages/rulesets/src/native/tests/resources/body-top-level-properties-managedByExtended.json @@ -0,0 +1,285 @@ +{ + "swagger": "2.0", + "info": { + "title": "Test managedByExtended is allowed as a top level property", + "description": "Test case for managedByExtended property.", + "version": "2024-01-01" + }, + "host": "management.azure.com", + "schemes": [ + "https" + ], + "basePath": "/", + "produces": [ + "application/json" + ], + "consumes": [ + "application/json" + ], + "paths": { + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Test/testResources/{resourceName}": { + "put": { + "operationId": "TestResources_CreateOrUpdate", + "summary": "Create or update test resource", + "description": "Creates or updates a test resource with managedByExtended property.", + "parameters": [ + { + "name": "subscriptionId", + "in": "path", + "required": true, + "type": "string", + "description": "Subscription ID" + }, + { + "name": "resourceGroupName", + "in": "path", + "required": true, + "type": "string", + "description": "Resource group name" + }, + { + "name": "resourceName", + "in": "path", + "required": true, + "type": "string", + "description": "Resource name" + }, + { + "name": "parameters", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/TestResource" + }, + "description": "The parameters to provide for the test resource." + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/TestResource" + } + }, + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/TestResource" + } + } + } + }, + "get": { + "operationId": "TestResources_Get", + "summary": "Get test resource", + "description": "Gets a test resource.", + "parameters": [ + { + "name": "subscriptionId", + "in": "path", + "required": true, + "type": "string", + "description": "Subscription ID" + }, + { + "name": "resourceGroupName", + "in": "path", + "required": true, + "type": "string", + "description": "Resource group name" + }, + { + "name": "resourceName", + "in": "path", + "required": true, + "type": "string", + "description": "Resource name" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/TestResource" + } + } + } + }, + "delete": { + "operationId": "TestResources_Delete", + "summary": "Delete test resource", + "description": "Deletes a test resource.", + "parameters": [ + { + "name": "subscriptionId", + "in": "path", + "required": true, + "type": "string", + "description": "Subscription ID" + }, + { + "name": "resourceGroupName", + "in": "path", + "required": true, + "type": "string", + "description": "Resource group name" + }, + { + "name": "resourceName", + "in": "path", + "required": true, + "type": "string", + "description": "Resource name" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "204": { + "description": "No Content" + } + } + }, + "patch": { + "operationId": "TestResources_Update", + "summary": "Update test resource", + "description": "Updates a test resource.", + "parameters": [ + { + "name": "subscriptionId", + "in": "path", + "required": true, + "type": "string", + "description": "Subscription ID" + }, + { + "name": "resourceGroupName", + "in": "path", + "required": true, + "type": "string", + "description": "Resource group name" + }, + { + "name": "resourceName", + "in": "path", + "required": true, + "type": "string", + "description": "Resource name" + }, + { + "name": "parameters", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/TestResource" + }, + "description": "The parameters to provide for the test resource." + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/TestResource" + } + } + } + } + }, + "/providers/Microsoft.Test/operations": { + "get": { + "operationId": "Operations_List", + "summary": "List operations", + "description": "Lists all operations.", + "responses": { + "200": { + "description": "OK" + } + } + } + } + }, + "definitions": { + "TestResource": { + "description": "Test resource with managedByExtended property", + "properties": { + "location": { + "type": "string", + "description": "Resource location" + }, + "tags": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Resource tags" + }, + "managedByExtended": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The fully qualified resource IDs of the resources that manage this resource" + }, + "properties": { + "$ref": "#/definitions/TestResourceProperties" + } + }, + "required": [ + "location" + ], + "allOf": [ + { + "$ref": "#/definitions/Resource" + } + ] + }, + "TestResourceProperties": { + "description": "Properties of the test resource", + "properties": { + "provisioningState": { + "type": "string", + "description": "Provisioning state", + "readOnly": true + } + } + }, + "Resource": { + "properties": { + "id": { + "readOnly": true, + "type": "string", + "description": "Resource Id" + }, + "name": { + "readOnly": true, + "type": "string", + "description": "Resource name" + }, + "type": { + "readOnly": true, + "type": "string", + "description": "Resource type" + } + }, + "x-ms-azure-resource": true + } + }, + "parameters": { + "SubscriptionIdParameter": { + "name": "subscriptionId", + "in": "path", + "required": true, + "type": "string", + "description": "test subscription id" + }, + "ApiVersion": { + "name": "api-version", + "in": "path", + "required": true, + "type": "string", + "description": "test api version" + } + } +} From 445448282b3792db9d4d3318da226e60ffce9501 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 27 Jan 2026 20:42:28 +0000 Subject: [PATCH 04/12] Update error message to include all allowed properties Co-authored-by: raosuhas <11067581+raosuhas@users.noreply.github.com> --- .../rulesets/src/native/functions/arm-resource-validation.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rulesets/src/native/functions/arm-resource-validation.ts b/packages/rulesets/src/native/functions/arm-resource-validation.ts index d5f00c3d5..5a93666db 100644 --- a/packages/rulesets/src/native/functions/arm-resource-validation.ts +++ b/packages/rulesets/src/native/functions/arm-resource-validation.ts @@ -157,7 +157,7 @@ export function* bodyTopLevelProperties(openapiSection: any, options: {}, ctx: R if (!allowedBodyTopLevelProperties.includes(propName.toLowerCase())) { yield { location: ["definitions", re.modelName], - message: `Top level properties should be one of name, type, id, location, properties, tags, plan, sku, etag, managedBy, managedByExtended, identity, zones. Model definition '${re.modelName}' has extra properties ['${propName}'].`, + message: `Top level properties should be one of name, type, id, location, properties, tags, plan, sku, etag, managedBy, managedByExtended, identity, kind, zones, systemData, extendedLocation. Model definition '${re.modelName}' has extra properties ['${propName}'].`, } } } From 98c34eb00d5700578c029f7263db13fb555cfafe Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 27 Jan 2026 20:44:27 +0000 Subject: [PATCH 05/12] Fix documentation casing for extendedLocation property Co-authored-by: raosuhas <11067581+raosuhas@users.noreply.github.com> --- docs/body-top-level-properties.md | 2 +- docs/rules.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/body-top-level-properties.md b/docs/body-top-level-properties.md index dee6d7229..6a2d2ebb5 100644 --- a/docs/body-top-level-properties.md +++ b/docs/body-top-level-properties.md @@ -15,7 +15,7 @@ ARM OpenAPI(swagger) specs ## Description Top level properties should be one of `name`, `type`, `id`, `location`, `properties`, `tags`, `plan`, `sku`, `etag`, -`managedBy`, `managedByExtended`, `identity`, `systemData`, `extendedlocation`. Per [ARM guidelines](https://github.com/cloud-and-ai-microsoft/resource-provider-contract/blob/master/v1.0/resource-api-reference.md), +`managedBy`, `managedByExtended`, `identity`, `systemData`, `extendedLocation`. Per [ARM guidelines](https://github.com/cloud-and-ai-microsoft/resource-provider-contract/blob/master/v1.0/resource-api-reference.md), top level properties of a resource should be only ones from the allowed set. ## How to fix diff --git a/docs/rules.md b/docs/rules.md index e7f0d2d33..1ba26f88e 100644 --- a/docs/rules.md +++ b/docs/rules.md @@ -154,7 +154,7 @@ Please refer to [body-properties-names-camel-case.md](./body-properties-names-ca ### BodyTopLevelProperties Top level properties should be one of `name`, `type`, `id`, `location`, `properties`, `tags`, `plan`, `sku`, `etag`, -`managedBy`, `managedByExtended`, `identity`, `systemData`, `extendedlocation`. Per [ARM guidelines](https://github.com/cloud-and-ai-microsoft/resource-provider-contract/blob/master/v1.0/resource-api-reference.md), +`managedBy`, `managedByExtended`, `identity`, `systemData`, `extendedLocation`. Per [ARM guidelines](https://github.com/cloud-and-ai-microsoft/resource-provider-contract/blob/master/v1.0/resource-api-reference.md), top level properties of a resource should be only ones from the allowed set. Please refer to [body-top-level-properties.md](./body-top-level-properties.md) for details. From be580a7b5562984ca4cbaddcadf2583a5c8c6499 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 27 Jan 2026 20:46:23 +0000 Subject: [PATCH 06/12] Add missing kind and zones properties to documentation Co-authored-by: raosuhas <11067581+raosuhas@users.noreply.github.com> --- docs/body-top-level-properties.md | 2 +- docs/rules.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/body-top-level-properties.md b/docs/body-top-level-properties.md index 6a2d2ebb5..65c230365 100644 --- a/docs/body-top-level-properties.md +++ b/docs/body-top-level-properties.md @@ -15,7 +15,7 @@ ARM OpenAPI(swagger) specs ## Description Top level properties should be one of `name`, `type`, `id`, `location`, `properties`, `tags`, `plan`, `sku`, `etag`, -`managedBy`, `managedByExtended`, `identity`, `systemData`, `extendedLocation`. Per [ARM guidelines](https://github.com/cloud-and-ai-microsoft/resource-provider-contract/blob/master/v1.0/resource-api-reference.md), +`managedBy`, `managedByExtended`, `identity`, `kind`, `zones`, `systemData`, `extendedLocation`. Per [ARM guidelines](https://github.com/cloud-and-ai-microsoft/resource-provider-contract/blob/master/v1.0/resource-api-reference.md), top level properties of a resource should be only ones from the allowed set. ## How to fix diff --git a/docs/rules.md b/docs/rules.md index 1ba26f88e..8bf488471 100644 --- a/docs/rules.md +++ b/docs/rules.md @@ -154,7 +154,7 @@ Please refer to [body-properties-names-camel-case.md](./body-properties-names-ca ### BodyTopLevelProperties Top level properties should be one of `name`, `type`, `id`, `location`, `properties`, `tags`, `plan`, `sku`, `etag`, -`managedBy`, `managedByExtended`, `identity`, `systemData`, `extendedLocation`. Per [ARM guidelines](https://github.com/cloud-and-ai-microsoft/resource-provider-contract/blob/master/v1.0/resource-api-reference.md), +`managedBy`, `managedByExtended`, `identity`, `kind`, `zones`, `systemData`, `extendedLocation`. Per [ARM guidelines](https://github.com/cloud-and-ai-microsoft/resource-provider-contract/blob/master/v1.0/resource-api-reference.md), top level properties of a resource should be only ones from the allowed set. Please refer to [body-top-level-properties.md](./body-top-level-properties.md) for details. From 90d45437129b98ba56ae3276cf6c665fa97a7086 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 27 Jan 2026 22:11:15 +0000 Subject: [PATCH 07/12] Update existing test file instead of creating new one for managedByExtended Co-authored-by: raosuhas <11067581+raosuhas@users.noreply.github.com> --- .../native/tests/migrated-arm-rule-tests.ts | 7 - ...op-level-properties-managedByExtended.json | 285 ------------------ ...ody-top-level-properties-real-swagger.json | 7 + 3 files changed, 7 insertions(+), 292 deletions(-) delete mode 100644 packages/rulesets/src/native/tests/resources/body-top-level-properties-managedByExtended.json diff --git a/packages/rulesets/src/native/tests/migrated-arm-rule-tests.ts b/packages/rulesets/src/native/tests/migrated-arm-rule-tests.ts index cd87d4dff..4e3f4dd55 100644 --- a/packages/rulesets/src/native/tests/migrated-arm-rule-tests.ts +++ b/packages/rulesets/src/native/tests/migrated-arm-rule-tests.ts @@ -21,13 +21,6 @@ describe("IndividualAzureTests", () => { assertValidationRuleCount(messages, ruleName, 1) }) - test("body top level resource with managedByExtended should pass", async () => { - const fileNames = ["body-top-level-properties-managedByExtended.json"] - const ruleName = "BodyTopLevelProperties" - const messages: LintResultMessage[] = await collectTestMessagesFromValidator(fileNames, OpenApiTypes.arm, ruleName) - assertValidationRuleCount(messages, ruleName, 0) - }) - test("tracked resource must have patch", async () => { const fileNames = ["armResource/trackedResourceNoPatch.json", "armResource/trackedResourceCommon.json"] const ruleName = "TrackedResourcePatchOperation" diff --git a/packages/rulesets/src/native/tests/resources/body-top-level-properties-managedByExtended.json b/packages/rulesets/src/native/tests/resources/body-top-level-properties-managedByExtended.json deleted file mode 100644 index 18491f245..000000000 --- a/packages/rulesets/src/native/tests/resources/body-top-level-properties-managedByExtended.json +++ /dev/null @@ -1,285 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "title": "Test managedByExtended is allowed as a top level property", - "description": "Test case for managedByExtended property.", - "version": "2024-01-01" - }, - "host": "management.azure.com", - "schemes": [ - "https" - ], - "basePath": "/", - "produces": [ - "application/json" - ], - "consumes": [ - "application/json" - ], - "paths": { - "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Test/testResources/{resourceName}": { - "put": { - "operationId": "TestResources_CreateOrUpdate", - "summary": "Create or update test resource", - "description": "Creates or updates a test resource with managedByExtended property.", - "parameters": [ - { - "name": "subscriptionId", - "in": "path", - "required": true, - "type": "string", - "description": "Subscription ID" - }, - { - "name": "resourceGroupName", - "in": "path", - "required": true, - "type": "string", - "description": "Resource group name" - }, - { - "name": "resourceName", - "in": "path", - "required": true, - "type": "string", - "description": "Resource name" - }, - { - "name": "parameters", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/TestResource" - }, - "description": "The parameters to provide for the test resource." - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/TestResource" - } - }, - "201": { - "description": "Created", - "schema": { - "$ref": "#/definitions/TestResource" - } - } - } - }, - "get": { - "operationId": "TestResources_Get", - "summary": "Get test resource", - "description": "Gets a test resource.", - "parameters": [ - { - "name": "subscriptionId", - "in": "path", - "required": true, - "type": "string", - "description": "Subscription ID" - }, - { - "name": "resourceGroupName", - "in": "path", - "required": true, - "type": "string", - "description": "Resource group name" - }, - { - "name": "resourceName", - "in": "path", - "required": true, - "type": "string", - "description": "Resource name" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/TestResource" - } - } - } - }, - "delete": { - "operationId": "TestResources_Delete", - "summary": "Delete test resource", - "description": "Deletes a test resource.", - "parameters": [ - { - "name": "subscriptionId", - "in": "path", - "required": true, - "type": "string", - "description": "Subscription ID" - }, - { - "name": "resourceGroupName", - "in": "path", - "required": true, - "type": "string", - "description": "Resource group name" - }, - { - "name": "resourceName", - "in": "path", - "required": true, - "type": "string", - "description": "Resource name" - } - ], - "responses": { - "200": { - "description": "OK" - }, - "204": { - "description": "No Content" - } - } - }, - "patch": { - "operationId": "TestResources_Update", - "summary": "Update test resource", - "description": "Updates a test resource.", - "parameters": [ - { - "name": "subscriptionId", - "in": "path", - "required": true, - "type": "string", - "description": "Subscription ID" - }, - { - "name": "resourceGroupName", - "in": "path", - "required": true, - "type": "string", - "description": "Resource group name" - }, - { - "name": "resourceName", - "in": "path", - "required": true, - "type": "string", - "description": "Resource name" - }, - { - "name": "parameters", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/TestResource" - }, - "description": "The parameters to provide for the test resource." - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/TestResource" - } - } - } - } - }, - "/providers/Microsoft.Test/operations": { - "get": { - "operationId": "Operations_List", - "summary": "List operations", - "description": "Lists all operations.", - "responses": { - "200": { - "description": "OK" - } - } - } - } - }, - "definitions": { - "TestResource": { - "description": "Test resource with managedByExtended property", - "properties": { - "location": { - "type": "string", - "description": "Resource location" - }, - "tags": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Resource tags" - }, - "managedByExtended": { - "type": "array", - "items": { - "type": "string" - }, - "description": "The fully qualified resource IDs of the resources that manage this resource" - }, - "properties": { - "$ref": "#/definitions/TestResourceProperties" - } - }, - "required": [ - "location" - ], - "allOf": [ - { - "$ref": "#/definitions/Resource" - } - ] - }, - "TestResourceProperties": { - "description": "Properties of the test resource", - "properties": { - "provisioningState": { - "type": "string", - "description": "Provisioning state", - "readOnly": true - } - } - }, - "Resource": { - "properties": { - "id": { - "readOnly": true, - "type": "string", - "description": "Resource Id" - }, - "name": { - "readOnly": true, - "type": "string", - "description": "Resource name" - }, - "type": { - "readOnly": true, - "type": "string", - "description": "Resource type" - } - }, - "x-ms-azure-resource": true - } - }, - "parameters": { - "SubscriptionIdParameter": { - "name": "subscriptionId", - "in": "path", - "required": true, - "type": "string", - "description": "test subscription id" - }, - "ApiVersion": { - "name": "api-version", - "in": "path", - "required": true, - "type": "string", - "description": "test api version" - } - } -} diff --git a/packages/rulesets/src/native/tests/resources/body-top-level-properties-real-swagger.json b/packages/rulesets/src/native/tests/resources/body-top-level-properties-real-swagger.json index ec7af1a30..46d3c80d4 100644 --- a/packages/rulesets/src/native/tests/resources/body-top-level-properties-real-swagger.json +++ b/packages/rulesets/src/native/tests/resources/body-top-level-properties-real-swagger.json @@ -140,6 +140,13 @@ "type": "string", "description": "The escaped name of the namespace." }, + "managedByExtended": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The fully qualified resource IDs of the resources that manage this resource" + }, "classification": { "$ref": "#/definitions/NamespaceClassification", "description": "Kind of namespace" From cab0d67ccdce0ad52bb3d4867d774db58fb7a2b1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 06:03:28 +0000 Subject: [PATCH 08/12] Add Rush change file for managedByExtended feature Co-authored-by: mikeharder <9459391+mikeharder@users.noreply.github.com> --- ...copilot-add-managedByExtended_2026-01-29-06-01.json | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 common/changes/@microsoft.azure/openapi-validator-rulesets/copilot-add-managedByExtended_2026-01-29-06-01.json diff --git a/common/changes/@microsoft.azure/openapi-validator-rulesets/copilot-add-managedByExtended_2026-01-29-06-01.json b/common/changes/@microsoft.azure/openapi-validator-rulesets/copilot-add-managedByExtended_2026-01-29-06-01.json new file mode 100644 index 000000000..bda1d3a62 --- /dev/null +++ b/common/changes/@microsoft.azure/openapi-validator-rulesets/copilot-add-managedByExtended_2026-01-29-06-01.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@microsoft.azure/openapi-validator-rulesets", + "comment": "Add managedByExtended to allowed body top-level properties", + "type": "patch" + } + ], + "packageName": "@microsoft.azure/openapi-validator-rulesets" +} From 5cb9e21414e7971d3fa7d3cdfd0a0eda94d0378b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 06:08:57 +0000 Subject: [PATCH 09/12] Update package.json to v2.2.1 and CHANGELOG.md directly Co-authored-by: mikeharder <9459391+mikeharder@users.noreply.github.com> --- ...copilot-add-managedByExtended_2026-01-29-06-01.json | 10 ---------- packages/rulesets/CHANGELOG.md | 6 ++++++ packages/rulesets/package.json | 2 +- 3 files changed, 7 insertions(+), 11 deletions(-) delete mode 100644 common/changes/@microsoft.azure/openapi-validator-rulesets/copilot-add-managedByExtended_2026-01-29-06-01.json diff --git a/common/changes/@microsoft.azure/openapi-validator-rulesets/copilot-add-managedByExtended_2026-01-29-06-01.json b/common/changes/@microsoft.azure/openapi-validator-rulesets/copilot-add-managedByExtended_2026-01-29-06-01.json deleted file mode 100644 index bda1d3a62..000000000 --- a/common/changes/@microsoft.azure/openapi-validator-rulesets/copilot-add-managedByExtended_2026-01-29-06-01.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@microsoft.azure/openapi-validator-rulesets", - "comment": "Add managedByExtended to allowed body top-level properties", - "type": "patch" - } - ], - "packageName": "@microsoft.azure/openapi-validator-rulesets" -} diff --git a/packages/rulesets/CHANGELOG.md b/packages/rulesets/CHANGELOG.md index e62e86884..36f7fe739 100644 --- a/packages/rulesets/CHANGELOG.md +++ b/packages/rulesets/CHANGELOG.md @@ -1,5 +1,11 @@ # Change Log - @microsoft.azure/openapi-validator-rulesets +## 2.2.1 + +### Patches + +- Add managedByExtended to allowed body top-level properties + ## 2.2.0 ### Minor changes diff --git a/packages/rulesets/package.json b/packages/rulesets/package.json index 85c94750b..d176766ca 100644 --- a/packages/rulesets/package.json +++ b/packages/rulesets/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft.azure/openapi-validator-rulesets", - "version": "2.2.0", + "version": "2.2.1", "description": "Azure OpenAPI Validator", "main": "dist/index.js", "scripts": { From b0e612736505cfcbd593a5456ce983385a137033 Mon Sep 17 00:00:00 2001 From: Mike Harder Date: Wed, 28 Jan 2026 22:36:34 -0800 Subject: [PATCH 10/12] Apply suggestion from @mikeharder --- packages/rulesets/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rulesets/CHANGELOG.md b/packages/rulesets/CHANGELOG.md index 36f7fe739..d67458f5c 100644 --- a/packages/rulesets/CHANGELOG.md +++ b/packages/rulesets/CHANGELOG.md @@ -4,7 +4,7 @@ ### Patches -- Add managedByExtended to allowed body top-level properties +- [BodyTopLevelProperties] Add "managedByExtended" to allowed list of top-level properties ## 2.2.0 From ad0471d57fd560b9f82df0d9efa293380e7f95a8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 30 Jan 2026 21:53:04 +0000 Subject: [PATCH 11/12] Increment patch version from 2.2.1 to 2.2.2 Co-authored-by: mikeharder <9459391+mikeharder@users.noreply.github.com> --- packages/rulesets/CHANGELOG.md | 7 ++++++- packages/rulesets/package.json | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/rulesets/CHANGELOG.md b/packages/rulesets/CHANGELOG.md index 6823d2b2b..bb5c0e556 100644 --- a/packages/rulesets/CHANGELOG.md +++ b/packages/rulesets/CHANGELOG.md @@ -1,10 +1,15 @@ # Change Log - @microsoft.azure/openapi-validator-rulesets -## 2.2.1 +## 2.2.2 ### Patches - [BodyTopLevelProperties] Add "managedByExtended" to allowed list of top-level properties + +## 2.2.1 + +### Patches + - [MutabilityWithReadOnly] Optimize rule to prevent excessive memory usage on large specs ## 2.2.0 diff --git a/packages/rulesets/package.json b/packages/rulesets/package.json index d176766ca..c63a45256 100644 --- a/packages/rulesets/package.json +++ b/packages/rulesets/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft.azure/openapi-validator-rulesets", - "version": "2.2.1", + "version": "2.2.2", "description": "Azure OpenAPI Validator", "main": "dist/index.js", "scripts": { From 98aee2589abb2a422df426dee0120ed83eefbf2b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Feb 2026 21:45:05 +0000 Subject: [PATCH 12/12] Increment patch version from 2.2.2 to 2.2.3 Co-authored-by: mikeharder <9459391+mikeharder@users.noreply.github.com> --- packages/rulesets/CHANGELOG.md | 2 +- packages/rulesets/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/rulesets/CHANGELOG.md b/packages/rulesets/CHANGELOG.md index bb5c0e556..197e04fda 100644 --- a/packages/rulesets/CHANGELOG.md +++ b/packages/rulesets/CHANGELOG.md @@ -1,6 +1,6 @@ # Change Log - @microsoft.azure/openapi-validator-rulesets -## 2.2.2 +## 2.2.3 ### Patches diff --git a/packages/rulesets/package.json b/packages/rulesets/package.json index c63a45256..def0fa2f8 100644 --- a/packages/rulesets/package.json +++ b/packages/rulesets/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft.azure/openapi-validator-rulesets", - "version": "2.2.2", + "version": "2.2.3", "description": "Azure OpenAPI Validator", "main": "dist/index.js", "scripts": {