--- name: unsupervised-schedular project context description: WordPress lesson scheduling plugin — stack, architecture decisions, conventions type: project --- WordPress plugin for instructor/student lesson scheduling. Full scaffold created 2026-03-30. **Stack:** PHP 8.1+, WordPress 6.0+, Composer, PHPUnit 10, Brain\Monkey 2.7, Mockery, PHPStan, PHPCS/WPCS, Gitea Actions CI. **Why:** New greenfield project for unsupervised.ca. **Key decisions:** - Custom DB tables (`us_availability`, `us_lessons`) over CPTs — relational data, conflict detection, fast queries - REST API (`us-scheduler/v1`) for all front-end interactions; templates are minimal shell divs, JS (vanilla) takes over - Instructors use wp-admin login; students use front-end `[us_student_login]` shortcode calling `wp_signon()` - PSR-4 namespace `Unsupervised\Schedular\` from `src/` - **Package-by-domain architecture** (restructured 2026-03-30): `src/Availability/`, `src/Booking/`, `src/Auth/` — each domain contains its value object, repository, controller, REST endpoint, and any shortcode pages. Cross-cutting wiring (Plugin, AdminMenu, RestRegistrar, ShortcodeRegistrar, Schema) lives at `src/` root. Tests mirror the domain structure under `tests/Unit//`. **How to apply:** When adding features, create a domain package under `src//` with all related classes, mirror it in `tests/Unit//`, write a feature doc in `docs/features/`, then run `composer test`.