2026-05-02 02:18:19 +05:00
#!/usr/bin/env pwsh
[ CmdletBinding ()]
param (
[ switch ] $Json ,
[ switch ] $Help
)
$ErrorActionPreference = 'Stop'
if ( $Help ) {
Write-Output "Usage: setup-tasks.ps1 [-Json] [-Help]"
exit 0
}
# Source common functions
. " $PSScriptRoot /common.ps1"
2026-06-09 06:13:07 -05:00
# Get feature paths
2026-05-02 02:18:19 +05:00
$paths = Get-FeaturePathsEnv
if ( -not ( Test-Path $paths . IMPL_PLAN -PathType Leaf )) {
[ Console ]:: Error . WriteLine ( "ERROR: plan.md not found in $( $paths . FEATURE_DIR ) " )
2026-06-03 23:24:13 +02:00
$planCommand = Format-SpecKitCommand -CommandName 'plan' -RepoRoot $paths . REPO_ROOT
[ Console ]:: Error . WriteLine ( "Run $planCommand first to create the implementation plan." )
2026-05-02 02:18:19 +05:00
exit 1
}
if ( -not ( Test-Path $paths . FEATURE_SPEC -PathType Leaf )) {
[ Console ]:: Error . WriteLine ( "ERROR: spec.md not found in $( $paths . FEATURE_DIR ) " )
2026-06-03 23:24:13 +02:00
$specifyCommand = Format-SpecKitCommand -CommandName 'specify' -RepoRoot $paths . REPO_ROOT
[ Console ]:: Error . WriteLine ( "Run $specifyCommand first to create the feature structure." )
2026-05-02 02:18:19 +05:00
exit 1
}
# Build available docs list
$docs = @ ()
if ( Test-Path $paths . RESEARCH ) { $docs += 'research.md' }
if ( Test-Path $paths . DATA_MODEL ) { $docs += 'data-model.md' }
if (( Test-Path $paths . CONTRACTS_DIR ) -and ( Get-ChildItem -Path $paths . CONTRACTS_DIR -ErrorAction SilentlyContinue | Select-Object -First 1 )) {
$docs += 'contracts/'
}
if ( Test-Path $paths . QUICKSTART ) { $docs += 'quickstart.md' }
# Resolve tasks template through override stack
$tasksTemplate = Resolve-Template -TemplateName 'tasks-template' -RepoRoot $paths . REPO_ROOT
if ( -not $tasksTemplate -or -not ( Test-Path -LiteralPath $tasksTemplate -PathType Leaf )) {
$expectedCoreTemplate = Join-Path $paths . REPO_ROOT '.specify/templates/tasks-template.md'
[ Console ]:: Error . WriteLine ( "ERROR: Tasks template not found for repository root: $( $paths . REPO_ROOT ) `n Template resolution order: overrides -> presets -> extensions -> core. `n Expected shared/core template location: $expectedCoreTemplate `n To continue, verify whether 'tasks-template.md' is available in '.specify/templates/overrides/', preset templates, extension templates, or restore the shared/core templates (for example by re-running 'specify init') so that '.specify/templates/tasks-template.md' exists." )
exit 1
}
$tasksTemplate = ( Resolve-Path -LiteralPath $tasksTemplate ). Path
# Output results
if ( $Json ) {
[ PSCustomObject ] @ {
FEATURE_DIR = $paths . FEATURE_DIR
AVAILABLE_DOCS = $docs
TASKS_TEMPLATE = $tasksTemplate
} | ConvertTo-Json -Compress
} else {
Write-Output "FEATURE_DIR: $( $paths . FEATURE_DIR ) "
Write-Output "TASKS_TEMPLATE: $( if ( $tasksTemplate ) { $tasksTemplate } else { 'not found' }) "
Write-Output "AVAILABLE_DOCS:"
Test-FileExists -Path $paths . RESEARCH -Description 'research.md' | Out-Null
Test-FileExists -Path $paths . DATA_MODEL -Description 'data-model.md' | Out-Null
Test-DirHasFiles -Path $paths . CONTRACTS_DIR -Description 'contracts/' | Out-Null
Test-FileExists -Path $paths . QUICKSTART -Description 'quickstart.md' | Out-Null
}