Skip to main content
validateWorld is push, dispatch, wait and gate as one call. Validation runs the pull request’s own world source. The push files the checkout as a version on the pull request’s branch, the dispatch pins that version, and the platform resolves the branch back to its open pull request.

Validate a checkout in one call

onProgress reports each step as it happens: the push, the resolved run config, and each run’s status while it waits.

Every option

The first argument is the directory holding the world source. Without a branch and outside both a git checkout and GitHub Actions, the call throws rather than guessing which branch it is validating.

What the gate actually checks

Three conditions, all of them required for ok to be true.
  1. Every dispatch was accepted.
  2. Every run reached a terminal COMPLETED status.
  3. When minScore is set, every run’s score meets it.
A run that completes with no score fails a score gate rather than passing it. Null means not scored, never zero.

The report

Each ValidatedRun.failure is null when that run passes, and otherwise says why it did not: a dispatch error, a non-completed status, a missing score, or a score under the bar. report is the full RunReport, or null when the dispatch itself failed.

The markdown is the comment

report.markdown is a finished summary: a pass or fail headline, the commit and content hash that ran, a table of models with scores and links to each run, and a table of per-scenario rewards. Scenario tables longer than twelve rows fold into a <details> block.
Post it as a pull request comment with the gh CLI, or write it to $GITHUB_STEP_SUMMARY as above to get it on the job’s own page.

In GitHub Actions

Three secrets and one script. Branch, commit and actor are detected from the Actions environment, so nothing about provenance has to be configured.
Content-hash deduplication means an unchanged tree files no new bundle. Validation resolves the branch tip and pushes on top of it, so a re-run replaces its own previous push instead of conflicting with it.

Which gate to reach for

Where to go next