OpenClaw 發行前外掛程式測試
當使用者要求外掛程式發行信心、外掛程式生命週期掃描、封包成品外掛程式驗證,或「發行前我們還應該測試什麼?」時,使用此技能。它補充了 openclaw-testing 技能;在選擇最便宜的可靠執行器或除錯失敗的測試通道時,也應一併使用該技能。
目標
證明外掛程式系統作為一個產品表面,而不僅僅是原始碼測試:
- 捆綁外掛程式生命週期:安裝、檢查、啟用、停用、卸載
- 從全新
HOME目錄的封包成品行為 - doctor/fix/組態驗證與冪等性
- 組態發現與組態往返
- 狀態/日誌可見性與診斷
- 閘道啟動/引導與外掛程式元資料快照
- 真實外部外掛程式的公開 SDK 相容性
- 僅在安全憑證存在時進行接近線上的提供者/通道探測
首要檢查
從 OpenClaw 儲存庫根目錄執行:
pnpm docs:list
git status --short --branch
pnpm changed:lanes --json
遵循 openclaw-testing 以了解相依性所有權以及選擇本機或遠端驗證方式。
執行器選擇
偏好以下順序:
- GitHub Package Acceptance:用於可安裝封包產品的驗證。
- 目前的專用 Linux Worker:當其具有所需的相依性與能力時,用於可信賴的原始碼/封包/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/版本以及跳過的線上測試原因。
| 表面 | 驗證內容 | 偏好的執行器 |
|---|---|---|
| 封包成品 | Package Acceptance suite_profile=package 或自訂通道 | GitHub Actions |
| 捆綁生命週期 | 分片 test:docker:bundled-plugin-install-uninstall | Testbox 或發行 Docker |
| 外部外掛程式 | test:docker:plugins 及 plugins-offline | Testbox/封包驗收 |
| 更新無操作 | test:docker:plugin-update | Testbox/封包驗收 |
| Doctor/fix | 植入錯誤配置 + doctor --fix --non-interactive | 新的 Docker/Testbox 框架 |
| 組態往返 | config set/get、檢查、doctor、重新載入、差異雜湊 | 新的 Docker/Testbox 框架 |
| 閘道引導 | 全新 HOME、外掛程式群組啟用/停用、狀態 JSON | 新的 Docker/Testbox 框架 |
| SDK 相容性 | 目錄、tgz 及使用 SDK 子路徑的 file: 外部外掛程式 | test:docker:plugins 加上新冒煙測試 |
| 接近線上 | 僅針對目前環境中存在的憑證進行脫敏後的提供者/通道探測 | Testbox 線上通道 |
封包驗收計畫
完整的發行驗證擁有最終候選版本的資格認定,其資格為 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=<分支或 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 進行已發行 beta 版的驗證。這些獨立的診斷/信心驗證執行可以使用目前可信賴的框架程式碼;候選版本的資格認定必須改用凍結的候選版本框架。
對於 extended-stable 共享發行,要求從經認可的候選版本擁有的 release-ci/* 框架中,使用 Q=C 進行完整的確切目標完整發行驗證,並將可信賴的 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 成品資格認定
對於發行候選版本,完整的發行驗證負責外掛程式 npm 成品的資格認定。在分發時提供其發行選擇;所有群組的父級工作流程會以僅成品模式呼叫 plugin-npm-release.yml,針對確切的 Release SHA,要求成功讀回 tarball,並在 publicationArtifacts.pluginNpm 中記錄不可變的聚合描述符。Release Prepare 與發行作業必須採用該確切描述符,而非重新打包外掛程式。
僅在針對常規發行候選版本之外的聚焦診斷或所選外掛程式修復時,使用獨立的可信賴工作流程預檢:
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。工作流程首先建立暫存/回讀成品 plugin-npm-package-source-<source-sha>-<extension-id>,其中包含 npm-pack.json、preflight-manifest.json 及 tarball。然後上傳最終的消費者成品 plugin-npm-package-<extension-id>-<version>-<route>-<run-id>-<attempt>,其中包含 tarball 及 plugin-publication-manifest.json。
分別記錄最終的成品名稱與摘要。該 manifest 使用 openclaw.plugin-publication-artifact/v1,並記錄目標 SHA、封包 manifest 雜湊、發行路由與策略,以及 tarball 雜湊與庫存。此獨立驗證僅為驗證用途;它不會授權或暫存發行,也無法取代完整發行驗證的 manifest 限定描述符。成品庫存(而非解壓縮的原始碼樹)是安全性與封包內容的邊界:僅原始碼的測試夾具無關緊要。封包擁有的、位於已發行執行期與技能資產之外的測試與夾具路徑會導致資格認定失敗;已發行執行期仍須進行安全掃描。捆綁的 node_modules 與相依性證據(而非外掛程式原始碼策略)一同保留。獨立的 trusted_publisher_preflight=true OIDC 檢查需要一個受保護的 release-publish/<tooling-sha12>-<epoch> 分發標籤,並在 npm-publish 中執行。真實的發行也需要該工具標籤;直接的人工分發在發行前會等待其 npm-release 核准工作。
對於已發行的版本,要求 npm 的 dist.integrity 與 dist.shasum 與已驗證的 tarball 匹配。僅將缺失或可證明為較舊的 dist-tag 視為可修復;較新或無法比較的選擇器是阻斷因素。
新 Testbox 框架計畫
如果需要更高的信心度,請新增或執行一個使用一個封包 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 },而它的允許/拒絕條目、安裝記錄、受管理目錄以及捆綁的執行期載入路徑均已消失。對於舊版目標,使用現有框架的原始碼限定卸載預期。 - 斷定診斷訊息中沒有
level: "error"且輸出脫敏了看起來像秘密的值。
特別處理 memory-lancedb:它需要組態。首先斷言在不嵌入組態的情況下安裝不會啟用它,然後執行第二個已配置的案例。
Doctor/Fix 矩陣
植入錯誤狀態並要求 doctor --fix --non-interactive 修復它們,然後再次執行 doctor 並要求冪等性:
- 過時的
plugins.allow - 過時的
plugins.entries - 缺少通道外掛程式的過時通道組態
- 無效的
plugins.entries.<id>.config plugins.load.paths中的打包捆綁路徑- 舊版
plugins.installs - 已停用的通道/外掛程式組態,不應暫存執行期相依性
- 必須保持不變的 root 擁有全域封包樹
閘道引導矩陣
在 Docker 中以全新狀態啟動打包的 OpenClaw:
- 提供者外掛程式已啟用,無憑證:準備就緒但有警告,不崩潰
- 通道外掛程式配置為停用:不暫存執行期相依性
- 啟動時啟用的外掛程式已啟用:準備就緒並反映在狀態中
- 無效的單一外掛程式組態:錯誤外掛程式被跳過/隔離,其餘正常
斷言:
- 閘道達到準備就緒狀態
openclaw status --json包含外掛程式診斷openclaw plugins inspect --all --json可解析- 封包樹未被修改
- 日誌中不包含原始 token
組態往返代表
對深層組態往返使用代表性的外掛程式系列,而非每個外掛程式:
- 提供者:
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 指令或服務。
接近線上探測規則
在進行接近線上的工作之前,先在 Testbox 中取得允許的環境變數並產生一個脫敏的可用性矩陣:僅標記為存在/缺失,絕不包含值。
僅對已存在的憑證執行探測。偏好 auth/catalog/status 探測,而非發送使用者可見的訊息。如果某個探測可能會聯絡到外部使用者、頻道或工作區,請停止並詢問使用者。
報告
以以下格式報告:
封包/參考:
tbx ID / 執行 URL:
矩陣:
捆綁生命週期:
封包驗收:
doctor/fix:
閘道引導:
組態往返:
SDK 外部:
接近線上:
失敗:
跳過:
下一個最高價值缺口:
當失敗是 Testbox 同步/環境損壞而非產品行為時,請清楚說明,並透過乾淨的重新執行或與當前 main 分支的比較來證明。