sdk

Radroots SDK and bindings
git clone https://radroots.dev/git/sdk.git
Log | Files | Refs | README

commit 2abc7f5c370201d18306f3e97c01fd98be557036
parent 729bfba53ef37bf784ffa82fdb660797f2645c33
Author: triesap <tyson@radroots.org>
Date:   Tue,  4 Aug 2026 20:15:48 +0000

sdk: pin unpublished lib dependencies by revision

- Resolve every cross-repository Lib crate from the pushed immutable master revision.
- Retain exact alpha versions while removing obsolete local Lib patch overrides.
- Update the lockfile to record the single reviewed Git source for 21 packages.
- Align feature-gated reducer tests with source-bound rebuild lifecycle contracts.

Diffstat:
M.cargo/config.toml | 25+------------------------
MCargo.lock | 21+++++++++++++++++++++
MCargo.toml | 42+++++++++++++++++++++---------------------
Mcrates/sdk/src/sync.rs | 22+++++++++++++++++++++-
Mcrates/sdk/src/transport.rs | 17+++++++++--------
5 files changed, 73 insertions(+), 54 deletions(-)

diff --git a/.cargo/config.toml b/.cargo/config.toml @@ -1,30 +1,7 @@ [alias] xtask = "run -p radroots_sdk_xtask --" -# Migration-only local development overrides. Release manifests contain only -# registry identities; package-realistic checks run extracted crates without -# this repository configuration. +# Same-repository facade overrides for local workspace development. [patch.crates-io] radroots_sdk = { path = "crates/sdk" } radroots = { path = "crates/radroots" } -radroots_blossom = { path = "../lib/crates/blossom" } -radroots_core = { path = "../lib/crates/core" } -radroots_event = { path = "../lib/crates/event" } -radroots_event_codec = { path = "../lib/crates/event_codec" } -radroots_geonames = { path = "../lib/crates/geonames" } -radroots_identity = { path = "../lib/crates/identity" } -radroots_nostr = { path = "../lib/crates/nostr" } -radroots_nostr_connect = { path = "../lib/crates/nostr_connect" } -radroots_protocol = { path = "../lib/crates/protocol" } -radroots_secrets = { path = "../lib/crates/secrets" } -radroots_signing = { path = "../lib/crates/signing" } -radroots_storage = { path = "../lib/crates/storage" } -radroots_storage_sqlite = { path = "../lib/crates/storage_sqlite" } -radroots_sync = { path = "../lib/crates/sync" } -radroots_transport = { path = "../lib/crates/transport" } -radroots_transport_nostr = { path = "../lib/crates/transport_nostr" } -radroots_replica_store = { path = "../lib/crates/replica_store" } -radroots_replica_schema = { path = "../lib/crates/replica_schema" } -radroots_replica_sync = { path = "../lib/crates/replica_sync" } -radroots_sql_core = { path = "../lib/crates/sql_core" } -radroots_trade = { path = "../lib/crates/trade" } diff --git a/Cargo.lock b/Cargo.lock @@ -1795,6 +1795,7 @@ dependencies = [ [[package]] name = "radroots_blossom" version = "0.1.0-alpha" +source = "git+https://github.com/radrootslabs/lib.git?rev=74f5c91cbc80248df1f51f644004daaf8ae8e9be#74f5c91cbc80248df1f51f644004daaf8ae8e9be" dependencies = [ "mediatype", "serde", @@ -1806,6 +1807,7 @@ dependencies = [ [[package]] name = "radroots_core" version = "0.1.0-alpha" +source = "git+https://github.com/radrootslabs/lib.git?rev=74f5c91cbc80248df1f51f644004daaf8ae8e9be#74f5c91cbc80248df1f51f644004daaf8ae8e9be" dependencies = [ "rust_decimal", "serde", @@ -1823,6 +1825,7 @@ dependencies = [ [[package]] name = "radroots_event" version = "0.1.0-alpha" +source = "git+https://github.com/radrootslabs/lib.git?rev=74f5c91cbc80248df1f51f644004daaf8ae8e9be#74f5c91cbc80248df1f51f644004daaf8ae8e9be" dependencies = [ "hex", "jiff-tzdb", @@ -1848,6 +1851,7 @@ dependencies = [ [[package]] name = "radroots_event_codec" version = "0.1.0-alpha" +source = "git+https://github.com/radrootslabs/lib.git?rev=74f5c91cbc80248df1f51f644004daaf8ae8e9be#74f5c91cbc80248df1f51f644004daaf8ae8e9be" dependencies = [ "hex", "radroots_blossom", @@ -1879,6 +1883,7 @@ dependencies = [ [[package]] name = "radroots_geonames" version = "0.1.0-alpha" +source = "git+https://github.com/radrootslabs/lib.git?rev=74f5c91cbc80248df1f51f644004daaf8ae8e9be#74f5c91cbc80248df1f51f644004daaf8ae8e9be" dependencies = [ "fs2", "rusqlite", @@ -1890,6 +1895,7 @@ dependencies = [ [[package]] name = "radroots_identity" version = "0.1.0-alpha" +source = "git+https://github.com/radrootslabs/lib.git?rev=74f5c91cbc80248df1f51f644004daaf8ae8e9be#74f5c91cbc80248df1f51f644004daaf8ae8e9be" dependencies = [ "k256", "serde", @@ -1907,6 +1913,7 @@ dependencies = [ [[package]] name = "radroots_nostr" version = "0.1.0-alpha" +source = "git+https://github.com/radrootslabs/lib.git?rev=74f5c91cbc80248df1f51f644004daaf8ae8e9be#74f5c91cbc80248df1f51f644004daaf8ae8e9be" dependencies = [ "nostr", "radroots_event", @@ -1921,6 +1928,7 @@ dependencies = [ [[package]] name = "radroots_nostr_connect" version = "0.1.0-alpha" +source = "git+https://github.com/radrootslabs/lib.git?rev=74f5c91cbc80248df1f51f644004daaf8ae8e9be#74f5c91cbc80248df1f51f644004daaf8ae8e9be" dependencies = [ "nostr", "radroots_event", @@ -1936,6 +1944,7 @@ dependencies = [ [[package]] name = "radroots_protocol" version = "0.1.0-alpha" +source = "git+https://github.com/radrootslabs/lib.git?rev=74f5c91cbc80248df1f51f644004daaf8ae8e9be#74f5c91cbc80248df1f51f644004daaf8ae8e9be" dependencies = [ "serde", ] @@ -1943,6 +1952,7 @@ dependencies = [ [[package]] name = "radroots_replica_schema" version = "0.1.0-alpha" +source = "git+https://github.com/radrootslabs/lib.git?rev=74f5c91cbc80248df1f51f644004daaf8ae8e9be#74f5c91cbc80248df1f51f644004daaf8ae8e9be" dependencies = [ "dto_bindgen_core", "serde", @@ -1960,6 +1970,7 @@ dependencies = [ [[package]] name = "radroots_replica_store" version = "0.1.0-alpha" +source = "git+https://github.com/radrootslabs/lib.git?rev=74f5c91cbc80248df1f51f644004daaf8ae8e9be#74f5c91cbc80248df1f51f644004daaf8ae8e9be" dependencies = [ "hex", "radroots_replica_schema", @@ -1989,6 +2000,7 @@ dependencies = [ [[package]] name = "radroots_replica_sync" version = "0.1.0-alpha" +source = "git+https://github.com/radrootslabs/lib.git?rev=74f5c91cbc80248df1f51f644004daaf8ae8e9be#74f5c91cbc80248df1f51f644004daaf8ae8e9be" dependencies = [ "base64", "hex", @@ -2095,6 +2107,7 @@ dependencies = [ [[package]] name = "radroots_secrets" version = "0.1.0-alpha" +source = "git+https://github.com/radrootslabs/lib.git?rev=74f5c91cbc80248df1f51f644004daaf8ae8e9be#74f5c91cbc80248df1f51f644004daaf8ae8e9be" dependencies = [ "chacha20poly1305", "zeroize", @@ -2103,6 +2116,7 @@ dependencies = [ [[package]] name = "radroots_signing" version = "0.1.0-alpha" +source = "git+https://github.com/radrootslabs/lib.git?rev=74f5c91cbc80248df1f51f644004daaf8ae8e9be#74f5c91cbc80248df1f51f644004daaf8ae8e9be" dependencies = [ "radroots_event", "radroots_identity", @@ -2112,6 +2126,7 @@ dependencies = [ [[package]] name = "radroots_sql_core" version = "0.1.0-alpha" +source = "git+https://github.com/radrootslabs/lib.git?rev=74f5c91cbc80248df1f51f644004daaf8ae8e9be#74f5c91cbc80248df1f51f644004daaf8ae8e9be" dependencies = [ "chrono", "serde", @@ -2122,6 +2137,7 @@ dependencies = [ [[package]] name = "radroots_storage" version = "0.1.0-alpha" +source = "git+https://github.com/radrootslabs/lib.git?rev=74f5c91cbc80248df1f51f644004daaf8ae8e9be#74f5c91cbc80248df1f51f644004daaf8ae8e9be" dependencies = [ "radroots_event", "radroots_protocol", @@ -2132,6 +2148,7 @@ dependencies = [ [[package]] name = "radroots_storage_sqlite" version = "0.1.0-alpha" +source = "git+https://github.com/radrootslabs/lib.git?rev=74f5c91cbc80248df1f51f644004daaf8ae8e9be#74f5c91cbc80248df1f51f644004daaf8ae8e9be" dependencies = [ "fs2", "radroots_event_codec", @@ -2144,6 +2161,7 @@ dependencies = [ [[package]] name = "radroots_sync" version = "0.1.0-alpha" +source = "git+https://github.com/radrootslabs/lib.git?rev=74f5c91cbc80248df1f51f644004daaf8ae8e9be#74f5c91cbc80248df1f51f644004daaf8ae8e9be" dependencies = [ "radroots_event", "radroots_event_codec", @@ -2158,6 +2176,7 @@ dependencies = [ [[package]] name = "radroots_trade" version = "0.1.0-alpha" +source = "git+https://github.com/radrootslabs/lib.git?rev=74f5c91cbc80248df1f51f644004daaf8ae8e9be#74f5c91cbc80248df1f51f644004daaf8ae8e9be" dependencies = [ "hex", "radroots_core", @@ -2175,6 +2194,7 @@ version = "0.1.0-alpha" [[package]] name = "radroots_transport" version = "0.1.0-alpha" +source = "git+https://github.com/radrootslabs/lib.git?rev=74f5c91cbc80248df1f51f644004daaf8ae8e9be#74f5c91cbc80248df1f51f644004daaf8ae8e9be" dependencies = [ "radroots_event", "radroots_identity", @@ -2185,6 +2205,7 @@ dependencies = [ [[package]] name = "radroots_transport_nostr" version = "0.1.0-alpha" +source = "git+https://github.com/radrootslabs/lib.git?rev=74f5c91cbc80248df1f51f644004daaf8ae8e9be#74f5c91cbc80248df1f51f644004daaf8ae8e9be" dependencies = [ "async-wsocket", "nostr-relay-pool", diff --git a/Cargo.toml b/Cargo.toml @@ -47,32 +47,32 @@ unimplemented = "deny" dto_bindgen = { version = "0.1.0" } dto_bindgen_backend_ts = { version = "0.1.0" } dto_bindgen_core = { version = "0.1.0" } -radroots_blossom = { package = "radroots_blossom", version = "=0.1.0-alpha", default-features = false } -radroots_core = { package = "radroots_core", version = "=0.1.0-alpha", default-features = false } -radroots_event = { package = "radroots_event", version = "=0.1.0-alpha", default-features = false } -radroots_event_codec = { package = "radroots_event_codec", version = "=0.1.0-alpha", default-features = false } +radroots_blossom = { package = "radroots_blossom", git = "https://github.com/radrootslabs/lib.git", rev = "74f5c91cbc80248df1f51f644004daaf8ae8e9be", version = "=0.1.0-alpha", default-features = false } +radroots_core = { package = "radroots_core", git = "https://github.com/radrootslabs/lib.git", rev = "74f5c91cbc80248df1f51f644004daaf8ae8e9be", version = "=0.1.0-alpha", default-features = false } +radroots_event = { package = "radroots_event", git = "https://github.com/radrootslabs/lib.git", rev = "74f5c91cbc80248df1f51f644004daaf8ae8e9be", version = "=0.1.0-alpha", default-features = false } +radroots_event_codec = { package = "radroots_event_codec", git = "https://github.com/radrootslabs/lib.git", rev = "74f5c91cbc80248df1f51f644004daaf8ae8e9be", version = "=0.1.0-alpha", default-features = false } radroots_sdk_ffi = { path = "crates/ffi", version = "=0.1.0-alpha" } -radroots_geonames = { package = "radroots_geonames", version = "=0.1.0-alpha", default-features = false } -radroots_identity = { package = "radroots_identity", version = "=0.1.0-alpha", default-features = false, features = [ +radroots_geonames = { package = "radroots_geonames", git = "https://github.com/radrootslabs/lib.git", rev = "74f5c91cbc80248df1f51f644004daaf8ae8e9be", version = "=0.1.0-alpha", default-features = false } +radroots_identity = { package = "radroots_identity", git = "https://github.com/radrootslabs/lib.git", rev = "74f5c91cbc80248df1f51f644004daaf8ae8e9be", version = "=0.1.0-alpha", default-features = false, features = [ "std", ] } -radroots_nostr = { package = "radroots_nostr", version = "=0.1.0-alpha", default-features = false } -radroots_nostr_connect = { package = "radroots_nostr_connect", version = "=0.1.0-alpha", default-features = false } -radroots_protocol = { version = "=0.1.0-alpha", default-features = false } -radroots_secrets = { package = "radroots_secrets", version = "=0.1.0-alpha", default-features = false } -radroots_signing = { package = "radroots_signing", version = "=0.1.0-alpha", default-features = false } -radroots_storage = { package = "radroots_storage", version = "=0.1.0-alpha", default-features = false } -radroots_storage_sqlite = { package = "radroots_storage_sqlite", version = "=0.1.0-alpha", default-features = false } -radroots_sync = { package = "radroots_sync", version = "=0.1.0-alpha", default-features = false } -radroots_transport = { package = "radroots_transport", version = "=0.1.0-alpha", default-features = false } -radroots_transport_nostr = { package = "radroots_transport_nostr", version = "=0.1.0-alpha", default-features = false } -radroots_replica_store = { version = "=0.1.0-alpha", default-features = false } -radroots_replica_schema = { version = "=0.1.0-alpha", default-features = false } -radroots_replica_sync = { version = "=0.1.0-alpha", default-features = false } +radroots_nostr = { package = "radroots_nostr", git = "https://github.com/radrootslabs/lib.git", rev = "74f5c91cbc80248df1f51f644004daaf8ae8e9be", version = "=0.1.0-alpha", default-features = false } +radroots_nostr_connect = { package = "radroots_nostr_connect", git = "https://github.com/radrootslabs/lib.git", rev = "74f5c91cbc80248df1f51f644004daaf8ae8e9be", version = "=0.1.0-alpha", default-features = false } +radroots_protocol = { git = "https://github.com/radrootslabs/lib.git", rev = "74f5c91cbc80248df1f51f644004daaf8ae8e9be", version = "=0.1.0-alpha", default-features = false } +radroots_secrets = { package = "radroots_secrets", git = "https://github.com/radrootslabs/lib.git", rev = "74f5c91cbc80248df1f51f644004daaf8ae8e9be", version = "=0.1.0-alpha", default-features = false } +radroots_signing = { package = "radroots_signing", git = "https://github.com/radrootslabs/lib.git", rev = "74f5c91cbc80248df1f51f644004daaf8ae8e9be", version = "=0.1.0-alpha", default-features = false } +radroots_storage = { package = "radroots_storage", git = "https://github.com/radrootslabs/lib.git", rev = "74f5c91cbc80248df1f51f644004daaf8ae8e9be", version = "=0.1.0-alpha", default-features = false } +radroots_storage_sqlite = { package = "radroots_storage_sqlite", git = "https://github.com/radrootslabs/lib.git", rev = "74f5c91cbc80248df1f51f644004daaf8ae8e9be", version = "=0.1.0-alpha", default-features = false } +radroots_sync = { package = "radroots_sync", git = "https://github.com/radrootslabs/lib.git", rev = "74f5c91cbc80248df1f51f644004daaf8ae8e9be", version = "=0.1.0-alpha", default-features = false } +radroots_transport = { package = "radroots_transport", git = "https://github.com/radrootslabs/lib.git", rev = "74f5c91cbc80248df1f51f644004daaf8ae8e9be", version = "=0.1.0-alpha", default-features = false } +radroots_transport_nostr = { package = "radroots_transport_nostr", git = "https://github.com/radrootslabs/lib.git", rev = "74f5c91cbc80248df1f51f644004daaf8ae8e9be", version = "=0.1.0-alpha", default-features = false } +radroots_replica_store = { git = "https://github.com/radrootslabs/lib.git", rev = "74f5c91cbc80248df1f51f644004daaf8ae8e9be", version = "=0.1.0-alpha", default-features = false } +radroots_replica_schema = { git = "https://github.com/radrootslabs/lib.git", rev = "74f5c91cbc80248df1f51f644004daaf8ae8e9be", version = "=0.1.0-alpha", default-features = false } +radroots_replica_sync = { git = "https://github.com/radrootslabs/lib.git", rev = "74f5c91cbc80248df1f51f644004daaf8ae8e9be", version = "=0.1.0-alpha", default-features = false } radroots_sdk = { path = "crates/sdk", version = "=0.1.0-alpha", default-features = false } radroots_sdk_sql_wasm_runtime = { path = "crates/sql_wasm_runtime", version = "=0.1.0-alpha" } -radroots_sql_core = { version = "=0.1.0-alpha", default-features = false } -radroots_trade = { package = "radroots_trade", version = "=0.1.0-alpha", default-features = false, features = [ +radroots_sql_core = { git = "https://github.com/radrootslabs/lib.git", rev = "74f5c91cbc80248df1f51f644004daaf8ae8e9be", version = "=0.1.0-alpha", default-features = false } +radroots_trade = { package = "radroots_trade", git = "https://github.com/radrootslabs/lib.git", rev = "74f5c91cbc80248df1f51f644004daaf8ae8e9be", version = "=0.1.0-alpha", default-features = false, features = [ "json", "std", ] } diff --git a/crates/sdk/src/sync.rs b/crates/sdk/src/sync.rs @@ -202,7 +202,9 @@ mod tests { journal::IdempotencyKey, memory::MemoryStorage, outbox::LeaseOwner, - projection::{ProjectionGeneration, ProjectionId}, + projection::{ + ProjectionGeneration, ProjectionId, RawSourceDigest, RebuildFailure, RebuildTicketId, + }, }; use radroots_sync::{ Engine, PullRequest, PushRequest, @@ -286,14 +288,32 @@ mod tests { self.generation } + fn begin_rebuild( + &self, + _ticket_id: RebuildTicketId, + _source_generation: SourceGeneration, + _source_digest: RawSourceDigest, + ) -> Result<(), ReducerError> { + Ok(()) + } + fn reduce( &self, events: &[StoredVisibleEvent], prior_projected_rows: u64, + _rebuild_ticket: Option<RebuildTicketId>, ) -> Result<u64, ReducerError> { assert!(events.is_empty()); Ok(prior_projected_rows) } + + fn abort_rebuild( + &self, + _ticket_id: RebuildTicketId, + _failure: RebuildFailure, + ) -> Result<(), ReducerError> { + Ok(()) + } } fn target() -> Target { diff --git a/crates/sdk/src/transport.rs b/crates/sdk/src/transport.rs @@ -487,13 +487,10 @@ impl DaemonDelivery { #[cfg(test)] mod tests { - use radroots_event::{SignedEvent, wire::v1::Nip01EventWire}; use radroots_transport::{ - DeliveryRequest, Error, FetchRequest, TARGET_SET_MAX_ITEMS, Target, + Error, TARGET_SET_MAX_ITEMS, Target, capability::{Availability, Maturity}, policy::{SatisfactionClass, SatisfactionPolicy, TargetPolicy}, - sink::DeliveryPayload, - source::FetchBounds, target::TargetFingerprint, }; @@ -503,10 +500,11 @@ mod tests { Target::nostr_relay(format!("wss://relay-{index}.example")).expect("target") } - fn signed_event() -> SignedEvent { + #[cfg(feature = "nostr")] + fn signed_event() -> radroots_event::SignedEvent { let raw = r#"{"id":"56bfc78223bb2221bad82b539efdec1ade0f56d0eb0e1f592fd387df4b2ceee0","pubkey":"585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df","created_at":1700000001,"kind":0,"tags":[],"content":"{}","sig":"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"}"#; - let wire = Nip01EventWire::parse_json(raw).expect("wire event"); - SignedEvent::from_wire_verified_id(wire, raw).expect("signed event") + let wire = radroots_event::wire::v1::Nip01EventWire::parse_json(raw).expect("wire event"); + radroots_event::SignedEvent::from_wire_verified_id(wire, raw).expect("signed event") } #[test] @@ -698,7 +696,10 @@ mod tests { #[cfg(feature = "nostr")] #[tokio::test] async fn empty_nostr_slot_reports_unavailable_and_rejects_operations() { - use radroots_transport::{EventSink as _, EventSource as _}; + use radroots_transport::{ + DeliveryRequest, EventSink as _, EventSource as _, FetchRequest, sink::DeliveryPayload, + source::FetchBounds, + }; let slot = NostrSlot::new(RelayUrlPolicy::Local); let source = radroots_transport::EventSource::status(&slot)