CI required checks
Human verified
A human reviewed this page, but it may be out of date. Later edits may not have been reviewed.
Overview
Use CI to check a pull request's source, packaging, persistence, and supported
component workflows. CI Required is the merge gate. Its successful conclusion
covers the lanes selected for that change, not every registered integration.
Trigger
The workflow runs on pull requests, pushes to main, merge groups, and manual
dispatch. Documentation-only pull requests and verified, forward main pushes
run static checks. Main pushes compare the complete before to after range
using the policy from before; missing history, forced pushes, or a policy that
does not support push selection run the ordinary lane matrix. Recognized
test-only pull requests select affected lanes, including TypeScript test checks.
Other changes run the ordinary lane matrix. Failed main-push CI also prevents release workflows
that require successful CI for that source.
For a main push that modifies one registered test, the CI main test advisory v2
notice in CI Impact can list the predicted lanes and the verified before and
after commits. A broad notice without commit IDs leaves the range unverified.
If the notice is missing, no prediction was received. Test-only main pushes
still run full CI.
Documentation-only changes include regular, non-executable .png illustrations
under specs/rfcs/. Images elsewhere and other image extensions still select full
CI. Mixing an RFC image with runtime or tooling changes also selects full CI.
Scenarios
pr-safe runs the selected matrix jobs below; runtime-image-fixture runs
separately. If selection cannot be verified, CI runs every ordinary lane.
| Tests | What is verified | GitHub jobs and manifests |
|---|---|---|
| Domain, API, CLI, and tooling | Driver contracts, authorization, API behavior, CLI commands, and test tooling. | Checks and Conformance 1, Checks and Conformance 2 |
| Console browser behavior | Forms, Agent configuration, user actions, and permissions. | Console Browser, Console Browser 2 |
| PostgreSQL persistence and sign-in | Schema migrations, saved platform state, worker operations, and authentication. | PostgreSQL Migrations, PostgreSQL Application, PostgreSQL Authentication, PostgreSQL Platform |
| Container packaging and startup | Packaged files, startup readiness, shutdown, and retained workspace state. | Images and Packaging, Image Runtime Startup, Image Runtime Startup 2, Image Runtime Startup 3 |
| Runtime image metadata | The image attached to a container is reported even after its tag changes; containers from another Agent revision are rejected; Enterprise and OpenClaw commit metadata are validated. | Runtime Image Fixture |
| Kubernetes deployment and isolation | Agent workloads, identities, configuration, persistent state, network isolation, and plugin status. | k3d Fixture and Configuration, k3d State and Lifecycle, k3d Network Isolation, k3d Plugin Status |
| Metrics and log collection | Metrics and logs reach their configured stores; forwarded records retain workload identity; collection recovers after an exporter outage. | Production Observability, Logging Collector |
| Repository credential isolation | Git and GitHub CLI access, credential isolation, expiry, and recovery. | Repository Credentials |
| Keycloak sign-in | Sign-in, signing-key rotation, access denial, and sign-out through OpenID Connect. | Keycloak OIDC |
The first column describes the tests. The last column preserves the job names shown in GitHub Actions and links to their test manifests. Runtime image metadata tests use real Docker containers with lightweight fixture images; they do not run a complete Agent or call a model provider.
CI Impact selects coverage. Suite Audit and Static Checks is one job that runs
in every mode: it lints workflows, audits suite ownership, and runs workspace,
lint, format, OpenAPI, documentation checks, and the documentation build.
Affected Packages reports impact; CI Required aggregates required results. Manual Native Container Verification calls the
native image workflow. The CI flow
explains these jobs; the PR-controlled workflow is not independent trusted enforcement.
Compare a shadow prediction with the jobs that ran
On a full pull-request run, download the affected-lanes-ATTEMPT artifact from
Affected Packages. The JSON identifies the tested merge, its first parent
(base), and its second parent (head). A change confined to the Controller's
console-assets.ts reader can report candidate CI lanes and the standalone
Console Storybook build. Other paths, additional affected packages, or missing
evidence produce a broad prediction. A mixed change that touches the reader can
still list its known consumers. These hints cover only that module. A changed
Storybook workflow, asset preparer, or either package script that connects them
requires fresh verification before the report can list Storybook again. A missing artifact
leaves the prediction unknown. CI still executes its ordinary checks.
For a completed run, set run and attempt to its numeric IDs. From the
repository checkout, use GitHub CLI, jq, and yq (v4) to compare the artifact
with the original attempt. Independently confirm the workflow commit from the
original job before attributing its matrix to the run. The artifact is produced
by pull-request code. If the workflow commit cannot be confirmed, the lane
comparison remains unverified.
gh run download "$run" --name "affected-lanes-$attempt" --dir "shadow-$run-$attempt"receipt="shadow-$run-$attempt/affected-lanes.json"head=$(gh api "repos/{owner}/{repo}/actions/runs/$run/attempts/$attempt" --jq '.head_sha') || exit 1workflow=$(jq -er --arg run "$run" --arg attempt "$attempt" --arg head "$head" ' select(.run.runId == $run and .run.attempt == $attempt and .identity.head == $head) | .run.workflowSha | select(type == "string" and test("\\A([0-9a-f]{40}|[0-9a-f]{64})\\z"))' "$receipt") || exit 1git show "$workflow:.github/workflows/ci.yml" | yq -r '.jobs.impact.steps[] | select(.id == "matrix") | .env.LANE_TABLE' | jq --slurpfile r "$receipt" '[.[] | select(.lane as $id | $r[0].lanes | index($id)) | .title]' > "shadow-$run-$attempt/titles.json"gh api --paginate "repos/{owner}/{repo}/actions/runs/$run/attempts/$attempt/jobs?per_page=100" | jq --slurpfile titles "shadow-$run-$attempt/titles.json" '.jobs[] | {name, conclusion, started_at, completed_at, listed_consumer: (.name as $name | $titles[0] | index($name) != null)}'Inspect every failed or incomplete job, including those outside the candidate set. For the separate Storybook workflow, match the original pull-request head and base against its run before comparing the build conclusion and timestamps. The timestamps measure the original jobs. A candidate prediction alone supplies no measurement of time saved.
Execution
Open or update a pull request for automatic selection. For local reproduction, use the linked suite guide and exact manifest in the table; prerequisites differ between browser, PostgreSQL, container, and Kubernetes lanes. Follow the shared prepare, run, and cleanup procedure.
checks-baseline-2 requires full Git history for its sign-in qualification profile
tests. CI and Full Integration fetch that history during checkout for this lane;
other matrix lanes keep a shallow checkout. Local runs need the reviewed profile
commit available before starting; the tests do not fetch missing history.
Runtime-image bridge tests and typechecks write temporary compiler artifacts to disk so memory pressure can reclaim their page cache. Each verification step starts with an empty artifact directory and removes it before committing the layer. Test selection and the final runtime remain unchanged.
To inspect a run, replace the example PR number with yours:
gh pr checks 4695 --repo openclaw/openclaw-enterpriseResults and limits
Inspect the terminal CI Required conclusion and the selected jobs' results,
including ci-results artifacts. A queued job has not necessarily acquired a
runner. Use the job summary's phase timings to distinguish queue time, execution,
and result publication. A skipped lane does not verify access to its model provider.
First Agent Smoke is a separate job and is not a
CI Required dependency. A green merge gate does not establish that smoke passed.
The CI flow describes result accounting.
Files
- CI workflow: selection, jobs, and merge gate.
- Suite index: lane groups; individual manifests are linked above.
- Lane action: preparation, execution, artifacts, and cleanup.
- Test runner: inventory checks, execution, and aggregation.
