Skip to content

Backmerge release/may-2026 (tcgc@0.68.1 hotfix)#4472

Merged
tadelesh merged 2 commits into
mainfrom
backmerge/release/may-2026-2026-05-20-hotfix
May 20, 2026
Merged

Backmerge release/may-2026 (tcgc@0.68.1 hotfix)#4472
tadelesh merged 2 commits into
mainfrom
backmerge/release/may-2026-2026-05-20-hotfix

Conversation

@tadelesh
Copy link
Copy Markdown
Member

Backmerge of hotfix release tcgc@0.68.1 from release/may-2026 into main.

This ensures the version bump and fix are reflected in main.

⚠️ Rebase merge this PR (do not squash).

Copilot AI and others added 2 commits May 20, 2026 03:51
…4440)

`@@usage` and `@@access` augment decorators applied to models from
imported libraries (e.g. `Azure.Core.Foundations.Error`) were silently
dropped when the target was not also reachable from an operation, so the
model never appeared in `sdkPackage.models`.

### Root cause
`listOrphanTypes` (introduced in #4041) walked
`listAllUserDefinedNamespaces`, which filters out namespaces from
imported npm packages. Tagged models in those namespaces were never
added to `__referencedTypeCache`, so `updateUsageOverride` never saw
them and emitters never received them.

### Changes
- **`internal-utils.ts` → `listOrphanTypes`**: rewritten to drive
iteration off `listScopedDecoratorData(context, usageKey)` and
`listScopedDecoratorData(context, legacyHierarchyBuildingKey)` — the
strategy originally used by #4024 — so tagged types are discovered
regardless of which namespace owns them. When `@@usage` targets a
namespace, the walk now recursively descends into sub-namespaces
(matching the pre-#4041 behavior). Templates are skipped and
`isTypeNeedsHandling` is respected. Result is still cached on
`__orphanTypesCache`, preserving the stable ordering #4041 relied on.
- **`decorators.ts` → `getUsageOverride`**: made recursive so `@@usage`
applied to a namespace propagates to types nested in sub-namespaces
(mirroring the existing recursive behavior of `getAccessOverride`).
- Dropped now-unused `getUsageOverride` / `getLegacyHierarchyBuilding`
imports.
- Added regression test in `decorators/usage.test.ts` applying
`@@usage`/`@@access` to `Azure.Core.Foundations.Error` and asserting it
surfaces in `sdkPackage.models`.
- Added regression test for `@@usage`/`@@access` on a namespace
propagating recursively through 3 levels of nested namespaces.

### Repro now passes
```tsp
import "@some-org/some-lib"; // exports SomeLib.SomeModel
namespace MyService;
op doThing(@Body body: SomeLib.SomeModel & SomeMixin): SomeResponse;

@@Usage(SomeLib.SomeModel, Usage.input);
@@access(SomeLib.SomeModel, Access.public);
```
`SomeLib.SomeModel` now appears in `sdkPackage.models` with `usage:
Input`, `access: public`.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: tadelesh <1726438+tadelesh@users.noreply.github.com>
Hotfix release for @azure-tools/typespec-client-generator-core 0.68.1

## Changes
- [TCGC] Honor @@usage/@@access on models from imported libraries
(#4440)

## Checklist
- [x] Version bump via `pnpm chronus version --ignore-policies`
- [x] Only TCGC package changed
- [x] Core submodule pointer unchanged

Co-authored-by: tadelesh <chenjieshi@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@microsoft-github-policy-service microsoft-github-policy-service Bot added the lib:tcgc Issues for @azure-tools/typespec-client-generator-core library label May 20, 2026
@azure-sdk
Copy link
Copy Markdown
Collaborator

❌ There is undocummented changes. Run chronus add to add a changeset or click here.

The following packages have changes but are not documented.

  • @azure-tools/typespec-client-generator-core
Show changes

@pkg-pr-new
Copy link
Copy Markdown

pkg-pr-new Bot commented May 20, 2026

Open in StackBlitz

npm i https://pkg.pr.new/@azure-tools/typespec-client-generator-core@4472

commit: 6043ef5

@github-actions
Copy link
Copy Markdown
Contributor

⚡ Benchmark Results

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

Metric Baseline Current Change
resolver 🟢 15.9ms 🟢 19.2ms +20.8% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-response-body 🔴 20.7ms 🔴 22.0ms +6.2% 🔴
Full details – comparing 35bd4d7 vs baseline 86cdf59
Metric Baseline Current Change
total 🔴 710.3ms 🔴 739.7ms +4.1%
loader 🟢 136.0ms 🟢 141.9ms +4.3%
resolver 🟢 15.9ms 🟢 19.2ms +20.8% 🔴
checker 🟢 166.7ms 🟢 174.2ms +4.5%
validation 🟢 39.6ms 🟢 40.2ms +1.6%
 ↳ validation/@azure-tools/typespec-azure-core 🟢 5.4ms 🟢 5.6ms +3.2%
 ↳ validation/@typespec/http 🟢 4.8ms 🟢 4.9ms +1.9%
 ↳ validation/@typespec/rest 🟢 0.5ms 🟢 0.6ms +23.5%
 ↳ validation/@typespec/versioning 🔴 27.0ms 🔴 26.9ms -0.3%
 ↳ validation/compiler 🟢 1.4ms 🟢 1.6ms +11.7%
linter 🟢 115.9ms 🟢 120.1ms +3.6%
 ↳ linter/@azure-tools/typespec-azure-core/auth-required 🟢 0.0ms 🟢 0.0ms +17.0%
 ↳ linter/@azure-tools/typespec-azure-core/bad-record-type 🟢 0.2ms 🟢 0.2ms +7.4%
 ↳ linter/@azure-tools/typespec-azure-core/byos 🟢 5.2ms 🟢 5.3ms +3.2%
 ↳ linter/@azure-tools/typespec-azure-core/casing-style 🟢 0.5ms 🟢 0.5ms -0.8%
 ↳ linter/@azure-tools/typespec-azure-core/composition-over-inheritance 🟢 0.1ms 🟢 0.1ms +1.9%
 ↳ linter/@azure-tools/typespec-azure-core/documentation-required 🟢 0.7ms 🟢 0.8ms +7.5%
 ↳ linter/@azure-tools/typespec-azure-core/friendly-name 🟢 0.5ms 🟢 0.6ms +6.8%
 ↳ linter/@azure-tools/typespec-azure-core/key-visibility-required 🟢 0.1ms 🟢 0.1ms +8.6%
 ↳ linter/@azure-tools/typespec-azure-core/known-encoding 🟢 0.2ms 🟢 0.2ms -3.8%
 ↳ linter/@azure-tools/typespec-azure-core/long-running-polling-operation-required 🟢 0.3ms 🟢 0.3ms +4.5%
 ↳ linter/@azure-tools/typespec-azure-core/no-case-mismatch 🟢 0.2ms 🟢 0.2ms +3.9%
 ↳ linter/@azure-tools/typespec-azure-core/no-closed-literal-union 🟢 0.2ms 🟢 0.2ms +8.5%
 ↳ linter/@azure-tools/typespec-azure-core/no-enum 🟢 0.0ms 🟢 0.0ms +11.9%
 ↳ linter/@azure-tools/typespec-azure-core/no-error-status-codes 🟢 0.1ms 🟢 0.1ms +4.2%
 ↳ linter/@azure-tools/typespec-azure-core/no-explicit-routes-resource-ops 🟢 0.1ms 🟢 0.1ms +13.6%
 ↳ linter/@azure-tools/typespec-azure-core/no-format 🟢 0.4ms 🟢 0.4ms +7.0%
 ↳ linter/@azure-tools/typespec-azure-core/no-generic-numeric 🟢 0.4ms 🟢 0.4ms +8.2%
 ↳ linter/@azure-tools/typespec-azure-core/no-header-explode 🟡 16.1ms 🟡 16.6ms +2.8%
 ↳ linter/@azure-tools/typespec-azure-core/no-legacy-usage 🟢 1.0ms 🟢 1.0ms +5.3%
 ↳ linter/@azure-tools/typespec-azure-core/no-multiple-discriminator 🟢 0.1ms 🟢 0.1ms +5.9%
 ↳ linter/@azure-tools/typespec-azure-core/no-nullable 🟢 0.2ms 🟢 0.2ms +11.9%
 ↳ linter/@azure-tools/typespec-azure-core/no-offsetdatetime 🟢 1.2ms 🟢 1.2ms -0.5%
 ↳ linter/@azure-tools/typespec-azure-core/no-openapi 🟢 1.7ms 🟢 1.7ms +4.0%
 ↳ linter/@azure-tools/typespec-azure-core/no-private-usage 🟢 1.7ms 🟢 1.8ms +8.7%
 ↳ linter/@azure-tools/typespec-azure-core/no-query-explode 🟡 16.7ms 🟡 16.7ms +0.1%
 ↳ linter/@azure-tools/typespec-azure-core/no-response-body 🔴 20.7ms 🔴 22.0ms +6.2% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-rest-library-interfaces 🟢 0.0ms 🟢 0.0ms +16.3%
 ↳ linter/@azure-tools/typespec-azure-core/no-route-parameter-name-mismatch 🟢 4.7ms 🟢 4.7ms +0.1%
 ↳ linter/@azure-tools/typespec-azure-core/no-rpc-path-params 🟢 0.2ms 🟢 0.2ms +2.1%
 ↳ linter/@azure-tools/typespec-azure-core/no-string-discriminator 🟢 0.0ms 🟢 0.0ms +1.9%
 ↳ linter/@azure-tools/typespec-azure-core/no-unknown 🟢 0.1ms 🟢 0.2ms +9.3%
 ↳ linter/@azure-tools/typespec-azure-core/no-unnamed-union 🟢 0.3ms 🟢 0.3ms +10.3%
 ↳ linter/@azure-tools/typespec-azure-core/operation-missing-api-version 🟢 0.2ms 🟢 0.2ms +11.6%
 ↳ linter/@azure-tools/typespec-azure-core/request-body-problem 🟢 0.2ms 🟢 0.3ms +20.0%
 ↳ linter/@azure-tools/typespec-azure-core/require-versioned 🟢 0.0ms 🟢 0.0ms +12.5%
 ↳ linter/@azure-tools/typespec-azure-core/response-schema-problem 🟡 19.4ms 🟡 19.6ms +1.1%
 ↳ linter/@azure-tools/typespec-azure-core/rpc-operation-request-body 🟢 0.3ms 🟢 0.3ms +1.2%
 ↳ linter/@azure-tools/typespec-azure-core/spread-discriminated-model 🟢 0.2ms 🟢 0.2ms +6.5%
 ↳ linter/@azure-tools/typespec-azure-core/use-standard-names 🟢 4.3ms 🟢 4.4ms +0.8%
 ↳ linter/@azure-tools/typespec-azure-core/use-standard-operations 🟢 0.1ms 🟢 0.1ms +14.4%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-common-types-version 🟢 3.5ms 🟢 3.6ms +2.0%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-custom-resource-no-key 🟢 0.1ms 🟢 0.1ms +6.9%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-custom-resource-usage-discourage 🟢 0.1ms 🟢 0.1ms -4.2%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-delete-operation-response-codes 🟢 4.6ms 🟢 4.7ms +1.3%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-no-path-casing-conflicts 🟢 4.0ms 🟢 4.1ms +3.7%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-no-record 🟢 0.3ms 🟢 0.3ms -0.4%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes 🟢 0.4ms 🟢 0.4ms +3.3%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-put-operation-response-codes 🟢 0.0ms 🟢 0.0ms +17.6%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-action-no-segment 🟢 0.2ms 🟢 0.2ms +5.4%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-duplicate-property 🟢 0.1ms 🟢 0.1ms +11.3%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-interface-requires-decorator 🟢 0.0ms 🟢 0.0ms +21.1%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-action-verb 🟢 0.1ms 🟢 0.1ms +2.3%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-envelope-property 🟢 0.1ms 🟢 0.1ms +8.9%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-version-format 🟢 0.0ms 🟢 0.0ms +10.7%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-key-invalid-chars 🟢 0.2ms 🟢 0.2ms +2.1%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-name-pattern 🟢 0.0ms 🟢 0.0ms +22.4%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-operation 🟢 0.1ms 🟢 0.2ms +8.5%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-operation-response 🟢 4.7ms 🟢 4.3ms -9.9%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-patch 🟢 0.3ms 🟢 0.3ms -1.1%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-path-segment-invalid-chars 🟢 0.2ms 🟢 0.2ms +1.9%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-provisioning-state 🟢 0.1ms 🟢 0.1ms +1.9%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/beyond-nesting-levels 🟢 0.1ms 🟢 0.1ms -3.1%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/empty-updateable-properties 🟢 0.1ms 🟢 0.1ms +0.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/improper-subscription-list-operation 🟢 0.0ms 🟢 0.0ms +16.0%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/lro-location-header 🟡 12.0ms 🟡 12.3ms +2.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/missing-operations-endpoint 🟢 0.0ms 🟢 0.0ms +13.0%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/missing-x-ms-identifiers 🟢 0.2ms 🟢 0.3ms +5.4%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-empty-model 🟢 0.1ms 🟢 0.1ms +8.2%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-resource-delete-operation 🟢 0.1ms 🟢 0.2ms +12.5%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-response-body 🟡 18.5ms 🟡 19.0ms +2.6%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/patch-envelope 🟢 0.1ms 🟢 0.1ms +4.5%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/resource-name 🟢 0.1ms 🟢 0.1ms +3.9%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/secret-prop 🟢 2.0ms 🟢 2.4ms +20.9%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/unsupported-type 🟢 0.3ms 🟢 0.4ms +3.9%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/version-progression 🟢 0.0ms 🟢 0.0ms +9.3%
 ↳ linter/@azure-tools/typespec-client-generator-core/property-name-conflict 🟢 0.9ms 🟢 1.0ms +3.9%
 ↳ linter/@azure-tools/typespec-client-generator-core/require-client-suffix 🟢 0.2ms 🟢 0.2ms +17.8%
emit 🟡 230.8ms 🟡 239.2ms +3.6%
 ↳ emit/@azure-tools/typespec-autorest 🟢 143.5ms 🟢 148.7ms +3.7%
 ↳ emit/@typespec/openapi3 🟢 129.6ms 🟢 134.0ms +3.4%
 ↳ emit/@typespec/openapi3/compute 🟢 114.3ms 🟢 119.0ms +4.1%
 ↳ emit/@typespec/openapi3/write 🟢 14.4ms 🟢 14.5ms +0.6%

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)

@azure-sdk
Copy link
Copy Markdown
Collaborator

You can try these changes here

🛝 Playground 🌐 Website

@tadelesh tadelesh enabled auto-merge May 20, 2026 09:56
@tadelesh tadelesh added this pull request to the merge queue May 20, 2026
Merged via the queue into main with commit d29a254 May 20, 2026
40 of 43 checks passed
@tadelesh tadelesh deleted the backmerge/release/may-2026-2026-05-20-hotfix branch May 20, 2026 10:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lib:tcgc Issues for @azure-tools/typespec-client-generator-core library

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants