Gap Analysis (Route-Aware)
Step 4 of 6 in the Reverse Engineering to Spec-Driven Development process.
Estimated Time: 15 minutes Prerequisites: Step 3 completed (.specify/ directory exists with specifications) Output: docs/gap-analysis-report.md
Terminology:
-
specification = the conceptual document describing a feature
-
spec.md = the file at .specify/specs/{feature}/spec.md
-
Spec Kit / /speckit = the GitHub Spec Kit CLI tool
Step 0: Load Configuration
Read .stackshift-state.json to determine route and detection type.
If .stackshift-state.json does not exist, halt execution and inform the user: "Step 1 (Analyze) must be completed before running gap analysis. Run the analyze skill first." Do not proceed without route determination.
if [ ! -f .stackshift-state.json ]; then echo "ERROR: .stackshift-state.json not found. Run Step 1 (analyze) first." exit 1 fi
DETECTION_TYPE=$(cat .stackshift-state.json | jq -r '.detection_type // .path') ROUTE=$(cat .stackshift-state.json | jq -r '.route // .path')
if [ -z "$ROUTE" ] || [ "$ROUTE" = "null" ]; then echo "ERROR: No route defined in .stackshift-state.json. Re-run Step 1 (analyze)." exit 1 fi
echo "Detection: $DETECTION_TYPE" echo "Route: $ROUTE"
Routes:
-
greenfield = building NEW app (tech-agnostic specifications)
-
brownfield = managing EXISTING app (tech-prescriptive specifications)
Log: "Configuration loaded. Route: $ROUTE, Detection: $DETECTION_TYPE. Proceeding to route-specific analysis."
Based on route, branch to the appropriate section below.
Greenfield Route: Specification Completeness Analysis
Goal: Validate specifications are complete enough to build a NEW application. Not analyzing: Old codebase (building new, not fixing old).
GF-1: Review Specification Completeness
For each spec.md file, check for ambiguities, acceptance criteria, and user stories:
for spec in .specify/specs/*/spec.md; do echo "Analyzing: $(basename "$spec")" grep "[NEEDS CLARIFICATION]" "$spec" || echo "No clarifications needed" grep -A 10 "Acceptance Criteria" "$spec" || echo "WARNING: No acceptance criteria found" grep -A 5 "User Stories" "$spec" || echo "WARNING: No user stories found" done
If the .specify/specs/ directory is empty or missing, halt and inform the user: "No specifications found. Run Step 3 (create-specs) first."
Log: "Specification completeness review done. Proceeding to clarification identification."
GF-2: Identify Clarification Needs
Mark ambiguous areas with [NEEDS CLARIFICATION] tags. Common gaps in greenfield specifications:
-
UI/UX details missing (layout, interactions)
-
Business rules unclear (edge case behavior)
-
Data relationships ambiguous (entity modeling)
-
Non-functional requirements vague (performance, security targets)
GF-3: Ask About Target Tech Stack
Prompt the user to choose a technology stack for the new implementation:
I have validated the specifications extracted from the old codebase. Now we need to decide what to build the NEW application in.
What tech stack would you like to use?
Examples: A) Next.js 15 + React 19 + Prisma + PostgreSQL + Vercel B) Python FastAPI + SQLAlchemy + PostgreSQL + AWS ECS C) Ruby on Rails 7 + PostgreSQL + Heroku D) Your choice: [describe your preferred stack]
Document the chosen stack in the project Constitution for consistency.
GF-4: Create Implementation Roadmap
Write the greenfield roadmap to docs/gap-analysis-report.md . Structure the roadmap by build phases (foundation, core features, advanced features). Mark all features as MISSING since greenfield builds from scratch.
Use the template in operations/report-template.md as the output format. Adapt it for greenfield by replacing gap details with build-order phases.
Log: "Greenfield gap analysis complete. Report written to docs/gap-analysis-report.md."
Brownfield Route: Implementation Gap Analysis
Goal: Identify gaps between specifications and EXISTING codebase implementation. Analysis method: AST-powered analysis (primary), Spec Kit (fallback), manual review (last resort).
BF-1: Verify Prerequisites
Check if prerequisite scripts are installed for the fallback analysis path:
if [ ! -f .specify/scripts/bash/check-prerequisites.sh ]; then echo "Note: GitHub Spec Kit scripts not found. /speckit.analyze fallback unavailable." echo "AST analysis will be the sole automated method." fi
Log: "Prerequisites checked. Proceeding to analysis."
BF-2a: Run AST-Powered Analysis (PRIMARY)
Run the AST analysis for deep code inspection:
node ~/stackshift/scripts/run-ast-analysis.mjs roadmap . --format=markdown
Failure detection: If this command exits with a non-zero code or produces no output, skip to BF-2b. If it produces output, skip BF-2b and BF-2c entirely.
AST analysis provides:
-
Function signature verification (not just existence checks)
-
Stub detection (functions returning placeholder text)
-
Missing parameter detection
-
Business logic pattern analysis
-
Test coverage gaps
-
Confidence scoring (0-100%)
-
Phased roadmap with priorities and effort estimates
Log: "AST analysis complete. Found [N] partial, [M] missing features. Proceeding to detailed gap analysis."
BF-2b: Run Spec Kit Analysis (FALLBACK)
Only execute this step if BF-2a produced no output or failed.
/speckit.analyze
Failure detection: If this command fails with "Script not found" or produces no output, proceed to BF-2c.
Spec Kit checks:
-
Specifications marked COMPLETE but implementation missing
-
Implementation exists but not documented in specifications
-
Inconsistencies between related specifications
-
Conflicting requirements across specifications
-
Outdated implementation status
Log: "Spec Kit analysis complete. Proceeding to detailed gap analysis."
BF-2c: Manual Gap Analysis (LAST RESORT)
Only execute this step if both BF-2a and BF-2b failed. Use manual analysis only as a last resort -- it is the least thorough option.
for spec in .specify/specs/*/spec.md; do feature=$(dirname "$spec" | xargs basename) echo "Analyzing: $feature" status=$(grep "^## Status" "$spec" -A 1 | tail -1) echo " Status: $status" clarifications=$(grep -c "[NEEDS CLARIFICATION]" "$spec" 2>/dev/null || echo "0") echo " Clarifications needed: $clarifications" echo "" done
Log: "Manual analysis complete. Proceeding to detailed gap analysis."
BF-3: Detailed Gap Analysis
For each finding from the analysis (BF-2a, BF-2b, or BF-2c), perform deeper review:
A. Review PARTIAL features. For each partial feature, answer:
-
What exists? (backend, frontend, tests, docs)
-
What is missing? (specific components, endpoints, UI)
-
Why incomplete? (deprioritized, time constraints)
-
Effort to complete? (hours estimate)
-
Blockers? (dependencies, unclear requirements)
B. Review MISSING features. For each missing feature, answer:
-
Is it actually needed? (or can it be deprioritized?)
-
User impact if missing? (critical, important, nice-to-have)
-
Implementation complexity? (simple, moderate, complex)
-
Dependencies? (what must be done first)
C. Assess technical debt from docs/reverse-engineering/technical-debt-analysis.md :
-
Code quality issues
-
Missing tests (unit, integration, E2E)
-
Documentation gaps
-
Security vulnerabilities
-
Performance bottlenecks
D. Mark ambiguous areas with [NEEDS CLARIFICATION] tags for unclear requirements, missing UX/UI details, undefined behavior, and unspecified constraints.
Log: "Detailed gap analysis complete. Proceeding to prioritization."
BF-4: Prioritize and Create Roadmap
Assign each gap a priority level using these criteria:
-
P0 - Critical: Blocking major use cases, security vulnerabilities, data integrity issues, broken core functionality.
-
P1 - High: Important for core user value, high user impact, competitive differentiation, problematic technical debt.
-
P2 - Medium: Nice-to-have features, improvements to existing features, minor technical debt, edge cases.
-
P3 - Low: Future enhancements, polish, non-critical optimizations.
Phase the work into three groups: Phase 1 (P0 items), Phase 2 (P1 features), Phase 3 (P2/P3 enhancements). Estimate hours for each phase.
BF-5: Write Gap Report
Write the report to docs/gap-analysis-report.md using the template in operations/report-template.md . Populate all sections with findings from BF-3 and BF-4.
Log: "Brownfield gap analysis complete. Report written to docs/gap-analysis-report.md."
Post-Analysis: Spec Kit Integration
After writing the gap report, inform the user of these follow-up commands:
-
/speckit.analyze
-
Re-run after making changes to track progress
-
/speckit.tasks {feature}
-
Generate tasks for a specific feature
-
/speckit.implement {feature}
-
Implement a feature step-by-step
-
/speckit.clarify {feature}
-
Interactive Q&A to fill specification gaps
Success Criteria
Verify these outputs exist before reporting completion:
-
AST analysis results reviewed (or fallback method executed)
-
All inconsistencies documented
-
PARTIAL features analyzed (what exists vs what is missing)
-
MISSING features categorized
-
Technical debt cataloged
-
[NEEDS CLARIFICATION] markers added where needed
-
Priorities assigned (P0/P1/P2/P3)
-
Phased implementation roadmap created
-
docs/gap-analysis-report.md written
-
Ready to proceed to Step 5 (Complete Specification)
Next Step
Proceed to Step 5: Complete Specification -- use the complete-spec skill to resolve all [NEEDS CLARIFICATION] markers interactively.