Files
msd-core/get-shit-done/references/phase-argument-parsing.md
2026-02-07 11:39:21 -06:00

1.3 KiB

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)

Normalization

Zero-pad integer phases to 2 digits. Preserve decimal suffixes.

# 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

Auto-Detection

When no phase number provided, detect the next unplanned phase:

# Find phases without PLAN.md files
for dir in .planning/phases/*/; do
  if ! ls "$dir"/*-PLAN.md 2>/dev/null | head -1 >/dev/null; then
    PHASE=$(basename "$dir" | grep -oE '^[0-9.]+')
    break
  fi
done

Validation

After normalization, verify phase exists in ROADMAP.md:

grep -q "### Phase ${PHASE}:" .planning/ROADMAP.md || {
  echo "ERROR: Phase ${PHASE} not found in roadmap"
  exit 1
}

Directory Lookup

Find the phase directory using the normalized phase number:

PHASE_DIR=$(ls -d .planning/phases/${PHASE}-* 2>/dev/null | head -1)