Skip to content

deps: clear all 14 Dependabot PRs - #24

Open
singhpratech wants to merge 2 commits into
mainfrom
deps/2026-08-01
Open

deps: clear all 14 Dependabot PRs#24
singhpratech wants to merge 2 commits into
mainfrom
deps/2026-08-01

Conversation

@singhpratech

Copy link
Copy Markdown
Owner

Supersedes #1, #2, #3, #4, #5, #6, #16, #17, #18, #19, #20, #21, #22, #23.

Three of the fourteen were red, all on cargo-deny, all for a duplicate-version ban rather than an advisory:

PR bump why it was red
#20 serde 1.0.229 serde_derive moved to syn 3.0
#22 thiserror 2.0.19 thiserror-impl moved to syn 3.0
#21 twox-hash 2.1.2 pulled rand 0.9 beside DataFusion's rand 0.8

syn gets a documented skip. Both roots on the 3.0 line and all eighteen on the 2.0 line are proc-macro or build-script crates, so neither version links into a shipped artifact and the cost is compile time. Retires when the 2.0 list empties out.

twox-hash needed no skip. The random feature exists to build a RandomState we never construct, and it was the only thing pulling rand 0.9 — default-features = false drops it. XXH64 is spec-fixed, so 2.x is digest-identical to the 1.6 line every published Puffin sidecar was built with; verified over both the oneshot and chunked-write paths before taking the bump, since a silent digest change would break cross-version sketch merges without failing a test.

That bump also exposed a wrong comment in deny.toml: the existing twox-hash skip claimed samkhya-core pinned 1.6 while DataFusion pulled 2.x. DataFusion 46 in fact roots both — parquet 54 → 1.6.3, lz4_flex → 2.1.2 — and samkhya-core's own pin was the 1.6 that made the duplicate look like ours. The skip stays, upstream-only, paths corrected.

Actions go to the current major (checkout / setup-node / upload-artifact v7, setup-python v7 — one past the v6 Dependabot proposed) rather than one step at a time; the runner had already started warning that checkout@v4 targets the deprecated Node 20.

#16 is declined, not merged: it proposed replacing floating @v2 with an exact patch of taiki-e/install-action, which publishes several releases a week. Every action here is referenced by major tag on purpose, so dependabot.yml now ignores patch and minor for the Actions ecosystem and lets majors through.

Verification

Run locally against every CI job, not just the changed surface:

  • cargo fmt --check, cargo clippy --workspace --all-targets — clean
  • cargo test --locked --workspace — 415 passed, 0 failed
  • cargo +1.85 check --locked --workspace on a real 1.85 toolchain — clean
  • optional-feature matrix: core-all 272, iceberg 26, polars 13, duckdb bundled 9 (full C++ build), puffin-cross-engine 2 — all 0 failed
  • cargo deny --locked --workspace check — advisories ok, bans ok, licenses ok, sources ok
  • both wire-contract transports against the bumped FastAPI 0.140.13 / uvicorn 0.51.0

Note, not an action item

duckdb 1.10505.0 declares rust-version = 1.85.1 while the workspace declares 1.85. It only affects someone on exactly 1.85.0 enabling the off-by-default bundled feature, and CI's "1.85" resolves to 1.85.1 — so the floor is not being raised for an optional dependency.

🤖 Generated with Claude Code

singhpratech and others added 2 commits August 2, 2026 12:02
…onale

Three of the fourteen were red, all on cargo-deny, all for a
duplicate-version ban rather than an advisory:

  #20 serde 1.0.229    serde_derive moved to syn 3.0
  #22 thiserror 2.0.19 thiserror-impl moved to syn 3.0
  #21 twox-hash 2.1.2  pulled rand 0.9 beside DataFusion's rand 0.8

syn gets a documented skip: both roots on the 3.0 line and all eighteen
on the 2.0 line are proc-macro or build-script crates, so neither version
links into a shipped artifact and the cost is compile time. The
derive ecosystem is mid-migration; the retire condition is the 2.0 list
emptying out.

twox-hash needed no skip at all. The `random` feature exists to build a
RandomState we never construct, and it was the only thing pulling rand
0.9 — `default-features = false` drops it. XXH64 is fixed by the spec, so
2.x is digest-identical to the 1.6 line every published Puffin sidecar
was built with; verified over both the oneshot and chunked-write paths
before taking the bump, because a silent digest change would have broken
cross-version sketch merges without failing a test.

That bump also exposed a wrong comment. The existing twox-hash skip
claimed samkhya-core pinned 1.6 while DataFusion pulled 2.x. In fact
DataFusion 46 roots both — parquet 54 takes 1.6.3, lz4_flex takes 2.1.2 —
and samkhya-core's own pin was the 1.6 that made the duplicate look like
ours. The skip stays, upstream-only, with the paths corrected.

The Actions bumps go to the current major (checkout/setup-node/
upload-artifact v7, setup-python v7, one past the v6 Dependabot proposed)
rather than one step at a time; the runner had already started warning
that checkout@v4 targets the deprecated Node 20. #16 is declined instead:
it proposed replacing floating `@v2` with an exact patch of
taiki-e/install-action, which publishes several releases a week. Every
action here is referenced by major tag on purpose, so dependabot.yml now
ignores patch and minor for the Actions ecosystem and lets majors through.

Verified locally against every CI job, not just the changed surface:
fmt, clippy, 415 workspace tests, MSRV check on a real 1.85 toolchain,
all five optional-feature matrix entries including the bundled DuckDB
C++ build, all four cargo-deny checks, and both wire-contract transports
against the bumped FastAPI 0.140.13 / uvicorn 0.51.0.

One thing to know rather than act on: duckdb 1.10505.0 declares
rust-version 1.85.1 while the workspace declares 1.85. It only matters to
someone on exactly 1.85.0 enabling the off-by-default `bundled` feature,
and CI's "1.85" resolves to 1.85.1, so the floor is not being raised for
an optional dependency.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
`core-all` went red on the dependency batch with

    residual::llm_http_tests::mock_clamps_to_ceiling
    left: None  right: Some(500)

which is not a dependency regression. `mock_success_returns_clamped_estimate`
exercises the identical mock, transport and JSON path and passed in the
same run, and samkhya-core's HTTP client (ureq 2.12.1) is byte-identical
to main — the duckdb bump's ureq 3.3.0 is a separate, unrelated node.

The mock served one `read()` per connection and called that the whole
request. It isn't, however small the payload: a read returns one
segment's worth, and the header block and JSON body can arrive
separately. When they do, the server replies and drops the socket with
body bytes still in its receive queue, the kernel answers those
leftovers with an RST rather than a FIN, and the RST discards the
response out of the client's receive buffer. ureq reports ECONNRESET,
the corrector's failure contract converts that to `Ok(None)`, and a
green-path assertion fails as though the endpoint were down.

Confirmed rather than assumed — a standalone repro drives the split
directly. With the old single-read server the client gets `Connection
reset by peer` at 3/3 timing configurations; with the request drained it
gets the response at 3/3.

So the fix is to read the request in full: to the `\r\n\r\n`
terminator, then exactly `Content-Length` more bytes. Still not a
general HTTP parser — it handles what the corrector sends and nothing
else.

Worth noting the failure mode this class of bug hides behind. The
corrector is *designed* to swallow transport errors so a downed LLM
endpoint can never fail a query, which means a broken transport and a
working one that returns nothing are indistinguishable at the
assertion. A flake here reads as a bad estimate, not a dropped
connection.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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