Skip to content

RFC: TypeSpec Planning 2026 - 2027#4633

Open
markcowl wants to merge 4 commits into
mainfrom
rfc/typespec-planning-2026-upstream
Open

RFC: TypeSpec Planning 2026 - 2027#4633
markcowl wants to merge 4 commits into
mainfrom
rfc/typespec-planning-2026-upstream

Conversation

@markcowl

Copy link
Copy Markdown
Member

Overview

This PR introduces a comprehensive TypeSpec planning document for Summer 2026 and beyond.

Document Location


fc/typespec-futures/typespec-planning-2026.md\

Workstreams Covered

  1. AutoRest Retirement / TypeSpec Native CI Tools — LintDiff replacement, breaking change detection, examples tooling, SDK team migration, CI log normalization, suppression management, lint suppression review
  2. TypeSpec Service Spec Tools — AI-powered authoring, version extraction (incl. private→public migration), spec validation, documentation & samples, source emitter
  3. TypeSpec Contribution Tools — AI skill library, documentation chatbots, AI PR data collection, Azure SDK emitter consolidation
  4. TypeSpec Simplification — Functions & composition, meta-language improvements, complex versioning, compiler infrastructure
  5. TypeSpec-Azure Simplification — Azure.Core and ARM library simplification using functions
  6. Agentic Tools for Repository Maintenance — Issue triage, release management, continuous quality, spec rollout, docs maintenance
  7. Accelerating Service Development — Stub generation, test generation, live validation, ARM to RPaaS transformation
  8. API Audits and Completeness — Driving core packages to 1.0
  9. New Service Patterns — ARM patterns, streaming, Azure AI/Foundry

Each section includes user stories and user-impact-focused metrics.

Additional Sections

  • End-to-End User Experience Vision — Target experience for service teams, contributors, and platform maintainers
  • Quarterly Roadmap — Summer/Fall/Winter 2026 capabilities and metric checkpoints

Introduces a comprehensive planning document covering TypeSpec ecosystem
strategy for Summer 2026 and beyond, organized into 9 workstreams with
user stories and user-impact metrics for each feature area.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@markcowl markcowl changed the title RFC: TypeSpec Planning 2026 — Summer Vision RFC: TypeSpec Planning 2026 - 2027 Jun 15, 2026
@azure-sdk

Copy link
Copy Markdown
Collaborator

No changes needing a change description found.

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

azure-sdk commented Jun 15, 2026

Copy link
Copy Markdown
Collaborator

You can try these changes here

🛝 Playground 🌐 Website

@github-actions

github-actions Bot commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

⚡ Benchmark Results

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

Metric Baseline Current Change
total 🔴 486.6ms 🔴 588.8ms +21.0% 🔴
loader 🟢 125.5ms 🟢 158.8ms +26.6% 🔴
resolver 🟢 15.2ms 🟢 20.1ms +32.3% 🔴
checker 🟢 146.4ms 🟢 190.8ms +30.3% 🔴
validation 🟢 34.5ms 🟢 44.1ms +27.6% 🔴
 ↳ validation/@azure-tools/typespec-azure-core 🟢 5.1ms 🟢 6.4ms +25.5% 🔴
 ↳ validation/@typespec/http 🟢 4.4ms 🟢 5.5ms +24.7% 🔴
 ↳ validation/@typespec/versioning 🔴 22.8ms 🔴 29.4ms +29.3% 🔴
linter 🟢 104.2ms 🟢 131.8ms +26.4% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/byos 🟢 4.7ms 🟢 5.8ms +22.1% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-header-explode 🟡 14.2ms 🟡 18.3ms +28.5% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-query-explode 🟡 14.8ms 🟡 18.6ms +25.4% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-response-body 🟡 17.8ms 🔴 22.5ms +26.4% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-route-parameter-name-mismatch 🟢 3.6ms 🟢 4.7ms +29.8% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/response-schema-problem 🟡 17.4ms 🔴 22.4ms +28.9% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/use-standard-names 🟢 3.8ms 🟢 5.4ms +43.0% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-operation-response 🟢 3.4ms 🟢 4.4ms +30.1% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/lro-location-header 🟡 10.0ms 🟡 13.4ms +33.7% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-response-body 🟡 16.8ms 🔴 20.3ms +21.2% 🔴
emit 🔴 4.56s 🔴 5.88s +29.0% 🔴
 ↳ emit/@azure-tools/typespec-autorest 🟢 127.5ms 🟢 199.3ms +56.3% 🔴
 ↳ emit/@azure-tools/typespec-python 🔴 3.26s 🔴 4.27s +30.8% 🔴
 ↳ emit/@typespec/http-client-js 🔴 946.7ms 🔴 1.15s +21.7% 🔴
 ↳ emit/@typespec/openapi3 🟢 130.2ms 🟢 151.3ms +16.2% 🔴
 ↳ emit/@typespec/openapi3/compute 🟢 112.6ms 🟢 131.6ms +16.9% 🔴
 ↳ emit/@typespec/openapi3/write 🟢 17.7ms 🟢 20.2ms +14.3% 🔴
Full details – comparing 155fe97 vs baseline ca5bc9e
Metric Baseline Current Change
total 🔴 486.6ms 🔴 588.8ms +21.0% 🔴
loader 🟢 125.5ms 🟢 158.8ms +26.6% 🔴
resolver 🟢 15.2ms 🟢 20.1ms +32.3% 🔴
checker 🟢 146.4ms 🟢 190.8ms +30.3% 🔴
validation 🟢 34.5ms 🟢 44.1ms +27.6% 🔴
 ↳ validation/@azure-tools/typespec-azure-core 🟢 5.1ms 🟢 6.4ms +25.5% 🔴
 ↳ validation/@typespec/http 🟢 4.4ms 🟢 5.5ms +24.7% 🔴
 ↳ validation/@typespec/rest 🟢 0.5ms 🟢 0.8ms +52.6%
 ↳ validation/@typespec/versioning 🔴 22.8ms 🔴 29.4ms +29.3% 🔴
 ↳ validation/compiler 🟢 1.4ms 🟢 1.8ms +30.7%
linter 🟢 104.2ms 🟢 131.8ms +26.4% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/auth-required 🟢 0.0ms 🟢 0.0ms +19.9%
 ↳ linter/@azure-tools/typespec-azure-core/bad-record-type 🟢 0.2ms 🟢 0.2ms -4.4%
 ↳ linter/@azure-tools/typespec-azure-core/byos 🟢 4.7ms 🟢 5.8ms +22.1% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/casing-style 🟢 0.6ms 🟢 0.6ms +15.3%
 ↳ linter/@azure-tools/typespec-azure-core/composition-over-inheritance 🟢 0.1ms 🟢 0.1ms +26.8%
 ↳ linter/@azure-tools/typespec-azure-core/documentation-required 🟢 0.8ms 🟢 0.9ms +11.7%
 ↳ linter/@azure-tools/typespec-azure-core/friendly-name 🟢 0.5ms 🟢 0.6ms +13.6%
 ↳ linter/@azure-tools/typespec-azure-core/key-visibility-required 🟢 0.1ms 🟢 0.2ms +24.5%
 ↳ linter/@azure-tools/typespec-azure-core/known-encoding 🟢 0.3ms 🟢 0.3ms +2.3%
 ↳ linter/@azure-tools/typespec-azure-core/long-running-polling-operation-required 🟢 0.2ms 🟢 0.3ms +32.5%
 ↳ linter/@azure-tools/typespec-azure-core/no-case-mismatch 🟢 0.2ms 🟢 0.3ms +27.4%
 ↳ linter/@azure-tools/typespec-azure-core/no-closed-literal-union 🟢 0.2ms 🟢 0.3ms +44.9%
 ↳ linter/@azure-tools/typespec-azure-core/no-enum 🟢 0.0ms 🟢 0.0ms +29.8%
 ↳ linter/@azure-tools/typespec-azure-core/no-error-status-codes 🟢 0.1ms 🟢 0.1ms +24.0%
 ↳ linter/@azure-tools/typespec-azure-core/no-explicit-routes-resource-ops 🟢 0.1ms 🟢 0.1ms +34.8%
 ↳ linter/@azure-tools/typespec-azure-core/no-format 🟢 0.5ms 🟢 0.6ms +18.7%
 ↳ linter/@azure-tools/typespec-azure-core/no-generic-numeric 🟢 0.5ms 🟢 0.4ms -10.8%
 ↳ linter/@azure-tools/typespec-azure-core/no-header-explode 🟡 14.2ms 🟡 18.3ms +28.5% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-legacy-usage 🟢 0.9ms 🟢 1.1ms +20.7%
 ↳ linter/@azure-tools/typespec-azure-core/no-multiple-discriminator 🟢 0.1ms 🟢 0.1ms +27.6%
 ↳ linter/@azure-tools/typespec-azure-core/no-nullable 🟢 0.2ms 🟢 0.3ms +4.4%
 ↳ linter/@azure-tools/typespec-azure-core/no-offsetdatetime 🟢 1.0ms 🟢 1.2ms +16.2%
 ↳ linter/@azure-tools/typespec-azure-core/no-openapi 🟢 1.6ms 🟢 2.1ms +27.0%
 ↳ linter/@azure-tools/typespec-azure-core/no-private-usage 🟢 1.6ms 🟢 2.0ms +30.1%
 ↳ linter/@azure-tools/typespec-azure-core/no-query-explode 🟡 14.8ms 🟡 18.6ms +25.4% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-response-body 🟡 17.8ms 🔴 22.5ms +26.4% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-rest-library-interfaces 🟢 0.0ms 🟢 0.0ms +18.2%
 ↳ linter/@azure-tools/typespec-azure-core/no-route-parameter-name-mismatch 🟢 3.6ms 🟢 4.7ms +29.8% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-rpc-path-params 🟢 0.1ms 🟢 0.2ms +21.8%
 ↳ linter/@azure-tools/typespec-azure-core/no-string-discriminator 🟢 0.0ms 🟢 0.0ms +7.3%
 ↳ linter/@azure-tools/typespec-azure-core/no-unknown 🟢 0.2ms 🟢 0.2ms -1.0%
 ↳ linter/@azure-tools/typespec-azure-core/no-unnamed-union 🟢 0.3ms 🟢 0.4ms +16.2%
 ↳ linter/@azure-tools/typespec-azure-core/operation-missing-api-version 🟢 0.1ms 🟢 0.2ms +31.9%
 ↳ linter/@azure-tools/typespec-azure-core/request-body-problem 🟢 0.3ms 🟢 0.3ms +25.1%
 ↳ linter/@azure-tools/typespec-azure-core/require-versioned 🟢 0.0ms 🟢 0.0ms +28.3%
 ↳ linter/@azure-tools/typespec-azure-core/response-schema-problem 🟡 17.4ms 🔴 22.4ms +28.9% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/rpc-operation-request-body 🟢 0.2ms 🟢 0.3ms +23.3%
 ↳ linter/@azure-tools/typespec-azure-core/spread-discriminated-model 🟢 0.3ms 🟢 0.3ms +5.7%
 ↳ linter/@azure-tools/typespec-azure-core/use-standard-names 🟢 3.8ms 🟢 5.4ms +43.0% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/use-standard-operations 🟢 0.1ms 🟢 0.1ms +25.0%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-common-types-version 🟢 2.9ms 🟢 3.8ms +29.9%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-custom-resource-no-key 🟢 0.1ms 🟢 0.1ms +23.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-custom-resource-usage-discourage 🟢 0.1ms 🟢 0.1ms +8.3%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-delete-operation-response-codes 🟢 3.9ms 🟢 4.8ms +21.5%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-no-path-casing-conflicts 🟢 3.2ms 🟢 4.1ms +28.3%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-no-record 🟢 0.4ms 🟢 0.4ms +1.7%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes 🟢 0.3ms 🟢 0.4ms +28.2%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-put-operation-response-codes 🟢 0.0ms 🟢 0.0ms +18.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-action-no-segment 🟢 0.2ms 🟢 0.2ms +38.2%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-duplicate-property 🟢 0.1ms 🟢 0.1ms +10.4%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-interface-requires-decorator 🟢 0.0ms 🟢 0.0ms +26.6%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-action-verb 🟢 0.1ms 🟢 0.1ms +26.3%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-envelope-property 🟢 0.1ms 🟢 0.1ms +6.4%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-version-format 🟢 0.0ms 🟢 0.0ms +34.9%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-key-invalid-chars 🟢 0.2ms 🟢 0.2ms +17.9%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-name-pattern 🟢 0.0ms 🟢 0.0ms +19.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-operation 🟢 0.1ms 🟢 0.2ms +19.7%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-operation-response 🟢 3.4ms 🟢 4.4ms +30.1% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-patch 🟢 0.2ms 🟢 0.3ms +26.0%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-path-segment-invalid-chars 🟢 0.2ms 🟢 0.2ms +18.9%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-provisioning-state 🟢 0.1ms 🟢 0.1ms +16.4%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/beyond-nesting-levels 🟢 0.1ms 🟢 0.1ms +18.9%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/empty-updateable-properties 🟢 0.1ms 🟢 0.1ms +15.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/improper-subscription-list-operation 🟢 0.0ms 🟢 0.0ms +29.6%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/lro-location-header 🟡 10.0ms 🟡 13.4ms +33.7% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/missing-operations-endpoint 🟢 0.0ms 🟢 0.0ms +42.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/missing-x-ms-identifiers 🟢 0.3ms 🟢 0.3ms +4.0%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-empty-model 🟢 0.1ms 🟢 0.1ms +25.4%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-override-props 🟢 0.1ms 🟢 0.1ms +2.9%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-resource-delete-operation 🟢 0.1ms 🟢 0.2ms +31.7%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-response-body 🟡 16.8ms 🔴 20.3ms +21.2% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/patch-envelope 🟢 0.1ms 🟢 0.1ms +22.0%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/resource-name 🟢 0.1ms 🟢 0.1ms +15.5%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/secret-prop 🟢 2.0ms 🟢 2.7ms +34.5%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/unsupported-type 🟢 0.4ms 🟢 0.4ms +2.0%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/version-progression 🟢 0.0ms 🟢 0.0ms +13.9%
 ↳ linter/@azure-tools/typespec-client-generator-core/property-name-conflict 🟢 0.8ms 🟢 1.1ms +25.3%
 ↳ linter/@azure-tools/typespec-client-generator-core/require-client-suffix 🟢 0.2ms 🟢 0.2ms +32.4%
emit 🔴 4.56s 🔴 5.88s +29.0% 🔴
 ↳ emit/@azure-tools/typespec-autorest 🟢 127.5ms 🟢 199.3ms +56.3% 🔴
 ↳ emit/@azure-tools/typespec-python 🔴 3.26s 🔴 4.27s +30.8% 🔴
 ↳ emit/@typespec/http-client-js 🔴 946.7ms 🔴 1.15s +21.7% 🔴
 ↳ emit/@typespec/openapi3 🟢 130.2ms 🟢 151.3ms +16.2% 🔴
 ↳ emit/@typespec/openapi3/compute 🟢 112.6ms 🟢 131.6ms +16.9% 🔴
 ↳ emit/@typespec/openapi3/write 🟢 17.7ms 🟢 20.2ms +14.3% 🔴

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)

markcowl and others added 2 commits June 15, 2026 18:20
…oundaries

- Normalize 'service team member' to 'service team' throughout
- Differentiate user stories across CI subsections to reduce overlap
- Clarify Spec Rollout Tools as orchestration (vs source emitter as engine)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Run prettier on the planning document
- Add 'unreviewed' to cspell.yaml dictionary

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
| False positive rate | TBD | < 5% |
| Service team satisfaction (quarterly survey) | TBD | > 4/5 rating |

### TypeSpec Breaking Change Detection

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are we talking about RestAPI breaking changes, or SDK breaking changes or both?

Who is responsible to define the rules on each side? Are we in a situation like the linter, where the ARM team and/or SDK team is responsible to define those rules?

Also, it's not clear if this tool support suppressions, it's not explicitly mentionned

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe from previous discussion this is only about rest api breaking change detection. The SDK breaking change should be moved to the SDK validation checks if we could actually rely on them

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is about rest api breaking changes. If needed, we could add in some sdk breaking changes, but I think the only way to get a definitive list would involve emitter-specific considerations, so not in plan at the moment.


### TypeSpec Examples Tooling

- **Pri 0** — TypeSpec-native tools for generating, validating, and managing JSON examples

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's not put JSON as a format, @timotheeguerin is already making prototype with other format. Reading the rest, we just need to remove the word JSON. The meaning stays the same, but we're less opiniated in the format itself.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is more about the wire format than the example format - we can have yaml examples that describe json wire formats

- Reduce required examples for new API versions to only changed operations/models
- New processes to identify which examples need updating when spec changes occur

**User Stories:**

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's add a story for the Skills team:
As a doc writer in the Skills team, I can include my sample snippets in the documentation

Or something similar

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sdk examples?

| Example generation correctness (valid on first attempt) | TBD | > 95% |
| Service team satisfaction (quarterly survey) | TBD | > 4/5 rating |

### SDK Language Team Migration

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This one doesn't have a priority. It feels P0 to me, at least until we're sure the deprecation of autorest has little impact on them.

I feel there is two different stories, connected but not the same:

  • Make sure that the deprecation of autorest doesn't impact them. What about plugin they wrote? Consuming generated Swagger that is a little different than the manual one? Etc.
  • Move them to TypeSpec for their plugin generation

On top of that, make sure project Cirus starts on good fundation (ideally straight TypeSpec)


### CI Log Normalization and Simplification

- **Pri 0** — Normalize and simplify log output for azure-rest-api-specs CI tools

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's add a sentence about AI able to extract better context for auto-repair


**Goal:** Extend TypeSpec to support emerging Azure service patterns that aren't well-served by current abstractions.

### New ARM Patterns

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are we aware of something in particular?

| Time saved by reusing standard models instead of redefining them | TBD | > 1 hour per resource |
| Time to author a new ARM spec without custom workarounds | TBD | < 2 hours |

### Streaming Support

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I thought we were done with streaming at the TSP level? Is this about emitter?

As far as I'm aware, nobody is askinng for it, so it's P2


### Azure AI and Foundry APIs

- Better support for Azure AI service patterns

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we have specific expressed needs?


## 11. Quarterly Roadmap and Capabilities

### Summer 2026 (July–September)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

- Measure initial AI skill library usage and token costs
- Example authoring time baseline established

### Fall 2026 (October–December)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Feels reasonable, but difficult to conclude just yet


## 1. AutoRest Retirement / TypeSpec Native CI Tools

**Goal:** Complete the transformation from OpenAPI-centric tooling to TypeSpec-native CI pipelines, eliminating dependencies on AutoRest and OpenAPI 2.0 workflows.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just curious if there's been any thoughts about changing downstream docs generation for ms learn? will we continue requiring that all service teams check in swaggers for this purpose?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Over the long term we might not want to keep checking in the swagger, I doubt docs team will be writing a TypeSpec emitter any time soon but at some point, we might be able to get them to run the script to generate the swagger if they are the only ones that care about it.

But I believe too many other partners rely on the swagger still.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's a also a possibility of getting to openapi3 at some point


### TypeSpec Linting Tool (Replaces LintDiff)

- **Pri 0** — Normalize TypeSpec suppression mechanisms and replace LintDiff with a TypeSpec-native linting tool

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

By "Normalize TypeSpec suppression mechanisms" just to be 100% clear, you mean we will identify tspconfig.yaml and inline tsp suppressions for suppression review, anything else to factor in? <- you are referring to the suppression tool here, correct?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"native linting tool" to replace lintdiff is mainly a new typespec ruleset

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well, that and the capability to recognize new suppressions

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Recognizing new suppressions is part of the suppression tool which is a separate item in the plan


- **Pri 0** — Normalize TypeSpec suppression mechanisms and replace LintDiff with a TypeSpec-native linting tool
- Provide equivalent or better lint coverage compared to existing OpenAPI-based LintDiff
- Support suppression comments, baseline files, and incremental linting for PR workflows

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What does "support suppression comments" mean? If this is a linter ruleset doesn't typespec automatically support suppression comments?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this should be carified - the main thing about suppression comments is:

  • They should be part of what is displayed in the pr with the suppresison
  • A change in the suppression comment is a new suppression, effectively, so the diff mechanism needs to handle this.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok then this section belongs with the suppression tool description

@markcowl markcowl Jun 23, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's put this in a separate section

**User Stories:**

- _As a service team_, I can run TypeSpec linting locally and get the same results as CI, so I fix issues before pushing.
- _As a spec reviewer_, I see clear, actionable lint errors in PR checks with suggested fixes, reducing back-and-forth with authors.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In regards to suggested fixes, in your experience is this based on the rule description?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here the primary mechanism is codefixes, but the descriptio and examples also propvides useful; data, so a link to the doc page is an important piece of information that goes with a violation

Comment on lines +36 to +37
| Time to resolve lint errors per PR | TBD | 50% reduction |
| Number of PR round-trips caused by lint failures | TBD | 60% reduction |

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a baseline that we already have measured here to compare against?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is one of the things we need to figure out.

| Time to resolve issues discovered post-check-in | TBD | 70% reduction |
| Stale/unreviewed CI suppressions | TBD | 0 (within 30-day review SLA) |

### Lint Suppression Review Tooling

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok now that I see this separate entry for the suppression review tool, I'm even more curious what the suppression info under the linting tool section was referring to. To be clear, I agree that the suppression review tool is an independent item from the linting tool.

Comment on lines +158 to +159
| SDK-facing issues discovered post-check-in | TBD | 90% reduction |
| Time spent on post-merge spec corrections for SDK generation | TBD | 80% reduction |

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we have the initial baseline established for comparison?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is 80-90% feasible based on today's flow?


### Spec Validation and Simplification

- AI-driven tools to validate specs against Azure guidelines

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Arent the lints and breaking changes checks covering this specific point? Seems this is more about keeping specs up to date with latest TypeSpec/TypeSpec Azure updates. The other 2 points below are interesting to help keep specs up to date

Comment on lines +259 to +260
- Preserve authoring intent while modernizing spec structure
- Enable bulk migrations across the spec repo

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

isn't this similar to the AI skills about helping update the specs to new patterns? should those AI solutions simply be leveraged here on a larger scale?

### Complex Versioning Patterns

- **Pri 1** — Versioning mechanism for template instantiation parameter changes
- **Pri 1** — Versioning decorators for decorator application (including new syntax)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this would be great as we recently saw 2 cases, one with storage needing to add a whole new operations simply due to the fact that we cant version decorators

- Generate valid JSON examples for operations directly from a TypeSpec spec
- Validate existing JSON examples against a TypeSpec spec (replacing OpenAPI-based validation)
- Reduce required examples for new API versions to only changed operations/models
- New processes to identify which examples need updating when spec changes occur

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

on top of Laurent's comments, the tooling in the proposal would include that I believe, when you have a new api version you run the tool to generate new examples, either in an iteractive manner or by default it would add new example for all operations that might have something new showcasing it.

| Number of examples required per new API version | TBD | Reduce to changed-only (est. 60% reduction) |
| Example validation accuracy (vs. spec) | TBD | 100% |
| Example generation correctness (valid on first attempt) | TBD | > 95% |
| Service team satisfaction (quarterly survey) | TBD | > 4/5 rating |

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

another metric though hard to quantify is review pain, how much time is wasted navigating the github pr UI when it is swarmed with examples files.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants