Публикация сета
Сет публикуется из редактора сета. Раздел Поделиться с другими пользователями b4 находится внизу вкладки Импорт/Экспорт и показывается, пока включён хаб сообщества. Он готовит сет как общий сет, JSON-форму, которую можно передать напрямую, и публикует ту же форму в хаб.

Подготовка
Подготовить общий сет собирает общий сет из состояния редактора и показывает:
- Проверьте перед отправкой: домены или адреса, которые выглядят частными для этой сети, пины, которые будут использовать все импортировавшие, DoH-резолвер вне публичного списка, отсутствующий или непригодный файл payload, блокирующий сет с совпадением по шаблону, число доменов, адресов или ASN сверх того, что вмещает общий сет.
- Не вошло в общий сет: каждая отброшенная настройка и причина. Маршрутизация в прокси или интерфейс, фильтры устройств, эскалация и адрес DNS-сервера отбрасываются всегда; полный список - в разделе Что покидает роутер.
- Нужную версию b4 и число вложенных файлов payload.
- JSON с кнопками Копировать и Скачать.
Для публикации и для передачи файлом используется один и тот же общий сет.
Публиковать сет лучше с теми целями, на которых он проверялся. Домен, который сет перечисляет, но на котором не проверялся, собирает отчёты «не работает».
Публикация
Опубликовать в хабе отправляет сохранённую версию сета. Новый сет сначала нужно сохранить; несохранённые изменения не публикуются, и кнопка сообщает об этом. Заголовок публикации - имя сета; своего описания роутер не отправляет. Модератор может добавить его на хабе, и тогда оно появляется на карточке и в разделе Подробнее.
Хаб выполняет проверки импорта, отклоняет сет без целей, сохраняет файлы payload по хешу и отвечает идентификатором и версией. Сет попадает в очередь модерации со статусом на модерации. Другие пользователи и этот роутер видят его в каталоге после того, как модератор одобрит его, а следующий каталог будет собран и синхронизирован. Раздел показывает идентификатор и статус и предлагает Открыть в Сообществе; пока сета нет в локальном каталоге, это открывает диалог подробностей с пометкой об этом.
Сет теперь связан с сетом на хабе так же, как применённый: карточка на странице Сеты показывает Сет сообщества, а раздел «Поделиться» называет сет на хабе и версию, с которыми он связан.
Версии
Повторная публикация связанного сета после изменения стратегии создаёт следующую версию того же сета на хабе. Кнопка называется Опубликовать как новую версию. Каталог хранит только новейшую одобренную версию; роутеры, применившие предыдущую, видят на карточке Обновить до версии N.
Хаб присоединяет публикацию к существующему сету того же автора, когда:
- сет связан с сетом на хабе, опубликованным под авторским ключом этого роутера;
- сет не связан ни с чем или связан с сетом другого автора, а у этого автора уже есть сет с теми же целями или с тем же названием и хотя бы одной общей целью.
Иначе хаб создаёт новый сет. Если опубликованный сет начинался как сет сообщества другого автора, хаб записывает, какой именно.
Публикация, у которой и стратегия, и цели совпадают с версией, уже имеющейся у хаба, чьего бы автора она ни была, не сохраняется. Это относится и к версии, которая ещё ждёт модератора, и к скрытой модератором версии; пропускаются только отклонённые. Хаб называет существующий сет и засчитывает отправку как отчёт «работает» для него, поэтому названный сет не всегда есть в каталоге.
Модерация
Каждая версия ждёт модератора. Модератор видит сет в том виде, в каком он будет импортирован, одобряет его, отклоняет или скрывает позже и читает жалобы на него. Отклонённая или скрытая версия исчезает из каталога при следующей сборке. Роутеры, которые её применили, сохраняют её.
Уведомления о решении нет. Открыть в Сообществе сообщает, что сета нет в каталоге, пока он не одобрен и не синхронизирован.
Хаб принимает от одного роутера ограниченное число публикаций в сутки. Лимит задаёт оператор хаба; публикация сверх лимита отклоняется с сообщением, называющим лимит и время его сброса.
Авторский ключ
Каждая запись, которую роутер отправляет в хаб, подписана его авторским ключом. Ключ создаётся при первом использовании и хранится как .hub/identity.json в каталоге конфигурации. Хаб знает роутер по этому ключу: опубликованные им сеты принадлежат ему, его отчёты считаются за один роутер, модераторы могут отметить его доверенным, что снимает с него суточные лимиты, или заблокировать.
Автором сета в каталоге указана метка автора, а не идентификатор ключа: короткий псевдоним, который хаб выводит из авторского ключа со своим секретом. Все сеты, опубликованные под одним ключом, несут одну метку, сам ключ не публикуется, а метка, построенная одним хабом, не совпадает с меткой, которую для того же ключа построит другой.
Настройки, Интеграции, Хаб сообщества, Авторский ключ показывает идентификатор ключа и два действия:
- Показать код восстановления показывает код, из которого ключ восстанавливается. Любой, у кого есть код, может публиковать сеты и отправлять отчёты от имени этого автора.
- Восстановить по коду заменяет ключ этого роутера тем, который описывает код. Сеты, опубликованные под этим ключом, после этого можно обновлять с этого роутера, а отчёты несут возраст этого ключа на хабе.
Бэкап из Настройки, Система, Бэкап каталог .hub/ не включает. Роутер, восстановленный из бэкапа, начинает с нового ключа, а новый ключ несёт уменьшенный вес, который хаб даёт ключам моложе недели. Перенести авторский ключ на другой роутер можно кодом восстановления.