S2DCartographer.psd1

@{
    RootModule           = 'S2DCartographer.psm1'
    ModuleVersion        = '1.4.0'
    CompatiblePSEditions = @('Core')
    GUID                 = 'c7f4a2d1-83e6-4b19-a05c-9d2e7f318c44'
    Author               = 'Azure Local Cloud'
    CompanyName          = 'countrycloudboy'
    Copyright            = '(c) 2026 Hybrid Cloud Solutions. All rights reserved.'
    Description          = 'Storage Spaces Direct analysis, visualization, and reporting for Azure Local and Windows Server clusters. Inventories physical disks, storage pools, and volumes; computes capacity waterfalls with TiB/TB dual display; generates HTML dashboards, Word documents, PDFs, and Excel workbooks with publication-quality diagrams.'
    PowerShellVersion    = '7.2'
    RequiredModules      = @(
        @{ ModuleName = 'ImportExcel'; ModuleVersion = '7.0.0' }
    )

    FunctionsToExport    = @(
        'Connect-S2DCluster',
        'Disconnect-S2DCluster',
        'Get-S2DPhysicalDiskInventory',
        'Get-S2DStoragePoolInfo',
        'Get-S2DVolumeMap',
        'Get-S2DCacheTierInfo',
        'Get-S2DCapacityWaterfall',
        'Get-S2DHealthStatus',
        'ConvertTo-S2DCapacity',
        'Invoke-S2DCartographer',
        'Invoke-S2DCapacityWhatIf',
        'New-S2DReport',
        'New-S2DDiagram'
    )
    CmdletsToExport      = @()
    VariablesToExport    = @()
    AliasesToExport      = @()

    PrivateData          = @{
        PSData = @{
            Tags         = @(
                'S2D',
                'StorageSpacesDirect',
                'AzureLocal',
                'AzureStackHCI',
                'Storage',
                'HCI',
                'HyperConverged',
                'Reporting',
                'Visualization',
                'Capacity',
                'CapacityPlanning',
                'PowerShell'
            )
            ProjectUri   = 'https://github.com/AzureLocal/azurelocal-s2d-cartographer'
            LicenseUri   = 'https://github.com/AzureLocal/azurelocal-s2d-cartographer/blob/main/LICENSE'
            IconUri      = 'https://raw.githubusercontent.com/AzureLocal/azurelocal-s2d-cartographer/main/docs/assets/images/s2dcartographer-icon.svg'
            ReleaseNotes = @'
## v1.4.0 — Capacity model hardening and report correctness
- Waterfall reduced from 8 to 7 stages: Stage 7 is now the Usable Capacity terminus. Closes #52.
- All waterfall stage Status values are always OK; reserve health lives on ReserveStatus only. Closes #47.
- Reserve formula corrected: min(NodeCount,4) × one drive per server (not one node-worth). Closes #48.
- Infrastructure volume detection extended: UserStorage_N, HCI_UserStorage_N, SBEAgent patterns added. Closes #46.
- HTML report delta column split into its own Deducted column; em dash shown when no deduction. Closes #49.
- Word report waterfall table updated: Status column removed, Deducted column added. Closes #50.
- Invoke-S2DCapacityWhatIf delta loop fixed: was hardcoded to 8 iterations, now uses Stages.Count. Closes #51.
- MAPROOM healthy-pool-snapshot fixture added for correctly-configured cluster validation.

## v1.3.1 — Sample output reports
- docs/samples.md added: browse HTML dashboard, overprovisioned HTML, JSON snapshot, what-if HTML report, and what-if JSON result before running the tool. All generated from the MAPROOM IIC synthetic environment.

## v1.3.0 — Thin provisioning risk and what-if capacity modeling
- Invoke-S2DCapacityWhatIf: model AddNodes, AddDisksPerNode, ReplaceDiskSizeTB, ChangeResiliency from JSON snapshot or live cluster. Returns S2DWhatIfResult with before/after waterfalls and per-stage deltas. HTML and JSON reports. Closes #27.
- Check 6 (ThinOvercommit) tiered: Warn >80%, Fail >100% of max potential footprint / pool total. Fires before overcommit occurs. Closes #44.
- Check 11 (ThinReserveRisk): warns when uncommitted thin growth would consume the rebuild reserve.
- S2DVolume.ThinGrowthHeadroom and MaxPotentialFootprint properties for thin volumes.
- Thin Provision Risk KPI in HTML executive summary; Growth Headroom and Max Potential Footprint columns in all report formats.
- Invoke-S2DWaterfallCalculation pure private function extracted from Get-S2DCapacityWaterfall.

## v1.2.1 — Capacity model correctness fix
- Stage 1 counts only pool-member capacity-tier disks (IsPoolMember filter). Closes #43.
- Stages 7 and 8 are now purely theoretical (resiliency factor applied to Stage 6; Stage 8 = Stage 7).
- BlendedEfficiencyPercent reflects theoretical resiliency efficiency.

## v1.2.0 — JSON/CSV export, pool-member filtering, Surveyor cross-link
- JSON snapshot export (SchemaVersion 1.0) on every run. Closes #40.
- CSV export opt-in (-Format Csv). Closes #40.
- IsPoolMember boolean on every physical disk. Closes #41.
- Pool-member-only filtering in HTML/Word/PDF/Excel disk tables by default. Closes #41.

## v1.1.1 — Key Vault and Authentication path fixes. Closes #39.
## v1.1.0 — All formats by default, per-run output folders, session log.
## v1.0.x — Foundation: all 6 collectors, 11 health checks, 4 report formats, 6 SVG diagrams.

Full changelog: https://github.com/AzureLocal/azurelocal-s2d-cartographer/blob/main/CHANGELOG.md
'@

        }
    }
}