Repository navigation
build: return to released wit-bindgen after cancellation fixes ship #720
Description
Current status — Parked: blocked on upstream wasip3/wit-bindgen compatibility (2026-10-23)
Next scheduled review: 2026-11-12. Recheck the first published compatible wasip3 + wit-bindgen combination, rather than automatically migrating on the review date.
Do not migrate yet. Although released upstream wit-bindgen v0.63.0 contains both required cancellation fixes (#1740 and #1743), Wetware's native P3 guests also use wasip3 0.9.0, which requires wit-bindgen ^0.62.0. A direct move to 0.63.0 is not a safe isolated dependency bump.
Implementation attempt / evidence (2026-10-23)
- Conductor's isolated reproduction: replacing the direct pin with
wit-bindgen 0.63.0fails with Rust E0308 due to incompatibleStreamReadertypes; identical source passes using the current Wetware fork. An independent adversarial reviewer confirmed the compatibility blocker. The reproduction notes are in the local Conductor workspace:.context/720-blocker/README.md(not uploaded here). - The latest inspected upstream
bytecodealliance/wasi-rscrates/wasip3/Cargo.tomldeclareswasip3 0.9.1+wasi-0.3.2, but its rootCargo.tomlstill declareswit-bindgen = 0.62.0. Upstream wasi-rs #171 (merged 2026-10-19) explicitly says the 0.9.1 bindings were regenerated withwit-bindgen 0.62.0. Therefore moving from wasip3 0.9.0 to 0.9.1 does not establish compatibility with 0.63.0. - The cancellation audit also found missing explicit test coverage for spawned-task survival after root cancellation. Cancellation behavior with 0.63.0 has not been validated in Wetware.
- No tracked files were changed; no commit, PR, merge or full CI run occurred.
Scheduling: Parked / blocked on upstream compatibility; next review 2026-11-12. Do not treat the issue as Ready. Retain the current reviewed fork until a compatible, released wasip3/wit-bindgen combination is demonstrated. Do not mix in a speculative API adapter, fork of wasip3, or weakened P3 cancellation semantics solely to retire the fork.
Wake conditions
- A released upstream
wasip3supportswit-bindgen 0.63.0or later with equivalent cancellation semantics, and the native P3 guest compilation/reproduction succeeds. - Upstream publishes an endorsed compatibility path with convincing test evidence.
- A concrete security/reliability problem with the existing fork changes the risk decision.
When unblocked: inventory every independent guest manifest/lockfile, regenerate via Cargo, migrate provenance/docs, add the missing root-versus-spawned-task cancellation regression, run targeted native P3 and RPC/stream/teardown tests, workspace checks and CI, and independently review the full diff. Close only after a validated merge.
Previously verified prerequisite: wit-bindgen v0.63.0 contains #1740 and #1743, confirmed by release-tag ancestry. This solves only the wit-bindgen release gate, not the end-to-end dependency compatibility gate.
Context
Wetware currently pins a temporary Wetware wit-bindgen fork because of an async cancellation/runtime bug.
Verified against wetware/ww master commit a96e53802595e78d4459dca6ec0eac6acacc9f21 on 2026-10-14:
- package:
wit-bindgen0.62.0 - repository:
https://github.com/wetware/wit-bindgen - revision:
025f95c294373c73e12eaee335577c81477d5a20 Cargo.lockresolves thewit-bindgen0.62.0package family to the same revision
Two related upstream fixes are now merged.
#1740 — cancelled-task wake state
bytecodealliance/wit-bindgen#1740
Title:
rust: suppress wake notifications while destroying async tasks
Status:
Merged upstream
Merge commit:
1145d464309219e2f2d8857507413cb41d8c1ca5
This fixes destruction-time wake notifications after a component task has been cancelled.
#1743 — spawned tasks survive root cancellation
bytecodealliance/wit-bindgen#1743
Title:
Don't cancel spawned rust tasks on component task cancel
Status:
Merged upstream
Merge commit:
1559c82dc3e8f8fa7dfd0efd2665a82ca4b94717
This is the follow-up bug Alex Crichton identified during review of #1740. It changes EVENT_CANCEL semantics so cancellation applies to the component task's root computation while Rust tasks created with wit_bindgen::spawn_local continue running to completion.
#1743 is based directly on the #1740 merge. GitHub's commit comparison shows the #1740 merge as the merge base and #1743 two commits ahead, so upstream main now contains both fixes in sequence.
Historical note from the 2026-10-13 investigation (superseded by the current status above): At tracker update time, the latest released wit-bindgen version is v0.62.0, published on 2026-09-10. The release tag resolves to c604ee01c03f50d7301984a3c920a650752cd136. GitHub's commit comparisons show that tag is 21 commits behind the #1740 merge and 23 commits behind the #1743 merge. It contains neither fix, so no released upstream version currently satisfies this tracker.
Desired outcome
Return Wetware from the temporary fork pin to a normal released upstream wit-bindgen containing both #1740 and #1743.
There is no unresolved spawn_local watch item remaining from this investigation: the follow-up issue identified during #1740 review is #1743 and is already fixed upstream.
Both upstream PRs being merged is not sufficient to complete this tracker.
This follows the same dependency-return lifecycle as #717, but neither issue depends on the other:
upstream fixes merged
↓
wait for suitable released version containing both
↓
return Wetware to normal released dependency
↓
remove temporary fork
Scheduling
The upstream release prerequisite is fulfilled. Implement and validate the targeted dependency return above; do not wait for the historical check-up date. Keep the issue open pending merged implementation and final regression evidence.
Exit criteria
- Identify the first suitable released upstream
wit-bindgencontaining both #1740 and #1743. - Update Wetware from the temporary fork/git pin to the released dependency.
- Run the relevant guest cancellation / async runtime regressions.
- Verify the corrected root-vs-spawned-task cancellation behavior where relevant.
- Remove obsolete fork/provenance configuration and documentation.
- Verify no
wetware/wit-bindgenpin remains solely for these fixes.
#1740 + #1743 merged != tracker complete.
released upstream dependency adopted by Wetware = tracker complete.
Activity
[-]build: return to released wit-bindgen after cancellation wake fix ships[/-][+]build: return to released wit-bindgen after cancellation fixes ship[/+]lthibault commentedon Oct 23, 2026
Status update — 2026-10-23: re-parked; next review 2026-11-12
The upstream
wit-bindgen v0.63.0release contains the required #1740 and #1743 cancellation fixes, but the proposed dependency return is blocked bywasip3compatibility. Thewasip3 0.9.0guest API expectswit-bindgen ^0.62; testing a direct0.63.0swap produces incompatibleStreamReadertypes (E0308). The same reproduction passes with Wetware's existing fork. An independent adversarial review confirmed this blocker.The upstream
wasi-rs0.9.1wasip3update does not lift it: wasi-rs #171 states those bindings were regenerated withwit-bindgen 0.62.0; the inspected repository root continues to pin that version.The attempted migration stopped with no tracked file changes, PR, merge, or full regression run. The cancellation audit also identified missing explicit regression coverage for spawned-task survival after root cancellation. That coverage must be added and verified during the eventual migration; no claim is made that 0.63.0 passes it in Wetware.
Decision: Keep the reviewed current fork; do not force an upgrade, fork
wasip3, or relax lifecycle tests solely to remove the temporary pin. Park #720 until a released and compatiblewasip3/wit-bindgenpair (or an upstream-endorsed compatible path) is available. Recheck on 2026-11-12, sooner if upstream ships the necessary compatibility. At that point inspect Cargo constraints and rerun the minimal reproduction before authorizing a migration. A review date is not an automatic unpark.Local reproduction/evidence:
.context/720-blocker/README.mdin Conductor workspaceww/gaborone(not attached to this comment).