# Sisyphus Boulder Workflow — CTS Herd + Playwright E2E Testing **Project**: CTS Presenter App — Church Service Preparation Tool **Phase**: E2E Testing with Playwright on Laravel Herd **Status**: 7/24 tasks complete (29.2%) — Wave 1-2 Complete, Wave 3 Partial --- ## QUICK START ### For Continuing This Work 1. **Read the continuation guide first**: ```bash cat .sisyphus/CONTINUATION_GUIDE.md ``` 2. **Verify environment**: ```bash cd /Users/thorsten/AI/cts-work curl -s -o /dev/null -w "%{http_code}" http://cts-work.test/login # Should return 200 npx playwright test # Should pass 13 tests php artisan test # Should pass 174 tests ``` 3. **Continue with next tasks**: - See `CONTINUATION_GUIDE.md` for detailed instructions - See `SESSION_SUMMARY.md` for current state - See `plans/cts-herd-playwright.md` for full plan --- ## FILE STRUCTURE ``` .sisyphus/ ├── README.md # This file — start here ├── CONTINUATION_GUIDE.md # Complete guide for continuing work ├── SESSION_SUMMARY.md # Current session summary ├── boulder.json # Boulder state tracking ├── plans/ │ ├── cts-presenter-app.md # Phase 1 plan (COMPLETE) │ └── cts-herd-playwright.md # Phase 2 plan (ACTIVE — 7/24 tasks) ├── notepads/ │ ├── cts-presenter-app/ # Phase 1 learnings │ └── cts-herd-playwright/ # Phase 2 learnings (ACTIVE) │ ├── learnings.md # Patterns, conventions │ ├── decisions.md # Architectural choices │ ├── issues.md # Problems, gotchas │ └── problems.md # Unresolved issues └── evidence/ ├── task-1-herd-login-page.txt # T1 verification ├── task-3-factory-fields.txt # T3 verification ├── task-3-pest-pass.txt # T3 verification ├── task-4-build-tests.txt # T4 verification ├── task-4-testid-login.txt # T4 verification ├── task-5-config-check.txt # T5 verification ├── task-5-playwright-setup.txt # T5 verification ├── task-6-auth-tests.txt # T6 verification └── task-7-navigation-tests.txt # T7 verification ``` --- ## WORKTREE STRUCTURE ``` /Users/thorsten/AI/cts-work/ (branch: cts-presenter-app) ├── playwright.config.ts # Playwright configuration ├── tests/ │ ├── e2e/ │ │ ├── .auth/ │ │ │ └── user.json # storageState (gitignored) │ │ ├── auth.setup.ts # Auth setup for tests │ │ ├── auth.spec.ts # Auth E2E tests (5 tests) │ │ └── navigation.spec.ts # Navigation E2E tests (9 tests) │ └── Feature/ # Pest tests (174 tests) ├── resources/js/ │ ├── Pages/ # 6 Vue pages (data-testid added) │ ├── Components/ │ │ ├── Blocks/ # 4 block components (data-testid added) │ │ └── [others] # 8 other components (data-testid added) │ └── Layouts/ # 3 layouts (data-testid added) ├── routes/web.php # Routes (includes POST /dev-login) └── [other Laravel files] ``` --- ## CURRENT STATUS ### Completed (7/24 tasks) - ✅ Wave 1: Herd env, dummy login, UserFactory (3 tasks) - ✅ Wave 2: data-testid attributes, Playwright infrastructure (2 tasks) - ✅ Wave 3: Auth tests, Navigation tests (2 tasks) ### In Progress - Wave 3: 6 remaining E2E test spec files (T8-T13) ### Pending - Wave 4: 7 E2E test spec files (T14-T20) - Final Verification: 4 review tasks (F1-F4) ### Test Status - **E2E**: 13 tests passing (2 spec files) - **Pest**: 174 tests passing (26 feature files) - **Build**: Succeeds (790 modules, 1.51s) --- ## KEY DOCUMENTS ### 1. CONTINUATION_GUIDE.md (START HERE) **Purpose**: Complete guide for continuing the work **Contents**: - Quick start commands - Completed work summary - Remaining task breakdown with exact requirements - Execution patterns for each task type - 6-section prompt templates - Troubleshooting guide - Verification checklists **When to use**: Every time you continue this work ### 2. SESSION_SUMMARY.md **Purpose**: Summary of current session's work **Contents**: - Executive summary - Completed work details - Current state - Remaining work - Key patterns established - Metrics and handoff checklist **When to use**: To understand what was done in the last session ### 3. plans/cts-herd-playwright.md **Purpose**: Complete task plan (1,624 lines) **Contents**: - All 24 implementation tasks with detailed requirements - 4 final verification tasks - Acceptance criteria for each task - QA scenarios - References and patterns **When to use**: To understand exact requirements for each task ### 4. notepads/cts-herd-playwright/learnings.md **Purpose**: Accumulated knowledge from all sessions **Contents**: - Patterns that work - Conventions established - Gotchas discovered - Best practices **When to use**: Before starting any new task (to avoid known pitfalls) --- ## WORKFLOW ### For Each Task 1. **Read**: - Plan file for task requirements - Notepad for inherited wisdom - Continuation guide for execution pattern 2. **Delegate**: ```typescript task( category="quick", load_skills=["playwright"], run_in_background=false, description="Create {filename}.spec.ts", prompt=`[6-section prompt from continuation guide]` ) ``` 3. **Verify**: ```bash npx playwright test {filename}.spec.ts # All tests pass ``` 4. **Mark Complete**: ```typescript Edit("plans/cts-herd-playwright.md", [ {op: "replace", pos: "{line}#{hash}", lines: "- [x] {task}"} ]) ``` 5. **Commit**: ```bash git add tests/e2e/{filename}.spec.ts git commit -m "test(e2e): add {feature} E2E tests" ``` 6. **Update Notepad** (if learnings discovered): ```bash echo "## [DATE] Task {N}: {Name}\n{learnings}" >> notepads/cts-herd-playwright/learnings.md ``` --- ## CRITICAL PATTERNS ### Test Structure ```typescript import { test, expect } from '@playwright/test'; test('description', async ({ page }) => { await page.goto('/url'); await page.waitForLoadState('networkidle'); // CRITICAL await expect(page).toHaveURL(/pattern/); await expect(page.getByTestId('testid')).toBeVisible(); }); ``` ### CSRF Protection ```typescript const cookies = await page.context().cookies(); const xsrfToken = decodeURIComponent( cookies.find(c => c.name === 'XSRF-TOKEN')?.value || '' ); await page.request.post('/endpoint', { headers: { 'X-XSRF-TOKEN': xsrfToken } }); ``` ### data-testid Naming - `{component-kebab}-{element-description}` - Examples: `login-oauth-button`, `service-list-edit-button` ### German UI Text - Always use exact German text from Vue components - Examples: "Gottesdienste", "Bearbeiten", "Finalisieren" --- ## TROUBLESHOOTING ### Session Timeouts **Symptom**: task() times out after 10 minutes **Solution**: Check if file was created, verify tests, proceed if passing ### Test Failures **Symptom**: Element not found **Solution**: Check data-testid spelling in Vue component **Symptom**: Timeout waiting for element **Solution**: Add `page.waitForLoadState('networkidle')` **Symptom**: Redirect to login **Solution**: Re-run auth setup: `npx playwright test --project=setup` ### SQLite BUSY **Symptom**: Database locked errors **Solution**: Verify `workers: 1` in playwright.config.ts --- ## METRICS ### Progress - **Tasks**: 7/24 complete (29.2%) - **E2E Tests**: 13/~45 complete (~29%) - **Spec Files**: 2/15 complete (13.3%) ### Quality - **Test Pass Rate**: 100% (13/13 E2E + 174/174 Pest) - **Build Success**: 100% - **Commits**: 8 atomic commits (6 worktree + 2 main repo) ### Time - **Session Duration**: ~3 hours - **Avg Time per Task**: ~25 minutes - **Estimated Remaining**: ~7-8 hours (17 tasks) --- ## NEXT STEPS 1. **Read CONTINUATION_GUIDE.md** — Complete context for next session 2. **Launch Wave 3 tasks** — T8-T13 (6 tasks in parallel) 3. **Verify all tests pass** — Should have ~35-40 E2E tests after Wave 3 4. **Continue to Wave 4** — T14-T20 (7 tasks) 5. **Final Verification** — F1-F4 (4 review tasks) --- ## CONTACT **Plan**: `.sisyphus/plans/cts-herd-playwright.md` (READ-ONLY for subagents) **Guide**: `.sisyphus/CONTINUATION_GUIDE.md` (START HERE) **Notepad**: `.sisyphus/notepads/cts-herd-playwright/` (APPEND-ONLY) **Worktree**: `/Users/thorsten/AI/cts-work` (branch: `cts-presenter-app`) --- **Last Updated**: 2026-03-01 23:20 UTC **Status**: READY FOR CONTINUATION **Quality**: ✅ All tests passing, full documentation **Recommendation**: Continue with Wave 3 tasks T8-T13