User Workspace
User workspace — до N редактируемых копий сценария на узел (deviceId). На тарифе free-v1
сейчас N = 3. Системные UserCases из каталога в лимит не входят.
Канон: DEVICE_BOARD_CONCEPT.md §22 ·
квоты: TARIFF_MATRIX.md.
Эпики: U10 (launcher, persist, media API) · U11 (paired hardening, LWW 409, conflict UX) · STE v1 (server tariff enforcement, #150).
Server tariff (STE v1, paired)
При ошибке квоты launcher показывает
used/max и обновляет список с media.
Переключение контекста — в модуле «Доска устройства» (дашборд), до входа в полноэкранную доску.
В шапке открытой доски нет списка «Мои сценарии» — только Сохранить, Run/Stop и Выйти из доски.
- Откройте модуль «Доска устройства» на дашборде.
- В секции «Системные UserCases» или «Мои сценарии» выберите контекст.
- Нажмите «Открыть доску».
Системный UserCase (только просмотр)
- Включите каталог (toggle «Каталог» в секции системных шаблонов).
- Выберите карточку bundled/tariff шаблона.
- Открыть доску — режим только просмотр: кнопка Сохранить недоступна, badge «Только просмотр».
- Можно прогнать сценарий (Run), если pre-run validation проходит.
Мои сценарии (редактирование)
Квота по тарифам
В paired-режиме лимит приходит из cabinet (
pair.tariff.maxUserWorkspaces); client использует fallback 3, если tariff недоступен.
Autonomous (без пары)
Список слотов и документы хранятся в IndexedDB браузера (membrana-device-board-workspaces).
После перезагрузки страницы или пересборки client данные остаются на этом устройстве.
Paired-режим (U10 + U11)
При связи с мембраной (paired) user workspace живёт наbackground-media
(GET/PUT /v1/devices/:deviceId/device-workspaces). Cabinet отдаёт только квоту и pairing — JSON сценария в cabinet не хранится.
Источник правды
С U11 paired client работает remote-first: list/CRUD идут на media; IndexedDB синхронизируется после успешных операций.
Два клиента с одной парой
- Создайте или отредактируйте workspace на client A → Сохранить.
- На client B откройте модуль «Доска устройства» или вернитесь на вкладку — список обновится (
visibilitychange/ focus). - Откройте тот же слот — документ совпадает с media.
Reinstall / пустой IndexedDB
Если локальный кэш пуст (новый профиль браузера, очистка данных), client подтягивает список workspace с media при первом list.Конфликт версий (LWW, U11 S3)
При Сохранить client отправляетexpectedUpdatedAt (последний известный updatedAt с сервера).
Если на media уже более новая версия → 409 WORKSPACE_CONFLICT.
На доске появляется предупреждение и кнопка «Загрузить с сервера» — локальные несохранённые правки не перезаписывают сервер молча.
При загрузке сценария client сравнивает local и remote по updatedAt и берёт более новую копию (LWW на read).
Полевой client (
apps/client) сейчас разрабатывается локально (yarn workspace @membrana/client dev).
Conflict UX и expectedUpdatedAt доступны в этой сборке после pull main; отдельного prod-хостинга client пока нет.Prod smoke
После деплоя media:yarn cabinet:u10-workspace:smoke (проверки U10 + STE: v2 PUT, 2-й слот, userWorkspacesQuota).
См. docs/deploy/U10_WORKSPACE_DEPLOY.md — разделы U11 и STE v1.
UserCases (каталог)
Bundled шаблоны, entitlement, сборка usercase
Editor overview
Save, export, clear branch