Implements robust testing setup with Playwright global auth, reusable test
helpers, Docker support, and CI/CD integration with Gitea Actions.
## Changes
### Playwright Setup
- Add global auth setup with storage state reuse (tests/playwright/auth.setup.ts)
- Fix auth setup to clear existing state before fresh login
- Create reusable performOAuthLogin helper (tests/playwright/helpers.ts)
- Configure dotenv loading for environment variables in playwright.config.ts
### Magnitude Configuration
- Update to use Claude Sonnet 4.5 (claude-sonnet-4-5-20250514)
- Create reusable loginFlow helper (tests/magnitude/helpers.ts)
- Fix smoke test to check login page instead of non-existent homepage
### Docker Support
- Add Dockerfile.playwright with non-root user (pwuser) for security
- Uses official Playwright Docker image (mcr.microsoft.com/playwright:v1.49.1-noble)
- Provides consistent testing environment across users and CI/CD
### CI/CD Integration
- Add Gitea Actions workflow (.gitea/workflows/magnitude.yml)
- Runs Magnitude tests on every push and PR
- Starts SurrealDB and Next.js dev server automatically
- Uploads test results as artifacts (30-day retention)
### Documentation
- Add comprehensive testing setup docs to AGENTS.md:
- Playwright Docker setup instructions
- CI/CD with Gitea Actions
- Testing framework separation (Playwright vs Magnitude)
- Required secrets for CI/CD
### Testing Best Practices
- Separate Playwright (manual + global auth) from Magnitude (automated E2E)
- Reusable helpers reduce code duplication
- Both frameworks work independently
## Testing
- ✅ Playwright auth setup test passes (5.6s)
- ✅ Magnitude smoke test passes
- ✅ OAuth flow works correctly with helper function
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Changed BLUESKY_CLIENT_ID to use http://localhost/ with redirect_uri parameter
- Updated magnitude.config.ts to use localhost:3000 for testing
- Removed public/client-metadata.json (no longer needed with localhost mode)
- Updated OAuth test to expect successful redirect to bsky.social
This leverages ATproto's special localhost client development mode which allows
local OAuth testing without requiring client metadata files.
See: https://atproto.com/specs/oauth#localhost-client-development🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Updated OAuth URLs from localhost to 127.0.0.1 (RFC 8252 requirement)
- Changed login page to use window.location.href for proper server redirects
- Added client-metadata.json for ATproto OAuth compliance
- Improved Step 2 theme test to check overall theme instead of specific details
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Initialize Next.js 16 (App Router) project with all core dependencies:
- Next.js, React 19, TypeScript configuration
- Mantine UI components (@mantine/core, @mantine/hooks)
- ATproto SDK for Bluesky integration
- SurrealDB client (updated to latest non-deprecated version)
- Vercel AI SDK with Google AI provider
- Deepgram SDK for voice-to-text
- React Three Fiber for 3D visualization
- UMAP.js for dimensionality reduction
- Magnitude test framework for E2E testing
- Playwright for browser automation
Created basic app structure with homepage displaying "Ponderants" text.
Configured magnitude.config.ts for testing framework.
Added .example.env with all required environment variables.
Test: Smoke test verifies app boots and renders homepage.
Status: ✓ Test passed (8.4s)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>