Godot 4.7 project for authoring, previewing, validating, and building Exchanger PCK themes. Includes the example and space-pixel themes, binding contracts, editor tooling, validation/build scripts, and project documentation.
80 KiB
Контекст проекта и handoff
Дата актуализации: 14 сентября 2026 года.
Текущее состояние
- Builder работает на Godot 4.7.1, главное preview —
tools/preview/preview.tscn, размер720×1280. - Реализован полный формат
ExchangerThemeDlcv2: 9 production-сцен, 481 обязательный immutable element-binding из JSON и 24 обязательных supplemental runtime-binding, проверяемых Builder отдельно. Четыре optional ID (тексты баннеров, выбор промо-изображения и переключатель питомца) сохраняют обратную совместимость; полностью обновлённая тема содержит 509 element-binding; metadata корней экранов и навигации питомца считаются отдельно. themes/example— валидная тема-шаблон;themes/space-pixel— текущая оформленная тема.- В SETTINGS
space-pixelкнопка добавления промо-ролика использует явный кегль17 px. Благодаря этому её минимальная ширина равна365 px, панель списка промо не расширяет общийVBoxContainer, а все видимые панели раздела «ПРОМО» занимают стандартную ширину664 pxв viewport720×1280. Актуальныеbuild/space-pixel.pckиbuild/active_theme.pckсовпадают:1700400bytes, SHA-2568082656B3F8DBAA74D6FC55659FDE99D636BF4A626BCECA99F93BA8C9123ECF7. space-pixelсодержит самостоятельный компонент интерактивного питомцаpackage/components/interactive_pet.tscn: 22 анимации, 414 кадров, Nearest-фильтрация и публичный GDScript-API с прямыми именами анимаций/runtime-профилем. Обычное перемещение исполняет host по отдельному theme-owned navigation v1 активного экрана; составнойinteractостаётся в теме и управляет экранной anchor-точкой только через scoped runtime host.- Optional composite contract позволяет теме задавать последовательность клипов, scale и временные
политики навигации, контактов с опорами, границ и ввода.
space-pixelвыполняет условный поворот,come_closer×2, повторыaction, вычисляемыйfallingчерез низ/верх экрана,landingна самой высокой доступной опоре иidle. Любая отмена инвалидирует run-scoped bridge; старые темы сохраняют одиночный semantic fallback. - Для автора темы добавлен отдельный дизайнерский гайд
docs/COMPOSITE_PET_ANIMATIONS.md: от подготовки клипов и pivotVisualRootдо раскадровки policy, работы с anchor, отмены и QA. - Non-sitting состояния питомца используют нулевую локальную поправку дочернего
AnimatedSprite2D. Толькоsittingимеет поправку(0,24), которая опускает его на20,28экранного пикселя при scale0.845; root, hit box иGROUND_OFFSETне меняются. - Все восемь non-settings сцен
space-pixelсодержат невидимые metadata-графы питомца: всего 54 поверхности верхних граней пола/кнопок/окон и 49 climb edges. Settings намеренно остаётся без графа. ВизуальныеControlне менялись; координаты являются реальными contact points в720×1280. - Exchanger вызывает прямую анимацию
dancingтемыspace-pixelпри начале клиентской выдачи и явно проигрывает четыре полных цикла после посадки на Success. - Обычное падение питомца использует последовательность прямых анимаций
falling → landing → idle: это относится и к отпусканию после drag, и к падению со старой позиции при смене экрана.landingявляется необязательным для старых тем: при отсутствии анимации host сразу включаетidle. Запросcelebrateво время приземления ждёт завершенияlanding, после чего запускаются четыре праздничных цикла. - 7 сентября обновлённый набор исходников питомца синхронизирован в package: добавлены девять
состояний (
come_closer,idle,landing,turn_left/right,actionи триclimbing_action*), обновлёнdancing, аhome/crossвключены как runtime-пиктограммы. Клипwalking_finish_rightпереименован вwalking_right_stop,walking_finish— вwalking_left_stop, аwalking_start— вwalking_left_start; имена файлов синхронизированы в архиве, source и package. Актуальныеspace-pixel.pckи Builderactive_theme.pckсовпадают:1658512bytes, SHA-25676518563591159EC4B8087911D2BB29924BC29C12AAA4FF1544D97ED01648E91. - Preview показывает реальные production-сцены, переключает все экраны, отображает binding overlay первой кнопкой слева и поддерживает live reload с сохранением текущей вкладки. Он не назначает сценам Theme/фон/decoration и не добавляет демонстрационные дочерние узлы.
- Кнопка
PETосновной галереи открывает отдельныйtools/preview/interactive_pet_preview.tscn: viewer динамически загружаетInteractivePetSceneактивной темы, строит кнопки из её API и автоматически вписывает персонажа в stage с масштабом до4×. Отдельная кнопка запускает составнойinteractчерез тестовый runtime с viewport и верхней опорой. Preview tooling не входит в PCK. - Все 18 production-сцен
exampleиspace-pixelсамодостаточны: root применяет package Theme, содержитThemeBackground/BackgroundDecorationи metadataexchanger_self_contained_visuals = true. - Home, CardAmount и Settings содержат готовые theme-owned runtime-узлы: 16 кнопок сумм, 16 строк бонусов, 16 строк готовых сумм и 12 строк промо. Host не должен изменять визуальное дерево ThemeView.
- Итоговые панели CashPayment, CardAmount и CardCustomAmount имеют общий заголовок «К ВЫДАЧЕ» и
раздельные theme-owned Label базовых жетонов слева и бонуса справа. В CardAmount исходный
immutable-binding
...reward_panel.content.valueсохранён для базы, а отдельный Bonus использует supplemental runtime-bindingcard_amount.content.reward_panel.content.bonus; старые темы без него поддерживаются host legacy fallback. - В SETTINGS обеих тем заранее находятся скрытые theme-owned текстовая и цифровая клавиатуры: 33 буквенных слота, переключатели языка/символов/регистра, действия редактирования и цифры 0–9.
- SETTINGS обеих тем содержит готовый раздел «Сервис» для учёта жетонов и скрытый диалог
пересчёта/ручного добавления. Их 14 binding-id входят в неизменяемый контракт, включая
отдельные Label точного остатка hopper 1/2. Три обязательных supplemental binding не входят
в JSON-каталог 481 элемента: Label
...service_inventory_panel.margin.content.descriptionпозволяет host менять описание по режиму учёта, аCheckButton...service_inventory_panel.margin.content.inventory_enabledвключает учёт остатка по умолчанию, аCheckButton...service_inventory_panel.margin.content.purchase_limit_enabledпо умолчанию запрещает продажу сверх учтённого остатка; host только обновляет готовые theme-owned узлы и подписывает сигналы. - Полный supplemental-срез состоит из 24 обязательных ID: 6 Home, 7 кнопок навигации «Главная»,
1 CardAmount и 10 Settings. Кнопки навигации добавлены на все экраны, кроме Home и Settings:
на экранах с Back они находятся справа от неё, а на Success/Error/ServiceAccess занимают её
стандартную позицию. Возврат отменяет незавершённую оплату; на Success кнопка недоступна во
время выдачи. Основа кнопки —
KeypadButton: вspace-pixelэто готовыйassets/ui/button_square.pngс наложеннойinteractive_pet/home.png, аexampleрисует встроенную пиктограмму дома без дополнительного ассета. Optionalhome.decoration.custom_text_blockобъединяет готовые речевую плашку и персонажа справа, когда они есть в дизайне;home.decoration.right_characterсохранён как legacy fallback для старых тем. Канонический перечень типов и ID находится вdocs/BINDING_CONTRACT.md. - Встроенный EditorPlugin
Exchanger Theme Managerдобавляет в менюРедакторкомандыВыбрать тему,Создать тему,Экспортировать темуиПрименить тему к Exchanger. Экспорт сначала предлагает любую валидную тему по ID, затем открывает стандартный save-dialog и асинхронно собирает её в выбранный PCK без переключения preview и установки. Выбор, создание, экспорт и применение показывают этапы и процент в общем окне прогресса; применение устанавливает активную тему в стандартный пользовательский каталог. Все каталоги тем постоянно видны в Godot FileSystem и не содержат.gdignore. - Сборка создаёт
build/<theme-id>.pckиbuild/active_theme.pck; установка в Exchanger выполняется только явным-InstallToDefaultUserPath. - Постоянного
exchanger_theme_dlc/в корне больше нет. Preview читает активный package напрямую поbuild/active-theme.json; каноническая папка создаётся только во временном изолированном workspace на время validator/export и затем удаляется.
Последняя подтверждённая проверка
Актуальные подтверждённые проверки:
-
11 сентября 2026 года после проверки исправленного PCK в Exchanger только сидящий питомец оставался выше нужной позиции.
sittingполучил отдельный visual offset(0,24), который опускает его на20,28экранного пикселя при scale0.845; non-sitting offset остаётся нулевым.GROUND_OFFSET=(64,96),VisualRoot, навигационные точки, Exchanger host и binding-контракт не менялись. Contract check, validator, pet verifier, preview smoke и build прошли; живой PET-preview720×1280подтвердил current offset(0,24)и отсутствие clipping.build/space-pixel.pckиbuild/active_theme.pckсовпадают:1700352bytes, SHA-256931A2EAA118722B95E49EA097C8CE41CE9E655F2CF7248CCA050B28A9AF50357; -
11 сентября 2026 года устранено завышенное положение питомца на поверхностях: в
interactive_pet.gdnon-sitting visual offset изменён с(0,-24)на(0,0). При runtime scale0.845прежняя поправка поднимала видимый спрайт на20,28экранного пикселя, хотя host сохранял корректный anchor.GROUND_OFFSET=(64,96),VisualRoot, навигационные точки и binding-контракт не менялись. Contract check, validator, pet verifier, preview smoke и build прошли;build/space-pixel.pckиbuild/active_theme.pckсовпадают:1700256bytes, SHA-256C1872763DA443190FA3CA2D281E1599B8C4F772CF290A19F3E4E580CAFE2336F; -
10 сентября 2026 года composite-действие
interactвspace-pixelсинхронизировано по финальной фазе приближения:VisualRootдостигает масштаба ×2 за первые75%клипаcome_closer, сохраняет его на заключительной четверти клипа и ещё0.15секунды после последнего кадра, и только затем запускаетaction. Точечный runtime-тест PET-preview зафиксировал scale2.0уже на кадре 27, на финальном кадре 35 и в началеaction; -
10 сентября 2026 года устранена линейная фильтрация содержимого
space-pixelв Exchanger при физическом разрешении1080×1920: корни всех девяти self-contained production-сцен теперь явно задаютtexture_filter = 1(Nearest). Раньше nearest был задан фону и отдельным изображениям, а Builder дополнительно маскировал проблему глобальной настройкой проекта; текст и прочие наследующие элементы в host могли получать линейный фильтр. Binding-каталог и host-контракт не изменялись. Валидатор теперь требует Nearest на каждом production-root, если manifest задаётUseNearestTextureFilter: true. Все девять вкладок с binding overlay проверены в живом preview720×1280; contract check, validator/preview smoke и build прошли. Итоговыеbuild/space-pixel.pckиbuild/active_theme.pckпосле финальной composite-правки имеют размер1698608bytes и SHA-2564F65DA0758C4234BA752F112C50830010D0914E1EC5FCD76FD70D913614B45A3; -
9 сентября 2026 года экранные заголовки
space-pixelуменьшены: общийScreenTitleиспользует36 pxвместо42 px, а заголовок ServiceAccess —30 pxвместо34 px. Блок техподдержки в собственном footer Home и общемcomponents/footer.tscnсдвинут на32 pxвлево (x = 341 px) без изменения размеров, binding-id и runtime-форматирования телефона. Все девять вкладок просмотрены в живом preview720×1280: заголовки и номер не обрезаются, блок поддержки не пересекается с логотипом. Contract check, validator/preview smoke и build прошли;build/space-pixel.pckиbuild/active_theme.pckсовпадают:1697968bytes, SHA-256628A7D5BDFFB03DF1DEAF835069C243FCC1FFF8D6AA39850B937A336EB0F6417; -
9 сентября 2026 года добавлены четыре compatible optional supplemental binding:
cash_payment.content.banner_text(Label) для подписи нижней анимированной плашки CashPayment иsettings.scroll.content.animated_banner_texts_panel(Control) для готовой панели настройки всех четырёх нижних баннеров. Immutable JSON-каталог сохраняет 481 binding и прежний SHA-256; полностью обновлённая тема содержит 509 element-binding, но старый PCK валиден и получает отсутствующие optional-узлы из встроенной темы. Добавлены такжеsettings.scroll.content.advertisement_poster_panel.margin.content.select_button(Button) для системного выбора изображения промо иsettings.scroll.content.menu_visibility_panel.margin.content.show_interactive_pet(CheckButton) для отключения theme-owned интерактивного питомца.Sync-HostBindingContract -Check, packaged contract для example/space-pixel иtest-themeобеих тем прошли. -
9 сентября 2026 года добавлена supplemental-навигация
home_navigation_buttonдля CashPayment, CardAmount, CardCustomAmount, CardTerminal, Success, Error и ServiceAccess. Immutable JSON-каталог не менялся: по-прежнему 481 binding и SHA-256DDDC89118BEEA78A820561464001656136ED42AC1AD5710FB109D25ADAF44143; с supplemental-слоем на момент этой поставки каждая новая тема содержала 505 обязательных binding. Вspace-pixelрасширены верхние поверхности Back и добавлены три поверхности/перехода навигации, поэтому граф теперь имеет 54 поверхности и 49 climb edges.Sync-HostBindingContract -Check,Test-PackagedBindingContract.ps1,test-theme example,test-theme space-pixelи build/install прошли. Установленный PCK Exchanger:1664336bytes, SHA-256E2CCD76C0374CE3B6285371DF4113511C39C22BCB131D4D3A10F5B391AFBA0A1. -
8 сентября 2026 года настройка Home «ПОКАЗЫВАТЬ ПОЛЬЗОВАТЕЛЬСКИЙ ТЕКСТ» получила optional binding
home.decoration.custom_text_block: вspace-pixelэто готовая группа речевой плашки и правого персонажа, поэтому host может скрыть её целиком вместе с обязательным Label текста, не перестраивая ThemeView. Старый optionalhome.decoration.right_characterсохранён для выпущенных тем. Визуальные координаты и ассеты не изменялись; скрипт покачивания использует новый вложенный путь персонажа. Contract copies (481 immutable binding) не менялись;Test-PackagedBindingContract.ps1,test-theme example,test-theme space-pixel, packaged pet verifier (22 анимации, 414 кадров, 51 поверхность, 46 переходов) и build/install прошли. Установленный PCK Exchanger:1658288bytes, SHA-2564DD492DA3B181B86B291D7930F400B1F8B660658EC1AECBC519266C4EFD6B642; -
8 сентября 2026 года документация и валидируемый semantic action list синхронизированы с обычным host-flow
drop → landing → idle.landingдобавлен в generic Theme Validator и PCK/source pet verifier: если тема возвращает для него непустое имя, оно обязано входить вget_pet_animation_names(), при этом старые темы с пустым mapping остаются допустимыми. Документы фиксируют одинаковое поведение после drag и смены экрана, а также очередьcelebrateдо завершения landing.space-pixelуже содержал корректные ресурсы и mapping:landing— one-shot на 11 кадров при 24 fps,idle— зацикленный на 19 кадров при 24 fps; production-сцены, sprite-sheet, биндинги и PCK не изменялись. Contract check,test-themeдляexampleиspace-pixel, а также verifier существующего PCK прошли; verifier подтвердил 22 анимации, 414 кадров, неподвижный root, 51 поверхность и 46 climb edges. Builder PCK-копии остались байт-в-байт одинаковыми:1658512bytes, SHA-25676518563591159EC4B8087911D2BB29924BC29C12AAA4FF1544D97ED01648E91; -
7 сентября 2026 года синхронизация с текущим Exchanger исправлена без изменения immutable контракта:
Sync-HostBindingContract.ps1явно исключает все 17 supplemental runtime-binding из генерации JSON, даже когда host обращается к их каноническому пути через буквальныйGetNode.Test-PackagedBindingContract.ps1защищает от попадания в каталог полный набор 17 ID, а не только прежние четыре.Sync-HostBindingContract -Checkи проверка package-копий проходят: 9 экранов, 481 binding, SHA-256DDDC89118BEEA78A820561464001656136ED42AC1AD5710FB109D25ADAF44143; production-сцены и PCK этой правкой не изменялись. Свежий PCK отдельно прошёл в Exchanger полный pet-smoke и исправленный payment-format smoke на mock-оборудовании без сохранения пользовательских Settings. -
7 сентября 2026 года три клипа ходьбы
space-pixelпереименованы сквозным образом:walking_finish_right → walking_right_stop,walking_finish → walking_left_stopиwalking_start → walking_left_start. Обновлены sprite-sheet вthemes_src, theme source и package,SpriteFrames, export-поля, списки кадров/FPS/one-shot, facing-наборы, preview enum, документация и semantic mappingwalk_start_left/walk_finish_left/walk_finish_right.walking_start_rightзавершает симметричную пару стартовых клипов. Старые четыре имени и файла отсутствуют. Принудительный Godot import, contract check, Theme Validator, pet verifier (22анимации,414кадров,51поверхность,46climb edges), preview smoke, build и PCK smoke (9экранов,23scripted instances) прошли.build/space-pixel.pckиbuild/active_theme.pckсовпадают:1658512bytes, SHA-25676518563591159EC4B8087911D2BB29924BC29C12AAA4FF1544D97ED01648E91. Пользовательская копия Exchanger не перезаписывалась; -
7 сентября 2026 года реализован optional composite contract интерактивного питомца между
space-pixelи Exchanger. Theme-ownedinteractвыполняет условный поворот,come_closerсо scaleVisualRootдо ×2, заданное числоaction, вычисляет полный путьfallingчерез нижнюю и верхнюю границы, игнорирует опоры до wrap, приземляется на самую высокую доступную поверхность, проигрываетlandingи возвращается вidle. Exchanger предоставляет только scoped runtime для anchor/viewport/поверхностей и политик, автоматически отзывает его при смене экрана/темы, drag и конфликтующих действиях; прежний semantic fallback сохранён. PET-preview получил отдельную кнопку и реальный запуск Godot завершил сценарий вidleбез ошибок. Contract-синхронизация подтвердила 2 темы/481 binding и SHA-256 каталогаDDDC89118BEEA78A820561464001656136ED42AC1AD5710FB109D25ADAF44143;test-theme, validator, preview smoke, PCK smoke (9экранов,23scripted instances), Release-сборка без предупреждений, NUnit488/488(18 аппаратных пропущены) и полный ExchangerInteractivePetBehaviorSmokeс явным PCK/mock прошли. Итоговыеbuild/space-pixel.pckи Builderbuild/active_theme.pck:1658436bytes, SHA-25637E86765C7F8DE542F799AF8523241A6EDE3F4DC4C481E28CCAC76D52C807AC6. Пользовательский каталог Exchanger не перезаписывался; -
7 сентября 2026 года верхняя плашка
CardAmountтемыspace-pixelприведена к точной визуальной копии плашкиCashPayment/Summary: обе используют цельный atlas-regionpanel_medium.png,PanelContainerразмером649×125в позиции(36,148)и одинаковые трансформации заголовка, базовых жетонов и бонуса. Runtime-инспекция Godot 4.7.1 подтвердила совпадение global rect всех четырёх видимых элементов; binding-id и канонические путиValueиBonusсохранены. Contract check, validator, interactive-pet verifier, preview smoke, сборка и PCK smoke (9экранов,23scripted instances) прошли.build/space-pixel.pckиbuild/active_theme.pckсовпадают:1435772bytes, SHA-256F505882620719F154319A9CD93208F42ECB59FCC615410827A44DADED8F61404; -
7 сентября 2026 года итоговые панели CashPayment, CardAmount и CardCustomAmount обеих тем синхронизированы по композиции. Caption CashPayment изменён с «БАЛАНС ЖЕТОНОВ» на «К ВЫДАЧЕ». CardAmount сохраняет обязательный
LabelValue с IDcard_amount.content.reward_panel.content.valueпо путиSafeMargin/Content/RewardPanel/Content/Valueдля базовых жетонов слева и содержит отдельный theme-ownedLabelBonus справа с supplemental IDcard_amount.content.reward_panel.content.bonusпо путиSafeMargin/Content/RewardPanel/Content/Bonus; его default —БЕЗ БОНУСА, а runtime-формат —+ N ЖЕТОНОВ\nВ ПОДАРОКилиБЕЗ БОНУСА. CardCustomAmount сохранил контрактные Label Amount и Tokens на прежних путях, но теперь также размещает базу слева и бонус справа; sample бонуса имеет явный перенос перед «В ПОДАРОК». Validator проверяет точные типы/пути, порядок, размещение, default-тексты и CashPayment caption, а contract-test подтверждает сохранность Value и отсутствие нового supplemental ID в JSON. Visual QA всех трёх экранов обеих production-тем в отдельной Builder-сессии Godot 4.7.1 при720×1280подтвердил полную читаемость, отсутствие визуального столкновения, clipping и перекрытия соседних панелей/footer. Contract check,test-theme, validator/preview smoke, сборка с-PreserveActiveThemeи отдельный PCK smoke прошли; PCK содержат 9 экранов и 9/23 scripted instances. JSON-контракт остался байт-в-байт прежним: 481 binding, SHA-256DDDC89118BEEA78A820561464001656136ED42AC1AD5710FB109D25ADAF44143. Новые PCK:example.pck—464876bytes, SHA-25602B8505FB7F0EF4F4E9C2905D97E8F8751A1DDE86DDF460AFC958CCE6AF51994;space-pixel.pck—1436988bytes, SHA-2564D9AA00FE2096794331B348916D1766B47A45D9EDFEE60BEAB0E424ED4761A67.active-theme.json, Builderactive_theme.pckи пользовательскийactive_theme.pckне изменились; тема не устанавливалась; -
7 сентября 2026 года в SETTINGS → «Сервис» обеих тем Label
Descriptionполучил supplemental binding-idsettings.scroll.content.service_inventory_panel.margin.content.description, чтобы host мог менять описание по режиму учёта. Сразу после него добавлен theme-ownedCheckButton«УЧИТЫВАТЬ ОСТАТОК ЖЕТОНОВ» с supplemental binding-idsettings.scroll.content.service_inventory_panel.margin.content.inventory_enabledи включённым состоянием по умолчанию. Сразу после него добавлен второй theme-ownedCheckButton«НЕ ПРОДАВАТЬ БОЛЬШЕ ОСТАТКА» с supplemental binding-idsettings.scroll.content.service_inventory_panel.margin.content.purchase_limit_enabled, также включённый по умолчанию. Он позволяет host ограничивать продажу доступным учтённым остатком. Минимальная высотаServiceInventoryPanelувеличена только на высоту новой строки и штатный отступ VBox: с696до772px. Validator проверяет ID, типы, точные пути, порядок обоих переключателей, тексты и начальные состояния; contract-test отдельно гарантирует, что все три supplemental ID не попали в immutable JSON. Visual QA обеих production-сцен в отдельной Builder-сессии Godot 4.7.1 при720×1280подтвердил полную видимость обоих переключателей, hopper-полей и статуса, отсутствие clipping/перекрытий и корректное отделение footer: уexampleпанель имеет фактическую высоту773px и зазор до footer20px, уspace-pixel—817px и47px соответственно. Contract check,test-theme, validator/preview smoke, сборка с-PreserveActiveThemeи PCK smoke обеих тем прошли; PCK содержат 9 экранов и 9/23 scripted instances. JSON-контракт остался байт-в-байт прежним: 481 binding, SHA-256DDDC89118BEEA78A820561464001656136ED42AC1AD5710FB109D25ADAF44143. Новые PCK:example.pck—464268bytes, SHA-256AC03334354D285E36A25BFB81D60880F829700F083AF5D728F10AB15C764B63D;space-pixel.pck—1436492bytes, SHA-256166660916913E4766FC91437155BB8B78A405150B3A599CF401CD78A83DFB727.active-theme.json, Builderactive_theme.pckи пользовательскийactive_theme.pckне изменились; тема не устанавливалась; -
7 сентября 2026 года
Exchanger Theme Managerобновлён до1.3.3: результатJSON.parse_string()явно объявлен какVariant, а результатArray.pop_back()приведён кNode. Вtheme_manager_plugin.gdбольше нет небезопасного вывода типа изVariant; -
7 сентября 2026 года в SETTINGS → «Общие» обеих тем визуально удалены строка названия приложения и панель предпросмотра, а подпись поля покупательской фразы изменена на «СВОЙ ТЕКСТ • ДО 48 ЗНАКОВ». Все существующие
application_nameиbranding_preview_panelbinding-узлы сохранены с прежними ID/типами и скрыты; лимит поляshort_textостался равен 48. Пояснение раздела больше не упоминает название или предпросмотр. Visual QA обеих production-сцен в отдельной Builder-сессии Godot 4.7.1 при720×1280подтвердил отсутствие пустых строк, обрезания и перекрытий, а также сохранность фиксированного footer. Contract check, validator/preview smoke,test-themeи build обеих тем с сохранением active state прошли; PCK smoke подтвердил 9 экранов и 9/23 scripted instances. Контракт остался байт-в-байт прежним: 481 binding, SHA-256DDDC89118BEEA78A820561464001656136ED42AC1AD5710FB109D25ADAF44143, поэтому обязательное правило обновленияdocs/BINDING_CONTRACT.mdне применяется. Новые PCK:example.pck—463324bytes, SHA-25625E90059652EC26BD1779F7D6761F1CD1248A458F8C93F8E242596D3988FDE9F;space-pixel.pck—1435548bytes, SHA-256E5941A4E7437BA996945E85551714F8B6E11F77A64808C68B29A8B88F66629AB.active_theme.pckв Builder и пользовательском каталоге Exchanger не изменялись и не устанавливались; -
4 сентября 2026 года runtime scale интерактивного питомца
space-pixelувеличен ровно на 30% (0.65 → 0.845), а сниженная высота оставлена только дляsitting: все остальные анимации получили локальную поправку(0,-24). Contract check, test/validator с переходомsitting → non-sitting → sitting, preview smoke, build, PCK verifier и hostInteractivePetBehaviorSmokeс явным PCK прошли. PCK имеет размер1435452bytes и SHA-256390C9E3F83B026304F0E75E5A6AAD4458684BBCDFC847FFB542B6CFB1AC278E9. Visual QA preview720×1280подтвердил crisp Nearest, отсутствие clipping и пересечения с заголовком для обеих высот. Пользовательскийactive_theme.pckне устанавливался. -
3 сентября 2026 года
Exchanger Theme Managerобновлён до1.3.1: JSON-протокол прогресса между Windows PowerShell 5.1 и Godot использует только ASCII-сообщения и стабильные stage-id, а все видимые русские названия этапов формируются внутри GDScript. Это исключает mojibake видаРџС...независимо от системной кодовой страницы. Контрольная сборкаexampleчерезpowershell.exeзавершилась сStage=complete,Percent=100, сохранила активной темуspace-pixel; package binding contract синхронизирован для обеих тем, SHA-256DDDC89118BEEA78A820561464001656136ED42AC1AD5710FB109D25ADAF44143. После editor filesystem scan Godot 4.7.1 новых parser/runtime errors не зарегистрировал; -
3 сентября 2026 года
Exchanger Theme Managerобновлён до1.3.0: диалоги выбора, создания, экспорта и применения получили сведения о теме и этапах, операции показывают общий progress bar, а экспорт позволяет выбрать любой валидный ThemeId независимо от активного preview. Скриптbuild-theme.ps1принимает-ProgressPathи публикует JSON-состояние стадий сборки; режим-PreserveActiveThemeне даёт редакторскому экспорту менять активное состояние и его PCK-копию. Контрольный экспорт неактивнойexampleзавершилсяcomplete/100%и сохранил хэши active state иactive_theme.pck; PCK smoke подтвердил 9 экранов/9 scripted instances. Повторные contract, validator, pet verifier, preview smoke и сборкаspace-pixelпрошли; её PCK сохранил размер1431068bytes и SHA-2565756191317B0318F1833657573B75A5240E96E3B4B063A7E6012C7165B9A2B7D. Headless Godot 4.7.1 подтвердил загрузку плагина и регистрацию команд меню без parser/runtime errors; -
3 сентября 2026 года
Exchanger Theme Managerобновлён до1.2.0: добавлена командаРедактор → Экспортировать темусо стандартнымFileDialog, выбором произвольного.pckи фоновой общей build-задачей. Экспорт не устанавливает тему; команда применения сохранена отдельно. Аддон загружен в Godot 4.7.1 без parser/runtime errors. Экспортspace-pixelчерез произвольный-OutputPath, validator, pet verifier, общий PCK smoke, preview smoke и contract check прошли; тестовый PCK содержит 9 экранов/23 scripted instances, имеет размер1431068bytes и SHA-2565756191317B0318F1833657573B75A5240E96E3B4B063A7E6012C7165B9A2B7D; -
3 сентября 2026 года
space-pixelполучил theme-owned navigation v1 для интерактивного питомца во всех восьми non-settings сценах. Невидимые metadata-графы содержат 51 горизонтальную contact surface и 46 связанных climb edges; Settings намеренно исключён. ВизуальныеControlи 285 кадров не менялись. Component API сопоставляет semantic actions с существующими анимациями (drag = hanging,drop = falling, совместимыйclimb_finish = sitting) и сообщает scale0.65, walk/climb speeds88/72 px/s, hit size128×128, ground offset(64,96). Generic validator/verifier требуют граф у каждой non-settings сцены темы с питомцем и проверяют уникальность IDs, конечность/границы координат, sit points, ссылки и стыковку climb edges с поверхностями. Contract SHA-256DDDC89118BEEA78A820561464001656136ED42AC1AD5710FB109D25ADAF44143не изменился.test-theme space-pixel, validator, preview smoke, export и pet verifier прошли:13анимаций,285кадров,51поверхность,46climb edges. Текущиеbuild/space-pixel.pck,build/active_theme.pckи установленная Exchanger-копия совпадают:1431068bytes, SHA-2565756191317B0318F1833657573B75A5240E96E3B4B063A7E6012C7165B9A2B7D. Расширенный host runtime-smoke с mock-оборудованием подтвердил touch/LMB drag, подъём на Home/CashPayment, активацию индивидуального графа каждой сцены, сохранение позиции иfalling-падение при переходе, скрытие в Settings и возврат с падением. После добавленияcelebratesmoke также подтвердил очередь до посадки, ровно четыре запускаdancingи возврат вSitting; Exchanger unit-тесты: 419/419; -
3 сентября 2026 года feature-level контракт интерактивного питомца нейтрализован: optional manifest field
InteractivePetSceneуказывает на произвольную theme-ownedNode2D-сцену внутри package; canonical space-pixel компонент/скрипт и builder tooling переименованы вinteractive_pet.*. Viewer больше не инстанцирует space-pixel статически: он загружает компонент активной темы, строит кнопки изget_pet_animation_names()и не обращается к папкам текстур. Generic verifier используется вtest-theme.ps1иbuild-theme.ps1, проверяет API, сигналы, анимации и неподвижность root как в package, так и в PCK. Существующие каталогиsource/alien_animationиpackage/assets/animations/alien_petсохранены без переименования как внутренняя структура конкретной темы. Legacycomponents/alien_pet.tscnраспознаётся только discovery fallback для старых packages. Contract check,test-theme example(pet SKIP),test-theme space-pixel, живой viewer720×1280, validator, preview smoke, export и общий PCK smoke прошли; viewer показал 13 динамических кнопок и 285 кадров без parser/runtime errors.build/space-pixel.pckиbuild/active_theme.pckсовпадают:1388444bytes, SHA-256BECBD72EDA68B67C5744B4BE642756186876A6D9754E6DF3B025FC78FD0D3C16; -
2 сентября 2026 года
Exchanger Theme Managerобновлён до1.1.0: командаРедактор → Применить тему к Exchangerзапускает validator/export/install активной темы в фоновомThread, показывает компактные состояния выполнения/ошибки и не блокирует UI редактора. Аддон успешно загружен Godot 4.7.1 в editor mode. Дляspace-pixelпрошли byte-identical contract check, validator, preview smoke и PCK smoke (9сцен,23scripted instances).build/space-pixel.pck,build/active_theme.pckи установленная пользовательская копия имеют размер1388536bytes и SHA-256D2D4BCF640374B76D8EFF48919EA7CD9A46AC7059DA42A73A630BE73B39C12D4; -
2 сентября 2026 года исходные sprite-sheet из
alien_animationперенесены в theme-specificthemes/space-pixel/source/alien_animationиpackage/assets/animations/alien_pet. Компонент, позднее переименованный вinteractive_pet.tscn, реализует 13 состояний без движения корня. Отдельный viewer всех состояний проверен живым запуском при720×1280; он использует тот же production-компонент и стартует сsitting. Contract check, validator, preview smoke, общий PCK smoke и отдельный pet-PCK smoke прошли. Viewer также проверен переходамиPET→ viewer иEsc→ галерея; parser-ошибка вывода типаinitial_nameустранена явнымStringName. Package-копия binding-контракта синхронизирована с авторитетным JSON. Собранныеspace-pixel.pckиactive_theme.pckсовпадают:1389432bytes, SHA-2561392F51A12014EB1653F976B252FA55DCC5EFDE53B18563858DEF878CA2ADF3C; установка в Exchanger не выполнялась. -
1 сентября 2026 года обе Home-сцены получили theme-owned Label
home.scroll.content.stock_status.approximate_count: состояние расположено слева, полоска по центру, приблизительный остаток справа. Builder проверяет этот Label и четыре состояния полоски как supplemental runtime bindings, не меняя JSON-контракт 477; -
template/example дополнительно приведён к актуальной двуххопперной сервисной панели контракта; contract check, validator и preview smoke прошли для example и space-pixel;
-
package-копии
exampleиspace-pixelсовпали с авторитетным контрактом SHA-2567ABC98D7770782D0EB658E6EC8CD8FA4F504B0F61862C84FD5E3580341FE73F2; -
каталог содержит 473 биндинга, включая 57 keyboard bindings, 4
short_textbindings, 12 сервисных bindings и отдельное поле введённой суммы CardCustomAmount; -
обе темы прошли Godot import, validator и headless preview smoke после переноса визуального chrome внутрь всех production-сцен;
-
SETTINGS preview получил диагностическое состояние
KEYBOARD: OFF/TEXT/NUM, которое меняет толькоVisibleдвух уже существующих панелей и позволяет проверить их binding overlay; -
валидатор подтвердил уникальность всех 473 ID, допустимые типы и наличие всех 57 keyboard bindings в
exampleиspace-pixel; -
Godot EditorFileSystem индексирует
themes/exampleиthemes/space-pixelбез.gdignoreи без duplicate UID; package-сцены открываются напрямую изthemes/<id>/package/scenes/; -
space-pixelуспешно собран в PCK; export включил вложеннуюcomponents/on_screen_keyboards.tscnи прошёл предварительный validator; -
validator требует пустой
suffixу всех 16 полей количества дополнительных жетонов, чтобы тема не могла снова отнять у многозначного числа место припиской; -
служебные ряды текстовой клавиатуры
exampleиspace-pixelвыровнены по единой высоте76 pxи зазорам12 px; вspace-pixelотдельный стиль обрезает прозрачные краяbutton_long.png, стрелки имеют touch-target88×76 px, а длинные действия не сжимают текст; -
кнопки скрытия обеих экранных клавиатур сохраняют тип
Button, прежние binding ID и логику, но используют крупную центрированную стрелку вниз вместо надписи «СКРЫТЬ»; touch-target каждой кнопки равен64×64 px.space-pixelпереиспользуетbutton_down.png, а шаблонexample— собственный кодовый SVGassets/ui/keyboard_hide.svg; -
описание приложения
subtitleостаётся удалённым. Отдельная настройка «Короткий текст» использует новые IDhome.scroll.content.speech_textи триsettings...short_textbinding: HOME bubble переносит и центрирует до 48 символов, SETTINGS содержит поле, ошибку и предпросмотр; -
живой preview через
godot-aiзагрузил 9 вкладок, переключил каждую из них, включил/выключил binding overlay и не записал ошибок в game/editor logs; -
визуально подтверждены прямое открытие
example/space-pixelscene-файлов, все девятьspace-pixelвкладок без overlay, портретные720×1280и отсутствие внешнего preview chrome; -
через
godot-aiподтверждены готовые Home stock/promo visuals и восемь видимых CardAmount preset-кнопок; скрытые слоты 08–15 не создают пустых ячеек; -
в шаблоне
exampleэкран ручного ввода сохраняет полноразмерную панель652×768 pxи клавиши152×152 px; вspace-pixelэтот экран приведён к отдельному JPG-референсу: панель занимает646×466 px, цифровые клавиши квадратные46×46 px, длинные действия находятся в нижнем ряду; -
на экране сервисного входа обеих тем PIN-клавиатура центрирована, а все двенадцать клавиш имеют одинаковый квадратный размер
112×112 px; действия и footer не перекрываются; -
space-pixelиспользует пользовательскиеtumbler_on.pngиtumbler_off.pngдля всехCheckButton; ON/OFF проверены в живом SETTINGS при исходном размере128×64 px, а все 12 строк имеют одинаковые внутренние отступы слева и справа по24 px; -
все 57
SpinBoxтемыspace-pixelиспользуют пользовательские стрелки вверх/вниз; runtime-копии32×32 pxсохраняют пиксельный вид, отделены от поля промежутком10 pxи проверены действием цены10 → 11 → 10; у 16 бонусных полей удалён суффикс «жет.», чтобы многозначное количество помещалось в поле целиком; -
все
LineEdit(normal/focus/read-only), внутренние текстовые поляSpinBoxиOptionButtonиспользуют растягиваемый фон из видимой области290×64 pxисходногоsumma_bar.png; -
обе полосы
HSliderв SETTINGS → «ЗВУК» темыspace-pixelувеличены по высоте с14до36 px, видимый круглый grabber отключён, а заполнение100%доходит до правого края; живой Exchanger подтвердил отсутствие обрезания и наложений в обоих блоках громкости; -
установленный
%APPDATA%/Godot/app_userdata/Exchanger/theme_dlc/active_theme.pckсверён со сборкой по SHA-256; после полного перезапуска Exchanger экран «ОПЛАТА» показал новые тумблеры ON/OFF и квадратные стрелки SpinBox, а runtime-журнал подтвердил активациюspace-pixel; -
прямой preview и обе команды test/build подтверждены при физически отсутствующем корневом
exchanger_theme_dlc/; временные workspaces после завершения команд пусты; -
после пересохранения открытых
ui_theme.tresиscreen_home.tscnGodot Editor заменил переносимые ссылки на builder-onlyres://themes/space-pixel/package/...; относительные пути восстановлены, после чего изолированный validator снова загрузил все ресурсы без ошибок; -
build/example.pckпересобран из актуального package после обновления Home/Settings и контракта: размер437356bytes, SHA-25638C23A7593082462E58F7DE2354013A9E548E2C45D58ACEDD8FC09CA82E38E95; validator, preview smoke и PCK smoke прошли, последний инстанцировал 9 экранов и подтвердил 9 scripted node instances; -
Test-PackagedBindingContract.ps1,test-theme example,test-theme space-pixelиbuild-theme space-pixelпрошли после удаления короткого описания. Импорт, полный validator, headless preview smoke и export PCK завершились без ошибок; -
Theme DLC не является самостоятельным приложением и намеренно не содержит main scene, поэтому запуск
--main-packне применяется для QA. Готовность пакета подтверждают validator/export и последующая интеграционная проверка в Exchanger; -
Exchanger переведён на full-trust theme runtime: host больше не отклоняет GDScript, runtime-узлы, размер PCK или прежний decoration budget; 263 unit-теста прошли, 17 hardware-тестов пропущены из-за отсутствия оборудования.
-
Home темы
space-pixelприведён к референсуthemes_src/space_pixel/references/photo_2026-08-20_14-09-56.jpgв исходном720×1280: восстановлены белые bubble-плашки, исходный масштаб и позиции НЛО, панели наy=338/490, билборд, логотип и блок поддержки; обязательные пути и binding-id сохранены. -
Контрольный Godot-render снизил среднюю абсолютную RGB-разницу Home с референсом с
75,81до6,84; полученная на том этапе сборка имела размер684216bytes и SHA-256CD1AB4B914997A369874F7F1E01FCE44B71EEF0BD2297E544D3C3701D809B13B. -
CashPayment, CardCustomAmount, CardAmount и CardTerminal темы
space-pixelприведены кphoto_2026-08-20_14-10-27/36/40/43.jpgпрямым редактированием production-сцен. Сохранены все обязательные bindings, скрытые CardAmount-слоты 08–15 и исходные bill/coin/card-анимации. Повторная строгая сверка CardCustomAmount/CardAmount заменила приблизительный panel chrome на трёхчастные исходные текстуры и локальные StyleBox с раздельной геометрией фона и текста. Средняя RGB-разница внутри двух основных панелей снизилась с13,28до7,64и с15,31до10,88соответственно; финальные кадры вручную сверены по геометрии, заголовкам, кнопкам, CTA, bubble и footer. CashPayment сохраняет MAD13,66, CardTerminal — MAD11,58. -
Runtime CashPayment в Exchanger исправлен под уже существующий тройной binding-контракт:
balanceполучает только рубли,tokens— базовое количество жетонов,bonus— бонус в формате+ N ЖЕТОНОВ\nВ ПОДАРОКлибоБЕЗ БОНУСА. Поэтому host больше не стирает pixel-perfect значения production-сцены и не объединяет рубли с жетонами в одной строке. Форматирование покрыто отдельными тестами для нулевого баланса и двух бонусных порогов; на этом этапе полный набор Exchanger прошёл272unit-теста,17hardware-тестов штатно пропущены. Production Windows export успешно запустился, загрузил установленнуюspace-pixelи завершился без theme/binding/fallback-ошибок. PCK осталась байт-в-байт прежней:718536bytes, SHA-256AEB8DD1199F71F1114D523CF9928FA6743383746A9DE689755131E8CE9F16BAA. -
CardCustomAmount получил отдельный обязательный binding
card_custom_amount.content.keypad_panel.content.input_value: введённая сумма обновляется внутриsumma_bar, а верхние два Label показывают только базовые и бонусные жетоны через общийPricingPolicy. Контракт содержит 461 ID и имеет SHA-256EF5C75B467C87107DF070C3885693D69BF57434259EF3F54DB82E5F074172753. После расширения контракта прошли276unit-тестов,17hardware-тестов штатно пропущены; production export с mock-hardware загрузил внешнюю тему без theme/binding/fallback-ошибок. Новая установленная PCK:721192bytes, SHA-25630A8806709BCA315E1F455FED1F438C5CD377B9ACEC35A249BABDFF12F1888C4. -
Отдельная настройка «Короткий текст» добавила обязательный HOME Label
home.scroll.content.speech_textи три SETTINGS binding с сегментомshort_text; deprecatedsubtitleID не возвращены. Поле ограничено 48 символами, а Label речевой плашки переносит, центрирует и обрезает текст в пределах авторской композиции. После включения строгого Nearest кегль HOME bubble увеличен с12до16 px, межстрочный интервал равен-2 px, а область Label сужена до реальной белой части спрайта (x=408..590,y=62..135), поэтому короткая фраза читается крупно и переносится внутри облака. -
После изменения
Test-PackagedBindingContract.ps1,test-theme example,test-theme space-pixel,build-theme space-pixelи штатныйverify_theme_pck.gdпрошли. PCK smoke смонтировал пакет, инстанцировал 9 экранов и нашёл 3 scripted node instances. -
Footer из референса Home с логотипом
Robotic Retailersи двухстрочным номером техподдержки присутствует на восьми production-экранах. Семь экранов используют общийthemes/space-pixel/package/components/footer.tscn, Home сохраняет собственные обязательные footer bindings, SETTINGS намеренно остаётся без footer. ВCardCustomAmountподтверждение поднято на12 px, поэтому его область не пересекается с footer. -
Актуальные
build/space-pixel.pck,build/active_theme.pckи установленный%APPDATA%/Godot/app_userdata/Exchanger/theme_dlc/active_theme.pckбайт-в-байт совпадают: размер721192bytes, SHA-25630A8806709BCA315E1F455FED1F438C5CD377B9ACEC35A249BABDFF12F1888C4. 27 августа 2026 года после установки выполнен полный перезапуск Exchanger в720×1280: runtime-журнал подтвердил активациюspace-pixel, theme/resource/fallback-ошибок не было, актуальные контрольные кадр и видео сохранены какbuild/exchanger-speech-bubble-runtime.pngиbuild/exchanger-speech-bubble-runtime.avi. Корни всех девяти сцен наследуютtexture_filter = 1, а production TTF импортируется без antialiasing, hinting и subpixel positioning, с oversampling1.0. Contract, validator/preview smoke и PCK smoke прошли; последний инстанцировал 9 экранов и нашёл 10 scripted node instances.
Зафиксированные решения
- Внешняя тема владеет визуальным деревом экранов; Exchanger владеет логикой и безопасностью.
- Интерактивный питомец является optional theme-owned компонентом из
InteractivePetScene. Публичный контракт использует только нейтральные pet-методы/сигналы; расположение и имена текстурных каталогов не входят в контракт и определяются ссылками самой сцены. - Навигация питомца также theme-owned: обязательные для темы с питомцем v1
Node2D-маркеры во всех non-settings сценах объявляют bounds, горизонтальные поверхности, точки сидения и связанные вертикальные края только через metadata. Settings намеренно исключён. Host не вычисляет маршруты из имён/геометрииControl; component API сопоставляет semantic actions с анимациями и сообщает scale0.845, скорости88/72 px/s, hit size128×128и ground offset(64,96).GROUND_OFFSET=(64,96)остаётся host-точкой контакта для всех состояний; non-sitting анимации используют нулевую поправку дочернего визуала, аsitting—(0,24). Root, navigation и hit box при переключении состояний не меняются. - Exchanger не добавляет, не удаляет, не переносит и не стилизует
Controlвнутри ThemeView; коллекции реализованы заранее созданными theme-owned слотами. - Экранные клавиатуры являются теми же theme-owned слотами: host меняет только значения,
Visible/Disabledи подключает сигналы; создание или перестройка клавиш в runtime запрещены. - Сервисная панель и её диалог также являются theme-owned слотами. Preview-переключатель
INVENTORY: OFF/PANEL/DIALOGменяет только видимость готовых узлов для диагностики. - 28 августа 2026 года сервисный интерфейс добавлен в
exampleиspace-pixel: 12 новых binding-слотов довели контракт до 473 элементов (373 на экране Settings), SHA-256 контракта7ABC98D7770782D0EB658E6EC8CD8FA4F504B0F61862C84FD5E3580341FE73F2. Contract check, validator и preview smoke прошли для обеих тем. Итоговыеbuild/space-pixel.pckиbuild/active_theme.pckимеют размер730888bytes и одинаковый SHA-256AD665F4FFC840091E670407D4ADC82463AA269A91D54E181E3639BC8AB8BEF68. - 1 сентября 2026 года
space-pixelиспользует проектныйbutton_cancel.pngдля всех действий «ОТМЕНА»/«УДАЛИТЬ». Пролёты НЛО главного экрана пересобраны поinterface.mp4: большая композиция проходит экран на0–4секундах, малая — на9,75–13секундах 14-секундного цикла; координаты хранятся в системе1080×1920и один раз масштабируются production-сценой до720×1280. Оба набора используютAnimatedSprite2Dс двумя кадрами: большой —1 fps, малый —1,5 fps. Старые одиночные пролёты и двойное уменьшение масштаба удалены. Godot preview визуально проверен наt=1/2/3/10,5/12/12,5; contract check, validator и preview smoke прошли.build/space-pixel.pck,build/active_theme.pckи установленная пользовательская копия совпадают:741032bytes, SHA-256E97F95F544BC257CB309789FD67585F93FFD1569F5662FE78ACCE7E7D0193D8A. - 2 сентября 2026 года фиксированный 14-секундный
AnimationPlayerпролётов заменён наscripts/ufo_flight_controller.gd. Большой и малыйAnimatedSprite2Dнезависимо проходят экран, после случайной паузы разворачиваются черезflip_hи летят обратно; высота каждого нового прохода случайна в диапазоне260–1660координат исходной сцены и привязана к шагу3 px. Покадровые циклы из двух кадров продолжают работать параллельно с Tween-движением. Runtime-проверка подтвердила смену направления/высоты и работающийflip_h; contract check, validator, preview smoke и PCK smoke прошли. PCK smoke инстанцировал 9 экранов и 18 scripted node instances. Собранная, активная и установленная PCK совпадают:741708bytes, SHA-2565034C3DB1DA44565ED45F682757C03E44D238ABDB1A0B2947F371A98C80C10BB. В запущенном Exchanger скрипт загружен изres://exchanger_theme_dlc/во всех девяти decoration-инстансах; Home runtime подтвердил смену направления-1 → 1, высоты1632 → 885и активную смену кадров. - Два референсных НЛО вокруг ценового блока Home получили отдельный theme-owned скрипт
scripts/home_ufo_bobbing.gd: левый движется с амплитудой4 pxи периодом3,2 с, правый —5 pxи3,8 с, в противофазе. Каждый кадр смещения округлён до целого пикселя; базовые позицииAlienLeft y=130иAlienRight y=83не изменены. Contract check, validator, preview smoke и PCK smoke прошли; PCK smoke подтвердил 9 экранов и 19 scripted node instances. Exchanger runtime загрузилres://exchanger_theme_dlc/scripts/home_ufo_bobbing.gdи подтвердил изменение обеих Y-позиций при Nearest-фильтрации. PCK-копии совпадают:743376bytes, SHA-2561646AA10C8DD5EA9AE70FA21040507889FC1719FF26E122464E105E9D2012AFE. - Двухкадровый нижний
Bannerэкрана Cash больше не меняет видимый размер при переключении. Исходные PNG1024×256сохранены;scripts/stable_banner_animation.gdкомпенсирует различие их цветных bounds (263×167против257×163) масштабом и смещением второго кадра. В builder runtime и в установленной PCK внутри Exchanger оба кадра получили одинаковый экранный Rect2(34.996, 1000.8, 175.421, 111.389), autoplay1 fpsпродолжает работать. Contract check, validator, preview smoke и PCK smoke прошли; PCK smoke подтвердил 9 экранов и 20 scripted node instances. Собранная, активная и установленная PCK совпадают:744728bytes, SHA-256FAD047504C95D14CFB8E999B7F5E4EA800BD3EE5AB4E95F3FA7F2836A4E3E8D5. - На экране CardAmount отдельные
ReferenceAlienиSelectionBubbleзаменены тем же цельным двухкадровым НЛО-баннером. Обязательный Labelcard_amount.content.selection_labelсохранён поверх белой части баннера, поэтому Exchanger продолжает подставлять runtime-подсказку без изменения host-контракта. Нормализация кадров выполняетсяscripts/stable_banner_animation.gd; preview, validator, contract check и PCK smoke прошли, PCK smoke подтвердил 9 экранов и 21 scripted node instance. Установленный Exchanger загрузил Banner и скрипт изres://exchanger_theme_dlc/. Собранная, активная и установленная PCK совпадают:744984bytes, SHA-25629A3386FB186415A5A2B30F6B9DFFF42BEBC532A8A43FA8809274F3F927B3784. - На CardCustomAmount пары
PromoAlien + PromoBubble, а на CardTerminalReferenceUfo + StatusBubbleзаменены цельными двухкадровыми НЛО-баннерами. Обязательныеcard_custom_amount.content.hintиcard_terminal.content.countdownсохранены поверх белой части. Оба экрана визуально проверены отдельно в720×1280; contract check, validator, preview smoke и PCK smoke прошли, PCK smoke подтвердил 9 экранов и 23 scripted node instances. PCK-копии совпадают:745864bytes, SHA-25644E36EBBA126BADC34FD65FFEF78F8E4C7A280D4F56704EBBDCC0F2C63C479B1. - 2 сентября 2026 года host-контракт синхронизирован до 479 биндингов: добавлены
card_terminal.content.top_bar.back_button, наличный и безналичный таймауты Settings вместо прежнего общего поля.exampleиspace-pixelсодержат готовые theme-owned элементы; contract check, validator и preview smoke обеих тем прошли. Новыйspace-pixel.pckустановлен в Exchanger: 747192 bytes, SHA-2569C42625A26B7620662392FD06F681529157EC129E5BB85BF4990254896A877A1. Headless runtime Exchanger с mock-оборудованием загрузил тему без binding-ошибок. - 2 сентября 2026 года сервисные подписи
Hopper1LabelиHopper2Labelполучили отдельные binding-id точного остатка. Контракт синхронизирован до 481 биндинга, SHA-256 —DDDC89118BEEA78A820561464001656136ED42AC1AD5710FB109D25ADAF44143.exampleиspace-pixelпрошли contract check, validator и preview smoke. Панельspace-pixelвизуально проверена в preview при720×1280: обе подписи целиком помещаются в существующие theme-owned Label и не перекрывают кнопки. Собранныеspace-pixel.pckиactive_theme.pckсовпадают:748120bytes, SHA-256B83FBB273588DA450C5A206BFC69C13517048DFD9D2861A2BEB2190BE4239E32. Host runtime-smoke с явным путём к PCK и mock-оборудованием прошёл без binding-ошибок; пакет в пользовательский каталог не устанавливался. - Preview и Exchanger инстанцируют те же готовые
ScreenScenes; optional manifest-пути общего фона/decoration пусты, чтобы host не дублировал встроенные слои сцены. - Production-тема является доверенной и может исполнять GDScript и содержать собственные runtime-узлы; manifest и 481 app-binding остаются обязательными.
- Host ищет элементы по metadata, а не NodePath, и сверяет SHA-256 каталога контракта.
- Основной фон статический. Покадровые анимации и НЛО — отдельные спрайты, не живой фон.
- Внутренние зависимости package задаются относительными путями, чтобы исходники всех тем безопасно индексировались и открывались одновременно.
- Русская терминология интерфейса: «промо» и «промо-ролик».
- Автономная память проекта использует
project: exchanger-theme-dlc-builder. - 10 сентября 2026 года причина отсутствия последних визуальных изменений в Exchanger оказалась
не в новой сборке, а в устаревшей установленной копии PCK от 9 сентября. После повторной сборки
и установки
build/active_theme.pckи пользовательский%APPDATA%/Godot/app_userdata/Exchanger/theme_dlc/active_theme.pckпосле финальной composite-правки совпадают:1698608bytes, SHA-2564F65DA0758C4234BA752F112C50830010D0914E1EC5FCD76FD70D913614B45A3. Exchanger монтирует PCK при запуске, поэтому для применения заменённого файла требуется полностью закрыть и снова запустить приложение.
Известные ограничения
- Preview не запускает настоящую оплату, выдачу, COM-контроллер и сохранение настроек. Он показывает начальные значения готовых theme-owned узлов; их реакцию на runtime-данные проверяют в Exchanger.
- Обновление binding-контракта требует доступного исходника совместимой версии Exchanger и синхронного изменения host hash/tests.
themes_src/иpreview_scenes/сохранены как архив ранней модели и могут путать поиск; новые изменения туда не вносятся.- Фактический TTF идентифицирует себя как
VCR OSD Mono [RUS by Daymarius], версия от 17 августа 2018 года, designerMrManet; поля copyright/license/license URL пусты. Оригинальный автор VCR OSD Mono публично разрешил коммерческое использование, но отдельное разрешение автора кириллической модификации из первичного источника не найдено. Для внутреннего использования файл сохранён ради pixel-perfect метрик; перед публичной поставкой нужно получить письменное подтверждение Daymarius либо заменить шрифт. - Финальное визуальное совпадение всегда требует ручного просмотра всех экранов; headless smoke не оценивает композицию.
Последнее изменение: переключатель интерактивного питомца
17 сентября 2026 года готовый ShowInteractivePet в Settings обеих production-тем
(example, space-pixel) получил краткую подпись «ИНТЕРАКТИВНЫЙ ПИТОМЕЦ». Его supplemental
binding ID и тип не менялись. Exchanger делает переключатель недоступным, если активный manifest
не содержит InteractivePetScene; сохранённое предпочтение при этом не стирается и применяется
при следующей теме с питомцем. Контракт BINDING_CONTRACT.md уточнён; PCK требуется пересобрать
перед установкой в приложение.
Ближайшие разумные задачи
- Перед публичной поставкой получить письменное разрешение на кириллическую модификацию шрифта либо заменить её на лицензированную альтернативу; для внутренней установки это не блокирует QA.
- При изменениях host-контракта выполнить документированную миграцию и повторить runtime QA.
- Для каждой новой темы начать с
example, добавить её собственныйsource/README.mdи документировать отличия/лицензии. - После визуальных изменений сравнивать preview и реальный Exchanger на одинаковом
720×1280.
Старт для нового ИИ-агента
- Полностью прочитать корневой
AGENTS.md. - Выполнить agentmemory recall с project id
exchanger-theme-dlc-builderпо текущей задаче. - Проверить
git status, если папка уже подключена к Git; на момент создания handoff локальная папка могла ещё не быть инициализирована как отдельный репозиторий. - Прочитать профильный документ и
contracts/screen_bindings.v2.jsonдо изменения сцен. - Активировать конкретную тему и работать только в её
source//package/. - Завершить contract check, validator, preview smoke, визуальный QA и сохранение memory.
Ziva-Godot запрещён. Для Editor используется только godot-ai.