| 2026-10-05 |
Мобильная адаптация: перенос строк и модалка правил на узких экранах
...
- Правило (форма в модалке): min-width 80vw шире тела модалки на телефоне —
горизонтальный скролл; пары полей и строка каналов складываются в столбик
на <=479px.
- Лог доставок: фильтры в столбик на <=767px (селекты кита width:100%, wrap
не подходит), хак выравнивания кнопки обновления на мобиле отключён.
- Детальные экраны (источник/тип цели/правило): длинные значения в dl
переносятся (overflow-wrap), padding панелей ужат на <=479px.
- MCP-ключи: поле выпуска обтекает кнопку, панели ужаты на телефоне.
- Настройки: строки push/сохранения переносятся, имена устройств
не распирают ряд.
Каркас, таблицы, тултипы и page-header уже адаптивны в ките — не трогали.
Eugene Sukhodolskiy
committed
22 hours ago
|
| 2026-10-04 |

Синхронизация с gnexus-handbook: healthz, /mcp-protocol/, блокировка, i18n
...
Часть A — точечные несоответствия:
- GET /healthz (alias к /api/healthz) — требование хендбука 10-platform/health.
Часть C — MCP второго маршрута и блокировка:
- /mcp-protocol/ вторым маршрутом (конвенция 10-platform/mcp.md, слэш значим
для реверс-прокси); FastMCP-саб-аппу скармливается канонический /mcp.
/mcp остаётся историческим alias'ом (docs/07).
- Вебхуки gnexus-auth user.blocked/deleted/archived и user.unblocked/restored
ставят/снимают флаг в новой таблице user_prefs (миграция 0009); resolve_
personal_token гонит заблокированных и отвечает тем же 401, что и при
неверном токене. Статический MCP_TOKEN не затрагивается. SSO-логаут
токены не трогает (решение владельца).
Часть B — i18n по конвенции 10-platform/i18n.md (ru база + en + uk):
- frontend/src/i18n/ — модуль по паттерну gnexus-creds (t() c интерполяцией
и славскими плюрализациями, fallback en) + словари-сообщения (386 slug'ов);
все 15 вьюх и App.vue переведены на t(), module-консты с текстами — в
computed (грабли i18n.md); ui.js fmtTime — на Intl.DateTimeFormat;
push.js/local строки — в словарь.
- Язык: override в user_prefs.locale, эффективный = override → locale аккаунта
(profile.locale, нормализация до 2-буквенного префикса) → en; GET /me
возвращает locale/locale_effective, PATCH /me принимает en|uk|ru|auto.
Выбор языка — в Настройках (всем ролям), опции родными именами.
- Серверная локализация: Accept-Language от SPA; app/i18n_server.py —
каталог точных строк + regex-паттерны для параметризованных detail
(exception-handler StarletteHTTPException в main.py); labels/help реестра
настроек локализуются на лету.
- apiFetch: шлёт Accept-Language; 422 detail (список) собирается в строку.
Хендбук (отдельный репо): notifications.md — конвенция интеграции сервисов
(источник/ключ/конверт v1/client-libs/webhook-цель), mcp.md и auth.md —
референс-варианты Synapse, чеклист нового сервиса ссылается на notifications.md.
Eugene Sukhodolskiy
committed
1 day ago
|
| 2026-10-03 |

feat: многопользовательский режим — личный лог по каналу user
...
- Конвенция payload.user_id (sub gnexus-auth): контракт v1 цел, получателей
в конверте нет — дописка в docs/05-ingestion-api.md.
- Канал user в CHANNELS: правило с действием user направляет событие в личный
лог пользователя; без payload.user_id — skipped-delivery с причиной (аудит).
- deliveries.recipient_user_id + ix_deliveries_recipient; миграция 0004
пересоздаёт ck_channel на всех трёх таблицах (deliveries, routing_rule_actions,
channel_targets).
- Routing: _throttled по recipient для user-канала; s2s без цели — прежний
ретрай-цикл.
- Правила: действие user валидно без цели, user + target_id — 422; TargetIn
по-прежнему отвергает user.
- GET /api/v1/me (любой аутентифицированный) и GET /api/v1/me/events (личный
лог строго по своему sub, дедуп по событию).
- OAuth-колбэк: токен выдаётся любому аутентифицированному, роль решает только
раздел; adмин-API остаётся под 403.
- SPA: роль-гейт в router (user -> /my-events, прямой заход в админ-маршруты
редиректит), нав от роли, MyEventsView («Мои события»), getSession-кэш.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
2 days ago
|
Редактирование правил и шаблон шапки страниц деталей
...
- RuleForm — общая форма правила (создание в списке и правка в карточке),
с пояснениями к весу, шумодаву, условиям и действиям.
- Правило редактируется на своей странице: дропдаун «Действия» →
«Редактировать», форма предзаполняется, PATCH атомарно.
- Единый шаблон шапки на всех страницах деталей: ссылка «назад» слева
над шапкой, переключатель с текстом («Включено»/«Включена»), правка и
удаление — в дропдауне, без кнопок у переключателя.
- Выравнивание иконки в .channel-hint / .form-note / .panel-note
(flex + align-items:center), чтобы не уезжала по базовой линии.
- Пояснения на страницах цели/правила: что такое config, что делают
условия и действия, сколько живёт шаблон.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
2 days ago
|
Админка по правкам владельца: детали, тултипы, читаемость
...
- Навигация: иконки ph-pulse/ph-shapes не было в шрифте Phosphor
из кита -> activity/squares-four; пункт топбара подписан префиксно
(детали не теряют текущий раздел).
- Удаления в таблицах — btn-icon вместо полнокровных кнопок.
- Источники: таблица только slug/название/создан; ключи, типы и
описание — на странице источника, токен показывается один раз.
- Цели: страница цели, config как код с подсветкой (CodeBlock).
- Правила: страница правила — условия по одному ключу с подписями
и подсветкой, действия целиком, шаблон; «W» -> «Вес» и тултипы
кита во всех спорных местах (вес, шумодав, условия, статусы).
- Время везде HH:MM:SS, D месяца (год, если не текущий).
- Доставки: фильтры вынесены из шапки, с подписями Статус/Канал.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
2 days ago
|