chore(deps): adopt chia-sdk-* 0.36.0 ceiling - #6
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>
MichaelTaylor3d
left a comment
There was a problem hiding this comment.
Correctness gate — CHANGES-REQUIRED
Head reviewed: 6d6bf425f11933e2855e8c2a0d255d8705b4cae7.
The code is clean and the dependency outcome is correct — pins are on the true non-uniform ceiling with no normalization to 0.36.1, the lock collapses chia-sdk-* to a single 0.36.0 line, 66 tests pass, and clippy is exit 0. Three findings, all in the manifest/record rather than in src/, ranked below and posted as inline threads.
What I verified as CORRECT
- The ceiling pins are right and were not normalized.
chia-puzzle-types/clvm-traits/clvm-utilsat0.36.1,chia-puzzlesat0.20.3,clvmrat0.16.2,chia-sdk-*at0.36.0,chia-blsat0.36.1. Checked live againstchia-ceiling-audit.sh. This was the epic's most likely error and it is absent. - The split is discharged at its root. At head the lock carries one line each of
chia-sdk-driver/types/test/derive/signerat0.36.0, and onechia-protocolat0.36.1. A consumer can no longer inherit the split. SPEC.mdis now true. The corrected §1 text matches the manifest exactly, and I swept the rest of the file for the superseded phrasing — nothing else contradicts it.Closesis bare and unbackticked, correctly targeting issue #5.Cargo.lockself-version is0.4.0, matchingCargo.toml;--lockedwill not trip.- Residual-duplicate claim spot-checked and TRUE. I traced
chia-sha2 0.34.0withcargo tree -i: it is reached only viaclvmr 0.16.4(an internal dependency ofchia-consensus/chia-protocol), andchia_bls/chia_traits/chia_sha2appear zero times insrc/.cargo tree -dis correctly not usable as a gate here. - Full suite green at head: 66 tests across six binaries.
cargo clippy --locked --all-targets --all-features -- -D warningsexit 0, read unpiped.
Ranked findings
Cargo.toml:38— the bugfix has no regression test. Issue #5 is a defect ticket about a manifest-level split, and nothing mechanically prevents the split recurring.Cargo.toml:11—0.4.0is justified by a claim the source does not support, and it forces a ~9-consumer manifest cascade. Needs a true rationale, or0.3.2.Cargo.toml:66— the PR body's lock evidence is factually wrong. Thechia-sha2 0.34.0line is NOT gone at head, and head has MOREchia-*lines thanorigin/main, not fewer.
Finding 1 also answers the lane's honestly-reported verification gap. The lane is right that no behavioural test distinguishes 0.34 from 0.36 — the puzzle did not change, so any such test would be manufactured, and it was correct not to write one and to say so plainly. But that gap does not mean nothing is testable: the property this PR actually restores is manifest coherence, and that is mechanically assertable. See thread 1.
Note on the verdict mechanism
Recorded as a comment review because a verdict-bearing review event (REQUEST_CHANGES as much as APPROVE) is HTTP 422 on a same-identity PR. The three inline threads are what bar the merge under required_conversation_resolution — not this prose.
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>
defbe4d to
b2f3bb9
Compare
|
Superseded by a fresh PR on the same branch: this PR stopped receiving |
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.