85 lines
3.1 KiB
Bash
Executable File
85 lines
3.1 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Requirements Coverage Checker
|
|
# Extracts @req tags from codebase and compares with README.md
|
|
#
|
|
|
|
set -e
|
|
|
|
REQUIREMENTS_FILE="README.md"
|
|
SOURCE_DIRS="src-tauri/ src/"
|
|
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo " Requirements Coverage Report"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo ""
|
|
|
|
# Extract requirement IDs from README.md (UR-, IR-, DR-, JA-)
|
|
echo "📊 Scanning requirements from $REQUIREMENTS_FILE..."
|
|
requirements=$(grep -E "^\| (UR|IR|DR|JA)-[0-9]+" "$REQUIREMENTS_FILE" | \
|
|
sed -E 's/^\| ([A-Z]+-[0-9]+).*/\1/' | \
|
|
sort -u)
|
|
|
|
total_reqs=$(echo "$requirements" | wc -l)
|
|
implemented=0
|
|
partial=0
|
|
planned=0
|
|
missing=0
|
|
|
|
echo ""
|
|
echo "Category Breakdown:"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
|
|
for category in UR IR DR JA; do
|
|
cat_count=$(echo "$requirements" | grep "^$category-" | wc -l)
|
|
printf "%-4s %3d requirements\n" "$category:" "$cat_count"
|
|
done
|
|
|
|
echo ""
|
|
echo "Implementation Status:"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
|
|
for req in $requirements; do
|
|
# Count full implementations
|
|
full_count=$(grep -r "@req: $req" $SOURCE_DIRS 2>/dev/null | grep -v "@req-partial" | grep -v "@req-planned" | wc -l)
|
|
|
|
# Count partial implementations
|
|
partial_count=$(grep -r "@req-partial: $req" $SOURCE_DIRS 2>/dev/null | wc -l)
|
|
|
|
# Count planned
|
|
planned_count=$(grep -r "@req-planned: $req" $SOURCE_DIRS 2>/dev/null | wc -l)
|
|
|
|
if [ "$full_count" -gt 0 ]; then
|
|
echo "✅ $req: $full_count implementation(s)"
|
|
((implemented++))
|
|
elif [ "$partial_count" -gt 0 ]; then
|
|
echo "🔶 $req: $partial_count partial implementation(s)"
|
|
((partial++))
|
|
elif [ "$planned_count" -gt 0 ]; then
|
|
echo "📋 $req: Planned (not yet implemented)"
|
|
((planned++))
|
|
else
|
|
echo "❌ $req: No implementation found"
|
|
((missing++))
|
|
fi
|
|
done
|
|
|
|
echo ""
|
|
echo "Summary:"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
printf "Total Requirements: %3d\n" "$total_reqs"
|
|
printf "✅ Fully Implemented: %3d (%.0f%%)\n" "$implemented" "$(echo "scale=0; $implemented * 100 / $total_reqs" | bc)"
|
|
printf "🔶 Partially Implemented: %3d (%.0f%%)\n" "$partial" "$(echo "scale=0; $partial * 100 / $total_reqs" | bc)"
|
|
printf "📋 Planned: %3d (%.0f%%)\n" "$planned" "$(echo "scale=0; $planned * 100 / $total_reqs" | bc)"
|
|
printf "❌ Missing: %3d (%.0f%%)\n" "$missing" "$(echo "scale=0; $missing * 100 / $total_reqs" | bc)"
|
|
echo ""
|
|
|
|
# Exit code based on missing critical requirements
|
|
if [ "$missing" -gt 0 ]; then
|
|
echo "⚠️ Warning: $missing requirements have no implementation"
|
|
exit 1
|
|
else
|
|
echo "✨ All requirements have implementations!"
|
|
exit 0
|
|
fi
|