docs(memory-bank): add creative phase CP-1 tenant settings UI

Решение: /tenant-settings с вкладками BIRD/Ревизии/Дополнительно, пункт mainNav «Параметры», /settings остаётся frontend-only.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Denozordec
2026-06-12 18:57:17 +07:00
co-authored by Cursor
parent de64374c91
commit ceb6f2f34f
2 changed files with 426 additions and 18 deletions
@@ -0,0 +1,77 @@
# 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**