fix(deps)!: adopt the chia-sdk 0.36.0 ceiling and guard chia family coherence - #7
Merged
Merged
Conversation
Refs DIG-Network/dig_ecosystem#3161 Co-Authored-By: Claude <noreply@anthropic.com>
Published 0.3.1 shipped INTERNALLY SPLIT: chia-protocol/chia-puzzle-types/ clvm-traits/clvm-utils at ^0.36.1 beside chia-sdk-driver/chia-sdk-test/ chia-sdk-types at ^0.34. The split lives inside the published version, so no consumer could escape it by bumping -- an ecosystem blocker. Move the chia-sdk-* family to its ceiling (0.36.0) and pin chia-puzzles and clvmr to theirs (0.20.3, 0.16.2). The ceiling is chia-wallet-sdk 0.36.0's own dependency set, NOT the newest on crates.io: the primitives publish at 0.48 but the SDK cannot reach them, so 0.36.1 primitives beside 0.36.0 chia-sdk-* is the coherent maximum. The primitives were already at their ceiling and are left alone -- raising them would re-split the crate, not modernise it. Dependency-only: no source file changes. Cargo.lock collapses the chia-sdk-* family to a single 0.36.0 line and drops the chia-sha2 0.34.0 line the split had kept alive. BREAKING CHANGE: chia-sdk-driver/chia-sdk-types are semver-incompatible across 0.34 -> 0.36, so a consumer of the lineage-walk feature must move in step. Closes #5 Refs DIG-Network/dig_ecosystem#3161 Co-Authored-By: Claude <noreply@anthropic.com>
SPEC.md claimed the crate 'does not depend on chia-puzzle-types, chia-puzzles', which stopped being true when the non-default lineage-walk feature was added. Record the real shape: the default set is still chia-protocol + thiserror only, and lineage-walk adds the CLVM evaluator and singleton puzzle types pinned to the chia-wallet-sdk 0.36.0 ceiling. Refs DIG-Network/dig_ecosystem#3161 Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
The chia-sdk-* uplift is not semver-breaking. Every `chia-sdk-*`, `clvm*` and `chia-puzzle*` import is confined to src/walk.rs and no type from any of them crosses a public signature: `LineageWalkError<E>` carries only `E`/`String`/`Bytes32`/`usize`/`Duration`, and the walk functions take and return `Bytes32`/`SingletonLineage`/`WalkBounds`. The one chia crate that IS public, `chia-protocol`, is unchanged at 0.36.1 from origin/main. So no consumer can observe the bump, and nine consumers pinning "0.3" must not be forced to edit manifests for a change that cannot reach them. Add tests/manifest_chia_coherence.rs, the regression guard #5 lacked. The defect was manifest coherence, which no behavioural test can see: both halves of a split run correctly in isolation. The guard asserts per-FAMILY MAJOR.MINOR agreement rather than global equality, because the ecosystem ceiling is deliberately non-uniform (chia-sdk-* 0.36.0, primitives 0.36.1, chia-puzzles 0.20.3, clvmr 0.16.2). It also pins the exact declared set, so a dependency added on a foreign line or silently dropped fails the suite. Co-Authored-By: Claude <noreply@anthropic.com>
Proving the coherence guard fires means reintroducing a split into Cargo.toml. Running the suite in that state silently re-resolves Cargo.lock -- 217 lines, when this was first done -- so restoring only Cargo.toml leaves the lock carrying both the experiment's old line and the correct one. That is a two-line split created by the proof, in the crate whose entire job is to have none, and it would have shipped in this PR. What caught it was the follow-up run using --locked; without that flag cargo re-resolves again, prints green, and the pollution is committed. Documented here because this test file is exactly where the next person will run that experiment. Co-Authored-By: Claude <noreply@anthropic.com>
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.
Task
Bring
dig-chainsource-interfaceonto the chia-wallet-sdk 0.36.0 ceiling.Parent epic: https://github.com/DIG-Network/dig_ecosystem/issues/3161
Closes #5
Why this repo first — it is an ecosystem blocker
Published
0.3.1ships internally split:chia-protocol/chia-puzzle-types/clvm-traits/clvm-utilsat^0.36.1besidechia-sdk-driver/chia-sdk-test/chia-sdk-typesat^0.34. The split lives inside the published version, so no consumer could escape it by bumping.Changes
chia-sdk-driver0.34chia-sdk-types0.34chia-sdk-test(dev)0.34chia-puzzles0.200.20.3(pinned to ceiling)clvmr0.160.16.2(pinned to ceiling)The ceiling is not "latest": the primitives publish at 0.48.0 but
chia-wallet-sdkcannot reach them, so0.36.1primitives beside0.36.0chia-sdk-*is the coherent maximum. The primitives were already at their ceiling and are deliberately left alone — bumping them to 0.48 would re-split the crate, not modernise it.Evidence
What the lock actually does — corrected
An earlier revision of this body claimed the
chia-sha2 0.34.0line "is gone" and that the crate ends with one fewerchia-*line thanorigin/main. Both claims were false. Measured at head:chia-sha2 0.34.0is still present, identically inorigin/mainand at head. It is reached viaclvmr 0.16.4, which vendors it internally; nothing in this PR could have removed it.chia-*/clvm*line count went UP, not down: 29 -> 31. The two additions arechia-sdk-coinset 0.36.0(pulled bychia-sdk-test 0.36.0, dev-only) andchia-serde 0.36.1(a 0.36.1 split-out, pulled bychia-protocol/chia-bls).The change is still right, for the reason #5 actually states — it removes the declared split. That is the whole defect: a crate whose own manifest names two minor lines of one family. What this PR removes from the resolved lock is precisely the
0.34.0line of the crates this manifest declares:origin/mainchia-sdk-derive/-driver/-signer/-test/-types0.34.00.36.0chia-sdk-coinset0.36.0(new, viachia-sdk-test)chia-serde0.36.1(new, viachia-protocol)The older lines that remain, and why they are fine (each traced through the lock, not assumed):
chia-sha2 0.34.0,chia-bls 0.28.2,chia-traits 0.28.2,chia_streamable_macro 0.28.2— all reached fromclvmr 0.16.4, internal to the CLVM evaluator.chia-bls 0.42.1,chia-traits 0.42.1,chia_streamable_macro 0.42.1— reached fromchialisp 0.4.6, itself pulled bychia-sdk-typesandrue-lir.clvm-traits 0.28.1— reached fromrue-lir 0.8.5.None of these is declared by this crate, and none reaches a public signature: the only chia type on this crate's public surface comes from
chia-protocol, andchia_bls/chia_traits/chia_sha2appear nowhere insrc/.cargo tree -dtherefore cannot be a gate here —chia-wallet-sdkfails it on its own vendored graph.The rest
src/-adjacent addition is the new regression test below.lineage_walkandhostile_lineage_walksuites, which authenticate the singleton walk against real spends from the 0.36.0 simulator (chia-sdk-test) through the 0.36.0SingletonLayer.cargo clippy --locked --all-targets --all-features -- -D warningsexit 0;cargo fmt --all -- --checkexit 0.The regression guard (#5 is a defect ticket, so it gets a test)
tests/manifest_chia_coherence.rsfails if this crate'schia-*declarations ever split across two minor lines again.An earlier revision of this body argued that no test could distinguish the bump. That is true of behavioural tests — both halves of a split run correctly in isolation, which is exactly why the split shipped — but it searched for the wrong property. The defect was manifest coherence, and manifest coherence is mechanically assertable.
clvmr/chialispinternals listed above), so a lock-based guard would need name-by-name carve-outs and would go red whenever an upstream evaluator re-vendored something.MAJOR.MINORagreement, not global equality. The ecosystem ceiling is deliberately non-uniform —chia-sdk-*0.36.0, primitives 0.36.1,chia-puzzles0.20.3,clvmr0.16.2 — so a guard asserting "all chia crates share one version" would be red on correct code. Three families are named: the chia 0.36 line (chia-sdk-*+ the chia/clvm primitives, the two the defect split apart), thechia-puzzles0.20 line, and theclvmr0.16 line.Revert-proof — the 0.34 split reintroduced, restored by file copy:
Restored, and green again at the real versions — which is also the truthful control that the guard does not fire on the legitimate non-uniform ceiling:
Also in this PR
SPEC.mdclaimed the crate "does not depend onchia-puzzle-types,chia-puzzles", which stopped being true when the non-defaultlineage-walkfeature was added. Corrected to state the real shape and the ceiling rationale. Pre-existing drift, fixed inline because it is exactly the dependency shape this PR changes.Bump
0.3.1->0.3.2(patch).An earlier revision of this body proposed
0.4.0, justified as semver-breaking forlineage-walkconsumers. That rationale was checkably false and has been corrected. The public surface was walked:chia-sdk-*,clvm*andchia-puzzle*import in the crate is confined tosrc/walk.rs:44-51.LineageWalkError<E>carries onlyE/String/Bytes32/usize/Duration;walk_singleton_lineage,walk_singleton_lineage_bounded,walk_singleton_lineage_withinandresolve_singleton_lineage_via_walktake and returnBytes32/SingletonLineage/WalkBounds/ChainSourceError.MAX_HOP_CLVM_COSTis au64, named for CLVM but not typed by it.chia-protocol, supplyingBytes32/Coin/CoinSpend/Program— is unchanged at 0.36.1, identical inorigin/mainand at head.So no consumer, including a
lineage-walkone, can observe this bump. Nine consumers pin"0.3"and onlydig-appenableslineage-walk; shipping 0.4.0 would have forced eight repos to edit manifests for a change that cannot reach them, in the middle of an epic whose purpose is reducing version churn.WIP — DO NOT MERGE.