CHANGELOG.md
Rama main · réplica de lectura del repositorio original.
# 1.28.0 — живой город
- Закрытие задачи сохраняет текущую камеру; фокус учитывает свободную область экрана. Убраны автоматическая экскурсия и блок «Сейчас в городе». Запись позы в browser history объединяется, сохраняя Back/Forward на Safari.
- Вертолёт переносит здание к каноническому месту назначения за пределами кадра. Полёт продолжается после получения новой геометрии, даже когда спрайт назначения отсечён; удалённые объекты и их графика дополнительно не загружаются.
- Остановки имеют постоянные ID и сохраняются при выключенной жизни города, reduced motion, pan и перезагрузке. Выделенный парк BUS/SCHOOL_BUS обслуживает направленные линии с физической посадкой и высадкой; карточка автобуса показывает настоящую линию.
- После открытия дороги ожидающий перед перекрёстком транспорт заново планирует путь с текущего узла. Перекрытие назначенной цели больше не оставляет автобус без выхода из конфликтной зоны; назначение, обычные разрешения на проезд и проверки столкновений сохраняются.
- Начальная остановка регулярного рейса выбирается ближе к свободному автобусу внутри текущей линии. Очерёдность линий и направленные переходы сохраняются; фактическое назначение проверяет достижимость и безопасное положение машины.
- Школьный выезд сохраняет заявку после уличной сценки и заменяет обычный рейс после завершения высадки и назначения доступных пассажиров и отдельного автобуса. Заявка имеет ограниченный срок, уступает занятый вход настоящей работе и отменяется при изменении школы или далёком pan. Неудачные попытки не прерывают регулярный маршрут; при успешной замене освобождаются только участники прежнего рейса.
- На спортивной площадке игрок сначала доходит до своей точки и затем меняет цель. Поздний подход сохраняется вместо повторного переназначения маршрута каждые четыре секунды.
- Полоса и площадка аэропорта открывают задачу терминала. Аэродром и платформа используют городские покрытия, нативные ветроуказатель и часы, общую геометрию изображения и прохода.
- Новые межгородские связи получают покрытия COLLECTOR/ARTERIAL с прежней физической шириной. Принятые дороги сохраняются. Ограниченный поиск устраняет лишние arrival headings, активная планета показывает сохранённые наземные связи. Явная синхронизация старых стран описана в runbook.
- Перемещение камеры публикует всю видимую землю и источники зданий до отрисовки невидимой подложки. Показанная позиция сразу сохраняется в истории, фоновая ошибка сохраняет возможность повтора.
- Подготовка движения получает приоритет перед отрисовкой окружения за камерой. При pan ставший видимым участок сразу возвращается в очередь; сроки подготовки и детализация сохраняются.
- Дождь, лужи и тени облаков привязаны к миру, учитывают качество и reduced motion; optional графика не блокирует первый кадр. Жители используют реальные укрытия и общий бюджет участников событий.
- Новые кварталы одного района получают местный характер: терракотовые дома, холодные крыши или зелёные дворы. Подбор использует существующие спрайты и местный баланс вариантов; старые здания сохраняют оформление и входы.
- При росте больших районов школы, медицина, пожарные и полиция распределяются по местным зонам. Они занимают подходящие участки новых задач; существующие здания и исторические места сохраняются.
- Геометрия сцены остаётся в числовых буферах и разворачивается при чтении. Обновление метаданных задачи сохраняет геометрию без лишнего копирования; повреждённые данные отклоняются до публикации города.
- Подключён каталог из 100 городских сценариев: 81 дворовая последовательность действий, 7 дорожных происшествий и 12 повседневных событий с открытиями зданий. Действия зависят от реального места и начинаются после прибытия жителей и нужных служб.
- Добавлены 34 вида пиксельных предметов и действий. Сценки используют существующих жителей, освобождают участников после ухода или отмены и не добавляют подписей над городом. Открытия зданий требуют свежего подтверждения завершения задачи через MCP.
- Телефон показывает одно короткое актуальное уведомление задачи; повторные обновления объединяются. Удалённая задача не оставляет ссылку, события продолжают обрабатываться, долговечные новости и Push сохраняются.
- Подготовка большой физической сцены читает до двух страниц с отменой владельца. Маршруты сохраняют CSR, пешеходный spine использует числовые временные связи, compiled coordinate index занимает меньше памяти. Локальная стройка не копирует весь город. Целевой ориентир 256 МиБ для 10 000 задач пока не достигнут; подробные границы и замеры — в общем плане.
- Additive-таблица0049 сохраняет одну производную сцену на город для согласованной сборки и версии мира. После transport/road maintenance существующие города явно прогреваются compiled CLI. Новый web процесс переиспользует снимок, заново проверяя доступ; повреждение и mixed artifacts возвращают обычную сборку. Runbook и manifest не подменяют обязательные SCM/release проверки.
- Занятый переход хранит собственную зону: каждый шаг транспорта больше не ищет её среди всех зон города. Управляемый релиз умеет готовить остановки, дороги и сцены при закрытом трафике, проверяя сохранность исходных данных и неизменность повторного запуска.
# 1.27.1 — непрерывный ландшафт возле транспорта
- Дорисовка окружения учитывает фактические чанки сцены. Расширенная зона камеры возле станции или аэродрома больше не оставляет тёмные прямоугольники без земли.
- Проверка готовности камеры и подготовка видимого окружения используют один набор чанков; локальные очереди, лимиты и масштабирование сохранены.
- Сценарий воспроизведения и границы проверки: [покрытие земли возле транспорта](docs/tasks/57-city-terrain-coverage.md).
# 1.27.0 — большой город с 10 000 задачами
- Единый конечный бюджет города расширен с 256 до 4096 чанков в генераторе, чтении сцены и аудите. Компилятор переиспользует свободные участки и индекс фронтира, сохраняя порядок выбора, прежние здания, дороги и входы.
- Сервер один раз разделяет городские данные по страницам и соседним клеткам. Построение сцены уступает event loop; кэш ограничивает суммарное число страниц больших городов.
- Браузер запрашивает компактное представление полной сцены: задачи передаются один раз, прямоугольные участки — координатами и размером. Полный прежний HTTP-ответ сохранён для совместимости; ETag разделены по представлению.
- JSON, геометрия и оценка памяти готовятся в worker. Видимый город загружается отдельно от полной физической модели дорог и пешеходов; растровые клетки и Pixi-объекты удерживаются вокруг камеры. Pan не вызывает сетевой загрузки чанков.
- Повторное открытие использует уже удерживаемую сцену с проверкой версий и сеанса, без увеличения сильного кэша. Районные контуры готовятся по интервалам строк; индекс маршрутов и повторяющиеся координаты дорожных связей занимают меньше памяти.
- Готовая физическая модель сохраняется при возврате в тот же город. Неизменные состояния светофоров не пересоздаются, диагностика передаёт только отличающиеся от красного состояния; координаты геометрии из worker передаются двумя двоичными буферами и восстанавливаются с уступкой основному потоку.
- Бюджет фоновой подготовки движения учитывает объём полной сцены и ограничен 90 с для большого города; прежние города сохраняют 20 с. Первый кадр, сетевые сроки, отмена владельца и кооперативная подготовка остаются независимыми.
- При выборе здания в уже открытом городе сначала показывается настоящая карточка задачи, затем переносится камера. Закрытие, другой выбор и смена сеанса отменяют отложенный перенос.
- Заранее загруженные модули карты и карточки используются при первом показе без повторного ожидания Suspense. Фильтр большого города запрашивает до 1000 метаданных на страницу вместо 250, сохраняя чтение одной согласованной ревизии и проверки доступа.
- При обновлении города во время строительной сценки видимая земля получает приоритет, а спрайты не ждут невидимую подложку. Камера удерживает прежний кадр до готовности актуальной земли выбранной области; окончание анимации и полная готовность обновления остаются независимыми.
- При восстановлении карточки через историю браузера запоздавшая готовность не переписывает адрес карты или другой задачи. Прямые ссылки по номеру и UUID и повторное открытие через «Вперёд» сохранены.
- Предел читателя объявлен в runtime capabilities. Перед откатом проверяется реальный размер сцен, включая порт; перед переключением старого образа останавливаются три writer-роли и проверяется завершение соединений БД. При несовместимости сохраняется совместимый кандидат и материалы восстановления.
- Реальный локальный workload содержит 10 000 задач одного города и 576 чанков. Проверки и границы измерений описаны в `docs/tasks/55-city-10000.md`.
Ограничения крайнего workload: активный heap остаётся 573–748 MiB; в эмуляции
телефона CPU×4 наблюдались краткие паузы до 318 мс. Это не подтверждение работы
на физических телефонах с малой RAM. Полные результаты и исходные отклонения
бюджетов сохранены в `docs/evidence/city-10000-20261028.md`.
# 1.26.0 — масштабируемое чтение и фоновые команды MCP
- Карточки и страницы читают геометрию только выбранных задач и кварталов. Для task.list_page добавлены индексы и составной keyset cursor; city.get больше не загружает задачи остальных городов. Workload районов в полных ответах читается одним групповым запросом.
- Добавлены compact-страницы стран, городов, районов и архива, compact-паспорта и точечный archive.record_get. Полные ответы сохраняют прежний состав без скрытого обрезания; рекомендуемый путь для больших проектов — страницы и compact.
- Смена стадии, перенос и удаление задач, удаление города/района и завершение района выполняются durable worker. Повтор команды сохраняет один эффект; отключение клиента освобождает ожидание, сохраняя принятую операцию.
- Polling фоновых заданий проверяет scope соответствующей операции и не публикует входной payload. Внутренние ошибки ресурсов и worker скрыты; отзыв токена и изменение прав проверяются на каждом запросе. Обновление last_used_at ограничено одной физической записью в минуту.
- Удалены подтверждённые неиспользуемые модули и экспорты; TypeScript проверяет неиспользуемые локальные значения и параметры.
- Нагрузка проверяется на 10 000 задачах в десяти городах. Один город с 10 000 задачами штатно отклоняется текущим лимитом 256 chunks; предел не повышался. Методика и результаты: docs/evidence/mcp-scale-10000-20261028.md.
# 1.25.0 — надёжный большой город и наблюдение за жизнью
- После перемещения камеры готовый участок больше не ждёт незавершённую подготовку прежнего видимого участка. Ошибки и готовность текущей области по-прежнему проверяются.
- Принятое пользователем обновление PWA ждёт активации своего service worker перед перезагрузкой. При превышении15 секунд остаётся явный повтор; поздняя активация сама страницу не перезагружает.
- Zod обновлена до4.6.6: слишком большие ограниченные коллекции отклоняются до обхода элементов. Проверены допустимая верхняя граница, авторизация и MCP/HTTP-контракты.
- Обновлены MCP client/server/core до 2.3.0 и Vite до 8.2.4. Входные данные MCP-инструмента ограничены сложностью 10 000 элементов; превышение отклоняется.
- Переподключение дочитывает историю до новых WebSocket-событий. Повторы и сбои фоновых операций ограничены; смена страны, выход и поздние ответы не возвращают прежние данные. Остановка сервера имеет общий предел 30 секунд.
- Выход сразу скрывает закрытые панели и прекращает запросы прежней сессии. Очистка push и подтверждение выхода ограничены общим сроком 15 секунд; при сбое можно повторно проверить состояние сессии.
- Город сохраняет готовую сцену при обновлении. Земля, объекты и текстуры удерживаются вокруг камеры; изменение комментария и качества не перестраивает неизменные дороги. Геометрия существующих городов с 200 и 1000 задачами сохраняется.
- Подготовка маршрутов и жизни города выполняется короткими отменяемыми порциями. Первый кадр показывает всю видимую землю, дороги и объекты; невидимые края готовятся после него. Пустые эффекты больше не вызывают пересборку графики каждый кадр.
- При наличии браузерного планировщика подготовка города использует приоритетное продолжение работы, а каждую восьмую порцию отдаёт обычной очереди интерфейса. Резервный путь, предел порции, отмена и детализация мира сохранены.
- Земля, покрытия и основания зданий хранят отдельные инструкции отрисовки, сокращая повторный обход неизменных объектов при смене порядка движущихся жителей и транспорта.
- Сообщение об ошибке карты и кнопка повтора помещаются на узком экране и не перекрываются кнопкой экскурсии.
- Статическая геометрия дорожных происшествий готовится вместе с сетью движения. Во время события заново проверяются занятость дороги, перекрытия и доступность служб; порядок выбора участков и маршрутов сохранён.
- Автобусы и службы завершают поиск пути при достижении единственного пункта назначения. Выбор машины, маршрут, перекрытия и поиск по нескольким назначениям сохранены.
- Карточка сначала получает компактный паспорт, большие коллекции читаются страницами по 50 записей. MCP получил необязательную компактную проекцию и отдельные постраничные чтения; прежние полные ответы и идемпотентность сохранены.
- Back/Forward возвращают карточки и камеру. Поиск, комбинированные фильтры, список всех районов и управление картой с клавиатуры доступны без выбора здания на canvas.
- Фильтры приглушают неподходящие постройки вместо жёлтых контуров. Незавершённые задачи активного спринта показывают пиксельные значки планирования, строительства, проверки, ремонта и выпуска; прозрачность сохраняется при появлении зданий и строительных сценках.
- Повтор загрузки сначала восстанавливает актуальную сцену, затем движение. Предзагрузка зданий видимой области выполняется параллельно с землёй; публикация ждёт готовности всех необходимых ресурсов.
- Ошибка подготовки движения сохраняет кнопку повтора при перемещении камеры. Убраны повторный индекс земли видимых объектов и лишняя заливка границ районов; требования к ресурсам неизменных зданий переиспользуются.
- Длинная панель фильтров прокручивается на коротких экранах, включая горизонтальный режим телефона. Подписи значков не перекрывают соседние элементы.
- Личные новости включают комментарии, материалы и приёмку; серии объединяются, прочтение подтверждается явно. Альбом показывает настоящие вехи и сохранённое сравнение развития.
- Можно наблюдать конкретный самолёт, поезд, паром или дорожное происшествие. Слежение включается по нажатию; экскурсия предлагает существующие события. Ограниченные жители посещают учреждения по реальным подходам и остановкам.
- Улучшены формы входа, регистрации, восстановления и приглашения: ошибки у полей, показ пароля, повтор загрузки и постепенная подготовка декора. Выключение звука гасит все активные игровые голоса.
- Номера удалённых задач больше не переиспользуются. Миграции 0043/0044 расширяют схему без перегенерации мира; старый runtime проверен после миграции и локального восстановления.
- CI разделён по зависимостям, сборке, unit, восстановлению, MCP и браузерам. Updater проверяет опубликованные entry, модули, шрифты и игровые PNG до принятия релиза. Метрики runtime доступны только с отдельным служебным ключом.
- Проверка публикации использует физическую игровую ревизию и не принимает пути к исходным рисункам из метаданных за runtime-ресурсы. Updater закрепляет предыдущий образ до сборки и проверяет фактические образы всех трёх ролей при откате.
# 1.24.14 — новый игровой вход и регистрация
- Экран входа построен вокруг цельного нативного прибрежного города: семь разных зданий, школа, садик, кафе, парк, фонтан и настоящие дорожные тайлы. Сцена не загружает движок карты или пользовательские данные, учитывает уменьшение движения, touch, экономию и скрытую вкладку.
- Регистрация разделена на аккаунт и первый город. Ввод сохраняется при возврате, фокус следует за шагом, запрос отправляется только при завершении. Серверная политика регистрации и контракт авторизации прежние.
- Вход, восстановление и приглашения используют общую игровую оболочку; формы доступны на коротких экранах. Убрана прежняя композиция с четырьмя домами и отдельной подложкой.
# 1.24.13 — реакции города и единый игровой интерфейс
- Комментарий вызывает доставку письма существующими жителями по настоящему подходу; после прибытия появляется пиксельный знак обсуждения. Обновление задачи обозначается документом. Во время стройки комментарий показывает короткий статичный сигнал, не мешая рабочим и дымку.
- Серии комментариев объединяются, в том числе до готовности карты. Реакции ограничены по количеству и времени, учитывают уменьшение движения, экономную детализацию и выключенную жизнь города. Данные задач сохраняются независимо от анимаций.
- Убраны плашки с названиями бытовых сцен поверх города. Действия показывают жители, предметы и существующие эффекты.
- Вход, регистрация, восстановление и приглашения используют общую игровую рамку и элементы управления. Мини-карта использует игровые тайлы и чёткие спрайты без поворота и размытия; длинные формы прокручиваются на коротких экранах.
- Исправлены метаданные MCP-обновлений: служебная страна и не переданный заказчик не считаются изменениями задачи. Описание больше не вызывает чтение новой сцены; событие комментария содержит настоящий город задачи.
# 1.24.12 — транспорт и повседневная жизнь города
- Проверен полный каталог из 47 MCP-инструментов через HTTP SDK: права, явная страна, повторные и конкурентные записи, фоновые операции, ошибки и переподключение. Исправлены проверка Base64, конфликт содержимого вложений, очистка файлов при commit/rollback и сокрытие параметров MCP URL в журналах. [Локальная приёмка](docs/QA-MCP-AUDIT-2026-10-09.md).
- Аэропорт становится доступен после 12 застроенных кварталов или трёх районов. Добавлен нативный терминал для участка 6×3 и отдельный сохраняемый аэродром; отсутствие пригодной полосы объясняется в панели.
- Поезда состоят из локомотива и пяти вагонов, используют две платформы и безопасные стрелки. Самолёты проходят стоянку, руление, взлёт, полёт и посадку; паромы швартуются у настоящего трапа.
- Все три вида транспорта принимают существующих жителей: очередь, посадка, поездка и высадка используют реальные пешеходные подходы и общий лимит населения.
- Готовые города соединяются сохраняемыми линиями. Открытие нового города сохраняет пригодные прежние маршруты; порты одного побережья соединяются при наличии открытой воды.
- Расписание и идентичность рейсов согласованы между CITY и PLANET/COUNTRY. Карточки показывают назначения, ближайшее отправление и подсветку направления. Недоступные страны остаются скрытыми.
- Добавлены миграции 0040–0042 и административная команда `transport:synchronize` с dry-run по умолчанию. Требуется согласованный выпуск клиента и сервера; [локальная приёмка и ограничения](docs/QA-TRANSPORT-REWORK-2026-10-09.md).
- Оптимизирована загрузка города на 200 задачах: числовое соседство животных, повторное использование неизменной сети движения, прогрев невидимой земли после первого кадра и общий атлас номеров на 1 MiB. [Замеры и ограничения](docs/QA-CITY-200-LOADING-2026-10-09.md).
- Сокращена подготовка городских событий: короткие поездки используют ограниченный поиск, перекрытия обновляют только закрытые клетки, занятость проверяется локально, парки повторно используют проверенные клетки, остановки исключают недоступные бордюры до классификации дороги.
- Исправлены проверки графики: диагностика жителей учитывает округление до экранных пикселей; Storybook и проверка источников строго распознают новые события и грузовые вертолёты.
- Устранён отказ публикации графического пакета при конкурентном запуске серверов одной ревизии; незавершённые копии не публикуются.
- Исправлен ракурс детей: четыре направления перерисованы под верхнюю камеру существующих жителей, с одинаковой рамкой3×4 и устойчивой охристой курткой. Проверены публикация атласа, школьный маршрут и масштабы города в Chromium/WebKit.
- Школы и садики принимают существующих детей и родителей через свои настоящие входы; школьный автобус привозит пассажиров к учреждению.
- Добавлены остановки с очередью, посадкой и высадкой из настоящих движущихся автобусов, эвакуатор с погрузкой машины и ремонт прорыва трубы.
- В свободных парках появляются ярмарка, игра с игроками и зрителями, собака с мячом и кормление птиц. Дождь добавляет зонтики, лужи, укрытие и брызги; лужи высыхают.
- Свежие завершения через MCP/WebSocket открывают школу, садик, магазин, пожарную часть или жилой дом после строительного reveal. Перезагрузка и перенос готового здания не повторяют открытие.
- Добавлены22 пиксельных изображения в общий atlas. Население и лимит транспорта сохранены; звук остаётся opt-in, reduced-motion отключает сценки.
- Исправлены посещения при перекрытом подходе и входы на пешеходном повороте; при отмене рейса пассажиры выходят после безопасной остановки.
- Остановки выбираются достижимыми парами. Изменение или удаление школы отменяет поездку и посещение прежнего входа; автобус сохраняет пункт назначения при перекрытии дороги.
# 1.24.12
- Ускорена подготовка города: направленный граф маршрутов, готовые планы парков и агрегаты объектов сцены повторно используются до изменения исходных данных.
- В итоговой локальной контрольной серии медиана открытия города с 300 задачами снизилась с 1,845 до 1,568 секунды (15%), с 1000 задачами — с 2,286 до 2,210 секунды (3,4%). Качество и состав города сохранены; кэши добавляют примерно 2–17 МБ памяти текущей сцены. Распределения перекрываются; выигрыш не гарантируется на любом устройстве.
- Исправлены столкновение при выходе из здания и взаимная блокировка посетителей общего входа. Житель появляется снаружи только на свободном месте.
- Повторно проверены все 100 стадий новых зданий и 30 стадий парков. Исправлен остаточный розовый пиксель на третьей стадии супермаркета.
- Устранены блокирующие релиз уязвимости зависимостей: MCP client 2.2.0, shell-quote 1.11.0 и source-map-js 1.2.2. Проверены MCP-авторизация и совместимость сборки; серверный SDK и игровые ресурсы сохранены.
# Архитектурное обновление 1.24.11
- Добавлены 20 архитектурных вариантов: дома на 4–5 этажей, школы, детские сады, полиция, пожарные части и магазины. Существующая трёхэтажная застройка участвует в расширенном выборе.
- Входы и строительные калитки поддерживают четыре стороны и смещение вдоль стены. Жители подходят к фактическому входу, заходят в готовое здание и выходят обратно.
- Службы и учреждения образования выбираются с учётом уже использованных вариантов; сохранённые здания и планы кварталов не меняются.
- Разработаны шесть парковых композиций с разными дорожками, мебелью, цветниками и игровыми площадками. Видимые части предметов не перекрывают дорожки и границы участка.
- Исправлено перекрытие смещённой двери номером задачи; высокие крыши сохраняют выбор мышью за пределами физического участка.
# 1.24.11
- Вернулось управление участниками в паспорте страны: добавление, роли и отзыв доступа.
- Добавлены одноразовые приглашения по ссылке для новых пользователей.
- Добавлены смена пароля и восстановление по резервным кодам с отзывом сессий и MCP-ключей.
- Задачи и карты остаются доступны только для просмотра; перегенерация не требуется.
# Changelog
## 1.24.10 — 2026-09-25
- Города на планете собраны в компактные миниатюры под своими названиями; уменьшена работа при приближении и перемещении.
- Городская сцена больше не включает задачи, участки и внутренние дороги соседних городов из общего чанка.
- Новые задачи занимают подходящие свободные участки всех кварталов района. MCP не принимает размер или выбранное семейство здания: оформление подбирается под участок.
- Перенос сохраняет задачу и историю, освобождая старый участок. Старые MOVE сохранены в базе как архив, но не занимают землю и не отображаются.
- Компактный экран подготовки города, убрана искусственная задержка перехода и прямоугольный цветовой шов травы.
- Миграция 0038 и перегенерация проверены на копии tasktopia.online. Выпуск требует maintenance-перехода с совместным восстановлением базы и приложения при ошибке.
## Не выпущено
- Смена стадии по WebSocket проходит через бригаду, работу инструментов, дым и пиксельный клубок пыли. Карточка сразу показывает действительные данные; прежний вид остаётся только на время сцены.
- Добавлены мультяшный снос с подготовкой и отходом рабочих и перенос прежнего здания грузовым вертолётом. Конечные руины, площадка переноса и положение здания берутся с сервера.
- В городе воспроизводятся ДТП, ремонт дороги, пожар, медицинский вызов и патруль. Службы движутся по обычным безопасным маршрутам; временно закрытые полосы обходятся или ожидают открытия. Звуки включаются в личных настройках, по умолчанию выключены.
- Убрана большая плашка района над улицами. Небольшой указатель размещается на свободном участке, сводка открывается сбоку. Карточка задачи учитывает вырез экрана и область жестов PWA.
- Ссылки задач в браузере и PWA сначала открывают отдельную карточку; город загружается после закрытия или кнопки «В город». Для вошедших участников ссылка с превью сразу ведёт к задаче. Добавлены повтор загрузки, сохранение ссылки при повторном входе, подготовка вкладок по требованию, исправления контраста и мобильных размеров. [Проверки и замеры](docs/TASK-LINK-ENTRY-2026-09-22.md).
- Планета открывает города напрямую; районный слой сохраняет городскую сцену. Добавлены 24 картографических модуля городов, новые облака, блики, звёзды и мягкая атмосфера.
- Компактная шапка и единый игровой стиль меню и диалогов. Вместо Плана — контекстные списки; карточка задачи разделена на четыре вкладки.
- Продолжены соседние улицы за границами городской сцены, добавлены варианты парков, въезд и остановка на парковках, фоновые события завершённых зданий.
- Сохранение сцены ускоряет возврат в город. Детализация ограничивает DPR, частоту кадров, транспорт и кэш; освещение всегда дневное. [Проверки и границы](docs/PLANET-CITY-UI-2026-09-22.md).
## 1.24.9 — 2026-09-22
- Исправлено создание задач при примыкании пешеходного подхода к вокзалу к межгородской дороге. Принятые дороги сохраняются, рельсы и застройка защищены.
- Аудит карты проверяет резервы ЖД и портов теми же правилами, что и генератор.
## 1.24.4 — 2026-09-09
- Исправлены ЖД поверх улиц и вагоны за концом рельсов. Перерисованы поезд, щебень, шпалы и перрон; добавлены остановка и интервал рейсов.
- Межгородские дороги допускают сохранённые короткие мосты с проверенными берегами. При пересборке маленькие группы задач получают компактные кварталы. [Проверки и условия выкладки](docs/tasks/city-railway-followup.md).
## 1.24.3 — 2026-09-09
- Проверка графики планеты использует тот же режим запроса, что и SVG. Исправлена ошибка декодирования после CDN-кэширования ответа без CORS-заголовка; CORS-защита canvas города и страны сохранена.
## 1.24.2 — 2026-09-09
- Завершены 20 уникальных городских типов и четырёхэтажный дом: 56 семейств/280 стадий в общем пакете. Сохранены нативные размеры и уникальность по городу.
- В городе появилась прямая ЖД с платформой и локомотивом с тремя вагонами. Пути строятся вместе с вокзалом; поезд движется после завершения. Исторические большие служебные участки показывают нативный терминал, аэропорт получает перрон и полосу.
- Первый кадр города не ожидает невидимую фоновую подготовку. Декодирование графики города и планеты ограничено 20 с; зависание допускает рабочую повторную попытку. [Замеры, QA и границы](docs/tasks/city-landmarks-rail-performance.md).
- Плашка PWA не перекрывает поиск и карточки задач, обновление можно отложить кнопкой «Позже». Устранено ложное уведомление при первом захвате страницы service worker.
- PWA предлагает новую версию кнопкой «Обновить»; предварительная загрузка исключает lazy-модули и дубликаты CDN.
- После тайм-аута карты можно повторить загрузку на месте. Незавершённые изображения отменяются; самолёты больше не задерживают первый кадр страны. [Проверки и ограничения](docs/tasks/pwa-update-timeout.md).
## 1.24.1 — кандидат релиза
- Скорректированы ракурс и масштаб десяти новых вариантов. Торговый центр «Атриум» получил пять игровых стадий; стадии 3/4/5 имеют независимые проверенные исходники и неизменное основание.
- Добавлен перечень 20 уникальных типов и стабильная случайная выдача: один экземпляр каждого типа на город, автоматически не более одного уникального объекта на квартал. Жилые дома повторяются. Сейчас подключён один тип; остальные ждут завершения графики. [Состояние и проверки](docs/art/CITY-LANDMARKS-2026-09-09.md).
- Ограничено ожидание карты и зависших workers: город восстанавливает обработку, сетевые ошибки допускают повтор. Исправлены шов воды, зум после перемещения страны и совместное движение поверхности и облаков планеты.
- В стране расширен контекст реального материка. Кварталы показывают диапазон номеров min–max; новые планы последовательнее размещают задачи, разнообразнее используют длинные и широкие дома, чередуют парки и добавляют деревья во дворах. Сохранённые участки не перемещаются. [Проверки и ограничения](docs/tasks/map-loading-geography.md).
## 1.24.0
- Обзорный транспорт: ЖД между городами с готовыми вокзалами по суше, маленькие корабли между континентами по воде. На планете уменьшены таблички и включён общий обзор; в стране согласованы масштаб воды и направления самолётов. [Проверки](docs/ATLAS-TRANSPORT-PLAN.md).
### Карта и графика — 2026-09-08
- Исправлены чёткость микроспрайтов, повороты животных и горизонтальное перемещение карты; добавлены четыре типа машин и четыре лодки.
- Обновлены облака, звёзды, ступенчатый силуэт планеты и сплошное водное покрытие страны; размер миниатюр городов теперь не меняется при зуме страны и планеты.
- Переработаны верхняя панель, переключение «Город / Районы», подписи и легенда; из просмотра задачи убран перенос между спринтами. В новых кварталах не создаются участки уже трёх клеток; существующие узкие участки озеленяются, каменные props скрыты, светофоры привязаны к краю дороги.
- Полный перечень и границы проверки: [16 замечаний](docs/VISUAL-CONSISTENCY-2026-09-08.md).
### Текущий статус пакета — 2026-09-07
Пути к отсутствующим материалам этого исторического среза оставлены текстом.
Они недоступны в текущем репозитории; их наличие и проверенность здесь не подтверждаются.
- Локально опубликованы **35 семейств зданий / 175 стадий, 106 props и 510 PNG** во всём `public/game-assets/v5`, ревизия `750f26edc463160e`. В каталоге 27 жилых семейств и восемь служб; завершены восемь дополнительных квадратных домов, длинные горизонтальный и вертикальный корпуса, Г- и П-образные дома. Все семь структурных форм доступны новым V3-планам, неизменяемый набор форм V2 и существующие назначения сохраняются.
- Основной агент подтвердил успешные финальные проверки исходников, опубликованного пака и стиля после обновления метаданных. R3 завершил 48 случаев реальной карты (39 стадий зданий и 9 парков); четыре native-pixel пробы совпали на 100%, включая 3696/3696 пикселей внутренней области вертикального корпуса. Результаты — в R3 evidence (`screenshots/courtyard-art-48-final-r3/evidence.json`) и матрице стадий (`screenshots/courtyard-art-48-final-r3/stage-matrix-evidence.json`). Независимо визуально просмотрена выборка из 21 кадра; это не утверждение о ручной проверке всех 48.
- Исходный R3-кадр PLANET отклонён из-за закрывающего переходного экрана и сохранён как история. Отдельная повторная съёмка готовых обзоров (`screenshots/courtyard-art-48-final-r3-overviews/evidence.json`) прошла: переходных экранов нет, canvas сохранён, по одному запросу CITY/COUNTRY/PLANET, ошибок нет. Все три новых кадра дополнительно просмотрены независимо. Проверка установленной PWA на физическом устройстве и production-релиз здесь не заявляются. Точные семейства, геометрия, хеши и границы приёмки — в [контрольной точке интеграции](docs/art/COMPACT-EXTENDED-BUILDINGS-2026-09-07.md).
- Компактная графика восьми служб, полёты между завершёнными task-backed аэропортами и сохранённые межгородские наземные дороги реализованы. Это не утверждение о наличии физической ВПП или механики железнодорожных путей; автоматическое создание сервисных задач по-прежнему запрещено.
### Промежуточная история разработки — до контрольной точки 2026-09-07
Следующие записи сохранены как история отдельных подэтапов, а не текущие ограничения или итоговые числа каталога. Указанные ниже 3/5/21/23 семейства и статусы «ещё не опубликовано» относятся к моменту соответствующего подэтапа; текущий статус приведён выше. Исторические версии схем и результаты проверок не подменяют приёмку итоговой сборки.
- Исправлен контрольный лист строительных стадий: длинные и высокие корпуса больше не обрезаются и не перекрывают соседние строки. Аудит готового пака использует ту же проверку размеров двери и утверждений о ракурсе, что и верификация исходников; совпадения хешей недостаточно для противоречивого визуального отчёта. Новый длинный дом пока остаётся непринятым черновиком.
- Добавлены два отдельно нарисованных ИИ-дома: синий с балконами/террасой и кирпичный с оливковой ребристой крышей. Каталог теперь содержит23семейства и115стадий. Для новых слотов выбираются менее повторяющиеся совместимые дома внутри квартала; парки не искажают счётчик домов, старые назначения и резервирование служб сохраняются. Проверка палитры допускает явный MAXCOVERAGE без перерисовки геометрии, чтобы не терять маленькие цветные окна.
- Выбор нового квартала учитывает ширину и глубину запрошенного здания вместе со строительными отступами и проходом. Неподходящие шаблоны исключаются до проверки рельефа; существующие участки не перемещаются. Новые длинные спрайты пока не прошли приёмку и не опубликованы.
- Новые кварталы сохраняют полный план участков в формате template v3: дома, строительные отступы и остаточные участки под парки больше не пересчитываются при чтении. Планировщик поддерживает независимые ширину и глубину без поворота спрайта; крупные размеры проверены на тестовых формах, новые длинные/П-/Г-образные ассеты ещё не опубликованы. Существующие кварталы v2 сохраняют прежнюю геометрию. Откат после создания v3-кварталов требует совместимой версии либо восстановления согласованного снимка БД.
- Освещение мира привязано к реальному времени `Europe/Moscow`: рассвет06–10, день10–16, закат16–18, ночь18–06. Переключатель ночи и ускоренный цикл удалены; после возврата во вкладку время сверяется заново без перезагрузки карты.
- Уличные и дворовые фонари размещаются с детерминированным шагом8клеток вне пешеходной полосы, с отступом от переходов и строек. Крупные парки получают до8светильников. Четырёхклеточный контекст сохраняет размещение на стыках чанков; старый кеш пересчитывается без сброса задач и города.
- Предпросмотр проверки строительных стадий больше не обрезает длинные и вертикальные полотна. Это подготовка пайплайна, не публикация новых семейств зданий.
- Исправлена ложная ошибка аудита при переключении активного спринта: `PLANNED` означает неактивный район и может содержать начатые задачи. Прогресс сохраняется, изменение стадии до повторной активации по-прежнему запрещено. На COUNTRY/PLANET аэропорт показан новым компактным терминалом.
- Спринт расширяется новыми кварталами на связанном фронтире города, когда подходящие слоты закончились. Старые участки и дороги сохраняются; отдельные группы кварталов не создают новый спринт. Попадание в район проверяется по его реальным участкам, а не общему прямоугольнику.
- Каталог task-парков расширен до 15 вариантов: добавлены маленький и большой парк, площадь с фонтаном, памятник, мемориальный сквер, плодовый сад и прогулочный сквер. Большой парк получает участок `17×17`, компактные объекты занимают подходящие слоты существующих кварталов. Автоматически назначенный вид сохраняется; самостоятельные задачи генератор не создаёт.
- Фонтан и памятник получили отдельные ИИ-изображения `16×16` для стадий `3–5` с неизменным основанием. Композиция парка резервирует проходы и расположение объектов до появления декора. Миграция `0027` согласует CHECK базы с 15 вариантами, включая ранее объявленные озеро и парковку, без сброса мира.
- Все 17 деревьев перерисованы через ИИ в компактный профиль V7: холст `16×16`, видимая крона до `12×14`, привязка к центру клетки. Леса выбирают группы одного вида и просветы; генератор проверяет всю крону относительно дорог, построек, проходов и других деревьев, включая границы чанков. Парки используют тот же контракт. Удалена поддержка старых дочерних спрайтов парков.
- Постоянная история площадок: миграция `0026` сохраняет MOVE при переносе между спринтами одного города и руины после удаления. Участки не используются повторно; минимальная история доступна по клику, MOVE ведёт к канонической задаче. Перенос атомарен и идемпотентен, доступен в карточке и через MCP `task.transfer`. Карточка закрывает старые данные при подтверждённых 403/404, но сохраняет их при временных 5xx.
- Добавлены 10 уникальных ИИ-домов и ещё 6 служб: школа, магазин, полиция, вокзал, аэропорт и администрация. Вместе с прежними компактными домами, клиникой и пожарной каталог содержит 21 семейство и 105 изображений стадий. Размеры сохраняются в классах `6×3`, `6×4`, `6×6`; новые дома выбираются только для новых слотов, старые назначения не меняются. Все 30 новых домашних стадий `3–5` проверены в настоящем городе на 480 задач и 20 спринтов, включая открытие соответствующих карточек.
- Администрация резервируется после 18 занятых кварталов города и назначается следующей подходящей задаче, без автоматического создания задач. Миграция `0028` добавляет роль `CIVIC` без изменения существующих задач.
- Подготовлен production runbook с maintenance, проверенным backup/restore, серийной перегенерацией и контрольными хешами. Собранная команда `worlds:audit` теперь строго read-only, не запускает миграции и возвращает ошибку при нарушениях. Выпуск остаётся кандидатом до фиксации и согласования точной ревизии и окружения.
- Инциденты BUG/HOTFIX различают сообщение, ремонт, проверку и активную аварию. Нативные пиксельные эффекты ограничены реальной геометрией дома, не рисуют пожар на пустом участке или парке, убираются при изменении состояния. Восемь прежних больших PNG дыма/огня выведены из runtime; визуальная машина реагирования пока не является физическим выездом по дороге.
- COUNTRY v6 наследует каноническую макрогеографию PLANET, материки определяются четырёхсвязной сушей. Общая защита wheel-burst допускает один переход уровня за жест; вход в город/страну использует реальную точку под курсором, не ближайший объект через океан.
- Release-readiness: карточка задачи использует единый согласованный read model, холодная проекция страны загружает layout городов пакетно, а прогресс внутри той же стадии не пересобирает неизменную геометрию. Добавлен индекс истории комментариев `0025`; удалён старый inline-JSON формат Redis locator.
- Realtime-пакеты города сохраняются до готовности renderer; повторный запрос после ошибки перечитывает авторитетную сцену. Кэш карточек и карт инвалидируется адресно, запросы дедуплицируются и защищены от поздних ответов предыдущей сессии/ревизии.
- CITY повторно использует рассчитанный worker рельеф при подготовке текстур; начальная очередь обрабатывается с ограничением числа работ и мягким временным бюджетом кадра без изменения географии. На COUNTRY с более чем десятью городами ограничены пересечения подписей: все города доступны через локальный список с поиском, колесо/палец прокручивает список независимо от карты. До готовности карты подписи не перехватывают фокус и нажатия.
- Ссылки на задачи разрешаются по immutable ID и проверенному членству в стране. Web Push ограничен разрешёнными провайдерами и общим таймаутом 5 секунд; исправлены владение подпиской и остановка worker. Обновлены Fastify, fast-uri и xmldom до исправленных версий без смены major API.
- Первый compact cutover запрещён обычным updater: он требует отдельного maintenance run, проверенного полного backup/restore и регенерации до возврата трафика. Release mutex удерживается отдельной PostgreSQL-транзакцией. Локальные измерения и оставшиеся ограничения роста окружённых районов описаны в `docs/RELEASE-READINESS-AUDIT.md`; эти изменения сами по себе не означают разрешение production-релиза.
- Движение CITY переведено на общий fixed-step контроллер машин и пешеходов: направленные полосы, полное резервирование перекрёстка/перехода до свободного выхода, ожидание на тротуаре и физическая проверка совместного шага. Старые bus-габариты, раздельные yield-правила и разговоры на зебре удалены. Неизменная сцена сохраняет IDs и маршруты; скрытый город не продолжает симуляцию.
- Все восемь направленных изображений людей выровнены в native `8×8`: видимый размер `3×4`, bounds `[2,2,5,6]`, anchor `[4,4]`. Кузова машин и люди проверяются по фактическим opaque bounds, без поворота collision box независимо от PNG. Остальные 28 micro-изображений не изменены.
- Компактная переработка города заменяет organic-complex размещение и старые пространственные строки на `город → район → прямоугольный квартал → типизированный слот`. Задачи занимают совместимые свободные слоты по порядку; новые кварталы добавляют общие семантические дороги без сдвига существующих построек.
- Большой каталог заменён тремя компактными семьями: `compact-apartment-v1` (`48×48 px / 6×6` клеток), `compact-row-v1` (`48×24 / 6×3`) и `compact-wide-v1` (`48×32 / 6×4`). Базовая клетка — `8 px`, этаж фасада — `5 px`; высокий фронтально-верхний ракурс 45°, отдельные измерения окон и дверей закреплены в контрактах. Новые row/wide используют спокойные бежево-оливковые плоскости и полосы, сочетающиеся с деревьями и землёй. Стадии 5→4→3 сохраняют геометрию семьи: половина крыши на 4-й, непрозрачные комнаты без крыши на 3-й. Стадии 0–2 собираются из планировки и компактного строительного набора.
- Плотные шаблоны кварталов version 2 укладывают совместимые прямоугольные слоты с проходами и карманными парками; непригодные мелкие остатки не становятся фиктивными стройплощадками. Сервисные пороги резервируют следующий свободный слот для школы, медицины, служб, магазина, железной дороги или аэропорта. Только следующая подходящая авторизованная задача занимает резерв: генератор не создаёт задачи автоматически и не объявляет инфраструктуру готовой.
- Люди, четыре модели машин, восемь статичных животных и самолёт используют новый набор из 36 micro-изображений: native `8×8`, самолёт `16×16`, отдельные нарисованные направления без уменьшения старых больших спрайтов. Общая мелкая россыпь цветов, камней, травинок и камыша удалена; terrain raster, квадратные леса и осмысленный декор task-парков сохраняются.
- Старые building-generation, geometry и door-review инструменты удалены; `assets:compact:verify` проверяет общий source frame, структурную маску, alpha, палитру и актуальность визуального review. Ландшафт, дороги и деревья сохраняют действующий процедурный мультяшный стиль.
- Миграция `0023_compact_block_cutover.sql` намеренно удаляет производную геометрию и chunk-кэши. Задачи, номера, статусы, документы, история и terrain seed сохраняются; перед возвратом map traffic нужна полная пересборка. Откат требует pre-cutover DB snapshot вместе со старой ревизией приложения. Production-релиз в рамках этой работы не выполнялся; итоговые тесты/build/browser проверяются отдельно.
- Полный набор графики служб, полноценные аэропорт/железная дорога/автовокзал и другие landmarks остаются отдельными будущими подэтапами. Наличие пяти семей, сервисных резервов и task-owned парков/воды/парковок не означает готовность всей инфраструктуры.
- CITY scene schema v3 передаёт атомарную сцену, дедуплицированные снимки задач завершённых районов и bounded `airportConnections` между завершёнными task-аэропортами своей страны. Удалённая конечная точка не загружает соседний город. COUNTRY overview v6 представляет один квартал одним зданием, PLANET atlas v4 — один район одним зданием. Общие canonical координаты сохраняются; прежние схемы кэша не принимаются как новая проекция.
- COUNTRY наследует из PLANET terrain и владение макроклеткой; рядом остаётся соседняя суша или фактический океан, без искусственного рва. Неизменяемая карта один раз компонуется в native `16×16 px` raster из общих terrain-ассетов, а camera и самолёты обновляются DOM/compositor transforms без WebGL redraw и long tasks.
- PLANET и COUNTRY используют общий deterministic terrain selector и quadratic flight geometry. Воздушные маршруты строятся только между завершёнными task-backed аэропортами; резерв AIRPORT и край viewport не являются конечными точками полёта.
- Wheel/trackpad во всех трёх уровнях использует реальную величину `deltaY` и frame-rate-independent интерполяцию. CITY и COUNTRY сохраняют точку под курсором, а возврат на PLANET — фокус страны. Эффективный минимум CITY равен `max(0.8, viewportWidth/residentRasterWidth, viewportHeight/residentRasterHeight)`: на высоком/широком экране камера не открывает чёрные края уже загруженной сцены и не догружает лишние чанки ради фиксированного zoom.
- COUNTRY overview больше не падает с `Maximum call stack size exceeded` на крупных production-городах: границы миниатюры вычисляются линейным проходом без передачи сотен тысяч клеток аргументами в `Math.min`/`Math.max`.
- Ранее production hotfix `1.23.1` вернул панорамирование по полной территории города и атомарную загрузку всех его чанков одним city-scene запросом. Его фиксированный минимум `0.8` заменён описанным выше viewport-safe ограничением; `160×100` остаётся стартовой композицией, не размером сцены.
- Статический природный декор переведён с нестабильных пересобираемых particle-буферов на обычные Pixi-контейнеры: деревья, кустарники и пропсы снова отображаются без `glDrawElements`, TDZ и `addChild` ошибок. Lazy-модалка задачи показывает загрузочную оболочку в тот же кадр после клика.
- Страна использует компактную top-view семантическую проекцию городских и районных контуров и уменьшенные клетки общего рельефа; синтетические дороги и белые боковые стены удалены. Планета получает рельеф из того же canonical world seed, сохраняет апертуру на любом zoom и при переходах фокусирует выбранную страну или город.
- Добавлены обязательные skill-контракты непрерывности `PLANET → COUNTRY → CITY` и визуальной release-верификации карт.
- Маленькие и большие города открываются с одинаковой стартовой композицией `160×100` клеток; минимальное отдаление ограничено фактическим resident raster. Первый кадр городской сцены принудительно рендерится до скрытия loader; полная территория приходит одним scene-запросом без viewport- и chunk-запросов.
- Экран входа теперь использует компактную сцену из настоящих versioned-спрайтов зданий, деревьев и транспорта Tasktopia вместо отдельной CSS-имитации карты; на мобильном сцена вынесена ниже вводного текста. Внутреннее пояснение о cookie и передаче пароля интеграциям удалено из интерфейса.
- Исправлен ложный `CONFLICT` при первом `task.create` через production MCP: optional-поля со значением `undefined` теперь приводятся к JSON-совместимому payload до сохранения и idempotency-сравнения. Идентичный повтор возвращает прежнюю задачу/job, а повтор ключа с действительно изменёнными данными по-прежнему отклоняется.
- Подписи стран и городов теперь рендерятся одним обзорным компонентом: название, точный progress и число зданий в работе имеют одинаковую геометрию и токены; на планете дополнительно показано число городов. Planet atlas schema v2 отделяет незавершённые здания от общего `buildingCount` и инвалидирует старый session-cache.
- Текстовая плашка «В сети» удалена из шапки: доступный статус соединения перенесён в зелёный индикатор на инициале профиля.
## 1.23.0 — 2026-08-24
- Карта получила явную иерархию `Планета → Страна → Город` в нижней панели. На планете уровни страны и города заблокированы до выбора, на стране заблокирован город, а из города можно одним нажатием вернуться к активной стране.
- Планета теперь отображается как вращаемый ортографический шар: drag и клавиши меняют камеру, wheel приближает без масштабирования подписей, облака проходят через всю видимую полусферу, а уменьшенные самолёты меняют масштаб у взлёта и посадки. Seed-территории растут компактными материками вместо длинных цепочек гексов.
- Все подписи стран имеют фиксированный экранный размер `144×38`, не перекрываются и остаются отдельными доступными hit-target. Подписи городов также унифицированы до `28×6` клеток, а одно- и многогородская карта используют общий минимальный охват `300×169` клеток.
- Границы масштаба стали навигационными: две дополнительные прокрутки наружу после минимального zoom переводят `Город → Страна` и `Страна → Планета`; на максимальном zoom планеты две дополнительные прокрутки внутрь открывают ближайшую к указателю страну.
- Новый `/api/planet-atlas` одним агрегирующим запросом отдаёт только доступные аккаунту страны и их компактный масштаб. Связные непересекающиеся hex-территории, материки, берега и маршруты воспроизводятся на клиенте из seed; координаты планеты не хранятся в PostgreSQL.
- Размер страны на планете зависит от городов, районов и зданий, а progress-полоска показывает средний прогресс. Между странами и городами летают несколько типов пиксельных самолётов; вода, облака и краевой туман имеют reduced-motion fallback.
- Из шапки удалены кнопка «Карта» и счётчики районов/зданий. Компактный planet DTO использует private ETag/cache и schema-gated `sessionStorage`, поэтому повторное открытие рисуется без ожидания сети.
## 1.22.0 — 2026-08-24
- Realtime-уведомления больше не говорят «задача обновлена»: они называют здание или парк, его номер, новый этап строительства и точное расположение `страна · город · район`. Параметры, документы, чек-лист, дефекты и ответственные получили отдельные понятные формулировки.
- Каждое durable task-событие хранит компактный building-context на момент изменения. Кнопка `Открыть здание` переключает правильный город, центрирует карту и открывает карточку; тот же маршрут теперь используют поиск здания и ссылка `/task/№`.
- MCP больше не использует глобально выбранную страну: `country.list` возвращает доступные проекты, а каждый проектно-зависимый tool и country resource принимает явный `countryId`, повторно проверяет членство и роль и не изменяет web active country. Удалены MCP-команды `country.get_current`/`country.select`; их заменяет `country.get`.
## 1.21.0 — 2026-08-24
- Атлас страны получил schema v5: подписи закреплены над фактическим контуром города и участвуют в collision settlement, bounds учитывают весь cutout и горизонтальный запас, а дополнительное пространство экрана заполняется тем же canonical seed без растягивания или одноцветных полей.
- Районы на обзоре показывают средний прогресс задач интенсивностью заливки и точным индикатором в подписи. Статусы из realtime replay применяются полным пакетом; комментарии не сбрасывают atlas cache, структурные изменения перечитывают проекцию.
- Повторное открытие атласа синхронно рисует schema-gated snapshot из `sessionStorage` и обязательно перепроверяет ETag в фоне; сервер использует адресный process-cache и приватный `stale-while-revalidate`.
- Шапка карты уменьшена до общей 52-пиксельной сетки: режим явно называется «Карта», отдельная кнопка «План» перенесена в меню страны, кнопка аккаунта стала квадратной, нижние обучающие плашки удалены.
## 1.20.1 — 2026-08-24
- Три пожарные машины заново собраны из единого AI-authored V7-листа в той же east-facing frontal-top проекции, что автобус и легковые: неглубокая верхняя плоскость, ближний борт, узкая ступенчатая передняя кромка и два колеса на общей дорожной baseline. Исходник закреплён SHA-256 и больше не может незаметно вернуться к плоскому боковому ракурсу.
- При парковке справа от горящего здания east-facing исходник зеркалится тем же способом, что автомобиль при движении на запад: кабина, маяк и начало водяной струи теперь направлены влево, к фасаду, а не от места происшествия.
- Vehicle gate сравнивает envelope и верхнюю плоскость каждого пожарного варианта с каноническим автобусом, дополнительно проверяет направление, immutable source digest и отдельные силуэты автоцистерны, спасательной машины и автолестницы.
## 1.20.0 — 2026-08-24
- Первый seed-кадр получил редкие связные травяные акценты по 1–3 пикселя, сгруппированные крупными природными пятнами, и устойчивые к границам чанков поля `40–52 × 28–38` клеток. Пшеница и кукуруза рисуются вариативными рядами пикселей без тысяч отдельных crop-entities и без координат в PostgreSQL.
- Seed-декор природы теперь создаёт только связные macro-кластеры кустов и камней; прежняя россыпь до 3002 crop sprites на контрольном участке удалена. Wire и runtime получают семантический рельеф, а не координату каждого стебля.
- Центр физического кузова и позиция спрайта используют одно направленное смещение к медиане. Нижняя горизонтальная полоса поднята на 2 px, встречная отделена симметрично; габариты и collision envelope больше не расходятся визуально.
- Регулируемые T/X-перекрёстки запрещают въезд без свободного выхода, сохраняют reservation после точки невозврата и адаптивно передают зелёный накопившейся поперечной очереди. Реальный хвост блокирует конфликтную зону, но приближающийся нос больше не замораживает all-red; смешанные CAR/BUS очереди освобождаются без overlap и остановки дольше 30 секунд.
- У АЗС асфальт стал одной центрированной полноширинной полосой глубиной четыре клетки под фасадом; лишняя верхняя плита удалена. У готовых малоэтажных домов тротуар ограничен фактической нижней проекцией здания и больше не выступает над крышей.
- «Светлый малоэтажный ЖК» полностью пересобран отдельными стадиями 3–5: единая неглубокая мансардная крыша, одинаковая камера и baseline, стандартный двойной вход `16×16`. Строгий geometry/projection gate, door-sheet и весь asset audit проходят без предупреждений.
## 1.19.9 — 2026-08-23
- Все десять обычных малоэтажных жилых семейств увеличены с сохранением исходных пропорций; «Галерейный жилой дом» теперь использует canvas `144×136`, footprint `18×14` и читаемый двойной вход вместо визуально уменьшенной двери. Остальные корпуса занимают `18–24` клетки по ширине и `14–16` по глубине.
- Единый контракт входа закрепляет модуль `16×16`, видимые створки `12×14`, общую южную baseline и визуально подтверждённые bounds. Контактный лист с nearest-neighbor увеличением привязан к SHA-256 проверенного stage-5; тест каталога блокирует возврат маленьких, смещённых или изменённых после review дверей.
- Восемь семейств с устаревшим непрозрачным фоном получили новые независимые AI-authored стадии 3–4 с hard alpha. Строгий geometry/projection gate проходит у всех десяти семейств без ошибок; ранний каркас занимает не более 80% высоты готового дома.
## 1.19.8 — 2026-08-23
- Семейство пожарной техники полностью перегенерировано по тем же AI-authored референсам и промпт-контракту, что действующие автомобили и автобус. Все три варианта теперь используют автобусный canvas `56×24`, связный кузов `54×22` и footprint `7×3`, поэтому тяжёлая спецмашина больше не выглядит служебным пикапом.
- Автоцистерна, спасательная машина и автолестница получили единые near-top камеру, масштаб кабины, диаметр колёс, дорожную baseline, верхне-левое освещение и плотность пиксельных деталей. Реальные chroma-разделённые границы источника исключают обрезание соседней машины при сборке.
- Incident overlay вычисляет положение машины из актуального каталожного размера; маяк и начало водяной струи перенесены на крышу высокой кабины. Vehicle gate блокирует старый размер, несвязные детали, неверный источник, разрыв колёс и плоский передний профиль.
## 1.19.7 — 2026-08-23
- Пожарная техника перерисована в той же near-top frontal-side проекции, что и восемь моделей легковых машин: ступенчатая крыша кабины, отдельные боковое и наклонное лобовое стекло, сужающийся капот, видимая верхняя плоскость оборудования, ближний борт и округлые колёса на общей дорожной базе. Прежние прямоугольные силуэты удалены.
- Автоцистерна получила округлый ребристый бак и насосный отсек, спасательная машина — скошенный высокий кузов с тремя шкафами, автолестница — низкую открытую платформу, поворотный узел и наклонные направляющие.
- Vehicle gate теперь измеряет заполненность силуэта, разнообразие ширины строк, ступени передней кромки, число сплошных прямоугольных рядов и трёхпиксельные контакты округлых колёс; возврат к плоскому коробчатому кузову блокирует выпуск.
## 1.19.6 — 2026-08-23
- Три пожарные машины приведены к масштабу текущего транспорта: canvas `48×16`, непрозрачный кузов `46×14`, то есть ровно две легковые `24×16` по длине и меньше автобуса `56×24`. Автоцистерна, спасательная машина и автолестница различаются конструкцией кузова, а не перекраской.
- Пожарный ствол больше не закреплён за одним средним очагом. Расчёт последовательно удерживает каждую точку огня и за `320 ms` плавно переводит струю на следующую; core остаётся непрерывным, блики движутся вдоль воды, ударные брызги обновляются в точке контакта.
- Vehicle audit теперь блокирует неверный canvas/opaque bounds, разорванный кузов, palette-only варианты и устаревший source sheet пожарной техники.
## 1.19.5 — 2026-08-23
- Seed terrain первого кадра сохранил нулевую зависимость от HTTP/Worker/PNG, но теперь получает детерминированный двухтональный pixel-pattern внутри каждой клетки. Поэтому retained terrain после загрузки overlay больше не остаётся плоским зелёным прямоугольником.
- Семиклеточная дорога сохраняет три центральные клетки как физический clearance, но рисует одну жёлтую осевую линию только на точном центре. Машины идут по центру уже назначенной правой полосы без повторного внешнего сдвига; north/south ракурсы не получают процедурные пиксели вращения колёс.
- Светофорный цикл сокращён до двух 12-секундных зелёных фаз с односекундной all-red очисткой; физический хвост автобуса по-прежнему адресно продлевает all-red только занятому узлу. Смешанные CAR/BUS тесты ограничивают непрерывную остановку 30 секундами вместо прежних 44,6 секунды и сохраняют нулевые overlap/wrong-way.
- Seed-поля пшеницы и кукурузы увеличены с максимум 99 до связных участков не меньше 180 клеток на контрольном seed; координаты остаются чистой функцией seed и не записываются в backend.
## 1.19.4 — 2026-08-23
- Пешеходный импорт перешёл с независимого растягивания каждого кадра до `12×18` на общий family-scale для `A/B/C`; новые north/east/south листы имеют две читаемые контактные позы, проходящую позу обеих ног, общий baseline и проходят обязательный animation gate внутри `npm run assets:verify`.
- Восемь автомобильных моделей пересобраны в одной orthographic frontal-top проекции с общими колёсами, дверями, линией контакта и направленными north/south видами. Проверенный SHA-256 исходного листа записан в каталог и manifest; каждый из 24 ракурсов обязан изначально состоять из одного связного кузова, а молчаливое удаление лишних компонентов запрещено. Runtime анимирует четыре положения блика ступицы и не поднимает весь кузов между фазами.
- Светофорный цикл увеличивает полезное движение с 38% до 67%: две 21-секундные зелёные фазы разделены 10,5-секундным all-red. Эффективная фаза удерживает all-red, пока физический кузов поперечного транспорта пересекает box. Реальный семиклеточный граф сохраняет `roadClass`, отличает прямой участок от T/X и допускает прямой platoon только по одной оси; детерминированные тесты фиксируют очистку конфликтной зоны, отсутствие starvation и полное освобождение смешанных очередей CAR/BUS.
- Ошибка запуска WebGL теперь переводит карту в явный recoverable state и действительно пересоздаёт renderer по кнопке. После уже показанного seed-кадра сбой overlay/chunk отображается компактным уведомлением и больше не перекрывает всю карту.
- Растительность, кусты, камни и поля пшеницы/кукурузы переведены в chunk-stable seed generator без строк backend; park interior выводится из родительской AREA, legacy `PARK_DECOR` удаляется миграцией и запрещён constraint-ом.
- Дороги получили профили local `3` и collector/arterial/highway `7`; машины пересобраны в нативном `24×16`, автобус — `56×24`. Stateful admission token, длинная all-red очистка и blocked-exit reservation устраняют встречный въезд и циклические пробки.
- Семь АЗС объединены V6-дизайном с canvas не меньше `96×72`, footprint не меньше `12×7` и полноразмерными дверями; городской паркинг `96×72` больше не выглядит незавершённым каркасом. Silhouette extractor изолирует оптически центрированные варианты общего stage-листа.
- Detail zoom использует только целочисленный pixel scale, но накапливает непрерывную target-scale, поэтому граница overview/detail не залипает; animated occupied-box фиксирован между кадрами, статичные resident-фигуры удалены, а tree gate измеряет реальный центр контакта с клеткой `8×8`.
- Видимый прямоугольник карты теперь собирается настоящей server-side batch-операцией: один L2 range read, один bounded spatial snapshot, ограниченная параллельность build, один JSONB UPSERT и один retention pass. Seed terrain остаётся на экране и переиспользуется при приходе инфраструктурного overlay.
- Геометрическая генерация вынесена в durable PostgreSQL queue отдельного `world` runtime. Длинные jobs обновляют lease, безопасно повторяются по idempotency key и после bounded wait возвращают явный accepted-контракт с HTTP/MCP polling вместо ложной ошибки.
- Task/district placement использует один command-scoped spatial snapshot; новые road cells и masks записываются set-based операциями. Compact district runs добавлены additive/dual-read миграцией с parity и сохранённым legacy rollback-path.
- Опциональный Redis хранит content-addressed chunk blobs и versioned locators, объединяет cold build между replicas через expiring lease и fail-open откатывается к PostgreSQL при любой недоступности.
- Realtime relay восстанавливает пропущенные durable events после reconnect, а version-tagged road/surface caches инвалидируются одинаково для локальных и внешних событий. Traffic arbitration устраняет циклическое ожидание, не блокирует уже вошедший в перекрёсток транспорт и учитывает исправленный размер кузова.
- Release-wide world replay уважает `DATABASE_POOL_MAX` и защищён глобальным PostgreSQL advisory lock; документация описывает additive rollout, rollback, Redis, queue и production parity gates.
## 1.19.3 — 2026-08-21
- У ходящих жителей удалён запечённый зелёный chroma-фон. Импорт animated
atlas режет велосипедистов и животных по реальным границам силуэта, а
release-gate блокирует chroma/magenta matte, дрейф центра массы, baseline и
изменение площади силуэта между кадрами; боковые кадры больше не сжимаются.
- Трёхэтажная городская парковка заново создана в общей frontal-top проекции:
стадии 3–5 сохраняют один фасад, человеческую дверь и выраженную верхнюю
плоскость крыши. Geometry/projection verifier проходит без ошибок и warnings.
- АЗС получает на фронте компактный центральный forecourt из лёгкого асфальта,
отдельную площадку магазина и травяные края вместо сплошного прямоугольника
дорожного покрытия размером со весь footprint.
- Пожарные машины увеличены с `32×8` до `40×16`, получили читаемые кабину,
колёса, цистерну, спасательные отсеки и лестницу. Анимированная водяная струя
теперь объёмная у сопла, сужается к фасаду и сохраняет движущиеся блики и
ударные брызги.
## 1.19.2 — 2026-08-21
- Дома на атласе больше не используют четыре ярких фасада фиксированного размера. Размер каждой миниатюры вычисляется из уже спроецированного footprint и ограничен обзорным диапазоном, поэтому высотки не превращаются в колонны, не перекрывают дороги и не конкурируют с подписью города.
- В обзорный SVG добавлены детерминированные скатные, плоские, ступенчатые и квартальные силуэты с приглушёнными согласованными палитрами. Вариант стабилен по ID здания, не требует новых PNG и не меняется между открытиями карты.
## 1.19.1 — 2026-08-21
- Очаги пожара привязаны к непрозрачной фасадной массе текущей стадии здания и детерминированно распределяются по ширине, этажам, масштабу и фазе. Высокий широкий корпус получает больше очагов, но не более шести; компактный дом сохраняет один небольшой очаг без висящих за контуром эффектов.
- Пожарная струя стала непрерывной пиксельной дугой от крыши машины до выбранного очага. Блики движутся вдоль воды, ударные брызги меняют форму, а обе точки контакта остаются стабильными между кадрами.
- Три пожарные машины заново отрисованы напрямую в канонической сетке `32×8`: кабина, два колеса и различимые цистерна, спасательные шкафы и лестница больше не зависят от уменьшения крупного AI-исходника.
- Incident E2E может сохранять диагностический кадр через `INCIDENT_SCREENSHOT_PATH`; Storybook теперь использует проектный Python asset-runtime вместо несовместимого системного интерпретатора.
## 1.19.0 — 2026-08-21
- Первый terrain-кадр теперь синхронно строится из seed до HTTP, Worker и PNG; начальный видимый прямоугольник приходит одним `/api/world/viewport`, а rolling fallback сохраняет прежние chunk-запросы.
- Wire payload `square-v8` сжимает дороги, поверхности и клетки районов в горизонтальные/вертикальные runs. Сервер хранит совместимость с v1, фронт материализует обе версии без изменения канонической транзакционной модели PostgreSQL.
- Атлас учитывает фактические cutout bounds, поэтому города больше не выходят за нижнюю или боковую границу карты.
- Жители, велосипедисты, самокатчики и восемь видов животных получили единый целочисленный масштаб, стабильный baseline/occupied-box и три различимых фазы. Запад животных является точным зеркалом востока, направление берётся из движения; автоматический gate проверяет 42 семейства и 126 кадров.
- Перерисованы больница, АЗС и главный корпус Государственного архива в едином frontal-top стиле с нормальными крышами и дверями. Больница стала четырёхэтажной, АЗС получила четыре места и центральный lot-scoring; платформы готовых зданий выводятся клиентом из footprint.
- Архивный участок расширен до `42×28`; размеры четырёх корпусов читаются из каталога, а тесты запрещают выход за compound и взаимные пересечения. Инфраструктурная синхронизация автоматически заменяет старую геометрию `18×12`.
- Pixi runtime больше не уничтожается при realtime-обновлении manifest/callback: статусы, дефекты и чек-листы обновляют только затронутые entity, сохраняя GPU ground, камеру и движение. Диагностика отдельно считает seed/invalidated/LOD rebuild и причины удаления ground.
- Планировщик комплексов использует один индекс допустимых клеток и integral prefix-grid для terrain suitability вместо повторного сканирования каждого candidate rect. Контрольный 25-task/10-district scale занимает `13.35–13.46 s`, холодные девять чанков — `192 ms`, cached revisit — `36 ms`, RSS — `460 MB`; compact wire уменьшен с `1,206,268` до `308,111` байт (`−74.5%`).
## 1.18.0 — 2026-08-21
- Атлас страны заменил обрезанные крупные гексы на полностью закрывающую bounds сетку квадратных terrain-блоков `4×4`; контракт v4 передаёт только seed и изменяемые сущности, а macro/cutout terrain восстанавливается в браузере. Дороги стали тонкими SVG-ячейками, полноразмерные building PNG — фиксированными семантическими миниатюрами единого ракурса; на 10 городах сырой ответ уменьшился на 64.6%, gzip — на 59%, запросов building PNG нет.
- Большой город открывается квартальным окном до `120×80` клеток. Обычные задачи больше не принимают башню с экранной глубиной `30+` клеток за компактный дом: мало- и среднеэтажные кварталы растут несколькими связанными рядами, а высокие фасады остаются на безопасном одиночном фронте.
- Расширение района ищет следующий квартал в свежем земельном патче и ограниченном шве, а не в union всей исторической территории; длинный город больше не исчерпывает candidate cap занятыми центральными участками. Первый блок патча получает собственный проверяемый коллектор, обходит до 25% рельефных вырезов и при необходимости уменьшается до трёх лотов — replay на 29 зданиях больше не падает с `PLACEMENT_BLOCKED`.
- Коннектор кварталов проверяет оба L-пути до A*, ранжирует ограниченный пространственный shortlist и использует локальное окно поиска; межгородские дороги выбирают репрезентативные anchors по блокам `8×8`, а очистка незавершённых мостов выполняется один раз на границе транзакции.
- Поздний поиск района отбрасывает гарантированно занятый внутренний rect через prefix-сумму до построения полной фигуры и terrain scan; scale `1/10/25` стабильно проходит за `13.6 s` при прежнем бюджете `15 s`.
- Каждый новый район сначала получает узнаваемый общественный парк, затем зелёные зоны чередуются с рощами по workload cadence. Незавершённая стройплощадка покрывает плиткой только видимую глубину 3–5 клеток, а не весь глубокий lot.
- Жители отображаются в масштабе `0.8` относительно машин, светофоры соседних перекрёстков работают координатной волной, а животные пересобраны в увеличенных directional canvases с тремя настоящими кадрами ног.
- Пять проблемных семейств из production-скриншотов (`house-lowrise-courtyard-brick`, `house-warehouse-lofts`, `house-lowrise-gallery`, `commercial-parking-lot`, `civic-police-neighborhood`) заново отрисованы в общей фронтально-верхней проекции; три самостоятельные стадии каждого фасада проходят geometry/projection gate и human-scale entrance contract.
- Локальная улица публикуется только внутри территории района и не может оставить односторонний мост через водный вырез; highway- и fallback-якоря имеют независимые spatial-бюджеты. Обязательная зелёная зона ищется сначала около нового квартала, затем по всему району, а невозможность её разместить откатывает транзакцию вместо публикации района без парка.
- Машины и автобусы получили общий четырёхфазный suspension-contract по пройденной дистанции без масштабирования/вращения PNG; остановившийся транспорт фиксируется в нулевой фазе, поэтому очередь не дрожит.
## 1.17.2 — 2026-08-20
- Production replay разбивает переполненный старый район на временные районы-продолжения, размещает корпуса без уменьшения и соединяет территории безопасным коридором перед атомарным возвратом под исходный ID района. Это сохраняет задачи и историю, но устраняет повторяющийся `PLACEMENT_BLOCKED` на реальных районах с 39–40 задачами.
## 1.17.1 — 2026-08-20
- Завершена фактическая публикация жилой миграции: активные runtime/public-наборы больше не содержат 36 частных домов, а десять новых малоэтажных ЖК доступны во всех пяти стадиях и проходят строгую проверку ракурса, двери, платформы и геометрии.
- Production replay заменяет сохранённые ключи удалённых домов активными low-/mid-rise корпусами без потери идентификаторов задач, статусов, истории, комментариев и дефектов.
- Release replay использует явный `REGENERATION_FORCE=1`, поэтому замена каталога проходит и для миров, которые до обновления не имели геометрических нарушений; обычный reconcile продолжает сохранять валидные миры.
- Локальный 100-задачный мегаполис проверяет все 26 мало- и среднеэтажных и все 32 обычных высотных жилых семейства, автоматические районы-продолжения, отсутствие визуальных пересечений с дорогами и browser-render без ошибок.
- Базовая глубина района новостроек учитывает полный 280px экранный вынос самой высокой обычной жилой башни; корпус больше не приходится уменьшать или обрезать, а его фасад и крыша резервируют реальные 48 клеток территории.
## 1.17.0 — 2026-08-20
- Карта получает seed-first manifest в bootstrap и рисует временный terrain-only ground в отдельном browser Worker параллельно запросу чанка; первый рельеф больше не ждёт PostgreSQL или MCP, а authoritative дороги, тротуары и сущности атомарно заменяют его после загрузки.
- Районная геометрия получила `world_chunk_district_cells_v1`: chunk-read больше не десериализует целый `districts_v3.cells_json`, а каждая проекция ограничена одним чанкoм и 4096 клетками.
- Production разделён на `web`, `mcp` и `world` runtime с независимыми Node event loop, лимитами и пулами PostgreSQL; nginx направляет MCP на 3002, полный replay на 3003, а durable realtime между процессами передаётся через PostgreSQL `NOTIFY`.
- Batch-reconcile сохраняет миры, которые уже проходят audit, и перегенерирует только некорректные; неудачная раскладка повторяется до трёх раз с новым детерминированным seed, а каждая попытка полностью откатывается до retry.
## 1.16.6 — 2026-08-20
- Атлас страны вычисляет границы крупных районов потоковым проходом и больше
не переполняет стек при открытии production-карты с сотнями тысяч ячеек.
## 1.16.5 — 2026-08-18
- Обычный GitHub CI сохраняет полный browser E2E, но получает 45-минутный общий потолок: большой authored asset checkout больше не отменяет корректно выполняющийся E2E на отметке 30 минут.
## 1.16.4 — 2026-08-17
- Ресурсоёмкие organic-worldgen и десятигородской atlas перенесены из GitHub Actions в явный локальный release-gate `npm run test:release-world`; основной CI сохраняет asset verification, typecheck, lint, unit, production build, MCP smoke, E2E и dependency audit.
- Размещение и world audit теперь учитывают всю северную экранную проекцию фасада при проверке дорог и поверхностей, поэтому высокий корпус не может визуально накрыть уже существующую улицу за пределами физического footprint.
## 1.16.3 — 2026-08-17
- Холодный GitHub runner получает до 20 минут на полный 29-задачный worldgen regression и отдельный 60-секундный teardown базы; общий job остаётся ограничен 30 минутами, а геометрические, плотностные и regeneration-проверки не сокращаются.
## 1.16.2 — 2026-08-17
- Тяжёлый 29-задачный worldgen regression сохраняет все проверки, но получает измеренный бюджет для холодного GitHub runner: до 15 минут на hook и 25 минут на отдельный job вместе с clean-install seed smoke.
## 1.16.1 — 2026-08-17
- Органический рост района теперь проверяет защищённые границы соседних городов до публикации нового комплекса, поэтому расширение крупного фасада не создаёт пересекающиеся городские envelope. Компактные fallback-здания ранжируются по полной визуальной глубине, а atlas-fixture корректно подбирает совместимую замену, когда строгий visual hint невозможно разместить на конкретном рельефе.
## 1.16.0 — 2026-08-17
- Каталог зданий получил полный набор из 193 индивидуальных V5 geometry studies и крупную партию заново подготовленных коммерческих, общественных, landmark- и высотных стадий. Строгий door/projection gate честно фиксирует 163 принятых семейства и оставляет 30 старых семейств в явной очереди вместо ложной отметки о завершении.
- Планировщик города теперь резервирует всю экранную массу высокого здания, включая северный визуальный вынос, поэтому фасады больше не накрывают соседние здания и дороги. После роста мира автоматически удаляются незавершённые мостовые компоненты без двух сухопутных порталов.
- Пешеходы, activity-residents, рыбаки, велосипедисты и самокатчики приведены к единому человеческому масштабу. Велосипедисты и самокатчики больше не уменьшаются в runtime, а цикл шага пешехода возвращается через промежуточную позу без скачка между крайними кадрами.
- Добавлен воспроизводимый production-like мегаполис из 100 задач и трёх районов, который проверяет все 52 типа жилых домов, блокирующие визуальные пересечения, транспорт, жителей и отсутствие ошибок рендера.
- Генератор, verifier, pixel-city skill и release-аудит закрепляют human-scale entrance, frontal-top projection, независимые стадии 5→4→3 и единый масштаб жителей как автоматические блокирующие контракты.
## 1.15.1 — 2026-08-15
- Production deploy без volume-маскирования экспортирует public tree прямо из нового image, материализует его текущую игровую ревизию, ограниченно объединяет сохранённые ревизии и публикует новые content-addressed пути через уже активный static release до переключения app-контейнера. Версия приложения теперь входит в browser entry, поэтому patch-релиз получает новый immutable URL вместо уже отрицательно закешированного bundle. Обновление блокирует параллельный запуск, перезапускает свежую версию собственного скрипта, мигрирует прежние установки без static release и сохраняет один прошлый набор lazy bundle для открытых вкладок. При провале health-check скрипт возвращает предыдущий app image, удаляет незавершённый static release и ограниченно сохраняет уже опубликованные immutable-файлы, не создавая CDN-окно `404` во время rollback.
## 1.15.0 — 2026-08-15
- Production и self-hosted развёртывания теперь закрывают публичную регистрацию по умолчанию через `REGISTRATION_ENABLED=false`: анонимный интерфейс оставляет только вход, а registration API отвечает `403`.
- Добавлена production CLI-команда `npm run user:create` для контролируемого создания владельца, первой страны и города. Пароль вводится и подтверждается скрыто либо передаётся двумя строками через `--password-stdin`; аргумент с паролем запрещён.
- Публичная форма регистрации при явном включении требует два совпадающих поля пароля, а сервер повторно проверяет подтверждение независимо от браузера.
## 1.14.1 — 2026-08-15
- При CORS- или сетевом отказе CDN игровые PNG автоматически загружаются с основного origin под теми же Pixi alias, поэтому terrain, дороги, здания и декор продолжают появляться без очистки браузерного кэша; исправный CDN остаётся основным быстрым путём.
## 1.14.0 — 2026-08-14
- Chunk Streaming V2 заменил тяжёлый `ChunkDto` в HTTP на компактный content-addressed payload: 4096 terrain-клеток и детерминированный декор восстанавливаются в двух браузерных Web Worker'ах, а PostgreSQL хранит только одноразовую опубликованную проекцию с транзакционной инвалидацией.
- Compact payload включается vendor `Accept` version 2; endpoint сохраняет полный legacy `ChunkDto` для вкладок предыдущего релиза, а новый клиент принимает старый ответ при rollback. ETag разделён по representation через `Vary: Accept`.
- Центр viewport теперь проходит `fetch → materialize → assets → paint` без общего барьера фоновых чанков; один медленный ответ больше не задерживает первый готовый участок карты.
- Terrain, surfaces и roads каждого чанка запекаются в одну GPU-текстуру PixiJS вместо тысяч живых display objects; detail использует resolution 1, а overview — resolution 0,5 и примерно вчетверо меньше GPU-памяти/raster work. Decoded LRU уменьшен до 48 записей, а отдельный компактный payload LRU сохраняет до 160 ответов.
- Ground и dynamic entity assets разделены: дороги/terrain появляются до медленного фасада или props, entity-чанк входит в reconcile только после готовности текстур, а main-thread очередь запекает не больше одной GPU-текстуры за animation frame. District ownership halo исключает ложные заборы на границе чанков.
- PostgreSQL-кэш опубликованных payload ограничен 2048 свежими chunk/LOD на страну и индексирован по `published_at`, поэтому произвольные координаты не накапливают проекции без границы.
- ETag чанка основан на render-content hash без глобального `worldVersion`, поэтому комментарии, назначения, паспорт страны и последующая перестройка визуально неизменного payload не сбрасывают браузерный кэш. Обычная смена статуса задачи обновляет динамическое здание по realtime без HTTP-запроса и без пересборки static ground; последний status также перекрывает устаревший payload, уже находящийся в Worker.
- AbortSignal теперь доходит до browser materializer, поздний результат отменённого Worker не попадает в decoded LRU, а упавший Worker ограниченно пересоздаётся вместо постоянного переноса генерации на main thread.
- Decoration context сохраняет соседние access paths; активация района инвалидирует старый и новый районы, а rename/update города включает вынесенную за city bounds табличку.
- Добавлена bounded диагностическая телеметрия p50/p95/p99 для decoded payload bytes, HTTP body, JSON parse, worker-materialization и ground bake без повторной сериализации payload на main thread; regression-тест задерживает фоновый чанк и требует ранний центральный кадр.
- `house-bungalow`, `house-suburban-narrow` и `house-woodland-home` приведены к компактному человеческому масштабу с согласованными footprint, anchor и входом; стадии `highrise-stacked-boxes` также получили обновлённые authored-источники.
- Building-stage verifier теперь отдельно фиксирует внешний модуль двери, створку и допустимую opaque-геометрию готового здания, а нормализация ограничивает палитру после выравнивания. Устаревший walker source удалён после перехода на активный `16×24` трёхкадровый набор.
- Создание нового города повторяет следующий дорожный anchor, если A* нашёл допустимую ось, но полный трёхклеточный профиль первого кандидата пересекает занятый объект; равнодалёкие anchors сортируются детерминированно. Десятигородской atlas E2E получил собственный fixture и отдельный CI-job вместо зависимости от локально оставшейся базы.
## 1.13.5 — 2026-08-13
- CDN больше не кеширует mutable `game-assets/v5/manifest.json` как годовой immutable-ресурс: manifest всегда перепроверяется, а PNG и JS внутри content-addressed revision по-прежнему кешируются на год.
## 1.13.4 — 2026-08-13
- Жители полностью заменены крупным трёхкадровым циклом `16×24`: север, юг и боковой ракурс имеют читаемый шаг, запад использует точное отражение востока, а фаза по-прежнему зависит от пройденного расстояния.
- Легковые автомобили увеличены до масштаба `1.2`; автобусы сохраняют безопасную ширину для встречного движения по трёхклеточной улице. Полосы получили небольшое внутреннее смещение без касания бордюра.
- Профиль дороги теперь отделяет примыкающие классы улиц и не размножает центральную разметку при соединении локальной дороги с коллектором.
- Прозрачная область над недостроенным зданием больше не перехватывает наведение: интерактивная зона строится по непрозрачным границам конкретной стадии.
- Задачи со словами «парк» и «сквер» создают парк даже без явно переданного `visualKind`; вдоль фасадов детерминированно размещаются центрированные деревья, скамейка и урна без блокировки входа.
- Запросы чанков получили версионированный URL и приватный браузерный кэш с `stale-while-revalidate`: повторное открытие неизменившегося участка не ждёт сеть, а WebSocket-обновление переводит клиента на новую версию мира.
- Контракт Pixel City, документация генерации и автоматические проверки обновлены под новый масштаб жителей; опубликован новый content-addressed asset revision, исключающий старый браузерный кэш CDN.
## 1.13.3 — 2026-08-13
- Клик по району, зданию или городскому объекту на карте страны теперь открывает подробную карту точно в центре выбранного района и больше не вызывает карточку задачи.
- Атлас передаёт границы каждого района, поэтому камера подбирает масштаб по району, а не по всему городу.
- Табличка района при наведении стала крупнее и легче читается.
- Контракт атласа обновлён до schema version 2; ETag отделяет новый ответ от закешированной версии 1.
## 1.13.2 — 2026-08-13
- Production regeneration now keeps the reviewed clinic, fire and police V5 facades in the task scheduler, so 10/20/30-task city service coverage is rebuilt instead of failing the post-generation audit.
- Mature compact districts may annex a larger bounded frontage after the former 24–32-cell bands are exhausted, allowing established worlds to migrate without sparse speculative roads or placement deadlocks.
- Перегенерация крупных стран больше не упирается в единственную занятую точку подключения: межгородская трасса перебирает безопасные узлы, при необходимости расширяет поиск и сохраняет полный профиль дороги.
- Крупные V5-фасады получают более плотный поиск площадок, а десятигородовой validation-сценарий использует только здания, совместимые с архитектурой района.
- Карта страны кэшируется по `worldVersion`; повторное открытие неизменившейся карты не пересчитывает проекцию, дороги и поверхности.
- Верхняя панель стала ниже и компактнее: поиск закреплён в центральной колонке, режим карты вынесен в иконку, MCP-кнопка убрана из шапки.
- При наведении на город его имя показывается в шапке; над свободной территорией поле города пустое. Пустая проекция парка больше не ломает SVG-карту.
- Добавлен браузерный регресс, последовательно проверяющий hover всех десяти городов, отсутствие ошибок и очистку заголовка над фоном.
- Production nginx раздаёт immutable JS/CSS/PNG из атомарно переключаемого каталога на хосте: ассеты предыдущего релиза остаются доступны во время замены app-контейнера.
## 1.13.1 — 2026-08-13
- Исправлен production fallback статических файлов: отсутствующие Vite/game asset URL теперь возвращают `404`, а не кэшируемый `index.html`; удалённые V4-пути больше не маскируются SPA.
## 1.13.0 — 2026-08-13
### Changed
- Автоматическое размещение снова использует жилые дома, городской parking-service и 50 принятых V5-новостроек: частный район получает дома с участками, парковочная задача — компактную площадку, плотный район — многоэтажные корпуса с плиткой. Планировщик сначала заполняет общий уличный фронт тремя-четырьмя зданиями и только затем прокладывает следующий проезд; локальные улицы имеют две клетки ширины, коллекторы и магистрали — три.
- Все активные жители, рыбаки, уличная мебель, природный декор, животные и освещение переведены на зарегистрированные AI-authored источники. Каталог содержит 284 props, включая трёхкадровые циклы восьми видов животных в четырёх направлениях, трёхкадровую микромобильность и восемь пар выключенных/светящихся фонарей.
- Добавлен воспроизводимый world-validation сценарий: 10 городов, 22 района и 88 задач с различной морфологией и стадиями. Финальный город содержит два завершённых района, один смешанный активный район и один планируемый.
- Ранние стадии новостроек переведены на общий параметрический конструктор: план площадки и фундамент собираются из двенадцати 8×8-модулей по footprint, имеют глубину 3–5 клеток, четыре варианта грунта, два варианта основания, отдельную арматуру и забор на одну клетку шире. Двадцать три AI-authored детали — 10 для планирования и 13 для фундамента — размещаются детерминированно, без пересечений и с открытым проездом; участок получает 2–7 объектов, максимум один крупный кран и одну тяжёлую машину. Индивидуальная AI-графика теперь требуется только стадиям 3–5; `highrise-luxury-tower` первой мигрирована на новый трёхисточниковый контракт.
- Дорожная сеть получила единый канонический профиль: локальная улица занимает две встречные полосы, коллектор/магистраль — две внешние полосы и центральную клетку разметки; генератор, отрисовка и directed traffic graph используют одну классификацию клеток.
- Восемь легковых моделей полностью заменены AI-authored транспортом `16×8` с отдельными видами на север, юг и восток; запад получается только отражением бокового вида. Новый городской автобус занимает `48×16` (`6×2` клеток), имеет самостоятельные продольные виды и допускается только на трёхклеточные улицы.
- Плотные районы больше не повторяют один шаблон: seeded-планировщик чередует slab, square, court и L-shaped кварталы, сохраняя связность дорог и предсказуемую вместимость первых строительных участков.
- Формальный парк `18×10` и общественный парк `16×10` стали самостоятельными AREA-сущностями с двумя композициями и пятью стадиями: участок, дорожки, озеленение, инфраструктура и завершённый парк. Стадия синхронизируется с жизненным циклом задач района и обновляется через `affectedBounds`.
- Общественный парк теперь можно создать как полноценную задачу: он получает номер, карточку, чек-лист, дефекты и собственные стадии 1–5. Шесть вариантов композиции выбираются через MCP; прежние безымянные AREA-парки мигрируют в фоновую рощу и не имитируют задачи.
- Первая крупная новостройка нового масштаба заменила `highrise-residential-tower`: индивидуальные стадии 3–5 используют единый холст `144×280`, физический участок `18×16` клеток, общий bottom-centre anchor и неизменную ось входа; стадии 1–2 собираются общим конструктором.
- `highrise-glass` стала второй полностью заменённой новостройкой: три отдельные AI-authored стадии 3–5 используют холст `96×224`, участок `12×10`, измеренную экранную глубину крыши 4 клетки и единый широкий вход; прежний общий sheet удалён без запасной ветки отрисовки.
- `highrise-hotel`, `highrise-art-deco` и `highrise-office` завершили первый V5-пакет из пяти семейств: каждая башня получила три отдельных источника 3–5, участок `14×12`, общий bottom-centre anchor и собственный geometry-report; три старых объединённых sheet удалены.
- Все 193 семейства завершили V5-миграцию: каталог хранит ровно три AI-authored источника 3–5 на семейство и не допускает отдельные PNG стадий 1–2. Сборщик отклоняет прежний пятифайловый контракт, а параметрический конструктор отвечает за план площадки, фундамент, забор и seeded-набор техники для каждого footprint.
- Состояние всех 193 семейств проверяется напрямую из единственного каталога командой `npm run assets:verify`; отдельный промежуточный migration-каталог удалён.
- Городские поверхности переведены на `TASKTOPIA_V5_CITY_MATERIALS_2026`: трава, вода, грунты, асфальт, тропинки и тротуар получили согласованную с новым фасадом палитру; тротуар собран из читаемых плит `8×8` с однопиксельным швом.
- Жители получили три различимых кадра шага в каждом направлении и новый authored-масштаб `8×16` с телом не выше `14 px`; 16 видов деревьев заменены authored-спрайтами `16×32` с якорем `[8,32]` и контактом с землёй внутри центральной клетки `8×8`.
- Временный строительный забор больше не входит в PNG здания: клиент рисует узкий отдельный контур в одной клетке от этапов 1–4 и открывает двухклеточные ворота напротив входа, а сервер резервирует тот же строительный envelope.
- Морфология `DENSE_CORE` формирует прямоугольные кварталы с общей многоуровневой сеткой улиц и крупным центральным парком. Планировщик подготавливает frontage под существующие фасады шириной 5–8 клеток, не растягивая PNG и не создавая пустую платформу вокруг изображения.
- Вместимость района остаётся плановой метрикой: при создании резервируется один компактный строительный кластер, а следующая территория присоединяется только после заполнения существующих фасадов.
### Quality
- Проведена полная санитарная ревизия Pixel City: удалены заменённые ambient-sheets, отклонённые building sources, ранние reference-композиты и одноразовый construction-прототип; Storybook теперь охватывает все 193 семейства, 284 props, 8 транспортных моделей и 12 terrain families и явно отличает общие runtime-стадии 1–2 от authored-стадий 3–5.
- Движущиеся сущности используют единую интерполяцию по графу без синусоидального подпрыгивания и случайного наклона: транспорт сохраняет полосное смещение, а люди, микромобильность и животные стоят в центре проходимой клетки. Огонь и дым распределяются по ширине фасада, а пожарная струя направляется в центральный очаг.
- Добавлены регрессии ширины дорожных коридоров, общей классификации полос/разметки, запрета автобуса на локальных улицах, пяти стадий парка и детерминированного разнообразия плотных кварталов; authored transport проходит catalog/runtime/style-аудит без fallback-файлов.
- Добавлены grid-preview, геометрический отчёт пяти стадий, проверки большой планировочной ячейки, отдельного забора, трёхкадровой походки, authored-происхождения деревьев и единого V5 material profile.
- Добавлены TDD-инварианты модульной стройплощадки: 10+13 деталей, стабильная и различающаяся между задачами seeded-композиция, масштабирование плотности, групповые лимиты техники, запрет пересечений, свободный коридор ворот и достижимость каждого объекта по набору seed.
- Добавлен tree-on-pavement preview: все 16 деревьев автоматически ставятся якорем в выделенную клетку, а двухрядная зона контакта проверяется до сборки мира.
- Добавлены регрессии плотного центра: прямоугольная территория, связная трёхрядная дорожная сетка, крупные фасады, не более двух комплексов на восемь задач и полноценный городской парк.
- Общий бюджет authored-стадий учитывает прозрачность как отдельную запись палитры: сборщик резервирует её заранее, поэтому runtime не превышает 32 цвета и аудит не маскирует переполнение.
- Все 50 активных новостроек повторно прошли контактный визуальный аудит; у `highrise-luxury-tower` и `highrise-observation` заменены стадии 3–5 с плоской/боковой геометрией. Крупные фасады получили свободный плиточный пояс и редкие seeded-деревья, не перекрывающие вход.
## 1.12.2 — 2026-08-11
### Added
- Жители получили восемь AI-authored кадров ходьбы `8×16`: два различимых шага для каждого направления. Фаза зависит от пройденного пути, а не времени кадра, поэтому остановка, pan и zoom не перезапускают походку.
### Fixed
- Районы с крупными V5-footprint расширяются на основании реального строительного envelope, а компактные группы до четырёх задач получают минимальный прямоугольный участок; контрольная генерация больше не упирается в `PLACEMENT_BLOCKED`.
- Жители, велосипедисты и самокатчики интерполируются между центрами клеток, а не между их верхними левыми углами. Browser QA публикует `data-resident-center-errors`, чтобы смещение нельзя было вернуть незаметно.
- Люди, здания, декор, инциденты и светофоры теперь используют общий painter-order по точке касания земли; персонаж больше не проваливается под тротуар и не перекрывается светофором независимо от геометрии.
- Реплика и индикатор мысли вынесены из вращающегося Sprite персонажа в отдельный верхний world-space слой и всегда располагаются над головой.
- Транспорт соблюдает правило «не блокировать перекрёсток»: при занятом выезде автомобиль ждёт перед стоп-линией даже на зелёный, поэтому плотная очередь не запирает поперечное направление.
### Quality
- Добавлены чистые контракты и регрессии выбора кадра, якоря реплики, глубины объектов и занятого выезда; старый четырёхкадровый walker-sheet и его runtime-файлы удалены.
## 1.12.1 — 2026-08-11
### Fixed
- Локальная разработка получила отдельный Compose override, публикующий PostgreSQL только на loopback; сервер читает необязательный `.env`, а development URL и пароль PostgreSQL согласованы, поэтому документированные `npm run seed`/`npm run dev` действительно подключаются к поднятой базе без ослабления production compose.
- Playwright seed и запускаемый им сервер используют одну тестовую PostgreSQL вместо возможного чтения разных баз при локальном запуске.
- HTTPS-vhost `store.tasktopia.online` ограничен только versioned ассетами; API, MCP, Socket.IO и пользовательский интерфейс на CDN-host возвращают `404`.
- Три последние физические ревизии игрового пака сохраняются между контейнерными обновлениями: старая открытая вкладка не получает `404` при панорамировании после релиза.
- Генератор района проверяет несколько подходящих участков и принимает только тот, к которому можно провести дорогу полной ширины; недоступный лучший по оценке участок больше не обрывает создание города ошибкой `ROUTE_BLOCKED`.
### Changed
- Тяжёлый world-generation gate запускается в CI отдельной последовательной job после обычных тестов, MCP smoke, E2E, сборки и security audit.
- CDN настраивается одной переменной `STATIC_ORIGIN`, общей для клиентской сборки и runtime CSP; из production Docker context исключены тяжёлые source/reference/runtime-деревья арта (manifest и catalog сохранены для typecheck), а pre-update dumps получили лимит хранения и проверку свободного места.
- Удалены неиспользуемые hex-пак V2, его статический прототип и связанные одноразовые processing/preview scripts; актуальный V4 pipeline и используемый им V3 source-base сохранены.
- Обычный локальный seed уменьшен до одного города, 10 районов и 30 задач; полный showcase сохранён отдельной командой и не конкурирует с повседневными тестами за ресурсы.
### Quality
- Self-host, development и test окружения проверяются раздельно; документация явно показывает жизненный цикл временной тестовой БД.
## 1.12.0 — 2026-08-11
### Added
- Жители получили увеличенные AI-authored спрайты `8×16`, отдельные состояния чтения, телефона, доставки, уборки, работы и общения; рыбаки приведены к тому же масштабу.
- На пешеходной сети появились редкие велосипедисты и самокатчики с тремя самостоятельно нарисованными направлениями: восток, север и юг; запад использует только зеркальный восточный вид.
### Changed
- Городские парки сначала занимают полноценные участки до `12×10` клеток, получают внутренние дорожки, центрированную композицию и дополнительные деревья/фонари; компактные размеры остались только как fallback для плотных районов.
- Наполнение большого парка масштабируется вместе с площадью: генератор добавляет 4–12 акцентов, сохраняет свободный центральный крест дорожек и не ставит декор на границу.
### Fixed
- Постоянные здания мира больше не получают принудительный асфальт: площадка архива, landmark и сервисного объекта теперь берётся из `platform` его catalog entry.
- Люди и микромобильность используют нижний центральный anchor, поэтому увеличенные спрайты стоят ногами/колёсами на дорожке, а не проваливаются в соседнюю клетку.
- Рендер и навигация парков используют одну функцию клеток дорожки: жители больше не срезают через визуальную траву, а длинный боковой силуэт велосипеда или самоката резервирует две соседние клетки.
### Quality
- Добавлены отдельные native/8× review-листы людей и микромобильности. Все четыре здания Государственного архива и оставшиеся civic/landmark-фасады переведены в основной authored-каталог и проходят тот же geometry/style gate, что остальные семейства.
- Из asset builder удалены процедурные fallback-функции жителей и рыбаков; эти runtime-ключи теперь могут появиться только из зарегистрированных AI-authored source sheets с `visualProfile` и направлением.
## 1.11.1 — 2026-08-11
### Changed
- Автомобили получили детерминированный диапазон крейсерских скоростей вместо трёх почти одинаковых значений; автобусы остаются заметно медленнее общего потока.
- Единый покадровый traffic controller ограничивает продвижение по ближайшей машине на нескольких сегментах маршрута, учитывает реальные габариты спрайтов, поддерживает безопасный интервал и заранее резервирует конфликтную клетку перекрёстка до выхода хвоста автобуса.
### Fixed
- Догоняющие машины и автобусы больше не проходят друг через друга и не въезжают одновременно в одну клетку с разных подходов; остановившийся на переходе или красном сигнале транспорт формирует очередь позади себя.
- Коллизионная геометрия повторяет фактическое смещение кузова на правую полосу; поворачивающий транспорт удерживает продольный интервал до полного выравнивания, а машина с устаревшим ребром после обновления чанков безопасно пересоздаётся вместо телепортации назад.
### Quality
- Добавлены unit-сценарии разных скоростей, безопасного следования и независимая проверка физической геометрии на протяжении нескольких кадров слияния; browser gate подтверждает ноль наложений кузовов вместе с отсутствием встречного движения.
## 1.11.0 — 2026-08-11
- World regeneration now persists a park's sidewalk access anchor and validates each country replacement through a fresh read model inside the same transaction, preventing completed districts from publishing unreachable green areas or retaining a failed rebuild.
### Added
- У задачи появились четыре стандартных Markdown-документа (`system-analysis.md`, `architecture.md`, `design-system.md`, `implementation-plan.md`), дополнительные `.md`-материалы и упорядоченный чек-лист выполнения.
- MCP получил отдельные инструменты чтения/обновления/удаления документов и замены/точечного обновления чек-листа; публичные `ai.md` и progress skill описывают агентский workflow.
### Changed
- Весь городской material pack переведён на единый профиль `TASKTOPIA_V4_CITY_MATERIALS_2026`: заново собраны 12 terrain families, вода, асфальт, тротуар, три вида тропинок, переходы, разметка и мостовые overlays; старые V3-плитки и отдельный curb больше не смешиваются с новым городом.
- Супермаркет, торговый центр, пожарная часть, школа и мэрия заменены отдельными AI-authored пятистадийными листами; их runtime-силуэты проверены по фактической ширине footprint после уменьшения.
- Поток карты разделён на независимые очереди JSON и PNG: до восьми чанков читаются параллельно, критичные спрайты декодируются отдельно, а машины, жители, животные и самолёты догружаются как необязательный ambient-набор без блокировки земли и зданий.
- Detail-чанк повторно используется как источник overview при отдалении; серверный LRU расширен до 512 записей, одинаковые холодные запросы объединяются, а независимые пространственные выборки PostgreSQL выполняются параллельно без повторного чтения дорог.
- Карточка задачи стала полностью read-only: ручная загрузка файлов, добавление/удаление MR и удаление задачи убраны из UI; эти изменения выполняют AI-агенты через MCP.
- Вместо четырёх длинных колонок материалы отображаются компактной полкой файлов с отдельным Markdown-просмотром; чек-лист расположен перед связанными дефектами.
- Четыре узкие высотки получили согласованные фасады и участки шириной 5–6 клеток; маленькое здание теперь занимает только фактическую часть широкого участка, сохраняя пригодный остаток для плотной застройки без новой улицы.
- Одноклеточные просветы внутри одного фасадного ряда оформляются плиточным пешеходным проходом, а не остаются случайной полосой травы.
- Хешированные JS/CSS и versioned игровые ассеты могут загружаться через `store.tasktopia.online`; origin выдаёт для них ограниченный CORS и `Cross-Origin-Resource-Policy: cross-origin`, тогда как HTML, API и пользовательские данные остаются same-origin.
- Ревизия игрового пака перенесена из query string в URL-путь, чтобы pull-CDN с отключённым query cache key не удерживал старый manifest или PNG после релиза.
- Единый authored-каталог получил десять новых проверенных семейств высоток и жилых домов; ещё пять ранее принятых семейств перерисованы из-за неверного наклона или слабой композиции парковки.
- Базовые `house-cottage`, `house-townhouse`, `house-gabled`, `house-duplex` и `house-small-apartments` заменены отдельными AI-authored листами: пять стадий, фронтально-верхняя камера и согласованный масштаб участка.
- `house-bungalow`, `house-suburban-narrow`, `house-garden-villa`, `house-modern-compact` и `house-rustic-cottage` также переведены с процедурных фасадов на проверенные пятистадийные AI-authored листы.
- `civic-hospital`, `house-coastal-cottage`, `house-modern-villa`, `house-ranch` и `commercial-parking-lot` теперь используют строго фронтально-верхнюю камеру без боковой стены и перспективного схождения.
- Заменённые исходные PNG этих пяти семейств и прежний отдельный reference-лист госпиталя удалены; в дереве источников остаётся ровно один зарегистрированный лист на семейство.
- Ещё 50 семейств домов, коммерции, городских сервисов и ориентиров переведены на отдельные AI-authored листы: 250 честных стадий строительства, включая семь типов заправок, стадион, колесо обозрения, клинику, полицию, банк, почту и театр.
- Импорт пятистадийных листов теперь распознаёт и отсекает только сквозные направляющие панелей; широкие навесы, крыши и фасады сохраняют исходную ширину и не уменьшаются из-за служебной линии модели.
### Fixed
- Медленный PNG больше не удерживает один из трёх API-слотов и не создаёт 6–12-секундные волны `lod=overview/detail`; внутри текущего масштаба чанки появляются постепенно, а переход overview/detail сохраняет старый цельный кадр и переключает готовый viewport атомарно.
- Устранены прямоугольные швы, возникавшие при одновременном отображении соседних ground-чанков overview и detail во время задержки одного из спрайтов.
- ETag приватного чанка включает страну, поэтому одинаковые координаты и `worldVersion` разных стран не могут разделить credentialed `304` в браузерном кеше.
- Hover-карточка здания вынесена в самый верхний world-space слой и больше не перекрывается светофорами, самолётами или incident-эффектами; нижняя табличка стала компактнее, показывает номер задачи как номер дома и сохраняет цвет текущей стадии.
- Межгородская магистраль больше не выбирает ответвление и повторно используемые участки внутри полного envelope городской таблички или другого постоянного объекта; создание второго и третьего города не падает с `ROUTE_BLOCKED`.
- Красный и зелёный светофоры загружаются вместе с detail-чанком, а смена фазы использует revision-aware Pixi Cache без предупреждений `Asset id ... was not found in the Cache`.
- Активный район в городе с десятью заранее созданными районами больше не падает с `PLACEMENT_BLOCKED` после первого заполненного квартала: генератор ищет компактное продолжение по всей собственной зарезервированной территории до её расширения.
- Базовая АЗС переведена на новый AI-authored пятистадийный фасад, а светофоры уменьшены до читаемого силуэта `5×11 px` внутри клетки без изменения транспортной логики.
### Quality
- Полный визуальный gate создаёт десять отдельных скриншотов и машинно-читаемые server/browser отчёты. В проверенном наборе: 0 нарушений world audit, 0 встречных машин и автобусов, 0 пересечений транспорта, 0 ошибок глубины и 0 ошибок центрирования жителей.
- Все 193 семейства прошли projection audit и переведены на единый V5-контракт; 965 runtime-стадий дополнительно проверены в native и nearest-neighbour 4×. Отложенных или отдельно импортируемых семейств нет.
- Пакет из 50 семейств принят отдельным runtime-листом; три слабых перехода `stage-4 → stage-5` и некорректная компоновка большой придорожной заправки были забракованы и повторно сгенерированы до чистого style audit.
- Непринятый вариант `highrise-tech-campus-tower` с глубоким перспективным подиумом не зарегистрирован и не попадает в runtime; каталог закрепляет SHA-256 принятого фронтального листа.
### Migration
- Существующее содержимое четырёх AI-полей без потерь переносится в стандартные документы задачи; старые MCP-поля временно синхронизируются для совместимости клиентов.
## 1.10.1
### Added
- Государственный архив получил замкнутый стальной периметр, отдельный красно-белый шлагбаум и локальную подъездную дорогу, соединённую с существующей сетью страны.
- Добавлены восемь AI-authored моделей машин в двух самостоятельных направлениях, три семейства автобусных остановок, пять игровых площадок, шесть крупных парковых объектов и 15 заново отрисованных основных деревьев.
### Changed
- Площадка нового архива заранее резервирует место для ограждения и въезда; архивы из уже существующих стран идемпотентно достраиваются при запуске сервера.
- Архивный подъезд остаётся частью транспортной сети, но исключён из фронтажа и расширения районов, поэтому охраняемый комплекс не искажает жилую планировку и метрику асфальта.
- 157 процедурно добавленных зданий переведены с плоского фасада на общую фронтально-верхнюю пиксельную проекцию: крыша, правая грань и все стадии строительства используют одну камеру.
- Городские ориентиры `landmark-*` теперь строятся только задачами, проходят стадии 1–5 и ограничены одним ориентиром на город; отдельная готовая декоративная копия больше не создаётся.
- Формальный парк, ботанический сад, развлекательная зона, районный парк и роща получили по три детерминированные композиции вместо одного повторяющегося шаблона.
### Fixed
- Полная перегенерация развитой страны получила отдельный 15-минутный proxy-бюджет: Nginx больше не возвращает временную 5xx-ошибку, пока сервер транзакционно перестраивает рельеф, дороги и здания. Остальные API сохраняют короткий timeout.
- Миграция удаляет старые готовые `LANDMARK`-features, чтобы после обновления уникальный объект не дублировал связанное с задачей здание.
- Многоабзацные комментарии, inline-код и блоки команд снова занимают всю ширину карточки задачи и не распадаются на узкие колонки.
### Quality
- Контракт закреплён интеграционными проверками количества секций, единственного въезда, отсутствия забора на проезде и непрерывности дороги в detail-чанках; пакет содержит 163 проверенных объекта окружения. Для AI-authored props аудит также проверяет утверждённый источник, визуальный профиль, runtime-геометрию и отсутствие механического поворота транспорта.
- PostgreSQL integration-файлы выполняются последовательно, а тяжёлая регрессия органического роста запускается отдельно через `npm run test:worldgen`, поэтому проверки генератора не конкурируют за ресурсы.
- Выпускной результат: 130 unit/integration тестов и 13 browser E2E пройдены, один opt-in визуальный checkpoint пропущен штатно; lint, typecheck, production build и пиксельный аудит чистые.
## 1.10.0
### Added
- У каждой страны появился отдельный Государственный архив: компактные записи проекта с типом, Markdown-описанием, ссылкой и тегами доступны через HTTP, пять MCP-инструментов и раздел «Плана страны».
- Архив отображается на карте самостоятельным комплексом и растёт с одного до четырёх уникальных пиксельных корпусов на порогах 3, 6 и 10 записей, не входя в статистику городов, районов и задач.
### Changed
- Экспериментальный Starter City удалён из рабочей иерархии; миграция сохраняет его полезные карточки в архиве и убирает `city.kind` из публичных контрактов.
- Перегенерация мира стала воспроизводимой: новый вариант определяется исходным seed и idempotency key, а не временем выполнения.
- Нагрузочная проверка роста на 25 задач выполняется отдельно через `npm run test:scale`; обычный regression-набор не запускает большую генерацию.
### Fixed
- Исправлен PostgreSQL `INSERT` задачи с недостающим placeholder, который блокировал базовое создание задач после добавления AI-полей.
- Импортируемые архивные спрайты нормализуются до жёсткой альфы, нижнего якоря и палитры не более 32 цветов.
### Quality
- Добавлены миграционные, доменные, HTTP, MCP и browser-проверки архива, его стадий роста и обратного уменьшения; production pack содержит 1 188 проверенных PNG: 193 здания с пятью стадиями и 150 объектов окружения, без пропусков и orphan-файлов.
- Полный результат: 128 unit/integration тестов, 13 browser E2E (ещё один opt-in сценарий skipped), lint, typecheck, production build и scale-профиль `1 город / 10 районов / 25 задач` в пределах бюджетов.
## 1.9.1
### Fixed
- Hover-подсказки районов теперь находятся в отдельном гарантированно верхнем world-space слое, поэтому деревья, здания, incident-эффекты и самолёты больше не перекрывают название и дедлайн; интерактивная граница остаётся ниже зданий и не перехватывает их нажатия.
### Quality
- Порядок Pixi-слоёв вынесен в единый контракт и закреплён regression-тестом.
## 1.9.0
### Added
- Связанный дефект получил собственный цикл `OPEN → IN_PROGRESS → VERIFYING → FIXED`: исправление больше не требует откатывать родительскую задачу с этапа тестирования.
- Detail-чанки передают компактную сводку активных дефектов, а план показывает их количество без загрузки полного содержимого.
- Карта отображает incident response: пожарную машину, маяк, небольшое пламя, струю и дым для этапов дефекта; активный `HOTFIX` получает усиленный аварийный эффект.
### Changed
- Переход задачи в `COMPLETED` блокируется, пока любой связанный дефект не подтверждён как `FIXED`.
- MCP-инструкция, публичный `ai.md` и устанавливаемый skill описывают отдельный ремонтный цикл, неудачный retest и повторное открытие дефекта.
### Performance and quality
- Incident overlay существует только в видимых detail-чанках, не меняет геометрию или маршруты и ограничен одним заранее собранным контейнером на здание; overview не загружает новые PNG.
- Добавлены unit, migration, service, contract и browser E2E-проверки полного цикла; asset audit проверяет 389 runtime PNG без пропусков и orphan-файлов.
## 1.7.0
### Added
- После первого кадра карта показывает компактный неблокирующий индикатор потоковой загрузки чанков и смены LOD; уже отрисованный мир остаётся видимым и интерактивным.
- Overview получил ограниченный слой малых пешеходных связей, поэтому внутренние улицы и проходы районов читаются на дальнем масштабе.
### Changed
- Новые районы последовательно используют разные детерминированные композиции и пять схем общего доступа: односторонние, чередующиеся, раздельные жилые/служебные дворы и зеркальные варианты.
- Первичный район по-прежнему создаёт только одну фасадную улицу без пустых асфальтовых веток; плотность меняется участками и проходами, а не лишними дорогами.
- Overview различает классы дорог по тону и скрывает детальные world-feature спрайты — АЗС, остановки, парковый декор и служебные объекты не превращаются в визуальный шум и не загружают PNG.
### Quality
- Regression-тесты фиксируют разные композиции следующих друг за другом районов, бюджет менее 160 overview-path клеток на чанк и отсутствие world features в дальнем LOD.
- Browser QA проверяет первый и потоковый loader на искусственно задержанных чанках, отсутствие дублей запросов и сохранение уже отрисованного ground.
- Малый scale-профиль `1 город / 10 районов / 25 задач` завершился за `6.87 s`, девять чанков — за `165 ms`, RSS — `296 MB` при бюджете `512 MB`.
### Fixed
- Общий HTTP rate limit больше не блокирует `GET /` после последовательной загрузки ассетов и чанков; строгие отдельные лимиты авторизации, MCP, мутаций и chunk-группы сохранены.
## 1.6.0
### Added
- Веб-интерфейс получил безопасное удаление задач, районов и городов с точным подтверждением; серверные HTTP-операции используют те же транзакционные доменные методы, что и MCP.
- Глава страны может синхронно перегенерировать мир. Новый вариант сначала строится в изолированной временной стране и подменяет геометрию одной транзакцией, сохраняя ID, названия, статусы, ответственных, комментарии и хронику задач.
- Над картой изредка пролетает небольшой пиксельный самолёт слева направо; рыбацкие лодки и береговые рыбаки получили лёгкую анимацию без дополнительных кадров и сетевых запросов.
### Changed
- Машины и жители сохраняют экземпляр, позицию, фазу и маршрут при панорамировании, загрузке соседнего чанка и изменении масштаба внутри одного LOD. Новая загрузка страницы создаёт новый session seed и другие стартовые позиции.
- Маршруты транспорта и пешеходов планируются одним ограниченным BFS по видимому графу, продолжаются через перекрёстки и не начинают обратный ход, пока доступно другое направление.
- Лодки, рыбаки и статичные жители стали реже и получили жёсткие бюджеты на detail-чанк.
### Quality
- Добавлены проверки непрерывности маршрута, запрета разворота, сеансового random seed, атомарной перегенерации с сохранением истории, HTTP-удалений, нового авиационного спрайта и бюджетов фоновых жителей.
- Runtime pack содержит 374 проверенных PNG без пропущенных ссылок и orphan-файлов.
## 1.5.1
### Changed
- Компактная, обычная и трассовая АЗС полностью перерисованы в графическом языке жилых зданий: цельный магазин с крышей, фасадом и боковой тенью, объёмный навес, читаемые топливные колонки со шлангами и отдельная сервисная стела.
- Canvas компактной и обычной АЗС увеличен до высоты 32 px без изменения footprint или стабильных ключей, поэтому существующие миры получают новый спрайт без миграции данных.
### Quality
- Asset audit закрепляет наличие трёх разных вариантов АЗС, минимальную высоту и заполнение силуэта в нативном масштабе.
- Builder создаёт отдельный nearest-neighbour лист сравнения АЗС с характерными жилыми зданиями.
## 1.5.0
### Added
- Десять детерминированных композиций кварталов с разным ритмом рядов и тремя покрытиями пешеходных путей.
- Редкие анимированные лисы и олени, ограниченные четырьмя экземплярами в большой видимой природной области.
- Светлые сухопутные порталы мостов и audit-инвариант двух выходов на сушу.
### Changed
- Overview LOD рисует здания дешёвыми пиксельными footprint-блоками и не загружает детальные PNG; машины стали заметнее.
- Метки стадий стали квадратными и крупнее, а Pixi-текст подсказки создаётся в четырёхкратном разрешении.
- Три варианта АЗС перерисованы в едином фронтально-верхнем ракурсе; городская парковка и топливная служба получили квоты уникальности.
### Fixed
- Бордюр полностью удалён из runtime pack и дорожного рендера, устраняя серые выступы на тупиках и перекрёстках.
- Рыбаки больше не размещаются рядом с прибрежной дорогой.
- Генераторная и E2E-фикстуры больше не зависят от многократного создания уникальной парковки.
### Quality
- Новый быстрый regression-набор фиксирует отсутствие бордюра, десять композиций, инфраструктурные квоты и безопасное размещение рыбаков.
- Asset audit проверяет 373 PNG без пропущенных ссылок и лишних файлов; полный набор содержит 83 unit/integration и 12 browser E2E тестов.
## 1.4.1
### Fixed
- Береговые рыбаки теперь используют тот же силуэт `8×8`, анатомию и HEX-палитру, что и движущиеся жители города.
- Лодка получила более вытянутую трёхклеточную пропорцию и видимого пассажира в масштабе городского `walker`.
### Changed
- Максимум одновременно движущихся пешеходов снижен с 64 до 24; лодки, береговые рыбаки и статичные жители появляются заметно реже.
- Общие цвета кожи, волос, ног и четырёх вариантов одежды вынесены в единый набор констант sprite-builder, чтобы варианты людей не расходились между собой.
## 1.4.0
### Added
- MCP получил безопасные идемпотентные `city.delete`, `district.delete` и `task.delete` с точным подтверждением имени/заголовка, каскадной очисткой и освобождением task-lot.
- MCP показывает фактическую нагрузку района (`plannedSp`, `openSp`, `overTargetBySp`); удаление района каскадно очищает его зелёные зоны, а удаление города убирает локальные улицы, сохраняя только общую дорожную инфраструктуру.
- Мир получил деревянные рыбацкие лодки, береговых рыбаков, редкие water-варианты с рыбами, разные действия жителей, фонари, ограждения и маркер активного района.
- Нижний badge здания показывает стадию 1–5, а hover — название, статус, процент и краткое описание задачи.
- Chunk payload больше не дублирует полные описания задач: detail получает 128-символьный preview, overview — только структурные поля.
### Changed
- `capacitySp` стал необязательным ориентиром загрузки и больше не блокирует создание задач; длительность итерации, состав команды и распределение исполнителей остаются решением пользователя.
- Новые кварталы детерминированно меняют ориентацию улиц, фасадов и общих путей; неактивные районы могут получать редкие ограждения.
- Crosswalk публикуется только через прямой однородный профиль дороги между двумя тротуарами, без мостов, highway и расширений узлов.
### Quality
- Runtime pack расширен до 62 props и 364 проверенных PNG с сохранёнными AI-reference листами и детерминированными игровыми версиями.
- Малый QA-профиль проверяет один город, до десяти районов, advisory SP, lifecycle deletion, pedestrian occupancy и chunk-local ecology; масштабный smoke остаётся отдельным opt-in тестом.
## 1.3.3
### Added
- Опубликован устанавливаемый Codex skill `tasktopia-progress` для постановки задач и доказательного ведения прогресса через MCP.
- Публичная AI-инструкция объясняет рабочую модель «страна → город → район → задача», правила уточнения контекста и установку skill одной командой.
- В настройках MCP появились отдельные действия для открытия и копирования публичной ссылки на skill.
### Quality
- Автоматические проверки закрепляют доступность skill, полный набор 20 MCP-инструментов, точные стадии прогресса, правила завершения и отсутствие незаполненных шаблонов.
## 1.3.2
### Fixed
- Карта сохраняет уже отрисованные чанки до готовности новой области и показывает отдельное состояние первого кадра, поэтому медленная сеть больше не оставляет чёрный экран или прямоугольные следы при перемещении.
- Клиент объединяет параллельные запросы одного чанка, повторно использует недавно полученные данные и построенный ground, ограничивает оба кэша и переключает detail/overview с гистерезисом без дребезга на границе масштаба.
- PixiJS больше не обращается к отсутствующим текстурам в Cache, а production CSP разрешает только необходимый встроенный `data:`-ресурс проверки ImageBitmap.
- Кнопки «План» и «Границы» получили явные hover/active/`aria-pressed` состояния; управление страной загружается вместе с основным интерфейсом без задержки первого открытия.
### Operations
- Для приложения и PostgreSQL заданы CPU, RAM и PID budgets, чтобы Tasktopia предсказуемо делила хост со вторым проектом без снятия его собственных ограничений.
### Quality
- Production Playwright имитирует задержку чанков, проверяет отсутствие повторных запросов, пустого canvas, CSP/Pixi warnings и выходов кэшей за установленные бюджеты.
- Релизная проверка и ресурсные критерии зафиксированы в `docs/QA-1.3.2.md`.
## 1.3.1
### Added
- MCP получил идемпотентные инструменты `city.rename`, `district.rename` и `task.rename` с проверкой соответствующих write-scopes.
- Переименование задачи записывается в её хронику как `TITLE_CHANGED`; все три операции публикуют точечные realtime-события.
### Fixed
- Карта снова запускается под строгим production CSP: lazy-чанк PixiJS явно подключает CSP-safe реализации шейдеров без `unsafe-eval`, а обработка ассетов получает ограниченный `worker-src 'self' blob:`.
- Общий burst-лимит поднят до 600 запросов в минуту, чтобы ассеты и чанки карты не блокировали API; строгие лимиты авторизации и MCP сохранены.
- Инструкции самого MCP-сервера больше не используют старую проектную терминологию.
### Quality
- Playwright запускает production-сборку с реальным CSP, поэтому отсутствие canvas и ошибка PixiJS теперь обнаруживаются до релиза.
- MCP smoke проверяет 20 tools в современном и legacy-протоколах и проводит новые rename-tools до защищённых доменных обработчиков.
## 1.3.0
### Added
- Компактный переключатель стран открывается прямо под названием и позволяет выбрать страну, перейти к управлению или создать новую.
- Для сайта добавлены собственные favicon, Apple Touch icon, manifest и социальная карточка Open Graph.
### Changed
- Верхняя панель показывает только действительно строящиеся районы и незавершённые здания; устаревшие счётчики городов, районов и задач убраны.
- Управление выбранной страной и создание новой страны разделены на два понятных сценария. Состав участников теперь называется правительством, а роли — главой страны, министром и наблюдателем.
- Из интерфейса, серверных сообщений и документации убрана прежняя продуктовая терминология.
- План и переключатель стран закрываются по клику снаружи и по Escape. Пустая страна сразу сообщает «Нет городов».
### Quality
- Playwright проверяет переключение, создание, переименование и удаление страны, пустое состояние, закрытие всплывающих панелей, новые показатели, метаданные и accessibility.
- Серверные тесты закрепляют расчёт активных районов и незавершённых зданий.
## 1.2.1
### Fixed
- Клиент больше не добавляет `Content-Type: application/json` к запросам без тела. Исправлены исключение участника, удаление и переключение страны, отзыв MCP-ключа и выход из аккаунта после обновления Fastify.
- Framework/parser errors больше не показываются пользователю дословно; неожиданные клиентские ошибки получают безопасное русское сообщение.
### Quality
- Unit и HTTP regression-тесты закрепляют корректные заголовки пустых запросов и отсутствие утечки parser messages.
- Playwright теперь действительно отзывает MCP-ключ и завершает сессию через интерфейс.
## 1.2.0
### Added
- Опубликована самодостаточная инструкция для ИИ по адресу `https://tasktopia.online/ai.md`: готовая конфигурация, модель сущностей, все 17 MCP tools, resources, scopes, ошибки и безопасный workflow.
- В настройках MCP появились отдельные действия для открытия и копирования публичной инструкции.
### Changed
- MCP переведён на официальные v2 server/client packages: основной протокол `2026-07-28` и stateless fallback для клиентов `2025-11-25` работают на одном Streamable HTTP endpoint. Web-standard Fetch handler подключён к Fastify через небольшой streaming bridge без несовместимых framework-adapter overrides.
- MCP принимает только `Authorization: Bearer ttp_mcp_...`, проверяет Origin для `GET`/`POST`/`DELETE` и возвращает стандартный Bearer challenge без credentials.
- Регистрационный workflow перенесён в `AppService.onboardUser`, чтобы создание пользователя, страны, session и первого города имело одну доменную транзакционную границу.
- Обновлены Fastify, PostgreSQL client, Zod, инструменты сборки и lint; TypeScript закреплён на последней версии, поддерживаемой текущим `typescript-eslint`.
### Fixed
- Удалены неиспользуемые стили прежних экранов авторизации, верхней панели, списка городов и старой панели стран; оставшиеся CSS selectors подтверждены реальными или динамическими компонентами.
- Мобильная кнопка районов больше не зависит от конфликтующих `hidden` и `inline-flex` utility-классов.
- Удалена ненужная Hono/Node-adapter цепочка с конфликтующим диапазоном версий; dependency audit проходит без overrides и известных runtime-уязвимостей.
- Генератор района пробует следующие безопасные road/endpoint пары, если ближайшая пара окружена reservation halo; regression seed `1901333332` закреплён тестом.
### Quality
- MCP smoke закрепляет modern/legacy negotiation, строгий Bearer, Origin, revocation, scopes и protected resources.
- Unit и Playwright проверяют полноту и публичную доступность `/ai.md`, а release QA вынесен в `docs/QA-1.2.md`.
## 1.1.2
### Fixed
- Production update script теперь повторяет health-запрос при `connection refused/reset` во время атомарной замены контейнера и не сообщает ложный провал успешного релиза.
## 1.1.1
### Performance
- WebSocket-клиент, план, карточка задачи, настройки и панель стран загружаются лениво и не входят в критический JS экрана входа.
- Стартовый JS уменьшен с `316 kB / 92.2 kB gzip` до `208 kB / 66.7 kB gzip`; карта остаётся отдельным lazy chunk.
## 1.1.0
### Added
- Регистрация получила обязательные в веб-интерфейсе названия первой страны и города; первый город создаётся сразу, без отдельного MCP-шага.
- Глава страны может переименовать её в переработанной панели управления.
- На экране авторизации кратко показана модель Tasktopia: страна содержит города, города делятся на районы, а задачи становятся зданиями.
### Changed
- UI-слой переведён на Tailwind CSS 4 через официальный Vite plugin; прежние специализированные стили карты размещены в component layer и не добавляют runtime JavaScript.
- Верхняя панель разделена на контекст, показатели и действия, поэтому длинные названия больше не выталкивают кнопки и статусы.
- Панель управления странами получила устойчивую desktop-сетку, полноэкранный mobile-режим, единые поля и кнопки, focus trap и возврат фокуса.
### Quality
- Onboarding пользователя, страны и города объединён одной PostgreSQL-транзакцией с безопасной поддержкой вложенных доменных операций.
- API и Playwright закрепляют создание первого города, role-based переименование, responsive 375/768/1440 и axe-аудит новых экранов.
- Deployment script и инструкция синхронизированы с production-каталогом `/srv/tasktopia/app`.
## 1.0.1
### Fixed
- Пустое состояние страны больше не накладывается на Suspense-loader карты; до появления первого города PixiJS-карта не загружается вовсе.
- Кнопка подключения MCP снова кликабельна, а текст, CTA и заголовок не пересекаются на desktop и mobile.
- Модалка настроек получила фиксированный заголовок и отдельное прокручиваемое тело, поэтому выпуск ключа больше не уводит начало формы за верхнюю границу.
- Мобильная верхняя панель, формы разрешений и список ключей адаптированы для ширины 375 px без горизонтального overflow.
### Changed
- Профиль и MCP разделены по вкладкам; MCP-сценарий показывает endpoint, Streamable HTTP, Bearer-заголовок, копируемые параметры и последовательные шаги подключения.
- Неоднозначное «Перевыпустить» заменено на явные действия «Создать ключ» и «Заменить ключ», а копирование URL и секрета подтверждается в интерфейсе.
### Quality
- В Playwright добавлен axe-аудит serious/critical WCAG-нарушений, проверка focus trap/Escape и отсутствие overflow на 375/768/1440 px.
## 1.0.0
### Added
- Runtime и тестовый контур переведены с блокирующего SQLite на PostgreSQL 16 с асинхронным пулом, advisory-lock миграциями и checksum-защитой.
- Добавлен read-only SQLite → PostgreSQL importer с dry-run, batch-переносом, сбросом sequences и проверкой counts/constraints.
- Docker Compose и CI поднимают PostgreSQL с healthcheck; параллельные тестовые файлы используют изолированные схемы.
- Квартальный планировщик V9 с плотными группами новостроек `3×3`, улицами частных домов, коммерческими полосами и общими пешеходными связями.
- Метаданные группы, роли, ряда, фасадного семейства и общего доступа у участков; старые районы продолжают читаться без миграции.
- Детерминированные проверки автоматического заполнения квартала и малого мира из одного города, 10 районов и 20 задач.
- Релизный экран входа и явные состояния сессии: инициализация, анонимный доступ, активная сессия и восстанавливаемая ошибка.
- Обзорный LOD карты и пространственный `affectedBounds` в realtime-событиях для адресного обновления чанков.
- Лёгкий bootstrap, scoped plan endpoints и PostgreSQL-индекс принадлежности сущностей чанкам.
- Read-only роль наблюдателя, выбираемые MCP scopes и срок новых токенов 30/90/365 дней.
- Стабильная cursor pagination списка городов без изменения прежнего `/api/plan/cities`.
### Fixed
- Авторизация и регистрация теперь возвращают понятные русские сообщения вместо необработанного `Bad Request`.
- Повторная регистрация существующего email стабильно отвечает конфликтом `409`, включая конкурентные запросы.
- После успешного входа интерфейс дожидается загрузки страны; временный сбой загрузки показывается в форме и может быть повторён без нового входа.
- В районах новостроек автоматическая городская служба больше не снижает долю высоток и mixed-use корпусов ниже 70%.
- Парк сохраняет свой тротуарный якорь, поэтому поздняя задача не может занять единственный пешеходный выход.
- Городские участки магистрали переводятся в arterial и больше не разрезают кварталы highway-классом.
- Карта больше не пересоздаёт PixiJS canvas при обновлении bootstrap, а перемещение внутри прежнего диапазона не перестраивает неизменившиеся чанки.
- PixiJS-карта загружается отдельным lazy chunk: стартовый JS уменьшен примерно с 536 до 298 kB, а карта вынесена в chunk около 229 kB.
- Стартовый prefetch уменьшен с 0,75 до 0,25 viewport; overview получает разреженный terrain и лениво загружает только используемые PNG.
- CIVIC/COMMERCIAL кварталы используют свободные совместимые участки основной полосы до расширения, устраняя ложный отказ генерации на отдельных seed.
- Entity-слои PixiJS обновляются дифференциально по id/signature; неизменённые здания, районы, декор и features больше не пересоздаются при каждом сдвиге карты.
- Сервер повторно использует до 64 готовых chunk DTO через bounded LRU и адресно инвалидирует status-изменения.
- Chunk/bootstrap/plan JSON крупнее 1 KiB передаётся с Brotli/gzip-сжатием.
- CSRF-проверка больше не доверяет подставленному `X-Forwarded-Host`; session cookie использует `SameSite=Strict` и автоматически получает `Secure` в production.
- Logout отключает активные WebSocket-соединения пользователя, а отзыв членства — его соединения отозванной страны.
- Long-lived WebSocket раз в минуту повторно проверяет срок session и выбранную страну.
- Spatial membership теперь обновляется при изменении footprint/access task и feature, включая отрицательные координаты.
- MCP resources теперь подчиняются scopes; повреждённые, истёкшие и отозванные токены безопасно отклоняются.
- Spatial backfill разбит на возобновляемые batch-транзакции по 250 сущностей вместо одной долгой блокировки.
- Общая reconciliation-механика Pixi entity views вынесена из `WorldCanvas` и тестируется независимо.
### Quality
- Read-only аудит всех 343 runtime PNG проверяет сетку 8 px, пять стадий, якоря, hard alpha, palette budget, геометрию машин и полноту manifest.
- Все большие генераторные профили удалены; unit, scale и Playwright используют один город и 10 районов.
- World audit закрепляет максимум 20% asphalt для новых жилых районов.
- Asphalt audit учитывает дороги, asphalt-платформы, service pads и driveways, а не только строки дорожной таблицы.
- Добавлен coverage gate; текущий полный прогон покрывает 83,98% statements и 88,53% lines.
- Исправлена moderate-уязвимость транзитивного `hono`; dependency audit возвращает 0 известных уязвимостей.
### Changed
- Production deployment переведён на системный nginx перед Docker-приложением; Node-порт публикуется только на `127.0.0.1`.
- Production origin и отображаемый MCP endpoint используют `https://tasktopia.online`.
- Внутри района строится одна улица общего доступа; новые задачи заполняют существующую группу, а расширение добавляет целый квартал.
- Публичные тексты и снимки больше не используют маркировку демо/прототипа.
## 0.7.0
### Added
- Несколько стран на аккаунт, переключение активной страны и правительство с приглашением зарегистрированных людей по email.
- Роли главы страны и министра; удаление страны и управление правительством доступны только главе страны.
- Редактирование имени аккаунта и персональный перевыпускаемый MCP-ключ.
- Создатель, ответственный и неизменяемая хроника событий задачи.
- Трёхуровневый веб-план: города, районы и задачи.
- MCP-команды `country.list`, `country.select` и `task.assign`.
- Пешеходные переходы как часть маршрута, уступающие машины, короткие безопасные связки разрывов тротуара и остановки людей у городских объектов.
### Changed
- В интерфейсе и публичном MCP используются только игровые названия: страны, города, районы и задачи.
- Персональный MCP-ключ работает с выбранной страной; перевыпуск отзывает прежний активный ключ аккаунта.
- Вертикальные машины перерисованы в симметричном формате `8×16`, получили корректное отражение и лёгкую анимацию подвески.
- Значения прогресса по умолчанию соответствуют пяти стадиям: `0 / 0 / 50 / 90 / 100`.
### Fixed
- Убрана лишняя серая кромка обычной дороги; специальные боковины сохранены только на мостах.
- Люди больше не прокладывают маршрут через footprint зданий и уличных объектов.
- Машины выбирают направление с учётом полосы и корректно отражаются при движении влево или вверх.
### Migration
- Существующая единственная страна каждого аккаунта автоматически становится первой страной владельца.
- Старые MCP-ключи получают владельца по стране. Данные городов, районов, задач и комментариев сохраняются.