Release and CI
CI-Pipeline
OpenClaw-CI läuft bei jedem Push auf main und bei jedem Pull Request. Kanonische
main-Pushes durchlaufen zuerst ein 90-sekündiges Zulassungsfenster für Hosted Runner.
Die bestehende CI-Concurrency-Gruppe bricht diesen wartenden Lauf ab, wenn ein neuerer
Commit landet, sodass aufeinanderfolgende Merges nicht jeweils eine vollständige Blacksmith-
Matrix registrieren. Pull Requests und manuelle Dispatches überspringen die Wartezeit. Der preflight-Job
klassifiziert anschließend den Diff und schaltet teure Lanes aus, wenn sich nur nicht verwandte
Bereiche geändert haben. Manuelle workflow_dispatch-Läufe umgehen Smart
Scoping absichtlich und fächern den vollständigen Graphen für Release Candidates und breite
Validierung auf. Android-Lanes bleiben über include_android opt-in. Release-spezifische
Plugin-Abdeckung befindet sich im separaten Workflow Plugin-Vorabversion
und läuft nur aus Vollständige Release-Validierung
oder einem expliziten manuellen Dispatch.
Pipeline-Übersicht
| Job | Zweck | Wann er läuft |
|---|---|---|
preflight |
Erkennt reine Docs-Änderungen, geänderte Scopes, geänderte Erweiterungen und erstellt das CI-Manifest | Immer bei Nicht-Entwurfs-Pushes und PRs |
runner-admission |
Gehosteter 90-Sekunden-Debounce für kanonische main-Pushes, bevor Blacksmith-Arbeit registriert wird |
Jeder CI-Lauf; Sleep nur bei kanonischen main-Pushes |
security-fast |
Erkennung privater Schlüssel, Audit geänderter Workflows über zizmor und Audit des Produktions-Lockfiles |
Immer bei Nicht-Entwurfs-Pushes und PRs |
check-dependencies |
Produktions-Knip-Durchlauf nur für Abhängigkeiten plus Guard für die Allowlist ungenutzter Dateien | Node-relevante Änderungen |
build-artifacts |
Erstellt dist/, Control UI, Smoke Checks der gebauten CLI, Prüfungen eingebetteter Build-Artefakte und wiederverwendbare Artefakte |
Node-relevante Änderungen |
checks-fast-core |
Schnelle Linux-Korrektheits-Lanes wie gebündelte, Protocol-, QA-Smoke-CI- und CI-Routing-Prüfungen | Node-relevante Änderungen |
checks-fast-contracts-plugins-* |
Zwei geshardete Plugin-Contract-Prüfungen | Node-relevante Änderungen |
checks-fast-contracts-channels-* |
Zwei geshardete Channel-Contract-Prüfungen | Node-relevante Änderungen |
checks-node-core-* |
Core-Node-Test-Shards, ohne Channel-, gebündelte, Contract- und Erweiterungs-Lanes | Node-relevante Änderungen |
check-* |
Ges hardetes Äquivalent des lokalen Haupt-Gates: Produktions-Typen, Lint, Guards, Testtypen und strikter Smoke | Node-relevante Änderungen |
check-additional-* |
Architektur, geshardete Boundary-/Prompt-Drift, Erweiterungs-Guards, Package Boundary und Runtime-Topologie | Node-relevante Änderungen |
checks-node-compat-node22 |
Node-22-Kompatibilitäts-Build und Smoke-Lane | Manueller CI-Dispatch für Releases |
check-docs |
Docs-Formatierung, Lint und Broken-Link-Prüfungen | Docs geändert |
skills-python |
Ruff + pytest für Python-gestützte Skills | Für Python-Skills relevante Änderungen |
checks-windows |
Windows-spezifische Prozess-/Pfadtests plus Regressionen bei gemeinsamen Runtime-Import-Spezifizierern | Windows-relevante Änderungen |
macos-node |
macOS-TypeScript-Test-Lane mit den gemeinsamen Build-Artefakten | macOS-relevante Änderungen |
macos-swift |
Swift-Lint, Build und Tests für die macOS-App | macOS-relevante Änderungen |
ios-build |
Xcode-Projektgenerierung plus Simulator-Build der iOS-App | iOS-App, gemeinsames App Kit oder Swabble-Änderungen |
android |
Android-Unit-Tests für beide Flavors plus ein Debug-APK-Build | Android-relevante Änderungen |
test-performance-agent |
Tägliche Codex-Slow-Test-Optimierung nach vertrauenswürdiger Aktivität | Erfolgreiche Main-CI oder manueller Dispatch |
openclaw-performance |
Tägliche/bedarfsbasierte Kova-Runtime-Performance-Berichte mit mock-provider, deep-profile und GPT-5.5-Live-Lanes | Geplant und manueller Dispatch |
Fail-Fast-Reihenfolge
runner-admissionwartet nur bei kanonischenmain-Pushes; ein neuerer Push bricht den Lauf vor der Blacksmith-Registrierung ab.preflightentscheidet, welche Lanes überhaupt existieren. Die Logikdocs-scopeundchanged-scopesind Schritte innerhalb dieses Jobs, keine eigenständigen Jobs.security-fast,check-*,check-additional-*,check-docsundskills-pythonschlagen schnell fehl, ohne auf die schwereren Artefakt- und Plattform-Matrix-Jobs zu warten.build-artifactsüberschneidet sich mit den schnellen Linux-Lanes, sodass nachgelagerte Verbraucher starten können, sobald der gemeinsame Build bereit ist.- Schwerere Plattform- und Runtime-Lanes fächern danach auf:
checks-fast-core,checks-fast-contracts-plugins-*,checks-fast-contracts-channels-*,checks-node-core-*,checks-windows,macos-node,macos-swift,ios-buildundandroid.
GitHub kann überholte Jobs als cancelled markieren, wenn ein neuerer Push auf demselben PR- oder main-Ref landet. Behandeln Sie das als CI-Rauschen, sofern der neueste Lauf für denselben Ref nicht ebenfalls fehlschlägt. Matrix-Jobs verwenden fail-fast: false, und build-artifacts meldet Fehler bei eingebettetem Channel, core-support-boundary und gateway-watch direkt, statt kleine Verifier-Jobs einzureihen. Der automatische CI-Concurrency-Key ist versioniert (CI-v7-*), damit ein GitHub-seitiger Zombie in einer alten Queue-Gruppe neuere Main-Läufe nicht unbegrenzt blockieren kann. Manuelle Full-Suite-Läufe verwenden CI-manual-v1-* und brechen laufende Läufe nicht ab.
Verwenden Sie pnpm ci:timings, pnpm ci:timings:recent oder node scripts/ci-run-timings.mjs <run-id>, um Laufzeit, Warteschlangenzeit, langsamste Jobs, Fehler und die pnpm-store-warmup-Fanout-Barriere aus GitHub Actions zusammenzufassen. CI lädt dieselbe Laufzusammenfassung außerdem als Artefakt ci-timings-summary hoch. Für Build-Timing prüfen Sie im Job build-artifacts den Schritt Build dist: pnpm build:ci-artifacts gibt [build-all] phase timings: aus und enthält ui:build; der Job lädt außerdem das Artefakt startup-memory hoch.
Bei Pull-Request-Läufen führt der abschließende Timing-Summary-Job den Helper aus der vertrauenswürdigen Basisrevision aus, bevor GH_TOKEN an gh run view übergeben wird. Dadurch bleibt die tokenisierte Abfrage außerhalb von branch-kontrolliertem Code, während dennoch der aktuelle CI-Lauf des Pull Requests zusammengefasst wird.
PR-Kontext und Nachweise
PRs externer Beitragender führen ein PR-Kontext- und Nachweis-Gate aus
.github/workflows/real-behavior-proof.yml aus. Der Workflow checkt den vertrauenswürdigen
Basis-Commit aus und bewertet nur den PR-Body; er führt keinen Code aus dem
Branch des Beitragenden aus.
Das Gate gilt für PR-Autoren, die keine Repository-Owner, Mitglieder,
Collaborators oder Bots sind. Es besteht, wenn der PR-Body verfasste
Abschnitte What Problem This Solves und Evidence enthält. Nachweise können ein fokussierter
Test, ein CI-Ergebnis, ein Screenshot, eine Aufnahme, Terminalausgabe, Live-Beobachtung,
ein redigiertes Log oder ein Artefakt-Link sein. Der Body liefert Absicht und nützliche Validierung;
Reviewer prüfen Code, Tests und CI, um die Korrektheit zu bewerten.
Wenn die Prüfung fehlschlägt, aktualisieren Sie den PR-Body, statt einen weiteren Code-Commit zu pushen.
Scope und Routing
Scope-Logik befindet sich in scripts/ci-changed-scope.mjs und ist durch Unit-Tests in src/scripts/ci-changed-scope.test.ts abgedeckt. Manueller Dispatch überspringt die Erkennung geänderter Scopes und lässt das Preflight-Manifest so handeln, als hätte sich jeder gescopte Bereich geändert.
- CI-Workflow-Änderungen validieren den Node-CI-Graphen plus Workflow-Linting, erzwingen aber für sich allein keine nativen Windows-, iOS-, Android- oder macOS-Builds; diese Plattform-Lanes bleiben auf Änderungen am Plattform-Quellcode gescopet.
- Workflow Sanity führt
actionlint,zizmorüber alle Workflow-YAML-Dateien, den Composite-Action-Interpolation-Guard und den Conflict-Marker-Guard aus. Der PR-gescopte Jobsecurity-fastführt außerdemzizmorüber geänderte Workflow-Dateien aus, sodass Workflow-Sicherheitsbefunde früh im Haupt-CI-Graphen fehlschlagen. - Docs bei
main-Pushes werden vom eigenständigen WorkflowDocsmit demselben ClawHub-Docs-Mirror geprüft, den CI verwendet, sodass gemischte Code+Docs-Pushes nicht zusätzlich den CI-Shardcheck-docseinreihen. Pull Requests und manuelle CI führencheck-docsaus CI weiterhin aus, wenn Docs geändert wurden. - TUI PTY läuft im Linux-Node-Shard
checks-node-core-runtime-tui-ptyfür TUI-Änderungen. Der Shard führttest/vitest/vitest.tui-pty.config.tsmitOPENCLAW_TUI_PTY_INCLUDE_LOCAL=1aus und deckt damit sowohl die deterministische Fixture-LaneTuiBackendals auch den langsameren Smoketui --localab, der nur den externen Modell-Endpunkt mockt. - Nur-CI-Routing-Änderungen, ausgewählte günstige Core-Test-Fixture-Änderungen und eng gefasste Plugin-Contract-Helper-/Test-Routing-Änderungen verwenden einen schnellen Node-only-Manifest-Pfad:
preflight, Security und eine einzelne Aufgabechecks-fast-core. Dieser Pfad überspringt Build-Artefakte, Node-22-Kompatibilität, Channel Contracts, vollständige Core-Shards, Bundled-Plugin-Shards und zusätzliche Guard-Matrizen, wenn die Änderung auf die Routing- oder Helper-Oberflächen beschränkt ist, die die schnelle Aufgabe direkt ausübt. - Windows-Node-Prüfungen sind auf Windows-spezifische Prozess-/Pfad-Wrapper, npm-/pnpm-/UI-Runner-Helper, Package-Manager-Konfiguration und die CI-Workflow-Oberflächen gescopet, die diese Lane ausführen; nicht verwandter Quellcode, Plugin-, Install-Smoke- und reine Teständerungen bleiben auf den Linux-Node-Lanes.
Die langsamsten Node-Testfamilien sind aufgeteilt oder ausbalanciert, sodass jeder Job klein bleibt, ohne Runner übermäßig zu reservieren: Plugin-Verträge und Kanalverträge laufen jeweils als zwei gewichtete, von Blacksmith unterstützte Shards mit dem standardmäßigen GitHub-Runner-Fallback, schnelle Core-Unit-/Support-Lanes laufen separat, die Core-Runtime-Infrastruktur ist auf State, Process/Config, Shared und drei Cron-Domain-Shards aufgeteilt, Auto-Reply läuft als ausbalancierte Worker (wobei der Reply-Teilbaum in Agent-Runner-, Dispatch- und Commands/State-Routing-Shards aufgeteilt ist), und agentische Gateway-/Server-Konfigurationen sind auf Chat/Auth/Model/http-plugin/Runtime/Startup-Lanes verteilt, statt auf gebaute Artefakte zu warten. Normale CI bündelt dann nur isolierte Infra-Include-Pattern-Shards in deterministische Bundles mit höchstens 64 Testdateien, wodurch die Node-Matrix reduziert wird, ohne nicht isolierte Command/Cron-, zustandsbehaftete Agents-Core- oder Gateway/Server-Suites zusammenzuführen; schwere feste Suites bleiben auf 8 vCPU, während die gebündelten und geringer gewichteten Lanes 4 vCPU verwenden. Pull Requests im kanonischen Repository verwenden einen zusätzlichen kompakten Admission-Plan: dieselben Gruppen pro Konfiguration laufen in isolierten Subprozessen innerhalb des aktuellen Linux-Node-Plans mit 34 Jobs, sodass ein einzelner PR nicht die vollständige Node-Matrix mit über 70 Jobs registriert. main-Pushes, manuelle Dispatches und Release-Gates behalten die vollständige Matrix bei. Umfassende Browser-, QA-, Medien- und verschiedene Plugin-Tests verwenden ihre dedizierten Vitest-Konfigurationen statt des gemeinsamen Plugin-Catch-Alls. Include-Pattern-Shards zeichnen Timing-Einträge mit dem CI-Shard-Namen auf, sodass .artifacts/vitest-shard-timings.json eine ganze Konfiguration von einem gefilterten Shard unterscheiden kann. check-additional-* hält Package-Grenzen-Kompilierung/Canary-Arbeit zusammen und trennt Runtime-Topologie-Architektur von Gateway-Watch-Abdeckung; die Boundary-Guard-Liste ist in einen prompt-lastigen Shard und einen kombinierten Shard für die verbleibenden Guard-Stripes aufgeteilt, wobei jeder ausgewählte unabhängige Guards parallel ausführt und Timings pro Check ausgibt. Die teure Codex-Happy-Path-Prompt-Snapshot-Drift-Prüfung läuft als eigener zusätzlicher Job nur für manuelle CI und für prompt-beeinflussende Änderungen, sodass normale, nicht zusammenhängende Node-Änderungen nicht hinter kalter Prompt-Snapshot-Generierung warten und die Boundary-Shards ausbalanciert bleiben, während Prompt-Drift weiterhin dem PR zugeordnet ist, der ihn verursacht hat; dasselbe Flag überspringt die Prompt-Snapshot-Vitest-Generierung innerhalb des gebauten Artefakt-Core-Support-Boundary-Shards. Gateway-Watch, Kanaltests und der Core-Support-Boundary-Shard laufen innerhalb von build-artifacts parallel, nachdem dist/ und dist-runtime/ bereits gebaut wurden.
Nach der Zulassung erlaubt die kanonische Linux-CI bis zu 24 gleichzeitige Node-Testjobs und 12 für die kleineren Fast/Check-Lanes; Windows und Android bleiben bei zwei, weil diese Runner-Pools enger sind.
Der kompakte PR-Plan gibt 18 Node-Jobs für die aktuelle Suite aus: Whole-Config- Gruppen werden in isolierten Subprozessen mit einem Batch-Timeout von 120 Minuten gebündelt, während Include-Pattern-Gruppen dasselbe begrenzte Job-Budget teilen.
Android-CI führt sowohl testPlayDebugUnitTest als auch testThirdPartyDebugUnitTest aus und baut danach das Play-Debug-APK. Die Third-Party-Variante hat kein separates Source Set oder Manifest; ihre Unit-Test-Lane kompiliert die Variante trotzdem mit den SMS/Call-Log-BuildConfig-Flags, vermeidet aber bei jedem Android-relevanten Push einen doppelten Debug-APK-Packaging-Job.
Der check-dependencies-Shard führt pnpm deadcode:dependencies (einen produktionsbezogenen Knip-Durchlauf nur für Abhängigkeiten, fixiert auf die neueste Knip-Version, mit deaktiviertem pnpm-Mindestveröffentlichungsalter für die dlx-Installation) und pnpm deadcode:unused-files aus, das Knips produktionsbezogene Befunde zu ungenutzten Dateien mit scripts/deadcode-unused-files.allowlist.mjs vergleicht. Der Unused-File-Guard schlägt fehl, wenn ein PR eine neue ungeprüfte ungenutzte Datei hinzufügt oder einen veralteten Allowlist-Eintrag stehen lässt, während absichtliche dynamische Plugin-, generierte, Build-, Live-Test- und Package-Bridge-Oberflächen erhalten bleiben, die Knip nicht statisch auflösen kann.
ClawSweeper-Aktivitätsweiterleitung
.github/workflows/clawsweeper-dispatch.yml ist die zielseitige Brücke von OpenClaw-Repository-Aktivität zu ClawSweeper. Sie checkt keinen nicht vertrauenswürdigen Pull-Request-Code aus und führt ihn nicht aus. Der Workflow erstellt aus CLAWSWEEPER_APP_PRIVATE_KEY ein GitHub-App-Token und dispatcht dann kompakte repository_dispatch-Payloads an openclaw/clawsweeper.
Der Workflow hat vier Lanes:
clawsweeper_itemfür genaue Review-Anfragen zu Issues und Pull Requests;clawsweeper_commentfür explizite ClawSweeper-Befehle in Issue-Kommentaren;clawsweeper_commit_reviewfür Review-Anfragen auf Commit-Ebene beimain-Pushes;github_activityfür allgemeine GitHub-Aktivität, die der ClawSweeper-Agent inspizieren kann.
Die github_activity-Lane leitet nur normalisierte Metadaten weiter: Ereignistyp, Aktion, Akteur, Repository, Elementnummer, URL, Titel, Status und kurze Auszüge für Kommentare oder Reviews, wenn vorhanden. Sie vermeidet absichtlich die Weiterleitung des vollständigen Webhook-Bodys. Der empfangende Workflow in openclaw/clawsweeper ist .github/workflows/github-activity.yml, der das normalisierte Ereignis an den OpenClaw-Gateway-Hook für den ClawSweeper-Agent postet.
Allgemeine Aktivität ist Beobachtung, keine standardmäßige Zustellung. Der ClawSweeper-Agent erhält das Discord-Ziel in seinem Prompt und sollte nur dann an #clawsweeper posten, wenn das Ereignis überraschend, handlungsrelevant, riskant oder betrieblich nützlich ist. Routinemäßige Eröffnungen, Bearbeitungen, Bot-Aktivität, doppeltes Webhook-Rauschen und normaler Review-Verkehr sollten zu NO_REPLY führen.
Behandeln Sie GitHub-Titel, Kommentare, Bodys, Review-Text, Branch-Namen und Commit-Nachrichten auf diesem gesamten Pfad als nicht vertrauenswürdige Daten. Sie sind Eingaben für Zusammenfassung und Triage, keine Anweisungen für den Workflow oder die Agent-Runtime.
Manuelle Dispatches
Manuelle CI-Dispatches führen denselben Jobgraphen wie normale CI aus, erzwingen aber jede nicht Android-spezifische Lane: Linux-Node-Shards, Bundled-Plugin-Shards, Plugin- und Kanalvertrags-Shards, Node-22-Kompatibilität, check-*, check-additional-*, Smoke-Checks für gebaute Artefakte, Docs-Checks, Python-Skills, Windows, macOS, iOS-Build und Control-UI-i18n. Eigenständige manuelle CI-Dispatches führen Android nur mit include_android=true aus; der vollständige Release-Umbrella aktiviert Android, indem er include_android=true übergibt. Statische Plugin-Prerelease-Checks, der release-only agentic-plugins-Shard, der vollständige Extension-Batch-Sweep und Plugin-Prerelease-Docker-Lanes sind von CI ausgeschlossen. Die Docker-Prerelease-Suite läuft nur, wenn Full Release Validation den separaten Plugin Prerelease-Workflow mit aktiviertem Release-Validation-Gate dispatcht.
Manuelle Läufe verwenden eine eindeutige Concurrency-Gruppe, sodass eine vollständige Release-Candidate-Suite nicht durch einen anderen Push- oder PR-Lauf auf demselben Ref abgebrochen wird. Die optionale Eingabe target_ref ermöglicht einem vertrauenswürdigen Aufrufer, diesen Graphen gegen einen Branch, Tag oder vollständigen Commit-SHA auszuführen, während die Workflow-Datei aus dem ausgewählten Dispatch-Ref verwendet wird.
gh workflow run ci.yml --ref release/YYYY.M.PATCHgh workflow run ci.yml --ref main -f target_ref=<branch-or-sha> -f include_android=truegh workflow run full-release-validation.yml --ref main -f ref=<branch-or-sha>Der monatliche npm-only-Extended-Stable-Pfad ist die Ausnahme: dispatchen Sie sowohl den Preflight für OpenClaw NPM Release als auch Full Release Validation vom exakten
extended-stable/YYYY.M.33-Branch, bewahren Sie deren Run-IDs auf und übergeben Sie beide IDs an den
direkten npm-Publish-Lauf. Siehe Monatliche npm-only-Extended-Stable-
Veröffentlichung für
die Befehle, exakten Identitätsanforderungen, Registry-Readback und das Selector-
Reparaturverfahren. Dieser Pfad dispatcht keine Plugin-, macOS-, Windows-, GitHub-
Release-, privaten Dist-Tag- oder anderen Plattform-Veröffentlichungen.
Runner
| Runner | Jobs |
|---|---|
ubuntu-24.04 |
Manueller CI-Dispatch und Fallbacks für nicht kanonische Repositories, CodeQL-JavaScript/Actions-Quality-Scans, Workflow-Sanity, Labeler, Auto-Response, Docs-Workflows außerhalb von CI und Install-Smoke-Preflight, damit die Blacksmith-Matrix früher in die Warteschlange eingereiht werden kann |
blacksmith-4vcpu-ubuntu-2404 |
preflight, security-fast, geringer gewichtete Extension-Shards, checks-fast-core außer QA Smoke CI, Plugin-/Kanalvertrags-Shards, die meisten gebündelten/geringer gewichteten Linux-Node-Shards, check-guards, check-prod-types, check-test-types, ausgewählte check-additional-*-Shards und check-dependencies |
blacksmith-8vcpu-ubuntu-2404 |
Beibehaltene schwere Linux-Node-Suites, boundary-/extension-lastige check-additional-*-Shards und android |
blacksmith-16vcpu-ubuntu-2404 |
QA Smoke CI, build-artifacts in CI und Testbox, check-lint (CPU-empfindlich genug, dass 8 vCPU mehr kosteten, als sie einsparten); Install-Smoke-Docker-Builds (32-vCPU-Warteschlangenzeit kostete mehr, als sie einsparte) |
blacksmith-8vcpu-windows-2025 |
checks-windows |
blacksmith-6vcpu-macos-15 |
macos-node auf openclaw/openclaw; Forks fallen auf macos-15 zurück |
blacksmith-12vcpu-macos-26 |
macos-swift und ios-build auf openclaw/openclaw; Forks fallen auf macos-26 zurück |
Budget für Runner-Registrierungen
OpenClaws aktueller GitHub-Bucket für Runner-Registrierungen meldet 10.000 selbst gehostete
Runner-Registrierungen pro 5 Minuten in ghx api rate_limit. Prüfen Sie
actions_runner_registration vor jedem Tuning-Durchlauf erneut, weil GitHub
diesen Bucket ändern kann. Das Limit wird von allen Blacksmith-Runner-Registrierungen in der
Organisation openclaw geteilt, sodass das Hinzufügen einer weiteren Blacksmith-Installation
keinen neuen Bucket hinzufügt.
Behandeln Sie Blacksmith-Labels als knappe Ressource für Burst-Steuerung. Jobs, die
nur routen, benachrichtigen, zusammenfassen, Shards auswählen oder kurze CodeQL-Scans ausführen, sollten
auf GitHub-gehosteten Runnern bleiben, es sei denn, sie haben gemessene Blacksmith-spezifische
Anforderungen. Jede neue Blacksmith-Matrix, größeres max-parallel oder hochfrequenter
Workflow muss seine Worst-Case-Registrierungsanzahl ausweisen und das organisationsweite
Ziel unter etwa 60 % des Live-Buckets halten. Mit dem aktuellen Bucket von 10.000 Registrierungen
bedeutet das ein Betriebsziel von 6.000 Registrierungen, mit Spielraum für
gleichzeitige Repositories, Wiederholungen und Burst-Überlappung.
Die CI des kanonischen Repositories behält Blacksmith als standardmäßigen Runner-Pfad für normale Push- und Pull-Request-Läufe bei. workflow_dispatch und Läufe in nicht kanonischen Repositories verwenden GitHub-gehostete Runner, aber normale kanonische Läufe prüfen derzeit nicht den Zustand der Blacksmith-Warteschlange und fallen nicht automatisch auf GitHub-gehostete Labels zurück, wenn Blacksmith nicht verfügbar ist.
Lokale Entsprechungen
pnpm changed:lanes # inspect the local changed-lane classifier for origin/main...HEADpnpm check:changed # smart local check gate: changed typecheck/lint/guards by boundary lanepnpm check # fast local gate: prod tsgo + sharded lint + parallel fast guardspnpm check:test-typespnpm check:timed # same gate with per-stage timingspnpm build:strict-smokepnpm check:architecturepnpm test:gateway:watch-regressionOPENCLAW_TUI_PTY_INCLUDE_LOCAL=1 node scripts/run-vitest.mjs run --config test/vitest/vitest.tui-pty.config.tspnpm test # vitest testspnpm test:changed # cheap smart changed Vitest targetspnpm test:channelspnpm test:contracts:channelspnpm check:docs # docs format + lint + broken linkspnpm build # build dist when CI artifact/smoke checks matterpnpm ios:build # generate and build the iOS app projectpnpm ci:timings # summarize the latest origin/main push CI runpnpm ci:timings:recent # compare recent successful main CI runsnode scripts/ci-run-timings.mjs <run-id> # summarize wall time, queue time, and slowest jobsnode scripts/ci-run-timings.mjs --latest-main # ignore issue/comment noise and choose origin/main push CInode scripts/ci-run-timings.mjs --recent 10 # compare recent successful main CI runspnpm test:perf:groups --full-suite --allow-failures --output .artifacts/test-perf/baseline-before.jsonpnpm test:perf:groups:compare .artifacts/test-perf/baseline-before.json .artifacts/test-perf/after-agent.jsonpnpm test:startup:memorypnpm test:extensions:memory -- --json .artifacts/openclaw-performance/source/mock-provider/extension-memory.jsonpnpm perf:kova:summary --report .artifacts/kova/reports/mock-provider/report.json --output .artifacts/kova/summary.mdOpenClaw Performance
OpenClaw Performance ist der Workflow für Produkt- und Laufzeit-Performance. Er läuft täglich auf main und kann manuell ausgelöst werden:
gh workflow run openclaw-performance.yml --ref main -f profile=diagnostic -f repeat=3gh workflow run openclaw-performance.yml --ref main -f profile=smoke -f repeat=1 -f deep_profile=true -f live_openai_candidate=truegh workflow run openclaw-performance.yml --ref main -f target_ref=v2026.5.2 -f profile=diagnostic -f repeat=3Ein manueller Dispatch benchmarkt normalerweise den Workflow-Ref. Setzen Sie target_ref, um ein Release-Tag oder einen anderen Branch mit der aktuellen Workflow-Implementierung zu benchmarken. Veröffentlichte Berichtspfade und Latest-Zeiger werden nach dem getesteten Ref geschlüsselt, und jede index.md zeichnet den getesteten Ref/SHA, Workflow-Ref/SHA, Kova-Ref, das Profil, den Lane-Auth-Modus, das Modell, die Wiederholungsanzahl und Szenariofilter auf.
Der Workflow installiert OCM aus einem gepinnten Release und Kova aus openclaw/Kova mit dem gepinnten Eingabewert kova_ref und führt dann drei Lanes aus:
mock-provider: Kova-Diagnoseszenarien gegen eine lokal gebaute Laufzeit mit deterministischer gefälschter OpenAI-kompatibler Authentifizierung.mock-deep-profile: CPU-/Heap-/Trace-Profiling für Start-, Gateway- und Agent-Turn-Hotspots.live-openai-candidate: ein echter OpenAI-openai/gpt-5.5-Agent-Turn, der übersprungen wird, wennOPENAI_API_KEYnicht verfügbar ist.
Die mock-provider-Lane führt nach dem Kova-Durchlauf außerdem OpenClaw-native Source-Probes aus: Gateway-Startzeit und Speicher über Standard-, Hook- und 50-Plugin-Startfälle hinweg; RSS für importierte gebündelte Plugins, wiederholte Mock-OpenAI-channel-chat-baseline-Hello-Loops, CLI-Startbefehle gegen das gestartete Gateway und die SQLite-State-Smoke-Performance-Probe. Wenn der zuvor veröffentlichte mock-provider-Source-Bericht für den getesteten Ref verfügbar ist, vergleicht die Source-Zusammenfassung aktuelle RSS- und Heap-Werte mit dieser Baseline und markiert große RSS-Anstiege als watch. Die Markdown-Zusammenfassung der Source-Probe liegt im Berichtsbundle unter source/index.md, daneben befindet sich das rohe JSON.
Jede Lane lädt GitHub-Artefakte hoch. Wenn CLAWGRIT_REPORTS_TOKEN konfiguriert ist, committet der Workflow außerdem report.json, report.md, Bundles, index.md und Source-Probe-Artefakte nach openclaw/clawgrit-reports unter openclaw-performance/<tested-ref>/<run-id>-<attempt>/<lane>/. Der aktuelle Zeiger für den getesteten Ref wird als openclaw-performance/<tested-ref>/latest-<lane>.json geschrieben.
Vollständige Release-Validierung
Full Release Validation ist der manuelle Umbrella-Workflow für „alles vor dem Release ausführen“. Er akzeptiert einen Branch, ein Tag oder eine vollständige Commit-SHA, löst den manuellen CI-Workflow mit diesem Ziel aus, löst Plugin Prerelease für release-spezifische Plugin-/Paket-/statische/Docker-Nachweise aus und löst OpenClaw Release Checks für Install-Smoke, Paketakzeptanz, paketierte Cross-OS-Prüfungen, Maturity-Scorecard-Rendering aus QA-Profile-Evidence, QA-Lab-Parität, Matrix- und Telegram-Lanes aus. Stable- und Full-Profile enthalten immer vollständige Live-/E2E- und Docker-Release-Pfad-Soak-Abdeckung; das Beta-Profil kann sie mit run_release_soak=true aktivieren. Das kanonische Paket-Telegram-E2E läuft innerhalb von Package Acceptance, daher startet ein vollständiger Kandidat keinen doppelten Live-Poller. Übergeben Sie nach der Veröffentlichung release_package_spec, um das ausgelieferte npm-Paket über Release-Checks, Package Acceptance, Docker, Cross-OS und Telegram hinweg wiederzuverwenden, ohne neu zu bauen. Verwenden Sie npm_telegram_package_spec nur für einen fokussierten Telegram-Rerun mit veröffentlichtem Paket. Die Live-Paket-Lane des Codex-Plugins verwendet standardmäßig denselben ausgewählten Zustand: Ein veröffentlichtes release_package_spec=openclaw@<tag> leitet codex_plugin_spec=npm:@openclaw/codex@<tag> ab, während SHA-/Artefaktläufe extensions/codex aus dem ausgewählten Ref packen. Setzen Sie codex_plugin_spec explizit für benutzerdefinierte Plugin-Quellen wie npm:-, npm-pack:- oder git:-Specs.
Siehe Vollständige Release-Validierung für die Stage-Matrix, exakte Workflow-Jobnamen, Profilunterschiede, Artefakte und Handles für fokussierte Reruns.
OpenClaw Release Publish ist der manuelle mutierende Release-Workflow. Lösen Sie ihn
von release/YYYY.M.PATCH oder main aus, nachdem das Release-Tag existiert und nachdem der
OpenClaw-npm-Preflight erfolgreich war. Er verifiziert pnpm plugins:sync:check,
löst Plugin NPM Release für alle veröffentlichbaren Plugin-Pakete aus, löst
Plugin ClawHub Release für dieselbe Release-SHA aus und löst erst dann
OpenClaw NPM Release mit der gespeicherten preflight_run_id aus. Stable-Publish erfordert außerdem
ein exaktes windows_node_tag; der Workflow verifiziert das Windows-Source-
Release und vergleicht seine x64-/ARM64-Installer mit der vom Kandidaten genehmigten
Eingabe windows_node_installer_digests vor jedem Publish-Child, bewirbt und
verifiziert dann dieselben gepinnten Installer-Digests plus das exakte Begleit-Asset
und den Prüfsummenvertrag, bevor der GitHub-Release-Entwurf veröffentlicht wird.
gh workflow run openclaw-release-publish.yml \ --ref release/YYYY.M.PATCH \ -f tag=vYYYY.M.PATCH-beta.N \ -f preflight_run_id=<successful-openclaw-npm-preflight-run-id> \ -f full_release_validation_run_id=<successful-full-release-validation-run-id> \ -f npm_dist_tag=betaFür Nachweise mit gepinntem Commit auf einem sich schnell bewegenden Branch verwenden Sie den Helper statt
gh workflow run ... --ref main -f ref=<sha>:
pnpm ci:full-release --sha <full-sha>GitHub-Workflow-Dispatch-Refs müssen Branches oder Tags sein, keine rohen Commit-SHAs. Der
Helper pusht einen temporären release-ci/<sha>-...-Branch an der Ziel-SHA,
löst Full Release Validation von diesem gepinnten Ref aus, verifiziert, dass jeder Child-
Workflow-headSha dem Ziel entspricht, und löscht den temporären Branch, wenn der
Run abgeschlossen ist. Der Umbrella-Verifier schlägt ebenfalls fehl, wenn ein Child-Workflow mit einer
anderen SHA lief.
release_profile steuert die Live-/Provider-Breite, die an Release-Checks übergeben wird. Die
manuellen Release-Workflows verwenden standardmäßig stable; verwenden Sie full nur, wenn Sie
absichtlich die breite advisory Provider-/Medien-Matrix wünschen. Stable- und Full-
Release-Checks führen immer den vollständigen Live-/E2E- und Docker-Release-Pfad-Soak aus;
das Beta-Profil kann ihn mit run_release_soak=true aktivieren.
minimumbehält die schnellsten OpenAI-/Core-releasekritischen Lanes.stableergänzt den stabilen Provider-/Backend-Satz.fullführt die breite advisory Provider-/Medien-Matrix aus.
Der Umbrella zeichnet die ausgelösten Child-Run-IDs auf, und der finale Job Verify full validation prüft die aktuellen Child-Run-Ergebnisse erneut und hängt Tabellen der langsamsten Jobs für jeden Child-Run an. Wenn ein Child-Workflow erneut ausgeführt wird und grün wird, führen Sie nur den Parent-Verifier-Job erneut aus, um das Umbrella-Ergebnis und die Timing-Zusammenfassung zu aktualisieren.
Für die Wiederherstellung akzeptieren sowohl Full Release Validation als auch OpenClaw Release Checks rerun_group. Verwenden Sie all für einen Release-Kandidaten, ci nur für das normale Full-CI-Child, plugin-prerelease nur für das Plugin-Prerelease-Child, release-checks für jedes Release-Child oder eine schmalere Gruppe: install-smoke, cross-os, live-e2e, package, qa, qa-parity, qa-live oder npm-telegram auf dem Umbrella. So bleibt der Rerun einer fehlgeschlagenen Release-Box nach einem fokussierten Fix begrenzt. Kombinieren Sie für eine fehlgeschlagene Cross-OS-Lane rerun_group=cross-os mit cross_os_suite_filter, zum Beispiel windows/packaged-upgrade; lange Cross-OS-Befehle geben Heartbeat-Zeilen aus, und packaged-upgrade-Zusammenfassungen enthalten Timings pro Phase. QA-Release-Check-Lanes sind advisory, mit Ausnahme des standardmäßigen Runtime-Tool-Coverage-Gates, das blockiert, wenn erforderliche dynamische OpenClaw-Tools vom Standard-Tier-Summary abweichen oder daraus verschwinden.
OpenClaw Release Checks verwendet den vertrauenswürdigen Workflow-Ref, um den ausgewählten Ref einmal in einen release-package-under-test-Tarball aufzulösen, und übergibt dieses Artefakt dann an Cross-OS-Prüfungen und Package Acceptance sowie an den Live-/E2E-Release-Pfad-Docker-Workflow, wenn Soak-Abdeckung läuft. Dadurch bleiben die Paketbytes über Release-Boxen hinweg konsistent, und dasselbe Kandidatenpaket muss nicht in mehreren Child-Jobs erneut gepackt werden. Für die Live-Lane des Codex-npm-Plugins übergeben Release-Checks entweder eine passende veröffentlichte Plugin-Spec, die aus release_package_spec abgeleitet wird, übergeben die vom Operator bereitgestellte codex_plugin_spec oder lassen die Eingabe leer, damit das Docker-Skript das Codex-Plugin des ausgewählten Checkouts packt.
Doppelte Full Release Validation-Runs für ref=main und rerun_group=all
ersetzen den älteren Umbrella. Der Parent-Monitor bricht jeden Child-Workflow ab, den er
bereits ausgelöst hat, wenn der Parent abgebrochen wird, sodass neuere Main-Validierung
nicht hinter einem veralteten zweistündigen Release-Check-Run wartet. Release-Branch-/Tag-
Validierung und fokussierte Rerun-Gruppen behalten cancel-in-progress: false.
Live- und E2E-Shards
Das Release-Live-/E2E-Child behält breite native pnpm test:live-Abdeckung bei, führt sie jedoch als benannte Shards über scripts/test-live-shard.mjs statt als einen seriellen Job aus:
native-live-src-agentsnative-live-src-gateway-core- Provider-gefilterte
native-live-src-gateway-profiles-Jobs native-live-src-gateway-backendsnative-live-testnative-live-extensions-a-knative-live-extensions-l-nnative-live-extensions-openainative-live-extensions-o-z-othernative-live-extensions-xai- getrennte Medien-Audio-/Video-Shards und Provider-gefilterte Musik-Shards
Das behält dieselbe Dateiabdeckung bei und macht langsame Live-Provider-Fehler leichter erneut ausführbar und diagnostizierbar. Die aggregierten Shard-Namen native-live-extensions-o-z, native-live-extensions-media und native-live-extensions-media-music bleiben für manuelle One-Shot-Reruns gültig.
Die nativen Live-Media-Shards laufen in ghcr.io/openclaw/openclaw-live-media-runner:ubuntu-24.04, gebaut vom Workflow Live Media Runner Image. Dieses Image installiert ffmpeg und ffprobe vor; Media-Jobs verifizieren vor dem Setup nur die Binärdateien. Belassen Sie Docker-gestützte Live-Suites auf normalen Blacksmith-Runnern — Container-Jobs sind der falsche Ort, um verschachtelte Docker-Tests zu starten.
Docker-gestützte Live-Modell-/Backend-Shards verwenden pro ausgewähltem Commit ein separates gemeinsames Image ghcr.io/openclaw/openclaw-live-test:<sha>. Der Live-Release-Workflow baut und veröffentlicht dieses Image einmal; anschließend laufen die Docker-Shards für Live-Modell, Provider-geshardeten Gateway, CLI-Backend, ACP-Bind und Codex-Harness mit OPENCLAW_SKIP_DOCKER_BUILD=1. Gateway-Docker-Shards tragen explizite Script-Level-timeout-Obergrenzen unterhalb des Workflow-Job-Timeouts, damit ein hängender Container oder Bereinigungspfad schnell fehlschlägt, statt das gesamte Budget der Release-Prüfung zu verbrauchen. Wenn diese Shards das vollständige Quell-Docker-Ziel unabhängig neu bauen, ist der Release-Lauf falsch konfiguriert und verschwendet Laufzeit durch doppelte Image-Builds.
Paketabnahme
Verwenden Sie Package Acceptance, wenn die Frage lautet: „Funktioniert dieses installierbare OpenClaw-Paket als Produkt?“ Sie unterscheidet sich von normaler CI: Normale CI validiert den Quellbaum, während die Paketabnahme einen einzelnen Tarball über dasselbe Docker-E2E-Harness validiert, das Benutzer nach Installation oder Aktualisierung ausführen.
Jobs
resolve_packagechecktworkflow_refaus, löst einen Paketkandidaten auf, schreibt.artifacts/docker-e2e-package/openclaw-current.tgz, schreibt.artifacts/docker-e2e-package/package-candidate.json, lädt beide als Artefaktpackage-under-testhoch und gibt Quelle, Workflow-Ref, Paket-Ref, Version, SHA-256 und Profil in der GitHub-Schrittzusammenfassung aus.docker_acceptanceruftopenclaw-live-and-e2e-checks-reusable.ymlmitref=workflow_refundpackage_artifact_name=package-under-testauf. Der wiederverwendbare Workflow lädt dieses Artefakt herunter, validiert das Tarball-Inventar, bereitet bei Bedarf Docker-Images mit Paket-Digest vor und führt die ausgewählten Docker-Lanes gegen dieses Paket aus, statt den Workflow-Checkout zu packen. Wenn ein Profil mehrere gezieltedocker_lanesauswählt, bereitet der wiederverwendbare Workflow das Paket und die gemeinsamen Images einmal vor und fächert diese Lanes anschließend als parallele gezielte Docker-Jobs mit eindeutigen Artefakten auf.package_telegramruft optionalNPM Telegram Beta E2Eauf. Es läuft, wenntelegram_modenichtnoneist, und installiert dasselbe Artefaktpackage-under-test, wenn die Paketabnahme eines aufgelöst hat; eigenständige Telegram-Dispatches können weiterhin eine veröffentlichte npm-Spezifikation installieren.summarylässt den Workflow fehlschlagen, wenn die Paketauflösung, die Docker-Abnahme oder die optionale Telegram-Lane fehlgeschlagen ist.
Kandidatenquellen
source=npmakzeptiert nuropenclaw@beta,openclaw@latestoder eine exakte OpenClaw-Release-Version wieopenclaw@2026.4.27-beta.2. Verwenden Sie dies für die Abnahme veröffentlichter Vorab-/stabiler Releases.source=refpackt einen vertrauenswürdigenpackage_ref-Branch, -Tag oder vollständigen Commit-SHA. Der Resolver ruft OpenClaw-Branches/-Tags ab, überprüft, ob der ausgewählte Commit aus der Repository-Branch-Historie oder einem Release-Tag erreichbar ist, installiert Abhängigkeiten in einem abgekoppelten Worktree und packt ihn mitscripts/package-openclaw-for-docker.mjs.source=urllädt eine öffentliche HTTPS-.tgzherunter;package_sha256ist erforderlich. Dieser Pfad lehnt URL-Zugangsdaten, nicht standardmäßige HTTPS-Ports, private/interne/spezialverwendete Hostnamen oder aufgelöste IPs sowie Weiterleitungen außerhalb derselben öffentlichen Sicherheitsrichtlinie ab.source=trusted-urllädt eine HTTPS-.tgzaus einer benannten Trusted-Source-Richtlinie in.github/package-trusted-sources.jsonherunter;package_sha256undtrusted_source_idsind erforderlich. Verwenden Sie dies nur für maintainer-eigene Unternehmens-Mirrors oder private Paket-Repositorys, die konfigurierte Hosts, Ports, Pfadpräfixe, Weiterleitungs-Hosts oder Private-Network-Auflösung benötigen. Wenn die Richtlinie Bearer-Auth deklariert, verwendet der Workflow das feste SecretOPENCLAW_TRUSTED_PACKAGE_TOKEN; in URLs eingebettete Zugangsdaten werden weiterhin abgelehnt.source=artifactlädt eine.tgzausartifact_run_idundartifact_nameherunter;package_sha256ist optional, sollte aber für extern geteilte Artefakte angegeben werden.
Halten Sie workflow_ref und package_ref getrennt. workflow_ref ist der vertrauenswürdige Workflow-/Harness-Code, der den Test ausführt. package_ref ist der Quell-Commit, der bei source=ref gepackt wird. Dadurch kann das aktuelle Test-Harness ältere vertrauenswürdige Quell-Commits validieren, ohne alte Workflow-Logik auszuführen.
Suite-Profile
smoke—npm-onboard-channel-agent,gateway-network,config-reloadpackage—npm-onboard-channel-agent,doctor-switch,update-channel-switch,skill-install,update-corrupt-plugin,upgrade-survivor,published-upgrade-survivor,update-restart-auth,plugins-offline,plugin-updateproduct—packageplusmcp-channels,cron-mcp-cleanup,openai-web-search-minimal,openwebuifull— vollständige Docker-Release-Pfad-Blöcke mit OpenWebUIcustom— exaktedocker_lanes; erforderlich, wennsuite_profile=custom
Das Profil package verwendet Offline-Plugin-Abdeckung, damit die Validierung veröffentlichter Pakete nicht von Live-ClawHub-Verfügbarkeit abhängt. Die optionale Telegram-Lane verwendet das Artefakt package-under-test in NPM Telegram Beta E2E wieder; der Pfad mit veröffentlichter npm-Spezifikation bleibt für eigenständige Dispatches erhalten.
Die dedizierte Richtlinie für Update- und Plugin-Tests, einschließlich lokaler Befehle, Docker-Lanes, Eingaben für Paketabnahme, Release-Standards und Fehlert triage, finden Sie unter Updates und Plugins testen.
Release-Prüfungen rufen die Paketabnahme mit source=artifact, dem vorbereiteten Release-Paketartefakt, suite_profile=custom, docker_lanes='doctor-switch update-channel-switch skill-install update-corrupt-plugin upgrade-survivor published-upgrade-survivor update-restart-auth plugins-offline plugin-update' und telegram_mode=mock-openai auf. Damit bleiben Paketmigration, Update, Live-ClawHub-Skill-Installation, Bereinigung veralteter Plugin-Abhängigkeiten, Reparatur der Installation konfigurierter Plugins, Offline-Plugin, Plugin-Update und Telegram-Nachweis auf demselben aufgelösten Paket-Tarball. Setzen Sie release_package_spec bei Full Release Validation oder OpenClaw Release Checks nach der Veröffentlichung einer Beta, um dieselbe Matrix gegen das ausgelieferte npm-Paket ohne Neubau auszuführen; setzen Sie package_acceptance_package_spec nur, wenn die Paketabnahme ein anderes Paket als die restliche Release-Validierung benötigt. Cross-OS-Release-Prüfungen decken weiterhin betriebssystemspezifisches Onboarding, Installer- und Plattformverhalten ab; die Produktvalidierung für Paket/Update sollte mit der Paketabnahme beginnen. Die Docker-Lane published-upgrade-survivor validiert im blockierenden Release-Pfad pro Lauf eine veröffentlichte Paket-Baseline. In der Paketabnahme ist der aufgelöste Tarball package-under-test immer der Kandidat, und published_upgrade_survivor_baseline wählt die veröffentlichte Fallback-Baseline aus, standardmäßig openclaw@latest; Befehle zum erneuten Ausführen fehlgeschlagener Lanes bewahren diese Baseline. Full Release Validation mit run_release_soak=true oder release_profile=full setzt published_upgrade_survivor_baselines='last-stable-4 2026.4.23 2026.5.2 2026.4.15' und published_upgrade_survivor_scenarios=reported-issues, um über die vier neuesten stabilen npm-Releases plus festgelegte Plugin-Kompatibilitäts-Grenzreleases und issue-förmige Fixtures für Feishu-Konfiguration, erhaltene Bootstrap-/Persona-Dateien, konfigurierte OpenClaw-Plugin-Installationen, Tilde-Logpfade und veraltete Legacy-Plugin-Abhängigkeitswurzeln zu erweitern. Multi-Baseline-Auswahlen für Published-Upgrade-Survivor werden nach Baseline in separate gezielte Docker-Runner-Jobs geshardet. Der separate Workflow Update Migration verwendet die Docker-Lane update-migration mit all-since-2026.4.23 und plugin-deps-cleanup, wenn es um umfassende veröffentlichte Update-Bereinigung geht, nicht um die normale Breite der Full Release CI. Lokale aggregierte Läufe können exakte Paketspezifikationen mit OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS übergeben, mit OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC wie openclaw@2026.4.15 eine einzelne Lane beibehalten oder OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS für die Szenario-Matrix setzen. Die veröffentlichte Lane konfiguriert die Baseline mit einem eingebetteten openclaw config set-Befehlsrezept, zeichnet Rezeptschritte in summary.json auf und prüft /healthz, /readyz sowie den RPC-Status nach dem Gateway-Start. Die frischen Windows-Lanes für gepackte Pakete und Installer verifizieren außerdem, dass ein installiertes Paket ein Browser-Control-Override aus einem rohen absoluten Windows-Pfad importieren kann. Der Cross-OS-Agent-Turn-Smoke für OpenAI verwendet standardmäßig OPENCLAW_CROSS_OS_OPENAI_MODEL, wenn gesetzt, andernfalls openai/gpt-5.5, sodass Installations- und Gateway-Nachweis auf einem GPT-5-Testmodell bleiben und GPT-4.x-Standards vermieden werden.
Legacy-Kompatibilitätsfenster
Die Paketabnahme hat begrenzte Legacy-Kompatibilitätsfenster für bereits veröffentlichte Pakete. Pakete bis einschließlich 2026.4.25, einschließlich 2026.4.25-beta.*, dürfen den Kompatibilitätspfad verwenden:
- bekannte private QA-Einträge in
dist/postinstall-inventory.jsondürfen auf im Tarball ausgelassene Dateien zeigen; doctor-switchdarf den Persistenz-Unterfallgateway install --wrapperüberspringen, wenn das Paket dieses Flag nicht bereitstellt;update-channel-switchdarf fehlende pnpm-patchedDependenciesaus dem vom Tarball abgeleiteten Fake-Git-Fixture entfernen und fehlendes persistiertesupdate.channelprotokollieren;- Plugin-Smokes dürfen Legacy-Installationsdatensatzspeicherorte lesen oder fehlende Marketplace-Persistenz von Installationsdatensätzen akzeptieren;
plugin-updatedarf die Migration von Konfigurationsmetadaten erlauben, muss aber weiterhin verlangen, dass Installationsdatensatz und Verhalten ohne Neuinstallation unverändert bleiben.
Das veröffentlichte Paket 2026.4.26 darf außerdem Warnungen für lokale Build-Metadaten-Stempeldateien ausgeben, die bereits ausgeliefert wurden. Spätere Pakete müssen die modernen Verträge erfüllen; dieselben Bedingungen schlagen fehl, statt zu warnen oder zu überspringen.
Beispiele
# Validate the current beta package with product-level coverage.gh workflow run package-acceptance.yml \ --ref main \ -f workflow_ref=main \ -f source=npm \ -f package_spec=openclaw@beta \ -f suite_profile=product \ -f telegram_mode=mock-openai # Pack and validate a release branch with the current harness.gh workflow run package-acceptance.yml \ --ref main \ -f workflow_ref=main \ -f source=ref \ -f package_ref=release/YYYY.M.PATCH \ -f suite_profile=package \ -f telegram_mode=mock-openai # Validate a tarball URL. SHA-256 is mandatory for source=url.gh workflow run package-acceptance.yml \ --ref main \ -f workflow_ref=main \ -f source=url \ -f package_url=https://example.com/openclaw-current.tgz \ -f package_sha256=<64-char-sha256> \ -f suite_profile=smoke # Validate a tarball from a named trusted private mirror policy.gh workflow run package-acceptance.yml \ --ref main \ -f workflow_ref=main \ -f source=trusted-url \ -f trusted_source_id=enterprise-artifactory \ -f package_url=https://packages.example.internal:8443/artifactory/openclaw/openclaw-current.tgz \ -f package_sha256=<64-char-sha256> \ -f suite_profile=smoke # Reuse a tarball uploaded by another Actions run.gh workflow run package-acceptance.yml \ --ref main \ -f workflow_ref=main \ -f source=artifact \ -f artifact_run_id=<run-id> \ -f artifact_name=package-under-test \ -f suite_profile=custom \ -f docker_lanes='install-e2e plugin-update'Beginnen Sie beim Debuggen eines fehlgeschlagenen Paketabnahmelaufs mit der Zusammenfassung von resolve_package, um Paketquelle, Version und SHA-256 zu bestätigen. Prüfen Sie anschließend den untergeordneten Lauf docker_acceptance und seine Docker-Artefakte: .artifacts/docker-tests/**/summary.json, failures.json, Lane-Logs, Phasenzeiten und Befehle zum erneuten Ausführen. Führen Sie bevorzugt das fehlgeschlagene Paketprofil oder die exakten Docker-Lanes erneut aus, statt die vollständige Release-Validierung erneut auszuführen.
Installations-Smoke-Test
Der separate Workflow Install Smoke verwendet dasselbe Scope-Script über seinen eigenen Job preflight wieder. Er teilt die Smoke-Abdeckung in run_fast_install_smoke und run_full_install_smoke auf.
- Schneller Pfad wird für Pull Requests ausgeführt, die Docker-/Paketoberflächen, Änderungen an Paket/Manifest gebündelter Plugins oder Kernoberflächen für Plugins/Kanäle/Gateway/Plugin SDK berühren, die von den Docker-Smoke-Jobs geprüft werden. Reine Quellcodeänderungen an gebündelten Plugins, reine Teständerungen und reine Dokumentationsänderungen reservieren keine Docker-Worker. Der schnelle Pfad baut das Root-Dockerfile-Image einmal, prüft die CLI, führt den CLI-Smoke für das Löschen des gemeinsamen Arbeitsbereichs durch Agenten aus, führt das Container-Gateway-Netzwerk-E2E aus, verifiziert ein Build-Argument für gebündelte Erweiterungen und führt das begrenzte Docker-Profil für gebündelte Plugins unter einem aggregierten Befehls-Timeout von 240 Sekunden aus (jeder Docker-Lauf eines Szenarios ist separat begrenzt).
- Vollständiger Pfad behält die QR-Paketinstallation sowie die Docker-/Update-Abdeckung des Installationsprogramms für nächtlich geplante Läufe, manuelle Auslösungen, Release-Prüfungen per Workflow-Aufruf und Pull Requests bei, die wirklich Installationsprogramm-/Paket-/Docker-Oberflächen berühren. Im vollständigen Modus bereitet install-smoke ein GHCR-Root-Dockerfile-Smoke-Image für die Ziel-SHA vor oder verwendet es wieder und führt dann QR-Paketinstallation, Root-Dockerfile-/Gateway-Smokes, Installationsprogramm-/Update-Smokes und das schnelle Docker-E2E für gebündelte Plugins als separate Jobs aus, damit Installationsprogrammarbeit nicht hinter den Root-Image-Smokes warten muss.
main-Pushes (einschließlich Merge-Commits) erzwingen nicht den vollständigen Pfad; wenn die Logik für den geänderten Umfang bei einem Push vollständige Abdeckung anfordern würde, behält der Workflow den schnellen Docker-Smoke bei und überlässt den vollständigen Install-Smoke der nächtlichen oder Release-Validierung.
Der langsame Bun-Smoke für die globale Installation des Image-Providers wird separat durch run_bun_global_install_smoke gesteuert. Er läuft im nächtlichen Zeitplan und aus dem Release-Checks-Workflow, und manuelle Install Smoke-Auslösungen können ihn aktivieren, Pull Requests und main-Pushes jedoch nicht. Normale PR-CI führt weiterhin die schnelle Bun-Launcher-Regressions-Lane für Node-relevante Änderungen aus. QR- und Installationsprogramm-Docker-Tests behalten ihre eigenen installationsfokussierten Dockerfiles.
Lokales Docker-E2E
pnpm test:docker:all baut ein gemeinsam genutztes Live-Test-Image vor, packt OpenClaw einmal als npm-Tarball und baut zwei gemeinsam genutzte scripts/e2e/Dockerfile-Images:
- einen reinen Node-/Git-Runner für Installationsprogramm-/Update-/Plugin-Abhängigkeits-Lanes;
- ein funktionales Image, das denselben Tarball für normale Funktions-Lanes in
/appinstalliert.
Docker-Lane-Definitionen befinden sich in scripts/lib/docker-e2e-scenarios.mjs, die Planerlogik befindet sich in scripts/lib/docker-e2e-plan.mjs, und der Runner führt nur den ausgewählten Plan aus. Der Scheduler wählt das Image pro Lane mit OPENCLAW_DOCKER_E2E_BARE_IMAGE und OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE aus und führt Lanes dann mit OPENCLAW_SKIP_DOCKER_BUILD=1 aus.
Stellschrauben
| Variable | Standard | Zweck |
|---|---|---|
OPENCLAW_DOCKER_ALL_PARALLELISM |
10 | Slot-Anzahl des Haupt-Pools für normale Lanes. |
OPENCLAW_DOCKER_ALL_TAIL_PARALLELISM |
10 | Slot-Anzahl des Provider-sensitiven Tail-Pools. |
OPENCLAW_DOCKER_ALL_LIVE_LIMIT |
9 | Obergrenze für gleichzeitige Live-Lanes, damit Provider nicht drosseln. |
OPENCLAW_DOCKER_ALL_NPM_LIMIT |
5 | Obergrenze für gleichzeitige npm-Installations-Lanes. |
OPENCLAW_DOCKER_ALL_SERVICE_LIMIT |
7 | Obergrenze für gleichzeitige Multi-Service-Lanes. |
OPENCLAW_DOCKER_ALL_START_STAGGER_MS |
2000 | Staffelung zwischen Lane-Starts, um Docker-Daemon-Erstellungsstürme zu vermeiden; setzen Sie 0 für keine Staffelung. |
OPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS |
7200000 | Fallback-Timeout pro Lane (120 Minuten); ausgewählte Live-/Tail-Lanes verwenden engere Grenzen. |
OPENCLAW_DOCKER_ALL_DRY_RUN |
unset | 1 gibt den Scheduler-Plan aus, ohne Lanes auszuführen. |
OPENCLAW_DOCKER_ALL_LANES |
unset | Kommagetrennte exakte Lane-Liste; überspringt den Cleanup-Smoke, damit Agenten eine fehlgeschlagene Lane reproduzieren können. |
Eine Lane, die schwerer als ihre effektive Grenze ist, kann trotzdem aus einem leeren Pool starten und läuft dann allein, bis sie Kapazität freigibt. Der lokale Aggregatlauf prüft Docker vorab, entfernt veraltete OpenClaw-E2E-Container, gibt den Status aktiver Lanes aus, speichert Lane-Zeiten für die Längste-zuerst-Reihenfolge und plant standardmäßig nach dem ersten Fehler keine neuen Pool-Lanes mehr ein.
Wiederverwendbarer Live-/E2E-Workflow
Der wiederverwendbare Live-/E2E-Workflow fragt scripts/test-docker-all.mjs --plan-json, welche Paket-, Image-Art-, Live-Image-, Lane- und Zugangsdatenabdeckung erforderlich ist. scripts/docker-e2e.mjs wandelt diesen Plan anschließend in GitHub-Ausgaben und Zusammenfassungen um. Er packt OpenClaw entweder über scripts/package-openclaw-for-docker.mjs, lädt ein Paketartefakt des aktuellen Laufs herunter oder lädt ein Paketartefakt aus package_artifact_run_id herunter; validiert das Tarball-Inventar; baut und pusht paket-digest-getaggte Bare-/Functional-GHCR-Docker-E2E-Images über Blacksmiths Docker-Layer-Cache, wenn der Plan paketinstallierte Lanes benötigt; und verwendet bereitgestellte Eingaben docker_e2e_bare_image/docker_e2e_functional_image oder vorhandene Paket-Digest-Images wieder, statt neu zu bauen. Docker-Image-Pulls werden mit einem begrenzten Timeout von 180 Sekunden pro Versuch wiederholt, sodass ein hängender Registry-/Cache-Stream schnell erneut versucht wird, statt den Großteil des kritischen CI-Pfads zu verbrauchen.
Release-Pfad-Chunks
Release-Docker-Abdeckung läuft in kleineren Chunk-Jobs mit OPENCLAW_SKIP_DOCKER_BUILD=1, sodass jeder Chunk nur die benötigte Image-Art zieht und mehrere Lanes über denselben gewichteten Scheduler ausführt:
OPENCLAW_DOCKER_ALL_PROFILE=release-pathOPENCLAW_DOCKER_ALL_CHUNK=core | package-update-openai | package-update-anthropic | package-update-core | plugins-runtime-plugins | plugins-runtime-services | plugins-runtime-install-a..h
Aktuelle Release-Docker-Chunks sind core, package-update-openai, package-update-anthropic, package-update-core, plugins-runtime-plugins, plugins-runtime-services sowie plugins-runtime-install-a bis plugins-runtime-install-h. package-update-openai enthält die Live-Lane für das Codex-Plugin-Paket, die das Kandidatenpaket von OpenClaw installiert, das Codex-Plugin aus codex_plugin_spec oder einem Tarball derselben Referenz mit ausdrücklicher Genehmigung zur Codex-CLI-Installation installiert, die Codex-CLI-Vorprüfung ausführt und anschließend mehrere OpenClaw-Agenten-Turns in derselben Sitzung gegen OpenAI ausführt. plugins-runtime-core, plugins-runtime und plugins-integrations bleiben aggregierte Plugin-/Runtime-Aliase. Der Lane-Alias install-e2e bleibt der aggregierte manuelle Wiederholungslauf-Alias für beide Provider-Installationsprogramm-Lanes.
OpenWebUI wird in plugins-runtime-services eingebunden, wenn vollständige Release-Pfad-Abdeckung es anfordert, und behält einen eigenständigen openwebui-Chunk nur für reine OpenWebUI-Auslösungen. Update-Lanes für gebündelte Kanäle versuchen bei transienten npm-Netzwerkfehlern einmal erneut.
Jeder Chunk lädt .artifacts/docker-tests/ mit Lane-Logs, Zeitmessungen, summary.json, failures.json, Phasenzeiten, Scheduler-Plan-JSON, Tabellen langsamer Lanes und Wiederholungslaufbefehlen pro Lane hoch. Die Workflow-Eingabe docker_lanes führt ausgewählte Lanes gegen die vorbereiteten Images statt der Chunk-Jobs aus. Dadurch bleibt das Debugging fehlgeschlagener Lanes auf einen gezielten Docker-Job begrenzt und das Paketartefakt für diesen Lauf wird vorbereitet, heruntergeladen oder wiederverwendet; wenn eine ausgewählte Lane eine Live-Docker-Lane ist, baut der gezielte Job das Live-Test-Image lokal für diesen Wiederholungslauf. Generierte GitHub-Wiederholungslaufbefehle pro Lane enthalten package_artifact_run_id, package_artifact_name und vorbereitete Image-Eingaben, wenn diese Werte vorhanden sind, sodass eine fehlgeschlagene Lane exakt das Paket und die Images aus dem fehlgeschlagenen Lauf wiederverwenden kann.
pnpm test:docker:rerun <run-id> # download Docker artifacts and print combined/per-lane targeted rerun commandspnpm test:docker:timings <summary> # slow-lane and phase critical-path summariesDer geplante Live-/E2E-Workflow führt die vollständige Release-Pfad-Docker-Suite täglich aus.
Plugin-Vorabrelease
Plugin Prerelease ist teurere Produkt-/Paketabdeckung und daher ein separater Workflow, der von Full Release Validation oder durch einen ausdrücklichen Operator ausgelöst wird. Normale Pull Requests, main-Pushes und eigenständige manuelle CI-Auslösungen lassen diese Suite deaktiviert. Er verteilt Tests gebündelter Plugins auf acht Erweiterungs-Worker; diese Erweiterungs-Shard-Jobs führen bis zu zwei Plugin-Konfigurationsgruppen gleichzeitig mit einem Vitest-Worker pro Gruppe und größerem Node-Heap aus, damit importlastige Plugin-Batches keine zusätzlichen CI-Jobs erzeugen. Der reine Release-Docker-Vorabrelease-Pfad bündelt gezielte Docker-Lanes in kleinen Gruppen, um nicht Dutzende Runner für Jobs von ein bis drei Minuten zu reservieren. Der Workflow lädt außerdem ein informatives Artefakt plugin-inspector-advisory von @openclaw/plugin-inspector hoch; Inspector-Ergebnisse sind Triage-Eingaben und ändern das blockierende Plugin-Prerelease-Gate nicht.
QA Lab
QA Lab hat dedizierte CI-Lanes außerhalb des Haupt-Workflows mit intelligenter Umfangserkennung. Agentische Parität ist unter den breiten QA- und Release-Harnesses verschachtelt, nicht als eigenständiger PR-Workflow. Verwenden Sie Full Release Validation mit rerun_group=qa-parity, wenn Parität zusammen mit einem breiten Validierungslauf ausgeführt werden soll.
- Der Workflow
QA-Lab - All Lanesläuft nächtlich aufmainund bei manueller Auslösung; er fächert die Mock-Paritäts-Lane, die Live-Matrix-Lane sowie die Live-Telegram- und Discord-Lanes als parallele Jobs auf. Live-Jobs verwenden die Umgebungqa-live-shared, und Telegram/Discord verwenden Convex-Leases.
Release-Prüfungen führen Matrix- und Telegram-Live-Transport-Lanes mit dem deterministischen Mock-Provider und Mock-qualifizierten Modellen (mock-openai/gpt-5.5 und mock-openai/gpt-5.5-alt) aus, damit der Kanalvertrag von Live-Modelllatenz und normalem Provider-Plugin-Start isoliert ist. Das Live-Transport-Gateway deaktiviert Speichersuche, weil QA-Parität Speicherverhalten separat abdeckt; Provider-Konnektivität wird durch die separaten Live-Modell-, nativen Provider- und Docker-Provider-Suites abgedeckt.
Matrix verwendet --profile fast für geplante und Release-Gates und fügt --fail-fast nur hinzu, wenn die ausgecheckte CLI dies unterstützt. Der CLI-Standard und die manuelle Workflow-Eingabe bleiben all; eine manuelle Auslösung mit matrix_profile=all shardet die vollständige Matrix-Abdeckung immer in die Jobs transport, media, e2ee-smoke, e2ee-deep und e2ee-cli.
OpenClaw Release Checks führt außerdem die release-kritischen QA-Lab-Lanes vor der Release-Freigabe aus; sein QA-Paritäts-Gate führt Kandidaten- und Baseline-Pakete als parallele Lane-Jobs aus und lädt anschließend beide Artefakte in einen kleinen Report-Job für den finalen Paritätsvergleich herunter.
Für normale PRs folgen Sie der umfangsbezogenen CI-/Prüfnachweisen, statt Parität als erforderlichen Status zu behandeln.
CodeQL
Der Workflow CodeQL ist bewusst ein enger Security-Scanner für den ersten Durchlauf, nicht der vollständige Repository-Sweep. Tägliche, manuelle und nicht als Draft markierte Pull-Request-Guard-Läufe scannen Actions-Workflow-Code sowie die risikoreichsten JavaScript-/TypeScript-Oberflächen mit hochvertrauenswürdigen Security-Abfragen, gefiltert auf hohe/kritische security-severity.
Der Pull-Request-Guard bleibt leichtgewichtig: Er startet nur bei Änderungen unter .github/actions, .github/codeql, .github/workflows, packages, scripts, src oder prozesseigenen Runtime-Pfaden gebündelter Plugins und führt dieselbe hochvertrauenswürdige Security-Matrix wie der geplante Workflow aus. Android- und macOS-CodeQL bleiben außerhalb der PR-Standards.
Sicherheitskategorien
| Kategorie | Oberfläche |
|---|---|
/codeql-security-high/core-auth-secrets |
Auth, Secrets, Sandbox, Cron und Gateway-Baseline |
/codeql-security-high/channel-runtime-boundary |
Core-Channel-Implementierungsverträge plus Channel-Plugin-Runtime, Gateway, Plugin SDK, Secrets, Audit-Berührungspunkte |
/codeql-security-high/network-ssrf-boundary |
Core-SSRF, IP-Parsing, Network Guard, Web-Fetch und SSRF-Richtlinienoberflächen des Plugin SDK |
/codeql-security-high/mcp-process-tool-boundary |
MCP-Server, Prozessausführungs-Helper, ausgehende Zustellung und Gates für Agent-Tool-Ausführung |
/codeql-security-high/process-exec-boundary |
Lokale Shell, Process-Spawn-Helper, subprocess-besitzende gebündelte Plugin-Runtimes und Workflow-Skript-Verknüpfung |
/codeql-security-high/plugin-trust-boundary |
Plugin-Installation, Loader, Manifest, Registry, Paketmanager-Installation, Source-Loading und Vertrauensoberflächen des Plugin-SDK-Paketvertrags |
Plattformspezifische Security-Shards
CodeQL Android Critical Security— geplanter Android-Security-Shard. Baut die Android-App manuell für CodeQL auf dem kleinsten Blacksmith-Linux-Runner, den die Workflow-Plausibilitätsprüfung akzeptiert. Lädt unter/codeql-critical-security/androidhoch.CodeQL macOS Critical Security— wöchentlicher/manueller macOS-Security-Shard. Baut die macOS-App manuell für CodeQL auf Blacksmith macOS, filtert Dependency-Build-Ergebnisse aus dem hochgeladenen SARIF heraus und lädt unter/codeql-critical-security/macoshoch. Bleibt außerhalb der täglichen Defaults, weil der macOS-Build die Laufzeit selbst bei sauberem Zustand dominiert.
Critical-Quality-Kategorien
CodeQL Critical Quality ist der passende Nicht-Security-Shard. Er führt nur JavaScript/TypeScript-Quality-Abfragen mit Fehlerschweregrad und ohne Security-Bezug über schmale, hochwertige Oberflächen auf GitHub-gehosteten Linux-Runnern aus, damit Quality-Scans kein Blacksmith-Runner-Registrierungsbudget verbrauchen. Sein Pull-Request-Guard ist absichtlich kleiner als das geplante Profil: Nicht-Draft-PRs führen nur die passenden Shards agent-runtime-boundary, config-boundary, core-auth-secrets, channel-runtime-boundary, gateway-runtime-boundary, memory-runtime-boundary, mcp-process-runtime-boundary, provider-runtime-boundary, session-diagnostics-boundary, plugin-boundary, plugin-sdk-package-contract und plugin-sdk-reply-runtime für Agent-Befehl-/Modell-/Tool-Ausführung und Reply-Dispatch-Code, Config-Schema-/Migrations-/IO-Code, Auth-/Secrets-/Sandbox-/Security-Code, Core-Channel- und gebündelte Channel-Plugin-Runtime, Gateway-Protokoll-/Server-Methoden, Memory-Runtime-/SDK-Verknüpfung, MCP-/Prozess-/ausgehende Zustellung, Provider-Runtime-/Modellkatalog, Session-Diagnose-/Zustellungswarteschlangen, Plugin-Loader, Plugin-SDK-/Paketvertrag oder Plugin-SDK-Reply-Runtime-Änderungen aus. CodeQL-Config- und Quality-Workflow-Änderungen führen alle zwölf PR-Quality-Shards aus.
Manueller Dispatch akzeptiert:
profile=all|agent-runtime-boundary|config-boundary|core-auth-secrets|channel-runtime-boundary|gateway-runtime-boundary|memory-runtime-boundary|mcp-process-runtime-boundary|plugin-boundary|plugin-sdk-package-contract|plugin-sdk-reply-runtime|provider-runtime-boundary|session-diagnostics-boundaryDie schmalen Profile sind Lehr-/Iterations-Hooks, um einen Quality-Shard isoliert auszuführen.
| Kategorie | Oberfläche |
|---|---|
/codeql-critical-quality/core-auth-secrets |
Code für Auth-, Secrets-, Sandbox-, Cron- und Gateway-Security-Grenzen |
/codeql-critical-quality/config-boundary |
Config-Schema, Migration, Normalisierung und IO-Verträge |
/codeql-critical-quality/gateway-runtime-boundary |
Gateway-Protokollschemata und Server-Methodenverträge |
/codeql-critical-quality/channel-runtime-boundary |
Core-Channel- und gebündelte Channel-Plugin-Implementierungsverträge |
/codeql-critical-quality/agent-runtime-boundary |
Befehlsausführung, Modell-/Provider-Dispatch, Auto-Reply-Dispatch und Warteschlangen sowie ACP-Control-Plane-Runtime-Verträge |
/codeql-critical-quality/mcp-process-runtime-boundary |
MCP-Server und Tool-Bridges, Prozessüberwachungs-Helper und Verträge für ausgehende Zustellung |
/codeql-critical-quality/memory-runtime-boundary |
Memory-Host-SDK, Memory-Runtime-Fassaden, Memory-Plugin-SDK-Aliasse, Memory-Runtime-Aktivierungsverknüpfung und Memory-Doctor-Befehle |
/codeql-critical-quality/session-diagnostics-boundary |
Reply-Queue-Interna, Session-Zustellungswarteschlangen, Helper für ausgehende Session-Bindung/-Zustellung, Oberflächen für Diagnoseereignis-/Log-Bundles und Session-Doctor-CLI-Verträge |
/codeql-critical-quality/plugin-sdk-reply-runtime |
Plugin-SDK-Inbound-Reply-Dispatch, Reply-Payload-/Chunking-/Runtime-Helper, Channel-Reply-Optionen, Zustellungswarteschlangen und Helper für Session-/Thread-Bindung |
/codeql-critical-quality/provider-runtime-boundary |
Modellkatalog-Normalisierung, Provider-Auth und -Discovery, Provider-Runtime-Registrierung, Provider-Defaults/-Kataloge und Web-/Search-/Fetch-/Embedding-Registries |
/codeql-critical-quality/ui-control-plane |
Control-UI-Bootstrap, lokale Persistenz, Gateway-Control-Flows und Task-Control-Plane-Runtime-Verträge |
/codeql-critical-quality/web-media-runtime-boundary |
Core-Web-Fetch/-Search, Media-IO, Medienverständnis, Bildgenerierung und Runtime-Verträge für Mediengenerierung |
/codeql-critical-quality/plugin-boundary |
Loader-, Registry-, Public-Surface- und Plugin-SDK-Entrypoint-Verträge |
/codeql-critical-quality/plugin-sdk-package-contract |
Veröffentlichte paket-seitige Plugin-SDK-Quelle und Helper für Plugin-Paketverträge |
Quality bleibt von Security getrennt, damit Quality-Findings geplant, gemessen, deaktiviert oder erweitert werden können, ohne das Security-Signal zu verdecken. Swift-, Python- und gebündelte-Plugin-CodeQL-Erweiterungen sollten erst wieder als gescopter oder geshardeter Follow-up-Aufwand hinzugefügt werden, nachdem die schmalen Profile stabile Laufzeit und ein stabiles Signal haben.
Wartungs-Workflows
Docs Agent
Der Workflow Docs Agent ist eine ereignisgesteuerte Codex-Wartungsspur, um bestehende Dokumentation mit kürzlich gelandeten Änderungen synchron zu halten. Er hat keinen reinen Zeitplan: Ein erfolgreicher Nicht-Bot-Push-CI-Lauf auf main kann ihn auslösen, und ein manueller Dispatch kann ihn direkt ausführen. Workflow-Run-Aufrufe werden übersprungen, wenn main weitergezogen ist oder wenn in der letzten Stunde ein weiterer nicht übersprungener Docs-Agent-Lauf erstellt wurde. Wenn er läuft, prüft er den Commit-Bereich vom vorherigen nicht übersprungenen Docs-Agent-Source-SHA bis zum aktuellen main, sodass ein stündlicher Lauf alle Main-Änderungen abdecken kann, die sich seit dem letzten Docs-Durchlauf angesammelt haben.
Test Performance Agent
Der Workflow Test Performance Agent ist eine ereignisgesteuerte Codex-Wartungsspur für langsame Tests. Er hat keinen reinen Zeitplan: Ein erfolgreicher Nicht-Bot-Push-CI-Lauf auf main kann ihn auslösen, aber er wird übersprungen, wenn an diesem UTC-Tag bereits ein anderer Workflow-Run-Aufruf lief oder läuft. Manueller Dispatch umgeht dieses tägliche Aktivitäts-Gate. Die Spur erstellt einen gruppierten Vitest-Performance-Bericht für die vollständige Suite, lässt Codex nur kleine, Coverage-erhaltende Test-Performance-Fixes statt breiter Refactorings vornehmen, führt dann den Bericht für die vollständige Suite erneut aus und lehnt Änderungen ab, die die Baseline-Anzahl bestandener Tests reduzieren. Der gruppierte Bericht zeichnet Wall-Time pro Config und maximale RSS unter Linux und macOS auf, sodass der Vorher/Nachher-Vergleich Test-Memory-Deltas neben Laufzeit-Deltas sichtbar macht. Wenn die Baseline fehlgeschlagene Tests hat, darf Codex nur offensichtliche Fehler beheben, und der Full-Suite-Bericht nach dem Agent muss bestehen, bevor etwas committet wird. Wenn main vor dem Bot-Push weiterläuft, rebased die Spur den validierten Patch, führt pnpm check:changed erneut aus und versucht den Push erneut; konflikthafte veraltete Patches werden übersprungen. Sie verwendet GitHub-gehostetes Ubuntu, damit die Codex-Action dieselbe Drop-Sudo-Sicherheitshaltung wie der Docs Agent beibehalten kann.
Doppelte PRs nach Merge
Der Workflow Duplicate PRs After Merge ist ein manueller Maintainer-Workflow für die Duplikatbereinigung nach dem Landen. Er verwendet standardmäßig Dry-Run und schließt nur explizit aufgelistete PRs, wenn apply=true gesetzt ist. Bevor er GitHub mutiert, verifiziert er, dass der gelandete PR gemerged ist und dass jedes Duplikat entweder ein gemeinsam referenziertes Issue oder überlappende geänderte Hunks hat.
gh workflow run duplicate-after-merge.yml \ -f landed_pr=70532 \ -f duplicate_prs='70530,70592' \ -f apply=trueLokale Check-Gates und Changed-Routing
Lokale Changed-Lane-Logik lebt in scripts/changed-lanes.mjs und wird von scripts/check-changed.mjs ausgeführt. Dieses lokale Check-Gate ist bei Architekturgrenzen strenger als der breite CI-Plattform-Scope:
- Core-Produktionsänderungen führen Core-Prod- und Core-Test-Typecheck plus Core-Lint/Guards aus;
- reine Core-Test-Änderungen führen nur Core-Test-Typecheck plus Core-Lint aus;
- Extension-Produktionsänderungen führen Extension-Prod- und Extension-Test-Typecheck plus Extension-Lint aus;
- reine Extension-Test-Änderungen führen Extension-Test-Typecheck plus Extension-Lint aus;
- öffentliche Plugin-SDK- oder Plugin-Contract-Änderungen erweitern auf Extension-Typecheck, weil Extensions von diesen Core-Verträgen abhängen (Vitest-Extension-Sweeps bleiben explizite Testarbeit);
- reine Release-Metadaten-Versionsbumps führen gezielte Versions-/Config-/Root-Dependency-Checks aus;
- unbekannte Root-/Config-Änderungen schlagen sicherheitshalber auf alle Check-Lanes fehl.
Lokales Changed-Test-Routing lebt in scripts/test-projects.test-support.mjs und ist absichtlich günstiger als check:changed: Direkte Test-Edits führen sich selbst aus, Source-Edits bevorzugen explizite Mappings, danach Sibling-Tests und Import-Graph-Dependents. Die gemeinsame Group-Room-Delivery-Config ist eines der expliziten Mappings: Änderungen an der gruppensichtbaren Reply-Config, am Source-Reply-Zustellungsmodus oder am Message-Tool-Systemprompt laufen durch die Core-Reply-Tests plus Discord- und Slack-Zustellungsregressionen, damit eine geteilte Default-Änderung vor dem ersten PR-Push fehlschlägt. Verwenden Sie OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed nur, wenn die Änderung harness-weit genug ist, dass das günstige gemappte Set kein vertrauenswürdiger Proxy ist.
Testbox-Validierung
Crabbox ist der repo-eigene Remote-Box-Wrapper für Maintainer-Proof unter Linux. Verwenden Sie ihn
aus dem Repo-Root, wenn ein Check zu breit für eine lokale Edit-Schleife ist, wenn CI-Parität
wichtig ist oder wenn der Proof Secrets, Docker, Package-Lanes,
wiederverwendbare Boxen oder Remote-Logs benötigt. Das normale OpenClaw-Backend ist
blacksmith-testbox; eigene AWS-/Hetzner-Kapazität ist ein Fallback bei Blacksmith-
Ausfällen, Kontingentproblemen oder explizitem Testen auf eigener Kapazität.
Crabbox-gestützte Blacksmith-Läufe wärmen einmalige Testboxes auf, reservieren sie, synchronisieren, führen aus, berichten und räumen auf. Der eingebaute Sync-Sanity-Check schlägt schnell fehl, wenn erforderliche
Root-Dateien wie pnpm-lock.yaml verschwinden oder wenn git status --short
mindestens 200 nachverfolgte Löschungen zeigt. Setzen Sie für absichtliche PRs mit vielen Löschungen
OPENCLAW_TESTBOX_ALLOW_MASS_DELETIONS=1 für den Remote-Befehl.
Crabbox beendet außerdem einen lokalen Blacksmith-CLI-Aufruf, der länger als fünf Minuten in der
Sync-Phase bleibt, ohne Ausgabe nach dem Sync zu erzeugen. Setzen Sie
CRABBOX_BLACKSMITH_SYNC_TIMEOUT_MS=0, um diesen Schutz zu deaktivieren, oder verwenden Sie einen größeren
Millisekundenwert für ungewöhnlich große lokale Diffs.
Prüfen Sie vor dem ersten Lauf den Wrapper aus dem Repo-Root:
pnpm crabbox:run -- --help | sed -n '1,120p'Der Repo-Wrapper lehnt eine veraltete Crabbox-Binärdatei ab, die blacksmith-testbox nicht ausweist. Übergeben Sie den Provider explizit, auch wenn .crabbox.yaml Defaults für eigene Cloud-Kapazität enthält. Vermeiden Sie in Codex-Worktrees oder verknüpften/sparse Checkouts das lokale Skript pnpm crabbox:run, weil pnpm Abhängigkeiten abgleichen kann, bevor Crabbox startet; rufen Sie stattdessen den Node-Wrapper direkt auf:
node scripts/crabbox-wrapper.mjs run --provider blacksmith-testbox --timing-json --shell -- "pnpm test <path-or-filter>"Blacksmith-gestützte Läufe benötigen Crabbox 0.22.0 oder neuer, damit der Wrapper das aktuelle Testbox-Sync-, Queue- und Cleanup-Verhalten erhält. Wenn Sie den benachbarten Checkout verwenden, bauen Sie die ignorierte lokale Binärdatei vor Timing- oder Proof-Arbeiten neu:
version="$(git -C ../crabbox describe --tags --always --dirty | sed 's/^v//')" \ && go build -C ../crabbox -trimpath -ldflags "-s -w -X github.com/openclaw/crabbox/internal/cli.version=${version}" -o bin/crabbox ./cmd/crabboxChanged-Gate:
pnpm crabbox:run -- --provider blacksmith-testbox \ --blacksmith-org openclaw \ --blacksmith-workflow .github/workflows/ci-check-testbox.yml \ --blacksmith-job check \ --blacksmith-ref main \ --idle-timeout 90m \ --ttl 240m \ --timing-json \ --shell -- \ "corepack pnpm check:changed"Fokussierter Test-Rerun:
pnpm crabbox:run -- --provider blacksmith-testbox \ --blacksmith-org openclaw \ --blacksmith-workflow .github/workflows/ci-check-testbox.yml \ --blacksmith-job check \ --blacksmith-ref main \ --idle-timeout 90m \ --ttl 240m \ --timing-json \ --shell -- \ "corepack pnpm test <path-or-filter>"Vollständige Suite:
pnpm crabbox:run -- --provider blacksmith-testbox \ --blacksmith-org openclaw \ --blacksmith-workflow .github/workflows/ci-check-testbox.yml \ --blacksmith-job check \ --blacksmith-ref main \ --idle-timeout 90m \ --ttl 240m \ --timing-json \ --shell -- \ "corepack pnpm test"Lesen Sie die abschließende JSON-Zusammenfassung. Die nützlichen Felder sind provider, leaseId,
syncDelegated, exitCode, commandMs und totalMs. Bei delegierten
Blacksmith-Testbox-Läufen sind der Exit-Code des Crabbox-Wrappers und die JSON-Zusammenfassung das
Befehlsergebnis. Der verknüpfte GitHub-Actions-Lauf ist für Hydration und Keepalive zuständig; er
kann als cancelled enden, wenn die Testbox extern gestoppt wird, nachdem der SSH-
Befehl bereits zurückgekehrt ist. Behandeln Sie das als Cleanup-/Status-Artefakt, es sei denn,
der Wrapper-exitCode ist ungleich null oder die Befehlsausgabe zeigt einen fehlgeschlagenen Test.
Einmalige Blacksmith-gestützte Crabbox-Läufe sollten die Testbox automatisch stoppen;
wenn ein Lauf unterbrochen wird oder das Cleanup unklar ist, prüfen Sie Live-Boxen und stoppen Sie nur
die von Ihnen erstellten Boxen:
blacksmith testbox list --allblacksmith testbox status --id <tbx_id>blacksmith testbox stop --id <tbx_id>Verwenden Sie Wiederverwendung nur, wenn Sie absichtlich mehrere Befehle auf derselben hydratisierten Box benötigen:
pnpm crabbox:run -- --provider blacksmith-testbox --id <tbx_id> --no-sync --timing-json --shell -- "pnpm test <path-or-filter>"pnpm crabbox:stop -- <tbx_id>Wenn Crabbox die defekte Schicht ist, Blacksmith selbst aber funktioniert, verwenden Sie direktes
Blacksmith nur für Diagnosen wie list, status und Cleanup. Reparieren Sie den
Crabbox-Pfad, bevor Sie einen direkten Blacksmith-Lauf als Maintainer-Proof behandeln.
Wenn blacksmith testbox list --all und blacksmith testbox status funktionieren, neue
Warmups aber nach ein paar Minuten ohne IP oder Actions-Lauf-URL in queued hängen,
behandeln Sie das als Blacksmith-Provider-, Queue-, Abrechnungs- oder Org-Limit-Druck. Stoppen Sie die
von Ihnen erstellten queued-IDs, starten Sie keine weiteren Testboxes und verschieben Sie den Proof auf den
unten beschriebenen Pfad für eigene Crabbox-Kapazität, während jemand das Blacksmith-Dashboard,
die Abrechnung und die Org-Limits prüft.
Eskalieren Sie nur dann auf eigene Crabbox-Kapazität, wenn Blacksmith ausgefallen ist, durch Kontingente begrenzt wird, die benötigte Umgebung fehlt oder eigene Kapazität ausdrücklich das Ziel ist:
CRABBOX_CAPACITY_REGIONS=eu-west-1,eu-west-2,eu-central-1,us-east-1,us-west-2 \ pnpm crabbox:warmup -- --provider aws --class standard --market on-demand --idle-timeout 90mpnpm crabbox:hydrate -- --id <cbx_id-or-slug>pnpm crabbox:run -- --id <cbx_id-or-slug> --timing-json --shell -- "pnpm check:changed"pnpm crabbox:stop -- <cbx_id-or-slug>Vermeiden Sie unter AWS-Druck class=beast, außer die Aufgabe benötigt wirklich CPU der 48xlarge-Klasse. Eine beast-Anfrage startet bei 192 vCPUs und ist der einfachste Weg, regionale EC2-Spot- oder On-Demand-Standard-Kontingente auszulösen. Die repo-eigene .crabbox.yaml verwendet standardmäßig standard, mehrere Kapazitätsregionen und capacity.hints: true, sodass vermittelte AWS-Leases die ausgewählte Region/den ausgewählten Markt, Kontingentdruck, Spot-Fallback und Warnungen für Klassen unter hohem Druck ausgeben. Verwenden Sie fast für schwerere breite Checks, large erst, nachdem standard/fast nicht ausreichen, und beast nur für außergewöhnliche CPU-gebundene Lanes wie vollständige Suites oder All-Plugin-Docker-Matrizen, explizite Release-/Blocker-Validierung oder Performance-Profiling mit vielen Cores. Verwenden Sie beast nicht für pnpm check:changed, fokussierte Tests, reine Dokumentationsarbeit, gewöhnliches Linting/Typechecking, kleine E2E-Reproduktionen oder Blacksmith-Ausfalltriage. Verwenden Sie --market on-demand für Kapazitätsdiagnosen, damit Spot-Marktfluktuation nicht in das Signal gemischt wird.
.crabbox.yaml verwaltet Provider-, Sync- und GitHub-Actions-Hydration-Defaults für eigene Cloud-Lanes. Es schließt lokales .git aus, damit der hydratisierte Actions-Checkout seine eigenen Remote-Git-Metadaten behält, anstatt maintainer-lokale Remotes und Object Stores zu synchronisieren, und es schließt lokale Runtime-/Build-Artefakte aus, die nie übertragen werden sollten. .github/workflows/crabbox-hydrate.yml verwaltet Checkout, Node-/pnpm-Setup, origin/main-Fetch und die nicht geheime Environment-Übergabe für eigene Cloud-Befehle crabbox run --id <cbx_id>.