# Hotfix Validation Script for v1.1.1-rc.2 ## Quick Validation Commands Run these commands after applying the hotfix to verify it works: ### 1. Check Route Registration ```python # In Flask shell (uv run flask shell) from starpunk import create_app app = create_app() # List all admin routes for rule in app.url_map.iter_rules(): if 'admin' in rule.endpoint: print(f"{rule.endpoint:30} -> {rule.rule}") # Expected output: # admin.dashboard -> /admin/ # admin.metrics_dashboard -> /admin/metrics-dashboard # admin.metrics -> /admin/metrics # admin.health_diagnostics -> /admin/health # (plus CRUD routes) ``` ### 2. Test URL Resolution ```python # In Flask shell from flask import url_for with app.test_request_context(): print("Notes dashboard:", url_for('admin.dashboard')) print("Metrics dashboard:", url_for('admin.metrics_dashboard')) # Expected output: # Notes dashboard: /admin/ # Metrics dashboard: /admin/metrics-dashboard ``` ### 3. Simulate Production Environment (No Monitoring Module) ```bash # Temporarily rename monitoring module if it exists mv starpunk/monitoring.py starpunk/monitoring.py.bak 2>/dev/null # Start the server uv run flask run # Test the routes curl -I http://localhost:5000/admin/ # Should return 302 (redirect to auth) curl -I http://localhost:5000/admin/metrics-dashboard # Should return 302 (not 500!) # Restore monitoring module if it existed mv starpunk/monitoring.py.bak starpunk/monitoring.py 2>/dev/null ``` ### 4. Manual Browser Testing After logging in with IndieAuth: 1. Navigate to `/admin/` - Should show notes list 2. Click "Metrics" in navigation - Should load `/admin/metrics-dashboard` 3. Click "Dashboard" in navigation - Should return to `/admin/` 4. Create a new note - Should redirect to `/admin/` after creation 5. Edit a note - Should redirect to `/admin/` after saving 6. Delete a note - Should redirect to `/admin/` after deletion ### 5. Check Error Logs ```bash # Monitor Flask logs for any errors uv run flask run 2>&1 | grep -E "(ERROR|CRITICAL|ImportError|500)" # Should see NO output related to route conflicts or import errors ``` ### 6. Automated Test Suite ```bash # Run the admin route tests uv run python -m pytest tests/test_admin_routes.py -v # All tests should pass ``` ## Production Verification After deploying to production: ### 1. Health Check ```bash curl https://starpunk.thesatelliteoflove.com/health # Should return 200 OK ``` ### 2. Admin Routes (requires auth) ```bash # These should not return 500 curl -I https://starpunk.thesatelliteoflove.com/admin/ curl -I https://starpunk.thesatelliteoflove.com/admin/metrics-dashboard ``` ### 3. Monitor Error Logs ```bash # Check production logs for any 500 errors tail -f /var/log/starpunk/error.log | grep "500" # Should see no new 500 errors ``` ### 4. User Verification 1. Log in to admin panel 2. Verify both dashboards accessible 3. Perform one CRUD operation to verify redirects ## Rollback Commands If issues are discovered: ```bash # Quick rollback to previous version git checkout v1.1.1-rc.1 systemctl restart starpunk # Or if using containers docker pull starpunk:v1.1.1-rc.1 docker-compose up -d ``` ## Success Indicators ✅ No 500 errors in logs ✅ Both dashboards accessible ✅ All redirects work correctly ✅ Navigation links functional ✅ No ImportError in logs ✅ Existing functionality unchanged ## Report Template After validation, report: ``` HOTFIX VALIDATION REPORT - v1.1.1-rc.2 Date: [DATE] Environment: [Production/Staging] Route Resolution: - /admin/ : ✅ Shows notes dashboard - /admin/metrics-dashboard : ✅ Loads without error Functionality Tests: - Create Note: ✅ Redirects to /admin/ - Edit Note: ✅ Redirects to /admin/ - Delete Note: ✅ Redirects to /admin/ - Navigation: ✅ All links work Error Monitoring: - 500 Errors: None observed - Import Errors: None observed - Flash Messages: Working correctly Conclusion: Hotfix successful, ready for production ```