Files
gh-martybonacci-specswarm/commands/ship.md
2025-11-30 08:39:24 +08:00

245 lines
6.1 KiB
Markdown

---
description: Quality-gated merge to parent branch - validates code quality before allowing merge
args:
- name: --force-quality
description: Override quality threshold (e.g., --force-quality 70)
required: false
- name: --skip-tests
description: Skip test validation (not recommended)
required: false
---
## User Input
```text
$ARGUMENTS
```
You **MUST** consider the user input before proceeding (if not empty).
## Goal
Execute final quality gate validation and merge to parent branch.
**Purpose**: Enforce quality standards before merging features/bugfixes, preventing low-quality code from entering the codebase.
**Workflow**: Quality Analysis → Threshold Check → Merge (if passing)
**Quality Gates**:
- Default threshold: 80% quality score
- Configurable via `--force-quality` flag
- Reads `.specswarm/quality-standards.md` for project-specific thresholds
---
## Pre-Flight Checks
```bash
# Ensure we're in a git repository
if ! git rev-parse --git-dir > /dev/null 2>&1; then
echo "❌ Error: Not in a git repository"
echo ""
echo "This command must be run from within a git repository."
exit 1
fi
# Get repository root
REPO_ROOT=$(git rev-parse --show-toplevel)
cd "$REPO_ROOT"
# Parse arguments
FORCE_QUALITY=""
SKIP_TESTS=false
for arg in $ARGUMENTS; do
case "$arg" in
--force-quality)
shift
FORCE_QUALITY="$1"
;;
--skip-tests)
SKIP_TESTS=true
;;
esac
done
```
---
## Execution Steps
### Step 1: Display Banner
```bash
echo "🚢 SpecSwarm Ship - Quality-Gated Merge"
echo "══════════════════════════════════════════"
echo ""
echo "This command enforces quality standards before merge:"
echo " 1. Runs comprehensive quality analysis"
echo " 2. Checks quality score meets threshold"
echo " 3. If passing: merges to parent branch"
echo " 4. If failing: reports issues and blocks merge"
echo ""
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
echo "📍 Current branch: $CURRENT_BRANCH"
echo ""
```
---
### Step 2: Run Quality Analysis
**YOU MUST NOW run the quality analysis using the SlashCommand tool:**
```
Use the SlashCommand tool to execute: /specswarm:analyze-quality
```
Wait for the quality analysis to complete and extract the quality score from the output.
**Expected Output Pattern**: Look for quality score in output (e.g., "Overall Quality: 85%")
Store the quality score as QUALITY_SCORE.
---
### Step 3: Check Quality Threshold
**YOU MUST NOW check if quality meets threshold:**
```bash
# Determine threshold
DEFAULT_THRESHOLD=80
# Check for project-specific threshold in .specswarm/quality-standards.md
THRESHOLD=$DEFAULT_THRESHOLD
if [ -f ".specswarm/quality-standards.md" ]; then
# Try to extract threshold from quality standards file
PROJECT_THRESHOLD=$(grep -i "^quality_threshold:" .specswarm/quality-standards.md | grep -oE '[0-9]+' || echo "")
if [ -n "$PROJECT_THRESHOLD" ]; then
THRESHOLD=$PROJECT_THRESHOLD
echo "📋 Using project quality threshold: ${THRESHOLD}%"
fi
fi
# Override with --force-quality if provided
if [ -n "$FORCE_QUALITY" ]; then
THRESHOLD=$FORCE_QUALITY
echo "⚠️ Quality threshold overridden: ${THRESHOLD}%"
fi
echo ""
echo "🎯 Quality Threshold: ${THRESHOLD}%"
echo "📊 Actual Quality Score: ${QUALITY_SCORE}%"
echo ""
```
**Decision Logic**:
IF QUALITY_SCORE >= THRESHOLD:
- ✅ Quality gate PASSED
- Proceed to Step 4 (Merge)
ELSE:
- ❌ Quality gate FAILED
- Display failure message
- List top issues from analysis
- Suggest fixes
- EXIT without merging
```bash
if [ "$QUALITY_SCORE" -ge "$THRESHOLD" ]; then
echo "✅ Quality gate PASSED (${QUALITY_SCORE}% >= ${THRESHOLD}%)"
echo ""
else
echo "❌ Quality gate FAILED (${QUALITY_SCORE}% < ${THRESHOLD}%)"
echo ""
echo "The code quality does not meet the required threshold."
echo ""
echo "🔧 Recommended Actions:"
echo " 1. Review the quality analysis output above"
echo " 2. Address critical and high-priority issues"
echo " 3. Run /specswarm:analyze-quality again to verify improvements"
echo " 4. Run /specswarm:ship again when quality improves"
echo ""
echo "💡 Alternatively:"
echo " - Override threshold: /specswarm:ship --force-quality 70"
echo " - Note: Overriding quality gates is not recommended for production code"
echo ""
exit 1
fi
```
---
### Step 4: Merge to Parent Branch
**Quality gate passed! YOU MUST NOW merge using the SlashCommand tool:**
```
Use the SlashCommand tool to execute: /specswarm:complete
```
Wait for the merge to complete.
---
### Step 5: Success Report
**After successful merge, display:**
```bash
echo ""
echo "══════════════════════════════════════════"
echo "🎉 SHIP SUCCESSFUL"
echo "══════════════════════════════════════════"
echo ""
echo "✅ Quality gate passed (${QUALITY_SCORE}%)"
echo "✅ Merged to parent branch"
echo "✅ Feature/bugfix complete"
echo ""
echo "📝 Next Steps:"
echo " - Pull latest changes in other branches"
echo " - Consider creating a release tag if ready"
echo " - Update project documentation if needed"
echo ""
```
---
## Error Handling
If any step fails:
1. **Quality analysis fails**: Report error and suggest checking logs
2. **Quality threshold not met**: Display issues and exit (see Step 3)
3. **Merge fails**: Report git errors and suggest manual resolution
**All errors should EXIT with clear remediation steps.**
---
## Notes
**Design Philosophy**:
- Quality gates prevent technical debt accumulation
- Encourages addressing issues before merge (not after)
- Configurable thresholds balance strictness with pragmatism
- Override flag available but discouraged for production code
**Quality Standards File** (`.specswarm/quality-standards.md`):
```yaml
---
quality_threshold: 85
enforce_gates: true
---
# Project Quality Standards
Minimum quality threshold: 85%
...
```
If `enforce_gates: false`, ship will warn but not block merge.