docs(rivet): track kiln-async external-wake + host-future/Waker bridge gaps - #408
Merged
Conversation
Two kiln-async gaps surfaced by the executor-comparison benchmark (Findings 1 & 8 + the bench bridge doc comment) are now tracked artifacts instead of only phase notes under REQ_ASYNC_SCHED: - REQ_ASYNC_EXTWAKE (v0.5.0): external wake-up path. Scheduler::mark_ready is public and TaskOutcome::Waited parks a task, but mark_ready is only driven by INTERNAL scheduler events within poll_round — no out-of-loop event source (timer/ISR/host/gale) can wake a parked task, so "wait on a real event, be woken later" is not achievable today. Needs a sound external-wake API that keeps no_std/no-alloc/forbid-unsafe/fuel-bounded and states its concurrency model. - REQ_ASYNC_WAKERBRIDGE (v0.6.0): official std-only core::task::Future/Waker bridge. kiln-async is forbid(unsafe_code) permanently and deliberately never polls a Rust Future / builds a RawWaker vtable; the benchmark's bridge is explicitly unofficial — sound only for futures that self-wake inline, not general futures that store/clone the Waker. The "R1 unsafe waker" belongs in a separate std-only companion crate (may use unsafe) whose wake() routes to REQ_ASYNC_EXTWAKE — OUTSIDE the cert crate. Not a defect; a descoped feature. Both derive-from REQ_ASYNC_SCHED; the bridge depends-on the external-wake path. Planning-only (rivet YAML); rivet validate = 0 errors. Trace: skip
🔍 Build Diagnostics ReportSummary
🎯 Impact AnalysisIssues in Files You Modified
Cascading Issues (Your Changes Breaking Other Files)
✅ No Issues DetectedPerfect! Your changes don't introduce any new errors or warnings, and don't break any existing code. 📊 Full diagnostic data available in workflow artifacts 🔧 To reproduce locally: # Install cargo-kiln
cargo install --path cargo-kiln
# Analyze your changes
cargo-kiln build --output json --filter-severity error
cargo-kiln check --output json --filter-severity warning |
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.
Lands two kiln-async gaps as tracked rivet requirements (roadmap-only; no code). Surfaced by the executor-comparison benchmark (Findings 1 & 8) and the bench bridge doc comment — previously only phase notes under
REQ_ASYNC_SCHED.REQ_ASYNC_EXTWAKE — external wake-up path (v0.5.0)
Scheduler::mark_readyis public andTaskOutcome::Waitedparks a task, butmark_readyis only ever driven by internal scheduler events insidepoll_round. No out-of-loop event source (timer/ISR/host callback/gale event-group) can wake a parked task, so a task cannot today wait on a real external event and be resumed later. Needs a sound external-wake API preservingno_std/ no-alloc /forbid(unsafe_code)/ fuel-bounded, with an explicit concurrency model.REQ_ASYNC_WAKERBRIDGE — official host Future/Waker bridge (v0.6.0)
kiln-async is
#![forbid(unsafe_code)]permanently and deliberately never polls a RustFutureor builds aRawWakervtable. The benchmark's bridge is explicitly unofficial/non-production — sound only for futures that self-wake synchronously inline (e.g.CooperativeYield), not general futures that store/clone theWaker. The "R1 unsafe waker" belongs in a separate std-only companion crate (may useunsafe) whosewake()routes to the external-wake path — outside the cert crate. Not a defect; a deliberately-descoped feature.Both
derives-from REQ_ASYNC_SCHED; the bridgedepends-on REQ_ASYNC_EXTWAKE.rivet validate= 0 errors.🤖 Generated with Claude Code