Public/Invoke-GovernanceBuild.ps1

function Invoke-GovernanceBuild {
    <#
        .SYNOPSIS
        Compiles a program's authored hierarchy into its single resolved
        desired-state file (programs/<program>/resolved.yaml).
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory)][string]$ProgramPath,
        [Parameter(Mandatory)][string]$OutputPath
    )

    $program  = Split-Path $ProgramPath -Leaf
    $source   = Import-GovernanceSource -ProgramPath $ProgramPath
    $resolved = Resolve-Governance -Manifest $source.Manifest -Source $source.Hierarchy -Access $source.Access -Members $source.Members -SourceHash $source.Hash -Cadence $source.Cadence -Taxonomy $source.Taxonomy -Systems $source.Systems

    $issues = Test-ResolvedGovernance -Resolved $resolved
    if ($issues.Count -gt 0) {
        $issues | ForEach-Object { Write-Error $_ }
        throw "Governance validation failed for '$program' with $($issues.Count) issue(s)."
    }

    $written = Write-ResolvedGovernance -Resolved $resolved -OutputPath $OutputPath

    Write-Host "Compiled '$program' -> $written" -ForegroundColor Green
    $iterCount = if ($resolved.iterations) { $resolved.iterations.paths.Count } else { 0 }
    Write-Host (" {0} area paths, {1} teams, {2} repos, {3} pipeline folders, {4} iteration paths" -f `
        $resolved.areaPaths.Count, $resolved.teams.Count, $resolved.repos.Count, $resolved.pipelineFolders.Count, $iterCount)

    return $written
}