doctor и по-прежнему
устанавливать, загружать, обновлять и удалять Plugin из поддерживаемых источников.
Для более общей карты средств запуска тестов см. Тестирование. Для ключей live-провайдеров
и наборов тестов, обращающихся к сети, см. Live-тестирование.
Что мы защищаем
Тесты обновлений и Plugin защищают эти контракты:- Архив пакета полон, содержит допустимый
dist/postinstall-inventory.jsonи не зависит от распакованных файлов репозитория. - Пользователь может перейти со старого опубликованного пакета на пакет-кандидат без потери конфигурации, агентов, сеансов, рабочих пространств, allowlist-списков Plugin или конфигурации каналов.
openclaw doctor --fix --non-interactiveвладеет путями очистки и исправления legacy-состояния. Запуск не должен обрастать скрытыми миграциями совместимости для устаревшего состояния Plugin.- Установки Plugin работают из локальных каталогов, git-репозиториев, npm-пакетов и пути реестра ClawHub.
- npm-зависимости Plugin устанавливаются в один управляемый npm-проект на Plugin, сканируются до доверия и удаляются через npm при удалении, чтобы поднятые зависимости не оставались.
- Обновление Plugin стабильно, когда ничего не изменилось: записи установки, разрешенный источник, схема установленных зависимостей и включенное состояние остаются неизменными.
Локальное доказательство во время разработки
Начинайте узко:release:check запускает проверки расхождения конфигурации/документации/API, записывает dist-инвентарь
пакета, запускает npm pack --dry-run, отклоняет запрещенные упакованные файлы, устанавливает
архив во временный префикс, запускает postinstall и проверяет smoke-тестами entrypoint-ы
встроенных каналов.
Docker-каналы
Docker-каналы являются доказательством на уровне продукта. Они устанавливают или обновляют реальный пакет внутри Linux-контейнеров и проверяют поведение через команды CLI, запуск Gateway, HTTP-зонды, статус RPC и состояние файловой системы. Используйте сфокусированные каналы во время итераций:test:docker:pluginsпроверяет smoke-тест установки Plugin, установки из локальной папки, поведение пропуска обновления локальной папки, локальные папки с предварительно установленными зависимостями, установки пакетовfile:, git-установки с выполнением CLI, обновления движущейся git-ссылки, установки из npm-реестра с поднятыми транзитивными зависимостями, no-op обновления npm, отклонение некорректных метаданных npm-пакета, установки из локальной фикстуры ClawHub и no-op обновления, поведение обновления marketplace, а также включение/инспекцию Claude-бандла. УстановитеOPENCLAW_PLUGINS_E2E_CLAWHUB=0, чтобы держать блок ClawHub герметичным/офлайн.test:docker:plugin-lifecycle-matrixустанавливает пакет-кандидат в пустой контейнер, прогоняет npm Plugin через установку, инспекцию, отключение, включение, явное обновление, явный откат версии и удаление после удаления кода Plugin. Он логирует метрики RSS и CPU для каждой фазы.test:docker:plugin-updateпроверяет, что неизмененный установленный Plugin не переустанавливается и не теряет метаданные установки во времяopenclaw plugins update.test:docker:upgrade-survivorустанавливает архив-кандидат поверх загрязненной фикстуры старого пользователя, запускает обновление пакета плюс неинтерактивный doctor, затем запускает loopback Gateway и проверяет сохранение состояния.test:docker:published-upgrade-survivorсначала устанавливает опубликованную базовую версию, настраивает ее через встроенный рецептopenclaw config set, обновляет ее до архива-кандидата, запускает doctor, проверяет legacy-очистку, запускает Gateway и зондирует/healthz,/readyzи статус RPC.test:docker:update-restart-authустанавливает пакет-кандидат, запускает управляемый Gateway с token-auth, снимает env аутентификации gateway вызывающей стороны дляopenclaw update --yes --jsonи требует, чтобы команда обновления кандидата перезапустила Gateway перед обычными зондами.test:docker:update-migration— опубликованный update-канал с большим объемом очистки. Он начинает с настроенного пользовательского состояния в стиле Discord/Telegram, запускает baseline doctor, чтобы настроенные зависимости Plugin получили шанс материализоваться, подсевает legacy-мусор зависимостей Plugin для настроенного упакованного Plugin, обновляет до архива-кандидата и требует, чтобы post-update doctor удалил legacy корни зависимостей.
base, feishu-channel, bootstrap-persona,
plugin-deps-cleanup, configured-plugin-installs,
stale-source-plugin-shadow, tilde-log-path и versioned-runtime-deps. В агрегированных запусках
OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS=reported-issues раскрывается во все сценарии
по форме зарегистрированных issues, включая миграцию установки configured-plugin.
Полная миграция обновления намеренно отделена от Full Release CI. Используйте
ручной workflow Update Migration, когда релизный вопрос звучит так: «может ли каждый
опубликованный стабильный релиз начиная с 2026.4.23 обновиться до этого кандидата и
очистить мусор зависимостей Plugin?»:
Package Acceptance
Package Acceptance — это нативный для GitHub пакетный gate. Он разрешает один пакет-кандидат в архивpackage-under-test, записывает версию и SHA-256, затем
запускает переиспользуемые Docker E2E-каналы против именно этого архива. Ref harness
отделен от ref источника пакета, поэтому текущая тестовая логика может проверять
более старые доверенные релизы.
Источники кандидатов:
source=npm: проверитьopenclaw@beta,openclaw@latestили точную опубликованную версию.source=ref: упаковать доверенную ветку, тег или коммит с выбранным текущим harness.source=url: проверить публичный HTTPS-архив с обязательнымpackage_sha256. Этот путь отклоняет учетные данные URL, нестандартные HTTPS-порты, частные/внутренние имена хостов или DNS/IP-результаты, IP-пространство special-use и небезопасные redirects.source=trusted-url: проверить HTTPS-архив с обязательнымиpackage_sha256иtrusted_source_idпо maintainer-owned политике в.github/package-trusted-sources.json. Используйте это для enterprise/private зеркал вместо ослабленияsource=urlчерез input-level allow-private switch. Bearer auth, когда настроен политикой, использует фиксированный секретOPENCLAW_TRUSTED_PACKAGE_TOKEN.source=artifact: переиспользовать архив, загруженный другим запуском Actions.
source=artifact, построенный из
разрешенного release SHA. Для доказательства после публикации передайте
package_acceptance_package_spec=openclaw@YYYY.M.PATCH, чтобы та же матрица обновлений
целилась вместо этого в отгруженный npm-пакет.
Release checks вызывают Package Acceptance с набором package/update/restart/plugin:
last-stable-4 разрешается в четыре последних стабильных npm-опубликованных релиза OpenClaw.
Release package acceptance закрепляет 2026.4.23 как первую границу совместимости plugin-update,
2026.5.2 как границу churn архитектуры Plugin, а
2026.4.15 как более старую baseline-версию published-update из 2026.4.1x; resolver
дедуплицирует pins, которые уже входят в последние четыре. Для исчерпывающего покрытия
миграции опубликованных обновлений используйте all-since-2026.4.23 в отдельном workflow Update
Migration вместо Full Release CI. release-history остается
доступным для ручной более широкой выборки, когда вам также нужна legacy-якорная дата
до этой границы.
Когда выбрано несколько baseline-версий published-upgrade survivor, переиспользуемый
Docker workflow шардирует каждую baseline-версию в отдельную целевую runner job. Каждый
baseline shard все еще запускает выбранный набор сценариев, но логи и артефакты остаются
по baseline, а wall time ограничивается самым медленным shard вместо одной большой
последовательной job.
Запустите профиль пакета вручную при проверке кандидата перед релизом:
suite_profile=product, когда релизный вопрос включает MCP-каналы,
очистку cron/subagent, веб-поиск OpenAI или OpenWebUI. Используйте suite_profile=full
только когда вам нужно полное Docker-покрытие release-path.
Стандарт релиза
Для релиз-кандидатов стандартный стек доказательств таков:pnpm check:changedиpnpm test:changedдля регрессий на уровне исходного кода.pnpm release:checkдля целостности артефакта пакета.- Профиль Package Acceptance
packageили пользовательские package-каналы release-check для контрактов install/update/restart/plugin. - Кросс-OS release checks для OS-специфичного установщика, onboarding и поведения платформы.
- Live-наборы только когда измененная поверхность затрагивает поведение провайдера или hosted-service.
Legacy-совместимость
Послабления совместимости узкие и ограничены по времени:- Пакеты до
2026.4.25включительно, включая2026.4.25-beta.*, могут терпимо относиться к уже отгруженным пробелам в метаданных пакета в Package Acceptance. - Опубликованный пакет
2026.4.26может предупреждать о локальных build metadata stamp файлах, которые уже были отгружены. - Более поздние пакеты должны удовлетворять современным контрактам. Те же пробелы приводят к сбою вместо предупреждения или пропуска.
upgrade-survivor, published-upgrade-survivor или
update-restart-auth, когда команда обновления владеет перезапуском.
Добавление покрытия
При изменении поведения обновления или Plugin добавляйте покрытие на самом низком слое, который может отказать по правильной причине:- Чистая логика путей или метаданных: модульный тест рядом с исходным кодом.
- Поведение инвентаря пакета или упакованных файлов: тест
package-dist-inventoryили проверка tarball. - Поведение установки/обновления CLI: проверка Docker lane или фикстура.
- Поведение миграции опубликованного релиза: сценарий
published-upgrade-survivor. - Поведение перезапуска, принадлежащее обновлению:
update-restart-auth. - Поведение источника реестра/пакета: фикстура
test:docker:pluginsили сервер фикстур ClawHub. - Поведение компоновки зависимостей или очистки: проверяйте как выполнение в runtime, так и границу файловой системы. npm-зависимости могут быть подняты внутрь управляемого npm-проекта Plugin, поэтому тесты должны доказывать, что сканируется/очищается именно этот проект, а не предполагать только дерево
node_modules, локальное для пакета Plugin.
Разбор сбоев
Начните с идентичности артефакта:- Сводка Package Acceptance
resolve_package: источник, версия, SHA-256 и имя артефакта. - Docker-артефакты:
.artifacts/docker-tests/**/summary.json,failures.json, логи lane и команды повторного запуска. - Сводка upgrade survivor:
.artifacts/upgrade-survivor/summary.json, включая базовую версию, версию-кандидат, сценарий, тайминги фаз и шаги рецепта.