extensions/specrew-speckit/scripts/intake/helpers/Resolve-AutoDecision.ps1
|
<#
.SYNOPSIS Resolve auto-decision defaults based on detected stack. .DESCRIPTION Loads auto-decision defaults from stack-specific YAML file, falling back to generic.yml. Returns hashtable of default decisions for low-expertise scenarios (dial 1-3, Mode C). Implements FR-028, FR-031 for Feature 049 Iteration 003. .PARAMETER IntakeDataRoot Root path for intake data catalogs. Defaults to .specify/intake/ .PARAMETER Stack Detected repository stack ('dotnet', 'python', 'nodejs', 'generic'). .EXAMPLE $defaults = Resolve-AutoDecision -IntakeDataRoot ".specify/intake" -Stack "dotnet" .NOTES Mirror parity: This file must remain functionally identical to: .specify/extensions/specrew-speckit/scripts/intake/helpers/Resolve-AutoDecision.ps1 #> Set-StrictMode -Version Latest $ErrorActionPreference = 'Stop' function Resolve-AutoDecision { [CmdletBinding()] param( [Parameter(Mandatory = $false)] [string]$IntakeDataRoot, [Parameter(Mandatory = $false)] [string]$Stack = 'generic' ) $parserPath = Join-Path $PSScriptRoot 'Read-IntakeYaml.ps1' if (-not (Get-Command Read-IntakeYamlDocument -ErrorAction SilentlyContinue) -and (Test-Path -LiteralPath $parserPath -PathType Leaf)) { . $parserPath } if ([string]::IsNullOrEmpty($IntakeDataRoot)) { $IntakeDataRoot = Join-Path (Get-Location) '.specify\intake' } $autoDecisionDir = Join-Path $IntakeDataRoot 'auto-decision-defaults' $stackSpecificPath = Join-Path $autoDecisionDir "$Stack.yml" $genericPath = Join-Path $autoDecisionDir 'generic.yml' $decisionPath = $genericPath if (Test-Path $stackSpecificPath) { $decisionPath = $stackSpecificPath Write-Verbose "Using stack-specific auto-decisions: $Stack" } else { Write-Verbose "Using generic auto-decisions (stack-specific not found: $Stack)" } if (-not (Test-Path $decisionPath)) { Write-Warning "Auto-decision defaults not found: $decisionPath" return @{} } try { $decisionContent = Get-Content $decisionPath -Raw if (Get-Command ConvertFrom-Yaml -ErrorAction SilentlyContinue) { $decisionData = $decisionContent | ConvertFrom-Yaml return $decisionData.defaults } if (Get-Command Read-IntakeYamlDocument -ErrorAction SilentlyContinue) { return Read-IntakeYamlDocument -Path $decisionPath -Kind 'defaults' } Write-Verbose "No YAML parser available, returning empty auto-decisions" return @{} } catch { Write-Error "Failed to load auto-decision defaults: $_" return @{} } } |