feat(skills): ship ue-design-skills bundle, licensing and delivery gate

Phase 0 of the handoff plan, as a marketplace rather than a flat skills/
directory. Content moved out of the LyraResearch archive and depersonalised:
addresses stay in the archive, recipes ship.

- plugins/ue-design-skills: 17 skills, 232 failure-mode entries, each with the
  six required fields; catalog.json as the harness-neutral source of truth and
  .claude-plugin/ as one adapter over it.
- _gate: 16 rules, one poisoned fixture per rule, plus surface coverage so a
  declared file cannot silently miss the line rules.
- ADR-0002 (harness-neutral bundle behind a marketplace) and ADR-0003 (split
  licensing: CC BY-ND 4.0 prose, Apache-2.0 code and metadata).
- LICENSE files at both levels, CONTRIBUTING.md, docs/licensing-options.md as
  the material the licence decision grew from.

Verified: gate.py 0 violations; test_gate.py 16/16 rules redden on their
fixtures with a clean baseline and 2 root files reaching the line rules.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-05 23:48:55 +07:00
parent 80ea7b03a9
commit ecd87ac96d
67 changed files with 21630 additions and 0 deletions
+236
View File
@@ -0,0 +1,236 @@
# Выбор лицензии: варианты и что они означают
**Статус:** ~~решение не принято~~ — **решено 2026-09-03**,
[ADR-0003](architecture/decisions/0003-split-licensing-prose-and-code.md): проза
бандла CC BY-ND 4.0, код и метаданные Apache-2.0, правообладатель — MagentaDolphin.
Документ сохраняется как материал, из которого решение выросло: §§1–6 ниже описывают
состояние **до** выбора, включая отсутствовавший тогда `LICENSE`. Читать как разбор
вариантов, не как состояние репозитория.
**Открытый вопрос:** №2 из `handoff.md` — закрыт.
**Это не юридическое заключение.** Автор документа не имеет квалификации его дать.
---
## 0. Состояние на сейчас
| Что | Значение |
|---|---|
| Файл `LICENSE` в репозитории | отсутствует **[изм]** |
| `README.md:25` | «TBD (планируется MIT)» **[изм]** |
| `plugin.json` → `author.name` | `"ue-design-skills"` — заглушка, автором значится сам бандл **[изм]** |
| Поле `license` в манифестах | отсутствует; удалено намеренно (ADR-0002) **[изм]** |
| Правообладатель | **не определён** |
Лицензируемый объект сегодня — бандл `plugins/ue-design-skills`: ~19 000 строк
авторской прозы, 232 записи с рецептами обнаружения, 335 блоков кода (в
подавляющем большинстве — команды поиска и публичный API движка), плюс скрипт
гейта `_gate/` на Python.
Через фазу 1 к этому добавится **C++-модуль UE и MCP-сервер**. Это меняет расчёт
и разобрано в §6.
---
## 1. Требования владельца, переведённые в лицензионные термины
Сформулировано владельцем:
> Свободное использование студиями · упоминание имени, в том числе в титрах ·
> никакого форка в чужие продукты без разрешения, тем более коммерческие ·
> никаких претензий на игры и код, созданные с помощью инструмента.
В терминах, которыми оперируют лицензии:
| № | Требование | Лицензионный термин |
|---|---|---|
| **R1** | студии, включая коммерческие, пользуются свободно | грант на **use**, без ограничения по коммерческому характеру |
| **R2** | имя указано, в том числе в титрах игры | **attribution**, причём с триггером на *использование*, а не на распространение |
| **R3** | нельзя форкать в свой продукт без разрешения | запрет на **Share Adapted Material** / **redistribution** |
| **R4** | претензий на созданное с помощью инструмента нет | явная **output clause** |
---
## 2. Главное различие, вокруг которого всё вращается
**Использование — не распространение.** Почти все лицензионные обязанности
привязаны ко второму.
- Студия читает скилы, проектирует по ним систему, выпускает игру. **Ничего
вашего наружу не ушло.** Ни одна лицензия здесь ничего не требует.
- Студия берёт бандл, переписывает под себя и публикует как свой продукт. **Вот
здесь** лицензия работает, и здесь живёт R3.
Отсюда следствие, которое важно принять до выбора строки в таблице:
> **R1 и R3 совместимы** — они про разные действия. Свободно пользоваться и не
> иметь права перевыпускать — нормальная, часто встречающаяся конструкция.
>
> **R2 в лицензионной форме недостижим.** Ни одна из существующих лицензий не
> обязывает упоминать автора в титрах игры, при создании которой инструмент
> просто использовали. Обязанность атрибуции срабатывает при распространении
> копии, а копия здесь не распространяется. **[выв]**
Это не придирка к формулировке. Это разница между «в лицензии написано» и «есть
механизм, который заставит».
---
## 3. Требование R2: чем его закрывают на практике
Раз лицензия не даёт, перечислю то, что даёт — по убыванию силы.
| Механизм | Как работает | Чего стоит |
|---|---|---|
| **Договор** | студия подписывает условия использования, где атрибуция в титрах — обязательство | требует переговоров с каждой студией; убивает «скачал и работай» |
| **Двойное лицензирование** | бесплатная лицензия с ограничением + платная/свободная по запросу, в обмен на атрибуцию | рабочая схема, но это уже бизнес-процесс, а не файл в репозитории |
| **Пункт-рекомендация в README** | «если это помогло — упомяните в титрах» | ноль принуждения, ненулевой эффект; студии этим пользуются добровольно чаще, чем кажется |
| **Историческая advertising clause** (BSD-4-Clause) | требовала упоминания «во всех рекламных материалах» | пункт признан вредным и отозван Беркли; вызывает несовместимость и отказ юротделов |
| **Атрибуция при распространении** (CC BY / Apache NOTICE) | обязательна, но только когда копию передают дальше | закрывает форки и маркетплейсы, **не** закрывает титры игры |
Практический вывод: атрибуция в титрах достижима как **норма сообщества плюс
условие для тех, кто просит расширенных прав**, а не как строка лицензии. **[выв]**
---
## 4. Кандидаты против четырёх требований
Легенда: ✅ даёт · ⚠️ даёт частично · ❌ не даёт или противоречит.
| Лицензия | R1 свободное использование | R2 титры | R3 запрет форка | R4 выход свободен | Что это на самом деле означает |
|---|---|---|---|---|---|
| **MIT** | ✅ | ❌ | ❌ | ✅ | Форк в коммерческий продукт разрешён явно. Прямо противоречит R3 |
| **Apache-2.0** | ✅ | ⚠️ `NOTICE` при распространении | ❌ | ✅ | То же, что MIT, плюс патентный грант и пометки об изменениях. R3 не закрывает |
| **CC BY 4.0** | ✅ | ⚠️ при распространении | ❌ | ✅ | Сделана для текста, атрибуция реальна — но производные разрешены, включая коммерческие |
| **CC BY-SA 4.0** | ✅ | ⚠️ | ⚠️ форк разрешён, но обязан остаться открытым под SA | ✅ | Не запрещает форк, а заражает его. Для внутренних вики студий — стоп-сигнал юротдела |
| **CC BY-ND 4.0** | ✅ | ⚠️ при распространении | ✅ | ✅ | **Ближайшее совпадение по смыслу.** В версии 4.0 адаптации создавать *можно*, нельзя **Share** их. Студия правит под себя внутри — законно; публикует свою версию — нет |
| **CC BY-NC 4.0** | ❌ | ⚠️ | ⚠️ | ✅ | Запрещает коммерческое использование — отсекает ровно ту аудиторию, которая нужна по R1 |
| **PolyForm Noncommercial** | ❌ | ❌ | ✅ | ✅ | Та же ошибка, что у NC: блокирует коммерческие студии |
| **PolyForm Internal Use** | ✅ | ❌ | ✅ | ✅ | «Пользуйтесь для своих нужд, но не поставляйте другим». Точно ложится на R1+R3 |
| **PolyForm Shield** | ✅ | ❌ | ⚠️ запрещает только конкуренцию с автором | ✅ | Широкое принятие, блокируются лишь прямые конкуренты. Мягче, чем R3 |
| **CC0 / public domain** | ✅ | ❌ | ❌ | ✅ | Отказ от всего, включая имя |
| **Проприетарная / своя** | по вашему усмотрению | можно вписать | можно вписать | можно вписать | Единственный способ получить ровно R1–R4. Цена — в §5 |
Замечания к таблице:
- **CC для кода использовать не следует** — это позиция самой Creative Commons.
Если выбор уходит в CC-семейство, гейт и будущий C++-модуль всё равно требуют
отдельной строки.
- **PolyForm-лицензии не одобрены OSI** — все накладывают ограничение по области
использования. То же верно для всех CC, кроме CC0/BY/BY-SA.
- **CC BY-ND 4.0 — не то же самое, что ND 3.0.** В 3.0 создание адаптации было
за пределами гранта; в 4.0 адаптации явно разрешены, пока их не публикуют.
Общая страница CC об этом до сих пор пишет по-старому, авторитетен здесь текст
legal code, а не сводка.
---
## 5. Три реалистичные комбинации
### Вариант A — CC BY-ND 4.0 на тексты, Apache-2.0 на код
Что получает пользователь: читает, применяет, правит под себя внутри студии;
опубликовать свою версию бандла не может; код гейта и будущего плагина берёт
свободно.
- **R1** ✅ · **R3** ✅ · **R4** ✅ · **R2** — только атрибуция при
распространении, титры остаются просьбой в README.
- Готовые тексты, ничего сочинять не нужно.
- Минус: нужно объяснять границу «текст/код» в каждом обсуждении. Минус второй:
ND-лицензия закрывает и *дружественный* вклад — исправление в вашем тексте
нельзя опубликовать даже как pull request-форк.
### Вариант B — PolyForm Internal Use на бандл, Apache-2.0 на код
Формулировка «пользуйтесь для внутренних операций своей компании, но не
поставляйте другим» ближе к вашей интонации, чем язык авторского права CC.
- **R1** ✅ · **R3** ✅ · **R4** ✅ · **R2** ❌ полностью.
- Минус: лицензия малоизвестна, юротдел студии её читает целиком, а незнакомая
лицензия чаще приводит к отказу, чем к вопросу. **[гип]**
### Вариант C — своя лицензия из четырёх пунктов
Ровно R1–R4, включая пункт про титры и пункт «на созданное с помощью инструмента
претензий нет».
- **R1–R4** ✅ на бумаге.
- Минус, который перевешивает: **каждая студия обязана провести юридическую
проверку**, а нестандартная лицензия — типовая причина автоматического отказа
во внутренних политиках. Свободное распространение по R1 упирается ровно в это.
Плюс текст должен написать юрист, иначе неоднозначность будет толковаться не в
вашу пользу.
---
## 6. Что изменится в фазе 1 и почему это важно решить сейчас
Сегодня продукт — текст. После фазы 1 в том же репозитории появится **C++-модуль
UE и MCP-сервер**, то есть код, который студия компилирует внутрь своего
редактора.
Отсюда два следствия **[выв]**:
1. **Ограничительная лицензия на исполняемый код бьёт по принятию сильнее, чем
на текст.** Юротдел, спокойно пропускающий документ с ограничениями, обычно
гораздо строже к коду, попадающему в сборку.
2. **Менять лицензию задним числом нельзя** — те, кто уже взял по прежним
условиям, остаются на них. Поэтому раздельная схема «код свободный, тексты
ограничены» выгоднее выбрать сразу, чем переигрывать после первого релиза.
---
## 7. Правообладатель
Любой из вариантов начинается со строки `Copyright (c) 2026 <ПРАВООБЛАДАТЕЛЬ>`.
| Форма | Когда уместна |
|---|---|
| Настоящее имя физлица | автор один; самая простая и внятная форма |
| Псевдоним / handle | если публичность имени нежелательна; авторство труднее доказывать при споре |
| Юрлицо | если работа сделана в рамках компании — тогда выбор может быть и не ваш |
| `<project> contributors` | принято при нескольких авторах; сейчас это описание будущего, а не факт |
Имя правообладателя не выводится из содержимого репозитория и не может быть
подставлено по умолчанию. Требование R2 — про **это** имя, поэтому пока оно не
названо, R2 не реализуемо ни одним из механизмов §3.
---
## 8. Слой, который выбором из таблицы не закрывается
Содержание бандла выведено из разбора Epic Lyra, распространяемого по UE EULA.
Измерено: в поставке нет кода Epic, нет адресов вида `Файл.ext:строка`, нет имён
с префиксом донора вне блоков `Provenance` (правило гейта P03, ноль нарушений).
Присутствуют публичные имена API движка — `UPROPERTY`, `TArray`, `FGameplayTag` и
подобные — и собственные наблюдения об архитектуре. **[изм]**
Это существенно снижает риск, но **не является юридическим заключением** и не
заменяет его. Если релиз публичный — вопрос адресуется человеку с квалификацией.
Обезличивание, уже сделанное, принималось ради качества продукта; то, что оно
попутно уменьшает этот риск, — побочный эффект, а не доказательство. **[гип]**
---
## 9. Что требуется от владельца, чтобы закрыть вопрос
1. **Правообладатель** — имя в строку copyright (§7).
2. **Комбинация** — A, B, C или иная (§5).
3. **Форма требования о титрах** — просьба в README, условие двойного
лицензирования, или снятие требования (§3).
После этого механическая часть — `LICENSE`, поле `license` в `catalog.json` и
`plugin.json`, раздел в `README.md`, правило гейта на присутствие файла — делается
за один заход.
---
## Источники
- [PolyForm Project — исходные тексты лицензий](https://github.com/polyformproject/polyform-licenses)
- [PolyForm Noncommercial License 1.0.0](https://polyformproject.org/licenses/noncommercial/1.0.0)
- [License Round-Up — разбор семейства PolyForm](https://writing.kemitchell.com/2021/06/20/License-Round-Up)
- [CC BY-ND 4.0 — deed](https://creativecommons.org/licenses/by-nd/4.0/deed.en)
- [CC 4.0 — обращение с адаптациями (wiki)](https://wiki.creativecommons.org/wiki/4.0/Treatment_of_adaptations)
- [CC — о лицензиях](https://creativecommons.org/share-your-work/cclicenses/)
- [CC FAQ](https://creativecommons.org/faq/)