Credential Checks, Idle VM Terminate, and Projection Reconcile
Runs fail when Azure rejects the credential, a corrected VM memory reading, terminate for running idle VMs, one recommendation per VM, and cleanup of orphaned recommendation rows.
- Inventory and metrics collectors check the Azure credential before they start. An expired or invalid client secret, an unknown app, or an unknown tenant aborts the run as an error so it reaches the logs and alert emails. Recommendation collectors keep analysing data already collected
- A run that skips any query batch finishes with a warning status and a summary of what was missed
- VM memory fix: Azure's Available Memory Percentage is now inverted to memory used before thresholds apply. Earlier releases compared free memory against used-memory thresholds
- Terminate now also fires on running VMs with no workload: average CPU under 1%, resident memory under 16 GiB, and every rightsize guard passing. Both limits are configurable
- One recommendation per VM. Terminate, rightsize, burstable, and upgrade candidates for the same machine collapse to the strongest, with the others kept as evidence, so savings are not counted twice
- VMs need real readings on at least half the lookback window. Rightsize is skipped when the target size has no price yet
- VM size ladders split by series generation and storage type, so Dv2, DSv2, and v3 to v5 sizes are no longer mixed
- Monthly savings snapshots broken down by recommendation type
- Each recommendation run removes recommendation rows whose Azure source row is gone. In-review, planned, and snoozed rows are dismissed with a status event, and implemented and ignored rows stay for the savings ledgers. A one-off script clears existing orphans
- SKU history written only when a resource's SKU name, tier, or capacity changes