6 Commits
Author SHA1 Message Date
AndreyandClaude Fable 5.1 145c44a17d ✨ feat(internal-ui): несколько организаций — переключатель, разделы администратора установки, приглашения
Переключатель организаций в сайдбаре (дизайн-базлайн v2, A1) показывает все
организации человека, текущая отмечена, выбор другой пересобирает Shell по
ключу организации. Вход без организации в адресе открывает последнюю
открытую или первую по списку вместо экрана «нет доступа»; предпочтение
переехало в localStorage.

Разделы «Платформа» и «Хранилище файлов» видны только администратору
установки, relay для звонков у остальных менеджеров только на чтение;
настройки установки запрашиваются с /api/v1/instance/.

Ссылка-приглашение /join: вошедший принимает приглашение и попадает в новую
организацию, гость без учётной записи задаёт имя и пароль полями мастера
первого запуска. Ожидающие приглашения показаны в списке сотрудников
строками «Приглашён» с меню «отправить ещё раз» и «отозвать» — теми же
элементами, что строка сотрудника.

e2e: проекту internal-ui задана русская локаль браузера, моки сессии отдают
язык установки — сценарии перестали зависеть от языка машины; добавлены
сценарии переключателя, строки приглашения и регистрации гостя.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-12 14:37:52 +03:00
AndreyandClaude Opus 5 2976856760 ✅ fix(scripts): check.ps1 действительно проверяет, а не делает вид
Скрипт был зелёным всегда. `$ErrorActionPreference = "Stop"` не влияет на код
возврата нативных команд, поэтому упавший pytest проходил как успех: проверено
на живом примере — прежняя схема при команде с кодом 3 доходила до конца и
возвращала 0. Теперь каждый шаг сверяется с $LASTEXITCODE, провалившиеся
перечисляются в конце, скрипт выходит с 1.

Кроме этого:

- явные `-f compose.yaml -f compose.dev.yaml`: сервисы frontend и web-chat
  (node) существуют только в dev-оверлее, в базовом compose frontend —
  production-образ nginx, где нет npm. Голый `docker compose` три шага из
  четырёх выполнить не мог в принципе;
- добавлены CLI-тесты и e2e — раньше их не было ни в одном скрипте;
- порядок от быстрых проверок к длинным: typecheck, vitest, CLI, e2e, backend
  (~20 минут). Дешёвые ошибки всплывают за секунды;
- скрипт не останавливается на первом падении: прогоняет всё и показывает
  список провалов, иначе каждая ошибка стоила бы отдельного круга.

playwright.config.ts: `webServer` поднимал только internal-ui на :5173, а
проект web-chat-mobile ходит на :5175 — без заранее поднятого dev-стека прогон
падал. Описаны оба сервера, e2e стали самодостаточными; без этого включать их
в check.ps1 не имело смысла.

Проверка: полный прогон скрипта — 6 шагов, все зелёные, exit code 0
(typecheck ×2, vitest 76, CLI 9, e2e 8, backend 624).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-08 20:10:00 +03:00
AndreyandClaude Fable 5.1 a891947016 🧹 chore!: продукт без привязок к вендору — домены, почта, продукты, скоупы, события виджета
- нет зашитых доменов: help-домен по умолчанию localhost (задаёт установщик через
  CHATBALLS_HELP_BASE_DOMAIN), фронт определяет портал помощи пробой /api/v1/help/,
  ALLOWED_HOSTS без вендорских хостов, CI environment url — из CHATBALLS_APP_DOMAIN
- DEFAULT_FROM_EMAIL по умолчанию no-reply@localhost; JWT-аудитория support-токена
  chatballs.support; загрузчик виджета: window.ChatballsChat, события chatballs-chat-*
- «Контакты»: продукты берутся из данных организации ({code, name}), цвет —
  детерминированно по коду; зашитый список продуктов вендора убран
- npm-скоупы @chatballs/*, тема chatballsTheme/buildTheme
- тестовый bootstrap: организация demo, сотрудник staff.member@example.org,
  продукты site/app; фикстуры на example.com
- убрана мёртвая привязка Shell к e-mail сотрудника вендора

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-06 00:33:22 +03:00
AndreyandClaude Opus 4.8 e6d8923ae9 chore: remove Hub checkout app
Public checkout belongs to product backends, not Hub (ADR-HUB-0014,
ADR-HUB-0018). Delete apps/checkout and its wiring: compose service, nginx
pay.localhost route, npm workspace and dev script, playwright project,
HubApplication type, check.ps1 typecheck and README mentions.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 15:10:36 +03:00
AndreyandClaude Opus 4.8 e70893148c ✅ test(e2e): role-based navigation and permission acceptance for E03
- Playwright e2e (mocked API) for internal-ui: OWNER lands on the command
  center with the global sidebar; OPERATOR lands on sales dialogs with the
  sales sidebar and no company-level navigation; owner-only route shows the
  403 permission screen; shell renders at the 1024px minimum width
- auto-start the internal-ui dev server via Playwright webServer

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 19:15:04 +03:00
Andrey aacdd422b3 Initialize Edevs Hub repository 2026-06-17 18:14:16 +03:00