Initial commit: Clean DSS implementation

Migrated from design-system-swarm with fresh git history.
Old project history preserved in /home/overbits/apps/design-system-swarm

Core components:
- MCP Server (Python FastAPI with mcp 1.23.1)
- Claude Plugin (agents, commands, skills, strategies, hooks, core)
- DSS Backend (dss-mvp1 - token translation, Figma sync)
- Admin UI (Node.js/React)
- Server (Node.js/Express)
- Storybook integration (dss-mvp1/.storybook)

Self-contained configuration:
- All paths relative or use DSS_BASE_PATH=/home/overbits/dss
- PYTHONPATH configured for dss-mvp1 and dss-claude-plugin
- .env file with all configuration
- Claude plugin uses ${CLAUDE_PLUGIN_ROOT} for portability

Migration completed: $(date)
🤖 Clean migration with full functionality preserved
This commit is contained in:
Digital Production Factory
2025-12-09 18:45:48 -03:00
commit 276ed71f31
884 changed files with 373737 additions and 0 deletions

170
scripts/verify-quality.sh Executable file
View File

@@ -0,0 +1,170 @@
#!/bin/bash
#
# DSS Code Quality Verification Script
# Runs automated checks to ensure code quality standards before commits
#
# Enforces standards from: .knowledge/dss-coding-standards.json
#
# Thresholds:
# - Inline event handlers: 0 (ZERO TOLERANCE)
# - Inline styles: ≤10 (dynamic values only)
# - Console statements: ≤10 (use logger utility)
# - File size: ≤100KB
# - Syntax errors: 0 (ZERO TOLERANCE)
#
# Only checks files that are staged for commit (git diff --cached)
#
set -e
echo "🔍 Running DSS Code Quality Checks..."
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Track if any checks fail
FAILED=0
# Get list of staged JS files in admin-ui/js/ and server/src/
STAGED_JS_FILES=$(git diff --cached --name-only --diff-filter=ACMR | grep -E '(admin-ui/js/.*\.js|server/src/.*\.js)$' || true)
# If no JS files are staged, skip quality checks
if [ -z "$STAGED_JS_FILES" ]; then
echo " No JavaScript files in commit, skipping quality checks."
exit 0
fi
echo "📄 Checking $(echo "$STAGED_JS_FILES" | wc -w) staged JavaScript files..."
# 1. Check for inline event handlers (onmouseover, onclick, etc.)
# ZERO TOLERANCE per DSS coding standards
echo ""
echo "📋 Checking for inline event handlers..."
INLINE_EVENTS=$(echo "$STAGED_JS_FILES" | xargs grep -n "on\(click\|mouseover\|mouseout\|keydown\|keyup\|load\|submit\)=" 2>/dev/null || true)
if [ -n "$INLINE_EVENTS" ]; then
echo "$INLINE_EVENTS"
echo -e "${RED}✗ CRITICAL: Inline event handlers found in staged files (ZERO TOLERANCE)${NC}"
echo -e "${RED} Use event delegation with addEventListener instead${NC}"
echo -e "${RED} See: .knowledge/dss-coding-standards.json > event_handling${NC}"
FAILED=1
fi
# 2. Check for excessive inline styles
# Threshold: ≤10 per DSS coding standards (exceptions for dynamic values only)
echo ""
echo "🎨 Checking for excessive inline styles..."
INLINE_STYLE_COUNT=$(echo "$STAGED_JS_FILES" | xargs grep -n 'style="' 2>/dev/null | wc -l)
if [ "$INLINE_STYLE_COUNT" -gt 10 ]; then
echo -e "${RED}✗ Found $INLINE_STYLE_COUNT inline style attributes in staged files (threshold: ≤10)${NC}"
echo -e "${RED} Extract styles to Shadow DOM <style> blocks${NC}"
echo -e "${RED} See: .knowledge/dss-coding-standards.json > style_management${NC}"
FAILED=1
else
echo -e "${GREEN}✓ Inline styles within acceptable range ($INLINE_STYLE_COUNT/10)${NC}"
fi
# 3. Check for missing ARIA attributes on buttons
echo ""
echo "♿ Checking accessibility..."
BUTTON_ISSUES=$(echo "$STAGED_JS_FILES" | xargs grep -n '<button' 2>/dev/null | grep -v 'aria-label\|type="button"' | head -5 || true)
if [ -n "$BUTTON_ISSUES" ]; then
echo "$BUTTON_ISSUES"
echo -e "${YELLOW}⚠️ Warning: Some buttons may be missing accessibility attributes (aria-label or type).${NC}"
else
echo -e "${GREEN}✓ Button accessibility looks good${NC}"
fi
# 4. Check for console.log statements (except in designated logging files)
# Threshold: ≤10 per DSS coding standards (use logger utility instead)
echo ""
echo "🪵 Checking for debug console statements..."
DEBUG_LOGS=$(echo "$STAGED_JS_FILES" | grep -v "logger\.js" | xargs grep -n 'console\.log\|console\.warn' 2>/dev/null | wc -l)
if [ "$DEBUG_LOGS" -gt 10 ]; then
echo -e "${YELLOW}⚠️ Warning: Found $DEBUG_LOGS console.log/warn statements in staged files (threshold: ≤10)${NC}"
echo -e "${YELLOW} Replace with logger utility: logger.debug() / logger.info()${NC}"
echo -e "${YELLOW} See: admin-ui/js/utils/logger.js${NC}"
fi
# 5. Check for TODO/FIXME comments
echo ""
echo "📝 Checking for TODO/FIXME comments..."
TODO_COUNT=$(echo "$STAGED_JS_FILES" | xargs grep -n 'TODO\|FIXME' 2>/dev/null | wc -l)
if [ "$TODO_COUNT" -gt 0 ]; then
echo -e "${YELLOW} Info: Found $TODO_COUNT TODO/FIXME comments in staged files${NC}"
fi
# 6. Check JavaScript syntax (if node is available)
echo ""
echo "🔧 Checking JavaScript syntax..."
if command -v node &> /dev/null; then
SYNTAX_ERRORS=0
for file in $STAGED_JS_FILES; do
if ! node --check "$file" 2>/dev/null; then
echo -e "${RED}✗ Syntax error in: $file${NC}"
SYNTAX_ERRORS=$((SYNTAX_ERRORS + 1))
FAILED=1
fi
done
if [ "$SYNTAX_ERRORS" -eq 0 ]; then
echo -e "${GREEN}✓ All staged JavaScript files have valid syntax${NC}"
else
echo -e "${RED}✗ Found $SYNTAX_ERRORS staged files with syntax errors${NC}"
fi
else
echo -e "${YELLOW}⚠️ Node.js not found, skipping syntax check${NC}"
fi
# 7. Check for hardcoded credentials or API keys
echo ""
echo "🔐 Checking for potential secrets..."
SECRETS=$(echo "$STAGED_JS_FILES" | xargs grep -n "apiKey\|api_key\|password\|secret\|token" 2>/dev/null | grep -v "//\|/\*" | grep "=" | head -5 || true)
if [ -n "$SECRETS" ]; then
echo "$SECRETS"
echo -e "${RED}⚠️ Warning: Potential hardcoded secrets found in staged files. Review carefully!${NC}"
else
echo -e "${GREEN}✓ No obvious hardcoded secrets detected${NC}"
fi
# 8. Check for proper Shadow DOM usage in web components (only for component files)
echo ""
echo "🌓 Checking Shadow DOM usage..."
STAGED_COMPONENTS=$(echo "$STAGED_JS_FILES" | grep "admin-ui/js/components/" || true)
if [ -n "$STAGED_COMPONENTS" ]; then
COMPONENT_COUNT=$(echo "$STAGED_COMPONENTS" | grep "extends HTMLElement" | wc -l)
SHADOW_COUNT=$(echo "$STAGED_COMPONENTS" | xargs grep -l "attachShadow" 2>/dev/null | wc -l || echo "0")
echo -e "${GREEN} Staged: $COMPONENT_COUNT web components, $SHADOW_COUNT using Shadow DOM${NC}"
else
echo -e "${GREEN} No component files in staged changes${NC}"
fi
# 9. Check file sizes
echo ""
echo "📦 Checking file sizes..."
LARGE_STAGED=()
for file in $STAGED_JS_FILES; do
if [ -f "$file" ] && [ $(stat -f%z "$file" 2>/dev/null || stat -c%s "$file" 2>/dev/null) -gt 102400 ]; then
LARGE_STAGED+=("$file")
fi
done
if [ ${#LARGE_STAGED[@]} -gt 0 ]; then
echo -e "${YELLOW}⚠️ Warning: Large JavaScript files in staged changes (>100KB):${NC}"
printf '%s\n' "${LARGE_STAGED[@]}"
else
echo -e "${GREEN}✓ All staged JavaScript files are reasonably sized${NC}"
fi
# Summary
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
if [ "$FAILED" -eq 0 ]; then
echo -e "${GREEN}✅ Quality checks passed!${NC}"
exit 0
else
echo -e "${RED}❌ Quality checks failed. Please fix the errors above.${NC}"
exit 1
fi