- New router: /projects/{project_id}/proposals/{proposal_id}/essentials
- GET (list) - list all essentials under a proposal
- POST (create) - create essential with auto-generated EssentialCode
- GET /{id} - get single essential by id or essential_code
- PATCH /{id} - update essential (title, type, description)
- DELETE /{id} - delete essential
- All mutations restricted to open proposals only
- Permission: creator, project owner, or global admin
- Registered essentials router in main.py
- Updated GET /proposals/{id} to return ProposalDetailResponse with
embedded essentials list
- Activity logging on all CRUD operations