# Service Catalog UX Rules

Актуализировано: 2026-05-12.

Этот документ фиксирует обязательное правило Launcher-витрины NODE.DC.

## Главное правило

Все authenticated users видят карточки всех сервисов, добавленных в каталог Launcher, независимо от текущего app access.

Видимость карточки сервиса не означает право запуска сервиса.

## Зачем это нужно

Launcher — это не только access gate, но и витрина платформы. Пользователь должен видеть, какие приложения существуют в NODE.DC, даже если доступ к конкретному приложению ещё не выдан.

Это нужно для:

- демонстрации состава платформы;
- ручного запроса доступа;
- будущих тарифов и paid access;
- понимания, какие модули доступны в экосистеме.

## Как должен работать UI

Для сервиса без доступа:

- карточка сервиса остаётся видимой в нижней/сервисной панели;
- описание, медиа и карточка доступны для чтения;
- статус/chip показывает отсутствие доступа;
- кнопка открытия сервиса disabled или ведёт в controlled request/access flow;
- прямой запуск через `/api/services/:serviceSlug/launch` обязан возвращать deny.

Для сервиса с доступом:

- карточка сервиса видима;
- кнопка открытия активна;
- launch идёт только через Launcher BFF, а не прямым trust из UI.

## Realtime правило

Изменение доступа должно обновлять состояние карточки без hard refresh:

- выдали доступ — кнопка открытия становится активной;
- сняли доступ — карточка остаётся видимой, но кнопка открытия выключается;
- direct launch после снятия доступа остаётся запрещённым server-side.

Нельзя чинить безопасность через скрытие карточек. Безопасность обеспечивается server-side launch deny, Tasker middleware и internal access enforcement.

## Что запрещено

- Фильтровать `/api/apps` только до доступных пользователю приложений, если это ломает витрину.
- Убирать карточку сервиса из UI только потому, что у пользователя нет app access.
- Считать скрытие карточки security control.
- Ломать realtime-переключение кнопки `Открыть` при approve/revoke доступа.

