Skip to content

v0.4.0: Шаблоны ГОСТ 34, работающий выпуск комплекта и рейтинг эффективности

Choose a tag to compare

@onixus onixus released this 14 Sep 11:09
· 269 commits to main since this release

EvaCal v0.4.0 — шаблоны ГОСТ 34, работающий выпуск комплекта и рейтинг эффективности

Релиз объединяет функциональность PR #68 и последовавший за ним блок
исправлений. Главное: выпуск комплекта ГОСТ 34 теперь работает из коробки —
до этого он был заблокирован для любого нового пользователя.

Новое

  • Шаблоны ТЗ по ГОСТ 34 и harness ТЗ-автора: семь отраслевых ТЗ-шаблонов,
    набор eval-сценариев, проверки grounding и защита от инъекций в промпт.

  • Тёмное фэнтези в интерфейсе: оформление студии и сопутствующие экраны.

  • Рейтинг эффективности пресейлов и архитекторов (/leaderboard). Для
    пресейла — конверсия в утверждённые расчёты, доля переделок, медианный цикл
    от создания до утверждения и интегральная оценка. Для архитектора —
    согласованные расчёты, выпущенные комплекты ГОСТ 34, решения в роли ГАП и
    доля комплектов, принятых с первого раза. Периоды: 30 дней, 90 дней, год,
    за всё время; выборки меньше порога помечаются как ненадёжные.

    Экран открытый: GET /leaderboard и GET /api/leaderboard доступны
    любому, без учётной записи. Наружу отдаются только логины и агрегаты —
    названий расчётов и заказчиков там нет. Граница зафиксирована в
    docs/SECURITY_PERIMETER.md.

Исправлено

  • Выпуск комплекта был заблокирован из коробки. Защита от повторного сида
    проверяла наличие любого шаблона через findFirst(), а отраслевые пресеты
    импортируются раньше — поэтому демо-шаблон и демонстрационный расчёт не
    создавались никогда. Активных шаблонов не оставалось, presale-страница
    уходила в fallback «десять последних без фильтра по активности», и новому
    пользователю доставался произвольный пресет. Требования этапов пресетов были
    написаны отглагольными существительными, правило completeness помечало их
    ERROR, мастер превращал ERROR в блокер — кнопка «Выпустить комплект»
    оставалась заблокированной навсегда.

    Починены обе стороны: проверка в сиде стала адресной, а 59 текстов требований
    во всех десяти пресетах переписаны в обязывающей форме. Закрыто регрессиями.

  • Терялись строки листа внутренних изменений. Клиент Prisma кэшировался
    только вне production, а прокси читает его на каждое обращение к свойству —
    в проде это давало новый PrismaClient на каждое обращение и рвало
    интерактивные транзакции (P2028). Ошибка гасилась в
    recordInternalChangeSafe, поэтому журнал молча не писался, а тесты
    оставались зелёными.

  • Контейнер всегда был unhealthy. Проба здоровья обращалась по имени
    localhost:3000, а оно в образе резолвится сначала в IPv6 ([::1]), тогда
    как next standalone слушает только 0.0.0.0:3000. Проба получала connection
    refused при полностью работающем приложении. В оркестраторе постоянно красная
    проба означает рестарты или отказ пускать трафик на здоровый контейнер.
    Адрес заменён на числовой 127.0.0.1.

  • Уязвимости в mysql2 (GHSA-3f6p-5ww8-9rcr, GHSA-rgwj-5xj2-c3m3):
    утечка пароля открытым текстом через downgrade auth-плагина и
    decompression-bomb DoS. Закрыты override на mysql2 ^3.24.4 вместо отката
    prisma на 6.19.3, который предлагал npm audit fix --force.

Инфраструктура

  • Сквозной тест в CI. Стадия E2E прогоняет полный путь: логин, создание
    проекта и расчёта, мастер ГОСТ 34, выпуск комплекта, утверждение.
  • Сборка уведена из bind-mount VirtioFS — он недетерминированно терял
    записи, из-за чего падали tsc, vitest и нативный SWC на неповреждённом коде.
  • Цепочка поставки: 629 резолвов в локе переведены с зеркала
    registry.npmmirror.com на registry.npmjs.org, реестр закреплён в .npmrc.
    Сверка показала 0 расхождений integrity на 715 записях — подмены не было.
  • Репозиторий приведён к prettier.

Проверено

npm audit --audit-level=high — 0 уязвимостей. 516 юнит-тестов в 61 файле.
Сквозной сценарий ГОСТ 34 проходит целиком. Сборка образа: linux/amd64 + linux/arm64.

Образ

ghcr.io/onixus/evacal:0.4.0
ghcr.io/onixus/evacal:latest

Мультиарх, linux/amd64 + linux/arm64. Манифест:

sha256:681a53ef7a1ef27b6dffeeef24e286eb767b3cee18e8af4f24a97a3491bfafdf

Образ собран из того же коммита, на который указывает тег.