From 97df98b9a06d63446d2660d93fb91a83b4cb485d Mon Sep 17 00:00:00 2001 From: "den (work)" <53200638+localden@users.noreply.github.com> Date: Tue, 14 Oct 2025 11:03:57 -0700 Subject: [PATCH] Update logic for arguments --- pyproject.toml | 2 +- scripts/powershell/create-new-feature.ps1 | 42 +++++++++++------------ templates/commands/specify.md | 35 +++++++++++++++---- 3 files changed, 50 insertions(+), 29 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index f1a79030..7626dc87 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "specify-cli" -version = "0.0.19" +version = "0.0.20" description = "Specify CLI, part of GitHub Spec Kit. A tool to bootstrap your projects for Spec-Driven Development (SDD)." requires-python = ">=3.11" dependencies = [ diff --git a/scripts/powershell/create-new-feature.ps1 b/scripts/powershell/create-new-feature.ps1 index a9a57ef9..3f77c9c4 100644 --- a/scripts/powershell/create-new-feature.ps1 +++ b/scripts/powershell/create-new-feature.ps1 @@ -4,38 +4,38 @@ param( [switch]$Json, [string]$ShortName, + [switch]$Help, [Parameter(ValueFromRemainingArguments = $true)] [string[]]$FeatureDescription ) $ErrorActionPreference = 'Stop' -# Show help if requested or no description provided -if (($FeatureDescription -contains '--help') -or ($FeatureDescription -contains '-h') -or - (-not $FeatureDescription) -or ($FeatureDescription.Count -eq 0)) { - - if (($FeatureDescription -contains '--help') -or ($FeatureDescription -contains '-h')) { - Write-Host "Usage: ./create-new-feature.ps1 [-Json] [-ShortName ] " - Write-Host "" - Write-Host "Options:" - Write-Host " -Json Output in JSON format" - Write-Host " -ShortName Provide a custom short name (2-4 words) for the branch" - Write-Host " -h, --help Show this help message" - Write-Host "" - Write-Host "Examples:" - Write-Host " ./create-new-feature.ps1 'Add user authentication system' -ShortName 'user-auth'" - Write-Host " ./create-new-feature.ps1 'Implement OAuth2 integration for API'" - exit 0 - } else { - Write-Error "Usage: ./create-new-feature.ps1 [-Json] [-ShortName ] " - exit 1 - } +# Show help if requested +if ($Help) { + Write-Host "Usage: ./create-new-feature.ps1 [-Json] [-ShortName ] " + Write-Host "" + Write-Host "Options:" + Write-Host " -Json Output in JSON format" + Write-Host " -ShortName Provide a custom short name (2-4 words) for the branch" + Write-Host " -Help Show this help message" + Write-Host "" + Write-Host "Examples:" + Write-Host " ./create-new-feature.ps1 'Add user authentication system' -ShortName 'user-auth'" + Write-Host " ./create-new-feature.ps1 'Implement OAuth2 integration for API'" + exit 0 +} + +# Check if feature description provided +if (-not $FeatureDescription -or $FeatureDescription.Count -eq 0) { + Write-Error "Usage: ./create-new-feature.ps1 [-Json] [-ShortName ] " + exit 1 } $featureDesc = ($FeatureDescription -join ' ').Trim() # Resolve repository root. Prefer git information when available, but fall back # to searching for repository markers so the workflow still functions in repositories that -# were initialised with --no-git. +# were initialized with --no-git. function Find-RepositoryRoot { param( [string]$StartDir, diff --git a/templates/commands/specify.md b/templates/commands/specify.md index 7f5f1799..3217e87b 100644 --- a/templates/commands/specify.md +++ b/templates/commands/specify.md @@ -19,11 +19,32 @@ The text the user typed after `/speckit.specify` in the triggering message **is* Given that feature description, do this: -1. Run the script `{SCRIPT}` from repo root and parse its JSON output for BRANCH_NAME and SPEC_FILE. All file paths must be absolute. - **IMPORTANT** You must only ever run this script once. The JSON is provided in the terminal as output - always refer to it to get the actual content you're looking for. For single quotes in args like "I'm Groot", use escape syntax: e.g 'I'\''m Groot' (or double-quote if possible: "I'm Groot"). -2. Load `templates/spec-template.md` to understand required sections. +1. **Generate a concise short name** (2-4 words) for the branch: + - Analyze the feature description and extract the most meaningful keywords + - Create a 2-4 word short name that captures the essence of the feature + - Use action-noun format when possible (e.g., "add-user-auth", "fix-payment-bug") + - Preserve technical terms and acronyms (OAuth2, API, JWT, etc.) + - Keep it concise but descriptive enough to understand the feature at a glance + - Examples: + - "I want to add user authentication" → "user-auth" + - "Implement OAuth2 integration for the API" → "oauth2-api-integration" + - "Create a dashboard for analytics" → "analytics-dashboard" + - "Fix payment processing timeout bug" → "fix-payment-timeout" -3. Follow this execution flow: +2. Run the script `{SCRIPT}` from repo root **with the short-name argument** and parse its JSON output for BRANCH_NAME and SPEC_FILE. All file paths must be absolute. + + **IMPORTANT**: + + - Append the short-name argument to the `{SCRIPT}` command with the 2-4 word short name you created in step 1 + - Bash: `--short-name "your-generated-short-name"` + - PowerShell: `-ShortName "your-generated-short-name"` + - For single quotes in args like "I'm Groot", use escape syntax: e.g 'I'\''m Groot' (or double-quote if possible: "I'm Groot") + - You must only ever run this script once + - The JSON is provided in the terminal as output - always refer to it to get the actual content you're looking for + +3. Load `templates/spec-template.md` to understand required sections. + +4. Follow this execution flow: 1. Parse user description from Input If empty: ERROR "No feature description provided" @@ -49,9 +70,9 @@ Given that feature description, do this: 7. Identify Key Entities (if data involved) 8. Return: SUCCESS (spec ready for planning) -4. Write the specification to SPEC_FILE using the template structure, replacing placeholders with concrete details derived from the feature description (arguments) while preserving section order and headings. +5. Write the specification to SPEC_FILE using the template structure, replacing placeholders with concrete details derived from the feature description (arguments) while preserving section order and headings. -5. **Specification Quality Validation**: After writing the initial spec, validate it against quality criteria: +6. **Specification Quality Validation**: After writing the initial spec, validate it against quality criteria: a. **Create Spec Quality Checklist**: Generate a checklist file at `FEATURE_DIR/checklists/requirements.md` using the checklist template structure with these validation items: @@ -143,7 +164,7 @@ Given that feature description, do this: d. **Update Checklist**: After each validation iteration, update the checklist file with current pass/fail status -6. Report completion with branch name, spec file path, checklist results, and readiness for the next phase (`/speckit.clarify` or `/speckit.plan`). +7. Report completion with branch name, spec file path, checklist results, and readiness for the next phase (`/speckit.clarify` or `/speckit.plan`). **NOTE:** The script creates and checks out the new branch and initializes the spec file before writing.