# Proposal ## Why `JWT_SECRET` сейчас обязателен в окружении: его нужно задавать вручную и одинаково на всех инстансах. Хранение секрета в слое метаданных с автогенерацией убирает обязательный секрет из env и даёт стабильное значение на инсталляцию. ## What Changes - Убрать обязательный `JWT_SECRET` из конфига и окружения. - Добавить таблицу `app_settings` (key/value) в оба бэкенда метаданных (PostgreSQL и SQLite) и репозиторий чтения/создания секрета. - При старте после открытия метаданных читать секрет или генерировать его (`crypto/rand`) и сохранять; использовать для `TokenManager` и как fallback при подписи URL объектов. - `URL_SECRET` остаётся необязательным env-оверрайдом. - Обновить `.env.example`, `project.md`, `README.md`. ## Capabilities ### New Capabilities - `app-secrets`: хранение секретов приложения (JWT) в слое метаданных с автогенерацией при первом использовании. ### Modified Capabilities ## Impact - `backend/internal/config` (убрать `JWTSecret` и его обязательность). - `backend/internal/app`, `backend/cmd/server` (порядок старта: метаданные → секрет → storage/app). - `backend/internal/storage` (fallback-секрет для подписи URL). - Новая settings-репозиция (`internal/settings`), миграции PostgreSQL и SQLite. - Тесты (контрактные, e2e), `.env.example`, `project.md`, `README.md`. - Не затрагивает формат данных клиента.