AAYMA
RU
Войти

That's La Peace (ContractorPicker)

Локальное веб-приложение подбора до 3 подрядчиков по городу, дате, формату, категории и бюджету, с фактическими объяснениями и проверенными советами…

Доведённый продукт
Команда «That's La Peace» 17💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: That's La Peace
Кейс HackAlem.ai: Креативные индустрии — Firebird
Стадия: Доведённый продукт

Задача кейса: «#79-lite»: подобрать до 3 подрядчиков для мероприятия и объяснить выбор

Суть

Локальное веб-приложение подбора до 3 подрядчиков по городу, дате, формату, категории и бюджету, с фактическими объяснениями и проверенными советами сменить дату или бюджет при пустой выдаче. Поставляется как портативный Windows exe.

Как устроено

CSV нормализуется и загружается в память при старте FastAPI. Обязательные фильтры исключают занятых и не подходящих по условиям подрядчиков. Ранжирование лексическое: основы слов формата и категории ищутся в описании, при равенстве решают цена и ID. Если выдача пустая, система перебирает ближайшую подходящую дату и минимальный достаточный бюджет через те же фильтры. Объяснения собираются детерминированно из фактов профиля, LLM во время работы не вызывается.

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

  • детерминированные фильтры
  • лексическое ранжирование по основам слов
  • поиск альтернативной даты и бюджета
  • PyInstaller portable exe
  • i18n RU/KK/EN

Особенности

Жюри запускает всё одним двойным щелчком по START.cmd: в portable/ContractorPicker.exe (около 15 МБ) уже лежат Python, зависимости и данные. Интеграционные релизы шли каждые 45 минут, на каждый сохранён JSON с результатами проверок (browser, UX, security, secret-scan). Объяснения дополнительно прошли ручную проверку людьми.

Стек

Python 3.12 · FastAPI · Pydantic · Uvicorn · HTML/CSS/JS (ES modules) · PyInstaller


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

README

README.md

That's La Peace

Версия для жюри и сдачи — только ветка main. В ней собран итоговый проект обоих участников: приложение, готовый запуск, данные и документация. Дополнительные ветки dev-dinmukhammed, dev-ilyas, dev-zoro и integration сохранены как история совместной разработки; они не являются отдельными версиями для оценки. Скачивайте и запускайте именно main.

HackAlem AI · кейс #79-lite · трек 06 «Креативные индустрии»

Организатору мероприятия нужно быстро найти подрядчиков, которые подходят по условиям и свободны на выбранную дату. Просматривать весь каталог и вручную сравнивать описания неудобно.

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

УчастникОтветственность
DinmukhammedBackend, данные, подбор и объяснения, интеграция и публикация общей версии
IlyasFrontend, дизайн, демо, капитан команды и подача решения

Запуск для жюри — один двойной щелчок

Windows 10/11, 64-разрядная x64. Получите полную папку этой версии проекта из официального репозитория (Code → Download ZIP и распаковать, либо Git clone). Откройте START.cmd двойным щелчком. Или выполните одну команду в PowerShell из папки проекта:

.\START.cmd

Браузер откроется сам после готовности сервера. Python, Git, Node.js, установка библиотек, аккаунт приложения и API-ключи для этого запуска не нужны: интерпретатор, зависимости, интерфейс и все 66 профилей включены в portable/ContractorPicker.exe. После получения папки основной интерфейс и подбор работают без интернета. Первое получение проекта требует доступа к репозиторию; его права не заменяются запуском приложения. Не запускайте файл прямо внутри ZIP — сначала распакуйте папку.

  • Адрес появится в окне запуска: обычно http://127.0.0.1:8000/. Если порт занят, приложение само выберет свободный и откроет свой адрес.
  • Если браузер не открылся, скопируйте напечатанный адрес. Например, на http://127.0.0.1:8000/api/health (подставьте фактический порт) должны быть status: ok и dataset_count: 66.
  • Остановка: Ctrl+C в окне запуска или закрыть это окно. Повтор: снова открыть START.cmd; никаких миграций, паролей или настройки нет. Окно сервера должно оставаться открытым, пока вы смотрите демо.
  • Логи видны в этом же окне. При ошибке запуска оно останется открытым с сообщением. Если файл отсутствует — получите полную папку проекта вместе с portable/.
  • Пакет не подписан цифровой подписью. Если политика рабочего компьютера запрещает его запуск, используйте установку из исходников ниже; отключать защиту не требуется.
  • На macOS/Linux готовый Windows-файл не работает: нужен запуск исходников с Python 3.12 (создание окружения python3.12 -m venv .venv, далее .venv/bin/python вместо Windows-пути). Эти ОС в текущей приёмке не проверялись.

Приложение доступно только на компьютере проверяющего, без публичного сервера команды. Обязательных переменных окружения, .env, внешней базы, скачивания моделей и личных секретов нет. Лицензии и сведения о сборке — в portable. Проверенная среда: Windows 11 Pro 64-bit 10.0.26200, AMD Ryzen 7 4800H, около 16 ГБ RAM; это среда проверки, не измеренный минимум.

Запуск из исходников — запасной вариант

Нужен Python 3.12; Git нужен только для команды clone. Можно вместо неё распаковать архив проекта и открыть PowerShell в его папке. Команды для новой копии опубликованной main, Windows PowerShell:

git clone --branch main --single-branch https://github.com/BAITC-Hacks/hack-95a1b8c8-that-s-la-peace.git
Set-Location hack-95a1b8c8-that-s-la-peace
py -3.12 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
.\.venv\Scripts\python.exe run.py

Откройте http://127.0.0.1:8000/ после сообщения Uvicorn о запуске. Активация окружения и изменение ExecutionPolicy не нужны. Если py отсутствует, создайте окружение установленным Python 3.12 по полному пути: & 'C:\путь\к\Python312\python.exe' -m venv .venv — замените шаблон реальным путём.

Для первого скачивания проекта и зависимостей нужен интернет. Затем основной интерфейс и подбор работают локально: один Python-сервер, без Node.js, сборки frontend, ключей и платных аккаунтов. Доступ к официальному GitHub-репозиторию определяется его настройками.

  • Проверка готовности: http://127.0.0.1:8000/api/health → status: ok, dataset_count: 66.
  • Остановка: Ctrl+C. Повторный запуск — той же командой, миграций нет.
  • Если порт занят: .\.venv\Scripts\python.exe run.py --port 8002, затем откройте http://127.0.0.1:8002/. По умолчанию сервер доступен только на этом компьютере.
  • Для фиксации проверяемой версии выполните git rev-parse HEAD; результаты отчётов относятся к конкретному SHA.

Проверенный пакет: около 15 МБ; запуск из чистой папки занял 3,1 с, повторный — 1,8 с на указанной машине. На другом компьютере время может отличаться. Последняя проверка пакета.

Демо за несколько минут

Язык подрядчика и длительность оставьте пустыми. Выбирайте значения из списков; дату можно ввести как 15.10.2026 или выбрать в календаре.

СценарийГород / категория / форматДата / бюджетОжидаемый результат по каталогу
Плотная категорияАлматы / Ведущий / корпоратив15.10.2026 / 1 000 000 ₸3 карточки из 6 подходящих, конкретные отличия в объяснениях
Изменение только датыТе же условия16.10.2026 / 1 000 000 ₸3 карточки из 4, состав выдачи изменяется из-за занятости
Редкая категорияАлматы / Флорист / свадьба15.10.2026 / 1 000 000 ₸2 карточки и объяснение, почему их меньше трёх
Все занятыАстана / Флорист / свадьба15.10.2026 / 1 000 000 ₸Пустой результат с причиной; предложение перейти на 14 октября
Недостаточный бюджетАлматы / Ведущий / корпоратив15.10.2026 / 1 ₸Пустой результат и проверенное предложение увеличить бюджет
В городе нет категорииЗарубежье / Ведущий / корпоратив15.10.2026 / 1 000 000 ₸Отдельное сообщение об отсутствии категории

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

Число под днём календаря — справка о свободных профилях выбранной группы до проверки бюджета, языка и часов. Поэтому оно может быть больше числа подходящих в результате: для первого примера календарь показывает 7 свободных, сервер оставляет 6 и выводит 3.

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

  • Обязательные фильтры города, категории, даты, формата и начальной цены; необязательные язык и длительность. Занятые подрядчики исключаются, включая площадки.
  • До трёх карточек в стабильном порядке: имя, категория, город, цена «от», 1–2 предложения объяснения, исходный фрагмент описания и признаки происхождения данных.
  • Различимые состояния: подобрали; в городе нет категории; кандидаты есть, но не подходят. При выдаче менее трёх карточек показана причина. Сетевая ошибка отображается отдельно.
  • Ближайшая подходящая дата и минимальный достаточный начальный бюджет проверяются теми же фильтрами. Каждый совет меняет только одно условие; неподтверждённые советы не показываются.
  • Компактная адаптивная форма: поиск и выбор в одном поле списка (combobox), ввод бюджета с разделителями, единое поле даты с календарём, дополнительные параметры и настройки в раскрываемых блоках.
  • Переключение интерфейса RU / KK / EN, управление списками с клавиатуры, необязательный автоподбор, справка о ценах и доступности. Исходные описания и объяснения остаются русскими с явной подписью; сообщения подбора и советы также пока на русском.

Архитектура и роль AI

CSV → нормализованный каталог → проверка запроса → обязательные фильтры
    → детерминированное ранжирование → до 3 карточек с объяснениями
    → при пустой выдаче: проверка альтернатив даты и бюджета

Backend: Python 3.12, FastAPI, Pydantic, Uvicorn. Каталог проверяется и загружается в память при старте. Сначала применяются ограничения, затем учитываются тематические основы слов формата и категории в описании; при равенстве — начальная цена и стабильный ID. Это прозрачное лексическое соответствие, а не рейтинг качества подрядчика. Одинаковый запрос к тому же каталогу даёт одинаковый порядок.

Frontend: HTML/CSS/JavaScript без сборки, раздаётся тем же сервером и вызывает относительные /api/…. Справочные агрегаты catalog-guide.json используются только при совпадении SHA каталога; они не добавляют профили и не заменяют серверный подбор.

Codex участвовал в разработке кода, документации, автоматических проверок и интеграции под управлением команды. Во время подбора приложение не вызывает LLM, не обучает модель и не отправляет запрос во внешний AI-сервис. Объяснения формируются детерминированно из условий и фактов профиля. Автоматические проверки и человеческая оценка отмечаются отдельно.

Подробнее: архитектура, API v1, вклад и ход работы, зависимости.

Данные и честные ограничения

Источник — неизменённый выданный CSV: 66 анонимизированных профилей, включая 13 исходных синтетических; у 8 заполнен город, у 18 — начальная цена. Эти признаки передаются в карточках. Команда дополнительных профилей не добавляла. Происхождение и SHA-256.

  • Календарь покрывает 23.09.2026–31.12.2026 включительно. Даты вне этого окна отклоняются: занятость неизвестна. Изменение CSV требует перезапуска и меняет dataset_version.
  • Цена «от» — нижняя граница из каталога, не итоговая стоимость заказа. Стоимость расширенного состава или пакета нужно уточнять; отсутствие занятой даты не подтверждает реальную бронь.
  • Пустой max_hours означает неприменимое ограничение присутствия. Незаданные язык и часы не считаются пожеланиями пользователя. Рекламное описание не подтверждает качество, опыт или рейтинг.
  • Небольшой каталог и лексические словари ограничивают полноту рекомендаций. Для описаний без конкретики используются известные структурированные факты; недостающие сведения не придумываются.
  • Переведён интерфейс; исходные описания, объяснения, сообщения подбора и советы пока русские. Бюджет в браузере — целое от 1 до 9 007 199 254 740 991; это граница точного числа JavaScript, не серверный предел цены.
  • Публичный интернет-деплой пока не выполнен. Бронирование, заявки, оплата, аккаунты и уведомления подрядчика не входят в текущий кейс.

Обязательных переменных окружения нет. Основной сервер ограничивает тело запроса 16 КиБ, возвращает понятный 413 при превышении и раздаёт только разрешённые публичные ресурсы. Защитные заголовки и CSP описаны в контракте. Служебная документация http://127.0.0.1:8000/docs использует Swagger из внешнего CDN; основному UI/API он не нужен.

Автоматические проверки из исходников

Для обычной проверки готового Windows-пакета достаточно таблицы демо и адреса готовности выше. Следующие команды — дополнительные проверки разработчика: сначала выполните установку из исходников, затем откройте второй PowerShell из корня проекта, пока сервер работает:

.\.venv\Scripts\python.exe scripts/smoke.py

Это настоящие HTTP-запросы: плотная категория на двух датах, повторяемость, редкая категория, оба пустых исхода и повторное применение советов даты/бюджета. Скрипт выводит результат и измеренное время. Для другого порта добавьте --base-url http://127.0.0.1:8002.

Автоматические проверки backend, контракта, данных, объяснений и HTTP-ограничений:

.\.venv\Scripts\python.exe -m pip install -r requirements-dev.txt
.\.venv\Scripts\python.exe -m pytest -q

Для проверки frontend дополнительно нужны Node.js; для браузерных сценариев — Playwright 1.62.1 и Edge либо путь BROWSER_EXECUTABLE. Обычный запуск приложения их не требует.

node tests/ui/api.test.mjs
node tests/ui/server.test.mjs

Для браузерных проверок установите Playwright в отдельную папку инструментов, задайте PLAYWRIGHT_MODULE полным путём к её node_modules/playwright и UI_CHECK_OUTPUT путём для снимков вне Git. При работающем сервере:

node tests/ui/browser-check.cjs http://127.0.0.1:8000
node tests/integration/browser-live.cjs http://127.0.0.1:8000
node tests/ui/ux-check.cjs http://127.0.0.1:8000

Первый браузерный сценарий использует явно обозначенные синтетические ответы; два следующих проверяют реальный UI/API и каталог. Условия, результаты и конкретные версии смотрите в TEST_REPORT, интеграционных отчётах и FINAL_COMPLIANCE_REPORT. Каждый отчёт относится к указанной в нём версии.

Как создавался продукт

Проект собран 23 сентября 2026 года для одного кейса организаторов. Ниже — краткая история решений; точные коммиты, исполнители проверок и результаты сохранены в PROGRESS. Записи прежних этапов относятся к своим версиям.

ЭтапЧто появилось и зачем
Требования и основаРазобрали кейс и 66 профилей, сохранили исходный CSV, разделили backend и frontend, зафиксировали API для параллельной работы.
Первый рабочий подборДобавили загрузку и проверку данных, жёсткие фильтры, стабильный top-3, причины пустой выдачи и проверенные советы; затем объединили API с интерфейсом.
Качество объясненийУточнили выбор цельных фактов вместо рекламы, сохраняли исходные выдержки и оговорки о цене состава; реализовали конкретные замечания Dinmukhammed после просмотра примеров.
Удобство и устойчивостьIlyas подготовил компактный интерфейс, поиск в списках, календарь, RU/KK/EN и автоподбор; добавлены обработка ошибок, защита HTTP, проверки настоящего UI/API и чистого запуска.
Подготовка для жюриПодготовлены сценарии демо, документация, START.cmd и автономная Windows-сборка, чтобы основной запуск не требовал установки среды разработки. Приёмка каждой сборки фиксируется отдельно.

Код, документы и автоматические прогоны создавались с помощью Codex по поручениям участников. Человеческий просмотр объяснений, техническая проверка агентом и подача капитаном — разные действия; одно не считается доказательством другого. Распределение ответственности указано в начале README, подробности передачи — в handoff Dinmukhammed и handoff Ilyas.

Технологии и инструменты

ЧастьИспользовано
Подбор и APIPython 3.12, FastAPI, Pydantic, Uvicorn; точные версии — requirements.txt.
ИнтерфейсHTML, CSS, JavaScript ES modules; собственные списки с поиском, календарь и переводы интерфейса, без обязательной сборки Node.js.
ДанныеCSV в репозитории, нормализованный каталог в памяти и SHA-256 версии; внешняя БД сейчас не используется.
Автоматические проверкиpytest/httpx, HTTP smoke, Node.js, Playwright и Edge; тестовые зависимости, результаты привязаны к проверенной версии.
Автономный Windows-запускSTART.cmd, Python launcher и PyInstaller; интерпретатор, зависимости и ресурсы упакованы в EXE. Состав, сборка и лицензии.
Совместная разработкаGit/GitHub, отдельные рабочие ветки, согласованный API, передача готовых изменений и общая интеграция; Codex — инструмент разработки.

Происхождение сторонних компонентов и предварительных материалов раскрыто в THIRD_PARTY. Наличие инструмента в этой таблице не означает, что его нужно устанавливать для запуска готового EXE.

Как планируем масштабировать

Это план развития, не описание уже реализованных возможностей. Для 66 записей достаточно одного процесса и каталога в памяти.

  1. Сначала измерения. Проверить больший разрешённый каталог, параллельные запросы, время ответа и потребление памяти; определить, где возникает ограничение, сохраняя качество объяснений и повторяемость.
  2. Хранение и обновление данных. При необходимости перейти к БД с проверяемыми импортами, версиями каталога и историей изменений цен/занятости. Ответ должен относиться к одному согласованному снимку данных; происхождение и неизвестные значения сохраняются.
  3. Индексы и кеш по результатам замеров. Индексировать фактические условия поиска; кешировать по нормализованному запросу и версии каталога. При обновлении данных старый кеш перестаёт использоваться. Эти меры пока не реализованы.
  4. Рост сервиса. Только при подтверждённой нагрузке добавлять несколько процессов, общий источник данных, наблюдение за ошибками и резервное восстановление; измерять улучшение на тех же сценариях.
  5. Языковая модель — отдельный эксперимент. Возможный разбор свободного запроса или помощь с формулировками оцениваются по точности, задержке и стоимости. Жёсткие фильтры, проверяемые факты и рабочий путь без модели должны сохраняться; текущий runtime LLM не использует.

Пользовательские улучшения и приоритеты перечислены ниже; масштабирование не должно задерживать исправление понятности результата.

Дальнейшие улучшения

Идеи для следующих версий, ещё не реализованные:

  • Улучшать выбор конкретных фактов в объяснениях, особенно у фотографов и видеографов; проверять тексты по источнику и читать карточки с людьми без имён.
  • Перевести содержание карточек, сообщения подбора и советы на казахский и английский с сохранением оригинала и проверкой фактов.
  • Добавить сохранение и сравнение вариантов на устройстве, историю запросов и ссылку с параметрами поиска.
  • Дорабатывать форму, мобильное чтение, клавиатурное управление и поддержку экранных дикторов по проверке с пользователями.
  • Обновлять цены и занятость с проверкой данных, датой обновления и сохранением допустимых параметров запроса; явно отделять неизвестную доступность от свободной даты.
  • Добавить подтверждённые пакеты и состав цены, реальные портфолио и контакты с разрешением на публикацию; отзывы — только с проверяемым происхождением.
  • Разместить демо по общей ссылке с HTTPS, наблюдением за ошибками и восстановлением; проверить с другого устройства.
  • Исследовать ввод запроса обычными словами с подтверждением распознанных условий. Возможную LLM оценивать отдельно по пользе, точности, времени и стоимости, сохраняя строгие фильтры и работу без неё.
  • Измерить качество и скорость на большем реальном каталоге; добавить удобную диагностику версии приложения. Версия данных уже доступна через API.
  • Исследовать почасовую доступность только после получения реальных интервалов занятости и согласования нового контракта: нынешний каталог содержит только занятые даты. Не считать занятый день свободным на основании выдуманных часов.

Бронирование, платежи и личные кабинеты — возможный отдельный этап после проверки спроса и получения реальных данных. Приоритеты определяются пользой и результатами проверок.

Совместная работа и сдача

Опубликованная общая версия — main; backend-ветка — dev-dinmukhammed. Ветка dev-ilyas создана от принятого этапа d48a378. Последнее обновление Ilyas 04d92f2 получено из dev-zoro и включено в общую версию. Его переход с dev-zoro на другом компьютере пока не подтверждён, поэтому старая ветка временно сохранена. Общую сборку публикует Dinmukhammed, форму сдаёт капитан Ilyas. Git push сам по себе не является подачей решения.

Правила и владение файлами — AGENTS, общий план — 00_SHARED_PLAN, персональные задачи — Dinmukhammed и Ilyas. Одноразовая проверка перед личным коммитом описана в CHECKPOINT; актуальный статус и требования — STATE и COMPLIANCE.

Навигация по документации

Что нужно найтиДокумент
Исходное задание и критерии результатаCASE_REQUIREMENTS
Пайплайн, фильтры, ранжирование и границы решенияARCHITECTURE
Запросы, ответы, ошибки и совместимость клиентаAPI_CONTRACT
Источник каталога, поля и контрольная суммаДанные, CSV
История создания и вкладPROGRESS, сторонние компоненты
Автоматические проверки и точные версииTEST_REPORT, интеграционные отчёты
Предметная оценка объяснений и независимый запускEXPLANATION_REVIEW, EXPERT_CHECK
Сценарий показаDEMO
Передача частей командыDinmukhammed, Ilyas
Версии зависимостейRuntime requirements, тестовые requirements
Требования, готовность и оставшиеся действияCOMPLIANCE, FINAL_COMPLIANCE_REPORT, STATE
Правила, план и рабочие промптыAGENTS, общий план, backend, frontend
Windows-пакет и воспроизводимая сборкаportable/README, лицензии

Исторические документы сохраняют состояние на дату записи. Финальную проверяемую версию и статус подачи смотрите в итоговом отчёте; новая запись в README не заменяет фактическую проверку.

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

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

tem1rgalind 48Kvindeknedu 18

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

  • 2026-09-23 17:55docs: identify main as the sole jury submission and verify branch inclusiontem1rgalind
  • 2026-09-23 17:54docs: confirm published jury package passed final independent launchtem1rgalind
  • 2026-09-23 17:50docs: explain product history scaling plans and final jury handofftem1rgalind
  • 2026-09-23 17:49release: verify latest Ilyas update and rebuild offline jury packagetem1rgalind
  • 2026-09-23 17:47merge: include latest Ilyas price guidance and result cardstem1rgalind
  • 2026-09-23 17:47build: package verified offline Windows demo for jurytem1rgalind
  • 2026-09-23 17:44Polish price guidance and result cards for Thats La PeaceKvindeknedu
  • 2026-09-23 17:42feat: add jury launcher and restore That's La Peace nametem1rgalind
Все коммиты (66)
  • 2026-09-23 17:31docs: confirm final publication and safe branch cleanuptem1rgalind
  • 2026-09-23 17:25docs: record final verified delivery and clean installationtem1rgalind
  • 2026-09-23 17:17merge: include final Ilyas calendar clarification and clean-run evidencetem1rgalind
  • 2026-09-23 17:16feat: finalize project name and reviewer README without changing matchingtem1rgalind
  • 2026-09-23 17:16Record clean UX acceptance and researched design handoffKvindeknedu
  • 2026-09-23 17:12Clarify that calendar availability is per service, not a blocked dayKvindeknedu
  • 2026-09-23 17:11merge: integrate published Ilyas compact UI for final verificationtem1rgalind
  • 2026-09-23 17:03Clarify catalog prices and result navigation, fix Kazakh calendar labelsKvindeknedu
  • 2026-09-23 16:58Verify compact UI with current shared backend and update compliance evidenceKvindeknedu
  • 2026-09-23 16:51Merge remote-tracking branch 'origin/integration' into dev-zoroKvindeknedu
  • 2026-09-23 16:46feat(ui): simplify service selection and unify date entryKvindeknedu
  • 2026-09-23 16:45docs: record fresh browser check for 17:00 publicationtem1rgalind
  • 2026-09-23 16:44merge: future roadmap and final team handoff for 17:00tem1rgalind
  • 2026-09-23 16:43docs: add future roadmap and final coordination handofftem1rgalind
  • 2026-09-23 16:30docs: close backend audit with clean launch and final compliance evidencetem1rgalind
  • 2026-09-23 16:30merge: finalize verified backend and UX delivery documentationtem1rgalind
  • 2026-09-23 16:21merge: include verified personal checkpoint gatetem1rgalind
  • 2026-09-23 16:21feat: add safe personal checkpoint gate with guarded publicationtem1rgalind
  • 2026-09-23 16:12merge: prepare final backend security candidatetem1rgalind
  • 2026-09-23 16:12merge: integrate Ilyas verified multilingual UX packagetem1rgalind
  • 2026-09-23 16:12fix: bound HTTP bodies and verify security and explanation categoriestem1rgalind
  • 2026-09-23 16:05docs: record clean UX acceptance and current integration handoffKvindeknedu
  • 2026-09-23 15:59fix: serve approved UI resources with verified current backendKvindeknedu
  • 2026-09-23 15:57docs: record human B03 review and verified 16:15 candidatetem1rgalind
  • 2026-09-23 15:57merge: include B03 human review and integration evidencetem1rgalind
  • 2026-09-23 15:53Merge remote-tracking branch 'origin/integration' into dev-zoroKvindeknedu
  • 2026-09-23 15:53feat(ui): add searchable multilingual form and honest catalog guidanceKvindeknedu
  • 2026-09-23 15:51merge: prepare reviewed B03 candidate for 16:15tem1rgalind
  • 2026-09-23 15:51fix: apply human B03 explanation review with focused regressionstem1rgalind
  • 2026-09-23 15:27docs: record verified 15:30 integration and named workstreamstem1rgalind
  • 2026-09-23 15:24merge: align live UI regression with factual fallbacktem1rgalind
  • 2026-09-23 15:24test: verify grounded fallback and complete packages in live UItem1rgalind
  • 2026-09-23 15:22merge: include explicit composition price clarificationtem1rgalind
  • 2026-09-23 15:22fix: clarify that quoted package pricing needs confirmationtem1rgalind
  • 2026-09-23 15:19merge: prepare backend improvements for 15:30tem1rgalind
  • 2026-09-23 15:19merge: include Ilyas UI clarity and network recoverytem1rgalind
  • 2026-09-23 15:19fix: ground explanations, restrict static assets and align named workstreamstem1rgalind
  • 2026-09-23 15:15docs: prepare Ilyas rehearsal and next integration handoffKvindeknedu
  • 2026-09-23 15:15Merge remote-tracking branch 'origin/integration' into dev-zoroKvindeknedu
  • 2026-09-23 14:59feat(ui): clarify catalog and selection with recovery checksKvindeknedu
  • 2026-09-23 14:56docs: record task audit integration and independent runtime evidencetem1rgalind
  • 2026-09-23 14:55merge: combine backend task plan and teammate clean-launch evidencetem1rgalind
  • 2026-09-23 14:55docs: prioritize backend improvements and align team integrationtem1rgalind
  • 2026-09-23 14:46docs: reconcile source plans and verify integrated clean launchKvindeknedu
  • 2026-09-23 14:34test: record verified 14:45 release candidatetem1rgalind
  • 2026-09-23 14:29merge: include clearer explanations and release scheduletem1rgalind
  • 2026-09-23 14:29merge: include teammate live UI checks and evidencetem1rgalind
  • 2026-09-23 14:29refactor: shorten grounded explanations and clarify setuptem1rgalind
  • 2026-09-23 14:19fix: prefer factual explanations and establish 45-minute releasestem1rgalind
  • 2026-09-23 14:12test(ui): verify real backend flow and integration handoffKvindeknedu
  • 2026-09-23 14:07test: verify live backend and frontend integrationtem1rgalind
  • 2026-09-23 14:00docs: record clean frontend checkout verificationKvindeknedu
  • 2026-09-23 13:58merge: include tested backend from dev-dimalarptem1rgalind
  • 2026-09-23 13:58merge: include frontend from dev-zorotem1rgalind
  • 2026-09-23 13:53docs: record clean backend installation and handofftem1rgalind
  • 2026-09-23 13:53feat(frontend): add contractor picker and verified UI handoffKvindeknedu
  • 2026-09-23 13:49feat: implement deterministic contractor matching APItem1rgalind
  • 2026-09-23 13:33docs: establish shared plan and participant workstreamstem1rgalind
Структура репозитория (225 файлов)
.gitattributes
.gitignore
AGENTS.md
README.md
START.cmd
backend/__init__.py
backend/app.py
backend/catalog.py
backend/matching.py
backend/schemas.py
backend/security.py
data/README.md
data/contractors.csv
docs/API_CONTRACT.md
docs/ARCHITECTURE.md
docs/BACKEND_TASKS.md
docs/CASE_REQUIREMENTS.md
docs/CHECKPOINT.md
docs/COMPLIANCE.md
docs/DEMO.md
docs/EXPERT_CHECK.md
docs/EXPLANATION_REVIEW.md
docs/FINAL_COMPLIANCE_REPORT.md
docs/PROGRESS.md
docs/RELEASE_SCHEDULE.md
docs/STATE.md
docs/TASK_SPLIT.md
docs/TEST_REPORT.md
docs/THIRD_PARTY.md
docs/handoffs/DESIGN_PROMPT_FOR_FRIEND.md
docs/handoffs/dinmukhammed.md
docs/handoffs/ilyas.md
docs/integration/20260923-1358.md
docs/integration/20260923-1435.md
docs/integration/20260923-1458-plan.md
docs/integration/20260923-1520.md
docs/integration/20260923-1605.md
docs/integration/20260923-1620.md
docs/integration/20260923-1650.md
docs/integration/20260923-1654-ilyas.md
docs/integration/20260923-final.md
docs/integration/20260923-portable.md
docs/integration/evidence/20260923-1520-ilyas.json
docs/integration/evidence/20260923-1520-network-recovery.json
docs/integration/evidence/20260923-1520-ours.json
docs/integration/evidence/20260923-1605-ilyas.json
docs/integration/evidence/20260923-1605-network-recovery.json
docs/integration/evidence/20260923-1605-ours.json
docs/integration/evidence/20260923-1620-checkpoint.json
docs/integration/evidence/20260923-1620-clean-ilyas.json
docs/integration/evidence/20260923-1620-clean-install.json
docs/integration/evidence/20260923-1620-clean-network.json
docs/integration/evidence/20260923-1620-clean-ours.json
docs/integration/evidence/20260923-1620-clean-ux.json
docs/integration/evidence/20260923-1620-http-security.json
docs/integration/evidence/20260923-1620-ilyas.json
docs/integration/evidence/20260923-1620-network.json
docs/integration/evidence/20260923-1620-ours.json
docs/integration/evidence/20260923-1620-secret-scan.json
docs/integration/evidence/20260923-1620-ux.json
docs/integration/evidence/20260923-1620-visual-csp.json
docs/integration/evidence/20260923-1650-browser.json
docs/integration/evidence/20260923-1650-checks.json
docs/integration/evidence/20260923-1654-ilyas-browser.json
docs/integration/evidence/20260923-1654-ilyas-ux.json
docs/integration/evidence/20260923-1702-ilyas-accessibility.json
docs/integration/evidence/20260923-1702-ilyas-ux.json
docs/integration/evidence/20260923-1705-ilyas-clean-browser.json
docs/integration/evidence/20260923-1705-ilyas-clean-ux.json
docs/integration/evidence/20260923-1710-ilyas-availability.json
docs/integration/evidence/20260923-1713-ilyas-clean-ux.json
docs/integration/evidence/20260923-1736-visual-browser.json
docs/integration/evidence/20260923-1736-visual-ux.json
docs/integration/evidence/20260923-all-branches-in-main.json
docs/integration/evidence/20260923-final-559f7b7-browser.json
docs/integration/evidence/20260923-final-559f7b7-launch.json
docs/integration/evidence/20260923-final-559f7b7-pytest.xml
docs/integration/evidence/20260923-final-559f7b7-ux.json
docs/integration/evidence/20260923-final-branding.json
docs/integration/evidence/20260923-final-checks.json
docs/integration/evidence/20260923-final-clean-browser.json
docs/integration/evidence/20260923-final-clean-install.json
docs/integration/evidence/20260923-final-clean-network.json
docs/integration/evidence/20260923-final-clean-ux.json
docs/integration/evidence/20260923-final-ilyas.json
docs/integration/evidence/20260923-final-network.json
docs/integration/evidence/20260923-final-ours.json
docs/integration/evidence/20260923-final-publication-cleanup.json
docs/integration/evidence/20260923-final-published-browser.json
docs/integration/evidence/20260923-final-security.json
docs/integration/evidence/20260923-final-source.json
docs/integration/evidence/20260923-final-ux.json
docs/integration/evidence/20260923-portable-branding.json
docs/integration/evidence/20260923-portable-browser.json
docs/integration/evidence/20260923-portable-busy-port.json
docs/integration/evidence/20260923-portable-exe-smoke.json
docs/integration/evidence/20260923-portable-launch.json
docs/integration/evidence/20260923-portable-network.json
docs/integration/evidence/20260923-portable-pytest.xml
docs/integration/evidence/20260923-portable-restart.json
docs/integration/evidence/20260923-portable-ux.json
docs/integration/evidence/20260923-published-jury-browser.json
docs/integration/evidence/20260923-published-jury-receipt.json
docs/prompts/00_SHARED_PLAN.md
docs/prompts/01_DINMUKHAMMED.md
docs/prompts/02_FRIEND.md
frontend/.env.example
frontend/.gitattributes
frontend/.gitignore
frontend/AGENTS.md
frontend/README.md
frontend/api.mjs
frontend/app.mjs
frontend/catalog-guide.json
frontend/generate-guide.py
frontend/i18n.mjs
frontend/index.html
frontend/integration-test.patch
frontend/public-assets.patch
frontend/search-select.mjs
frontend/serve.mjs
frontend/styles.css
frontend/view.mjs
portable/ContractorPicker.exe
portable/README.md
portable/build-environment.lock.txt
portable/build-info.json
portable/licenses/Python-3.12.10/LICENSE.txt
portable/licenses/README.txt
portable/licenses/altgraph-0.17.5/PACKAGE-METADATA.txt
portable/licenses/altgraph-0.17.5/altgraph-0.17.5.dist-info/LICENSE
portable/licenses/annotated-doc-0.0.5/PACKAGE-METADATA.txt
portable/licenses/annotated-doc-0.0.5/annotated_doc-0.0.5.dist-info/licenses/LICENSE
portable/licenses/annotated-types-0.8.0/PACKAGE-METADATA.txt
portable/licenses/annotated-types-0.8.0/annotated_types-0.8.0.dist-info/licenses/LICENSE
portable/licenses/anyio-4.15.1/PACKAGE-METADATA.txt
portable/licenses/anyio-4.15.1/anyio-4.15.1.dist-info/licenses/LICENSE
portable/licenses/click-8.5.0/PACKAGE-METADATA.txt
portable/licenses/click-8.5.0/click-8.5.0.dist-info/licenses/LICENSE.txt
portable/licenses/colorama-0.4.6/PACKAGE-METADATA.txt
portable/licenses/colorama-0.4.6/colorama-0.4.6.dist-info/licenses/LICENSE.txt
portable/licenses/fastapi-0.141.1/PACKAGE-METADATA.txt
portable/licenses/fastapi-0.141.1/fastapi-0.141.1.dist-info/licenses/LICENSE
portable/licenses/h11-0.16.0/PACKAGE-METADATA.txt
portable/licenses/h11-0.16.0/h11-0.16.0.dist-info/licenses/LICENSE.txt
portable/licenses/idna-3.20/PACKAGE-METADATA.txt
portable/licenses/idna-3.20/idna-3.20.dist-info/licenses/LICENSE.md
portable/licenses/manifest.json
portable/licenses/packaging-26.3/PACKAGE-METADATA.txt
portable/licenses/packaging-26.3/packaging-26.3.dist-info/licenses/LICENSE
portable/licenses/packaging-26.3/packaging-26.3.dist-info/licenses/LICENSE.APACHE
portable/licenses/packaging-26.3/packaging-26.3.dist-info/licenses/LICENSE.BSD
portable/licenses/pefile-2024.8.26/PACKAGE-METADATA.txt
portable/licenses/pefile-2024.8.26/pefile-2024.8.26.dist-info/LICENSE
portable/licenses/pip-25.0.1/PACKAGE-METADATA.txt
portable/licenses/pip-25.0.1/pip-25.0.1.dist-info/AUTHORS.txt
portable/licenses/pip-25.0.1/pip-25.0.1.dist-info/LICENSE.txt
portable/licenses/pydantic-2.13.5/PACKAGE-METADATA.txt
portable/licenses/pydantic-2.13.5/pydantic-2.13.5.dist-info/licenses/LICENSE
portable/licenses/pydantic_core-2.46.5/PACKAGE-METADATA.txt
portable/licenses/pydantic_core-2.46.5/pydantic_core-2.46.5.dist-info/licenses/LICENSE
portable/licenses/pyinstaller-6.22.3/PACKAGE-METADATA.txt
portable/licenses/pyinstaller-6.22.3/pyinstaller-6.22.3.dist-info/licenses/COPYING.txt
portable/licenses/pyinstaller-hooks-contrib-2026.7/PACKAGE-METADATA.txt
portable/licenses/pyinstaller-hooks-contrib-2026.7/pyinstaller_hooks_contrib-2026.7.dist-info/licenses/LICENSE
portable/licenses/pywin32-ctypes-0.2.3/PACKAGE-METADATA.txt
portable/licenses/pywin32-ctypes-0.2.3/pywin32_ctypes-0.2.3.dist-info/LICENSE.txt
portable/licenses/setuptools-84.0.0/PACKAGE-METADATA.txt
portable/licenses/setuptools-84.0.0/setuptools-84.0.0.dist-info/licenses/LICENSE
portable/licenses/setuptools-84.0.0/setuptools/_vendor/autocommand-2.2.2.dist-info/LICENSE
portable/licenses/setuptools-84.0.0/setuptools/_vendor/backports.tarfile-1.2.0.dist-info/LICENSE
portable/licenses/setuptools-84.0.0/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/licenses/LICENSE
portable/licenses/setuptools-84.0.0/setuptools/_vendor/jaraco.text-4.0.0.dist-info/LICENSE
portable/licenses/setuptools-84.0.0/setuptools/_vendor/jaraco_context-6.1.0.dist-info/licenses/LICENSE
portable/licenses/setuptools-84.0.0/setuptools/_vendor/jaraco_functools-4.4.0.dist-info/licenses/LICENSE
portable/licenses/setuptools-84.0.0/setuptools/_vendor/more_itertools-10.8.0.dist-info/licenses/LICENSE
portable/licenses/setuptools-84.0.0/setuptools/_vendor/packaging-26.0.dist-info/licenses/LICENSE
portable/licenses/setuptools-84.0.0/setuptools/_vendor/packaging-26.0.dist-info/licenses/LICENSE.APACHE
portable/licenses/setuptools-84.0.0/setuptools/_vendor/packaging-26.0.dist-info/licenses/LICENSE.BSD
portable/licenses/setuptools-84.0.0/setuptools/_vendor/platformdirs-4.4.0.dist-info/licenses/LICENSE
portable/licenses/setuptools-84.0.0/setuptools/_vendor/tomli-2.4.0.dist-info/licenses/LICENSE
portable/licenses/setuptools-84.0.0/setuptools/_vendor/wheel-0.46.3.dist-info/licenses/LICENSE.txt
portable/licenses/setuptools-84.0.0/setuptools/_vendor/zipp-3.23.0.dist-info/licenses/LICENSE
portable/licenses/setuptools-84.0.0/setuptools/config/NOTICE
portable/licenses/setuptools-84.0.0/setuptools/config/_validate_pyproject/NOTICE
portable/licenses/starlette-1.7.0/PACKAGE-METADATA.txt
portable/licenses/starlette-1.7.0/starlette-1.7.0.dist-info/licenses/LICENSE.md
portable/licenses/typing-inspection-0.4.4/PACKAGE-METADATA.txt
portable/licenses/typing-inspection-0.4.4/typing_inspection-0.4.4.dist-info/licenses/LICENSE
portable/licenses/typing_extensions-4.16.0/PACKAGE-METADATA.txt
portable/licenses/typing_extensions-4.16.0/typing_extensions-4.16.0.dist-info/licenses/LICENSE
portable/licenses/uvicorn-0.53.0/PACKAGE-METADATA.txt
portable/licenses/uvicorn-0.53.0/uvicorn-0.53.0.dist-info/licenses/LICENSE.md
portable/requirements-runtime.snapshot.txt
pytest.ini
requirements-dev.txt
requirements.txt
run.py
scripts/checkpoint.py
scripts/jury_launcher.py
scripts/smoke.py
tests/backend/conftest.py
tests/backend/test_api.py
tests/backend/test_catalog_matching.py
tests/backend/test_checkpoint.py
tests/backend/test_explanation_review_categories.py
tests/backend/test_http_security.py
tests/backend/test_jury_launcher.py
tests/backend/test_smoke.py
tests/integration/browser-live.cjs
tests/ui/api.test.mjs
tests/ui/browser-check.cjs
tests/ui/evidence/live-clean-6039476.json
tests/ui/evidence/live-fb54b42-a0918.json
tests/ui/evidence/live-integrated-1162d45.json
tests/ui/evidence/network-recovery-6f38144.json
tests/ui/evidence/ux-clean-6039476.json
tests/ui/evidence/ux-compact-working-20260923.json
tests/ui/evidence/ux-merged-20260923-1555.json
tests/ui/evidence/ux-working-20260923-1548.json
tests/ui/live-check.cjs
tests/ui/network-recovery.cjs
tests/ui/search-select.test.cjs
tests/ui/server.test.mjs
tests/ui/ux-check.cjs
Ветки (5)

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

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

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