failproofai publish создаёт все три из файлов политик, создаёт release и загружает их.
1. Напишите политики
Начните с чего-то, что уже работает, а не с шаблона с пропусками:<name>.mjs и остановится — никакой сети, никакого git, ничего не опубликовано. Файл, который он создаёт — это одна политика, которая уже блокирует git push --force. Он не перезаписывает существующие файлы.
Политики используют тот же API, что и любая пользовательская политика. Два дополнительных поля важны для пакета:
defaultEnabled по умолчанию равен false, если вы его опустите. Обычная команда failproofai policies add включает только отмеченные вами политики — установка всех политик незнакомца без присмотра — это не решение, которое установщик должен принимать за своего пользователя.
Напишите столько файлов, сколько хотите; по одному на категорию читается хорошо. Каждый файл в директории, который регистрирует политики, будет собран в единый артефакт, который должен быть пакет.
2. Сначала попробуйте здесь
Перед тем, как это смогут увидеть другие, примените файл на этой машине:3. Опубликуйте
- Находит файлы политик здесь по содержимому — те, что импортируют
failproofaiи вызываютcustomPolicies.add— а не по имени файла, так что находитguards.mjsи игнорирует несвязанныйpolicies.mjs. Она не спускается в подпапки, так что тестовый fixture никогда не будет случайно собран. - Читает репо из
git remote get-url origin, в директории файла, а не в вашей, и определяет версию. - Находит ваши учётные данные:
GITHUB_TOKEN,GH_TOKENилиgh auth login. Нужны права release-write и ничего больше, никогда не выводится. - Создаёт репозиторий, если он не существует. Это происходит перед сборкой, так что пакет, отклонённый на следующем шаге, может оставить новый репозиторий без release в нём.
- Создаёт три ресурса, валидируя их собственными правилами загрузчика — тем же кодом, который решает, что может быть установлено на чужой машине — так что пакет, который никогда не сможет быть установлен, отказывается здесь, где вы ещё можете его исправить.
- Создаёт или переиспользует release и загружает, заменяя ресурсы с тем же именем.
Имена ресурсов фиксированы — это то, из чего CLI потребителя конструирует URL, без вызова API и без поиска.
Отклонено при сборке: id, который не
publisher/name, имя политики с /, политика, объявляющая alwaysOn, отсутствующее description, category или match, точка входа, которая ничего не регистрирует, и точка входа, которая импортирует локальные файлы.
Переопределите всё, что она решила:
--id устанавливает id пакета, когда он должен отличаться от репо, --tag устанавливает тег release, --notes заменяет сгенерированные примечания release — это то, откуда policies show --releases читает счётчики и коммит каждого release — --out выбирает, где писать ресурсы (по умолчанию dist-pack), и --dry-run создаёт их без публикации и не нужны учётные данные.
Теперь кто угодно может установить его с помощью failproofai policies add acme/support-agent. Смотрите пакеты политик для закрепления версии и взятия только части одного.
Выведите его на хаб политик
Добавьте темуfailproofai-policies к репозиторию на GitHub. Нет формы отправки и нет очереди одобрения: хаб политик сканер подхватывает репозиторий при следующем проходе. Тема только выводит его на рассмотрение — то, что выводит его в список — это release, чей манифест проверяется против его собственного SHA256SUMS и разбирается по тем же правилам, которые использует CLI, что точно производит failproofai publish.
Как определяется версия
Версия — это коммит, из которого вы публикуете — его короткий sha, двенадцать символов:a1b2c3d4e5f6. Нет ничего, что нужно выбирать и ничего, что нужно увеличивать, и версия точно называет то, откуда пришли байты, так что публикация одного и того же источника дважды даёт одну и ту же версию.
Она читается из дерева перед вами, никогда не из release репозитория, так что свежий клон и машина без интернета вычисляют один и тот же ответ без запроса GitHub о том, что было раньше.
Потому что версия называет коммит, этот коммит должен существовать. При терминале publish создаёт его для вас: инициализирует репозиторий, когда его нет, и коммитит изменённые файлы политик перед сборкой. Она отказывает вместо этого — называя --version как выход — когда работает без терминала (коммит, сделанный на CI runner, не существовал бы больше нигде), когда файлы кроме политик не закоммичены, или в checkout, который не имеет коммитов вообще. Тег на HEAD выигрывает над sha — тот, кто отметил v1.2.0, сказал, что это release.
Sha не имеет собственного упорядочения, так что используйте failproofai policies show <owner>/<repo> --releases чтобы увидеть, какой release был первым — новейший вверху.
Доставка новой версии
Закоммитьте изменение и запуститеfailproofai publish снова — новый коммит — это новая версия. Потребители запускают один и тот же failproofai policies add. Без терминала или с флагом выбора, они сохраняют подмножество, которое выбрали, и политика, которую они отключили, остаётся отключенной; при терминале без флага, выбиратель открывается с предварительно отмеченными вашими значениями по умолчанию и их ответ заменяет их выбор.
Изменение имени политики — это критическое изменение: машина, которая отключила её, отключает имя, которое больше не существует, и новое имя приходит с тем, что говорит defaultEnabled.
Чему доверяют ваши пользователи
SHA256SUMS находится в одном release с артефактом, так что доказывает, что байты — это те, что вы опубликовали — не то, кто вы. Тот, кто может писать в репозиторий, может писать оба файла. Защита ваших пользователей в том, что дайджест закреплён при установке, так что то, что вы отправили, не может измениться под ними после этого.
Публикуйте из репозитория, доступ на запись в который вы контролируете, и относитесь к выпуску пакета как к публикации пакета.
Репозиторий также должен быть публичным. Установки — это анонимный HTTPS без учётных данных, так что существующий приватный репо отказывается перед тем, как что-либо собирается или загружается, и один publish создаёт публичный по той же причине. --allow-private переопределяет это для кого-то, передающего три ресурса другим способом, и говорит ясно, что никакой policies add не сможет их достичь. Только release имеет значение: установки читают releases/download/<tag>/<asset> и никогда не трогают ваше git дерево.
Наблюдайте перед тем, как применять
Манифест может объявить"effect": "observe" — failproofai publish --effect observe это то, что это устанавливает. Те политики запускаются и их вердикты записываются и отбрасываются — ничего не блокируется. Это способ измерить новое правило против реального трафика перед тем, как оно может помешать чьей-либо работе.

