Skip to content

[Automated] Update ATS API Surface Area - #17263

Merged
Sébastien Ros (sebastienros) merged 1 commit into
mainfrom
update-ats-diffs
May 25, 2026
Merged

[Automated] Update ATS API Surface Area#17263
Sébastien Ros (sebastienros) merged 1 commit into
mainfrom
update-ats-diffs

Conversation

@aspire-repo-bot

Copy link
Copy Markdown
Contributor

Auto-generated update to the ATS (Aspire Type System) capability surface to compare current surface vs latest release. This should only be merged once this surface area ships in a new release.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@github-actions

github-actions Bot commented May 19, 2026

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 17263

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 17263"

@IEvangelist

Copy link
Copy Markdown
Member

PR testing report

PR: #17263 - [Automated] Update ATS API Surface Area
Base branch: main
Head commit: 0dfe4f22540fb8acc2859e9e07ae6b1cc923de6f
Result: Blocked - no PR dogfood CLI artifact could be located

CLI version verification

The PR dogfood installer was invoked, but it could not find a ci.yml workflow run for the PR head SHA. Because no PR CLI artifact could be located, the CLI version could not be verified against the PR head commit and no scenarios were executed.

text Starting download and installation for PR #17263 INSTALL_FAILED: Error: No ci.yml workflow run found for PR SHA: 0dfe4f22540fb8acc2859e9e07ae6b1cc923de6f. This could mean no workflow has been triggered for this SHA 0dfe4f22540fb8acc2859e9e07ae6b1cc923de6f . Check at https://github.com/microsoft/aspire/actions/workflows/ci.yml

Changes analyzed

This PR updates generated Aspire Type System API surface files:

  • src/Aspire.Hosting.Azure.AppContainers/api/Aspire.Hosting.Azure.AppContainers.ats.txt
  • src/Aspire.Hosting.Azure.AppService/api/Aspire.Hosting.Azure.AppService.ats.txt
  • src/Aspire.Hosting.Azure.Network/api/Aspire.Hosting.Azure.Network.ats.txt
  • src/Aspire.Hosting/api/Aspire.Hosting.ats.txt

Planned scenarios

These scenarios were selected based on the changed files, but were not executed because CLI installation failed first:

  1. Verify the installed PR dogfood Aspire CLI reports the PR head commit.
  2. Run ATS API surface validation/dump commands against the changed packages and compare output with the checked-in generated files.
  3. Spot-check the newly exposed App Containers/App Service capabilities and optionality changes in generated polyglot metadata.

Overall: Not verified. Please rerun after CI produces dogfood artifacts for the PR head commit.

@github-actions
github-actions Bot force-pushed the update-ats-diffs branch from 0dfe4f2 to 4c72735 Compare May 21, 2026 15:01
@microsoft-github-policy-service microsoft-github-policy-service Bot added this to the 13.4 milestone May 21, 2026
@github-actions
github-actions Bot force-pushed the update-ats-diffs branch 4 times, most recently from 558fde2 to 826d719 Compare May 24, 2026 16:37
@github-actions
github-actions Bot force-pushed the update-ats-diffs branch from 826d719 to ec46c12 Compare May 25, 2026 17:00
auto-merge was automatically disabled May 25, 2026 18:25

Pull request was closed

@sebastienros
Sébastien Ros (sebastienros) merged commit b9ac899 into main May 25, 2026
624 of 627 checks passed
@sebastienros
Sébastien Ros (sebastienros) deleted the update-ats-diffs branch May 25, 2026 19:00
@github-actions

Copy link
Copy Markdown
Contributor

CLI E2E Tests unknown — 96 passed, 0 failed, 5 unknown (commit ec46c12)

View all recordings
Status Test Recording
AddPackageInteractiveWhileAppHostRunningDetached ▶️ View recording
AddPackageWhileAppHostRunningDetached ▶️ View recording
AgentCommands_AllHelpOutputs_AreCorrect ▶️ View recording
AgentInitCommand_DefaultSelection_InstallsDefaultSkills ▶️ View recording
AgentInitCommand_MigratesDeprecatedConfig ▶️ View recording
AgentMcpListStructuredLogsFromStarterAppCore ▶️ View recording
AllPublishMethodsBuildDockerImages ▶️ View recording
AspireAddPackageVersionToDirectoryPackagesProps ▶️ View recording
AspireInitSingleFileAppHostRunsViaDotnetRunAppHost ▶️ View recording
AspireInitWithExistingAppHostDirRecreatesMissingNuGetConfigAndPreservesFiles ▶️ View recording
AspireInitWithSolutionFileGeneratesAppHostThatBuildsAgainstChannelHive ▶️ View recording
AspireStartUpdatesStaleTypeScriptAppHostPath ▶️ View recording
AspireUpdateRemovesAppHostPackageVersionFromDirectoryPackagesProps ▶️ View recording
AspireUpdateRemovesOrphanAppHostPackageVersionWhenSdkAlreadyCurrent ▶️ View recording
Banner_DisplayedOnFirstRun ▶️ View recording
Banner_DisplayedWithExplicitFlag ▶️ View recording
Banner_NotDisplayedWithNoLogoFlag ▶️ View recording
CertificatesClean_RemovesCertificates ▶️ View recording
CertificatesTrust_WithNoCert_CreatesAndTrustsCertificate ▶️ View recording
CertificatesTrust_WithUntrustedCert_TrustsCertificate ▶️ View recording
ConfigSetGet_CreatesNestedJsonFormat ▶️ View recording
CreateAndRunAspireStarterProject ▶️ View recording
CreateAndRunAspireStarterProjectWithBundle ▶️ View recording
CreateAndRunEmptyAppHostProject ▶️ View recording
CreateAndRunJavaEmptyAppHostProject ▶️ View recording
CreateAndRunJsReactProject ▶️ View recording
CreateAndRunPythonReactProject ▶️ View recording
CreateAndRunTypeScriptEmptyAppHostProject ▶️ View recording
CreateAndRunTypeScriptStarterProject ▶️ View recording
CreateJavaAppHostWithViteApp ▶️ View recording
CreateTypeScriptAppHostWithViteApp_UsesConfiguredToolchain ▶️ View recording
DashboardRunWithAgentMcpCore ▶️ View recording
DashboardRunWithOtelTracesReturnsNoTracesCore ▶️ View recording
DeployK8sBasicApiService ▶️ View recording
DeployK8sWithExternalHelmChart ▶️ View recording
DeployK8sWithGarnet ▶️ View recording
DeployK8sWithMongoDB ▶️ View recording
DeployK8sWithMySql ▶️ View recording
DeployK8sWithPostgres ▶️ View recording
DeployK8sWithRabbitMQ ▶️ View recording
DeployK8sWithRedis ▶️ View recording
DeployK8sWithSqlServer ▶️ View recording
DeployK8sWithValkey ▶️ View recording
DeployTypeScriptAppToKubernetes ▶️ View recording
DescribeCommandResolvesReplicaNames ▶️ View recording
DescribeCommandShowsRunningResources ▶️ View recording
DetachFormatJsonProducesValidJson ▶️ View recording
DetachFormatJsonProducesValidJsonWhenRestartingExistingInstance ▶️ View recording
DoListStepsShowsPipelineSteps ▶️ View recording
DocsCommand_RendersInteractiveMarkdownFromLocalSource ▶️ View recording
DoctorCommand_DetectsDeprecatedAgentConfig ▶️ View recording
DoctorCommand_TypeScriptAppHostReportsMissingConfiguredToolchain ▶️ View recording
DoctorCommand_WithSslCertDir_ShowsTrusted ▶️ View recording
DoctorCommand_WithoutSslCertDir_ShowsPartiallyTrusted ▶️ View recording
GeneratedAspireDevScript_StartsWatchMode_WithConfiguredToolchain ▶️ View recording
GlobalMigration_HandlesCommentsAndTrailingCommas ▶️ View recording
GlobalMigration_HandlesMalformedLegacyJson ▶️ View recording
GlobalMigration_PreservesAllValueTypes ▶️ View recording
GlobalMigration_SkipsWhenNewConfigExists ▶️ View recording
GlobalSettings_MigratedFromLegacyFormat ▶️ View recording
InitTypeScriptAppHost_AugmentsExistingViteRepoAtRoot ▶️ View recording
InteractiveCSharpInitCreatesExpectedFiles ▶️ View recording
InvalidAppHostPathWithComments_IsHealedOnRun ▶️ View recording
JavaScriptHostingApisRunFromTypeScriptAppHost ▶️ View recording
LatestCliCanStartStableChannelAppHost ▶️ View recording
LatestCliCanStartStableChannelTypeScriptAppHost ▶️ View recording
LegacySettingsMigration_AdjustsRelativeAppHostPath ▶️ View recording
LogLevelTrace_ProducesTraceEntriesInCliLogFile ▶️ View recording
LogsCommandShowsResourceLogs ▶️ View recording
OtelLogsReturnsStructuredLogsFromStarterApp ▶️ View recording
OtelLogsReturnsStructuredLogsFromStarterAppIsolated ▶️ View recording
PsCommandListsRunningAppHost ▶️ View recording
PsFormatJsonOutputsOnlyJsonToStdout ▶️ View recording
PublishJavaScriptPatternsGeneratesExpectedDockerComposeArtifacts ▶️ View recording
PublishWithConfigureEnvFileUpdatesEnvOutput ▶️ View recording
PublishWithDockerComposeServiceCallbackSucceeds ▶️ View recording
PublishWithoutOutputPathUsesAppHostDirectoryDefault ▶️ View recording
ResourceCommand_FailedExecution_DisplaysAppHostLogPathAndLogContainsEntries ▶️ View recording
ResourceCommand_FailsWhenInteractionServiceIsRequired ▶️ View recording
ResourceCommand_SetAndDeleteParameterUpdatesDescribeOutput ▶️ View recording
RestoreGeneratesSdkFiles ▶️ View recording
RestoreGeneratesSdkFiles_WithConfiguredToolchain ▶️ View recording
RestoreRefreshesGeneratedSdkAfterAddingIntegration ▶️ View recording
RestoreSupportsConfigOnlyHelperPackageAndCrossPackageTypes ▶️ View recording
RunFromParentDirectory_UsesExistingConfigNearAppHost ▶️ View recording
RunPublishFailureScenarioAsync ▶️ View recording
RunReportsSyntaxErrorsForDotNetAppHost ▶️ View recording
RunReportsSyntaxErrorsForTypeScriptAppHost ▶️ View recording
SecretCrudOnDotNetAppHost ▶️ View recording
SecretCrudOnTypeScriptAppHost ▶️ View recording
StagingChannel_ConfigureAndVerifySettings_ThenSwitchChannels ▶️ View recording
StartAndWaitForTypeScriptSqlServerAppHostWithNativeAssets ▶️ View recording
StartReportsSyntaxErrorsForDotNetAppHost ▶️ View recording
StartReportsSyntaxErrorsForTypeScriptAppHost ▶️ View recording
StopAllAppHostsFromAppHostDirectory ▶️ View recording
StopJavaPolyglotAppHostUsingApphostDirectory ▶️ View recording
StopNonInteractiveSingleAppHost ▶️ View recording
StopTypeScriptPolyglotAppHostUsingApphostDirectory ▶️ View recording
StopWithNoRunningAppHostExitsSuccessfully ▶️ View recording
UnAwaitedChainsCompileWithAutoResolvePromises ▶️ View recording
UpdateProjectChannelToStable_TypeScript_PicksUpStablePackages ▶️ View recording

📹 Recordings uploaded automatically from CI run #26414358697

@aspire-repo-bot

Copy link
Copy Markdown
Contributor Author

✅ No documentation update needed.

docs_optional → internal_refactor

No signals triggered (signal_count = 0). All 9 changed files are *.ats.txt API surface tracking files under src/*/api/ — these are internal ATS (Aspire Type System) surface-area comparison snapshots used to compare current surface vs the latest release. The PR body confirms: "Auto-generated update to the ATS capability surface to compare current surface vs latest release. This should only be merged once this surface area ships in a new release." No new public types, CLI flags, options, integrations, or user-visible behavior were introduced. No documentation update is needed.

Ankit Jain (radical) added a commit that referenced this pull request Jun 9, 2026
…ilename globs match nested paths

Three automated PRs in the last 14d fired more tests than they needed to:

  #17672, #17263  [Automated] Update ATS API Surface Area
  #17534          Move repository skills to .agents

They each touched only api/*.txt or only README/skill markdown, but were
firing trigger_all or selective:integrations — burning the full ~25min
CI critical path. Audit-replay over 161 merged PRs found them, plus a
latent C# glob bug where bare-filename patterns silently ignored
nested matches.

Root causes — two independent bugs:

1. The category-trigger rescue logic in RescueCategoryTriggerFiles built
   a synthetic union of all category triggerPaths without consulting
   per-category excludePaths. An ignored file that textually matched some
   category's glob but was excluded from that category got rescued back
   to active and then hit fallback_unmatched (worse than staying
   ignored). For src/Aspire.Hosting.Foundry/api/*.txt this meant ATS-only
   PRs fired integrations even after `**/api/*.txt` was added to
   ignorePaths.

2. The four glob analyzers (CriticalFileDetector, IgnorePathFilter,
   CategoryMapper.CompiledCategory, ProjectMappingResolver.CompiledMapping)
   handed user-facing patterns directly to FileSystemGlobbing.Matcher.
   The Matcher anchors bare-filename patterns at the repo root, so
   `Directory.Build.props` matched only the root file, not
   `src/Directory.Build.props` or `tests/Directory.Build.props`. The
   Python audit-replay evaluator (eval_rules.py) already documented and
   applied a "prepend **/ to bare-filename patterns" rule; the C#
   analyzers did not, so the two evaluators silently disagreed on
   ~5 patterns across ignorePaths, triggerAllPaths, and sourceToTestMappings.

The fix:

- Rescue now passes config.Categories directly to CategoryMapper so
  CompiledCategory.Matches honors per-category excludes. A file is
  rescued only when at least one category would actually fire on it.
- New PatternNormalization.NormalizeGlob prepends `**/` to any pattern
  without a path separator. Every glob entry point applies it: the four
  analyzers above plus ProjectMappingResolver's regex compiler.
- Rules: integrations.excludePaths gains `tests/Aspire.Acquisition.Tests/**`,
  `tests/Infrastructure.Tests/**`, `**/*.md`, `**/api/*.txt`. The same
  `**/api/*.txt` exclude is added to every category so an ignored ATS
  file can't be rescued back by any category. ignorePaths gains
  `**/api/*.txt`. Acquisition mapping's source list gains the missing
  self-mapping `tests/Aspire.Acquisition.Tests/**` (Templates and
  Infrastructure mappings already had this; Acquisition was an oversight
  exposed only after the new exclude was added).

Verification:

- Audit replay over 161 merged PRs: 4 outcomes change (#17263, #17534,
  #17549, #17672 all move to `skip`); zero regressions; zero
  fallback_unmatched.
- New AuditFixtureTests xUnit [Theory] replays 28 hand-validated PRs
  against the live audit rules. Each row is a separate test, so any
  future rule edit that changes a row's outcome shows up as a visible
  CI failure. Coverage includes templates (#16447), CLI native build
  (#17567), extension multi-category (#17881/17698/17772), Hosting-core
  trigger_all (#17879), polyglot (#17948), and the regression canaries
  for previous fallback_unmatched cases.
- Per-component regression tests pin both bugs: two new tests in
  EndToEndEvaluationTests for rescue+excludes; two more for
  bare-filename matching at nested paths.
- Three pre-existing analyzer tests had asserted the buggy bare-filename
  behavior as expected (e.g. `*.md` not matching `docs/guide.md`).
  Updated with comments explaining the user-intent rule.
- Full TestSelector namespace: 290 tests, all pass. No collateral damage
  on the wider Infrastructure.Tests suite (5 pre-existing baseline
  failures unchanged).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions github-actions Bot locked and limited conversation to collaborators Jun 25, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants