О проекте
Команда: Ascension
Кейс HackAlem.ai: Спецтрек — Astana Innovations
Стадия: Доведённый продукт
Задача кейса: «Аким на 5 часов»: городской симулятор, распределяющий бюджет по 5 направлениям и 5 районам
Суть
Городской симулятор-тренажёр: пользователь собирает план из пяти мер в бюджете 100 у.е., видит изменение Score районов Астаны на 3D-карте, сравнивает сценарии A/B, ищет альтернативы и готовит записку; плюс кабинет акима, обращения жителей и Telegram-бот.
Как устроено
Серверное расчётное ядро на Node.js по синтетической модели кейса (data/city.json) считает Score районов с учётом эффектов мер и синергии сочетаний (например M10+M12), критических показателей и остатка бюджета. Поиск альтернатив перебирает замены одного решения в Web Worker (181 замена, 117 допустимых) с возможностью закрепить меры, итог перепроверяется сервером. Карта на MapLibre с 3D, «текст → пять допустимых мер» через AI с привязкой чисел к фактам симулятора; без ключа — расчётное объяснение. Публичное развёртывание на Cloudflare Workers с Durable Object для реестра обращений.
Ключевые решения
- сценарное моделирование Score районов
- эффекты синергии мер
- локальный поиск замены одной меры
- сравнение сценариев A/B
- grounding AI-объяснений на фактах расчёта
Метрики
Score 52,56 → 56,54 на официальном примере (95/100 бюджета, 0 критических показателей); альтернатива даёт 57,21
Особенности
Контрольный сценарий с точными ожидаемыми значениями Score для жюри, локальный перебор альтернатив в Web Worker с серверной перепроверкой, публичное демо на Cloudflare и расширение до полноценного кабинета акима с обращениями жителей.
Стек
Node.js 24 · MapLibre · Cloudflare Workers · Durable Objects · Docker Compose · Caddy · systemd · Telegram Bot · GitHub Actions
Модели
NVIDIA AI
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-0c0b9665-ascension.
README
README.mdАким на 5 часов · Ascension
«Аким на 5 часов» — тренажёр для выбора городских решений. Вы собираете план из пяти инициатив в пределах бюджета и видите, как он меняет качество жизни районов. Проект помогает сравнить варианты, понять, какие районы получают пользу, и подготовить записку для обсуждения решения. Это работа команды Ascension по кейсу №12 HackAlem AI.
В основе — учебный набор пяти районов Астаны, 14 мероприятий и бюджет 100 условных единиц. Карта показывает реальную географию, а показатели и эффекты мероприятий взяты из синтетической модели кейса. Результат позволяет проверить логику решения; он не является прогнозом для реального города.
Открыть публичное демо — главная страница показывает обзор города и переходы к рабочим разделам. Для симулятора не нужны регистрация, личный API-ключ или подписка. 3D-карта и Ascension AI открываются в отдельном центре управления. Для последовательной проверки ниже используйте компактный симулятор и кнопку «Попробовать на примере».
Рабочее пространство акима объединяет девять разделов: обзор, карту, конструктор, аналитику, районы, сценарии, обращения, поручения и паспорта данных. Они используют те же серверные расчёты и существующие модули. Устройство и проверка кабинета.
Учебный маршрут за 90 секунд проводит через пример решения и его последствия. Обращение и поручение в этом маршруте — демонстрационные записи в памяти страницы; для настоящей проверки реестра используйте формы жителя и акимата. В компактном симуляторе после расчёта также доступно объяснение распределения бюджета.
Презентация, речь и ответы жюри доступны в PowerPoint, PDF и Markdown. Это отдельный выпуск на 23 сентября, 16:48 GMT+5: исторические статусы внутри презентации не заменяют проверку текущего приложения.
| Что проверять | Где доступно |
|---|---|
| Выбор инициатив, бюджет, Score, карта, альтернативы одной меры, сравнение A/B и библиотека | Публичное демо или локальный запуск |
| Закрепление выбранных мер и защита показателя при поиске альтернатив | Публичное демо или локальный запуск; расчёт на устройстве |
| Записка для совещания с выгрузкой HTML | По последнему успешному расчёту, в публичном демо или локально |
| Черновики поручений, паспорта реализации и источников данных | Публичное демо или локально; ручные записи сохраняются в данном браузере |
| Обзор города и навигация | Главная /; девять рабочих разделов доступны через /mayor-overview.html |
| План из текста, 3D-карта и поквартальная шкала | /command-center.html; живой маршрут «текст → пять допустимых мер → применение → карта» подтверждён. Шкала не требует отдельного AI-вызова |
| Общий реестр с ролями и журналом изменений | Требует отдельной настройки оператором; без неё отключён. Локальные черновики доступны самостоятельно |
| Объяснение результата моделью | Публичное демо с серверным ключом, пока доступна общая квота; локально — по желанию владельца сервера |
| Веб-обращение жителя и проверка статуса по квитанции | Публичная форма или локальный /citizens.html |
| Решение по обращению в панели акима | Локальный /mayor.html без токена в демо-режиме; публичная панель требует служебный токен |
| Telegram-приём обращений | @Ascension_City_bot: облачный webhook настроен; полный пользовательский диалог ещё не подтверждён. Свой бот подключается по инструкции ниже |
API обращений подключён к публичному Cloudflare Worker. Локальная версия сохраняет обращения в JSON-файле, публичная — в постоянном хранилище Durable Object. Публичная панель защищена: HTTP 401 без служебного токена — ожидаемое поведение. Весь маршрут «житель → сотрудник → решение» жюри может проверить локально без аккаунтов и ключей команды.
Как запустить
Нужны Node.js 24 или новее, npm из его поставки и современный браузер. Для клонирования нужен Git; также можно скачать ZIP репозитория и открыть терминал в распакованной папке. Доступ к закрытому репозиторию выдаётся организаторами; самому приложению аккаунт не нужен.
После распаковки на Windows достаточно дважды нажать START-WINDOWS.cmd. На macOS/Linux выполните sh start-local.sh. Скрипт проверит Node.js, запустит локальный сервер и откроет страницу; оставьте окно терминала открытым. Запуск для организаторов и собственный хостинг.
git clone --branch v1.1.0 https://github.com/BAITC-Hacks/hack-0c0b9665-ascension.git
cd hack-0c0b9665-ascension
node --version
npm start
Откройте обзор города — http://127.0.0.1:3000. В текущей версии установка npm-пакетов и сборка для запуска не нужны: MapLibre уже включён в public/vendor/. Файл .env.local необязателен; сообщение о его отсутствии при первом запуске нормально. Остановка сервера — Ctrl+C.
Главная / — обзор. Центр управления /command-center.html содержит полноэкранную 3D-карту, панели и AI; рабочее пространство /mayor-overview.html — девять разделов кабинета. Компактный /classic.html использует то же расчётное ядро; на нём выполняется контрольный сценарий ниже.
Расчёты, сравнение сценариев и локальные обращения работают без ключей внешних сервисов. Для подложки карты и поиска нужен интернет, для 3D — поддержка WebGL. Если карта не загрузилась, расчёт и таблица показателей остаются доступны. Без ключа модели показывается «Без AI · расчётное объяснение».
Если порт 3000 занят, создайте в корне .env.local со строкой PORT=3001, перезапустите сервер и откройте http://127.0.0.1:3001. Остальные необязательные настройки перечислены в .env.example. По умолчанию сервер слушает только 127.0.0.1.
Подробная инструкция самостоятельного запуска включает чистую проверку, постоянный сервер Linux с systemd, Docker Compose, HTTPS и резервную копию обращений. Для собственного сервера и бота используются собственные настройки владельца; базовая локальная проверка не требует облачной инфраструктуры.
Как проверить решение за 5 минут
Откройте публичный компактный симулятор или локальную страницу. Все названия кнопок в следующих шагах относятся к /classic.html.
1. Рассчитать официальный пример
На странице /classic.html нажмите «Попробовать на примере», затем «Посмотреть результат». В плане должны быть:
| Мера | Район |
|---|---|
| M7 — школа и детсад | Нура |
| M8 — центр семейного здоровья / поликлиника | Нура |
| M10 — освещение и камеры | Нура |
| M12 — единая цифровая платформа обращений | Весь город |
| M5 — перевод частного сектора на чистое топливо | Сарыарка |
Проверьте результат по таблице. Точка в точных значениях ниже — десятичный разделитель; интерфейс использует запятую и округляет до двух знаков.
| Показатель | До решений | Официальный пример A | Вариант B из следующего шага |
|---|---|---|---|
| Общий Score | 52,56 | 56,54 | 55,30 |
| Изменение Score | — | +3,99 | +2,74 |
| Стоимость / остаток | 0 / 100 | 95 / 5 | 95 / 5 |
| Критических показателей | 2 | 0 | 1 |
| Оценка слабейшего района, Нуры | 49,18 | 52,96 | 51,86 |
Точные контрольные Score: 52.55768, 56.54307, 55.29777. В блоке «Дополнительный эффект сочетаний» видно совместное действие M10 и M12 в Нуре.
2. Сравнить решение при том же бюджете
В блоке «Ваш план» у школы и детсада поменяйте район Нура → Есиль, остальные решения оставьте прежними. Снова нажмите «Посмотреть результат»: получится вариант B из таблицы. Стоимость остаётся 95, но один показатель Нуры остаётся ниже критической границы.
Раскройте «Сравнить два последних расчёта». Сравнение показывает два последних расчёта; оценка Есиля меняется на +1,10, Нуры — на −1,10. «Загрузить A» возвращает решения первого варианта в форму — после загрузки выполните расчёт заново. «Скачать сравнение (JSON)» сохраняет снимки A/B для передачи и воспроизведения.
Раскройте «Мои сценарии», укажите название и нажмите «Сохранить расчёт». План можно загрузить после перезагрузки страницы или импортировать из JSON сравнения. Библиотека хранит до 20 сценариев в этом браузере на этом адресе; сравнение двух последних расчётов — в памяти вкладки. Импортированные оценки не принимаются за результат сервера: загруженный план нужно пересчитать.
3. Найти альтернативу одной мере
Заново загрузите демо и рассчитайте его. Раскройте «Что можно улучшить в плане», затем нажмите «Найти альтернативы». Для официального примера поиск проверяет 181 замену, из которых 117 допустимы, и показывает пять вариантов с разными компромиссами между Score, слабейшим районом и расходами.
«Загрузить вариант 1» заменяет M5 в Сарыарке на M3 в Нуре. Нажмите «Посмотреть результат»: ожидаются стоимость 100, остаток 0 и Score 57,21 (точно 57.20556). Предварительный поиск выполняется в Web Worker на вашем устройстве по общему ядру; загруженный вариант заново проверяет сервер. Поиск охватывает замену одного решения и не обещает глобального оптимума. Границы поиска.
Для отдельной проверки ограничений снова рассчитайте официальный пример. В панели альтернатив раскройте «Что обязательно сохранить», закрепите перевод частного сектора на чистое топливо (M5) в Сарыарке и защитите «Качество воздуха» (E2) в Сарыарке от ухудшения. Повторите поиск: будет проверено 144 замены, 86 допустимы, показано 6 из 7 вариантов Парето. Первый вариант сохраняет M5 и меняет M12 на M14; после загрузки и серверного расчёта ожидаются 56,64 и стоимость 97. Защита сравнивает показатель с результатом текущего плана. Перед повторением поиска без ограничений снимите закрепление и защиту. Приоритеты поиска.
4. Проверить ограничения
Заново загрузите официальный пример. Пока выбраны все пять мер, добавить шестую нельзя. Удалите «Освещение и камеры» (M10): останутся четыре меры стоимостью 83. В направлении «Транспорт» попытайтесь добавить «Умные светофоры» (M2, стоимость 22). Набор на 105 не принимается, выбор остаётся 4 из 5, кнопка расчёта недоступна. Сервер также отклоняет такой набор: POST /api/simulate возвращает HTTP 422 с ошибкой и без нового Score.
5. Проверить карту и объяснение
Верните официальный пример и выполните расчёт. Раскройте «Карта города», переключите показатель и состояние до/после, выберите район и режим 3D. При выборе другого города доступна география, а показатели Астаны скрываются: датасетов других городов в модели нет.
Движущиеся машины на карте — обозначенная в интерфейсе симуляция транспорта. Это анимация, а не GPS-позиции, реальные дорожные измерения или прогноз времени прибытия.
В блоке AI-анализа проверьте обозначение режима. Итог выбранного сценария вычисляется сервером; числа в панели альтернатив предварительно рассчитываются на устройстве. Доступная модель даёт AI-анализ; без ключа, при лимите или ошибке провайдера остаются рассчитанные числа и явно обозначенное расчётное объяснение. Отсутствие живого ответа модели не мешает повторить числовую проверку.
Дополнительная проверка: материалы для принятия решения
После расчёта официального примера доступны следующие действия:
- Раскройте «Записка по решению», при желании заполните блок «Название и цель записки (необязательно)» и нажмите «Скачать записку». Полученный HTML открывается самостоятельно, без сервера и сети, содержит пять мер, результат 56,54, бюджет 95 / 5 и ограничения модели. Печать — через браузер; файл не требует запуска скриптов. После изменения плана сначала выполните новый расчёт. Состав записки.
- Раскройте «Поручения и исполнение» и нажмите «Создать черновик поручений»: появятся пять записей по выбранным мерам. Заполните тестового ответственного, срок и критерий проверки, выйдите из поля и перезагрузите страницу: ручные изменения сохраняются при редактировании. В паспорте реализации можно отдельно указать CAPEX/OPEX в тенге и период OPEX. Эти сведения не меняют стоимость в условных единицах и Score учебного сценария. Реестр хранится в браузере и не отправляет поручения реальным службам. Реестр и паспорта.
- Раскройте «Паспорта данных», затем «Посмотреть паспорт модели и добавить источник». Заполните тестовое наблюдение, оставьте «Проверка человеком» = «Нужно проверить» и нажмите «Сохранить паспорт». Его можно выгрузить через «Скачать паспорта». Такие записи хранятся отдельно от официального учебного датасета и не подставляются в расчёт. Заполнение паспорта само по себе не подтверждает достоверность наблюдения. Паспорта источников.
При переходе к другому городу расчётные панели и записка скрываются. Ранее сохранённые поручения остаются доступными, а создание нового набора требует свежего расчёта модели Астаны. Проверка общего рабочего маршрута.
Центр управления: план текстом и шкала времени
На /command-center.html карта занимает весь экран, а конструктор и результаты открываются поверх неё. Доступность страницы и HTTP 200 от API сами по себе не подтверждают готовый AI-план: ответ должен пройти проверку официального ядра.
Живой маршрут подтверждён 23 сентября в 17:43 GMT+5 на опубликованной версии 241c84b: запрос пяти мер вернул mode: ai, valid: true, бюджет 95, после применения — Score 56,54307 и девять кадров от квартала 0 до 8. Запрос, ответ и проверка интерфейса.
Откройте публичный центр управления или локальный /command-center.html. В блоке Ascension AI выберите пример «Помочь Нуре» или введите собственный запрос и нажмите «Оценить мой план». POST /api/plan принимает только текст prompt длиной до 4000 символов. При доступной модели сервер предлагает меры из каталога; результат появляется только после проверки пяти уникальных мер, бюджета и совместимости официальным ядром. Готовый вариант можно выбрать кнопкой «Применить и показать». Без ключа, при лимите или ошибке показывается недоступность AI-плана, без выдуманного результата; ручной конструктор продолжает работать. Контракт планирования.
После успешного расчёта шкала времени показывает кварталы 0–8. Для официального примера начальный кадр даёт Score 52,56, конечный — 56,54. Промежуточные кадры — учебное допущение о постепенном эффекте после задержки. POST /api/trajectory не вызывает модель и не требует API-ключа; стоимость в кварталах 1–8 относится ко всему плану, а не к освоению бюджета за квартал. Это не прогноз развития реального города. Модель динамики, управление картой и панелями.
Общий реестр команды: необязательная настройка
Локальные поручения можно вручную публиковать в общий реестр после настройки доступа. Роли owner и editor читают и публикуют реестр, viewer читает реестр и журнал. Публикация явная; при несовпадении версии возвращается конфликт HTTP 409, чтобы изменения другого участника не перезаписывались молча.
Оператор задаёт WORKSPACE_ORIGIN, WORKSPACE_SESSION_SECRET и WORKSPACE_ACCESS_POLICY на сервере и отдельно выдаёт ключи доступа. Это другой доступ, чем ADMIN_TOKEN панели обращений. Без корректной настройки API возвращает 503 WORKSPACE_DISABLED, локальные черновики продолжают работать. Node хранит общий реестр в var/workspace.sqlite либо WORKSPACE_DB_PATH, Worker — в TEAM_WORKSPACE. Роли и настройка, хранение и HTTP-подключение.
Дополнительная проверка: обращения жителей
Выполняйте после локального npm start, используя вымышленные данные.
- Откройте страницу жителя. Введите, например: «Тестовое обращение: во дворе не работает освещение», укажите район и тестовый адрес. Подтвердите согласие формы и нажмите «Отправить обращение». Геолокация не обязательна; фотографии предусмотрены в Telegram-пути.
- Сохраните выданные номер и личный код проверки. Они нужны для просмотра статуса.
- Откройте панель акима. В стандартном локальном режиме токен не нужен. Найдите обращение, заполните «Ответственный», установите статус «В работе» и нажмите «Сохранить изменения». Затем выберите «Решено», заполните «Решение / результат», например «Тестовая проверка выполнена», и сохраните.
- На странице жителя проверьте статус по номеру и коду: должны отображаться новое состояние и решение. Перезапустите сервер — отправленное обращение должно сохраниться.
Категория, приоритет и возможные повторы здесь определяются локальными правилами, которые сотрудник может исправить. AI симулятора не выполняет анализ обращений. Обращения не меняют исходные показатели районов.
Локальные данные сохраняются в var/complaints.json, вне публичной статики и Git. Один файл обслуживает один процесс сервера; другой путь задаётся через COMPLAINTS_FILE. Публичный Worker использует отдельный Durable Object Complaints: локальные и облачные обращения автоматически не синхронизируются. При удалённом доступе к панели требуется серверный ADMIN_TOKEN; без него разрешено только локальное демо. Подробности: контракт обращений, проверки модуля, безопасность.
Для собственного Telegram-бота предусмотрены npm run bot:local, npm run bot:hosted и npm run bot:status. Настройки ключей, локального polling и облачного webhook описаны в инструкции Telegram, шаги диалога — в описании меню. Polling и webhook одновременно не работают; переключение не переносит обращения между хранилищами.
У публичного @Ascension_City_bot зарегистрирован webhook на /api/telegram/webhook; проверка Telegram показала пустую очередь и отсутствие ошибки доставки. Полный диалог /start → обращение → ответ сотрудника ещё не подтверждён реальным входящим сообщением. Старые локальные обращения в облако автоматически не перенесены.
Технологии и устройство
| Компонент | Технология и назначение |
|---|---|
| Локальный сервер | Node.js 24+, встроенные HTTP и файловые API, JavaScript ES modules |
| Интерфейс | HTML, CSS, браузерный JavaScript; сценарии, черновики поручений и паспорта в браузере; самостоятельный HTML-экспорт записки |
| Расчёт | Общее детерминированное ядро src/core/simulator.js и фиксированный data/city.json |
| Поиск альтернатив | То же ядро в браузерном Web Worker; esbuild 0.28.2 только для пересборки |
| Карта | MapLibre GL JS 5.24.0, OpenFreeMap / OpenStreetMap, поиск Photon |
| AI-объяснение и текстовый план | NVIDIA Nemotron 3 Super через Cloudflare Workers AI; сервер проверяет JSON, меры, бюджет и результаты. Для своего Node-сервера доступны NVIDIA NIM и OpenAI |
| План и динамика | /api/plan: предложение мер с последующей официальной проверкой; /api/trajectory: девять учебных кадров без вызова AI |
| Публичный симулятор | Cloudflare Workers; постоянная общая квота AI в Durable Object |
| Обращения и бот | Node.js с JSON-файлом или Cloudflare Worker с Durable Object Complaints; Telegram Bot API; общий модуль src/complaints/ |
| Общий реестр | Необязательный доступ с тремя ролями; Node SQLite / Durable Object TEAM_WORKSPACE, версии и журнал изменений |
| Проверки | Встроенный node:test; проверка синтаксиса и границ модулей; GitHub Actions для Node 24 |
Путь расчёта: браузер → HTTP API → проверка плана → расчёт по данным кейса → числовой результат → отдельное объяснение. Node.js и Cloudflare Worker используют общий API-слой. Клиент не подменяет датасет или формулу; запрос объяснения также проходит повторный серверный расчёт. Архитектура, контракт интеграции, развёртывание.
Формула и роль AI
Нужно выбрать ровно пять уникальных мер, не более двух из одного направления, общей стоимостью не выше 100. Для районной меры выбирается район. M1/M3 несовместимы в любом месте; M4/M7 и M5/M13 — в одном районе. Эффект меры учитывает задержку: (8 − lag) / 8; фиксированные синергии добавляются отдельно. Показатели ограничены диапазоном 0–100.
Score = 0.7 × средняя оценка районов с весами населения
+ 0.3 × оценка самого слабого района
− число значений «район × показатель» строго ниже 40
Оценка района — взвешенная сумма его показателей. Неиспользованный бюджет не даёт дополнительных баллов. Официальные значения и правила в тестах.
Модель получает готовые факты и объясняет компромиссы; отдельный планировщик предлагает меры из каталога. Числовую сводку и допустимость плана определяет сервер. Качественный текст модели следует сверять с таблицей. Применение предложенного плана требует действия пользователя; реальные поручения автоматически не назначаются. Граница доверия AI.
Для собственного AI-режима владелец сервера задаёт OPENAI_API_KEY и, при необходимости, OPENAI_MODEL в игнорируемом .env.local. В публичном демо ключ хранится в серверном секрете; посетитель его не вводит. Ожидание ответа ограничено 25 секундами. Общая квота публичного демо — 100 допусков к модели, до 10 в минуту и двух одновременно; планирование и объяснение используют общий допуск, ошибки провайдера также его расходуют. После исчерпания квоты работает расчётное пояснение, а составление нового AI-плана становится недоступным.
Локальное объяснение может использовать проверенную замену одного решения. Это поиск среди соседних вариантов, без гарантии глобального оптимума. В серверном объяснении Cloudflare Worker такой перебор отключён; это явно указано в ответе.
Живое AI-объяснение проверено 23 сентября в 17:23 GMT+5 на версии 9b5a774. Два сценария A/B получили HTTP 200, mode: ai, available: true, модель gpt-6-astra. Текст модели различил школу в Нуре и школу в Есиле и сохраняющийся дефицит Нуры; сценарий с бюджетом 105 отклонён с HTTP 422. Отчёт и полные входы/ответы. Эта проверка не подтверждает отдельный /api/plan и не гарантирует свободную квоту сейчас; наличие ключа в /api/health также не доказывает успешный вызов модели.
Автоматическая проверка
Проверенный релиз v1.1.0: 601 тест прошёл, 0 ошибок, 1 необязательный workerd-тест пропущен. На публичном сайте проверены API и точное совпадение всех 113 статических файлов. GitHub Actions не запустился из-за блокировки биллинга аккаунта; это не считается успешным CI. Результаты финальной проверки. Инструкция клонирования выше фиксирует именно этот выпуск; последующие изменения main могут ещё не быть опубликованы.
В корне репозитория выполните:
npm test
node scripts/check-quality.js
npm run test:self-host
Ожидаемый итог — все проверки проходят, команды завершаются с кодом 0. Тесты проверяют официальные числа, ограничения бюджета и совместимости, HTTP-контракты, безопасный импорт, fallback AI, обращения и Telegram. test:self-host отдельно проверяет чистый запуск и сохранение обращения после реального перезапуска, используя временный каталог и вымышленные данные. Внешние AI/Telegram-вызовы в автоматических проверках заменены подставными ответами: тесты не требуют ключей и не подтверждают доступность живых сервисов. Проверку пользовательского пути выполняйте по шагам выше.
Готовый браузерный Worker включён в репозиторий. Только для его пересборки после изменения расчётного ядра или данных установите dev-зависимости и выполните:
npm ci
npm run build:policy-worker
npm run check:policy-worker
Проверка сравнивает сборку с сохранённым файлом; для обычного npm start эти команды не нужны. Сборка и интеграционные проверки.
Данные, лицензии и ограничения
- Требования: ТЗ кейса №12. Таблицы, ограничения и формула: приложение «Датасет районов». Лицензия открытого распространения материалов организаторами не указана; они используются в рамках выданного кейса.
- Node.js: MIT и лицензии встроенных компонентов, LICENSE.
- MapLibre GL JS 5.24.0: BSD-3-Clause; локальная лицензия и уведомления компонентов. Шрифты интерфейса — системные.
- esbuild 0.28.2: MIT; инструмент разработки для сборки браузерного Worker. Версия закреплена в
package-lock.json. - OpenStreetMap: © участники OSM, ODbL; тайлы и стиль — OpenFreeMap, схема — OpenMapTiles, поиск — Photon. Атрибуция сохранена на карте. Источники и ограничения географии.
- NVIDIA Nemotron, OpenAI, Cloudflare Workers и Telegram Bot API используются по условиям моделей и внешних сервисов. Веса в репозитории не распространяются; собственного обучения модель не проходила в рамках проекта. Подключение NVIDIA, условия и проверка.
Пять учебных районов не заявляются актуальным административным делением Астаны. Метки на карте — условные точки, а не официальные границы; наличие и высота 3D-зданий зависят от данных OSM. Другие города доступны для просмотра географии. Библиотека сценариев не синхронизируется между устройствами. Для применения в акимате потребуются реальные проверенные данные, калибровка эффектов, промышленное хранилище и управление доступом.
Авторы коммитов
История коммитов
- 2026-09-23 17:58Merge pull request #59 from BAITC-Hacks/feat/h12-nvidia-assistantAzalytical
- 2026-09-23 17:57Verify live NVIDIA analysis and safely render known measure referencesAzalytical
- 2026-09-23 17:54Merge remote-tracking branch 'origin/main' into feat/h12-nvidia-assistantAzalytical
- 2026-09-23 17:54Connect real NVIDIA Nemotron to grounded city analysis and planningAzalytical
- 2026-09-23 17:54Merge pull request #58 from BAITC-Hacks/fix/telegram-live-integrationAzalytical
- 2026-09-23 17:52Refresh hosted Telegram complaints automatically after staff loginAzalytical
- 2026-09-23 17:49Restore access to AI and mayor views from Alisher dashboardAzalytical
- 2026-09-23 17:47Merge pull request #57 from BAITC-Hacks/release/h12-finalAzalytical
Все коммиты (214)
- 2026-09-23 17:47Restore access to AI and mayor views from Alisher dashboardAzalytical
- 2026-09-23 17:45Finalize release evidence and document successful live AI planningAzalytical
- 2026-09-23 17:40Restore selected green dashboard with updated navigation iconsFoXs1953
- 2026-09-23 17:39Merge pull request #56 from BAITC-Hacks/release/h12-finalAzalytical
- 2026-09-23 17:38Document final overview routes and one-step organizer startupAzalytical
- 2026-09-23 17:37Merge pull request #55 from BAITC-Hacks/integration/approved-designwinsainl
- 2026-09-23 17:37Merge portable organizer launchers and self-host storage fixesAzalytical
- 2026-09-23 17:37Preserve platform launcher line endingsAzalytical
- 2026-09-23 17:37Reconcile overview navigation with scenario transfer and final workspaceAzalytical
- 2026-09-23 17:37Preserve contributor icon history with current approved SVG designAzalytical
- 2026-09-23 17:36Make organizer launch one step and fix independent hosting configurationAzalytical
- 2026-09-23 17:36Merge approved visual design while retaining current simulator workflowsAzalytical
- 2026-09-23 17:34Replace sidebar symbols with semantic SVG iconsFoXs1953
- 2026-09-23 17:33feat: ship approved Ascension overview and civic interfacewinsainl
- 2026-09-23 17:32Connect final workspace and tutorial routes and support Windows test newlinesAzalytical
- 2026-09-23 17:32Reconcile superseded integration candidates with the tested current applicationAzalytical
- 2026-09-23 17:32Merge verified simulator navigation and transport reliability fixesAzalytical
- 2026-09-23 17:31Reconcile final README and duplicate AI evidence handoffsAzalytical
- 2026-09-23 17:31Finalize judge README with verified routes, launch and evidenceAzalytical
- 2026-09-23 17:31Port compatible team demo and budget explanation into current applicationAzalytical
- 2026-09-23 17:28Merge nine-page mayor workspace and verified visual assetsAzalytical
- 2026-09-23 17:28Merge commit 'e862df1c62039d0322435a8920ae23655cef0024' into integration/approved-designwinsainl
- 2026-09-23 17:28docs: add independent live AI verification evidenceAzalytical
- 2026-09-23 17:28Record previously integrated artwork and motion histories and superseded Telegram adapterAzalytical
- 2026-09-23 17:28Merge verified live AI analysis evidenceAzalytical
- 2026-09-23 17:27docs: include independent AI audit and planner limitationAzalytical
- 2026-09-23 17:27Resolve legacy cabinet branch against canonical release; retain accepted artwork and scenario library, port independent demo nextAzalytical
- 2026-09-23 17:27Merge commit 'e81d2d279692b4a2b0852d858c4253ee6ae867e4' into integration/approved-designwinsainl
- 2026-09-23 17:27feat: add mayor workspace with nine pages and visual assetsAzalytical
- 2026-09-23 17:26docs: record live AI reaction to changed districtAzalytical
- 2026-09-23 17:26docs: record live AI contrast verificationAzalytical
- 2026-09-23 17:26fix: complete simulator user flows and verify hackathon criteriaFoXs1953
- 2026-09-23 17:25Merge presentation and defense materialsAzalytical
- 2026-09-23 17:25Merge final judge documentationAzalytical
- 2026-09-23 17:25Merge AI planner capability fix for final releaseAzalytical
- 2026-09-23 17:25Merge Node workspace revision conflict fixAzalytical
- 2026-09-23 17:23fix: preserve workspace revision conflicts on Nodewinsainl
- 2026-09-23 17:22fix: recognize server simulation as supported AI plan capabilityAzalytical
- 2026-09-23 17:22docs: guide judges through the final application routesAzalytical
- 2026-09-23 17:19docs: publish Ascension presentation and defense materialswinsainl
- 2026-09-23 17:18Merge pull request #48 from BAITC-Hacks/docs/h12-original-requirementsAzalytical
- 2026-09-23 17:18docs: add original task specification and district datasetAzalytical
- 2026-09-23 17:14Merge pull request #47 from BAITC-Hacks/feat/h12-workspace-integrationAzalytical
- 2026-09-23 17:12Declare public workspace origin for operator configurationAzalytical
- 2026-09-23 17:11Record production runtime verification for workspace integrationAzalytical
- 2026-09-23 17:10Merge pull request #46 from BAITC-Hacks/feat/h12-command-uiAzalytical
- 2026-09-23 17:09Merge remote-tracking branch 'origin/main' into feat/h12-command-uiAzalytical
- 2026-09-23 17:06feat: make the 3D command center primary and retain the compact simulatorAzalytical
- 2026-09-23 17:06Integrate authenticated workspace through shared runtime adaptersAzalytical
- 2026-09-23 17:06Merge remote-tracking branch 'origin/main' into feat/h12-workspace-integrationAzalytical
- 2026-09-23 17:04Merge pull request #45 from BAITC-Hacks/feat/controlled-complaint-migrationAzalytical
- 2026-09-23 17:04fix: reset local plans without waiting for network validationAzalytical
- 2026-09-23 17:01Merge commit '49c590ffd783b6a5c21d5e06776d4d59c93b2704' into integration/checked-ui-migrationДанияр
- 2026-09-23 17:00Merge remote-tracking branch 'origin/main' into feat/h12-command-uiAzalytical
- 2026-09-23 17:00Merge commit '09e4fadcdf3374748f5964a14e97de2e06209dd6' into integration/checked-ui-migrationДанияр
- 2026-09-23 16:59Document reconciliation when hosted delivery is already activeДанияр
- 2026-09-23 16:59Merge pull request #43 from BAITC-Hacks/fix/compact-ui-hosted-integrationAzalytical
- 2026-09-23 16:59Merge remote-tracking branch 'origin/main' into feat/h12-command-uiAzalytical
- 2026-09-23 16:59feat: mount command center through shared app lifecycleAzalytical
- 2026-09-23 16:58Add guarded atomic migration for existing complaint receiptsДанияр
- 2026-09-23 16:58Merge commit '033dfe8' into feat/controlled-complaint-migrationДанияр
- 2026-09-23 16:56Merge pull request #44 from BAITC-Hacks/docs/judge-readme-accessAzalytical
- 2026-09-23 16:56Merge pull request #42 from BAITC-Hacks/integrate/h12-plan-apiAzalytical
- 2026-09-23 16:55Merge pull request #41 from BAITC-Hacks/fix/h12-command-center-map-compatAzalytical
- 2026-09-23 16:55docs: update public complaints and self-hosting accessAzalytical
- 2026-09-23 16:53Keep fullscreen workspace compatible with district and transit mapAzalytical
- 2026-09-23 16:52feat: share AI admission across plan and explanation routesAzalytical
- 2026-09-23 16:52Preserve keyboard focus when initializing the collapsed mapДанияр
- 2026-09-23 16:49Merge remote-tracking branch 'origin/main' into integrate/h12-plan-apiAzalytical
- 2026-09-23 16:49Merge commit '5ef36e0efc562360c58d0730e3d10f96f68cafbf' into fix/compact-ui-hosted-integrationДанияр
- 2026-09-23 16:49Restore compact simulator flow while preserving operator panelsДанияр
- 2026-09-23 16:47Merge pull request #32 from BAITC-Hacks/docs/h12-self-hostingAzalytical
- 2026-09-23 16:46Merge pull request #40 from BAITC-Hacks/fix/h12-manual-sync-copyAzalytical
- 2026-09-23 16:46Merge pull request #39 from BAITC-Hacks/feat/h12-astana-command-centerAzalytical
- 2026-09-23 16:46Merge pull request #35 from BAITC-Hacks/feat/h12-bus-routesAzalytical
- 2026-09-23 16:46Merge remote-tracking branch 'origin/main' into integrate/h12-plan-apiAzalytical
- 2026-09-23 16:45Merge pull request #36 from BAITC-Hacks/integrate/h12-citizen-primaryAzalytical
- 2026-09-23 16:44Merge commit 'a16baf8' into integrate/h12-plan-apiAzalytical
- 2026-09-23 16:44Merge pull request #37 from BAITC-Hacks/codex/unique-city-artworkAzalytical
- 2026-09-23 16:44Merge pull request #38 from BAITC-Hacks/docs/judge-readme-releaseAzalytical
- 2026-09-23 16:43docs: clarify that register synchronization is not automaticAzalytical
- 2026-09-23 16:43Harden plan responses and keep map widgets synchronizedAzalytical
- 2026-09-23 16:42Merge commit '74ee137' into integrate/h12-plan-apiAzalytical
- 2026-09-23 16:41feat: add Astana bus catalogue and OpenStreetMap transit dataAzalytical
- 2026-09-23 16:41docs: record integrated transit verificationAzalytical
- 2026-09-23 16:41fix: clarify transit refresh failures and verified API availabilityAzalytical
- 2026-09-23 16:41fix: bound transit response streams and route geometryAzalytical
- 2026-09-23 16:39Add immersive Astana map workspace and Ascension AI widgetsAzalytical
- 2026-09-23 16:38docs: document verified public decision workflowAzalytical
- 2026-09-23 16:38fix: retain interactive district controls and record full UI verificationFoXs1953
- 2026-09-23 16:36Merge pull request #34 from BAITC-Hacks/codex/map-district-hoverAzalytical
- 2026-09-23 16:36Translate city plans through bounded structured AI proposalsAzalytical
- 2026-09-23 16:36docs: record integrated citizen runtime verificationAzalytical
- 2026-09-23 16:35feat: supply 25 unique city icons and three illustrated backgroundsFoXs1953
- 2026-09-23 16:34fix: reject Telegram redirects with Worker-compatible fetch modeAzalytical
- 2026-09-23 16:33merge: retain canonical hosting history and verified operator interfaceAzalytical
- 2026-09-23 16:32Add shared AI admission and quarterly scenario dynamicsAzalytical
- 2026-09-23 16:32Merge remote-tracking branch 'origin/main' into integrate/h12-citizen-primaryAzalytical
- 2026-09-23 16:32fix: run demo end to end and reset scenarios without networkFoXs1953
- 2026-09-23 16:32feat: add colored district sectors and improve map navigationFoXs1953
- 2026-09-23 16:32Merge pull request #33 from BAITC-Hacks/feat/h12-team-workspaceAzalytical
- 2026-09-23 16:31fix: persist Telegram replay ledger and atomic cleanup schedulingAzalytical
- 2026-09-23 16:30Merge team policy constraints and judge guideДанияр
- 2026-09-23 16:29Merge pull request #30 from BAITC-Hacks/feat/h12-operator-integrationAzalytical
- 2026-09-23 16:29Merge commit '8952ec0' into integrate/h12-citizen-primaryAzalytical
- 2026-09-23 16:29Merge commit '4947a81' into integrate/h12-citizen-primaryAzalytical
- 2026-09-23 16:29merge: retain latest policy constraints and review documentationFoXs1953
- 2026-09-23 16:29merge: integrate canonical citizen hosting with shared runtimeAzalytical
- 2026-09-23 16:28feat: add colored district sectors and improve map navigationFoXs1953
- 2026-09-23 16:28Merge pull request #31 from BAITC-Hacks/feat/h12-opex-periodAzalytical
- 2026-09-23 16:28fix: run demo end to end and reset scenarios without networkFoXs1953
- 2026-09-23 16:28merge: preserve all team pages and integrate unique city artworkFoXs1953
- 2026-09-23 16:27docs: verify constrained browser search in combined interfaceAzalytical
- 2026-09-23 16:26test: tolerate additive optional passport normalizationAzalytical
- 2026-09-23 16:25feat: add optional authenticated team register workspaceAzalytical
- 2026-09-23 16:25fix: share strict schema and isolate login rate limitsAzalytical
- 2026-09-23 16:25test: verify workspace runtime persistence and integration contractAzalytical
- 2026-09-23 16:25Document and verify independent Node and server hostingAzalytical
- 2026-09-23 16:25fix: restore progressive simulator UI and mobile navigationДанияр
- 2026-09-23 16:24Merge remote-tracking branch 'origin/main' into feat/h12-operator-integrationAzalytical
- 2026-09-23 16:24feat: record an explicit period for manual OPEX estimatesAzalytical
- 2026-09-23 16:24Merge pull request #29 from BAITC-Hacks/feat/h12-policy-constraints-integrationAzalytical
- 2026-09-23 16:24feat: connect city exploration and operator workflowAzalytical
- 2026-09-23 16:23Merge pull request #26 from BAITC-Hacks/docs/judge-readmeAzalytical
- 2026-09-23 16:23Merge pull request #27 from BAITC-Hacks/feat/h12-action-workspace-hooksAzalytical
- 2026-09-23 16:21Pass policy priority constraints through browser worker transportAzalytical
- 2026-09-23 16:20fix: reject custom array prototypes before document traversalAzalytical
- 2026-09-23 16:19docs: make README a reproducible guide for judgesAzalytical
- 2026-09-23 16:17merge: preserve hosting commands with latest browser integrationДанияр
- 2026-09-23 16:15Merge priority constraints core and panel for transport integrationAzalytical
- 2026-09-23 16:15feat: expose strict document hooks for manual workspace exchangeAzalytical
- 2026-09-23 16:15Add durable Telegram hosting and reproducible self-host setupAzalytical
- 2026-09-23 16:14Merge pull request #22 from BAITC-Hacks/feat/h12-interactive-cityAzalytical
- 2026-09-23 16:13Merge pull request #14 from BAITC-Hacks/feat/h12-browser-integrationAzalytical
- 2026-09-23 16:12Merge pull request #24 from BAITC-Hacks/feat/h12-evidence-registerAzalytical
- 2026-09-23 16:12Merge commit 'b8093af206d65addf16baa1379113c952a4fc5f3' into feat/citizen-ideas-daniyarДанияр
- 2026-09-23 16:11fix: prevent district layout overflow on narrow screensFoXs1953
- 2026-09-23 16:11fix: stop empty traffic animation when switching citiesAzalytical
- 2026-09-23 16:10docs: record combined release verificationAzalytical
- 2026-09-23 16:10merge: preserve dashboard and gate unavailable complaints serviceAzalytical
- 2026-09-23 16:10Merge commit '8d487c090dd1a87913f4cfcbcbe00e2561936b49' into feat/h12-browser-integrationAzalytical
- 2026-09-23 16:10merge: integrate shared HTTP architecture with hosted complaintsДанияр
- 2026-09-23 16:10fix: assess evidence dates in the local calendarAzalytical
- 2026-09-23 16:08feat: persist hosted complaints and Telegram sessionsДанияр
- 2026-09-23 16:08feat: complete workspace navigation with shared scenario storageFoXs1953
- 2026-09-23 16:08Merge pull request #20 from BAITC-Hacks/feat/h12-action-passportsAzalytical
- 2026-09-23 16:08Merge pull request #19 from BAITC-Hacks/feat/h12-visual-polishAzalytical
- 2026-09-23 16:06feat: add evidence passports and source readiness checksAzalytical
- 2026-09-23 16:05Merge pull request #12 from BAITC-Hacks/refactor/h12-architecture-qualityAzalytical
- 2026-09-23 16:05feat: preserve policy priorities when searching alternativesAzalytical
- 2026-09-23 16:04docs: normalize security document endingAzalytical
- 2026-09-23 16:04feat: add interactive 3D city explorer and simulated street trafficAzalytical
- 2026-09-23 16:04docs: coordinate shared Cloudflare release with DaniyarFoXs1953
- 2026-09-23 16:03merge: preserve citizen routes alongside shared HTTP architectureAzalytical
- 2026-09-23 16:02Merge pull request #15 from BAITC-Hacks/feat/h12-action-registerAzalytical
- 2026-09-23 16:02docs: record combined visual and motion verificationAzalytical
- 2026-09-23 16:02fix: restore calculation controls after a city switchAzalytical
- 2026-09-23 16:02Merge pull request #16 from BAITC-Hacks/feat/h12-decision-briefAzalytical
- 2026-09-23 16:01feat: integrate city workspaces, citizen flows, and interface toolsFoXs1953
- 2026-09-23 16:01feat: add manual implementation passports with schema migrationAzalytical
- 2026-09-23 16:00Merge pull request #13 from BAITC-Hacks/fix/h12-ai-groundingAzalytical
- 2026-09-23 15:59Merge pull request #17 from BAITC-Hacks/feat/citizen-ideas-daniyarwinsainl
- 2026-09-23 15:58Polish city decision workspace visual systemAzalytical
- 2026-09-23 15:58feat: add guided Telegram menu and support flowДанияр
- 2026-09-23 15:57feat: add decision meeting brief with standalone HTML exportAzalytical
- 2026-09-23 15:57feat(ui): add accessible interface motionAzalytical
- 2026-09-23 15:56feat(ui): add accessible interface motionAzalytical
- 2026-09-23 15:53fix: trust configured public origin behind TLS proxiesAzalytical
- 2026-09-23 15:53fix: inspect original Unicode numbers before normalizationAzalytical
- 2026-09-23 15:53fix: normalize conservative AI prose checksAzalytical
- 2026-09-23 15:52feat: add local manual action register from calculated scenariosAzalytical
- 2026-09-23 15:52feat: integrate browser alternatives and saved scenariosAzalytical
- 2026-09-23 15:52design: add original city illustration assetsAzalytical
- 2026-09-23 15:51design: add original city illustration assetsAzalytical
- 2026-09-23 15:51docs: define visual integration and reference directionAzalytical
- 2026-09-23 15:51merge: include latest policy alternatives panel from mainДанияр
- 2026-09-23 15:49fix: bind AI numbers and recommendations to simulator factsAzalytical
- 2026-09-23 15:48merge: integrate city map and latest scenario tools with minimal UIДанияр
- 2026-09-23 15:46refactor: share HTTP contracts and enforce architecture qualityAzalytical
- 2026-09-23 15:45ui: simplify simulator with progressive disclosureДанияр
- 2026-09-23 15:44feat: add akim and resident workspaces with persistent desk operationsFoXs1953
- 2026-09-23 15:42feat: add citizen complaints workflow and Telegram integrationДанияр
- 2026-09-23 15:40Merge pull request #11 from BAITC-Hacks/feat/h12-policy-panelAzalytical
- 2026-09-23 15:38feat: add isolated policy alternatives panelAzalytical
- 2026-09-23 15:37Merge pull request #10 from BAITC-Hacks/feat/h12-scenario-libraryAzalytical
- 2026-09-23 15:37Merge pull request #8 from BAITC-Hacks/feat/h12-policy-optionsAzalytical
- 2026-09-23 15:36Merge pull request #9 from BAITC-Hacks/feat/h12-city-mapAzalytical
- 2026-09-23 15:33feat: persist named Astana scenarios and safely import comparisonsAzalytical
- 2026-09-23 15:32Merge pull request #7 from BAITC-Hacks/feat/h12-ui-03-alisherAzalytical
- 2026-09-23 15:30feat: publish city map with 3D geography and protected AIAzalytical
- 2026-09-23 15:29feat: add verified single-decision policy alternativesAzalytical
- 2026-09-23 15:18H12-UI-03: export A/B comparison as JSONFoXs1953
- 2026-09-23 15:09Merge pull request #6 from BAITC-Hacks/docs/track12-roadmapAzalytical
- 2026-09-23 15:09docs: add track 12 delivery roadmap and team handoffsAzalytical
- 2026-09-23 15:01Merge pull request #5 from BAITC-Hacks/feat/h12-sc-01-daniyarAzalytical
- 2026-09-23 14:59docs: add verified scenario comparison casesДанияр
- 2026-09-23 14:47Merge pull request #4 from BAITC-Hacks/feat/h12-compare-integrationAzalytical
- 2026-09-23 14:46feat: integrate team scenario comparison into simulatorAzalytical
- 2026-09-23 14:44Merge pull request #3 from BAITC-Hacks/feat/h12-ui-02-alisherAzalytical
- 2026-09-23 14:40feat: add isolated scenario comparison panelFoXs1953
- 2026-09-23 14:39Merge pull request #2 from BAITC-Hacks/feat/h12-app-integrationAzalytical
- 2026-09-23 14:38feat: add interactive city simulator and reproducible demoAzalytical
- 2026-09-23 14:30feat: add simulation HTTP API and grounded scenario explanationsAzalytical
- 2026-09-23 14:28Merge pull request #1 from BAITC-Hacks/feat/h12-ui-01-alisherAzalytical
- 2026-09-23 14:03docs: define decision selection UX and acceptance checksFoXs1953
- 2026-09-23 13:56feat: add city simulation core and 25 acceptance checksAzalytical
Структура репозитория (346 файлов)
.dockerignore .env.example .gitattributes .github/workflows/quality.yml .gitignore Dockerfile README.md START-WINDOWS.cmd compose.yaml data/city.json deploy/Caddyfile deploy/ascension-bot.service deploy/ascension.service docs/acceptance.md docs/action-register.md docs/ai-grounding.md docs/ai-verification.md docs/app-verification.md docs/approved-design-release.md docs/architecture.md docs/ascension-plan-contract.md docs/azamat-telegram-handoff.md docs/browser-integration.md docs/citizen-contract.md docs/citizen-verification.md docs/city-explorer.md docs/city-graphics-notes.md docs/command-center-integration.md docs/command-center.md docs/complaints-migration.md docs/criteria-user-audit.md docs/decision-brief.md docs/design-image-prompt.txt docs/design-validation.md docs/design/mayor-asset-prompts.md docs/design/mayor-overview-desktop.png docs/design/mayor-overview-mobile.png docs/design/mayor-overview-sketch.png docs/design/mayor-planner-desktop.png docs/design/mayor-result-desktop.png docs/design/mayor-scenarios-sketch.png docs/design/mayor-sketch-prompts.md docs/design/mayor-workspace.md docs/desk-complaints-contract.md docs/evidence-register.md docs/evidence/ai-live-verification-2026-09-23.json docs/evidence/ai-plan-final-verification.json docs/evidence/browser-alternatives.png docs/evidence/browser-integration-combined-tests.txt docs/evidence/browser-integration-tests.txt docs/evidence/citizen-primary-runtime.json docs/evidence/nvidia-live-verification.json docs/evidence/plan-runtime.json docs/evidence/policy-worker-build.json docs/evidence/public-ai-smoke.json docs/evidence/public-astana-3d.png docs/evidence/public-result-ai.png docs/evidence/wave2-public-release.json docs/evidence/workspace-runtime.json docs/final-release.md docs/hosting.md docs/integration-contract.md docs/interface-motion-notes.md docs/legacy-integration.md docs/map-data.md docs/map-sectors.md docs/map-verification.md docs/nvidia-ai.md docs/operator-integration.md docs/organizer-hosting.md docs/plan-runtime.md docs/policy-constraints-transport.md docs/policy-options.md docs/policy-panel.md docs/policy-priority-constraints.md docs/presentation/2026-09-23/.gitattributes docs/presentation/2026-09-23/Ascension_Presentation.pdf docs/presentation/2026-09-23/Ascension_Presentation_2026-09-23.pptx docs/presentation/2026-09-23/Ascension_rech_i_zashchita.md docs/presentation/2026-09-23/Ascension_rech_i_zashchita.pdf docs/presentation/2026-09-23/README.md docs/presentation/2026-09-23/START_HERE.md docs/requirements/HackAlem AI_ «Аким на 5 часов» - AI-симулятор управления городом.docx docs/requirements/Датасет районов.docx docs/roadmap.md docs/scenario-comparison.md docs/scenario-library.md docs/security.md docs/self-hosting.md docs/team-handoffs.md docs/telegram-hosting.md docs/telegram-ux.md docs/trajectory-model.md docs/transit-data.md docs/ux/artwork-integration.md docs/ux/comparison-checks.md docs/ux/decision-selection.md docs/ux/generated-artwork.md docs/ux/unique-artwork.md docs/visual-design.md docs/visual-system-notes.md docs/visual-verification.md docs/workspace-runtime.md docs/workspace.md package-lock.json package.json public/_headers public/action-register.css public/action-register.js public/app.js public/assets/design/ascension-mark.svg public/assets/design/city-emblem.svg public/assets/design/city-grid.svg public/assets/design/city-hero-approved.png public/assets/design/scenario-lines.svg public/assets/illustrations/budget-remaining.webp public/assets/illustrations/budget.webp public/assets/illustrations/city-hero-mobile.webp public/assets/illustrations/city-hero.webp public/assets/illustrations/city-texture.webp public/assets/illustrations/clean-heating.webp public/assets/illustrations/clinic.webp public/assets/illustrations/decision-checklist.webp public/assets/illustrations/digital-service.webp public/assets/illustrations/district-almaty.webp public/assets/illustrations/district-baikonur.webp public/assets/illustrations/district-nura.webp public/assets/illustrations/district-saryarka.webp public/assets/illustrations/district-yesil.webp public/assets/illustrations/ecology.webp public/assets/illustrations/emergency-crew.webp public/assets/illustrations/green-belt.webp public/assets/illustrations/light-rail.webp public/assets/illustrations/people.webp public/assets/illustrations/plan.webp public/assets/illustrations/safe-crossing.webp public/assets/illustrations/safety.webp public/assets/illustrations/school.webp public/assets/illustrations/services.webp public/assets/illustrations/sports.webp public/assets/illustrations/traffic-lights.webp public/assets/illustrations/transport.webp public/assets/illustrations/utilities.webp public/assets/mayor/astana-panorama.png public/assets/mayor/dialogue-icon.png public/assets/mayor/planning-icon.png public/brand-ui.js public/brand.css public/budget-story.css public/budget-story.js public/citizen.css public/citizen.js public/citizens.html public/city-explorer.css public/city-explorer.js public/city-traffic-model.js public/classic.html public/command-center-bridge.js public/command-center.css public/command-center.html public/command-center.js public/command-design.css public/comparison.css public/comparison.js public/dashboard-app.js public/dashboard-scenario-library.js public/dashboard.css public/decision-brief.css public/decision-brief.js public/demo.css public/demo.html public/demo.js public/district-explorer.css public/district-explorer.js public/district-sectors.js public/evidence-register.css public/evidence-register.js public/experience-nav.css public/home-design.css public/illustration-artwork.js public/illustrations.css public/index.html public/location-map.css public/location-map.js public/map.css public/map.js public/mayor-analytics.html public/mayor-data.html public/mayor-districts.html public/mayor-map.html public/mayor-overview.html public/mayor-planner.html public/mayor-planner.js public/mayor-requests.html public/mayor-scenarios.html public/mayor-tasks.html public/mayor-workspace.css public/mayor-workspace.js public/mayor.html public/mayor.js public/method-guide.css public/method-guide.js public/motion.css public/motion.js public/places.js public/policy-options-client.js public/policy-options-panel.css public/policy-options-panel.js public/policy-options-worker.js public/portal-design.css public/release-integration.css public/scenario-actions.css public/scenario-library.css public/scenario-library.js public/scenario-view-transfer.js public/simulator-design.css public/styles.css public/team-workspace.css public/team-workspace.js public/transit-astana-stops.json public/transit-catalog.js public/transit-panel.css public/transit-panel.js public/transit-provider.js public/visual-design.css public/widgets-design.css public/workspace-nav.js public/workspace-tools.css public/workspace-tools.js render.yaml scripts/build-policy-worker.mjs scripts/check-complaint-backup.js scripts/check-quality.js scripts/migrate-complaints.mjs scripts/nvidia-smoke.js scripts/refresh-transit-snapshot.mjs scripts/self-host-smoke.js scripts/start-local.js src/ai-budget.js src/ai/explain.js src/ai/plan.js src/ai/provider.js src/browser/policy-options-worker.js src/cloudflare.js src/complaints/classify.js src/complaints/durable-store.js src/complaints/http.js src/complaints/migration.js src/complaints/route-core.js src/complaints/store-core.js src/complaints/store.js src/complaints/telegram.js src/complaints/worker-routes.js src/core/policy-options.js src/core/simulator.js src/core/trajectory.js src/http/api.js src/http/errors.js src/http/json.js src/http/policy.js src/http/workspace.js src/runtime/ai-admission.js src/runtime/local-ai-guard.js src/runtime/node-explanation.js src/runtime/node-json.js src/runtime/node-origin.js src/runtime/node-static.js src/runtime/node-web-handler.js src/runtime/node-workspace.js src/runtime/planning.js src/runtime/worker-explanation.js src/runtime/worker-json.js src/runtime/worker-workspace.js src/server.js src/telegram-mode.js src/telegram-poll.js src/telegram-setup.js src/worker.js src/workspace/auth.js src/workspace/cloudflare.js src/workspace/durable-repository.js src/workspace/handler.js src/workspace/node-sqlite.js src/workspace/repository.js src/workspace/schema.js start-local.sh tests/action-register-passports.test.js tests/action-register-workspace.test.js tests/action-register.test.js tests/ai-admission.test.js tests/ai-budget.test.js tests/ai-grounding.test.js tests/app-city-race.test.js tests/app-reset.test.js tests/budget-story.test.js tests/citizen-capability.test.js tests/city-explorer-lifecycle.test.js tests/city-traffic-model.test.js tests/command-center-bridge.test.js tests/complaint-backup.test.js tests/complaints-durable.test.js tests/complaints-http.test.js tests/complaints-migration-cli.test.js tests/complaints-migration.test.js tests/complaints-store.test.js tests/complaints-worker.test.js tests/dataset-contract.test.js tests/decision-brief.test.js tests/district-sectors.test.js tests/evidence-register.test.js tests/explain.test.js tests/http-contract.test.js tests/map-sectors.e2e.mjs tests/mayor-planner.test.js tests/node-explanation-cache.test.js tests/node-web-handler.test.js tests/node-workspace.test.js tests/nvidia-provider.test.js tests/nvidia-runtime.test.js tests/plan-http.test.js tests/plan.test.js tests/planning.test.js tests/policy-constraints-transport.test.js tests/policy-options-client.test.js tests/policy-options.test.js tests/policy-panel.test.js tests/policy-worker-bundle.test.js tests/scenario-library.test.js tests/scenario-view-transfer.test.js tests/server.test.js tests/simulator.acceptance.test.js tests/telegram-ledger.test.js tests/telegram-mode.test.js tests/telegram-persistence.test.js tests/telegram.test.js tests/trajectory.test.js tests/transit-catalog.test.js tests/transit-provider.test.js tests/worker-workspace.test.js tests/worker.test.js tests/workspace-http.test.js tests/workspace-panel.test.js tests/workspace-routing.test.js tests/workspace-worker.test.js tests/workspace.test.js wrangler.jsonc
Ветки (54)
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.