Follow-up to #251.
Big rock me investigate. convert_case make three crate live in tree: 0.6.0, 0.7.1, 0.10.0. Cargo update no help. All three already at latest of their major. Each major pinned by transitive crate we no own. Workspace [patch] no fix — only force-rebuild, no dedupe.
Current state (claude/friendly-maxwell-0olke)
$ cargo tree --target wasm32-unknown-unknown | grep -oE "convert_case v[0-9]+\.[0-9]+\.[0-9]+" | sort -u
convert_case v0.10.0
convert_case v0.6.0
convert_case v0.7.1
Same three on native target.
Who pin each version
| Version |
Pinned by (req) |
Why we no can unify |
0.6.0 |
server_fn_macro 0.7.8 (req "0.6.0") and config 0.15.22 (req "0.6.0", via leptos_config 0.7.8) |
Both pull from inside Leptos 0.7 stack. Even Leptos 0.7.9 (latest 0.7.x) still wire server_fn_macro 0.7.8. Bumping to Leptos 0.8 = framework major, breaking-change scope, way out of TD-02. |
0.7.1 |
leptos_macro 0.7.9 (req "0.7") and reactive_stores_macro 0.1.8 (req "0.7", via reactive_stores/tachys) |
Same Leptos 0.7 stack — but two crate inside Leptos 0.7 already disagree with each other (server_fn_macro 0.6 vs leptos_macro 0.7). Even bumping to 0.8 not guarantee fix. |
0.10.0 |
derive_more-impl 2.1.1 (req "0.10") |
Used by entire iroh stack (iroh, iroh-base, iroh-blobs, iroh-gossip, iroh-relay, iroh-tickets, n0-future, n0-watcher, netwatch, portmapper, noq, irpc). Bumping iroh major = breaking scope. Out of TD-02. |
Why cargo update -p convert_case no help
$ cargo update -p convert_case@0.6.0
note: pass `--verbose` to see 40 unchanged dependencies behind latest
$ cargo update -p convert_case@0.7.1
note: pass `--verbose` to see 40 unchanged dependencies behind latest
$ cargo update -p convert_case@0.10.0
note: pass `--verbose` to see 40 unchanged dependencies behind latest
All three already at latest of their semver-compat range. Cargo no can pick single version because three transitive ^0.6 / ^0.7 / ^0.10 ranges no overlap.
Why workspace [patch] no help
[patch] only redirect source — it must still satisfy semver. We could not, e.g., make ^0.6 resolve to 0.10.x without forking convert_case crate itself and lying about its version. That break derive_more-impl API expectation (convert_case 0.6 → 0.10 has API breakage — the crate add Casing trait, rename methods, etc.).
The choice is: fork-and-lie (broken builds, maintenance burden), or accept three majors (small unique-per-major footprint, no functional risk).
What "fix" actually need
Three separate upstream domino, none in our control:
- Leptos 0.7 internal cleanup.
leptos_macro and server_fn_macro need to align on same convert_case major. Already split inside Leptos 0.7.x. Probably never get fixed in 0.7 line.
- Leptos 0.8 upgrade. Framework major — own breaking-change PR. Even then, no guarantee
convert_case unify (Leptos 0.8 not audited here).
derive_more 2.x switch off convert_case or align with Leptos's choice. Pure upstream concern.
Until those land, three-version split structural.
What we could do, cosmetic (low value)
- Add documentation note to top of
Cargo.toml flag convert_case as known-multi-version. Pure paperwork. No build impact.
- Wait for Leptos 0.8 migration (separate effort, separate scope).
Neither worth own PR.
Recommendation
Refs #251.
https://claude.ai/code/session_01FHLLfYeh9P9FP7Y47wu9We
Follow-up to #251.
Big rock me investigate.
convert_casemake three crate live in tree:0.6.0,0.7.1,0.10.0. Cargo update no help. All three already at latest of their major. Each major pinned by transitive crate we no own. Workspace[patch]no fix — only force-rebuild, no dedupe.Current state (claude/friendly-maxwell-0olke)
Same three on native target.
Who pin each version
0.6.0server_fn_macro 0.7.8(req"0.6.0") andconfig 0.15.22(req"0.6.0", vialeptos_config 0.7.8)server_fn_macro 0.7.8. Bumping to Leptos 0.8 = framework major, breaking-change scope, way out of TD-02.0.7.1leptos_macro 0.7.9(req"0.7") andreactive_stores_macro 0.1.8(req"0.7", viareactive_stores/tachys)server_fn_macro0.6 vsleptos_macro0.7). Even bumping to 0.8 not guarantee fix.0.10.0derive_more-impl 2.1.1(req"0.10")iroh,iroh-base,iroh-blobs,iroh-gossip,iroh-relay,iroh-tickets,n0-future,n0-watcher,netwatch,portmapper,noq,irpc). Bumpingirohmajor = breaking scope. Out of TD-02.Why
cargo update -p convert_caseno helpAll three already at latest of their semver-compat range. Cargo no can pick single version because three transitive
^0.6/^0.7/^0.10ranges no overlap.Why workspace
[patch]no help[patch]only redirect source — it must still satisfy semver. We could not, e.g., make^0.6resolve to0.10.xwithout forkingconvert_casecrate itself and lying about its version. That breakderive_more-implAPI expectation (convert_case0.6 → 0.10 has API breakage — the crate addCasingtrait, rename methods, etc.).The choice is: fork-and-lie (broken builds, maintenance burden), or accept three majors (small unique-per-major footprint, no functional risk).
What "fix" actually need
Three separate upstream domino, none in our control:
leptos_macroandserver_fn_macroneed to align on sameconvert_casemajor. Already split inside Leptos 0.7.x. Probably never get fixed in 0.7 line.convert_caseunify (Leptos 0.8 not audited here).derive_more 2.xswitch offconvert_caseor align with Leptos's choice. Pure upstream concern.Until those land, three-version split structural.
What we could do, cosmetic (low value)
Cargo.tomlflagconvert_caseas known-multi-version. Pure paperwork. No build impact.Neither worth own PR.
Recommendation
convert_caselinked at three incompatible versions (0.6, 0.7, 0.10) #251 asnot_planned/ structural with link to this follow-up.derive_more3.x dropconvert_casedep.Refs #251.
https://claude.ai/code/session_01FHLLfYeh9P9FP7Y47wu9We