62 lines
1.5 KiB
Markdown
62 lines
1.5 KiB
Markdown
# Phase Argument Parsing
|
|
|
|
Parse and normalize phase arguments for commands that operate on phases.
|
|
|
|
## Extraction
|
|
|
|
From `$ARGUMENTS`:
|
|
- Extract phase number (first numeric argument)
|
|
- Extract flags (prefixed with `--`)
|
|
- Remaining text is description (for insert/add commands)
|
|
|
|
## Using gsd-tools
|
|
|
|
The `find-phase` command handles normalization and validation in one step:
|
|
|
|
```bash
|
|
PHASE_INFO=$(node ".pi/gsd/bin/gsd-tools.cjs" find-phase "${PHASE}")
|
|
```
|
|
|
|
Returns JSON with:
|
|
- `found`: true/false
|
|
- `directory`: Full path to phase directory
|
|
- `phase_number`: Normalized number (e.g., "06", "06.1")
|
|
- `phase_name`: Name portion (e.g., "foundation")
|
|
- `plans`: Array of PLAN.md files
|
|
- `summaries`: Array of SUMMARY.md files
|
|
|
|
## Manual Normalization (Legacy)
|
|
|
|
Zero-pad integer phases to 2 digits. Preserve decimal suffixes.
|
|
|
|
```bash
|
|
# Normalize phase number
|
|
if [[ "$PHASE" =~ ^[0-9]+$ ]]; then
|
|
# Integer: 8 → 08
|
|
PHASE=$(printf "%02d" "$PHASE")
|
|
elif [[ "$PHASE" =~ ^([0-9]+)\.([0-9]+)$ ]]; then
|
|
# Decimal: 2.1 → 02.1
|
|
PHASE=$(printf "%02d.%s" "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}")
|
|
fi
|
|
```
|
|
|
|
## Validation
|
|
|
|
Use `roadmap get-phase` to validate phase exists:
|
|
|
|
```bash
|
|
PHASE_CHECK=$(node ".pi/gsd/bin/gsd-tools.cjs" roadmap get-phase "${PHASE}" --pick found)
|
|
if [ "$PHASE_CHECK" = "false" ]; then
|
|
echo "ERROR: Phase ${PHASE} not found in roadmap"
|
|
exit 1
|
|
fi
|
|
```
|
|
|
|
## Directory Lookup
|
|
|
|
Use `find-phase` for directory lookup:
|
|
|
|
```bash
|
|
PHASE_DIR=$(node ".pi/gsd/bin/gsd-tools.cjs" find-phase "${PHASE}" --raw)
|
|
```
|