Graduate experimental Aspire APIs
Context
Aspire has a number of public APIs still marked with ExperimentalAttribute. We should review these APIs for graduation, prioritizing the oldest and most-used experimental surfaces.
This issue tracks the current experimental API inventory, when each API appears to have been introduced, and how many stable releases it has remained experimental. The data was generated from git blame over current public/protected source declarations and assembly-level experimental attributes under src/. Generated src/**/api/*.cs files were excluded from row discovery so unreleased source-only APIs are included.
Goal
Graduate eligible experimental APIs by removing ExperimentalAttribute where the API shape is stable, or explicitly decide what changes/blockers remain before graduation.
Acceptance criteria
- Each diagnostic/API family in the table is reviewed.
- APIs that are ready are graduated.
- APIs that are not ready have documented blockers or follow-up issues.
- Any graduation updates include source changes, analyzer suppression cleanup, docs/readme updates where applicable, and API review as needed.
Decision signals
For graduation, the table is ordered around the decision-making fields first:
| Heading |
Why it matters |
| Stable releases experimental |
Primary age signal: APIs with the most stable releases as experimental should be reviewed first. |
| Introduced version |
Shows the first stable release that shipped the API as experimental. |
| Release date |
Gives the calendar age of the first stable release that included the API. |
| API |
The actual API shape to decide whether to graduate, change, or keep experimental. |
Table headings
| Heading |
Meaning |
| Stable releases experimental |
The number of stable vX.Y.Z release tags that contain the blamed commit while the API remains experimental. |
| Introduced version |
The first stable vX.Y.Z release tag that contains the blamed declaration commit. Unreleased means no stable release tag contains it yet. |
| Release date |
The date of the introduced stable release tag. |
| API |
The current public/protected API declaration that carries ExperimentalAttribute. |
| Kind |
The kind of annotated surface: assembly, type, method, property, or member. |
| Diagnostic ID |
The diagnostic ID passed to ExperimentalAttribute, used by callers to suppress the experimental API warning. |
| Source |
The source file and declaration line used for git blame. |
| Blame date |
The author date of the blamed commit for the declaration line, or the attribute line for assembly-level attributes. |
| Blame commit |
The short SHA from git blame for the declaration line. |
| Blame summary |
The commit subject for the blamed commit. |
Audit data
Scope: public/protected source declarations and assembly-level attributes under src/ that currently carry ExperimentalAttribute. Generated src/**/api/*.cs files are excluded from row discovery so unreleased source-only APIs are included. Stable releases experimental counts stable vX.Y.Z tags containing the blamed declaration commit; unreleased APIs are 0.
- Total rows: 225
- Latest stable tag considered: v13.3.3
- Blame target: declaration line for member/type APIs, attribute line for assembly-level APIs.
Counts by introduced version
| Introduced version |
API count |
| v9.1.0 |
3 |
| v9.3.0 |
4 |
| v9.4.0 |
11 |
| v9.5.0 |
17 |
| v13.0.0 |
53 |
| v13.1.0 |
47 |
| v13.2.0 |
49 |
| v13.3.0 |
28 |
| Unreleased |
13 |
Counts by diagnostic ID
| Diagnostic ID |
API count |
| ASPIREACADOMAINS001 |
1 |
| ASPIREACANAMING001 |
1 |
| ASPIREATS001 |
12 |
| ASPIREAZURE001 |
5 |
| ASPIREAZURE002 |
4 |
| ASPIREAZURE003 |
8 |
| ASPIREBROWSERLOGS001 |
3 |
| ASPIRECERTIFICATES001 |
19 |
| ASPIRECOMMAND001 |
5 |
| ASPIRECOMPUTE002 |
6 |
| ASPIRECOMPUTE003 |
5 |
| ASPIRECONTAINERRUNTIME001 |
7 |
| ASPIRECONTAINERSHELLEXECUTION001 |
1 |
| ASPIRECOSMOSDB001 |
2 |
| ASPIRECSHARPAPPS001 |
2 |
| ASPIREDOCKERFILEBUILDER001 |
35 |
| ASPIREDOTNETTOOL |
3 |
| ASPIREDURABLETASK001 |
10 |
| ASPIREEXTENSION001 |
2 |
| ASPIREFILESYSTEM001 |
5 |
| ASPIREINTERACTION001 |
20 |
| ASPIREJAVASCRIPT001 |
8 |
| ASPIREMCP001 |
1 |
| ASPIREPIPELINES001 |
25 |
| ASPIREPIPELINES002 |
2 |
| ASPIREPIPELINES003 |
16 |
| ASPIREPIPELINES004 |
1 |
| ASPIREPOSTGRES001 |
2 |
| ASPIREPROBES001 |
6 |
| ASPIREPROCESSCOMMAND001 |
6 |
| ASPIREUSERSECRETS001 |
2 |
API table
The full API table is split across comments below because it is too large for a single issue body.
Graduate experimental Aspire APIs
Context
Aspire has a number of public APIs still marked with
ExperimentalAttribute. We should review these APIs for graduation, prioritizing the oldest and most-used experimental surfaces.This issue tracks the current experimental API inventory, when each API appears to have been introduced, and how many stable releases it has remained experimental. The data was generated from
git blameover current public/protected source declarations and assembly-level experimental attributes undersrc/. Generatedsrc/**/api/*.csfiles were excluded from row discovery so unreleased source-only APIs are included.Goal
Graduate eligible experimental APIs by removing
ExperimentalAttributewhere the API shape is stable, or explicitly decide what changes/blockers remain before graduation.Acceptance criteria
Decision signals
For graduation, the table is ordered around the decision-making fields first:
Table headings
vX.Y.Zrelease tags that contain the blamed commit while the API remains experimental.vX.Y.Zrelease tag that contains the blamed declaration commit.Unreleasedmeans no stable release tag contains it yet.ExperimentalAttribute.ExperimentalAttribute, used by callers to suppress the experimental API warning.git blame.git blamefor the declaration line.Audit data
Scope: public/protected source declarations and assembly-level attributes under
src/that currently carryExperimentalAttribute. Generatedsrc/**/api/*.csfiles are excluded from row discovery so unreleased source-only APIs are included.Stable releases experimentalcounts stablevX.Y.Ztags containing the blamed declaration commit; unreleased APIs are0.Counts by introduced version
Counts by diagnostic ID
API table
The full API table is split across comments below because it is too large for a single issue body.