#43: CM-4 filing kit — schedule-agnostic sync-streams patch + ready-to-file issue draft - #111
Merged
Conversation
…o-file issue draft
lann
enabled auto-merge (squash)
August 11, 2026 17:13
lann
disabled auto-merge
August 11, 2026 17:14
lann
enabled auto-merge
August 11, 2026 17:14
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
The remaining deliverable of #43 (the runtime migration landed in #45; the adjudication re-scoped the issue to the filing kit): ready-to-file upstream artifacts for the CM-4 test-defect finding.
upstream-issue-sync-streams-schedule-overfit.md— issue draft against WebAssembly/component-model, following theupstream-issue-stale-async-drop.mdconvention. Body distills the final adjudication (issue CM-4: sync-streams.wast:145 overfits wasmtime's scheduler — upstream test-defect filing kit #43, 2026-08-10): gate semantics are agreed by definitions.py, wasmtime, and the CanonicalABI.md prose; whatsync-streams.wast:145hard-asserts is the entry-decision timing, a non-normative scheduler policy on which the reference (eager-inline → STARTING) and wasmtime (deferred → STARTED) conformingly disagree.upstream-sync-streams-schedule-agnostic.patch— the proposed test fix,git apply --check-verified against spec HEAD73b7ad5: accept STARTING|STARTED from the lower; on STARTING, wait for the subtask's admission (STARTED) before touching the stream; every other assertion unchanged. The STARTED arm is byte-identical to today's assertions, so the current runner (wasmtime) loses no coverage.Every definitions.py/CanonicalABI.md/wast line citation in the draft was re-verified against the
73b7ad5submodule pin.Closes #43.
Verification
Pipeline: scratch test-dir →
testgen --test-dir X --out-dir Y async→runWastJsonwithRuntimeExecutor(real shim), no xfail filtering.sync-streams.wast(control)sync-streams.wastThe STARTING arm is dead code under deltic's drain-to-quiescence policy in the patched scenario (deltic answers STARTED, like wasmtime). To execute the new arm on a live engine rather than argue it by inspection, the variant leg reorders
$D.runso$C.setis called before the stream-1 read:$C.get's mid-frame park is then unready, no amount of draining can admit the callee, and the call reports STARTING (the semantics pinned byruntime/tests/entry_deferral_test.ts). The variant hard-asserts STARTING at the call, performs the stream-1 read/drop to make the holder ready, then runs the patched STARTING arm verbatim (wait for SUBTASK/STARTED with payload asserts) and the unchanged tail. Its 2/2 pass under FIFO + both seeds means the proposed arm's waits and asserts executed and held.Reproduction recipe
Variant construction: apply the kit patch, then in
$D.run(1) add(local $rx2 i32), (2) move the stream-1 read/assert/drop block to after the$C.setcall +waitable-set.new/join, calling$setwith$rx2from thestream.newpair, (3) replace the two-armifwith a hard(if (i32.ne (i32.const 0 (; STARTING ;)) ...) (then unreachable))followed by the STARTING arm's wait/asserts inline, (4) leave the tail unchanged. Header comment in the variant marks it deltic-verification-only (not for upstream).Filing boundary
Nothing is filed upstream by this PR; the draft + patch are artifacts for the operator (#15). The wasmtime-dev leg (
wasmtime wast -W component-model-async=y -W component-model-more-async-builtins=y test/async/sync-streams.wast) is documented in the filing notes as an optional pre-filing courtesy — by construction the patch only adds an arm wasmtime never takes.