Skip to content

docs(arm): add guidance for evaluating ARM rule violations - #4848

Merged
markcowl merged 11 commits into
Azure:mainfrom
markcowl:markcowl/arm-rules-suppression-guidance
Jul 31, 2026
Merged

docs(arm): add guidance for evaluating ARM rule violations#4848
markcowl merged 11 commits into
Azure:mainfrom
markcowl:markcowl/arm-rules-suppression-guidance

Conversation

@markcowl

@markcowl markcowl commented Jul 7, 2026

Copy link
Copy Markdown
Member

Adds a new "Evaluating Rule Violations" section to the ARM rules how-to page to help rule authors and ARM reviewers assess rule violations.

The section contains three tables, each describing, per rule, the area of impact, the impact of a violation, when suppression is appropriate, and how to fix the underlying issue:

  • High-impact rules not covered by LintDiff
  • High- and medium-impact API rules that correspond 1:1 with LintDiff (error) rules
  • Low- and medium-impact API rules without a clean mapping to LintDiff rules

The source content was cleaned up into natural language with concise, complete sentences. Documentation-only change.

Add a new section to the ARM rules how-to that helps rule authors and ARM reviewers evaluate rule violations, describing each rule's area of impact, impact, when to suppress, and how to fix it.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@azure-sdk-automation

Copy link
Copy Markdown
Contributor

No changes needing a change description found.

@azure-sdk-automation

Copy link
Copy Markdown
Contributor

You can try these changes here

🛝 Playground 🌐 Website

markcowl and others added 2 commits July 7, 2026 14:20
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions

github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

⚡ Benchmark Results

⚠️ 4 metric(s) regressed above the +5% threshold:

Metric Baseline Current Change
loader 🟡 303.9ms 🟡 325.1ms +7.0% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-response-body 🔴 33.0ms 🔴 34.8ms +5.3% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/lro-location-header 🟡 19.5ms 🔴 20.9ms +6.9% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-response-body 🔴 29.7ms 🔴 31.7ms +6.6% 🔴
Full details – comparing 136f8ea vs baseline rolling-baseline-f6e42f0-aca5355 (rolling baseline (20 main runs))
Metric Baseline Current Change
total 🔴 1.00s 🔴 1.05s +4.5%
loader 🟡 303.9ms 🟡 325.1ms +7.0% 🔴
resolver 🟢 39.9ms 🟢 40.8ms +2.3%
checker 🟡 362.3ms 🟡 376.3ms +3.9%
validation 🟢 84.5ms 🟢 86.2ms +2.1%
 ↳ validation/@azure-tools/typespec-azure-core 🟡 12.5ms 🟡 13.0ms +3.3%
 ↳ validation/@typespec/http 🟡 15.4ms 🟡 15.9ms +3.4%
 ↳ validation/@typespec/rest 🟢 1.6ms 🟢 1.6ms +0.1%
 ↳ validation/@typespec/versioning 🔴 50.9ms 🔴 51.6ms +1.3%
 ↳ validation/compiler 🟢 3.8ms 🟢 3.9ms +2.1%
linter 🟡 213.8ms 🟡 221.9ms +3.8%
 ↳ linter/@azure-tools/typespec-azure-core/auth-required 🟢 0.1ms 🟢 0.1ms +4.2%
 ↳ linter/@azure-tools/typespec-azure-core/bad-record-type 🟢 0.6ms 🟢 0.6ms -0.2%
 ↳ linter/@azure-tools/typespec-azure-core/byos 🟢 8.3ms 🟢 8.4ms +1.8%
 ↳ linter/@azure-tools/typespec-azure-core/casing-style 🟢 1.4ms 🟢 1.5ms +1.6%
 ↳ linter/@azure-tools/typespec-azure-core/composition-over-inheritance 🟢 0.2ms 🟢 0.2ms +0.3%
 ↳ linter/@azure-tools/typespec-azure-core/documentation-required 🟢 1.9ms 🟢 2.0ms +1.1%
 ↳ linter/@azure-tools/typespec-azure-core/friendly-name 🟢 1.4ms 🟢 1.4ms +2.2%
 ↳ linter/@azure-tools/typespec-azure-core/key-visibility-required 🟢 0.4ms 🟢 0.4ms +1.8%
 ↳ linter/@azure-tools/typespec-azure-core/known-encoding 🟢 0.5ms 🟢 0.5ms +4.9%
 ↳ linter/@azure-tools/typespec-azure-core/long-running-polling-operation-required 🟢 0.8ms 🟢 0.8ms +0.1%
 ↳ linter/@azure-tools/typespec-azure-core/no-case-mismatch 🟢 0.7ms 🟢 0.7ms -0.6%
 ↳ linter/@azure-tools/typespec-azure-core/no-closed-literal-union 🟢 1.0ms 🟢 1.0ms -1.6%
 ↳ linter/@azure-tools/typespec-azure-core/no-enum 🟢 0.2ms 🟢 0.2ms +0.8%
 ↳ linter/@azure-tools/typespec-azure-core/no-error-status-codes 🟢 0.3ms 🟢 0.3ms +1.8%
 ↳ linter/@azure-tools/typespec-azure-core/no-explicit-routes-resource-ops 🟢 0.2ms 🟢 0.2ms +0.3%
 ↳ linter/@azure-tools/typespec-azure-core/no-format 🟢 0.8ms 🟢 0.8ms +1.4%
 ↳ linter/@azure-tools/typespec-azure-core/no-generic-numeric 🟢 0.8ms 🟢 0.8ms +0.9%
 ↳ linter/@azure-tools/typespec-azure-core/no-header-explode 🔴 26.5ms 🔴 27.8ms +4.9%
 ↳ linter/@azure-tools/typespec-azure-core/no-legacy-usage 🟢 2.0ms 🟢 2.1ms +2.9%
 ↳ linter/@azure-tools/typespec-azure-core/no-multiple-discriminator 🟢 0.2ms 🟢 0.2ms +5.7%
 ↳ linter/@azure-tools/typespec-azure-core/no-nullable 🟢 0.4ms 🟢 0.4ms +2.5%
 ↳ linter/@azure-tools/typespec-azure-core/no-offsetdatetime 🟢 1.9ms 🟢 2.0ms +3.8%
 ↳ linter/@azure-tools/typespec-azure-core/no-openapi 🟢 2.3ms 🟢 2.3ms -0.2%
 ↳ linter/@azure-tools/typespec-azure-core/no-private-usage 🟢 3.1ms 🟢 3.2ms +1.4%
 ↳ linter/@azure-tools/typespec-azure-core/no-query-explode 🔴 27.7ms 🔴 28.9ms +4.5%
 ↳ linter/@azure-tools/typespec-azure-core/no-response-body 🔴 33.0ms 🔴 34.8ms +5.3% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-rest-library-interfaces 🟢 0.1ms 🟢 0.1ms -0.9%
 ↳ linter/@azure-tools/typespec-azure-core/no-route-parameter-name-mismatch 🟢 7.6ms 🟢 8.0ms +5.0%
 ↳ linter/@azure-tools/typespec-azure-core/no-rpc-path-params 🟢 0.4ms 🟢 0.4ms +3.6%
 ↳ linter/@azure-tools/typespec-azure-core/no-string-discriminator 🟢 0.1ms 🟢 0.1ms +2.5%
 ↳ linter/@azure-tools/typespec-azure-core/no-unknown 🟢 0.3ms 🟢 0.4ms +2.6%
 ↳ linter/@azure-tools/typespec-azure-core/no-unnamed-union 🟢 0.8ms 🟢 0.8ms -0.4%
 ↳ linter/@azure-tools/typespec-azure-core/operation-missing-api-version 🟢 0.4ms 🟢 0.4ms -2.9%
 ↳ linter/@azure-tools/typespec-azure-core/request-body-problem 🟢 0.5ms 🟢 0.5ms +0.7%
 ↳ linter/@azure-tools/typespec-azure-core/require-versioned 🟢 0.1ms 🟢 0.1ms +2.5%
 ↳ linter/@azure-tools/typespec-azure-core/response-schema-problem 🔴 32.5ms 🔴 33.8ms +4.1%
 ↳ linter/@azure-tools/typespec-azure-core/rpc-operation-request-body 🟢 0.7ms 🟢 0.7ms +2.9%
 ↳ linter/@azure-tools/typespec-azure-core/spread-discriminated-model 🟢 0.5ms 🟢 0.5ms +1.0%
 ↳ linter/@azure-tools/typespec-azure-core/use-standard-names 🟢 7.5ms 🟢 7.9ms +4.6%
 ↳ linter/@azure-tools/typespec-azure-core/use-standard-operations 🟢 0.3ms 🟢 0.3ms +1.3%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-agent-base-type-child-resources 🔴 21.4ms 🔴 22.4ms +4.5%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-agent-base-type-lifecycle-operations 🟢 0.3ms 🟢 0.3ms +4.0%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-common-types-version 🟡 12.1ms 🟡 12.6ms +4.0%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-custom-resource-no-key 🟢 0.2ms 🟢 0.2ms +4.9%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-custom-resource-usage-discourage 🟢 0.1ms 🟢 0.1ms +1.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-delete-operation-response-codes 🟢 4.9ms 🟢 4.6ms -6.4%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-no-path-casing-conflicts 🟡 17.0ms 🟡 17.7ms +3.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-no-record 🟢 0.6ms 🟢 0.6ms +2.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes 🟢 1.4ms 🟢 1.5ms +8.4%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-put-operation-response-codes 🟢 0.2ms 🟢 0.2ms -0.4%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-action-no-segment 🟢 0.4ms 🟢 0.5ms +2.7%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-duplicate-property 🟢 0.4ms 🟢 0.4ms +2.7%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-interface-requires-decorator 🟢 0.1ms 🟢 0.1ms +2.4%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-action-verb 🟢 0.2ms 🟢 0.2ms -0.7%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-envelope-property 🟢 0.3ms 🟢 0.3ms +7.0%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-version-format 🟢 0.2ms 🟢 0.2ms +2.3%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-key-invalid-chars 🟢 0.5ms 🟢 0.5ms +6.7%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-name-pattern 🟢 0.1ms 🟢 0.1ms +4.7%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-operation 🟢 0.5ms 🟢 0.6ms +4.3%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-operation-response 🟢 8.9ms 🟢 9.3ms +4.4%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-patch 🟢 0.8ms 🟢 0.8ms +0.6%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-path-segment-invalid-chars 🟢 0.4ms 🟢 0.4ms +3.1%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-provisioning-state 🟢 0.4ms 🟢 0.4ms +1.9%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/beyond-nesting-levels 🟢 0.2ms 🟢 0.2ms +5.0%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/empty-updateable-properties 🟢 0.4ms 🟢 0.4ms +4.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/improper-subscription-list-operation 🟢 0.1ms 🟢 0.1ms +6.2%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/lro-location-header 🟡 19.5ms 🔴 20.9ms +6.9% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/missing-operations-endpoint 🟢 0.1ms 🟢 0.1ms +2.2%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/missing-x-ms-identifiers 🟢 1.0ms 🟢 1.0ms +1.6%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-empty-model 🟢 0.3ms 🟢 0.3ms +4.3%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-override-props 🟢 0.3ms 🟢 0.3ms +3.0%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-resource-delete-operation 🟢 0.5ms 🟢 0.5ms +5.2%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-response-body 🔴 29.7ms 🔴 31.7ms +6.6% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/patch-envelope 🟢 0.4ms 🟢 0.4ms +4.6%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/resource-name 🟢 0.4ms 🟢 0.4ms +2.2%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/secret-prop 🟢 5.4ms 🟢 5.3ms -0.5%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/unsupported-type 🟢 0.7ms 🟢 0.7ms +1.4%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/version-progression 🟢 0.3ms 🟢 0.3ms +0.2%
 ↳ linter/@azure-tools/typespec-client-generator-core/property-name-conflict 🟢 2.3ms 🟢 2.3ms +3.1%
 ↳ linter/@azure-tools/typespec-client-generator-core/require-client-suffix 🟢 1.7ms 🟢 1.7ms +2.3%
emit 🔴 6.01s 🔴 6.18s +2.9%
 ↳ emit/@Azure-Tools 🟢 0.0ms 🟢 0.0ms +0.0%
 ↳ emit/@azure-tools/typespec-autorest 🟢 124.4ms 🟢 127.5ms +2.5%
 ↳ emit/@azure-tools/typespec-python 🔴 2.24s 🔴 2.31s +3.0%
 ↳ emit/@typespec 🟢 0.0ms 🟢 0.0ms +0.0%
 ↳ emit/@typespec/http-client-js 🔴 566.7ms 🔴 582.9ms +2.9%
 ↳ emit/@typespec/openapi3 🟢 106.9ms 🟢 110.4ms +3.2%
 ↳ emit/@typespec/openapi3/compute 🟢 92.9ms 🟢 95.7ms +3.1%
 ↳ emit/@typespec/openapi3/write 🟢 13.8ms 🟢 14.3ms +4.1%

Averaged across 3 specs (azure-arm-resource-manager, azure-core-dataplane, azure-full).
Threshold: changes > ±5% are highlighted.
🟢 Fast · 🟡 Moderate (stages >200ms, rules >10ms) · 🔴 Slow (stages >400ms, rules >20ms)

Merge the three rule-guidance tables into one table sorted alphabetically by rule name, with an added LintDiff column and duplicate rules included only once.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@microsoft-github-policy-service microsoft-github-policy-service Bot added the stale Mark a PR that hasn't been recently updated and will be closed. label Jul 24, 2026
Split the single Evaluating Rule Violations table into per-library tables,
drop the area/when-to-suppress/fix columns, fold area of impact into the
impact text, link each rule name to its reference page, and show LintDiff
rules as linked RXXXX ids (guidelines doc) or linked Spectral rule names.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5971fcb3-e086-4988-b828-69a7084323d9
@markcowl
markcowl requested a review from xirzec as a code owner July 28, 2026 01:52
markcowl and others added 4 commits July 27, 2026 19:05
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5971fcb3-e086-4988-b828-69a7084323d9
- Rename no-unnamed-union to no-unnamed-types and link its published page
- Remove obsolete use-extensible-enum from the enum rule cell
- Remove arm-legacy-operations-discourage row (no documentation page)

All rule and LintDiff links verified to return HTTP 200.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5971fcb3-e086-4988-b828-69a7084323d9
…e-interface-requires-decorator; fix ARM rule doc links after merge

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5971fcb3-e086-4988-b828-69a7084323d9
@microsoft-github-policy-service microsoft-github-policy-service Bot added int:azure-specs Run integration tests against azure-rest-api-specs lib:azure-core Issues for @azure-tools/typespec-azure-core library lib:azure-resource-manager Issues for @azure-tools/typespec-azure-core library linter Issues related to linter rules labels Jul 28, 2026
@pkg-pr-new

pkg-pr-new Bot commented Jul 28, 2026

Copy link
Copy Markdown

Open in StackBlitz

npm i https://pkg.pr.new/@azure-tools/typespec-azure-core@4848
npm i https://pkg.pr.new/@azure-tools/typespec-azure-resource-manager@4848

commit: 341cdda

Update the ## LintDiff Equivalent links in ARM/core rule docs to point to
the specific azure-openapi-validator Spectral rule docs (matching the
arm-rules.md table) instead of the generic guidelines document.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5971fcb3-e086-4988-b828-69a7084323d9
@markcowl
markcowl enabled auto-merge July 29, 2026 03:47
@markcowl
markcowl added this pull request to the merge queue Jul 31, 2026
Merged via the queue into Azure:main with commit e1af92e Jul 31, 2026
31 of 32 checks passed
@markcowl
markcowl deleted the markcowl/arm-rules-suppression-guidance branch July 31, 2026 22:06
github-actions Bot added a commit to fork-the-planet/Azure___typespec-azure that referenced this pull request Aug 3, 2026
- Add 'Evaluating Rule Violations' section to ARM rules how-to page
  with tables describing impact, suppression guidance, and fix steps
  for each ARM linting rule (from upstream PR Azure#4848)
- Add documentation for new TCGC C# linter rules:
  - csharp-model-suffix: guides use of Config/Content/Result suffixes
  - csharp-use-standard-acronyms: guides IP/DB/OS acronym casing
  (from upstream PR Azure#4867)
- Update TCGC linter reference to list the two new rules

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

int:azure-specs Run integration tests against azure-rest-api-specs lib:azure-core Issues for @azure-tools/typespec-azure-core library lib:azure-resource-manager Issues for @azure-tools/typespec-azure-core library linter Issues related to linter rules meta:website TypeSpec.io updates stale Mark a PR that hasn't been recently updated and will be closed.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants