Repository navigation
[CI] Make local, PR, hardware, and release quality gates truthful #140
Description
Activity
Implementation checkpoint on draft PR #147:
5c2497fmakesscripts/ci-check.shthe namedquick,full,web, andhardwareentry point used by local development and workflow jobs. A contract test rejects YAML/script drift. Localquickpassed 298 unit tests plus 44 golden tests, the WASM check, FFI/schema and line ratchets, quality governance, andbloom-diff.- Formatting and clippy correctness/suspicious/performance checks are required. The only clippy allowances are four explicit legacy ratchets; required checks no longer rely on
continue-on-erroror|| true. 7773f70adds a checked, complete inventory of 20 canonical package/main examples. Ten stale manifests gained their required native-library allowlists, and all 20 pass Perry code generation locally.- The
weblane performs a real Chrome/Chromium WebGPU boot, submits Bloom's known direct-2D clear frame, waits for queue completion inside a validation scope, captures a compositor screenshot, and validates its blue/green/red channel ordering. Local evidence measured mean RGB(99, 177, 241). - Metal and Vulkan quality jobs delegate their quality/fault/corpus work to the same
hardwarelane components; Metal also runs the canonical example compile gate. aa9d6a0preservestarget/ci, browser logs/screenshots, golden actuals, and quality output for every failed PR job. Run 30343304233 already proved this path by publishing the first hosted-Linux browser diagnosis artifact.59bdc4aresolves and peels the requested release tag once, requires Tests for that exact commit SHA, checks every release job out at that SHA, and rejects a package-version/tag mismatch.7407d7cpins headless Linux Chrome to its documented Vulkan/SwiftShader test backend after the first hosted run exposed a swap-chain allocation failure; it also records adapter details in the machine-readable result. Local visual validation remains green; the hosted rerun is in progress.
Still deliberately open:
- I am not checking the combined example/native/web runtime criterion until a hardware-lane archive demonstrates the linked native path as well as the hosted browser rerun.
- I am not checking the release criterion yet. Exact-SHA gating is implemented, but
npm pack --dry-runconfirms the current package contains neitherdxcompiler.dllnordxil.dll; release install/startup smoke must consume the runtime manifest delivered by [Platform] Package shader runtime dependencies and enforce UTF-8 end to end #145.
Hosted validation is now green on
a45d3e8/ Tests run 30344662755.The diagnostic sequence established a real runner limitation rather than weakening the gate:
- Ubuntu Chrome could obtain the Google SwiftShader adapter, but its headless compositor could not allocate
WebgpuSwapChainTextureshared-image backing. - Xvfb did not provide a usable DevTools/presentation path on that runner image.
- The final workflow keeps the WASM check and optimized package build required on Ubuntu, uploads that exact
native/web/pkgartifact, then requires a dependent macOS Chrome job to download it, submit Bloom's known frame, wait for WebGPU completion, capture it, and verify the compositor pixels.
Final check results:
build-webpassed in 2m16s and dependentbrowser-smokepassed in 29s. Every Tests and Renderer quality contract check on the PR head is green. The combined canonical-example/native/web criterion remains unchecked only because its all-example linked native/hardware evidence is still pending; the web half is now proven in hosted CI.- Ubuntu Chrome could obtain the Google SwiftShader adapter, but its headless compositor could not allocate
PR #147 required-check repair pushed in
5eee9a6.The reported
ffi-parityfailure was not an FFI mismatch: schema/export parity was green, then the samecontractslane correctly failed the renderer monolith ratchet (renderer/mod.rs14,669 lines vs 14,649 grandfathered). The fix extracts 598 lines of immediate-mode 3D tessellation intorenderer/immediate_draw3d.rs, reducing the monolith to 14,071 lines instead of weakening the baseline. The exact local contracts lane now passes: command inventory, 491-function platform FFI coverage/arity, and file-size ratchet.The macOS shared-test failure was a truthful constrained-capability case: the hosted adapter granted 19 sampled textures while the optional layered scene specialization requires 22. The visibility parity test incorrectly required that unsupported specialization to initialize. It now asserts availability from the negotiated granted/required limits, requires initialization exactly when available, and still requires the sheen LUT plus six forward-compatibility layered draws on the fallback. Screenshot and all four MRT parity gates remain mandatory.
Local evidence: 419/419 shared unit tests, 2/2 visibility-buffer integration tests, 2/2 lit-primitive goldens, and the exact
--quick --component contractslane pass. Remote macOS/Linux/Windows/web/mobile checks are running on the pushed commit.
Parent: #126
Problem
The repository's quality contract is fragmented:
scripts/ci-check.shdescribes itself as local parity but omits several CI/release-sensitive checks;.github/workflows/test.yml;An engine cannot protect high-end rendering work if “green locally” and “green in CI” mean different things.
Outcome
One versioned check manifest/entry point used by local development, PR CI, and release gating, with explicit quick/full/hardware lanes and no ignored required failures.
Design
Single orchestration source
Use one script/tool (the existing
scripts/ci-check.shmay evolve) to define named lanes:quick: formatting/lint baseline, unit tests, FFI/schema validation, file ratchets, representative example compile;full: all host builds, shared/web checks, all example compile checks, goldens that can run on the host;web: build/package plus browser startup/render smoke;hardware: quality corpus and GPU/path-tracing cases;release: full plus packaging/install smoke for artifacts.CI invokes the same lanes rather than reimplementing command lists in YAML. Commands must emit machine-readable summaries and preserve normal console output.
Baselines and rollout
continue-on-erroris allowed only for a named migration with an expiry/issue; required checks cannot be advisory indefinitely.Required coverage
cargo fmt --checkand clippy policy for maintained Rust crates;Acceptance criteria
./scripts/ci-check.sh --quick(or replacement) runs every PR-required platform-independent check and exits non-zero on any failure.continue-on-erroror|| true.Likely files
scripts/ci-check.sh.github/workflows/test.yml,.github/workflows/release.ymltools/validate-ffi.js,tools/check-file-lines.js, quality toolingpackage.jsonfiles and top-level docsNon-goals
Dependencies
Can start immediately. Add quality/hardware lane when that child issue lands.