Repository navigation
fix(deps): replace serde_yml and clear the open Dependabot alerts - #899
Open
austinborn wants to merge 1 commit into
Open
austinborn wants to merge 1 commit into
austinborn wants to merge 1 commit into
Conversation
serde_yml and the libyml it builds on have advisories with no fixed release. The config file, stored credentials and the model and update-check caches now read and write through serde-saphyr, a maintained pure-Rust YAML crate, with its options kept in src/yaml.rs: no parse budget for files the CLI writes itself, since the config's two caches may each reach CACHE_MAX_SIZE_BYTES; no source snippets in errors, since these files hold tokens and API keys; one line per scalar, which the line-by-line redaction in `actual config show` relies on. A repository's pnpm-workspace.yaml keeps the default budget. The lenient cache fields in Config read through serde_json::Value. jsonwebtoken moves from 9 to 10.4 on its rust_crypto backend, which takes ring's place for signing jwt-bearer assertions, and one test helper moves off the deprecated insecure_disable_signature_validation. The lockfile takes rustls 0.23.46, rustls-webpki 0.103.16, quinn-proto 0.11.19, rand 0.8.8 and rand 0.9.5. tests/fixtures/serde_yml holds a config file, a credentials file and both caches as serde_yml 0.0.12 wrote them, each beside the values serde_yml read it as. New tests read every fixture back to those values and round-trip it. Others cover the budget split, snippet-free errors, non-finite floats in a lenient cache field, a schema-mismatched cache block being dropped, and redaction of long and quoted API keys. City: city · Agent: local-core__builder-ci-wisp-xylofy
This branch has not been deployed
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.
Summary
This clears all 12 open Dependabot alerts on actual-cli.
serde_yml and libyml have no fixed release, so YAML now goes through serde-saphyr 2, a maintained pure-Rust crate, behind a new
src/yaml.rsthat keeps its options in one place. The config file, stored credentials and both caches keep their format: files serde_yml 0.0.12 wrote read back to the same values, and v0.9.0 reads what the new code writes. Two serde-saphyr defaults didn't preserve behaviour, so they're changed. Files the CLI writes itself parse without its node budget (a config holding near-cap caches would otherwise fail to load). And the emitter keeps each value on its key's line, because the default folded style moved long API keys past the line-by-line redaction inactual config show; a new test pins that.jsonwebtoken moves to 10.4 on its
rust_cryptobackend in place of ring, and the ES256 and RS256 assertionsactual mint-tokensigns still verify, under OpenSSL as well as in the existing tests. rustls, rustls-webpki, quinn-proto and rand take patched releases in the lockfile.The risk sits in the YAML swap. What a user can see change there is wording, since YAML parse errors read differently. Users get the fixes with the next release, which this PR doesn't cut, and drafts #884 and #898 also edit
Cargo.tomlandCargo.lock, so whichever of them merges later rebases its lockfile.Alerts closed
Read from the live alert list at 2026-10-25T23:20Z; alert 5 had already been withdrawn along with its advisory.
Test plan, choices and supporting detail
Test plan
cargo build,cargo fmt --check,cargo clippy -- -D warnings(library only, aslint.ymlruns it) andcargo check --no-default-features --lib --binsare clean.cargo test --workspace --features integration: 4,849 passed, 0 failed, 3 ignored.cargo llvm-covcommand: every changed file at 100% of lines,src/yaml.rsincluded. The one line short anywhere isanalysis/cache.rs:170, the detached-HEAD arm ofget_git_branch, which only a detached checkout reaches, as on CI.tests/fixtures/serde_ymlholds a config file covering every field, a credentials file and both caches as serde_yml 0.0.12 wrote them, each beside the JSON image of what serde_yml read it as. The config fixture carries strings that test quoting: numbers, booleans, null,~, padding,#,:, unicode, an empty string, multi-line text and leading indicator characters. New tests read each fixture back to that image and round-trip it.mainat d464a9d, not committed, read the new code's output for all four files with serde_yml into the same images.auth::jwt_bearerunit tests (server-style RFC 7523 verification ofiss,sub,aud, lifetime,alg,kid,typ) and the 6mint_token_clitests pass. The debug binary also minted an ES256 and an RS256 assertion against a local token endpoint: both requests posted the jwt-bearer grant and the requested scope, both headers and claims were as expected, and OpenSSL 3.0.13 printedVerified OKfor both signatures with the matching public keys.Choices
Valuetype, so the two lenient cache fields inConfigread throughserde_json::Value, with non-finite floats passed through as null so a stray.nandrops the cache block, not the whole config.rust_cryptooveraws_lc_rs: it adds no C toolchain to the four release targets, and itsrsa,p256andhmaccrates were already in the lockfile.quinn?/ringfeature reference;cargo treefinds no consumer, so the bump changes no compiled code.src/lib.rs.