OpenClaw 사전 릴리스 플러그인 테스트은(는) 무엇을 하나요?
사용자가 플러그인 릴리스 확신, 플러그인 라이프사이클 스위프, 패키지-아티팩트 플러그인 증명, 또는 "릴리스 전에 무엇을 더 테스트해야 하나요?"라고 물을 때 이 스킬을 사용하세요. 이 스킬은 openclaw-testing을 보완합니다. 가장 저렴한 안전 러너를 선택하거나 실패한 레인을 디버깅할 때 해당 스킬도 함께 사용하세요.
목표
소스 테스트가 아닌 제품 표면으로서 플러그인 시스템을 증명합니다:
- 번들 플러그인 라이프사이클: 설치, 검사, 활성화, 비활성화, 제거
- 깨끗한
HOME에서의 패키지 아티팩트 동작 - doctor/fix/설정 검증 및 멱등성
- 설정 검색 및 설정 라운드트립
- 상태/로그 가시성 및 진단
- 플러그인 메타데이터 스냅샷을 사용한 게이트웨이 시작/부트스트랩
- 실제 외부 플러그인에 대한 공개 SDK 호환성
- 안전한 자격 증명이 존재할 때만 라이브-ish 제공자/채널 프로브
첫 번째 검사
OpenClaw 저장소 루트에서:
pnpm docs:list
git status --short --branch
pnpm changed:lanes --json
의존성 소유권 및 로컬 또는 원격 증명 선택을 위해 openclaw-testing을 따르세요.
러너 선택
다음 순서를 선호합니다:
- GitHub Package Acceptance — 설치 가능한 패키지 제품 증명용.
- 현재 전용 Linux 워커 — 필요한 의존성과 기능이 있을 때 신뢰할 수 있는 소스/패키지/Docker 증명용.
ci-build-artifacts-testbox.ymlTestbox — Docker/패키지 레인에 시드된dist,dist-runtime및 패키지 캐시가 필요할 때.ci-check-testbox.ymlTestbox — 소스 검사, 대상화된 Vitest, 패키지 경계 검사 또는 집중된 Docker 레인용.- 워크스테이션 대상 명령만 — 작은 포맷/정적/단위 프로브용.
오래된 스파스 작업 트리에서 긴 패키지 Docker 실행을 피하세요. Testbox 동기화가 수백 개의 변경된 파일을 보고하거나 패키지 입력을 삭제하기 시작하면 중지하고 현재 main에서 새 상자를 준비하거나 Package Acceptance로 전환하세요.
기존 기준
새로운 커버리지를 만들기 전에 다음을 실행하거나 확인하세요:
OPENCLAW_TESTBOX=1 pnpm check:changed
pnpm run test:extensions:package-boundary:canary
pnpm run test:extensions:package-boundary:compile
pnpm test:docker:plugins
OPENCLAW_PLUGINS_E2E_CLAWHUB=0 pnpm test:docker:plugins
pnpm test:docker:plugin-update
전체 번들 설치/제거 증명을 위해 패키지 스위프를 샤딩하세요:
OPENCLAW_BUNDLED_PLUGIN_SWEEP_TOTAL=8 \
OPENCLAW_BUNDLED_PLUGIN_SWEEP_INDEX=<0-7> \
pnpm test:docker:bundled-plugin-install-uninstall
이 예제는 선택한 패키지의 플러그인 인벤토리를 샤드 0-7로 분할합니다. 비공개 QA 플러그인은 패키지에 명시적으로 포함되지 않는 한 소스 모드 전용입니다.
신뢰 매트릭스
사전 릴리스 서명을 위해 이 매트릭스를 사용하세요. 통과/실패, 실행 URL/Testbox ID, 패키지 SHA/버전 및 건너뛴 라이브 사유를 기록하세요.
| 표면 | 증명 | 선호 러너 |
|---|---|---|
| 패키지 아티팩트 | suite_profile=package 또는 사용자 정의 레인이 있는 Package Acceptance | GitHub Actions |
| 번들 라이프사이클 | 샤딩된 test:docker:bundled-plugin-install-uninstall | Testbox 또는 릴리스 Docker |
| 외부 플러그인 | test:docker:plugins 및 plugins-offline | Testbox/package acceptance |
| 업데이트 무작동 | test:docker:plugin-update | Testbox/package acceptance |
| Doctor/fix | 시드된 잘못된 설정 + doctor --fix --non-interactive | 새 Docker/Testbox Harness |
| 설정 라운드트립 | config set/get, inspect, doctor, reload, diff hash | 새 Docker/Testbox Harness |
| 게이트웨이 부트스트랩 | 깨끗한 HOME, 플러그인 그룹 활성화/비활성화, 상태 JSON | 새 Docker/Testbox Harness |
| SDK 호환성 | SDK 하위 경로를 사용하는 디렉토리, tgz 및 file: 외부 플러그인 | test:docker:plugins + 새 스모크 |
| 라이브-ish | 현재 환경에 대해서만 수정된 제공자/채널 프로브 | Testbox live lanes |
Package Acceptance 계획
Full Release Validation은 Q=C 및 정확한 게시 tarball로 최종 후보 자격을 소유합니다. 진단 또는 게시 후 확신을 위해 독립 실행형 Package Acceptance를 사용하되, 후보 자격을 대체하지 마세요:
gh workflow run package-acceptance.yml \
--repo openclaw/openclaw \
--ref main \
-f workflow_ref=main \
-f source=ref \
-f package_ref=<branch-or-sha> \
-f suite_profile=custom \
-f docker_lanes='plugins-offline plugin-update doctor-switch update-channel-switch config-reload mcp-channels npm-onboard-channel-agent' \
-f telegram_mode=mock-openai
게시된 베타 증명을 위해 source=npm -f package_spec=openclaw@beta를 사용하세요. 이러한 독립 실행형 진단/확신 실행은 신뢰할 수 있는 현재 Harness 코드를 사용할 수 있습니다. 후보 자격은 대신 고정된 후보의 Harness를 유지해야 합니다.
확장-안정 공유 게시의 경우, Q=C에서 인정된 후보 소유 release-ci/* Harness로부터 완전한 정확-대상 Full Release Validation을 요구하세요. 신뢰할 수 있는 P 인정 및 게시 도구는 별도로 둡니다. 직접 정식-브랜치 또는 main 생성자는 보호된 게시자를 충족하지 않습니다. Package Acceptance는 게시 후 선택기 스모크입니다:
gh workflow run package-acceptance.yml \
--repo openclaw/openclaw \
--ref main \
-f workflow_ref=main \
-f source=npm \
-f package_spec=openclaw@extended-stable \
-f suite_profile=package \
-f telegram_mode=mock-openai
해결된 버전을 기록하세요. 태그의 all-publishable 인벤토리에 있는 모든 패키지와 선택기를 여전히 확인하세요. 하나의 스모크는 레지스트리 읽기 확인이 아닙니다.
플러그인 npm 아티팩트 자격
게시 후보의 경우 Full Release Validation이 플러그인 npm 아티팩트 자격을 소유합니다. 디스패치 시 게시 선택을 제공하세요. 모든-그룹 부모는 정확한 릴리스 SHA에 대해 아티팩트 전용 모드로 plugin-npm-release.yml을 호출하고, 성공적인 tarball 읽기 확인을 요구하며, 불변 집계 설명자를 publicationArtifacts.pluginNpm에 기록합니다. 릴리스 준비 및 게시는 플러그인을 다시 패킹하는 대신 정확한 설명자를 채택해야 합니다.
정기적인 게시 후보 외부에서 집중된 진단 또는 선택된 플러그인 수리를 위해서만 독립 실행형 신뢰할 수 있는 워크플로우 사전 점검을 사용하세요:
release_sha="$(git rev-parse origin/release/2026.7.1)"
gh workflow run plugin-npm-release.yml \
--repo openclaw/openclaw \
--ref main \
-f preflight_only=true \
-f publish_scope=selected \
-f plugins=@openclaw/meta-provider \
-f ref="${release_sha}" \
-f npm_dist_tag=default
release_publish_run_id를 전달하지 마세요. 워크플로우가 verify_plugin_npm_preflight를 성공적으로 완료하도록 요구하세요. 실행 URL, 워크플로우 SHA 및 소스 SHA를 기록하세요. 워크플로우는 먼저 npm-pack.json, preflight-manifest.json 및 tarball을 포함하는 스테이징/읽기 확인 아티팩트 plugin-npm-package-source-<source-sha>-<extension-id>를 생성합니다. 그런 다음 tarball 및 plugin-publication-manifest.json을 포함하는 최종 소비자 아티팩트 plugin-npm-package-<extension-id>-<version>-<route>-<run-id>-<attempt>를 업로드합니다.
최종 아티팩트 이름과 다이제스트를 별도로 기록하세요. 매니페스트는 openclaw.plugin-publication-artifact/v1을 사용하며 대상 SHA, 패키지 매니페스트 해시, 게시 경로 및 정책, tarball 해시 및 인벤토리를 기록합니다. 이 독립 실행형 증명은 검증 전용입니다. 게시를 승인하거나 준비하지 않으며 Full Release Validation의 매니페스트-바운드 설명자를 대체할 수 없습니다. 아티팩트 인벤토리는 압축 풀린 소스 트리가 아닌 보안 및 패키지-콘텐츠 경계입니다. 소스 전용 고정물은 관련이 없습니다. 출하된 런타임 및 스킬 자산 외부의 패키지 소유 테스트 및 고정물 경로는 자격에 실패합니다. 출하된 런타임은 보안 스캔 상태를 유지합니다. 번들 node_modules는 플러그인 소스 정책보다 의존성 증거와 함께 유지됩니다. 별도의 trusted_publisher_preflight=true OIDC 검사는 보호된 release-publish/<tooling-sha12>-<epoch> 디스패치 태그를 필요로 하며 npm-publish에서 실행됩니다. 실제 게시에는 해당 도구 태그도 필요합니다. 직접 인간 디스패치는 게시 전에 npm-release 승인 작업을 기다립니다.
이미 게시된 버전의 경우, npm dist.integrity 및 dist.shasum이 확인된 tarball과 일치하도록 요구하세요. 누락되었거나 입증 가능하게 오래된 dist-tags만 수리 가능한 것으로 취급하세요. 최신 또는 비교할 수 없는 선택기는 차단기입니다.
새 Testbox Harness 계획
더 많은 확신이 필요한 경우, 하나의 패키지 tarball과 샤딩된 플러그인 목록을 사용하는 plugin-lifecycle-matrix Docker 레인을 추가하거나 실행하세요. 플러그인당:
- 깨끗한
HOME으로 시작합니다. plugins list --json을 캡처합니다.plugins install <id>.plugins inspect <id> --json.plugins disable <id>, 그런 다음 비활성화된 가시성을 확인합니다.plugins enable <id>, 단 설정-필수 플러그인은 설정 없이 제외합니다.plugins registry --refresh.doctor --non-interactive.plugins uninstall <id> --force.- 플러그인의
plugins.entries값이 정확히{ enabled: false }인지 확인하고, 허용/거부 항목, 설치 기록, 관리 디렉토리 및 번들 런타임 로드 경로가 사라졌는지 확인합니다. 기록 대상에 대해 기존 Harness의 소스-한정 제거 기대치를 사용합니다. - 진단에
level: "error"가 포함되지 않고 출력이 비밀-같은 값을 수정하는지 확인합니다.
memory-lancedb는 특별합니다: 설정이 필요합니다. 먼저 설치가 설정을 포함하지 않고 활성화하지 않는지 확인한 다음, 설정된 두 번째 사례를 실행합니다.
Doctor/Fix 매트릭스
잘못된 상태를 시드하고 doctor --fix --non-interactive가 이를 복구하도록 요구한 다음, doctor를 다시 실행하고 멱등성을 요구합니다:
- 오래된
plugins.allow - 오래된
plugins.entries - 누락된 채널 플러그인에 대한 오래된 채널 설정
- 유효하지 않은
plugins.entries.<id>.config plugins.load.paths에 패키지된 번들 경로- 레거시
plugins.installs - 런타임 의존성을 준비하지 않아야 하는 비활성화된 채널/플러그인 설정
- 수정되지 않은 상태로 유지되어야 하는 루트 소유 글로벌 패키지 트리
게이트웨이 부트스트랩 매트릭스
깨끗한 상태로 Docker에서 패키지된 OpenClaw를 시작합니다:
- 제공자 플러그인 활성화, 자격 증명 없음: 경고와 함께 준비, 충돌 없음
- 채널 플러그인 구성 비활성화: 런타임 의존성 준비되지 않음
- 시작-활성화 플러그인 활성화: 준비 및 상태에 반영됨
- 유효하지 않은 단일 플러그인 설정: 잘못된 플러그인 건너뜀/격리, 나머지는 유지
확인:
- 게이트웨이가 준비 상태에 도달
openclaw status --json에 플러그인 진단 포함openclaw plugins inspect --all --json을 구문 분석 가능- 패키지 트리가 변경되지 않음
- 로그에 원시 토큰 없음
설정 라운드트립 대표
심층 설정 라운드트립을 위해 모든 플러그인 대신 대표 플러그인 패밀리를 사용합니다:
- 제공자:
openai,anthropic,mistral,openrouter - 채널:
telegram,discord,slack,whatsapp - 메모리:
memory-lancedb - 기능/런타임:
browser,acpx,tokenjuice
각 대표에 대해:
- 가능하면 CLI를 통해 설정을 작성합니다.
config get또는 JSON을 통해 다시 읽습니다.plugins inspect를 실행합니다.doctor --non-interactive를 실행합니다.- 해당되는 경우 게이트웨이 설정 리로드를 트리거합니다.
- 무작동 명령 전후의 설정 해시를 비교합니다.
외부 SDK 스모크
패키지 Docker 레인에서 작은 외부 플러그인을 만들고 다음에서 설치합니다:
- 로컬 디렉토리
.tgzfile:npm 사양
CJS 및 ESM 형태와 집중된 openclaw/plugin-sdk/* 하위 경로를 가져오는 플러그인을 최소 하나 포함합니다. plugins inspect가 해당 도구, 게이트웨이 메서드, CLI 명령 또는 서비스를 보는지 확인합니다.
라이브-ish 프로브 규칙
라이브-ish 작업 전에 Testbox에서 허용된 env를 소싱하고 수정된 가용성 매트릭스를 생성합니다: 있음/없음만, 값은 절대 안 됩니다.
존재하는 자격 증명에 대해서만 프로브를 실행합니다. 사용자-표시 메시지를 보내는 것보다 인증/카탈로그/상태 프로브를 선호합니다. 프로브가 외부 사용자, 채널 또는 워크스페이스에 연락할 수 있는 경우 중지하고 사용자에게 물어보세요.
보고
다음 형식으로 보고합니다:
package/ref:
tbx ids / run urls:
matrix:
bundled lifecycle:
package acceptance:
doctor/fix:
gateway bootstrap:
config round-trip:
sdk external:
live-ish:
failures:
skips:
next highest-value gap:
실패가 제품 동작이 아닌 Testbox 동기화/env 손상인 경우 명확히 말하고, 깨끗한 재실행 또는 현재-main 비교로 증명하세요.