[enhancement] Безопасный pipeline ассетов: исходники отдельно от generated, воспроизводимая сборка и ясные legacy-границы #92

Closed
opened 2026-10-30 10:30:19 +00:00 by chexit · 1 comment
Owner

🤖 Filed by Codex, AI-агент Владимира (chexit).

Архитектурный проход по 76f680eba64b64eb28435e71ce9f22a84b0e5da1.

Наблюдение

tools/gen_models.py объединяет геометрию, текстуры, иконки, локализацию, registry и data-generation. main() удаляет целиком свои поддеревья assets/airdef/{blockstates,items,lang,models,textures} и весь data/, затем создаёт заново. В текущем полностью генерируемом наборе это рабочий подход; при добавлении вручную нарисованных иконок/моделей в эти пути они будут стираться следующим запуском. Новые арт-задачи уже делают это практическим ограничением.

legacy/ документирован как старый вариант мода, активных ссылок сборки на него не найдено. Это повод обозначить его статус, а не автоматически удалять полезную историю. В HD-документации исторические рабочие заметки также смешаны с актуальным контрактом.

Сделать

  1. Source assets/авторские модели и generated output имеют разные явно объявленные каталоги. Генератор удаляет только файлы из собственного manifest; не выполняет blanket rmtree для смешанного дерева.
  2. Разделить генераторы моделей, иконок и реестров по ответственности с общей библиотекой/каталогом. Писать сначала во временный staging, валидировать ссылки/JSON/размеры и только затем заменять output.
  3. Детерминированная regeneration и проверка diff: одинаковые исходники дают одинаковые outputs, отсутствующий ресурс останавливает сборку понятной ошибкой.
  4. Короткая карта репозитория: active runtime, generated, tests/tools, archived reference. Сохранить legacy с архивной пометкой/обоснованием либо вынести после проверки необходимости. Текущие API/порядок сборки отделить от журнала изменений.

Приёмка

Авторская иконка переживает regeneration; посторонний файл не удаляется; авария генератора оставляет предыдущий рабочий output. Чистый checkout восстанавливает generated набор без сетевых/платформенных сюрпризов. Не включать vanilla-ассеты. Связано с #55 и задачей новых иконок, не заменяет художественную переработку моделей.

Общий порядок и зависимости: архитектурная дорожная карта.

🤖 Filed by Codex, AI-агент Владимира (chexit). Архитектурный проход по `76f680eba64b64eb28435e71ce9f22a84b0e5da1`. ### Наблюдение `tools/gen_models.py` объединяет геометрию, текстуры, иконки, локализацию, registry и data-generation. `main()` удаляет целиком свои поддеревья `assets/airdef/{blockstates,items,lang,models,textures}` и весь `data/`, затем создаёт заново. В текущем полностью генерируемом наборе это рабочий подход; при добавлении вручную нарисованных иконок/моделей в эти пути они будут стираться следующим запуском. Новые арт-задачи уже делают это практическим ограничением. `legacy/` документирован как старый вариант мода, активных ссылок сборки на него не найдено. Это повод обозначить его статус, а не автоматически удалять полезную историю. В HD-документации исторические рабочие заметки также смешаны с актуальным контрактом. ### Сделать 1. Source assets/авторские модели и generated output имеют разные явно объявленные каталоги. Генератор удаляет только файлы из собственного manifest; не выполняет blanket rmtree для смешанного дерева. 2. Разделить генераторы моделей, иконок и реестров по ответственности с общей библиотекой/каталогом. Писать сначала во временный staging, валидировать ссылки/JSON/размеры и только затем заменять output. 3. Детерминированная regeneration и проверка diff: одинаковые исходники дают одинаковые outputs, отсутствующий ресурс останавливает сборку понятной ошибкой. 4. Короткая карта репозитория: active runtime, generated, tests/tools, archived reference. Сохранить legacy с архивной пометкой/обоснованием либо вынести после проверки необходимости. Текущие API/порядок сборки отделить от журнала изменений. ### Приёмка Авторская иконка переживает regeneration; посторонний файл не удаляется; авария генератора оставляет предыдущий рабочий output. Чистый checkout восстанавливает generated набор без сетевых/платформенных сюрпризов. Не включать vanilla-ассеты. Связано с #55 и задачей новых иконок, не заменяет художественную переработку моделей. Общий порядок и зависимости: [архитектурная дорожная карта](https://gitea.maoniao.team/chexit/airdef/issues/103).
Author
Owner

🤖 Agent: Codex — работа Владимира (chexit).

Реализация: авторские overrides в airdef-mod/source-assets/assets/, генерация в staging, общая библиотека manifest/plan/transactional install, отдельные icon renderer и texture catalog. При проверке/ошибке записи старый output и manifest сохраняются; чужие изменённые файлы защищены.

8 тестов прошли, включая реальный PNG override, сохранение source, отклонение невалидного PNG без изменения рабочего набора, rollback и детерминизм. gen_models.py --check: различий нет; generated runtime bytes не менялись. Карта active/generated/archive обновлена. Сама геометрия и registry ещё находятся в gen_models; дальнейшее дробление возможно отдельно, художественная задача #115 этим не выполнена.

Issue оставлен открытым согласно просьбе автора.

🤖 Agent: Codex — работа Владимира (chexit). [Реализация](https://gitea.maoniao.team/chexit/airdef/commit/657d8f1): авторские overrides в `airdef-mod/source-assets/assets/`, генерация в staging, общая библиотека manifest/plan/transactional install, отдельные icon renderer и texture catalog. При проверке/ошибке записи старый output и manifest сохраняются; чужие изменённые файлы защищены. 8 тестов прошли, включая реальный PNG override, сохранение source, отклонение невалидного PNG без изменения рабочего набора, rollback и детерминизм. `gen_models.py --check`: различий нет; generated runtime bytes не менялись. Карта active/generated/archive обновлена. Сама геометрия и registry ещё находятся в gen_models; дальнейшее дробление возможно отдельно, художественная задача #115 этим не выполнена. Issue оставлен открытым согласно просьбе автора.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chexit/airdef#92