## 1. Backend project API and ownership enforcement - [x] 1.1 Add/extend project API routes for create, list, update, delete, and default-ssh-key set operations. - [x] 1.2 Implement project service layer ownership checks using authenticated user identity. - [x] 1.3 Implement/verify cascade semantics for project deletion with repository cleanup behavior. - [x] 1.4 Add backend tests for authenticated CRUD, ownership-denied scenarios, and default-key validation. ## 2. Frontend project management flows - [x] 2.1 Add project API client methods for list/create/update/delete/default-key operations. - [x] 2.2 Implement projects page with list and empty/loading/error states. - [x] 2.3 Implement project create/edit form interactions and validation messaging. - [x] 2.4 Implement delete flow and UI refresh behavior after mutations. - [x] 2.5 Add frontend tests for protected project routes and mutation flows. ## 3. Verification and OpenSpec tracking - [x] 3.1 Run backend checks (`pytest`, `ruff check src tests`, `mypy src`) and fix findings. - [x] 3.2 Run frontend checks (`npm test`, `npm run typecheck`, `npm run lint`, `npm run build`) and fix findings. - [x] 3.3 Update this tasks file with completed checkboxes and document blockers/follow-ups. ## Blockers / Follow-ups - No blocking issues remain for this change. - Frontend test run shows non-blocking Vite deprecation warnings related to esbuild options from `vite:react-babel`; behavior is unaffected and can be handled in a later tooling cleanup change.