Перейти к основному содержимому

Возможности подробно

Полный перечень того, что система умеет сегодня, по ролям и модулям. Здесь только реализованное: ничего из планов.

Всем пользователям

Вход и профиль

  • Вход по адресу почты и паролю; сессия продлевается автоматически.
  • Вход через учётную запись университета или внешнего провайдера: кнопки прямо на странице входа.
  • Ограничение числа попыток входа с одного адреса как защита от подбора пароля.
  • При неверных данных система не подсказывает, что именно неверно: почта или пароль.
  • Заблокированная учётная запись в систему не пускается.
  • После входа открывается личный кабинет со своим меню для каждой роли.
  • Профиль: ФИО, логин, почта, роль, номер зачётки, привязанные аккаунты в системах хранения кода, группа, дата регистрации.
  • Правка разрешённых полей профиля: ФИО, номер зачётки, аккаунт в системе хранения кода и предпочитаемый язык.
  • Смена пароля из профиля с проверкой длины и совпадения.
  • При первом входе система требует сменить выданный пароль.
  • Привязка и отвязка внешних учётных записей входа прямо в профиле.
  • Язык интерфейса: русский, английский, польский, белорусский; выбор запоминается и применяется на всех страницах.
  • Даты и числа отображаются в формате выбранного языка.
  • Ссылка «перейти к содержимому» на каждой странице для работы с клавиатуры.

Справка

  • Встроенная справка для студента и преподавателя: первые шаги, руководство по экранам и пошаговые рецепты.
  • Студент видит справку студента, преподаватель видит справку преподавателя и студента; справка доступна на четырёх языках интерфейса.

Работа с GitHub и GitLab

Как система работает с хостингом кода

  • Курс живёт в репозитории: задания, методички, рубрики и шаблоны проверок — файлы под версионным контролем; версия курса — git-тег, содержимое по тегу неизменно.
  • Свой хостинг кода система не приносит: работает поверх GitHub или GitLab вуза через бот-аккаунт и токены с минимальными правами.
  • Каждому студенту на каждый курс система автоматически создаёт личный приватный репозиторий из заготовки: шаблон отчёта, каркас кода, публичные тесты, конфигурация CI; приватные материалы курса туда не попадают.
  • Сдача — pull request в GitHub или merge request в GitLab; событие приходит вебхуком, а на случай его потери работает резервный опрос открытых запросов.
  • Автопроверки выполняются в CI самого хостинга: GitHub Actions или GitLab CI вуза; система читает статус проверки и не запускает AI-разбор при красном результате.
  • В запрос публикуется только нейтральный комментарий со ссылкой в систему: без баллов и текста отзыва.
  • Force-push — та же сдача с новой ревизией, без дублей; события по уже оценённой работе игнорируются.
  • Авторинг курса тоже идёт через запросы: каркас задания, правка файлов, шаблоны CI отправляются запросом с ревью, слияние только после одобрения.
  • Единый центральный репозиторий автопроверок на организацию или группу; репозитории курсов и студентов ссылаются на плавающий тег, исправления доезжают без коммитов в каждый репозиторий.
  • Синхронизация состава организации или группы с системой: отчёт о расхождениях, приглашения недостающих, пробный запуск без изменений.
  • В хостинг кода уходит только логин студента: ни ФИО, ни почта, ни оценки.
  • Оба провайдера одновременно: у пользователя по аккаунту на каждого, у курса один провайдер, токены и организации по умолчанию задаются отдельно для каждого.

GitHub

  • GitHub.com и GitHub Enterprise Server: адрес инстанса задаётся в токене.
  • Бот-аккаунт и два токена: один для членства и приглашений, другой для содержимого курсов.
  • Личные репозитории студентов в организации вуза; доступ приглашением коллаборатором, членство в организации не обязательно, членам организации приглашение не нужно.
  • Работает и на бесплатном тарифе организации: отсутствие защиты веток компенсирует ревью-гейт публикации в самой системе.
  • Вебхук организации только на события pull request с проверкой подписи до разбора тела.
  • Результат GitHub Actions читается через check-runs с резервным чтением через Actions API; если недоступно ни то ни другое — явная ошибка, а не зелёный пропуск.
  • Студент без заполненного аккаунта GitHub получает статус «с ошибкой» и причину; неудачные создания репозиториев повторяются с нарастающей паузой, есть кнопка «Повторить».
  • Приглашения в организацию по логину через Invitations API.

GitLab CE (self-hosted)

  • Собственный инстанс GitLab вуза: адрес и группа задаются в токене; курсы и студенты — проекты этой группы.
  • Личный приватный проект каждому студенту с ролью Developer.
  • Вебхук на каждый личный проект с секретным токеном; настройка перепроверяется при каждом проходе, чтобы старый секрет не залип.
  • CI-конфигурация личного проекта закреплена на центральный репозиторий проверок: студент не может её изменить — граница строже, чем на GitHub.
  • Форки отключены, merge request из форка не принимается как сдача.
  • Чтение центральных проверок через членство Reporter без прав на запись.
  • При создании проекта проверяется наличие работающего раннера; зависший пайплайн не блокирует проверку бесконечно — таймаут настраивается.
  • Переключение версии центральных проверок для курса без merge request.
  • Общий Keycloak-realm для системы и GitLab: один пароль для входа в обе.
  • Требования к раннеру задокументированы: docker-executor, лимиты ресурсов, таймауты, сетевая изоляция, автоотмена лишних пайплайнов.

Что нужно со стороны вуза

  • Организация в GitHub или группа в собственном GitLab CE.
  • Бот-аккаунт и токены с минимальными правами, заведённые в системе.
  • Для GitLab — раннер на docker-executor; для GitHub — минуты Actions или self-hosted раннер.
  • Публичный адрес для вебхуков; без него работает резервный опрос.

Студенту

Выданные задания

  • Список заданий карточками: курс, задание, срок, статус работы; видны только задания своей группы.
  • Поиск по заданиям и фильтр по статусу.
  • Сортировка по сроку, ближайшие первыми, с учётом персонального продления.
  • Индикатор непрочитанного отзыва на карточке задания.
  • Бейдж «репозиторий готовится», пока личный репозиторий создаётся, и пометка «назначение закрыто» на закрытых заданиях.
  • Страница задания: методичка, руководство и шаблон отчёта с полным оформлением (заголовки, списки, блоки кода).
  • Ссылка на личный репозиторий, как только он готов.
  • Публичная рубрика с критериями и баллами: видно, за что начисляются баллы, до начала работы.
  • Персональный номер варианта и его условие.
  • Срок сдачи с учётом персонального продления.
  • Понятное сообщение вместо пустой страницы, если содержимое задания временно недоступно.

Сдача работ

  • Кнопки «Отправить на проверку» и «Отправить повторно» после доработки; если сдача невозможна, кнопка объясняет причину.
  • Сдача фиксируется автоматически по событию из системы хранения кода, без ручных действий.
  • Работа после срока принимается и помечается «с опозданием»; автоматических штрафов нет, решение за преподавателем.
  • Доработка без ограничения по числу попыток, пока преподаватель не подтвердил оценку.
  • В запрос на слияние уходит только нейтральное уведомление со ссылкой в систему, без баллов и текста отзыва.
  • Ручная привязка запроса на слияние как запасной путь.
  • Отчёт по секциям рубрики прямо в системе, отдельной вкладкой на странице работы.
  • Черновик отчёта сохраняется автоматически по мере набора.
  • Предпросмотр секции в оформленном виде и возврат в режим правки.
  • Вложения к отчёту: изображения и текстовые файлы, до 5 МБ на файл и 25 МБ суммарно.
  • Отметка «раздел не изменился» для секций, которые не потребовали правок.
  • Сдача отчёта с подтверждением; бейджи «черновик» и «сдан» с датой.
  • Автоматическая проверка ждёт сдачи отчёта и не запускается раньше.

Статус проверки и отзыв

  • Понятные статусы работы: отправлено, проверяется, проверено, на доработку, оценено.
  • Лента шагов проверки с датами отправки и выставления оценки.
  • Блок «что исправить» наверху страницы, если работа возвращена на доработку.
  • Пометка «сдано с опозданием» на странице работы.
  • Ссылка на код работы и историю правок.
  • Баллы по каждому критерию рубрики и комментарий преподавателя; служебные поля рубрики студенту не показываются.
  • Результаты автоматического разбора студенту не показываются: это внутренний инструмент преподавателя.
  • Система запоминает, что отзыв открыт, и снимает индикатор непрочитанного.
  • После возврата на доработку у работы свой срок пересдачи, он виден на странице работы.

Оценки

  • Таблица оценок: курс, задание, балл, максимум, дата.
  • Сводка: средний процент, сколько оценено из назначенного, лучший результат.
  • Переход из строки таблицы к развёрнутому отзыву по работе.
  • Уведомления об отзыве внутри системы, без почтовых рассылок.

Преподавателю

Курсы

  • Список курсов, к которым преподаватель прикреплён: название, репозиторий, число заданий, текущая версия, статус (черновик, опубликован, архив).
  • Поиск по названию и фильтр по статусу курса.
  • Карточка курса: репозиторий, версия, число заданий, список преподавателей, значок системы хранения кода.
  • Проверка структуры курса перед публикацией: отчёт о найденных заданиях и ошибках.
  • Публикация версии курса: задания и рубрики загружаются в систему и становятся доступны для выдачи.
  • Индикатор «есть неопубликованные изменения» относительно текущей версии.
  • Создание нового задания одной формой: система заводит каркас с обязательными файлами и открывает запрос на слияние.
  • Список ожидающих заданий, созданных, но ещё не влитых, со ссылками на их запросы на слияние.
  • Правка сведений о задании: заголовок, порядок в списке, отправка в архив.
  • Просмотр задания в системе: методичка, шаблон отчёта, рубрика, примеры работ.
  • Правка текстовых файлов задания в интерфейсе; изменение уходит запросом на слияние, а не пишется в курс напрямую.
  • Баннер со ссылкой на открытый запрос на слияние после любого изменения.
  • Помощник по содержимому: по краткому описанию темы формируется черновик задания с методичкой, руководством и рубрикой.
  • Помощник по рубрике: по тексту готового задания предлагаются критерии и баллы.
  • Черновик помощника никогда не публикуется сам: он приходит предложением, которое преподаватель правит и принимает.
  • Настройка автоматических проверок курса: выбор из готовых шаблонов, предпросмотр, применение через запрос на слияние.
  • Видно, какие шаблоны уже применены и сколько собственных файлов проверок добавлено сверх них.

Задания и рубрики

  • Рубрика задания: критерии с названием, описанием, максимальным баллом и типом проверки, автоматическая или ручная.
  • Суммарный балл рубрики считается и проверяется при публикации.
  • Приватные указания для проверяющего видны только преподавателю и не попадают студенту.
  • Бонусные баллы к заданию отдельным блоком.
  • Индивидуальные варианты задания.
  • Публичная часть рубрики, критерии и веса, видна студенту.
  • Рубрика фиксируется снимком в момент выдачи: правки курса не меняют уже выданное задание.

Назначения

  • Выдача заданий группе одной формой-графиком: курс, набор заданий, группа, свой срок для каждого задания.
  • Выдавать можно только опубликованные курсы и только закреплённым за преподавателем группам.
  • Состав участников фиксируется в момент выдачи: перевод студента в другую группу не ломает историю и сданные работы.
  • Каждому участнику автоматически создаётся личный репозиторий с заготовкой; студент видит задание сразу, репозиторий по готовности.
  • Статус готовности репозитория по каждому студенту: готово, готовится, ошибка; повторная попытка для тех, у кого не создался.
  • Досинхронизация участников: добавить тех, кто пришёл в группу позже старта.
  • Индивидуальное продление срока конкретному студенту с пометкой в таблице участников.
  • Правка срока сдачи сразу для всей группы.
  • Закрытие назначения явным действием из списка.
  • Удаление ошибочно созданного назначения, пока по нему никто не сдал работу.
  • Все изменения назначения записываются в журнал: кто, что и когда изменил.
  • Таблица назначений: курс, задание, группа, срок, участники, сдано, ждут проверки, статус; фильтры по курсу, группе и статусу.
  • Сводные счётчики готовности репозиториев и переход к списку работ студентов.
  • Модель проверки помощником выбирается для потока или отдельного задания; без выбора действует модель по умолчанию.
  • Матрица прогресса потока: студенты и задания со статусами, итог по каждому студенту, выгрузка в CSV.

Очередь проверки

  • Рабочая очередь по заданию: студент, ссылка на работу, статус, результат автоматической проверки, оценка, дата обновления.
  • Счётчик работ, ждущих решения преподавателя, и фильтр по статусу.
  • Пометка «с опозданием» в очереди.
  • Преподаватель видит работы только закреплённых за ним групп.
  • Сквозная очередь «Проверка»: все сдачи по всем заданиям преподавателя одним списком, с фильтрами и счётчиками.

Разбор помощником

  • Автоматический разбор запускается сам, с отложенным стартом, чтобы не срабатывать на каждую мелкую правку.
  • Бейдж «проверка отложена до …» с кнопкой запустить немедленно.
  • Статусы разбора: в очереди, выполняется, готово, требует внимания, ошибка.
  • Предварительная сумма автоматических баллов прямо в очереди.
  • Упавший разбор показывается с причиной и кнопкой перезапуска.
  • Пометка «требует ручного внимания» на результатах, не прошедших фильтр качества.
  • Подсказки по каждому критерию: предлагаемый балл, степень уверенности, комментарий и ссылки на подтверждения в коде.
  • Критерии с низкой уверенностью подсвечиваются, чтобы преподаватель посмотрел их первыми.
  • Кнопка «подставить баллы помощника» заполняет все поля разом, оставляя их редактируемыми.
  • Комментарий, скрытый фильтром безопасности, показывает причину: совпадение с эталоном или с инструкцией проверяющему и сам фрагмент.
  • Текст структурированного отчёта студента передаётся помощнику как контекст.
  • Расход на разбор ограничен дневным бюджетом на курс; преподаватель может запустить проверку и сверх бюджета.
  • Проверку помощником можно перезапустить и после готового результата, пока работа не оценена; рядом с результатом видна модель, которая проверяла.

Оценивание

  • Экран оценивания: критерии рубрики с полями баллов и проверкой, что балл не превышает максимум.
  • Рядом с каждым критерием сворачиваемая секция отчёта студента с миниатюрами вложений.
  • Текстовый комментарий студенту.
  • Подтверждение итоговой оценки: работа переходит в «оценено», в запрос на слияние уходит нейтральное уведомление.
  • Возврат работы на доработку с обязательным комментарием.
  • Корректировка уже подтверждённой оценки с обязательным указанием причины.
  • Переоткрытие оценённой работы на повторную проверку с обязательным указанием причины.
  • Кто и когда подтвердил или изменил оценку записывается в журнал.
  • Итоговый балл и максимум на экране после подтверждения.
  • Пометку «сдано с опозданием» можно снять или вернуть для отдельной работы с указанием причины.

Мейнтейнеру курса

Курсы и репозитории

  • Регистрация курса одной формой: выбор токена (провайдер и организация берутся из него), имя репозитория, название, описание; итоговое имя с префиксом видно до сохранения.
  • Создание приватного репозитория курса с начальным коммитом; повторная регистрация безопасна.
  • Токен курса необязателен: если пусто, используется системный.
  • Все курсы на общей странице с поиском и фильтром по статусу.
  • Назначение преподавателю доступных учебных групп: чекбоксы по группам, «выбрать все», счётчик назначенных.
  • Преподавателей курса назначают и снимают прямо в карточке курса.

Ревью и публикация

  • Очередь ревью: открытые запросы на слияние по всем курсам (курс, автор, номер, число файлов, дата) с поиском по курсу, автору и названию.
  • Метка «workflows» на запросах, затрагивающих файлы автоматических проверок.
  • Одобрение или запрос правок с комментарием; счётчики одобрений и запрошенных правок.
  • Слияние через систему только после одобрения либо человеком, который не является автором.
  • Публикация отклоняется, если в основную ветку попали изменения без одобрения; гейт работает и там, где защита веток недоступна.
  • Структурная проверка при публикации: методичка на месте, рубрика валидна, сумма баллов сходится, приватный каталог не копируется студентам.
  • Граница секретности по каталогу grading: эталон, указания проверяющему и скрытые тесты не покидают репозиторий курса.
  • Версия курса — git-тег; содержимое по тегу неизменно, уже выданные назначения не меняются.
  • Ревью и слияние записываются в журнал аудита.

Центральные проверки CI

  • Единый центральный репозиторий автопроверок на организацию; развёртывание одной кнопкой, повторное безопасно.
  • Стартовый набор из семи проверок: предпроверка сдачи, структурный линт, дымовые тесты, поиск утёкших секретов, битые ссылки, линт содержимого, разметчик запросов.
  • Поиск секретов сканирует историю, а не только текущие файлы.
  • Карточка состояния: сконфигурирован ли, развёрнут ли, актуальный релиз, плавающие теги, открытые запросы; диагностика «чего не хватает» со ссылкой в настройки.
  • Просмотр файлов проверок и правка через запрос на слияние в служебную ветку; очередь запросов центрального репозитория с тем же ревью-гейтом.
  • Релиз с выбором уровня (major, minor, patch): точный тег ставится, плавающий сдвигается автоматически.
  • Матрица версий по курсам: актуально, устарело, устаревший формат, нет проверок, ошибка.
  • Миграция курса на новую версию одной кнопкой: запрос, меняющий только ссылки на версию; для GitLab переключение без запроса.
  • В репозиториях курсов и студентов — тонкие заглушки со ссылкой на плавающий тег: исправления доезжают без коммитов в каждый репозиторий.
  • Без центрального репозитория работают встроенные шаблоны; в предпросмотре видно, какие применены.
  • Разделение токенов: один для правок и релизов, другой только для развёртывания.
  • Развёртывание, правки, релизы и миграции записываются в аудит.

Настройки системы

  • Единая страница настроек; токены и провайдеры выбираются из списков, а не вводятся идентификаторами.
  • Роль новых пользователей по умолчанию; организация GitHub и группа GitLab по умолчанию.
  • Префиксы имён репозиториев курсов и личных репозиториев студентов.
  • Системный токен содержимого курсов с переопределением на отдельном курсе.
  • Задержка перед автоматической проверкой, дневной бюджет токенов на курс, модель по умолчанию и запасная модель, интервал резервного опроса сдач.
  • Гейт публикации: обязательное одобрение или выключен для преподавателя, работающего в одиночку.
  • Настройки центральных проверок: провайдер, имя репозитория, токены; путь CI-конфигурации для личных проектов GitLab.
  • Предупреждения о ссылках на удалённые или отозванные токены прямо на странице; каждое изменение попадает в аудит парой «старое → новое».

Администратору

Пользователи

  • Список: логин, ФИО, почта, роль, группы, статус, дата; поиск, фильтры по роли и статусу, сортировка, постраничный вывод.
  • Создание пользователя одной формой: почта, логин, ФИО, пароль, роль; аккаунты GitHub и GitLab, номер студенческого.
  • Уникальность почты и логина без учёта регистра.
  • Массовый импорт из CSV: предпросмотр, подсветка ошибочных строк, импорт только валидных, построчный отчёт; до 500 строк; защита от CSV-инъекций; строка без пароля создаёт пользователя с приглашением по ссылке.
  • Редактирование: ФИО, логин, почта, роль, аккаунты в системах кода, номер студенческого; смена роли действует сразу.
  • По одному аккаунту на каждого провайдера кода: GitHub и GitLab одновременно.
  • Сброс пароля: временный пароль показывается один раз, смена при следующем входе обязательна.
  • Деактивация с пояснением последствий вместо удаления; данные сохраняются; реактивация той же кнопкой.
  • Защита последнего и стартового администратора от деактивации и разжалования.
  • Деактивированный студент: история сохраняется, в новые назначения он не попадает, уже сданное можно оценить.
  • Доступ выдаётся ссылкой-приглашением из письма вместо временного пароля; в карточке пользователя виден статус приглашения.

Группы

  • Список групп: название, тип, число участников, владелец; поиск и фильтр по типу.
  • Создание: уникальное имя и тип, учебная или произвольная; студент состоит не более чем в одной учебной группе.
  • Редактирование имени и типа на странице группы с предупреждением при смене типа.
  • Архивация вместо удаления с показом числа участников; разархивация одной кнопкой.
  • Участники: добавление с поиском, удаление с подтверждением, назначение владельца; владелец управляет составом сам.
  • Пакетное добавление до 100 человек за раз с фильтром по роли и двухшаговым подтверждением.
  • Участников учебной группы можно разделить на подгруппы; задание выдаётся всей группе или отдельной подгруппе со своим сроком.

Токены систем кода и ключи моделей

  • Токены систем кода: GitHub или GitLab, адрес self-hosted инстанса, организация или группа, пометка прав, дата истечения.
  • Хранение только в зашифрованном виде, в списках маска; проверка пробным вызовом провайдера, включая доступ к организации.
  • Несколько токенов на разные организации; предупреждение за 14 дней до истечения.
  • Ротация на месте без перепривязки курсов.
  • Отзыв как аварийный выключатель: немедленно и необратимо, с показом затронутых курсов и настроек; отозванное отвергается везде явной ошибкой.
  • Удаление только после отзыва и только если токен нигде не используется.
  • Ключи моделей: провайдер (в том числе OpenRouter с запасной моделью и политикой обработки данных), модель по умолчанию, лимит, срок; шифрование, маска, проверка пробным вызовом.
  • Те же правила ротации, отзыва и удаления для ключей моделей; отозванный ключ по умолчанию делает проверку явно неработающей, а не выключает её молча.
  • При первом запуске система сама заводит локальную заглушку ключа: конвейер проверок работает без внешней модели.
  • Создание, ротация, отзыв и удаление записываются в аудит.

Журнал аудита

  • Журнал: время, действие, кто, над чем, детали; доступен только администратору.
  • Фильтры по действию, актору, цели и датам; постраничный вывод, новые сверху.
  • Только дописывается: через интерфейс и API записи нельзя изменить или удалить.
  • Что попадает: входы и неудачные попытки с причиной и адресом; пользователи, настройки, токены; назначения, оценки, авторинг и ревью, проверки, синхронизация, сдача отчётов.
  • Синхронизация с системой кода пишет одно сводное событие со счётчиками.

Синхронизация с системой кода

  • Страница синхронизации: выбор провайдера и токена.
  • Отчёт о расхождениях: совпадения, есть у нас и нет в системе кода, есть там и нет у нас.
  • Применение приглашает недостающих в организацию или группу; повторный запуск безопасен; пробный запуск без приглашений.
  • Результат со счётчиками и статусом по каждой операции; синхронизация односторонняя, из системы в хостинг кода.

SSO / OIDC

  • Провайдеры входа OIDC и LDAP: создание, редактирование, активация и деактивация без удаления конфигурации.
  • OIDC: издатель, client id и secret, scopes, переопределения адресов, claim с ролями; секреты хранятся зашифрованными.
  • Кнопка «Тест»: discovery, JWKS, token endpoint; для LDAP пробная привязка.
  • Кнопки провайдеров на странице входа появляются по активности провайдера.
  • Authorization Code с PKCE, state и nonce, полная проверка ID-токена; токены провайдера обрабатываются только на сервере.
  • Автопривязка существующего пользователя по подтверждённой почте; автосоздание при первом входе с разрешением коллизий логина.
  • Маппинг ролей из claim с группами; роль обновляется при каждом входе; защита последнего администратора действует и здесь.
  • Принудительный SSO: вход по паролю для всех, кроме администраторов, отклоняется.
  • LDAP-провайдер: адрес, DN привязки, база и фильтр поиска, маппинг атрибутов, LDAPS по умолчанию.
  • Автосвязка аккаунта в системе кода из claim провайдера.
  • Общий Keycloak-realm для системы и GitLab: один пароль для обеих; скрипт переноса существующих пользователей в Keycloak.

Интеграции и эксплуатация

AI-модуль

  • Провайдер модели со структурированным выходом; локальная заглушка для разработки; без ключа конвейер работает в режиме ручной проверки.
  • Модель только возвращает разбор по заданной схеме и не исполняет код; исполнение только в CI без секретов системы; ключи моделей хранятся на сервере в зашифрованном виде и не отдаются в браузер.
  • Фильтр выхода: совпадения отзыва с эталоном или указаниями вырезаются, проверка помечается «требует внимания».
  • Комментарий по критерию ограничен по длине; свободный текст модели не публикуется.
  • Гейт CI: при красной автопроверке модель не запускается; нехватка прав токена — явная ошибка, а не зелёный пропуск.
  • Отложенный старт, дневной бюджет, повторы с нарастающей паузой; после исчерпания попыток работа уходит на ручную проверку, конвейер не встаёт.

Развёртывание и эксплуатация

  • Docker Compose: API, worker, фронтенд, PostgreSQL; миграции применяются автоматически при старте; профиль с Keycloak и OpenLDAP.
  • Проверки готовности и эндпойнт здоровья; метрики Prometheus у API и worker.
  • Worker — отдельный процесс той же кодовой базы: очередь в PostgreSQL без брокера, повторы, периодические задачи.
  • Резервный опрос открытых запросов на слияние как страховка при потере вебхука или без публичного адреса.
  • Образы в два этапа, процессы без root; конфигурация через переменные окружения; секреты по профилям.
  • Скрипт проверки с профилями local, stand, prod: pytest, юнит-тесты фронтенда, E2E, прогон SSO, живой прогон с системой кода, дымовые тесты прода.

Безопасность

  • Пароли Argon2; короткий access-токен и refresh с ротацией; HttpOnly cookies; выход отзывает сессию.
  • Лимиты попыток входа по адресу и почте; доверие X-Forwarded-For только от перечисленных подсетей.
  • Заголовки безопасности на каждом ответе: nosniff, запрет фреймов, Referrer-Policy, CSP; HSTS на проде; CORS по списку.
  • Вебхуки: HMAC-SHA256 у GitHub, секретный токен у GitLab, сравнение за постоянное время, отказ до разбора тела.
  • Все секреты в базе зашифрованы: токены систем кода, ключи моделей, client secret, пароль LDAP.
  • В систему кода уходит только логин: ни ФИО, ни почта, ни оценки.
  • Изоляция студентов: личные приватные репозитории, чужие работы не видны; приватное содержимое курса не копируется студенту.
  • Жёсткого удаления нет; журнал аудита только дописывается.
  • Контейнеры без root; статический анализ безопасности и аудит зависимостей перед каждым коммитом.

Посмотреть вживую

Напишите нам, покажем демо на вашем курсе.

Связаться с нами