From 6ec37f37eee320b2b5a4bd529442b2d57899c165 Mon Sep 17 00:00:00 2001 From: Cristian Magherusan-Stanciu Date: Sat, 7 Nov 2026 23:18:46 +0100 Subject: [PATCH 1/2] docs(azure): document that billing-account Shared savings plans fail inventory closed (#272) Record the option B decision: GetExistingCommitments errors rather than returning a partial list for Shared billing-account plans, so the duplicate check cannot silently double-buy. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ec3aaf3..4583825a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,22 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/). ### Notices +- **Azure savings plan inventory fails closed for Shared plans billed to a + billing account (#272).** `savingsplans.Client.GetExistingCommitments` + lists plans billed to `/subscriptions/`, plus + billing-account-billed Single-scope plans whose applied scope names exactly + the client subscription. A billing-account plan with Shared, management + group or unresolvable scope cannot be attributed to one subscription, so the + whole call returns an error ("incomplete savings plan inventory for + subscription ..., page N: row M: billing-account plan is not + single-subscription scoped") instead of a partial list. The duplicate check + therefore sees an error, not a silently incomplete inventory, and no + recommendation is purchased on top of a plan it could not see. This affects + EA and MCA tenants that buy savings plans at billing-account scope with + Shared applied scope. Workaround: buy Single-scope plans attributed to the + subscription, or have the consumer catch the error and skip Azure savings + plan inventory knowingly. Tracked in #272; revisit when a tenant needs + Shared attribution. - **Azure Redis purchases must go through managedredis (`ServiceMemoryDB`).** The Azure recommendations adapter still labels Redis recommendations `ServiceCache`, and the cache client now refuses every purchase (#538), so From c6a561302e6bd601344eabca5acaf959668a7083 Mon Sep 17 00:00:00 2001 From: Cristian Magherusan-Stanciu Date: Sun, 8 Nov 2026 10:50:01 +0100 Subject: [PATCH 2/2] docs(azure): name the dedupe entry point and the cost of skipping inventory (#272) Review round on #718: GetCoveringCommitments is what the duplicate check reads, the quoted error covers the unresolvable Single-scope messages, and skipping the inventory is spelled out as removing the guard. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4583825a..801e6543 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,21 +8,25 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/). ### Notices - **Azure savings plan inventory fails closed for Shared plans billed to a - billing account (#272).** `savingsplans.Client.GetExistingCommitments` - lists plans billed to `/subscriptions/`, plus + billing account (#272).** `savingsplans.Client.GetExistingCommitments` and + `GetCoveringCommitments` (the one the duplicate check reads) list plans + billed to `/subscriptions/`, plus billing-account-billed Single-scope plans whose applied scope names exactly the client subscription. A billing-account plan with Shared, management group or unresolvable scope cannot be attributed to one subscription, so the - whole call returns an error ("incomplete savings plan inventory for - subscription ..., page N: row M: billing-account plan is not - single-subscription scoped") instead of a partial list. The duplicate check - therefore sees an error, not a silently incomplete inventory, and no + whole call returns an error starting "incomplete savings plan inventory for + subscription ..., page N: row M: " (for example "billing-account plan is + not single-subscription scoped", or a "single-scope plan ..." message when a + Single scope cannot be resolved) instead of a partial list. The duplicate + check therefore sees an error, not a silently incomplete inventory, and no recommendation is purchased on top of a plan it could not see. This affects EA and MCA tenants that buy savings plans at billing-account scope with Shared applied scope. Workaround: buy Single-scope plans attributed to the - subscription, or have the consumer catch the error and skip Azure savings - plan inventory knowingly. Tracked in #272; revisit when a tenant needs - Shared attribution. + subscription. A consumer that catches the error and skips Azure savings + plan inventory also removes the duplicate-purchase guard for that + subscription, so it can buy on top of the Shared plan it could not see; only + do that where no Shared billing-account plan can cover the subscription. + Tracked in #272; revisit when a tenant needs Shared attribution. - **Azure Redis purchases must go through managedredis (`ServiceMemoryDB`).** The Azure recommendations adapter still labels Redis recommendations `ServiceCache`, and the cache client now refuses every purchase (#538), so