AAYMA
RU
Войти

Sana Hub

Challenge Hub: AI задаёт уточняющие вопросы и собирает карточку задачи из цитат ответов бизнеса.

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

О проекте

Команда: HackAI
Кейс HackAlem.ai: Образование — AI Sana
Стадия: Доведённый продукт

Задача кейса: Challenge Hub: превратить задачу бизнеса в задание для студенческих команд

Суть

Challenge Hub: AI задаёт уточняющие вопросы и собирает карточку задачи из цитат ответов бизнеса. Код считает рейтинг готовности 0–100. Дальше каталог с фильтрами, отклики команд, ручной выбор, приёмка этапов (+10), ТЗ в PDF и рекомендательные письма с QR. Сервис развёрнут на Render.

Как устроено

Бэкенд на FastAPI со статическим фронтендом. gpt-5.5 через Responses API со Structured Outputs возвращает цитаты по полям и минимум 3 вопроса. Проверка R-QUOTE отклоняет недословные и выдуманные цитаты. Рейтинг считает app/rating.py только по полям, которые подтвердил человек; сервер возвращает недостающие поля и число баллов до следующего уровня. Цепочка провайдеров: OpenAI → NVIDIA → помеченный mock. Отдельно есть «Второе мнение NVIDIA». Рекомендации командам подбираются эвристикой по совпадению слов.

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

  • Structured Outputs
  • R-QUOTE верификация цитат
  • рубрика готовности с подтверждением полей
  • fallback OpenAI→NVIDIA→mock
  • генерация PDF (ТЗ, письма с QR)
  • прогноз позиции в каталоге
  • лимиты вызовов и логирование метаданных

Особенности

Идею и архитектуру команда выбирала «советом» агентов Claude, Codex и Gemini (раунды, голосование, синтез в coord/council). Модель объясняет и спрашивает, а считает и проверяет код. Первый коммит (10:26, до старта) импортировал заготовку, позже её откатили. Сгенерировано 413 синтетических задач и 417 откликов.

Стек

Python · FastAPI · SQLite · JavaScript · HTML/CSS · Docker · Render · GHCR

Модели

gpt-5.5 · NVIDIA NIM (meta-llama-3.3-70b-instruct, резерв)


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

README

README.md

Sana Hub — паспорт готовности бизнес-задачи

HackAlem AI · трек 07 «Образование» · кейс AI Sana Challenge Hub

Бизнес описывает задачу в одну строку. Sana Hub задаёт уточняющие вопросы, собирает карточку с цитатами из ответов и считает рейтинг готовности 0–100. Опубликованная задача попадает в общий каталог, студенческие команды сами откликаются, а бизнес вручную выбирает, с кем работать. После проекта участники получают проверяемое рекомендательное письмо с QR-кодом.

Демо: https://sana-hub-0ca1dc1.onrender.com/ · API: /docs · вход не нужен, роли демонстрационные, данные синтетические. Модель — OpenAI gpt-5.5.

Карточка задачи: шаги сценария, поля по группам и панель рейтинга с баллами за каждое недостающее поле


Содержание

  1. Проверка за пять минут
  2. Соответствие кейсу
  3. Рейтинг готовности
  4. Правила каталога
  5. Как используется AI
  6. Дополнительно к MVP
  7. Архитектура
  8. Запуск
  9. Тестовые сценарии
  10. Данные
  11. Статус проверки и ограничения

Проверка за пять минут

Сценарий повторяет обязательную демонстрацию из п. 11 кейса. Всё происходит в интерфейсе, без слайдов.

#ГдеЧто сделатьЧто должно получиться
1«Бизнесу»Ввести «Нужен чат-бот для нашего магазина, чтобы отвечал клиентам», отрасль «Розничная торговля», нажать «Уточнить задачу»Не меньше трёх уточняющих вопросов, у каждого указано поле карточки
2ВопросыОтветить на 2–3 вопроса, «Собрать карточку»Карточка с цитатами-источниками. Рейтинг 0: AI не подтверждает факты сам
3Карточка«Отметить все» → «Подтвердить отмеченные»Рейтинг растёт. На пустых полях видно, сколько баллов они дадут
4КарточкаЗаполнить «Данные», подтвердить+20, уровень меняется, панель пишет, сколько осталось до следующего
5Карточка«Опубликовать»Карточка открывается в каталоге на своей позиции
6«Командам»Вкладка «Откликнуться»: команда, идея, план, срок, ссылкаОтклик появился во вкладке «Отклики»
7«Отклики»«Выбрать» или «Отклонить»Решение ручное. Можно выбрать несколько команд или ни одной
8«Отклики»«Подтвердить этап»+10 баллов прогресса команде, повторно не начисляются

Подробный сценарий с репликами: docs/DEMO_SCRIPT.md.

Соответствие кейсу

Требование кейсаКак реализовано
Свободный ввод, проверка полноты, ≥ 3 вопросаВопросы генерирует AI по недостающим полям; при сбое — явно помеченный mock
Редактируемая карточка, ручное подтверждениеПодтверждается точное значение поля. Любая правка снимает подтверждение
Все поля карточки из п. 3Название, контекст, потребность, пользователи, данные, ограничения, результат, критерии успеха, контакт, формат, обратная связь
Рейтинг 0–100, расшифровка, недостающие сведения, пересчётСчитает код, не модель. Показаны баллы по критериям и «+N» за каждое пустое поле
Общий каталог, сортировка по рейтингу, фильтрыПоиск, фильтры по отрасли и уровню, страницы по 20 задач
Отклики без ограничения числаЛюбая команда, любое число откликов, даже на черновик
Ручной выбор бизнесаТолько кнопки бизнеса. Автоматического назначения нет
Баллы за подтверждённый этап+10 один раз на пару «задача — команда», в одной транзакции
AI не добавляет фактовКаждое поле, собранное AI, — дословная цитата из ввода бизнеса. Проверка R-QUOTE отклоняет выдуманные цитаты
Рекомендации не ограничивают каталогОтдельный блок «Подходят команде», общий каталог остаётся виден целиком
Синтетические данные, минимум по 5 записей413 черновиков и карточек, 10 команд, 417 откликов

Официальный текст кейса: docs/CASE.md, PDF.

Рейтинг готовности

Формула из п. 4 кейса, реализация — app/rating.py. Баллы дают только поля, подтверждённые человеком.

КритерийБаллыПоля карточки
Контекст и потребность20context 10 + need 10
Данные и материалы20data
Ожидаемый результат15expected_result
Критерии успеха15success_criteria
Ограничения10constraints
Пользователи10users
Связь с бизнесом10contact 4 + interaction_format 3 + feedback_process 3
УровеньБаллыВ каталоге
Черновик0–39виден, помечен «Нужны уточнения», отклики принимаются
Рабочая40–69можно рекомендовать командам
Готовая70–89выше в списке
Приоритетная90–100выделена цветом и штампом

Правила:

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

Правила каталога

  • В каталоге все опубликованные задачи. Низкий рейтинг не скрывает задачу и не запрещает отклик.
  • Порядок: рейтинг по убыванию, при равенстве — раньше опубликованная выше. Порядок задаёт сервер.
  • Фильтры: текстовый поиск, отрасль, уровень готовности. У каждого фильтра видно число задач.
  • Команды видят опубликованный снимок карточки. Неопубликованные правки бизнеса в каталог не попадают. Отклик сохраняет условия, на которые команда откликнулась.
  • Рекомендации — только задачи от 40 баллов, отобранные по совпадению слов профиля команды (интересы, навыки, технологии) с текстом задачи. Основания совпадения показаны. Это эвристика, не AI-подбор. Команды система не ранжирует и не назначает.
  • У каждой карточки показано её место в общем каталоге.

Каталог: поиск, фильтры с количеством, рекомендации для команды, список с линейками готовности и карточка задачи

Как используется AI

Принцип: модель объясняет и спрашивает, код считает и проверяет.

ФункцияВходВыходЧто проверяет код
Уточнение и сборка карточкиТекст черновика и ответы бизнесаЦитаты по полям + ≥ 3 вопроса (Structured Outputs)R-QUOTE: источник существует, цитата дословная, одно поле — одна цитата; вопросов ≥ 3 и они разные
«Что помешает начать?»Сохранённые поля карточкиДо трёх замечаний: цитата, проблема, вопросЦитаты дословные; пустые поля и отложенные ответы находят правила, без AI
ТЗ для студентов (необязательно)Подтверждённые поля карточкиРазделы ТЗ и дополнительные идеиИдеи не выбираются автоматически; утверждает и публикует бизнес
Второе мнение NVIDIAТе же поля карточки, без ответа первой моделиНезависимые замечания, хранятся отдельноЦитаты дословные; баллы и подтверждения не меняются
Перенос ответа в карточкуВопрос студента и ответ бизнесаПодходящее поле карточкиПереносится дословный ответ; поле теряет подтверждение, публикует только бизнес
  • Модель: OpenAI gpt-5.5 через Responses API со Structured Outputs, OPENAI_REASONING_EFFORT=low. Официальная документация модели.
  • Порядок провайдеров при сбое: OpenAI → NVIDIA (резерв, не проверен) → явно помеченный mock, если FALLBACK_TO_MOCK=1. Если FALLBACK_TO_MOCK=0, пользователь получает ошибку 503, карточка остаётся нетронутой, запрос можно повторить.
  • Режим видно у каждого результата: live · openai, live · nvidia или mock. В проверке карточки также показана модель.
  • Второе мнение NVIDIA: отдельная кнопка на экране бизнеса. Получает только поля карточки, сохраняет независимый результат и не меняет баллы/подтверждения. В live без ключа возвращает понятную ошибку; скрытой замены на OpenAI/mock нет. Для обычных AI-функций NVIDIA остаётся резервом. Ключ сейчас отсутствует, реальный NVIDIA-вызов не проверен. NVIDIA API.
  • Без AI: рекомендательные письма собираются из версионируемых шаблонных фраз, API отвечает ai_used: false. Поиск похожих вопросов и рекомендации задач — сравнение слов.
  • Промпт, схема ответа и R-QUOTE: app/llm.py. Модели и провайдеры: app/ai_config.py.
  • Защита от лишних трат: суммарный вход до 30 000 символов, лимит MAX_CALLS_PER_HOUR, таймаут AI_TIMEOUT_SECONDS. Логи logs/llm_calls.jsonl содержат только метаданные, без текста и ключей.
  • Чего AI не делает: не подтверждает поля, не ставит баллы, не выбирает и не ранжирует команды, не использует персональные признаки.

Дополнительно к MVP

ФункцияЧто даётСтатус
«Что помешает начать?»Проверка сохранённой карточки: замечания с цитатой и вопросом, кнопка «Уточнить поле» ведёт к редактору. Правка помечает анализ устаревшим. Рейтинг и подтверждения проверка не меняетНа Render
Рост позицииДо трёх вариантов «если дополнить поле X — будет N баллов и место M». Считает сервер по текущему каталогу. Это условный расчёт, не обещание откликовНа Render
Приёмка этапаБизнес фиксирует условия этапа, команда сдаёт ссылку, бизнес принимает или возвращает на доработку с причиной; +10 один разНа Render; браузерный сценарий пройден локально
Продолжение после F5Можно открыть последнюю сохранённую карточку. В браузере хранится только её IDНа Render; браузерный сценарий пройден локально
ТЗ для студентов в PDFБизнес включает, генерирует, правит и утверждает ТЗ; студенты видят утверждённую версию и скачивают PDF с кириллицей. По умолчанию выключеноНа Render; сценарий пройден локально в mock, отдельный запрос GPT-5.5 на синтетике прошёл. Подробно
Второе мнение NVIDIAОтдельная проверка тех же исходных полей без ответа первой модели; результат хранится отдельноНа Render; без ключа NVIDIA показывает понятную ошибку. Проверено в mock
Вопросы по карточкеСтудент задаёт публичный вопрос (не больше 5 в сутки на карточку) и видит похожие. Бизнес отвечает, правки сохраняют историю, ответ можно перенести в поле карточки. Модерация, подписка, уведомления внутри приложенияНа Render; тесты и браузерный сценарий пройдены локально
Рекомендательное письмоПосле проекта капитан задаёт роли, участники их подтверждают, бизнес заполняет опросник. Каждый участник получает личный PDF с QR-проверкой; есть перевыпуск, отзыв и жалоба на факты. Письмо на русском, казахском или английскомНа Render; тесты и браузерный сценарий пройдены локально. Подробно
Казахский языкЭкраны вопросов и писем на русском и казахскомНа Render

Архитектура

Один процесс FastAPI отдаёт API и статический интерфейс без сборки. Данные — SQLite, каждая запись в отдельной транзакции.

flowchart LR
  UI["Интерфейс<br/>index.html · business.js · catalog.js"] --> API["api.js<br/>роль демо + If-Match"]
  API --> M["FastAPI · app/main.py"]
  M --> L["llm.py<br/>вопросы и цитаты"]
  M --> R["rating.py<br/>формула 0–100"]
  M --> RV["review.py<br/>«Что помешает начать?»"]
  M --> I["insights.py<br/>место и прогноз"]
  M --> RC["recommend.py<br/>рекомендации"]
  M --> ST["stages.py<br/>приёмка этапа"]
  M --> SP["specification.py · spec_pdf.py<br/>ТЗ и PDF"]
  M --> Q["questions.py<br/>вопросы и ответы"]
  M --> PL["project_letters.py · letter_pdf.py<br/>письма с QR"]
  M --> C["community.py<br/>сессии, аудит, уведомления"]
  M --> DB[("store.py<br/>SQLite")]
  L --> OAI["ai_config.py<br/>OpenAI gpt-5.5 → NVIDIA → mock"]
РешениеЗачем
If-Match с ревизией карточкиПравка из устаревшего окна получает 409 и не затирает чужие изменения
Опубликованный снимокКоманды откликаются на зафиксированные условия
Уникальная запись этапа+10 не начисляются дважды даже при одновременных запросах
Баллы готовности и прогресса раздельноРейтинг задачи и прогресс команды не смешиваются
Выданный PDF письма не меняетсяИсправление — новая версия, старая получает статус «заменено»; хранится SHA-256

Стек: Python 3.10+ (Docker — 3.12), FastAPI, Pydantic v2, SQLite, OpenAI SDK, ReportLab, чистый JavaScript без Node. QR-ссылки строятся от APP_PUBLIC_URL, а не от заголовка запроса. Точные версии — requirements.txt. Подробнее — docs/ARCHITECTURE.md.

Запуск

Нужны Git и Python 3.10+. Ключи для запуска не нужны: по умолчанию MOCK=1.

git clone https://github.com/BAITC-Hacks/hack-a2928c88-hackai.git
cd hack-a2928c88-hackai
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements-dev.txt
Copy-Item .env.example .env   # только при первом запуске
.\.venv\Scripts\python.exe -m uvicorn app.main:app --host 127.0.0.1 --port 8000

Открыть http://127.0.0.1:8000 и http://127.0.0.1:8000/docs. В Linux и macOS те же команды, только ./.venv/bin/python и cp .env.example .env.

Docker:

docker build -t sana-hub .
docker run --rm -p 8000:8000 -v sana-data:/data -e MOCK=1 sana-hub
Реальный OpenAI, база данных, роли в API
  • Реальный AI. В локальном .env задайте OPENAI_API_KEY, OPENAI_MODEL=gpt-5.5, MOCK=0 и перезапустите сервер. Проверка одним платным запросом на синтетике: python scripts/check_ai.py. Ключ в вывод не попадает. На Render эти значения задаются в Environment отдельно.
  • База. data/runtime/sana.sqlite3 сохраняется между запусками. При старте добавляются только недостающие демо-записи, существующие данные и решения не перезаписываются. Для чистой базы задайте другой DATABASE_PATH. SEED_DEMO=0 отключает импорт примеров. В контейнере подключайте постоянный том к /data.
  • Вопросы и письма. COMMUNITY_DEMO=1 включает выбор учебного пользователя (заказчик, модератор, капитан и участник каждой команды) без пароля. APP_PUBLIC_URL — адрес сайта для QR-ссылок: он должен совпадать с адресом, который увидят получатели. Подробно — docs/COMMUNITY.md.
  • Роли в /docs. Действия бизнеса требуют заголовка X-Demo-Role: business, отклик — team. Правка, подтверждение и публикация требуют If-Match с revision карточки. api.js передаёт это сам. Это роли для демо, а не аутентификация.

Тестовые сценарии

.\.venv\Scripts\python.exe -m pytest -q      # 156 passed

Автотесты покрывают: черновик → вопросы → карточку с нулём баллов → подтверждение → публикацию → правку со снятием подтверждения; низкий рейтинг и отклик на него; ручной выбор нескольких команд; однократные +10 при одновременных запросах; конфликты версий; R-QUOTE; поиск, страницы и фильтры каталога; рекомендации; устаревание анализа; цикл приёмки этапа; ТЗ и PDF с кириллицей; второе мнение NVIDIA и ошибку без ключа; права на вопросы и ответы, лимит вопросов при одновременных запросах; письма: роли, опросник, неизменность PDF, статусы QR-проверки, сроки уведомлений; сохранение базы после перезапуска.

Браузерные сценарии (Playwright и Edge: pip install playwright==1.63.0, запускать на отдельной учебной базе с MOCK=1):

СкриптЧто проверяет
scripts/smoke_e2e.py --url http://127.0.0.1:8000 --mode mockВесь путь из п. 11: рейтинг 0 → 100 → 80 → 100, публикация, отклик, ручной выбор, +10 без повтора, понятная ошибка при HTTP 503
scripts/smoke_catalog.py --url http://127.0.0.1:8000Фильтр черновиков, отклик на задачу с низким рейтингом, обязательная ссылка, выбор, этап
scripts/smoke_review.py --url http://127.0.0.1:8000F5 → замечание → переход к полю → правка → устаревание → повтор → опубликованный анализ и место
scripts/smoke_stages.py --url http://127.0.0.1:8000Условия этапа → сдача → доработка → повторная сдача → приёмка → F5 → нет повторных баллов
scripts/smoke_nvidia_review.pyВторое мнение отдельно от основной проверки, понятная ошибка без ключа
scripts/smoke_questions.py --url http://127.0.0.1:8000Вопрос → ответ владельца → правка с историей → перенос в карточку с повторным подтверждением → дубликат → уведомления → казахский и телефон
scripts/smoke_project_letters.py --url http://127.0.0.1:8009 --serve-isolatedРоли → опросник → выдача → PDF → все статусы QR-проверки → жалоба → согласие на публикацию. Сам поднимает отдельный сервер

Ручная приёмка: 16 сценариев для тестировщика. Скрипты создают учебные записи. Запуск против публичного сайта требует явного флага --allow-remote. --mode live делает два платных запроса к AI.

Формула в одну команду:

.\.venv\Scripts\python.exe -c "from app.schemas import TaskCard; from app.rating import calculate_rating, confirm_fields, edit_card; c = TaskCard(draft_id='demo', industry='retail', context='Requests by email', data='Synthetic CSV', synthetic=True); print(calculate_rating(c).total); c = confirm_fields(c, ['context', 'data'], business_actor='demo-business'); print(calculate_rating(c).total); c = edit_card(c, {'context':'Requests by phone'}); print(calculate_rating(c).total)"

Результат 0 → 30 → 20: заполненное поле без подтверждения баллов не даёт, подтверждение добавляет баллы, правка снимает баллы изменённого поля.

Проверка качества AI-замечаний: python scripts/eval_review.py --live делает 12 платных запросов. Из 12 ответов 11 реальных и один fallback, ожидаемые поля совпали в 9 случаях из 12 (отчёт, первый прогон). Это диагностический набор для настройки, а не метрика точности. Прогон сделан на прежней модели gpt-4.1-mini, на GPT-5.5 его результаты не переносятся.

Данные

data/samples/ai-sana-synthetic.json: 413 черновиков, 413 карточек, 10 команд, 417 откликов. У каждой записи пометка synthetic: true.

  • 13 ручных кейсов из разных отраслей: промышленность, ЖКХ, финансы, туризм, транспорт и другие. Их баллы специально стоят на границах уровней: 24, 37, 69/70, 97.
  • 400 шаблонных сценариев: 10 отраслей × 10 рабочих процессов × 4 степени полноты. Баллы 20/50/75/100 означают полноту описания, а не качество решения.
  • Все организации, контакты и команды вымышлены. Ссылки на example.com никуда не ведут. Упомянутые в задачах CSV не приложены.
  • Карточки — учебные эталоны с подтверждениями автора набора, а не автоматически подтверждённый вывод AI.
  • Источники и сборка: coord/notes/Q-132813-claude.md, synthetic-extra-source.json, generate_synthetic_bulk.py. Пересчёт баллов: python scripts/prepare_demo_data.py.

Статус проверки и ограничения

ЧтоСтатус на 23.09.2026
Версия на RenderОбраз docker.io/denryyyyyyy/sana-hub:930961031024: всё описанное в README, включая вопросы, письма и второе мнение NVIDIA. /health показывает openai_model: gpt-5.5, /openapi.json — 65 эндпоинтов. Проверено 23.09.2026
Полный сценарий на публичном сайтеПройден в Edge с реальным OpenAI на предыдущей версии: 0/100/80/100, публикация, отклик, ручной выбор, +10 один раз. На текущей версии с GPT-5.5 целиком не прогонялся
GPT-5.5Реальные локальные запросы на синтетике прошли для вопросов и цитат, проверки карточки и ТЗ
NVIDIAКод и mock проверены. Ключа нет (nvidia_configured: false), кнопка второго мнения в live показывает понятную ошибку
Текущая версия локально156 тестов; браузерные сценарии smoke_e2e, smoke_questions, smoke_project_letters пройдены
QR в письмахСсылка строится от APP_PUBLIC_URL; на Render он должен быть https://sana-hub-0ca1dc1.onrender.com
Постоянный диск на Render и доступность весь период судействаНе подтверждены. Данные на публичном сайте считайте временными; QR-проверка писем требует постоянной базы

Ограничения, которые мы знаем:

  • Рейтинг измеряет полноту подтверждённого описания, а не его правдивость или качество.
  • Совпадение цитаты не доказывает, что поле заполнено по смыслу. Результат проверяет человек. Mock переносит текст ответов в поля, но не разбирает его.
  • Роли открыты для демо: нет аутентификации и изоляции компаний. В разделе вопросов и писем серверные сессии и проверки прав настоящие, но выбрать можно любого учебного пользователя, включая модератора. Используйте только учебные данные.
  • Письмо — учебный документ: нет проверки личности подписанта и электронной подписи.
  • Уведомления только внутри приложения, без email и мессенджеров.
  • SQLite и лимит вызовов рассчитаны на один процесс.
  • Нет загрузки файлов, чата, календаря и полного трекера. У проекта один проверяемый этап. Ввод — только текст.
  • Рекомендации задач и поиск похожих вопросов сравнивают слова, а не смысл.

Команда и раскрытие

  • Использованные библиотеки, модели, шрифты, данные и заготовки перечислены в docs/DISCLOSURE.md.
  • Ход работы по часам: docs/PROGRESS.md.
  • Вклад Codex: docs/CODEX_LOG.md.
  • Codex и Claude использовались как инструменты разработки. Продуктовая AI-функция — только описанная выше.
  • Деплой и обновление образа: docs/DEPLOY.md.
  • Репозиторий: BAITC-Hacks/hack-a2928c88-hackai.
Звёзды
⭐ 0
Форки
0
Язык
Python
Последний push
в прошлом месяце
Коммиты
58
Авторы
5
Файлы
271
Ветки
6

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

Арман 37Nursaule 10Arman Zhetessov 5Aidana 5Айдана 1

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

  • 2026-09-23 17:57docs: mark full feature set as deployed on RenderАрман
  • 2026-09-23 17:54[codex] Record PR6 validation and deployment imageАрман
  • 2026-09-23 17:53[codex] Merge PR #6: card questions and recommendation lettersArman Zhetessov
  • 2026-09-23 17:49[codex] Align recommendation QR default with local app portNursaule
  • 2026-09-23 17:46[codex] Integrate latest main and shared AI configurationNursaule
  • 2026-09-23 17:44[codex] Add card Q&A and verifiable project recommendation lettersNursaule
  • 2026-09-23 17:39[codex] Document GPT-5.5 image and tester handoffАрман
  • 2026-09-23 17:38[codex] Upgrade to GPT-5.5 and add independent NVIDIA reviewАрман
Все коммиты (58)
  • 2026-09-23 17:27docs: restructure README for jury reviewАрман
  • 2026-09-23 17:19[codex] checkpoint 4: Merged conditions and approved specifications; 78 tests; verified Docker PDFАрман
  • 2026-09-23 17:17[codex] Record verified Docker image after PR integrationАрман
  • 2026-09-23 17:14[codex] Merge PR #5: approved specifications and PDFArman Zhetessov
  • 2026-09-23 17:13[codex] Integrate specifications with stages and condition historyАрман
  • 2026-09-23 17:08[codex] Merge PR #4: compare published proposal conditionsArman Zhetessov
  • 2026-09-23 17:03[codex] add business-approved AI specifications and selected-idea PDF exportAidana
  • 2026-09-23 17:03[codex] Document verified stage image for RenderАрман
  • 2026-09-23 17:01[codex] Add saved-card recovery and verifiable stage acceptanceАрман
  • 2026-09-23 16:56[codex] compare proposal snapshots with published task conditionsNursaule
  • 2026-09-23 16:34[codex] document reviewed card workflow deployment imageАрман
  • 2026-09-23 16:33[codex] add evidence-based card review and catalog readiness forecastsАрман
  • 2026-09-23 16:21Merge pull request #3 from BAITC-Hacks/team/catalog-uiArman Zhetessov
  • 2026-09-23 16:19[codex] checkpoint 3: Redesign, searchable catalog, 413 synthetic tasks and verified Docker imageАрман
  • 2026-09-23 16:16[codex] reconcile catalog improvements with frontend redesignNursaule
  • 2026-09-23 16:09[codex] update README and document catalog integration tasksАрман
  • 2026-09-23 15:56Merge pull request #2 from BAITC-Hacks/team/frontend-redesignArman Zhetessov
  • 2026-09-23 15:51Import supplied Sana frontend redesign and supporting API changesAidana
  • 2026-09-23 15:50[codex] show versioned catalog readiness insights and reviewNursaule
  • 2026-09-23 15:46[codex] add catalog search pagination and draft protectionNursaule
  • 2026-09-23 15:43Merge remote-tracking branch 'origin/main' into team/catalog-uiNursaule
  • 2026-09-23 15:29[codex] record expanded dataset verification and deployment imageАрман
  • 2026-09-23 15:25[codex] merge reviewed business UI updates with expanded synthetic dataАрман
  • 2026-09-23 15:24[codex] add 400 synthetic tasks and preserve records on seed upgradesАрман
  • 2026-09-23 15:11[codex] integrate TASK-01 business UI reliabilityAidana
  • 2026-09-23 15:10[codex] merge latest main and preserve both progress recordsAidana
  • 2026-09-23 15:09[codex] verify full live OpenAI flow on public RenderАрман
  • 2026-09-23 15:09[codex] prevent lost business input and stale confirmationsAidana
  • 2026-09-23 14:59[codex] document full UI image and live Render configurationАрман
  • 2026-09-23 14:58[codex] checkpoint 2: Live OpenAI and full local UI flow verified; Render update pendingАрман
  • 2026-09-23 14:54[codex] fix catalog prototype validation and industry filtersNursaule
  • 2026-09-23 14:52[codex] add live OpenAI probe and review business UIАрман
  • 2026-09-23 14:52[codex] integrate reviewed business UI for end-to-end verificationАрман
  • 2026-09-23 14:49[codex] split teammate assignments into separate filesАрман
  • 2026-09-23 14:47[codex] assign focused follow-up tasks for both frontend developersАрман
  • 2026-09-23 14:43[codex] record verified public Render deploymentАрман
  • 2026-09-23 14:32[codex] verify full case and prepare private image deploymentАрман
  • 2026-09-23 14:25T-001: business screen (business.js, business.css)Айдана
  • 2026-09-23 14:21[codex] verify catalog in browser and document Render deploymentАрман
  • 2026-09-23 14:17[codex] integrate reviewed team catalog UIАрман
  • 2026-09-23 14:17[codex] verify deployed container and preserve proposal conditionsАрман
  • 2026-09-23 14:13[codex] checkpoint 1: API and SQLite verified; UI integration and public deploy pendingАрман
  • 2026-09-23 13:55feat: add catalog and team proposal UINursaule
  • 2026-09-23 13:54[codex] Document project status setup and verification in READMEАрман
  • 2026-09-23 13:49[codex] Save track research architecture and split frontend tasksАрман
  • 2026-09-23 13:40[codex] Add AI Sana idea review and tested readiness foundationАрман
  • 2026-09-23 10:35revert: remove imported harness and CI workflowАрман
  • 2026-09-23 10:33ci: pin Python 3.12 for test stepАрман
  • 2026-09-23 10:33ci: build and publish Docker image to GHCR for RenderАрман
  • 2026-09-23 10:26chore: import pre-built harness (disclosed in docs/DISCLOSURE.md), track TBDАрман
Структура репозитория (271 файлов)
.dockerignore
.env.example
.gitignore
AGENTS.md
Dockerfile
README.md
app/__init__.py
app/ai_config.py
app/community.py
app/insights.py
app/letter_pdf.py
app/llm.py
app/main.py
app/project_letters.py
app/question_suggestion.py
app/questions.py
app/rating.py
app/recommend.py
app/review.py
app/schemas.py
app/spec_pdf.py
app/spec_routes.py
app/specification.py
app/stages.py
app/static/api.js
app/static/business.css
app/static/business.js
app/static/catalog.css
app/static/catalog.js
app/static/community.css
app/static/community.js
app/static/index.html
app/static/project-letters.css
app/static/project-letters.js
app/static/questions.js
app/static/specification.css
app/static/specification.js
app/static/stages.js
app/static/ui.css
app/store.py
context/README.md
context/RULES.md
context/ideas/track-01.md
context/ideas/track-02.md
context/ideas/track-03.md
context/ideas/track-04.md
context/ideas/track-05.md
context/ideas/track-06.md
context/ideas/track-07.md
context/ideas/track-08.md
context/ideas/track-09.md
context/ideas/track-10.md
context/samples/track-01/eval/kz-term-errors.json
context/samples/track-01/kz-clean.txt
context/samples/track-01/kz-term-errors.txt
context/samples/track-02/appeal-complete.txt
context/samples/track-02/appeal-incomplete.txt
context/samples/track-02/eval/appeal-incomplete.json
context/samples/track-03/eval/geo-report-p12.json
context/samples/track-03/geo-report-p12.txt
context/samples/track-04/eval/phish-bank.json
context/samples/track-04/legit-notice.eml
context/samples/track-04/phish-bank.eml
context/samples/track-05/discharge-errors.txt
context/samples/track-05/eval/discharge-errors.json
context/samples/track-06/eval/smeta-vs-vor.json
context/samples/track-06/smeta-vs-vor.csv
context/samples/track-07/eval/transactions.json
context/samples/track-07/transactions.csv
context/samples/track-08/eval/quiz-errors.json
context/samples/track-08/quiz-errors.txt
context/samples/track-09/eval/field-ndvi.json
context/samples/track-09/field-ndvi.csv
context/samples/track-10/eval/project-assets.json
context/samples/track-10/project-assets.csv
context/tracks/track-01.md
context/tracks/track-02.md
context/tracks/track-03.md
context/tracks/track-04.md
context/tracks/track-05.md
context/tracks/track-06.md
context/tracks/track-07.md
context/tracks/track-08.md
context/tracks/track-09.md
context/tracks/track-10.md
coord/LOG.md
coord/TASKS.md
coord/agents.json
coord/council/1325-idea/r0-claude.prompt.md
coord/council/1325-idea/r0-codex.prompt.md
coord/council/1325-idea/r0-gemini.prompt.md
coord/council/1327-idea/DECISION.md
coord/council/1327-idea/IDEA-auto-original.md
coord/council/1327-idea/LEAD_AUDIT.md
coord/council/1327-idea/decision0.md
coord/council/1327-idea/decision1.md
coord/council/1327-idea/r0-claude.md
coord/council/1327-idea/r0-claude.prompt.md
coord/council/1327-idea/r0-codex.md
coord/council/1327-idea/r0-codex.prompt.md
coord/council/1327-idea/r0-gemini.md
coord/council/1327-idea/r0-gemini.prompt.md
coord/council/1327-idea/r1-claude.extraction-original.txt
coord/council/1327-idea/r1-claude.md
coord/council/1327-idea/r1-claude.prompt.md
coord/council/1327-idea/r1-codex.md
coord/council/1327-idea/r1-codex.prompt.md
coord/council/1327-idea/r1-gemini.md
coord/council/1327-idea/r1-gemini.prompt.md
coord/council/1327-idea/r2-claude.md
coord/council/1327-idea/r2-claude.prompt.md
coord/council/1327-idea/r2-codex.md
coord/council/1327-idea/r2-codex.prompt.md
coord/council/1327-idea/r2-gemini.md
coord/council/1327-idea/r2-gemini.prompt.md
coord/council/1327-idea/synth0.prompt.md
coord/council/1327-idea/synth1.prompt.md
coord/council/1327-idea/vote0-claude.prompt.md
coord/council/1327-idea/vote0-codex.prompt.md
coord/council/1327-idea/vote0-gemini.prompt.md
coord/council/1327-idea/vote1-claude.md
coord/council/1327-idea/vote1-claude.prompt.md
coord/council/1327-idea/vote1-codex.md
coord/council/1327-idea/vote1-codex.prompt.md
coord/council/1327-idea/vote1-gemini.prompt.md
coord/council/1343-arch/DECISION.md
coord/council/1343-arch/decision0.md
coord/council/1343-arch/r0-claude.md
coord/council/1343-arch/r0-claude.prompt.md
coord/council/1343-arch/r0-codex.md
coord/council/1343-arch/r0-codex.prompt.md
coord/council/1343-arch/r1-claude.md
coord/council/1343-arch/r1-claude.prompt.md
coord/council/1343-arch/r1-codex.md
coord/council/1343-arch/r1-codex.prompt.md
coord/council/1343-arch/synth0.prompt.md
coord/council/1343-arch/vote0-claude.prompt.md
coord/council/1343-arch/vote0-codex.prompt.md
coord/council/1355-plan/DECISION.md
coord/council/1355-plan/decision0.md
coord/council/1355-plan/r0-claude.md
coord/council/1355-plan/r0-claude.prompt.md
coord/council/1355-plan/r0-codex.md
coord/council/1355-plan/r0-codex.prompt.md
coord/council/1355-plan/r1-claude.md
coord/council/1355-plan/r1-claude.prompt.md
coord/council/1355-plan/r1-codex.md
coord/council/1355-plan/r1-codex.prompt.md
coord/council/1355-plan/synth0.prompt.md
coord/council/1355-plan/vote0-claude.prompt.md
coord/council/1355-plan/vote0-codex.prompt.md
coord/notes/Q-132557-gemini.md
coord/notes/Q-132557-gemini.prompt.md
coord/notes/Q-132558-claude.md
coord/notes/Q-132558-claude.prompt.md
coord/notes/Q-132808-gemini.md
coord/notes/Q-132808-gemini.prompt.md
coord/notes/Q-132813-claude.md
coord/notes/Q-132813-claude.prompt.md
coord/notes/Q-133528-claude.md
coord/notes/Q-133528-claude.prompt.md
coord/notes/Q-145556-claude.md
coord/notes/Q-145556-claude.prompt.md
coord/notes/Q-150332-claude.md
coord/notes/Q-150640-claude.md
coord/notes/Q-152211-claude.md
coord/notes/Q-152211-claude.prompt.md
coord/notes/Q-152536-claude.md
coord/notes/Q-152536-claude.prompt.md
coord/notes/T-008-claude.md
coord/notes/T-008-claude.prompt.md
coord/notes/case-pdf-audit.md
coord/notes/live-ai-e2e.md
coord/notes/render-smoke.md
coord/notes/research-07.md
coord/notes/review-T-001.md
coord/notes/review-T-002.md
coord/notes/scoring-07.md
coord/notes/track-analysis.md
coord/tasks/T-001.result.md
coord/tasks/T-002-QA-LETTERS.result.md
data/samples/ai-sana-synthetic.json
data/samples/synthetic-extra-source.json
docs/ARCHITECTURE.md
docs/CASE-official.pdf
docs/CASE-official.txt
docs/CASE.md
docs/CODEX_LOG.md
docs/COMMUNITY.md
docs/DEMO_SCRIPT.md
docs/DEPLOY.md
docs/DISCLOSURE.md
docs/EVAL-REVIEW-BASELINE.md
docs/EVAL-REVIEW.md
docs/IDEA.md
docs/INNOVATION-REVIEW.md
docs/NEXT-STEPS-REVIEW.md
docs/PROGRESS.md
docs/REVIEW-CONTRACT.md
docs/TASK-01-BUSINESS.md
docs/TASK-02-CATALOG.md
docs/TASK-02-CONDITIONS.md
docs/TASK-02-INNOVATION.md
docs/TASK-02-PR3-MERGE.md
docs/TEAM.md
docs/TECHNICAL-SPEC.md
docs/TESTER-SCENARIOS.md
docs/TRACKS_LIVE.md
docs/TRACKS_PARSED.md
docs/case-detail-probe.json
docs/cases-probe.json
docs/img/business-card.png
docs/img/catalog.png
docs/references/REGLAMENT.local-snapshot.md
docs/references/RULES-live-extract.txt
docs/references/TRACKS.local-snapshot.md
docs/references/rule-1b8.txt
docs/references/rule-1b9.txt
docs/references/rule-1ba.txt
docs/references/rule-1bb.txt
docs/references/rule-1bc.txt
docs/tracks-api.json
docs/tracks-live/tracks/07-education-ai-sana.md
docs/tracks_raw/06d09878-1838-4118-acb0-37573709bac8.json
docs/tracks_raw/0af1eea3-b514-411e-a29f-684f581d4f2c.json
docs/tracks_raw/3b54092a-6737-40fc-956d-b16dbefb9a0d.json
docs/tracks_raw/5ada35d0-bb34-4896-9c8a-bcee60fe599d.json
docs/tracks_raw/66c86f78-5afe-4432-9d75-0d188d963802.json
docs/tracks_raw/70deb911-4ba6-46f9-aa3f-4a616edb4fb7.json
docs/tracks_raw/74a8ded9-8f84-47ef-bd1b-4ee149a981b1.json
docs/tracks_raw/850571ee-bdbb-4386-94c4-fc5e55e174ab.json
docs/tracks_raw/bac534b7-cb12-41b3-bf0f-cf06031660b9.json
docs/tracks_raw/c34ad17e-8366-452d-a47a-04fd55d24639.json
docs/tracks_raw/d455af96-7180-4cce-934b-91061b3fb363.json
docs/tracks_raw/f2c8ee70-8228-4bc5-9b97-6f00565be930.json
prompts/lead.md
render.yaml
requirements-dev.txt
requirements.txt
scripts/agents.py
scripts/build-image.ps1
scripts/check_ai.py
scripts/checkpoint.ps1
scripts/eval_review.py
scripts/fetch_public_chunks.py
scripts/generate_synthetic_bulk.py
scripts/prepare_demo_data.py
scripts/prepare_track_review.py
scripts/smoke_catalog.py
scripts/smoke_e2e.py
scripts/smoke_nvidia_review.py
scripts/smoke_project_letters.py
scripts/smoke_questions.py
scripts/smoke_review.py
scripts/smoke_stages.py
scripts/smoke_url.py
templates/IDEA_SCORING.md
tests/test_agent_answers.py
tests/test_api.py
tests/test_catalog_ui_api.py
tests/test_community.py
tests/test_demo_data.py
tests/test_llm.py
tests/test_nvidia_review.py
tests/test_project_letters.py
tests/test_question_suggestion.py
tests/test_questions.py
tests/test_rating.py
tests/test_review.py
tests/test_specification.py
tests/test_stages.py
Ветки (6)

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

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

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