Skip to content

AzLocal.UpdateManagement v0.8.80: pipeline-failure rendering improvements (Q1 + Q2 + Q3)#86

Merged
NeilBird merged 3 commits into
mainfrom
users/nebird/v0.8.80
Jun 15, 2026
Merged

AzLocal.UpdateManagement v0.8.80: pipeline-failure rendering improvements (Q1 + Q2 + Q3)#86
NeilBird merged 3 commits into
mainfrom
users/nebird/v0.8.80

Conversation

@NeilBird

Copy link
Copy Markdown
Owner

Summary

Bundles three independent improvements to the AzLocal.UpdateManagement pipeline-failure rendering surface into one v0.8.80 release. Cuts from users/nebird/development; targets users/nebird/development (NOT main).

Q1 - Step.09 health-evidence enrichment

When a Failed update run is rendered in fleet-update-status, the row is now enriched with same-cluster Critical updateSummaries.healthCheckResult entries that fall inside a +/- 2 hour window around the run end time. This makes the most likely root-cause health check visible at the same site as the failure, without an extra click into per-cluster health.

  • New private helper: Get-AzLocalUpdateRunHealthEvidence (uses anti-mv-expand-128 raw-array projection, expands client-side).
  • New opt-out switch on Get-AzLocalUpdateRunFailures: -EnrichWithHealthEvidence (defaults true).
  • New column HealthCheckEvidence on the failure row.

Q2 - Step.05 + Step.10 health-failure Title + TargetResourceID

Both per-cluster (Test-AzLocalClusterHealth, Step.05) and fleet-wide (Get-AzLocalFleetHealthFailures, Step.10) health-failure rows now carry Title and TargetResourceID. Export-AzLocalFleetHealthStatusReport renders Title in the markdown header and wraps TargetResourceName in a https://portal.azure.com/#@/resource{TargetResourceID} deep-link, giving on-call a one-click jump from the report into the misbehaving resource blade.

Q3 - Step.08 + Step.09 description + errorMessage

Pipeline failure reports now surface BOTH the deepest-step description (what stage failed) AND errorMessage (why) - previously only the message was rendered.

  • Get-DeepestErrorMessage gains -IncludeDescription switch (back-compat: bare call still returns a string).
  • Resolve-AzLocalUpdateRunDeepestError emits a Description field on its result hashtable.
  • Format-AzLocalUpdateRun and Get-AzLocalUpdateRuns emit an ErrorDescription column.
  • Export-AzLocalUpdateRunMonitorReport (Step.08) and Export-AzLocalFleetUpdateStatusReport (Step.09) render description, trace, and (Q1) evidence side-by-side.

Walker note: Resolve-AzLocalUpdateRunDeepestError and Get-DeepestErrorMessage remain parallel implementations by design (different call sites, different return shapes). Cross-reference .NOTES blocks added to both so future maintainers keep them in sync.

Test results

  • 20 new Pester It blocks across 10 Describe blocks covering Q1/Q2/Q3 wiring + walker behaviour.
  • Full suite: 1196 passed, 0 v0.8.80-related failures.
  • One pre-existing date-dependent flake (Test-AzLocalApplyUpdatesScheduleCoverage cycle-calendar _(cycle wraps)_ regex) is unrelated and out of scope.

Version + docs

  • ModuleVersion bumped 0.8.79 -> 0.8.80 (psd1, psm1).
  • CHANGELOG, README banner + What's New, docs/release-history.md updated.
  • 22 YAML pipeline templates' GENERATED_AGAINST_MODULE_VERSION pin bumped to '0.8.80'.

…ents (Q1 + Q2 + Q3)

Three feature bundles for the AzLocal.UpdateManagement automation pipelines:

Q1 - Step.09 fleet-update-status: enrich Failed update-run rows with
  same-cluster Critical healthCheckResult entries from updateSummaries
  inside a +/- 2h window around the run end time. New private helper
  Get-AzLocalUpdateRunHealthEvidence (uses anti-mv-expand-128 raw-array
  pattern; expands client-side). Opt-out via new -EnrichWithHealthEvidence
  switch on Get-AzLocalUpdateRunFailures.

Q2 - Step.05 (Test-AzLocalClusterHealth) + Step.10
  (Get-AzLocalFleetHealthFailures): add Title and TargetResourceID columns
  to per-cluster and fleet-wide health failure rows. Export-AzLocalFleetHealthStatusReport
  now renders Title in the markdown header and wraps TargetResourceName in
  https://portal.azure.com/#@/resource{TargetResourceID} deep-link.

Q3 - Step.08 (Export-AzLocalUpdateRunMonitorReport) + Step.09
  (Export-AzLocalFleetUpdateStatusReport): surface BOTH the deepest-step
  description AND errorMessage so on-call engineers see what stage failed
  AND why. Get-DeepestErrorMessage gains -IncludeDescription switch;
  Resolve-AzLocalUpdateRunDeepestError emits Description; Format-AzLocalUpdateRun
  and Get-AzLocalUpdateRuns emit ErrorDescription column.

Walker note: Resolve-AzLocalUpdateRunDeepestError and Get-DeepestErrorMessage
remain parallel implementations (per design discussion); cross-reference
.NOTES blocks added to both so future maintainers keep them in sync.

Tests: +20 Pester It blocks across 10 Describe blocks for Q1/Q2/Q3.
Full suite: 1196 passed, 0 v0.8.80 failures. (One pre-existing date-dependent
cycle-calendar regex flake is unrelated and out of scope.)

Bumped: psd1 ModuleVersion 0.8.79 -> 0.8.80, psm1 $script:ModuleVersion,
CHANGELOG, README banner + What's New, docs/release-history.md, 22 YAML
pipeline templates' GENERATED_AGAINST_MODULE_VERSION pin.
@NeilBird
NeilBird changed the base branch from users/nebird/development to main June 15, 2026 10:37
NeilBird added 2 commits June 15, 2026 11:43
The 'Recommend emits Cycle calendar section' test asserted that the rendered
markdown ALWAYS contains the '_(cycle wraps)_' marker. With cycleWeeks=2 the
14-day projection only crosses the cycle boundary when 'today' starts
mid-cycle; when today happens to land on day-1 of the cycle (e.g. 2026-06-15
is exactly 64 cycles after the 2024-01-01 anchor) the window ends EXACTLY at
the boundary and no wrap row is emitted. Result: PR CI failed on that single
test today.

Compute today's day-in-cycle from the schedule anchor and only assert when
wrap is expected. Pre-existing flake; unrelated to v0.8.80 features but
blocking PR #86 CI.
EnricoMi/publish-unit-test-result-action/windows@v2 deprecated 'junit_files'
in favor of 'files'. Still works today via the legacy alias but will be
removed in a future major. One-line rename.
@NeilBird
NeilBird merged commit feade0a into main Jun 15, 2026
2 checks passed
@NeilBird
NeilBird deleted the users/nebird/v0.8.80 branch June 15, 2026 10:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant