Обновлено:

На этой странице

Тематические модули и параллельная разработка

28.10.2026. Рефакторинг опубликован на основном сайте: v0.7.0 / 754b604c1ee4980e, 03:07 МСК. Полный MVP остаётся в работе.

Исходники и сборка

Редактируемый код находится в src/, а dist/ генерируется. Версии импортов JS/CSS и подпись выпуска подставляются в сборку; исходники при сборке и публикации не переписываются. scripts/build-game.py проверяет, что исходники не менялись во время сборки, сохраняет ресурсы, данные, research, upload и notes и удаляет только свои устаревшие результаты.

Главное руководство для исполнителей — PARALLEL-DEVELOPMENT.md в корне проекта. Есть src/README.md и инструкции областей src/ui/AGENTS.md, src/runtime/AGENTS.md, src/engine/AGENTS.md. Карта модулей также сохранена в reference-original/module-ownership.json.

Области

ОбластьВладеющий модуль
Запуск, общий вход команд, сборка зависимостейsrc/app.mjs
Город, жители, производство, губернаторsrc/ui/city.mjs, city.css
Наука и правительстваsrc/ui/science.mjs, government.mjs, science.css
Карта и камераsrc/ui/map-view.mjs, map.css
Выбор и маршрутыsrc/ui/map-controls.mjs
Приказы и работы юнитовsrc/ui/unit-orders.mjs, unit-orders.css
Отношения и обязательные решенияsrc/ui/relations.mjs, decisions.mjs
Новая партия, загрузка, редакторsrc/ui/session.mjs
HUD и сообщенияsrc/ui/hud.mjs, feedback.mjs, shell.css
ИИ и измерения ходаsrc/runtime/ai-turn.mjs
Анимация и показ событийsrc/runtime/presentation.mjs
Изображения, звук и кешиsrc/runtime/resources.mjs
Подключение модулей и проверки зависимостейsrc/runtime/context.mjs
Проверка и исполнение командsrc/engine/command-validation.mjs, command-application.mjs
Формат и миграция сохраненийsrc/engine/game-schema.mjs, savegame.mjs

Существующие торговля, дипломатия, редакторы, правила и медиа остаются в своих тематических файлах. Главные бывшие монолиты сократились: app.mjs с 1250 до примерно 157 строк, engine/game.mjs с 836 до примерно 119. Всего перенесено 105 собираемых файлов: 97 JS, 7 CSS и шаблон HTML.

Контракты

У 14 фабрик интерфейса и исполнения собственное состояние экземпляра и явный requiredPorts. Недостающая зависимость или повторное объявление порта обнаруживаются при запуске. Модули не импортируют входной app.mjs; события экрана находятся вместе с его функциями. Это позволяет назначать исполнителей по тематическим файлам.

Общие точки остаются явными: новый тип команды согласованно подключается к проверке/исполнению, новый формат — к миграции, новый экран — к сборке зависимостей. За них отвечает интегратор. В общей рабочей копии нельзя пересобирать dist во время браузерного теста другого исполнителя; для самостоятельных прогонов нужны отдельные рабочие копии.

Проверки и публикация

  • 656 JavaScript-проверок пройдены; DOM-сценарий сохранил запуск, науку, производство, движение, ИИ, захват, победу и продолжение сохранения.
  • Три проверки сборки подтвердили повторяемость, версии вложенного JS/CSS, отсутствие изменений исходников, безопасную очистку и сохранность посторонних данных.
  • Независимое сравнение с исходным опубликованным ядром v0.6.0 дошло до победы за 276 команд на 42-м ходу: команды, результаты, события, весь мир и PRNG совпали, сохранение/загрузка вставлялись после каждой команды. Отчёт.
  • Вычисленные стили главного экрана, города, науки и торговли совпали с прежним CSS; проверены также ширины 1024 и 600. Отчёт браузера.

При проверке переноса исправлены пути фоновых изображений в CSS-переменных. Часть последующих браузерных прогонов попала на высокую общую нагрузку сервера и таймауты загрузки обычных PNG. Прогоны остановлены, затем после снижения нагрузки контрольная опубликованная v0.6.0 загрузилась за 471 мс. Последовательный повтор новой сборки прошёл; локальная загрузка заняла 383 мс. Это отдельный контрольный замер, а не гарантия времени на любом устройстве.

На основном сайте прошли восемь сценариев: сравнение стилей, генератор мира, управление, город, технологии, торговля, автоматические приказы и полная партия. Полная партия завершилась на 18-м ходу после 53 команд человека; импорт и перезагрузка результата совпали точно. Генератор проверен также на 12 800 клетках, 16 цивилизациях и старых сохранениях. Все восемь отчётов имеют текущий хеш, основной URL и пустые списки ошибок страницы/запросов. При сверке найден устаревший шаг браузерного драйвера: после клика по пустой клетке перед движением клавиатурой теперь явно выбирается юнит; проверки состояния остались строгими. Исправленный сценарий повторён успешно.

Сверены 108 опубликованных файлов; все 109 исходных файлов остались побайтово неизменными после сборки и публикации. Ссылки загрузки изображений и общих заметок сохранены. Независимые служебные страницы исключены из вычисления версии игрового кода.

Сохранённая незаконченная работа

Черновик загрязнения не входит в этот рефакторинг: он сохранён отдельным патчем и файлами в reference-original/pollution-candidate-20261028/. Новая механика должна быть перенесена в тематические исходники и полностью проверена перед отдельной публикацией; старые снимки нельзя накладывать поверх нового app.mjs целиком.

Уточнение изоляции служебных страниц, v0.8.0

Обнаружена и исправлена ошибка разбиения: случайная старая копия notes/app.mjs могла перезаписать более новую независимую сборку заметок. Актуальные четыре статических файла восстановлены штатной сборкой services/shared-notes без перезапуска сервиса или изменения документа. Игровая сборка теперь игнорирует служебные каталоги даже при ошибочной копии в src/, игровой публикатор вообще не размещает notes/upload. Эти страницы собираются и публикуются своими командами. Добавлена четвёртая проверка сборки с воспроизведением конфликта старого исходника и свежего результата; все четыре проверки прошли. Повторная настоящая игровая публикация сохранила текущие файлы заметок и игровой хеш. После удаления случайного исходника в src/109 файлов, собираемых игровых105. Браузерная проверка.