AAYMA
RU
Войти

Career Quest

AI-навигатор карьерного развития для Halyk Bank: по профилю, навыкам и истории сотрудника рекомендует 1–3 шага развития к целевой роли или грейду с…

Доведённый продукт
Команда «orbit.jr» 35💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: orbit.jr
Кейс HackAlem.ai: Менеджмент — Halyk Bank · кейс 1
Стадия: Доведённый продукт

Задача кейса: «Career Quest»: AI-навигатор, связывающий навыки сотрудника с шагами развития

Суть

AI-навигатор карьерного развития для Halyk Bank: по профилю, навыкам и истории сотрудника рекомендует 1–3 шага развития к целевой роли или грейду с объяснением, сохраняет прогресс. У HR есть кабинет с дефицитами компетенций и пробелами каталога.

Как устроено

Датасет (сотрудники, навыки, события, история) валидируется (Zod) и загружается в PostgreSQL. Доменная логика считает разрывы навыков и покрытие цели Σmin(тек, треб)/Σтреб, отбирает допустимых кандидатов по аудитории, предварительным навыкам, расписанию и истории. LLM (OpenAI-совместимый Chat Completions, Structured Outputs) только ранжирует готовых кандидатов и выбирает ID проверенных фактов не менее чем из трёх категорий. Валидатор отклоняет неполный или противоречащий правилам ответ целиком, тогда работает rules_fallback. Выполнение шага пересчитывает навыки с защитой идемпотентности, AI-ответы кэшируются на 60 с.

Ключевые решения

  • candidate generation + LLM re-ranking
  • fact-ID grounding
  • JSON Schema response validation
  • rules fallback
  • skill-gap coverage metric
  • idempotency keys
  • AI evaluation harness

Особенности

LLM не генерирует курсы и тексты, а выбирает ID из заранее рассчитанных кандидатов и фактов, строгий валидатор отклоняет ответы, нарушающие приоритеты. Команда сохранила обширные live-аудиты моделей (reasoning_effort low и xhigh) и проверку запуска из чистого клона.

Стек

TypeScript · Node.js 24 · Next.js 16 · React 19 · PostgreSQL 18 · Drizzle ORM · Zod · Vitest · Docker Compose · GitHub Actions

Модели

gpt-6-luna · gpt-4o-mini · gpt-6-sol


Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-5abba766-orbit-jr.

README

README.md

Career Quest

Краткое описание

Career Quest — AI-навигатор развития сотрудника для кейса Halyk Bank на HackAlem AI. Он связывает разрозненные HR-активности с понятной карьерной целью: показывает, какой шаг доступен сейчас, какие навыки он развивает и насколько приближает к требованиям следующей роли или грейда.

Основной пользователь — сотрудник со стажем 1–5 лет. HR получает общую картину дефицитов навыков, участия в развитии и потребностей, которые каталог обучения не покрывает.

Основной сценарий: профиль → цель → рекомендация с объяснением → выполнение → сохранённый прогресс и следующий шаг. Ядро проекта — качество и объяснимость рекомендаций; баллы и награды не являются обязательной частью выбранного кейса.

Запуск · Сценарий для жюри · Проверка по ТЗ · Ограничения

Проверка запуска из чистого клона — 23 сентября 2026

Код d4b1670 заново клонирован с GitHub в пустой каталог. Запуск выполнен по инструкции ниже: .env.example → .env, четыре исходных файла организаторов в data/source/, затем docker compose up --build -d. Изменены только свободные порты: APP_PORT=3215, DB_PORT=54339. Созданы новые контейнеры и отдельный пустой volume PostgreSQL; старые node_modules, .next, .env и база не использовались. Команда актуальной редакции docker compose up --build -d --wait также выполнена: оба контейнера готовы, сохранённый volume повторно использован без сброса.

Результат: оба контейнера healthy, /api/health вернул status=ok, dataset_initialized=true, миграцию 003_learning_external_completion. В браузере проверены вход сотрудника, рекомендации, сохранение урока при закрытии/повторном открытии, неверный тест без начисления, успешный тест и сохранение прогресса 55% → 61% после обновления страницы. HR увидел 200 сотрудников и одно новое симулированное завершение. Ошибок консоли в этом проходе не обнаружено. Инструкция запуска воспроизвелась без правок кода.

Проверка выполнена без ключа AI (ai_configured=false, подбор по правилам). Для демонстрации обязательного AI-слоя жюри нужно настроить провайдера по шагу 2; эта проверка запуска не заменяет live AI-аудит и не подтверждает SLA под нагрузкой.

Замечания пяти судей и исправления обучения, изоляции БД и лишних чтений: аудит, техническая проверка.

Что реализовано

ВозможностьЧто получает пользователь
Профиль и карьерный путьРоль, грейд, стаж, навыки, история участия, выбранная или предложенная цель, её требования и критические разрывы
Персональные рекомендацииОт одной до трёх допустимых и полезных активностей; при отсутствии шага — конкретная причина
Объяснение выбораПроверенные факты минимум из трёх категорий: грейд, разрывы навыков, история, требования цели; ожидаемое изменение навыков и покрытия цели
Учёт историиЗавершения, начатые участия, отказы и пропуски, в том числе похожих активностей; нехватка наблюдений явно обозначается
Каталог по навыку«Найти обучение» открывает подходящие программы с условиями допуска, предварительными требованиями и возможным приростом
Сохранение прогрессаМоделирование выполнения, пересчёт навыков и следующего шага; защита от повторного начисления
Учебная мастерскаяДва авторских демомодуля, по три урока и три вопроса; сохранение уроков, серверная проверка теста, повторная попытка
HR-кабинетОбзор команды, поиск и фильтры сотрудников, просмотр профилей, дефициты компетенций, участие и причины отсутствия рекомендации
Диагностика каталогаПотребности без подходящего обучения, несовпадение аудитории и предел развиваемого уровня
Импорт для жюриJSON-профили и CSV-история, предварительная проверка по умолчанию, проверка связей и атомарное сохранение
Доступ и хранениеРоли сотрудника и HR, cookie-сессии, PostgreSQL; цели, импорт и учебный прогресс сохраняются между запусками

Как работает решение

  1. Входные данные. При первом запуске сервер проверяет четыре файла датасета, связи между записями и загружает их в PostgreSQL.
  2. Профиль и цель. Рассчитываются текущие навыки и разрывы относительно выбранной цели. При отсутствии исходной цели может быть предложен следующий грейд текущей роли; для Lead без цели требуется выбрать направление.
  3. Допустимые шаги. Доменная логика проверяет аудиторию, предварительные навыки, расписание, историю и пользу для цели. Обязательные назначения не выдаются как добровольные рекомендации. Подготовительная активность может открывать полезный следующий шаг.
  4. AI-выбор и объяснение. Модель ранжирует готовых кандидатов и выбирает идентификаторы проверенных фактов. Сервер проверяет формат ответа, допустимость выбора, минимум три категории оснований и актуальность профиля. Дополнительно обязательны факты истории и трудозатрат, а для подготовительного шага — условия будущей пользы. Порядок не должен нарушать многофакторные приоритеты продукта; неполный или противоречащий им ответ отклоняется целиком. Модель не создаёт курсы и не изменяет навыки.
  5. Действие и результат. Сотрудник проходит демомодуль или нажимает «Смоделировать выполнение». Сервер сохраняет результат, пересчитывает профиль и рекомендации. HR видит обновлённые данные.

Прирост задаётся gain активности и ограничен max_level и 5; уже более высокий уровень не снижается. История, уже учтённая в последней оценке навыков, повторно не начисляется.

Покрытие цели: Σ min(текущий уровень, требуемый уровень) / Σ требуемых уровней. Избыток одного навыка не компенсирует другой разрыв. 100% означает соответствие модели требований, а не автоматическое повышение. Рекомендации — альтернативы следующего действия; их эффекты не складываются заранее.

В интерфейсе различаются «AI-подборка» (ai), «Подборка по правилам» (rules_fallback) и отсутствие кандидатов (no_candidates). При сбое модели сохраняется работоспособность подбора по правилам. Для полной проверки обязательного AI-сценария нужен принятый ответ ai.

Технологии

КомпонентИспользуемые технологии
Язык и средаTypeScript, Node.js 24, npm workspaces
ИнтерфейсNext.js 16, React 19, CSS, Lucide
APINext.js Route Handlers, Node.js runtime, серверный пакет backend/
База данныхPostgreSQL 18; Compose использует 18.6; схема Drizzle ORM, запросы и транзакции через pg
Валидация и импортZod, csv-parse
AIOpenAI-совместимый Chat Completions API через fetch, Structured Outputs / JSON Schema; в .env.example настроена gpt-6-luna, для неё адаптер задаёт reasoning_effort: low
ПроверкиVitest, Node.js test runner, React Test Renderer, интеграционные тесты PostgreSQL
Сборка и поставкаDocker, Docker Compose, GitHub Actions

Имя модели и полный URL API задаются в окружении. При замене провайдера необходимо проверить совместимость со строгой JSON Schema. Режим low выбран после сравнительных live-проверок; результаты, включая таймауты и отклонённые ответы, сохранены в аудите AI. Ключ хранится на сервере. Другие внешние сервисы для основного сценария не требуются.

Архитектура проекта

Модульный монолит: один процесс Next.js обслуживает UI и API, отдельный workspace содержит серверную логику, PostgreSQL хранит состояние.

flowchart LR
    User[Сотрудник или HR] --> UI[React / Next.js]
    UI --> API[Route Handlers: сессия и права]
    API --> Services[Сервисы: профиль, импорт, обучение]
    Services --> Domain[Домен: доступность, навыки, цель и факты]
    Services <--> DB[(PostgreSQL)]
    Services --> AI[AI-ранжирование рассчитанных кандидатов]
    AI <--> Provider[Совместимый LLM API]
    AI --> Validation[Проверка ответа или подбор по правилам]
    Validation --> UI
backend/src/
  domain/       расчёт навыков, кандидатов, оснований и HR-аналитики
  ai/           промпт, API-адаптер, проверка ответа и резервный подбор
  services/     цели, рекомендации, выполнение и импорт
  learning/     демоуроки, учебные попытки и проверка тестов
  auth/         сессии и права сотрудника / HR
  db/           схема, миграции, bootstrap и транзакции
  validation/   схемы исходных файлов и проверка связей
  http/         маршрутизация запросов
frontend/       страницы, компоненты и клиент API
contracts/      общие TypeScript-контракты
scripts/        запуск и команды проверки
data/source/    локальный датасет, исключённый из Git
docs/           описание правил и отчёты проверок

Изменение цели и начисление прогресса проверяют версию данных. Симуляция, сохранение импорта и отправка учебного теста дополнительно защищены ключами идемпотентности; повторное завершение урока не дублируется. Для рекомендаций выделен отдельный пул соединений; одновременно выполняются не более трёх подборов на процесс. Успешные AI-ответы кэшируются до 60 секунд с учётом профиля, фактов, версии и конфигурации. Бюджет провайдера ограничен восемью секундами, включая допустимый повтор временного сбоя; это не замер полного времени HTTP-запроса.

Подробнее: backend, доменные правила и API, AI, качество рекомендаций.

Установка и запуск

1. Подготовить проект и датасет

Нужны доступ к репозиторию, Git и работающий Docker с Compose v2+. Для первого запуска нужен интернет для образов и npm-пакетов. Node.js на хосте при Docker-запуске не требуется.

git clone https://github.com/BAITC-Hacks/hack-5abba766-orbit-jr.git
cd hack-5abba766-orbit-jr
cp .env.example .env
mkdir -p data/source

Скопируйте из архива организаторов четыре файла непосредственно в data/source/:

data/source/employees.json
data/source/skills.json
data/source/events.json
data/source/activity_history.csv

Для выданного career_quest_dataset.zip пример в Bash/zsh, если архив лежит в Downloads и установлен unzip:

unzip -j "$HOME/Downloads/career_quest_dataset.zip" \
  'case_1/career_quest_dataset/*.json' \
  'case_1/career_quest_dataset/activity_history.csv' -d data/source

В Windows архив можно распаковать через проводник и скопировать указанные файлы; вместо cp использовать Copy-Item .env.example .env. Исходный набор и .env не публикуются. Без четырёх файлов первый запуск основного приложения завершится ошибкой. Вариант репетиции без архива приведён ниже.

2. Настроить AI для проверки ТЗ

В корневом .env задайте действующий ключ и доступную ему модель:

LLM_API_KEY=ваш_ключ
LLM_MODEL=gpt-6-luna
LLM_API_URL=https://api.openai.com/v1/chat/completions
LLM_TIMEOUT_MS=8000

Не добавляйте ключ в Git. Без ключа можно проверить профиль, HR, обучение и резервный подбор, но это не подтверждает обязательную AI-рекомендацию. ai_configured=true в health означает наличие конфигурации, а успешное подключение подтверждается только ответом mode=ai.

3. Запустить одной командой

После подготовки файлов и .env:

Если порты 3000 или 54329 заняты, заранее измените их в .env, например APP_PORT=3215, DB_PORT=54339, оставив APP_ORIGIN пустым. Тогда приложение и health открываются на http://localhost:3215 и http://localhost:3215/api/health. Остальные команды не меняются.

docker compose up --build -d --wait

Откройте http://localhost:3000. Готовность: http://localhost:3000/api/health, ожидаются data.status="ok" и data.dataset_initialized=true.

docker compose ps
docker compose logs app

Флаг --wait ждёт готовности контейнеров; оба должны иметь статус healthy. Строка .env not found. Continuing without it. внутри контейнера штатная: Compose передаёт настройки через окружение, файл с ключами в образ не копируется.

Запуск применяет миграции и загружает набор один раз. БД сохраняется в именованном Docker volume. Порты по умолчанию: приложение 3000, PostgreSQL 54329; оба привязаны к 127.0.0.1.

ЛогинПароль по умолчаниюДоступ
employeeemployee-demo-2026Собственный профиль, цель и выполнение; привязан к первому по ID сотруднику исходного набора
hrhr-demo-2026Аналитика, просмотр профилей и рекомендаций, импорт; без выполнения активностей за сотрудника

Пароли можно задать через DEMO_EMPLOYEE_PASSWORD и DEMO_HR_PASSWORD до первой инициализации. Их последующее изменение в .env не меняет уже созданные аккаунты.

Основные настройки: APP_PORT и DB_PORT задают опубликованные порты Compose; пустой APP_ORIGIN автоматически соответствует http://localhost:${APP_PORT}. При явном origin или внешнем HTTPS укажите правильный адрес вручную. POSTGRES_PASSWORD задаёт пароль БД при её создании. После изменения AI-конфигурации пересоздайте приложение:

docker compose up -d --build --force-recreate --wait app

Обычная остановка docker compose down сохраняет БД. Добавление --volumes удаляет её вместе с прогрессом и импортами. Замена исходных файлов не перезаписывает уже инициализированную БД; новые профили и историю добавляют через HR-импорт.

Разработка без контейнера приложения

Нужны Node.js 24, npm и PostgreSQL. После подготовки .env и датасета:

npm ci
docker compose up -d --wait db
npm run dev

DATABASE_URL из .env должен соответствовать адресу, порту и паролю вашей БД. В локальном URL спецсимволы пароля нужно кодировать; Compose передаёт пароль отдельным полем. npm run dev и npm start выполняют bootstrap автоматически. Порт локального сервера задаётся PORT (по умолчанию 3000), а APP_PORT относится к Compose. При изменении PORT задайте соответствующий APP_ORIGIN, например http://localhost:3100 для порта 3100, иначе сервер отклонит изменяющие запросы.

Для production-версии остановите dev-сервер, затем выполните npm run build и npm start. Не используйте один порт для Docker app и локального сервера и не запускайте сборку одновременно с dev в том же каталоге.

Как проверить решение

Основной сценарий сотрудника

  1. На свежем официальном наборе войдите как employee: откроется E0001. Посмотрите роль, грейд, цель, навыки, историю и карьерный путь.
  2. В карточке рекомендации раскройте «Что даст обучение». Сопоставьте объяснение с текущими навыками, историей и требованиями цели; проверьте ожидаемый эффект. Для AI-проверки должна отображаться «AI-подборка».
  3. Выберите активность с действием «Смоделировать выполнение» — например, Public Speaking Club (EV_036) на свежем наборе. После подтверждения сравните «было → стало», покрытие цели и следующий шаг. Обновите страницу: результат должен сохраниться.
  4. Дополнительно откройте учебный модуль через «Открыть уроки». Для свежего E0001 доступен System Design Fundamentals (EV_005), демомодуль «Демо-модуль: запрос, данные и надёжный повтор». Завершите урок, закройте и откройте плеер — прогресс сохраняется. Пройдите три урока, отправьте тест с ошибкой, затем исправьте ответы по материалу. При успешном тесте сохраняется выполнение без повторного начисления.

Для шагов 3 и 4 выбирайте разные ещё не выполненные активности либо показывайте только один способ выполнения. Если БД уже использовалась, набор доступных шагов может отличаться. HR может просмотреть другой профиль, но не пройти активность за него.

Два учебных модуля — Python (EV_012) и System Design (EV_005) — демонстрационные. Уроки и проверка ответов работают, но успешный короткий тест моделирует полный эффект активности из каталога, а не подтверждает освоение всего 24- или 16-часового курса.

HR и проверочные профили жюри

  1. Войдите как hr. В «Обзоре команды» проверьте дефициты навыков, участие, сотрудников без следующего шага и ограничения каталога.
  2. Откройте «Сотрудники», используйте поиск или фильтры и просмотрите произвольный профиль. Фильтры меняют список сотрудников; общая сводка остаётся по всей компании.
  3. В «Импорте данных» выберите JSON-профили и/или CSV-историю в формате датасета. Оставьте включённым установленный по умолчанию флажок «Только проверить файлы, без сохранения», нажмите «Проверить файлы».
  4. После успешной проверки снимите флажок, нажмите «Импортировать», найдите новый профиль и проверьте его рекомендации. Изменения кода не нужны.
  5. Повторите идентичный импорт: записи пропускаются без дублирования. Изменённая запись с уже занятым ID отклоняет пакет целиком.
  6. Перезапустите приложение командой docker compose restart app и убедитесь, что импорт и ранее сохранённый прогресс доступны.

Импорт не создаёт учётные записи. Жюри может проверить подбор нового профиля через HR; самостоятельный вход и выполнение от имени нового сотрудника требуют отдельного создания аккаунта, интерфейс которого пока не реализован.

Репетиция без архива организаторов

После clone и подготовки .env, с Node.js 24 и PostgreSQL:

npm ci
docker compose up -d --wait db
npm run build
npm run demo:prepare
npm run demo:start

Откройте http://localhost:3210. Это отдельная схема БД с авторским профилем и двумя шагами: SQL 1 → 2 → 3, покрытие цели 33% → 67% → 100%. Пароли — из таблицы выше. Повторный demo:start сохраняет результат; новый demo:prepare создаёт новую схему, сохраняя предыдущую. Репетиция намеренно отключает внешний AI и не заменяет AI-проверку ТЗ. Подробный сценарий. Страница /demo — отдельная визуальная витрина на фикстурах, без настоящего цикла с БД.

Автоматические проверки

Из корня проекта после npm ci, на Node.js 24:

npm test
npm run typecheck
npm run eval:ai -- --suite=all
npm run build

Для интеграций нужен PostgreSQL. Пример Bash/zsh для стандартного локального подключения:

export TEST_DATABASE_URL=postgresql://career_quest:[email protected]:54329/career_quest
npm run test:integration
npm run verify:ai-flow

В PowerShell используйте $env:TEST_DATABASE_URL="postgresql://career_quest:[email protected]:54329/career_quest". Тесты создают временные схемы и не сбрасывают таблицы основного приложения.

С настроенным провайдером, с расходованием его API:

npm run smoke:ai
npm run eval:ai -- --live --suite=all
npm run verify:ai-flow -- --live

Последняя команда требует TEST_DATABASE_URL и проверяет настоящую цепочку с PostgreSQL и AI на авторских данных. HTTP handlers входят в проверку, браузер и TCP-сервер Next — нет.

Повторная проверка 23 сентября 2026: код d4b1670, включая последние изменения frontend, AI и обработки ожидания БД. 488 backend-тестов, 98 клиентских, 66 PostgreSQL integration прошли; один opt-in live-тест пропущен в обычном наборе и затем проверен отдельным live-запуском 3/3. Docker-сборка и чистый запуск прошли. Новый live-набор: 23/23 принятых AI-ответа, без fallback; это авторская регрессия, не гарантия будущих запросов. Offline evaluation: 23 случая ранжирования и 2 проверки пустого результата. Детали, границы измерений и матрица ТЗ — в отчёте проверки. Исторические live-наборы сохранены в отчёте AI; они не являются результатами на скрытых профилях жюри. CI-конфигурация включена, локальный результат не означает успешный запуск GitHub Actions.

Данные и интеграции

ИсточникСодержимое официального набора
employees.json200 профилей, роли, грейды, навыки и карьерные цели
skills.json60 навыков и 32 профиля требований: 8 ролей × 4 грейда
events.json40 активностей, аудитория, предварительные требования, gain и max_level
activity_history.csv2 743 записи участия за 24 месяца, включая пропуски и отказы

Все люди и компании в наборе вымышлены. Дата среза — 2026-10-01; домен использует meta.as_of_date, а не дату компьютера. Фактическое время пользовательских действий хранится отдельно. По условиям ТЗ исходные данные нельзя выносить за пределы хакатона; в Git они не включены.

HR-импорт принимает JSON-объект {meta, employees} и CSV в UTF-8: до 20 МиБ на пакет, 1 000 профилей и 50 000 строк истории. Новые ID поддерживаются; роли, навыки, события и другие ссылки должны соответствовать объединённому набору. Каталог навыков и активностей через этот экран не заменяется. Схемы и проверки.

При включённом AI внешнему провайдеру передаются роль, грейд, цель, навыки, допустимые кандидаты и рассчитанные факты одного профиля. ФИО, пароли, руководитель и полная история компании в запрос не включаются. Использование провайдера для данных организаторов должно соответствовать условиям хакатона; опубликованные live-проверки используют авторские синтетические данные.

Интеграций с HRIS, LMS, почтой, календарями и мессенджерами пока нет.

Ограничения

  • Одна компания и два демонстрационных аккаунта. Нет регистрации, SSO и интерфейса создания аккаунтов; импортированные профили проверяются через HR.
  • Выполнение и прирост навыков моделируются. Короткие учебные модули не заменяют обучение и аттестацию; 100% покрытия цели не гарантирует повышение.
  • Подбор ограничен загруженным каталогом. Подготовительный шаг рассматривает одну следующую активность; полный многошаговый маршрут до цели не гарантируется.
  • Скрытые профили жюри и реальный бизнес-эффект заранее не проверены. Принятый AI-порядок обязан соблюдать общую с baseline политику приоритетов, поэтому их совпадение не является независимым доказательством пользы LLM. В live-регрессиях встречались таймауты и переходы в резервный режим. История участия не устанавливает причины пропусков или мотивацию человека.
  • Требования UI ≤2 с и AI ≤10 с на всём пути под нагрузкой не подтверждены. В предыдущей браузерной проверке зафиксирован запрос профиля 2,811 с; восьмисекундный бюджет провайдера не включает всю обработку запроса. Подробности — в матрице ТЗ.
  • Интерфейс русскоязычный; полная локализация на казахский и английский не реализована. Мобильные состояния проверены выборочно. HR-сводка участия не является подробной аналитикой просмотра уроков.
  • Известна ошибка клавиатурной навигации: «Перейти к содержимому» и переходы только по hash могут сбрасывать фокус и локальный раздел. Она зафиксирована в аудите интерфейса; соответствующий обработчик пока сохранён.
  • Не реализованы внутренняя валюта, магазин наград, признание коллег, конструктор событий и прогноз оттока. Это опциональные пункты кейса. Публичных рейтингов результативности и вознаграждений за обязательные процессы нет.

Развёрнутая версия

Публичная deployed-версия не указана в репозитории. Основной проверяемый способ запуска — Docker Compose на http://localhost:3000.

Compose публикует порты только локально. Для внешнего стенда требуются отдельная настройка адреса, APP_ORIGIN, HTTPS и доступа; готовой облачной конфигурации нет.

Звёзды
⭐ 0
Форки
0
Язык
TypeScript
Последний push
в прошлом месяце
Коммиты
91
Авторы
6
Файлы
240
Ветки
2

Авторы коммитов

Аруан 28ka1nyy 26Ramin293 22ka1nyy 11ka1nyy 4Codex 1

История коммитов

  • 2026-09-23 17:40merge: preserve updated jury README and clean-clone startup evidenceka1nyy
  • 2026-09-23 17:38docs: verify clean GitHub clone and clarify judge startup stepska1nyy
  • 2026-09-23 17:37docs: align Russian README with jury criteria and current verificationАруан
  • 2026-09-23 17:31docs: record final merged audit checks and live AI limitationska1nyy
  • 2026-09-23 17:30Merge remote-tracking branch 'origin/main'ka1nyy
  • 2026-09-23 17:29docs(ai): record final live limitations and merged validationka1nyy
  • 2026-09-23 17:28Merge current main and align retry fixture with ranking policyka1nyy
  • 2026-09-23 17:28merge: preserve skill catalog and HR workspace alongside audit fixeska1nyy
Все коммиты (91)
  • 2026-09-23 17:28fix(ai): enforce grounded evidence and ranking policy after live auditka1nyy
  • 2026-09-23 17:28fix(ui): improve muted text contrast and document completed auditka1nyy
  • 2026-09-23 17:27fix(hr): replace green accents with consistent blue paletteRamin293
  • 2026-09-23 17:23docs(hr): record ten-agent review and merged verificationRamin293
  • 2026-09-23 17:22merge: integrate current main and retain both HR and skill catalog testsRamin293
  • 2026-09-23 17:22feat(hr): build team growth workspace and preview-first importRamin293
  • 2026-09-23 17:21merge: retain jury recovery and database isolation with audit safeguardska1nyy
  • 2026-09-23 17:19fix(ui): avoid duplicate catalog requirements after mergeАруан
  • 2026-09-23 17:18fix(ui): identify simulated progress in employee profileska1nyy
  • 2026-09-23 17:18Merge remote-tracking branch 'origin/main'Аруан
  • 2026-09-23 17:18Merge remote-tracking branch 'origin/main'ka1nyy
  • 2026-09-23 17:17docs: preserve latest catalog verification and CI limitationka1nyy
  • 2026-09-23 17:16Merge remote-tracking branch 'origin/main' into review/jury-20260923ka1nyy
  • 2026-09-23 17:16merge: retain skill filters with fixed catalog actionsАруан
  • 2026-09-23 17:16docs: record final merge checks and observed latency limitka1nyy
  • 2026-09-23 17:14feat(ui): connect skill gaps to relevant learning programsАруан
  • 2026-09-23 17:14Merge remote-tracking branch 'origin/main'Аруан
  • 2026-09-23 17:14fix(ui): anchor catalog demo action below scrollable contentRamin293
  • 2026-09-23 17:14docs: record jury findings, official brief and verified demo evidenceka1nyy
  • 2026-09-23 17:14Merge remote-tracking branch 'origin/main' into review/jury-20260923ka1nyy
  • 2026-09-23 17:12fix(ui): enforce equal catalog grid tracks and bounded card scrollingRamin293
  • 2026-09-23 17:11merge: preserve team permissions and UI alongside audit fixeska1nyy
  • 2026-09-23 17:08test: align read-only HR fixtures with catalog conditionska1nyy
  • 2026-09-23 17:08Merge remote-tracking branch 'origin/main' into review/jury-20260923ka1nyy
  • 2026-09-23 17:08fix: bound database waits and clarify employee next stepska1nyy
  • 2026-09-23 17:07Merge remote-tracking branch 'origin/main'Ramin293
  • 2026-09-23 17:06fix(auth): route verified sessions to the correct workspaceАруан
  • 2026-09-23 17:06fix(ui): give catalog cards uniform height and internal scrollingRamin293
  • 2026-09-23 17:06Merge remote-tracking branch 'origin/main'Ramin293
  • 2026-09-23 17:02merge: preserve employee-only mutations and accessibility improvementska1nyy
  • 2026-09-23 17:01fix: harden database configuration and isolate repeatable jury demoska1nyy
  • 2026-09-23 17:01fix(ai): keep recommendations responsive and retry transient failuresАруан
  • 2026-09-23 17:01Merge remote-tracking branch 'origin/main'Аруан
  • 2026-09-23 16:59merge: retain HR permissions and session fixes alongside frontend auditRamin293
  • 2026-09-23 16:58fix(frontend): improve accessibility and workflow reliability after auditRamin293
  • 2026-09-23 16:55merge: preserve team responsive UI and runtime refinementska1nyy
  • 2026-09-23 16:54fix: resolve jury audit gaps and add repeatable evidence demoka1nyy
  • 2026-09-23 16:51Merge remote-tracking branch 'origin/main'Аруан
  • 2026-09-23 16:51merge: preserve HR permissions in updated profile workspaceАруан
  • 2026-09-23 16:51fix: add site logo as browser tab iconRamin293
  • 2026-09-23 16:47Merge remote-tracking branch 'origin/main'Ramin293
  • 2026-09-23 16:47fix: refine responsive workspace and frontend navigationRamin293
  • 2026-09-23 16:45fix(auth): reserve personal development actions for employeesАруан
  • 2026-09-23 16:45Merge remote-tracking branch 'origin/main'Аруан
  • 2026-09-23 16:45fix(ai): use xhigh reasoning effort for Lunaka1nyy
  • 2026-09-23 16:43docs: link verification results and preserve console logs in READMEka1nyy
  • 2026-09-23 16:40merge: integrate latest UI and AI changes with session fixАруан
  • 2026-09-23 16:40fix(auth): refresh session after browser history restorationАруан
  • 2026-09-23 16:38fix: clarify Luna evidence categories and record complete verificationka1nyy
  • 2026-09-23 16:34merge: preserve team visual workspace alongside backend hardeningka1nyy
  • 2026-09-23 16:31merge: integrate verified Luna runtime and team handoffka1nyy
  • 2026-09-23 16:24Merge remote-tracking branch 'origin/main'Ramin293
  • 2026-09-23 16:24merge: preserve guided learning and AI insights in visual workspaceRamin293
  • 2026-09-23 16:24fix: validate backend boundaries and accelerate recommendation workflowska1nyy
  • 2026-09-23 16:22fix(ai): use Luna and retain grounded rankings with optional comparisonska1nyy
  • 2026-09-23 16:22feat(ui): add visual learning flows and employee HR workspaceRamin293
  • 2026-09-23 16:04merge: integrate learning and HR insights with backend hardeningka1nyy
  • 2026-09-23 16:04docs: write Russian README for hackathon judgesАруан
  • 2026-09-23 16:04fix: harden AI responses, domain projections and import identityka1nyy
  • 2026-09-23 15:57merge: integrate verified AI pipeline with learning and HR insightsАруан
  • 2026-09-23 15:51docs: explain career paths learning and HR workflowsАруан
  • 2026-09-23 15:50feat: improve recommendation evidence and HR catalog insightsАруан
  • 2026-09-23 15:44merge: combine team HR redesign with guided learningАруан
  • 2026-09-23 15:41feat: add guided career journey and persistent learning modulesАруан
  • 2026-09-23 15:39test: validate official dataset through production loaderka1nyy
  • 2026-09-23 15:36feat(ai): verify live recommendations and preserve responsive backendka1nyy
  • 2026-09-23 15:33feat(frontend): redesign HR workspace and activity cards with backend integrationRamin293
  • 2026-09-23 15:24fix(frontend): improve responsive layouts and request recoveryRamin293
  • 2026-09-23 15:06feat: unify recommendation evidence and evaluation in backendАруан
  • 2026-09-23 14:58feat: integrate team UI and AI with PostgreSQL backendАруан
  • 2026-09-23 14:51docs: clarify repository author attributionka1nyy
  • 2026-09-23 14:49feat(recommendations): validate evidence and add quality evaluationka1nyy
  • 2026-09-23 14:45feat: implement PostgreSQL backend and local deliveryАруан
  • 2026-09-23 14:21feat(frontend): wire career UI to shared API contractsRamin293
  • 2026-09-23 14:16docs: add handoff for the AI zoneka1nyy
  • 2026-09-23 14:13feat(ai): LLM adapter, response validator and baseline rankingka1nyy
  • 2026-09-23 14:05docs: align frontend integration with backend contractsАруан
  • 2026-09-23 14:04feat(ai): recommendation ranking with validation and rules fallbackka1nyy
  • 2026-09-23 14:04Merge remote-tracking branch 'origin/main'Аруан
  • 2026-09-23 14:03docs: specify backend architecture and shared API contractsАруан
  • 2026-09-23 13:52refactor: move Career Quest UI into frontend directoryRamin293
  • 2026-09-23 13:50feat: add Career Quest responsive frontend prototypeCodex
  • 2026-09-23 13:33docs: add Career Quest MVP architectureАруан
Структура репозитория (240 файлов)
.dockerignore
.env.example
.github/workflows/ci.yml
.gitignore
AUDIT-2026-09-23.md
Dockerfile
PRODUCT-IMPLEMENTATION.md
PreMortem-CareerQuest-2026-09-23.md
README.md
backend/README.md
backend/evaluation/acceptance-cases.ts
backend/evaluation/cases.ts
backend/evaluation/challenge-cases.ts
backend/evaluation/domain-cases.ts
backend/evaluation/metrics.ts
backend/evaluation/options.ts
backend/package.json
backend/scripts/audit-journeys.ts
backend/scripts/bootstrap.ts
backend/scripts/evaluate-ai.ts
backend/scripts/prepare-demo.ts
backend/scripts/verify-ai-flow.ts
backend/src/ai/adapter.ts
backend/src/ai/index.ts
backend/src/ai/prompt.ts
backend/src/ai/recommend.ts
backend/src/ai/response-validator.ts
backend/src/auth/index.ts
backend/src/db/bootstrap.ts
backend/src/db/config.ts
backend/src/db/index.ts
backend/src/db/migrations/001_initial.sql
backend/src/db/migrations/002_learning.sql
backend/src/db/migrations/003_learning_external_completion.sql
backend/src/db/schema.ts
backend/src/domain/baseline-signals.ts
backend/src/domain/baseline.ts
backend/src/domain/catalog-coverage.ts
backend/src/domain/history-evidence.ts
backend/src/domain/index.ts
backend/src/domain/recommendation-evidence.ts
backend/src/errors.ts
backend/src/http/index.ts
backend/src/index.ts
backend/src/learning/content.ts
backend/src/learning/service.ts
backend/src/learning/types.ts
backend/src/services/data.ts
backend/src/services/recommendation-work.ts
backend/src/services/recommendations.ts
backend/src/types.ts
backend/src/validation/index.ts
backend/src/validation/load-dataset.ts
backend/tests/ai-flow.integration.test.ts
backend/tests/ai.test.ts
backend/tests/auth-permissions.test.ts
backend/tests/baseline-signals.test.ts
backend/tests/bootstrap.integration.test.ts
backend/tests/catalog-coverage.test.ts
backend/tests/data.integration.test.ts
backend/tests/db-config.test.ts
backend/tests/delivery-report.test.ts
backend/tests/domain-evaluation.test.ts
backend/tests/domain-scaling.test.ts
backend/tests/domain.dataset.test.ts
backend/tests/domain.test.ts
backend/tests/fixtures/ai-flow.ts
backend/tests/fixtures/scaling.ts
backend/tests/history-evidence.test.ts
backend/tests/http.integration.test.ts
backend/tests/learning.integration.test.ts
backend/tests/recommendation-concurrency.integration.test.ts
backend/tests/recommendation-work.test.ts
backend/tests/team-ai/acceptance-cases.test.ts
backend/tests/team-ai/adapter.test.ts
backend/tests/team-ai/challenge-cases.test.ts
backend/tests/team-ai/evaluation-options.test.ts
backend/tests/team-ai/evaluation.test.ts
backend/tests/team-ai/evidence-completeness.test.ts
backend/tests/team-ai/fixtures.ts
backend/tests/team-ai/policy-priority.test.ts
backend/tests/team-ai/prompt.test.ts
backend/tests/team-ai/recommend.test.ts
backend/tests/team-ai/response-validator.test.ts
backend/tests/team-baseline.test.ts
backend/tests/validation-loader.test.ts
backend/tsconfig.json
backend/vitest.config.ts
backend/vitest.integration.config.ts
compose.yaml
contracts/backend.ts
contracts/development-insights.ts
contracts/learning.ts
data/source/.gitkeep
docs/AI.md
docs/AI_PLAN.md
docs/AI_VERIFICATION.md
docs/ASTRA_ML_AUDIT.md
docs/BACKEND.md
docs/DATASET_VERIFICATION.md
docs/DEMO_RUNBOOK.md
docs/HANDOFF.md
docs/HR_WORKSPACE_AUDIT.md
docs/JURY_REVIEW.md
docs/JURY_VERIFICATION.md
docs/ORCHESTRATION_VERIFICATION.md
docs/PRODUCT_GUIDE.md
docs/RECOMMENDATION-QUALITY.md
docs/TZ_COMPLIANCE.md
docs/verification/2026-09-23-ai-flow.json
docs/verification/2026-09-23-ai-reliability.json
docs/verification/2026-09-23-domain-performance.json
docs/verification/2026-09-23-gpt4o-mini.json
docs/verification/2026-09-23-gpt6-sol.json
docs/verification/2026-09-23-jury-journeys.json
docs/verification/2026-09-23-jury-live-final.json
docs/verification/2026-09-23-jury-live-flow-final.json
docs/verification/2026-09-23-jury-live-flow.json
docs/verification/2026-09-23-jury-luna-xhigh.json
docs/verification/2026-09-23-luna-ai-flow.json
docs/verification/2026-09-23-luna-before-category-fix.json
docs/verification/2026-09-23-luna-before-normalizer.json
docs/verification/2026-09-23-luna-final.json
docs/verification/2026-09-23-luna-targeted-diagnostics.json
docs/verification/2026-09-23-readme-live-all.json
docs/verification/2026-09-23-readme-live-flow.json
docs/verification/astra-audit/adversarial-after.json
docs/verification/astra-audit/adversarial-review.md
docs/verification/astra-audit/evidence-before.log
docs/verification/astra-audit/final-flow.json
docs/verification/astra-audit/final-guard-all.json
docs/verification/astra-audit/final-guard-stress.json
docs/verification/astra-audit/final-manifest.json
docs/verification/astra-audit/holdout-initial.mts
docs/verification/astra-audit/holdout.mts
docs/verification/astra-audit/integration-after.log
docs/verification/astra-audit/integration-final.log
docs/verification/astra-audit/low-before-total-prompt.json
docs/verification/astra-audit/low-diagnostic.json
docs/verification/astra-audit/low-stress-before-policy-guard.json
docs/verification/astra-audit/low-total-prompt-before-policy-guard.json
docs/verification/astra-audit/merged-build.log
docs/verification/astra-audit/merged-checks.json
docs/verification/astra-audit/merged-integration.log
docs/verification/astra-audit/merged-tests.log
docs/verification/astra-audit/method-review.md
docs/verification/astra-audit/policy-before.log
docs/verification/astra-audit/release-review.md
docs/verification/astra-audit/reliability-review.md
docs/verification/astra-audit/unit-after.log
docs/verification/astra-audit/unit-final.log
docs/verification/astra-audit/usability-review.md
docs/verification/astra-audit/xhigh-after.json
docs/verification/astra-audit/xhigh-before.json
docs/verification/astra-audit/xhigh-control.json
docs/verification/astra-audit/xhigh-stress.json
docs/verification/logs/2026-09-23/README.md
docs/verification/logs/2026-09-23/build.txt
docs/verification/logs/2026-09-23/client.txt
docs/verification/logs/2026-09-23/integration.txt
docs/verification/logs/2026-09-23/live-flow.txt
docs/verification/logs/2026-09-23/prompt-tests.txt
docs/verification/logs/2026-09-23/unit-timeout-before-fix.txt
docs/verification/logs/2026-09-23/unit.txt
frontend/AGENTS.md
frontend/AUDIT-2026-09-23.md
frontend/CLAUDE.md
frontend/QA.md
frontend/README.md
frontend/next-env.d.ts
frontend/next.config.ts
frontend/package.json
frontend/src/app/api/[...path]/route.ts
frontend/src/app/apple-workspace.css
frontend/src/app/comfort-theme.css
frontend/src/app/compact-workspace.css
frontend/src/app/controls.css
frontend/src/app/demo/page.tsx
frontend/src/app/employee/page.tsx
frontend/src/app/employee/profile/page.tsx
frontend/src/app/globals.css
frontend/src/app/halyk-theme.css
frontend/src/app/hr-workspace.css
frontend/src/app/hr/page.tsx
frontend/src/app/icon.svg
frontend/src/app/layout.tsx
frontend/src/app/not-found.tsx
frontend/src/app/page.tsx
frontend/src/app/profile-workspace.css
frontend/src/app/responsive-workspace.css
frontend/src/app/visual-experience.css
frontend/src/components/demo-quest-app.tsx
frontend/src/components/quest-app.tsx
frontend/src/components/quest/career-journey.css
frontend/src/components/quest/career-journey.tsx
frontend/src/components/quest/catalog-gaps.tsx
frontend/src/components/quest/catalog-select.tsx
frontend/src/components/quest/completion-result.tsx
frontend/src/components/quest/employee-profile.tsx
frontend/src/components/quest/employee.tsx
frontend/src/components/quest/feedback.tsx
frontend/src/components/quest/growth-insights.tsx
frontend/src/components/quest/history.tsx
frontend/src/components/quest/hr-overview.tsx
frontend/src/components/quest/hr.tsx
frontend/src/components/quest/import-panel.tsx
frontend/src/components/quest/learning-player.tsx
frontend/src/components/quest/learning.css
frontend/src/components/quest/login.tsx
frontend/src/components/quest/modal.tsx
frontend/src/components/quest/navigation.tsx
frontend/src/components/quest/recommendation-card.tsx
frontend/src/components/quest/skill-course-details.tsx
frontend/src/components/quest/skills.tsx
frontend/src/components/quest/theme-control.tsx
frontend/src/components/quest/visuals.tsx
frontend/src/hooks/use-debounced-value.ts
frontend/src/hooks/use-employee.ts
frontend/src/hooks/use-learning.ts
frontend/src/hooks/use-resource.ts
frontend/src/lib/api.ts
frontend/src/lib/demo.ts
frontend/src/lib/labels.ts
frontend/tests/career-journey.test.cjs
frontend/tests/catalog-gaps.test.cjs
frontend/tests/client.test.cjs
frontend/tests/fixtures/ui-import.json
frontend/tests/hr-read-only.test.cjs
frontend/tests/hr-workspace.test.cjs
frontend/tests/learning.test.cjs
frontend/tests/preview-server.cjs
frontend/tests/session.test.cjs
frontend/tests/skill-catalog.test.cjs
frontend/tests/ui-audit.test.cjs
frontend/tsconfig.json
package-lock.json
package.json
scripts/integration.mjs
scripts/serve.mjs
scripts/smoke.mjs
Ветки (2)

Обсуждение 0 комментариев

Войдите, чтобы комментировать

Пока нет комментариев — будьте первым.