Internal Architecture Refactoring: Report Pipeline and Provider Model
This release is an internal code quality improvement. There are no changes to CLI behavior,
rendered Markdown output, or user-facing functionality. If your pipelines work today, they will
continue to work the same way after upgrading.
✨ Features
-
Explicit report-generation pipeline —
ReportModelBuilderhas been decomposed into five
explicit pipeline stages (ResourceChangeStage,AttributeFilteringStage,
SummaryEnrichmentStage,DisplayFilteringStage,ReportAssemblyStage). Each stage has a
well-defined input/output contract and can be unit-tested independently. -
Narrower provider contribution model — The broad
IProviderModulecontract has been
replaced by a narrowerIProviderinterface with six optional capability interfaces
(IResourceFactory,IValueFormatter,IResourceRenderer,IGroupNamingConvention,
IAttributeFilter,IDetailsSectionProvider). Registered viaProviderContributionSet,
providers now declare only the capabilities they implement. Adding a new provider capability
no longer requires editing all existing providers. -
Instance-based role definition resolution — The static mutable
AzureRoleDefinitionMapper
has been replaced byIRoleDefinitionResolver/AzureRoleDefinitionResolver, scoped per
application run. Custom role definitions loaded from a plan no longer bleed across multiple
in-process runs, improving correctness in multi-call scenarios. -
Diagnostics decomposition — Diagnostic collection has been split into an append-only
IDiagnosticSink, an immutableDiagnosticReportsnapshot, and a dedicated
DiagnosticMarkdownFormatter. Producers now append to the sink; reporting is assembled from
the snapshot, keeping the two concerns separate. -
AzApi render-planning separation — Policy decisions (what to render) have been extracted
intoAzApiBodyRenderPlanner/AzApiBodyRenderPlans, leavingAzApiBodyRendererfocused
on layout and emission. Similarly,DefaultResourceRenderPolicynow holds the scenario
detection heuristics for the default renderer.