extensions/specrew-speckit/scripts/intake/helpers/Resolve-PerLensMode.ps1
|
<#
.SYNOPSIS Resolve per-lens mode (Mode A/B/C) based on expertise dial and lens completeness. .DESCRIPTION Implements per-lens mode evaluation with most-conservative-wins conflict resolution. Each persona lens is independently evaluated against its own expertise dial and content completeness. Mode A (Sufficient): dial ≥7 AND ≥75% completeness → minimal questions Mode B (Targeted): dial 4-6 OR 40-74% completeness → 2-3 targeted clarifications Mode C (Full Interview): dial ≤3 OR <40% completeness → guided interview Implements FR-010, FR-028 for Feature 049 Iteration 003. .PARAMETER ExpertiseDial User's expertise dial for this persona (1-10 scale). .PARAMETER LensCompleteness Percentage of substantive answers across this lens's 12 categories (0.0-1.0). .PARAMETER DepthRules Depth rules configuration loaded from depth-rules.yml. .EXAMPLE $mode = Resolve-PerLensMode -ExpertiseDial 8 -LensCompleteness 0.8 -DepthRules $rules .NOTES Mirror parity: This file must remain functionally identical to: .specify/extensions/specrew-speckit/scripts/intake/helpers/Resolve-PerLensMode.ps1 #> Set-StrictMode -Version Latest $ErrorActionPreference = 'Stop' function Resolve-PerLensMode { [CmdletBinding()] param( [Parameter(Mandatory = $true)] [ValidateRange(1, 10)] [int]$ExpertiseDial, [Parameter(Mandatory = $true)] [ValidateRange(0.0, 1.0)] [double]$LensCompleteness, [Parameter(Mandatory = $false)] [object]$DepthRules ) $modeADialThreshold = 7 $modeACompletenessThreshold = 0.75 $modeBCompletenessMin = 0.40 if ($DepthRules -and $DepthRules.mode_a_thresholds) { if ($DepthRules.mode_a_thresholds.min_expertise_dial) { $modeADialThreshold = $DepthRules.mode_a_thresholds.min_expertise_dial } if ($DepthRules.mode_a_thresholds.min_completeness) { $modeACompletenessThreshold = $DepthRules.mode_a_thresholds.min_completeness } } if ($ExpertiseDial -ge $modeADialThreshold -and $LensCompleteness -ge $modeACompletenessThreshold) { Write-Verbose "Resolved mode A (Sufficient): dial=$ExpertiseDial, completeness=$LensCompleteness" return 'A' } if ($ExpertiseDial -le 3 -or $LensCompleteness -lt $modeBCompletenessMin) { Write-Verbose "Resolved mode C (Full Interview): dial=$ExpertiseDial, completeness=$LensCompleteness" return 'C' } Write-Verbose "Resolved mode B (Targeted Clarify): dial=$ExpertiseDial, completeness=$LensCompleteness" return 'B' } |