ci(gust): syscall-seam WIT↔impl drift gate (gale#214) - #220
Merged
Conversation
…32 (gale#214) Closes the process gap that let #202 ship green: it added time.resolution() to the gust:os WIT without the time-provider Guest impl (E0046), silently breaking the gust_os_tl/ts dissolve until #213 caught it by hand. No workflow built the provider crates, so the compile error never fired in CI. This gate builds every gust:os provider/app crate for wasm32 (the dissolve target) — a WIT method that outruns its Guest impl now fails RED. Cargo-only; the wit-bindgen-generated Guest trait makes the compile the oracle. Red-tested: injecting a method into the time interface without the impl reproduces E0046 'not all trait items implemented'; the gate on main is green (8/8 crates). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Closes gale#214 — the process gap that let #202 ship green: it added
time.resolution()to thegust:osWIT (drivers/wit-os/gust-os.wit) without the matchingtime-providerGuest impl, which is anE0046compile error — but no workflow built the provider crates, so the break never fired in CI and only surfaced when thegust_os_tl/tsdissolve was exercised by hand (fixed in #213).The gate
benches/gust/drivers/check-providers.shbuilds everygust:osprovider/app crate forwasm32-unknown-unknown(the same targetbuild-os-tl.sh/build-os-ts.shdissolve from):app-time,app-tl,app-ts,time-provider,log-provider,spawn-provider,timer-provider,exec-provider. Each callswit_bindgen::generate!against../wit-os, so a WIT method that outruns its Guest impl fails the build..github/workflows/gust-syscall-seam.ymlruns it on push/PR (path-filtered to the WIT / provider / app crates). Cargo-only — no meld/loom/synth/qemu needed; the compile is the oracle (wit-bindgen turns the WIT into the Guest trait).Oracle-gated (red-tested)
drift-probe: func() -> u64;into thetimeinterface without the impl →time-providerbuild fails exit 101,E0046: not all trait items implemented, missing: drift_probe— the exact feat(gust): gust:os timer-sleep — tickless component sleep over the verified executor (VER-OS-TIMER-001 verified) #202 class.main, all 8 crates build (WIT ↔ impl in sync). Reverting the injection restores the clean build.Kill-criterion
If a future WIT-interface change to
gust:osmerges without updating the provider that exports it, this gate goes red. If it stays green through such a change, the gate isn't covering that crate — add it toCRATESin the script.🤖 Generated with Claude Code