Расширения¶
Магазин расширений (Администрирование → Расширения) устанавливает подписанные поставщиком расширения, которые добавляют возможности для конкретного заказчика — дополнительное содержимое метамодели, интеграции, фоновые задачи и даже новые страницы — без изменения ядра Turbo EA (принцип «clean core»).
Расширения устанавливаются двумя способами: в один щелчок из встроенного Магазина (если у экземпляра есть доступ в Интернет) или путём прямой загрузки файлов — расширение представляет собой подписанный пакет .teax, а лицензия — подписанный текстовый файл; оба обычно отправляются по электронной почте. Файловый способ не требует ни учётной записи магазина, ни исходящих соединений, поэтому он одинаково работает и в изолированных (air-gapped) средах.
Страница содержит две вкладки: Магазин — просмотр каталога расширений поставщика с установкой в один щелчок, Установленные — управление лицензиями и установка из файлов.
Расширения создаются и подписываются Turbo EA — их нельзя создать самостоятельно, и они не открыты для сторонних разработчиков. Если вам нужна возможность, адаптированная под вашу организацию, мы можем создать и лицензировать её для вас. См. консалтинг Turbo EA.
Руководства по каждому расширению¶
У каждого расширения, опубликованного в магазине, есть собственное руководство: что оно делает, как его настроить и как пользоваться им изо дня в день. См. Расширения.
Как устроено доверие¶
Экземпляр защищают две независимые проверки:
- Происхождение (подпись). Каждый пакет несёт подпись Ed25519 ключом поставщика. Turbo EA проверяет её при загрузке и заново при каждом запуске бэкенда. Неподписанные, изменённые или сторонние пакеты отклоняются — установленное расширение гарантированно совпадает с тем, что собрал поставщик.
- Активация (лицензия). Подписанный файл лицензии перечисляет ваши права — по одному на расширение, каждое со своим сроком действия. Установленное расширение работает только при наличии действующего права. Лицензии привязаны к идентификатору вашего экземпляра — лицензия, выданная для другого экземпляра, отклоняется.
Бесплатные расширения¶
Некоторые расширения бесплатны и вообще не требуют лицензии. Они устанавливаются и работают сразу — нет шага покупки и нет файла лицензии, который нужно вставлять. Бесплатные расширения помечены значком Бесплатно на вкладках «Магазин» и «Установленные», а действия Купить и Продлить для них скрыты. Проверка подписи по-прежнему применяется точно так же, как для платных расширений (бесплатное расширение тоже подписано поставщиком), поэтому происхождение гарантировано в любом случае. Поскольку им не нужно право доступа, бесплатные расширения никогда не истекают и не входят в льготный период.
Идентификатор вашего экземпляра¶
Каждая установка один раз генерирует уникальный идентификатор экземпляра (TEA-XXXX-XXXX-XXXX), отображаемый вверху страницы Администрирование → Расширения с кнопкой копирования. Это ваша лицензионная идентичность: указывайте его при покупке (встроенный Магазин отправляет его автоматически; оформление заказа в онлайн-магазине запрашивает его), чтобы каждое расширение, купленное для этого экземпляра — любым администратором, с любого адреса почты — попадало в одну общую лицензию. Он лишь идентифицирует ваш экземпляр; это никогда не учётные данные, поэтому его можно спокойно сообщать поставщику.

Идентификатор переносится вместе с переносом рабочего пространства, поэтому переезд на новый сервер сохраняет лицензию действующей. После полной переустановки экземпляр получает новый идентификатор — попросите поставщика перевыпустить лицензию для него (быстрый «re-key» с его стороны).
Вкладка «Магазин»¶
Вкладка Магазин работает без какой-либо настройки и показывает опубликованные поставщиком расширения сеткой компактных плиток — логотип, название, состояние лицензии и цена. Щёлкните плитку, чтобы открыть большое окно с подробностями: с одной стороны — галерея снимков экрана (листайте её стрелками или миниатюрами, щёлкните снимок, чтобы открыть его в полном размере), рядом — полное описание, теги категорий, сведения об источнике и лицензии и действия. Если магазин публикует заметки о выпуске расширения, два последних выпуска показываются в разделе Что нового со ссылкой Полный список изменений на страницу расширения в магазине. Расширения без изображения получают сгенерированную плитку с инициалами.

- Купить открывает страницу оплаты в новой вкладке браузера. Как только платёж подтверждён, лицензия применяется автоматически (копия также приходит по почте).
- Некоторые предложения продаются по двум тарифам: помесячно и на год, причём годовой обычно дешевле. В окне подробностей тогда появляются кнопки Купить помесячно и Купить на год вместо одной; обе ведут к одной и той же оплате.
- Установить (или Обновить, когда опубликована более новая версия) сначала проверяет лицензию — если расширение ещё не лицензировано, диалог предложит купить или вставить лицензию, после чего продолжит автоматически — и скачивает пакет через ту же проверку подписи и тот же предварительный просмотр, что и ручная загрузка. Расширения с демо показывают ссылку Посмотреть в действии. Надпись Обновить появляется только у уже установленного расширения; в остальных случаях это обычная Установить, которая загружает опубликованную версию.
Каталог разбит на пять разделов — Стратегия, планирование и трансформация, Управление и автоматизация, Интеграции, Регулирование и Услуги — каждый со своим заголовком, чтобы с первого взгляда было ясно, что за предложение перед вами; всё, что каталог не классифицировал, попадает в конец под заголовок Прочее. Внутри разделов теги-«пилюли» (бесплатно или коммерчески, плюс темы вроде интеграции) работают как фильтр: над списком появляется панель фильтров, клик по пилюлям сужает его (несколько пилюль комбинируются), разделы без совпадений исчезают, а Все сбрасывает вид.
Услуга — предложение, которое не нужно устанавливать, например подписка на поддержку — продаётся и лицензируется как расширение, но не содержит пакета. Её плитка и окно сведений предлагают только Купить, не показывают версию и прямо об этом сообщают; после подтверждения покупки на плитке появляется тот же чип лицензии (Продлевается …), а письмо с подтверждением объясняет, как пользоваться купленным.
Вкладка «Магазин» доступна только для чтения и анонимна: без учётной записи, без токена, и никакие сведения о вашем экземпляре никуда не передаются — читается только публичный каталог поставщика. Изолированным экземплярам не нужна настройка — вкладка просто показывает дружелюбную подсказку — и используют файловый процесс ниже; сайт магазина поставщика предлагает те же покупки и загрузки из любого браузера с доступом в Интернет. Если что-то между вашим экземпляром и магазином блокирует запрос — прокси, брандмауэр или защита от ботов перед магазином, — вкладка сообщит об этом и укажет полученный HTTP-статус, так что заблокированный экземпляр никогда не будет принят за изолированный.
Экземпляр также проверяет каталог раз в день и сообщает об изменениях, чтобы новое расширение — или исправление безопасности для уже используемого — не ждало, пока кто-нибудь случайно откроет эту страницу. Администраторы (все, чья роль предоставляет admin.manage_extensions) получают уведомление в колокольчике, когда в магазине публикуется новое расширение, и ещё одно — когда у установленного расширения появляется более новая версия. О каждом изменении сообщается один раз, а насыщенный день релизов приходит как одно уведомление на тип, а не по одному на расширение. Ничего не скачивается и не устанавливается — уведомление просто приводит вас сюда. Ежедневную проверку можно полностью отключить в разделе Администрирование → Настройки → Уведомления об обновлениях.
Вкладка также показывает, когда магазин читался в последний раз, и содержит кнопку Проверить сейчас, которая запускает проверку немедленно и сообщает результат, — так можно убедиться, что ежедневная проверка работает, не дожидаясь суток. Если проверка не удалась, причина отображается здесь, а не остаётся незамеченной.
Пробные периоды¶
Некоторые платные расширения предлагают бесплатный 30-дневный пробный период — ищите кнопку Начать 30-дневный пробный период на вкладке «Магазин» (или соответствующую опцию на сайте магазина). Запуск пробного периода работает как покупка без оплаты: банковская карта не нужна, лицензия обновляется автоматически (для изолированных установок копия также приходит по электронной почте), и расширение работает с полной функциональностью в течение 30 дней.
- Каждый экземпляр Turbo EA может опробовать конкретное расширение только один раз.
- Пробный период заканчивается точно в дату окончания — льготного периода нет. После этого расширение перестаёт работать, пока вы не оформите подписку; ваши данные никогда не удаляются, и всё возвращается, как только применяется лицензия по подписке.
- Вкладка «Установленные» отображает пробные права как Пробный период до ….
- Пробные периоды завершаются сами — отменять нечего, и оплата никогда не списывается.
Установка расширения¶
- Если ещё не сделали, сначала примените лицензию (см. ниже).
- Откройте Админ → Расширения, нажмите Установить из файла… над каталогом на вкладке «Магазин» или над списком на вкладке «Установленные» (а также в уведомлении, которое появляется, когда магазин недоступен) и загрузите полученный файл
.teax. - Turbo EA проверит подпись и откроет диалог установки с предпросмотром: для расширений с содержимым это пробный прогон всех типов карточек, групп тегов, карточек и связей, которые расширение создаст или обновит — пока ничего не записывается.
- Просмотрите предпросмотр — он прокручивается внутри диалога — и нажмите Установить расширение в нижней части диалога: кнопка остаётся на месте, какой бы длинной ни была таблица.
- Если расширение содержит код бэкенда, баннер попросит перезапустить контейнер бэкенда (
docker compose restart backend). Расширения с содержимым и интерфейсом активируются сразу — пользователи увидят новый интерфейс при следующей загрузке страницы.
Повторная загрузка того же пакета безопасна — предпросмотр покажет всё как «пропущено», и применение ничего не изменит.
Обновление расширения¶
Когда магазин публикует более новую версию установленного расширения, на вкладке «Установленные» рядом с версией появляется значок Обновить до X (а кнопка на вкладке «Магазин» превращается в Обновить). Клик проверяет подпись и загружает пакет, а затем показывает вам, что входит в выпуск — собственные примечания к выпуску расширения со ссылкой Полный список изменений на остальные — с кнопками Установить и Отмена. Ничего не записывается, пока вы не нажмёте Установить; Отмена удаляет загрузку. При первой установке сравнивать не с чем, поэтому она по-прежнему выполняется в один клик. Во время установки или обновления кнопка (или значок) показывает индикатор и остаётся заблокированной до завершения, а диалог установки показывает ход выполнения независимо от того, откуда вы его запустили. Действуют две меры защиты:
- Обновление расширения, которое вы сознательно отключили, оставляет его отключённым — новая версия попадает на диск, но её содержимое остаётся скрытым и ничего не выполняется, пока вы не включите расширение снова.
- Установка пакета старее установленной версии сначала требует явного подтверждения: более старая версия может не понимать данные, записанные более новой. В любом случае ничего не удаляется.
После установки обновления все, кто может пользоваться расширением, получают в колокольчике уведомление Расширение обновлено и могут открыть из него те же примечания к выпуску. Оно включено по умолчанию и никогда не отправляется по электронной почте; каждый может отключить его в своих настройках уведомлений.
Лицензии и продление¶
Примените лицензию через Ввести лицензию… на вкладке «Установленные» (вставьте текст или загрузите файл) — кнопка также появляется в каждой строке расширения, которому нужна лицензия. Затем страница показывает владельца лицензии и метку для каждого права с датой окончания.
Ваш экземпляр хранит только одну лицензию — применение новой заменяет предыдущую. Лицензии, выпущенные через Store, всегда содержат все покупки для вашего экземпляра, поэтому замена безопасна. Если у вас есть и вручную выпущенные лицензии, попросите поставщика одну объединённую лицензию вместо применения отдельных файлов для каждого расширения; если применяемая лицензия удалит права, которые текущая ещё покрывает, Turbo EA перечислит их и сначала запросит подтверждение (данные в любом случае не удаляются).
Когда срок права истекает, начинается льготный период (по умолчанию 30 дней): всё продолжает работать, а администраторы видят предупреждение. После льготного периода расширение мягко отключается — его страницы исчезают, API отклоняет запросы, фоновые задачи приостанавливаются. Данные никогда не удаляются. Применение обновлённого файла лицензии мгновенно восстанавливает всё без перезапуска.
Лицензии, купленные через Магазин, продлеваются сами на подключённых экземплярах: после каждой успешной оплаты экземпляр автоматически получает продлённую лицензию — ничего вставлять не нужно. В изолированной среде продление сводится к следующему: вставить обновлённый файл лицензии из письма о продлении (или запросить его у поставщика) — и всё.
Статус автопродления и отмена подписки¶
Каждый чип права указывает, что произойдёт в его дату: Продлевается {дата} для активной подписки или Истекает {дата} — не будет продлена после отмены. Эти сведения берутся из самой подписанной лицензии, поэтому они точны и на изолированных экземплярах — файл лицензии, отправляемый по почте после любого изменения подписки, несёт актуальный статус; вставьте его, и чип обновится.
Чтобы увидеть дату продления, отменить или восстановить автопродление, сменить способ оплаты или скачать счета, используйте кнопку Управление подпиской рядом с именем лицензиата (отображается для лицензий, купленных в Магазине). Она открывает ваш биллинг-портал в новой вкладке — учётная запись не нужна. На изолированном экземпляре кнопка не может связаться с магазином; используйте вместо неё ссылку Управление подпиской из любого письма с лицензией (интернет нужен только вашему браузеру, а не экземпляру Turbo EA).
Отмена никогда не отключает ничего сразу: расширение продолжает работать до конца оплаченного периода, затем действует обычный порядок льготного периода + мягкого отключения. Ваши данные никогда не удаляются, а повторная подписка всё восстанавливает.
Включение, отключение и удаление¶
- Переключатель Включено мягко отключает расширение сразу (без перезапуска) и может быть возвращён в любой момент. Для пакетов содержимого при этом их типы карточек скрываются из метамодели — карточки остаются на месте.
- Удалить убирает файлы расширения и скрывает его типы карточек из метамодели. Карточки и собственные таблицы расширения намеренно сохраняются, и при переустановке всё — включая типы — появляется снова.
Права доступа¶
Вся страница и её API-маршруты защищены отдельным правом admin.manage_extensions (выдано встроенной роли администратора). Расширения могут определять собственные ключи прав (ext.<имя>.…), которые появляются в Администрирование → Пользователи и роли после загрузки расширения.
Расширенные возможности полей¶
Некоторые расширения открывают продвинутые способы описания данных, которых нет в базовой версии:
- Текст справки поля — сворачиваемая подсказка под полем, отображаемая при вводе данных, чтобы форма поясняла себя сама.
- Пользовательские типы полей — новые типы помимо встроенного набора (например, настраиваемая оценка от 1 до 5 или от 0 до 10).
Эти параметры появляются в редакторе полей метамодели только пока установлено и лицензировано расширение, которое их предоставляет. Если такое расширение позже отключить или срок его лицензии истечёт, уже введённые значения продолжат отображаться как обычный текст только для чтения — ничего не очищается и не удаляется — а параметры редактирования просто исчезают, пока расширение снова не станет активным.
Гранты доступа к данным¶
Большинство расширений работают только со своими данными. Расширение, интегрирующееся с данными ядра — например, коннектор, синхронизирующий задачи (todo) с внешним трекером задач, таким как Jira или MS Planner (#921) — должно объявить гранты в своём подписанном манифесте:
core.todos.read/core.todos.write— чтение или изменение задач через SDK расширений. Право записи включает чтение. У системных задач (например, запросов на подпись) расширение синхронизации может лишь установить внешнюю ссылку, отображаемую как чип — оно никогда не может завершать, редактировать, переназначать или удалять их, а задачи другого расширения остаются недоступными.core.events.todo— получение событий изменения задач, чтобы коннектор реагировал сразу, а не в следующем цикле опроса.core.users.read— просмотр пользователей (только имя, e-mail и признак активности), чтобы коннектор мог сопоставить исполнителей с учётными записями во внешнем инструменте. Данные о ролях, входе и настройках не раскрываются, и расширения никогда не могут изменять пользователей.core.cards.read— чтение карточек, связей и метамодели, например чтобы коннектор мог сопоставить ваши приложения с записями во внешней системе. Архивированные карточки остаются скрытыми.core.cards.write— создание, изменение и архивирование карточек и добавление связей — ровно с той же валидацией, что и в редакторе приложения. Обновления объединяют значения полей, а не заменяют их целиком, поэтому расширение никогда не может стереть данные, которыми не управляет; безвозвратного удаления нет — архивирование с окном восстановления остаётся единственным доступным расширению способом удаления.core.events.card— получение событий изменения карточек и связей, чтобы коннектор реагировал на изменения инвентаря сразу, а не на следующем цикле опроса.core.notifications.channel— доставлять включённые вами уведомления по собственному каналу расширения, например сообщением в чат. Расширение получает заголовок, текст и ссылку уведомления, а также ваш идентификатор пользователя; ваш адрес электронной почты оно получает, только если дополнительно объявляетcore.users.read, и никогда не получает тип, который вы для него не включили. Уведомления, остающиеся только в колокольчике, никогда не отправляются в канал расширения. Каждый канал расширения изначально выключен для всех типов уведомлений, включая административные извещения (новое расширение, обновление расширения, обновление Turbo EA): откройте настройки уведомлений через колокольчик и включите столбец канала для нужных типов. Извещение, уже показанное в колокольчике до включения канала, повторно не отправляется.core.adr.read— читать архитектурные решения (номер, название, статус, связанные карточки и собственные данные расширения на них).core.adr.write— создать архитектурное решение в виде черновика и связать его с активными карточками, например расширение, фиксирующее результат анализа как решение для рассмотрения. Запись включает чтение. Расширение никогда не может подписать решение, отправить его на рассмотрение или изменить его статус — это остаётся за вашими пользователями — и может хранить данные в записи только под своими ключамиext.<key>.*. Каждое создание фиксируется в Админ → Журнал аудита как пакетext:<key>.core.risks.read— читать реестр рисков (номер, название, категория, уровень, статус, владелец, связанные карточки).core.risks.write— зарегистрировать риск и связать его с карточками, например правило, создающее риск, когда приложение без владельца превышает порог затрат. Запись включает чтение. Такой риск показывает в реестре источник Расширение, получает номер из той же последовательности, что и остальные, а его владелец получает обычные задачу и уведомление. Позже расширение может изменить название, описание, владельца и целевую дату рисков, которые оно создало — никогда чужих и никогда статус риска: продвижение, принятие и закрытие остаются за вашими пользователями.core.notifications.send— отправить уведомление указанным людям, например «настроенное вами правило только что сработало». Оно приходит как тип Уведомление расширения или как тип, который расширение объявляет само и который получает собственную строку в настройках уведомлений каждого пользователя (в приложении включено, по почте по умолчанию выключено) — в обоих случаях каждый сам решает, попадёт ли оно в колокольчик, почту или канал расширения, и может его отключить. Некоторые такие уведомления по щелчку открывают подробности в приложении, предлагая связанную карточку и страницу расширения только тем, кто вправе их открыть. Ссылка в таком уведомлении может вести только внутрь Turbo EA.core.stakeholders.write— назначать или снимать роли заинтересованных сторон на карточках, используя ровно те роли, которые определяет тип карточки. Это отдельный отcore.cards.writeгрант, поскольку роль заинтересованной стороны даёт человеку права на карточку.core.surveys.read— читать название, статус и долю ответов опроса.core.surveys.write— отправить опрос по поддержанию данных заинтересованным сторонам набора карточек, например запланированное правило, которое просит владельцев каждого критически важного приложения ниже целевого качества данных дополнить свои карточки — один запрос на человека вместо задачи на каждую карточку. Запись включает чтение. Опрос появляется в Админ → Опросы без автора, его поля — ровно те, что определяет тип карточки, и каждый получает обычное уведомление об опросе. Расширение никогда не может закрыть опрос или применить его ответы — это остаётся за вами — а откат запуска, который его отправил (Админ → Журнал аудита), закрывает опрос и отзывает запросы, на которые никто ещё не ответил.
Гранты входят в подписанный поставщиком пакет: они фиксируются при сборке и видны до установки. Они действуют только пока расширение установлено, включено и лицензировано — отключение или истечение лицензии немедленно отзывает доступ, без перезапуска. Каждое изменение, сделанное расширением, записывается в Админ → Журнал аудита с источником Расширение, а задача, зеркалируемая из внешнего трекера, показывает чип со ссылкой на внешний элемент.
Каждое изменение, сделанное расширением, отображается в Админ → Журнал аудита как пакет ext:<key> с пополевыми различиями и может быть откатано там, как любой другой пакет. Последнее слово остаётся за операторами: переменная окружения EXTENSION_WRITES_ENABLED=false мгновенно приостанавливает все записи расширений (чтение продолжает работать, перезапуск не нужен), а EXTENSION_MAX_WRITES_PER_BATCH / EXTENSION_MAX_BATCHES_PER_MINUTE ограничивают, сколько одно расширение может изменить за пакет и за минуту.
Где появляются страницы расширений¶
Страницы расширений появляются в навигации после того, как расширение установлено и лицензировано — обычно как отдельный пункт меню верхнего уровня, хотя некоторые размещаются внутри системного меню рядом со встроенными пунктами: отчёты — в меню Отчёты, а страницы управления, рисков и соответствия — в меню GRC. Сгруппированная страница возвращается к пункту верхнего уровня, если её меню недоступно — модуль выключен или у вас нет соответствующего разрешения — поэтому она никогда не исчезает из навигации.