Перайсці да асноўнага змесціва

Магчымасці падрабязна

Поўны пералік таго, што сістэма ўмее сёння, па ролях і модулях. Толькі рэалізаванае: нічога з планаў.

Усім карыстальнікам

Уваход і профіль

  • Уваход па адрасе пошты і паролі; сесія падаўжаецца аўтаматычна.
  • Уваход праз уліковы запіс універсітэта або знешняга правайдара: кнопкі проста на старонцы ўваходу.
  • Абмежаванне колькасці спроб уваходу з аднаго адраса як абарона ад падбору пароля.
  • Пры няправільных даных сістэма не падказвае, што менавіта няправільна: пошта ці пароль.
  • Заблакаваны ўліковы запіс у сістэму не пускаецца.
  • Пасля ўваходу адкрываецца асабісты кабінет са сваім меню для кожнай ролі.
  • Профіль: імя, лагін, пошта, роля, нумар заліковай кніжкі, прывязаныя ўліковыя запісы ў сістэмах захоўвання коду, група, дата рэгістрацыі.
  • Праўка дазволеных палёў профілю: поўнае імя, нумар заліковай кніжкі, уліковы запіс у сістэме захоўвання коду і пажаданая мова.
  • Змена пароля з профілю з праверкай даўжыні і супадзення.
  • Пры першым уваходзе сістэма патрабуе змяніць выдадзены пароль.
  • Прывязка і адвязка знешніх уліковых запісаў уваходу проста ў профілі.
  • Мова інтэрфейсу: беларуская, руская, англійская, польская; выбар запамінаецца і прымяняецца на ўсіх старонках.
  • Даты і лікі адлюстроўваюцца ў фармаце выбранай мовы.
  • Спасылка «перайсці да змесціва» на кожнай старонцы для працы з клавіятуры.

Даведка

  • Убудаваная даведка для студэнта і выкладчыка: першыя крокі, кіраўніцтва па экранах і пакрокавыя рэцэпты.
  • Студэнт бачыць даведку студэнта, выкладчык бачыць даведку выкладчыка і студэнта; даведка даступная на чатырох мовах інтэрфейсу.

Праца з 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; статычны аналіз бяспекі і аўдыт залежнасцей перад кожным камітам.

Паглядзець ужывую

Напішыце нам, пакажам дэма на вашым курсе.

Звязацца з намі