## Context

Project management is defined in specs but not yet fully implemented across backend and frontend. The codebase now includes auth-oauth and frontend-foundation, so this change should connect authenticated users to project CRUD workflows and enforce ownership/security rules consistently.

## Goals / Non-Goals

**Goals:**
- Provide authenticated CRUD endpoints for projects with owner-only updates/deletes.
- Expose project listing payloads that include associated repositories and default SSH key metadata.
- Add frontend project pages for listing, creating, editing, and deleting projects.
- Support setting/changing a default SSH key per project with ownership validation.
- Verify cascade behavior and authorization through tests.

**Non-Goals:**
- Advanced collaboration features (shared project ownership, invites, roles).
- Bulk project operations.
- Full analytics/activity stream implementation beyond simple listing metadata.

## Decisions

1. **Keep project logic in dedicated service layer with thin route handlers**
   - Rationale: consistent with auth service separation and easier unit testing.
   - Alternative: embed logic directly in route handlers. Rejected for maintainability.

2. **Use authenticated user identity from internal JWT for ownership checks**
   - Rationale: single trust path and no client-provided owner fields.
   - Alternative: allow owner IDs in request body. Rejected for security risk.

3. **Return normalized project DTOs with nested repository summaries**
   - Rationale: reduces frontend round-trips and supports immediate dashboard/project page rendering.
   - Alternative: fetch repositories separately per project. Rejected due to extra request overhead.

4. **Implement optimistic-friendly frontend forms with explicit server error display**
   - Rationale: better UX while preserving clear failure feedback.
   - Alternative: full page reload after each action. Rejected due to poor interaction quality.

## Risks / Trade-offs

- **[Ownership bypass bugs]** -> enforce auth checks at service boundary and test unauthorized scenarios.
- **[Cascade deletion surprises]** -> add integration tests that assert repository/association cleanup behavior.
- **[Stale frontend lists after mutation]** -> centralize refresh calls after create/update/delete.
- **[Default SSH key mismatch]** -> validate key belongs to user/project context before assignment.

## Migration Plan

1. Add/adjust backend project API routes and services.
2. Add backend tests for CRUD, ownership, default-key, and cascade behavior.
3. Implement frontend project pages and API integration.
4. Add frontend tests for protected interactions and mutation flows.
5. Run quality gates for backend and frontend.

Rollback:
- Revert project API and frontend pages; keep existing schema unchanged unless explicit migration is added.

## Open Questions

- Whether project descriptions should support markdown formatting (deferred; plain text for now).
