* Fix hand card rotation direction Cards now fan outward correctly instead of curling inward * Update StateRenderer to require MatchScene type for type safety - Change constructor parameter from Phaser.Scene to MatchScene - Update scene property type to MatchScene - Add import for MatchScene type - Update JSDoc example to reflect type-safe constructor * Defer Board creation to StateRenderer for correct rules config - Make board property nullable (Board | null instead of Board?) - Remove Board and createBoard imports (now handled by StateRenderer) - Update setupBoard() to skip Board creation - Add setBoard() method for StateRenderer to call - Update clearBoard() to use null instead of undefined - Add JSDoc explaining why Board creation is deferred * Create Board in StateRenderer with correct layout options - Add Board and createBoard imports - Add board property to StateRenderer - Create Board in render() on first call with correct rules_config - Add debug logging for Board creation and zone creation - Update clear() to destroy Board when clearing - Board now created after we have rules_config from first state * Add fatal error handling with toast notification and auto-redirect - Add 'fatal-error' event to GameBridgeEvents type - Import and initialize useToast in GamePage - Listen for 'fatal-error' event from Phaser - Show error toast that persists until redirect - Show full-screen fatal error overlay with countdown - Auto-redirect to /play after 3 seconds - Update StateRenderer to emit 'fatal-error' when Board creation fails * Gate debug logging with DEV flag - Add DEBUG_RENDERER constant gated by import.meta.env.DEV - Update all console.log statements in StateRenderer to only log in development - Keep console.error and console.warn as they are (always show errors) - Debug logs now only appear during development, not in production * Fix code audit issues - add missing imports and improve error UX Critical fixes: - Add missing gameBridge import to StateRenderer (fixes runtime error in fatal error handler) - Add missing Board type import to MatchScene (fixes TypeScript compilation error) UX improvements: - Replace fatal error auto-redirect with manual 'Return to Menu' button - Add toast notification when resignation fails - Give users unlimited time to read fatal errors before returning Addresses issues found in frontend code audit: - errors.missing-import (StateRenderer.ts:166) - errors.missing-type-import (MatchScene.ts:84) - errors.catch-only-console (GamePage.vue:145) - architecture.missing-fatal-error-handling (GamePage.vue:261) * Add CONTRIBUTING policy and fix pre-existing lint/test errors - Add CONTRIBUTING.md with strict policy: never use --no-verify without approval - Add comprehensive testing documentation (TESTING.md, VISUAL-TEST-GUIDE.md) - Add test-prize-fix.md quick test checklist and verify-fix.sh script Lint fixes (enables pre-commit hooks): - Remove unused imports in 9 files - Fix unused variables (underscore convention) - Replace 'as any' type assertions with proper VisibleGameState types - Add missing CARD_WIDTH_MEDIUM import in layout.spec.ts - All ESLint errors now resolved (only acceptable warnings remain) Test fixes (all 1000 tests now passing): - Fix layout.spec.ts: Add missing CARD_WIDTH_MEDIUM import - Fix PlayPage.spec.ts: Update test to use actual hardcoded UUIDs - Fix useAuth.spec.ts: Mock API profile fetch in initialization tests - Fix PhaserGame.spec.ts: Add scenes export to mock and update createGame call expectations This ensures pre-commit hooks work properly going forward and prevents bypassing TypeScript/lint checks that catch errors early. * Add comprehensive test coverage improvement plan - Create PROJECT_PLAN_TEST_COVERAGE.json with 25 structured tasks - Create TEST_COVERAGE_PLAN.md with executive summary and roadmap - Plan addresses critical gaps: game engine (0%), WebSocket (27%) - 6-week roadmap to reach 85% coverage from current 63% - Target: Phase 1 (weeks 1-3) - critical game engine and network tests - Includes quick wins, production blockers, and success metrics Based on coverage analysis showing: - Strong: Composables (84%), Components (90%), Stores (88%) - Critical gaps: Phaser game engine (~5,500 untested lines) - High priority: WebSocket/multiplayer reliability See TEST_COVERAGE_PLAN.md for overview and week-by-week breakdown. * Add coverage tooling and ignore coverage directory - Add @vitest/coverage-v8 package for coverage analysis - Add coverage/ directory to .gitignore - Used during test coverage analysis for PROJECT_PLAN_TEST_COVERAGE.json
89 lines
2.6 KiB
Bash
Executable File
89 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# Quick verification script for prize zone fix
|
|
|
|
echo "🔍 Verifying Prize Zone Fix..."
|
|
echo ""
|
|
|
|
# Check we're on the right branch
|
|
BRANCH=$(git branch --show-current)
|
|
if [ "$BRANCH" != "fix/defer-board-creation-until-state" ]; then
|
|
echo "❌ Wrong branch: $BRANCH"
|
|
echo " Expected: fix/defer-board-creation-until-state"
|
|
exit 1
|
|
fi
|
|
echo "✓ On correct branch: $BRANCH"
|
|
|
|
# Check TypeScript compilation
|
|
echo ""
|
|
echo "🔧 Checking TypeScript compilation..."
|
|
cd frontend
|
|
npm run typecheck > /dev/null 2>&1
|
|
if [ $? -eq 0 ]; then
|
|
echo "✓ TypeScript compilation passed"
|
|
else
|
|
echo "❌ TypeScript compilation failed"
|
|
echo " Run 'cd frontend && npm run typecheck' for details"
|
|
exit 1
|
|
fi
|
|
|
|
# Check for required imports
|
|
echo ""
|
|
echo "📦 Checking required imports..."
|
|
|
|
if grep -q "import { gameBridge } from '../bridge'" frontend/src/game/sync/StateRenderer.ts; then
|
|
echo "✓ gameBridge import found in StateRenderer"
|
|
else
|
|
echo "❌ Missing gameBridge import in StateRenderer"
|
|
exit 1
|
|
fi
|
|
|
|
if grep -q "import type { Board } from '../objects/Board'" frontend/src/game/scenes/MatchScene.ts; then
|
|
echo "✓ Board type import found in MatchScene"
|
|
else
|
|
echo "❌ Missing Board type import in MatchScene"
|
|
exit 1
|
|
fi
|
|
|
|
# Check for fatal error handling
|
|
echo ""
|
|
echo "⚠️ Checking fatal error handling..."
|
|
|
|
if grep -q "handleFatalErrorReturn" frontend/src/pages/GamePage.vue; then
|
|
echo "✓ Fatal error handler function exists"
|
|
else
|
|
echo "❌ Missing fatal error handler function"
|
|
exit 1
|
|
fi
|
|
|
|
if grep -q "Return to Menu" frontend/src/pages/GamePage.vue; then
|
|
echo "✓ Manual return button exists"
|
|
else
|
|
echo "❌ Missing manual return button"
|
|
exit 1
|
|
fi
|
|
|
|
# Check for resign toast
|
|
echo ""
|
|
echo "📢 Checking resign failure toast..."
|
|
|
|
if grep -q "Could not confirm resignation" frontend/src/pages/GamePage.vue; then
|
|
echo "✓ Resign failure toast exists"
|
|
else
|
|
echo "❌ Missing resign failure toast"
|
|
exit 1
|
|
fi
|
|
|
|
# Summary
|
|
echo ""
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "✅ All automated checks passed!"
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo "1. Start dev servers (backend + frontend)"
|
|
echo "2. Navigate to: http://localhost:5173/game/f6f158c4-47b0-41b9-b3c2-8edc8275b70c"
|
|
echo "3. Verify NO prize rectangles appear on board"
|
|
echo "4. Check console logs show: usePrizeCards: false"
|
|
echo ""
|
|
echo "See TESTING.md for full test suite"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|