Как внести вклад
Вклад принимается, и до открытия pull request стоит знать три вещи: соглашение, инструменты и то, что сейчас помогает больше всего.
Соглашение (CLA)
Сегодня у каждой строки один правообладатель, и это держит двери открытыми: починить дефект лицензии, выпустить коммерческую редакцию, сделать двойное лицензирование, передать проект фонду. Первый же вклад без соглашения их закрывает — перелицензировать чужой код нельзя, а найти автора через два года, чтобы спросить, на практике невозможно.
Соглашение намеренно узкое: все права на свой вклад вы сохраняете. Вы даёте лицензию, а не передаёте собственность.
Подпись — строка, которую вы добавляете сами, в своём же pull request, в .github/cla-signatures.json. Коммит аутентифицирован вашей учётной записью GitHub, датирован и хранится в истории — ровно то, чем должна быть запись о согласии. Подпись проверяет гейт на каждом pull request; бота с правом записи в репозиторий нет.
Инструменты
Node 22 или новее и Yarn 1.22 Classic — именно эта версия, потому что lock-файл совместим только с ней. CI гоняет на Node 22 и 24.
Это правило монорепозитория, а не пакета. Установка Granularity в ваше приложение работает с npm, pnpm, yarn и bun — страница установки показывает все четыре. Путаница между этими двумя вещами стоит полдня, поэтому она проговаривается прямо. Установка
Порядок работы
- Ветка от
main - правка и тесты к ней
- локально прогнать линт, тесты и сборку
- открыть pull request в
main— CI повторит все три шага для пакета и витрины
Стиль
ESLint с @antfu/eslint-config, типы порождает vue-tsc на сборке и ни одной ошибки не допускает, коммиты — Conventional Commits: последнее рекомендация, а не правило, и она облегчает сборку журнала изменений.
Релизы
Версия поднимается в манифесте пакета, на main уходит тег vX.Y.Z, и тег запускает публикацию в npm с provenance. Журнал изменений выпускаемого пакета обновляется тем же pull request — общего журнала в корне нет, у каждого пакета свой.
Под какой лицензией окажется вклад
Apache-2.0 с оговоркой об этичном использовании. Оговорка добавляет ограничение по области применения поверх Apache-2.0, что делает проект source-available, а не OSI-совместимым; на вклад она распространяется ровно так же, как на остальной код.
Что сейчас помогает больше всего
Не список пожеланий: это дыры, в которые портал упёрся, пока строился, и каждую из них сегодня видно на сайте.
- Клавиатурный контракт по компонентам описывает 48 из 108 позиций каталога и есть в 3 пакетах из 8. На страницах остальных секции «Доступность» просто нет: портал не пишет её за автора.где это видно
- Английская документация машинная и ждёт носителя языка. Каждая такая страница говорит об этом сверху.где это видно
- У компонентов нет метаданных статуса — stable, new, experimental, — поэтому в каталоге нет фильтра по нему. Завести таблицу статусов на сайте вместо библиотеки было бы неверной починкой.где это видно
- Кнопки сортировки в шапке
GrDataTable— 52×16 и 70×16 при минимуме 24×24 из WCAG 2.5.8. На телефоне в них трудно попасть.где это видно
Расскажите, что используете
Бейдж для вашего README. Тёмный вариант — /badge/built-with-dark.svg, рядом ещё два: version.svg и components.svg, и их числа считаются на каждой сборке, а не набираются руками, — в вашем файле они не устареют.
[](https://granularity.tech)Живой компонент помещается и в статью: кнопка «Встроить» под любым примером на странице компонента копирует готовый <iframe>, а ссылка на страницу компонента, вставленная в Notion, Ghost или WordPress, сама превращается в то же демо.
Правила поведения
Файла с кодексом поведения пока нет, и делать вид, что он есть, хуже, чем сказать прямо. Этическая оговорка в лицензии — про другое: она регулирует использование продукта, а не то, как люди разговаривают друг с другом.