Skip to content

build: return to released wit-bindgen after cancellation fixes ship #720

Open

Description

@lthibault

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.0 fails with Rust E0308 due to incompatible StreamReader types; 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-rs crates/wasip3/Cargo.toml declares wasip3 0.9.1+wasi-0.3.2, but its root Cargo.toml still declares wit-bindgen = 0.62.0. Upstream wasi-rs #171 (merged 2026-10-19) explicitly says the 0.9.1 bindings were regenerated with wit-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

  1. A released upstream wasip3 supports wit-bindgen 0.63.0 or later with equivalent cancellation semantics, and the native P3 guest compilation/reproduction succeeds.
  2. Upstream publishes an endorsed compatibility path with convincing test evidence.
  3. 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-bindgen 0.62.0
  • repository: https://github.com/wetware/wit-bindgen
  • revision: 025f95c294373c73e12eaee335577c81477d5a20
  • Cargo.lock resolves the wit-bindgen 0.62.0 package 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-bindgen containing 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-bindgen pin remains solely for these fixes.

#1740 + #1743 merged != tracker complete.

released upstream dependency adopted by Wetware = tracker complete.

Activity

  1. added
    infraInfrastructure & platform capabilities
    P2Medium — planned improvement
    on Oct 13, 2026
  2. changed the title [-]build: return to released wit-bindgen after cancellation wake fix ships[/-] [+]build: return to released wit-bindgen after cancellation fixes ship[/+] on Oct 13, 2026
  3. lthibault commented on Oct 23, 2026

    @lthibault
    ContributorAuthor

    Status update — 2026-10-23: re-parked; next review 2026-11-12

    The upstream wit-bindgen v0.63.0 release contains the required #1740 and #1743 cancellation fixes, but the proposed dependency return is blocked by wasip3 compatibility. The wasip3 0.9.0 guest API expects wit-bindgen ^0.62; testing a direct 0.63.0 swap produces incompatible StreamReader types (E0308). The same reproduction passes with Wetware's existing fork. An independent adversarial review confirmed this blocker.

    The upstream wasi-rs 0.9.1 wasip3 update does not lift it: wasi-rs #171 states those bindings were regenerated with wit-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 compatible wasip3/wit-bindgen pair (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.md in Conductor workspace ww/gaborone (not attached to this comment).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Medium — planned improvementcleanupinfraInfrastructure & platform capabilities

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions