#!/usr/bin/env pwsh # remove-stale-refs.ps1 - Remove stale project references that don't exist param([string]$SlnPath = "src/StellaOps.sln") $content = Get-Content $SlnPath -Raw $lines = $content -split "`r?`n" # Stale project paths (relative from solution location) $staleProjects = @( "__Tests\AirGap\StellaOps.AirGap.Controller.Tests", "__Tests\AirGap\StellaOps.AirGap.Importer.Tests", "__Tests\AirGap\StellaOps.AirGap.Time.Tests", "__Tests\StellaOps.Gateway.WebService.Tests", "__Tests\Graph\StellaOps.Graph.Indexer.Tests", "Scanner\StellaOps.Scanner.Analyzers.Native", "__Libraries\__Tests\StellaOps.Signals.Tests", "__Tests\StellaOps.Audit.ReplayToken.Tests", "__Tests\StellaOps.Router.Gateway.Tests", "__Libraries\StellaOps.Cryptography" ) $staleGuids = @() $newLines = @() $skipNext = $false for ($i = 0; $i -lt $lines.Count; $i++) { $line = $lines[$i] if ($skipNext) { $skipNext = $false continue } $isStale = $false foreach ($stalePath in $staleProjects) { if ($line -like "*$stalePath*") { # Extract GUID if ($line -match '\{([A-F0-9-]+)\}"?$') { $staleGuids += $Matches[1] } Write-Host "Removing stale: $stalePath" $isStale = $true $skipNext = $true break } } if (-not $isStale) { $newLines += $line } } # Remove GlobalSection references to stale GUIDs $finalLines = @() foreach ($line in $newLines) { $skip = $false foreach ($guid in $staleGuids) { if ($line -match $guid) { $skip = $true break } } if (-not $skip) { $finalLines += $line } } $finalLines -join "`r`n" | Set-Content $SlnPath -Encoding UTF8 -NoNewline Write-Host "Removed $($staleGuids.Count) stale project references"