fix(FFESUPPORT-891): remediate July 2026 dependabot vulnerabilities - #420
Conversation
Rust: - pyo3 0.27 -> 0.29 (eppo_core + python-sdk); pyo3-log 0.13.2 -> 0.13.4. Migration was version-only plus an explicit `from_py_object` opt-in on the two #[pyclass] Clone types (ContextAttributes, AssignmentLogger), preserving the FromPyObject derive that pyo3 0.29 makes opt-in. serde-pyobject 0.8.0 already supports pyo3 >=0.27, so no bump needed there. - serde_with 3.20.0 -> 3.21.0 (ruby-sdk + elixir-sdk Cargo.lock). npm (package-lock.json; monorepo dev/test tooling): - shell-quote 1.8.1 -> 1.10.0 (critical), form-data 4.0.5 -> 4.0.6, js-yaml 4.1.1 -> 4.3.0 and 3.14.2 -> 3.15.0, joi 17.13.3 -> 17.13.4. Verified: cargo check --workspace, eppo_core 57 tests pass (pyo3 feature), eppo_py extension builds, npm reports 0 vulnerabilities. Python maturin build + pytest and ruby/elixir SDK builds run in CI. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
🦋 Changeset detectedLatest commit: e7582e9 The changes in this PR will be included in the next version bump. This PR includes changesets to release 5 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
There was a problem hiding this comment.
Pull request overview
This PR remediates Dependabot-reported vulnerabilities by updating vulnerable transitive npm dependencies via package-lock.json re-resolution, and bumping Rust dependency versions/locks across the workspace—most notably upgrading pyo3 to address advisories impacting the Python bindings.
Changes:
- Bumped
pyo3to0.29(andpyo3-logto0.13.4) and updated#[pyclass]annotations to opt intofrom_py_objectwhere required. - Updated
serde_with/serde_with_macrosto3.21.0in the Ruby and Elixir SDK lockfiles. - Updated npm lockfile resolutions to pull patched versions of
shell-quote,form-data,js-yaml, andjoi(plus related transitives).
Reviewed changes
Copilot reviewed 4 out of 7 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| ruby-sdk/Cargo.lock | Updates serde_with and macro crate lock entries to the patched version. |
| elixir-sdk/Cargo.lock | Updates serde_with and macro crate lock entries to the patched version. |
| eppo_core/Cargo.toml | Bumps pyo3 dependency version used under the pyo3 feature. |
| eppo_core/src/attributes/context_attributes.rs | Updates pyclass attributes to include from_py_object for extraction support under pyo3 0.29. |
| python-sdk/Cargo.toml | Bumps pyo3 and pyo3-log to patched/compatible versions for the Python extension. |
| python-sdk/src/assignment_logger.rs | Adds from_py_object to AssignmentLogger’s #[pyclass] to maintain extractability under pyo3 0.29. |
| package-lock.json | Lockfile-only updates to resolve vulnerable npm transitives to patched versions. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
pyo3 0.29 declares rust-version 1.83; eppo_core still declared 1.80, so the manifest under-stated the MSRV once the pyo3 feature bumped. Align the declared rust-version with the actual requirement. (Flagged by codex review.) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
🤖 Response from codex: CONCERNS: PyO3 bump violates the declared MSRV
(codex ran locally via |
|
🤖 Response from Claude: Agreed and fixed in |
|
🤖 Response from codex: (re-check after fix) RESOLVED
|
Patch bump for eppo_core/python-sdk/ruby-sdk/elixir-sdk/rust-sdk: pyo3 0.27->0.29 and serde_with 3.20->3.21 change the published Rust crates / Python wheel, so this queues a patch release. (Flagged in review — the fix PR was missing a changeset.) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
dd-oleksii
left a comment
There was a problem hiding this comment.
a couple of minor comments but otherwise looks good 👍
| @@ -0,0 +1,9 @@ | |||
| --- | |||
| "eppo_core": patch | |||
There was a problem hiding this comment.
pyo3 version is part of the public interface, so that's technically a major change for the core
| "eppo_core": patch | |
| "eppo_core": major |
| "elixir-sdk": patch | ||
| "python-sdk": patch | ||
| "ruby-sdk": patch | ||
| "rust-sdk": patch |
There was a problem hiding this comment.
Nothing changed for Rust SDK, so it doesn't need a release
| "rust-sdk": patch |
| keywords = ["eppo", "feature-flags"] | ||
| categories = ["config"] | ||
| rust-version = "1.80.0" | ||
| rust-version = "1.83.0" # raised from 1.80: pyo3 0.29 (optional `pyo3` feature) requires Rust >= 1.83 |
There was a problem hiding this comment.
minor: the comment is irrelevant once the PR is merged
| rust-version = "1.83.0" # raised from 1.80: pyo3 0.29 (optional `pyo3` feature) requires Rust >= 1.83 | |
| rust-version = "1.83.0" |
| "rust-sdk": patch | ||
| --- | ||
|
|
||
| Security: update dependencies to patched versions (July 2026 Dependabot advisories). Bumps `pyo3` 0.27 → 0.29 (python-sdk / eppo_core's optional `pyo3` feature; raises that build's MSRV to 1.83) and `serde_with` 3.20 → 3.21 (ruby-sdk / elixir-sdk). No public API changes. |
There was a problem hiding this comment.
minor: this looks like it wants separate changeset entries for pyo3 and serde_with bumps. pyo3 is not applicable to ruby/elixir, so ideally should leak into their changelogs
🤖 Generated from Claude
Remediates the 11 open Dependabot alerts in
eppo-multiplatformacross the Rust workspaces and npm tooling. Jira: https://datadoghq.atlassian.net/browse/FFESUPPORT-891Advisories closed
Approach
Bound/into_pyobjectAPI, so the migration was just the version bump +pyo3-log 0.13.2 → 0.13.4(0.13.2 capped at<0.28) + an explicitfrom_py_objectopt-in on the two#[pyclass]Clonetypes (ContextAttributes,AssignmentLogger) — pyo3 0.29 makes that derive opt-in, and I kept the existing behavior.serde-pyobject 0.8.0already allows pyo3>=0.27, so no change there.package.jsonunchanged). The rootCargo.lockis gitignored, so the Rust fixes ride on theCargo.tomlbumps (CI regenerates the lock).How the tests/CI protect this change
cargo check --workspace✓;cargo test -p eppo_core(pyo3 feature) → 57 tests pass;cargo build -p eppo_py(Python extension) ✓.npm updatereports 0 vulnerabilities.cargo test --workspace --all-featuresplus the Python (maturin + pytest), Ruby, and Elixir SDK suites — which exercise the pyo3 bindings end-to-end.Deferred advisories
None — all 11 alerts addressed; none left dismissed/auto-dismissed.