# Creative: Tenant Settings UI (CP-1) 📌 **CREATIVE PHASE START: Tenant Settings Module** ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ## 1️⃣ PROBLEM **Description:** Tenant-настройки (`global_settings`, `/v1/settings`) разбросаны: вкладка «Система» в Operations и форма BIRD на `/network`. `/settings` зарезервирован под frontend (токен, тема). Нужен отдельный модуль без смешения с browser settings. **Requirements:** - Один route для всех tenant KV (BIRD, revision retention, custom) - Роли: viewer — read; operator — PATCH - Переиспользовать существующие схемы (`bird-settings.schema`, `revision-settings.schema`, `settings-api.ts`) - Убрать дубли из Operations и Network **Constraints:** - Контракт API не менять на UI-фазе - shadcn-svelte, Svelte 5 runes, superforms - WEB-16: ConfirmDialog для удаления custom keys ## 2️⃣ OPTIONS | Option | Описание | |--------|----------| | **A** | Одна страница `/tenant-settings` с Tabs: BIRD / Ревизии / Дополнительно | | **B** | Три отдельных route: `/tenant-settings/bird`, `/revision`, `/extra` | | **C** | Accordion на одной длинной странице без tabs | | **D** | Оставить BIRD на Network, перенести только revision+KV | ## 3️⃣ ANALYSIS | Criterion | A Tabs | B Multi-route | C Accordion | D Partial | |-----------|--------|---------------|-------------|-----------| | Discoverability | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐⭐ | | Соответствие плану | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐ | | Меньше дублирования | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐ | | Сложность реализации | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | | Консистентность с Monitoring/Ops tabs | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐ | ⭐⭐ | **Key insights:** - Monitoring уже использует `Tabs` (`system` / `postgres`) — паттерн знаком оператору. - BIRD и revision логически связаны с pipeline/bundles — держать вместе усиливает «единый центр tenant config». - Отдельные routes (B) дают deep links, но избыточны для ~10 полей. ## 4️⃣ DECISION **Selected: Option A** — `/tenant-settings` с тремя вкладками. **Navigation:** - **mainNav** (не bottom): новый пункт **`Параметры`** → `/tenant-settings`, icon `SlidersHorizontal` - **bottomNav** `/settings` — без изменений семантики («Настройки интерфейса») - **Network:** Card «BIRD (кратко)» + кнопка «Изменить параметры» → `/tenant-settings?tab=bird` - **Operations:** удалить tab `system`; в quick actions / empty state — ссылка на `/tenant-settings` **Tab structure:** | Tab value | Label | Компонент | Сохранение | |-----------|-------|-----------|------------| | `bird` | BIRD | `TenantBirdSettingsCard` (из `BirdSettingsForm`) | PATCH known bird_* | | `revision` | Ревизии | `TenantRevisionSettingsCard` | PATCH `revision_retention_minutes` | | `additional` | Дополнительно | `TenantAdditionalSettingsCard` | PATCH custom KV, operator | **URL:** `?tab=bird|revision|additional` (как Operations `?tab=jobs`). **Rationale:** минимальный diff, один mental model «параметры tenant», переиспользование tabs-паттерна Monitoring. ## 5️⃣ IMPLEMENTATION NOTES - `web/src/routes/tenant-settings/+page.svelte` — PageHeader + Tabs - Вынести карточки в `web/src/lib/components/tenant-settings/` - Общий `loadSettings()` / `patchSettings()` из `settings-api.ts` - PageHeader description: «Параметры control plane для текущего tenant (API /v1/settings)» - Не показывать на этой странице token/theme - После миграции: удалить `OperationsSystemSettingsTab`, упростить `network/+page.svelte` ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📌 **CREATIVE PHASE END: Tenant Settings UI**