Skip to content

fix(deps): bump Wasmtime to 46.0.2 for RUSTSEC-2026-0222 - #184

Open
flyingrobots wants to merge 1 commit into
mainfrom
fix/wasmtime-rustsec-2026-0222
Open

fix(deps): bump Wasmtime to 46.0.2 for RUSTSEC-2026-0222#184
flyingrobots wants to merge 1 commit into
mainfrom
fix/wasmtime-rustsec-2026-0222

Conversation

@flyingrobots

Copy link
Copy Markdown
Owner

Plain-English Walkthrough

TL;DR

cargo deny began failing on main because a new advisory, RUSTSEC-2026-0222,
covers the Wasmtime version this workspace pins. This raises the pinned engine
from 46.0.1 to 46.0.2, the smallest move that clears the advisory, and
updates the four places that assert the pin plus the one provenance digest that
depends on the lockfile.

Contract-visible result: none. Patch-level within 46.x, no host API change, no
provider ABI change, no golden artifact change. advisories ok, bans ok, licenses ok, sources ok [claim:deny-clean, confidence:1.00].

No issues are closed by this PR.

Walkthrough

The advisory

RUSTSEC-2026-0222, "Stores can mix up type indices between engines", affects
the Wasmtime engine that edict-provider-host-wasmtime embeds
[claim:advisory-applies, confidence:1.00]. The advisory lists four fixed ranges:
>=24.0.12 <25, >=36.0.13 <37, >=46.0.2 <47, and >=47.0.3. This workspace
pins 46.0.1, so 46.0.2 is the smallest move that clears it and the only one
that avoids a major-version jump.

This failure is not new work landing badly; it is a fresh advisory published
against an unchanged dependency. CI last ran green on this repository on
2026-07-30, and nothing in the dependency graph has moved since
[claim:preexisting, confidence:0.95].

Why one bump touches five files

The Wasmtime version is not a loose range. It is an exact pin, and that pin is
independently asserted by the provider dependency boundary check, so the two
must move together or the gate fails.

Site Role
crates/edict-provider-host-wasmtime/Cargo.toml The exact pin =46.0.2
xtask/src/provider_dependencies.rsWASMTIME_VERSION Asserts the resolved package version
xtask/src/provider_dependencies.rsreq check Asserts the declared requirement string
xtask/src/provider_dependencies.rs — failure message Names the required version to operators
docs/topics/providers/architecture.md States which engine the host owns

Cargo.lock moves too, carrying Wasmtime plus its thirteen internal crates and
pulley-interpreter/pulley-macros, all 46.0.1 -> 46.0.2.

The one fixture digest that moves, and why it is not a behavior change

The local gate flagged that provider component fixtures needed regeneration,
which is worth explaining rather than silently regenerating. The fixture
inventory stores two different kinds of digest, and only one of them depends on
the lockfile.

flowchart TD
    LOCK["Cargo.lock<br/>(host dependency set)"] --> SD["inventory.sourceDigest<br/>provenance of the build inputs"]
    WAT[".wat sources + guest crates"] --> SD
    WIT["edict-target-provider.wit"] --> SD
    WAT --> CD["inventory.components.*<br/>digests of the built .wasm bytes"]
    GUEST["wasm32-unknown-unknown<br/>guest toolchain"] --> CD
    SD -.->|"moved by this PR"| CHANGED["1 digest changed"]
    CD -.->|"unaffected by host engine"| SAME["5 digests identical"]
Loading
Caption: Which inventory digests depend on the host lockfile
  1. sourceDigest hashes every declared build input, and Cargo.lock is the
    first entry in that list, so any dependency change moves it by design.
  2. The per-component digests hash the built .wasm bytes.
  3. Those guests compile for wasm32-unknown-unknown and never link the host
    engine, so a host-side Wasmtime bump cannot change their bytes.
  4. Observed result matches: one sourceDigest changed, five component digests
    byte-identical.

That distinction is the reason this stays a dependency bump rather than an
artifact change. If a component digest had moved, the guests would have been
sensitive to the host engine version, which would be a genuine finding worth
stopping for [claim:fixture-scope, confidence:1.00].

Verification

cargo deny --locked check reports advisories ok, bans ok, licenses ok, sources ok, and the full local gate passes including the
provider-runtime-dependencies boundary check that pins the engine
[claim:gate-green, confidence:1.00].

The historical CHANGELOG.md entry that names 46.0.1 is deliberately left
intact: it records what shipped at the time and is not a statement about the
current pin.

Appendix: Citations
Claim Evidence Confidence Notes
claim:advisory-applies CI job supply-chain (cargo-deny) on PR #183error[vulnerability]: Stores can mix up type indices between engines, ID: RUSTSEC-2026-0222, Solution: Upgrade to >=24.0.12, <25.0.0 OR >=36.0.13, <37.0.0 OR >=46.0.2, <47.0.0 OR >=47.0.3; https://rustsec.org/advisories/RUSTSEC-2026-0222 1.00 Advisory text captured from the failing CI job on an unrelated PR.
claim:preexisting git diff --name-only origin/main...docs/release-date-guards contains no Cargo.toml, Cargo.lock, or deny.toml; the most recent green run before this was 2026-07-30T12:33:52Z 0.95 Establishes the failure came from a newly published advisory, not a dependency edit.
claim:fixture-scope git diff fixtures/providers/components/inventory.json@cb0ca6d8 → only sourceDigest changes; SOURCE_INPUTS in xtask/src/provider_components.rs#17 lists Cargo.lock as a hashed input; the five entries under components are unchanged 1.00 Directly observed diff plus the source list that explains it.
claim:deny-clean cargo deny --locked checkadvisories ok, bans ok, licenses ok, sources ok 1.00 Run locally against the committed lockfile.
claim:gate-green cargo xtask verify → all stages pass, including provider-runtime-dependencies: Wasmtime boundary verified, provider-component-fixtures: checked 5 fixture(s), and contract-check: 25 topic shelf(s) validated 1.00 Full local gate including clippy -D warnings under pedantic.

RUSTSEC-2026-0222 ("Stores can mix up type indices between engines")
affects the pinned Wasmtime 46.0.1 engine. The advisory's fixed ranges are
>=24.0.12 <25, >=36.0.13 <37, >=46.0.2 <47, or >=47.0.3; 46.0.2 is the
smallest move from the current pin and stays patch-level within 46.x.

The pin is exact and asserted in more than one place, so the bump moves
them together:

- crates/edict-provider-host-wasmtime/Cargo.toml (`=46.0.1` -> `=46.0.2`)
- xtask/src/provider_dependencies.rs (WASMTIME_VERSION, the `req` check,
  and its failure message)
- docs/topics/providers/architecture.md engine prose
- Cargo.lock (wasmtime plus its 13 internal crates and pulley)

The provider component fixture inventory records a new `sourceDigest`
because the workspace Cargo.lock is one of its hashed provenance inputs.
All five component digests are byte-identical: the guest components are
built for wasm32-unknown-unknown and do not depend on the host engine
version.

docs-impact: providers architecture shelf updated with the engine version;
no behavior, ABI, or golden artifact change. The historical CHANGELOG entry
naming 46.0.1 is left intact as a record of what shipped at the time.

Verified with cargo deny --locked check (advisories ok, bans ok, licenses
ok, sources ok) and cargo xtask verify (full gate, 25 shelves, Wasmtime
boundary verified).
@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@flyingrobots, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 32 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 57a2f06a-4f3a-4479-8b40-3725ed53b8c7

📥 Commits

Reviewing files that changed from the base of the PR and between df80f92 and cb0ca6d.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (5)
  • CHANGELOG.md
  • crates/edict-provider-host-wasmtime/Cargo.toml
  • docs/topics/providers/architecture.md
  • fixtures/providers/components/inventory.json
  • xtask/src/provider_dependencies.rs

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@flyingrobots

Copy link
Copy Markdown
Owner Author

@codex review please

CodeRabbit reports Review rate limited on this PR, which is one of the enumerated primary_unavailable_states in docs/topics/review-process/policy.toml, so requesting the documented fallback review per fallback_required_when_primary_unavailable.

Scope for review: a patch-level Wasmtime bump (46.0.146.0.2) clearing RUSTSEC-2026-0222. The pin is exact and asserted in xtask/src/provider_dependencies.rs, so both move together. The only fixture change is inventory.sourceDigest, because the workspace Cargo.lock is a hashed provenance input; all five component digests are byte-identical, since the guests build for wasm32-unknown-unknown and never link the host engine.

All four CI checks pass, including supply-chain (cargo-deny).

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. 🚀

Reviewed commit: cb0ca6d8dc

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant