sdk

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

commit 37b664841acf4f2fb052ec6ae3b139448a454a1b
parent 84ec9114bc42376f0fef5b2907b86440a9323ca5
Author: triesap <tyson@radroots.org>
Date:   Mon,  3 Aug 2026 12:38:45 +0000

facade: define curated domain modules and reexports

- Expose deliberate canonical paths for event, identity, farm, and listing values.
- Curate trade, storage, signing, transport, and knowledge entry points.
- Keep client types root-only and advanced engine composition in radroots_sdk.
- Guard canonical paths against wildcard exports and an SDK namespace.

Diffstat:
Mcrates/radroots/src/event.rs | 4++++
Mcrates/radroots/src/farm.rs | 3+++
Mcrates/radroots/src/identity.rs | 4++++
Mcrates/radroots/src/knowledge.rs | 7+++++++
Mcrates/radroots/src/listing.rs | 13+++++++++++++
Mcrates/radroots/src/signing.rs | 2++
Mcrates/radroots/src/storage.rs | 2++
Mcrates/radroots/src/trade.rs | 12++++++++++++
Mcrates/radroots/src/transport.rs | 6++++++
Mcrates/radroots/tests/package_boundary.rs | 22++++++++++++++++++++++
Mcrates/radroots/tests/public_surface.rs | 22++++++++++++++++++++++
11 files changed, 97 insertions(+), 0 deletions(-)

diff --git a/crates/radroots/src/event.rs b/crates/radroots/src/event.rs @@ -1 +1,5 @@ //! Curated event authoring and inspection entry points. + +pub use radroots_event::{ + Error, Event, EventDraft, EventId, EventKind, EventTag, SignedEvent, VerifiedEvent, +}; diff --git a/crates/radroots/src/farm.rs b/crates/radroots/src/farm.rs @@ -1 +1,4 @@ //! Curated farm-domain entry points. + +pub use radroots_event::farm::{Farm, FarmPublicLocation, FarmRef}; +pub use radroots_sdk::farm::{Plan, PrepareError, PrepareErrorKind, PrepareRequest, prepare}; diff --git a/crates/radroots/src/identity.rs b/crates/radroots/src/identity.rs @@ -1 +1,5 @@ //! Curated public identity entry points. + +pub use radroots_identity::{ + AccountId, Error, IdentityId, Profile, PublicIdentity, PublicKey, Username, +}; diff --git a/crates/radroots/src/knowledge.rs b/crates/radroots/src/knowledge.rs @@ -1 +1,8 @@ //! Curated knowledge-domain entry points. + +#[cfg(feature = "knowledge")] +pub use radroots_event::knowledge::{ + AddressableRef, KnowledgeClaim, KnowledgeFieldReport, KnowledgeRelation, KnowledgeReview, + KnowledgeSource, KnowledgeValidationError, WikiArticle, WikiDTagError, WikiMergeRequest, + WikiRedirect, normalize_wiki_d_tag, validate_wiki_d_tag, +}; diff --git a/crates/radroots/src/listing.rs b/crates/radroots/src/listing.rs @@ -1 +1,14 @@ //! Curated listing-domain entry points. + +pub use radroots_event::listing::operational::{ + OperationalListing, OperationalListingAvailability, OperationalListingBin, + OperationalListingDeliveryMethod, OperationalListingImage, OperationalListingProduct, + OperationalListingPublicLocation, OperationalListingStatus, +}; +pub use radroots_sdk::listing::{ + Action, Plan, PrepareError, PrepareErrorKind, PrepareRequest, prepare, +}; +pub use radroots_trade::operational_listing::{ + RadrootsOperationalListingLifecycleState as Lifecycle, + draft::RadrootsOperationalListingEditDocumentV1 as EditV1, +}; diff --git a/crates/radroots/src/signing.rs b/crates/radroots/src/signing.rs @@ -1 +1,3 @@ //! Curated signing entry points. + +pub use radroots_sdk::signing::{Mode, Provider}; diff --git a/crates/radroots/src/storage.rs b/crates/radroots/src/storage.rs @@ -1 +1,3 @@ //! Curated storage entry points. + +pub use radroots_sdk::storage::{IntegrityStatus, Operations, Status}; diff --git a/crates/radroots/src/trade.rs b/crates/radroots/src/trade.rs @@ -1 +1,13 @@ //! Curated trade-domain entry points. + +pub use radroots_core::{Currency, Decimal, Money, Percent, Quantity, QuantityPrice, Unit}; +pub use radroots_event::trade::{ + FulfillmentProfileV1, TradeCancellationProfileV1, TradeCandidateLineV1, TradeCandidateTermsV1, + TradeDecisionV1, TradeEconomicAdjustmentV1, TradeEconomicsProfileV1, + TradeMutationBodyV1 as MutationBodyV1, TradeMutationEnvelopeV1 as MutationV1, + TradeMutationKindV1 as MutationKindV1, TradePrivateTermsRefV1, +}; +pub use radroots_sdk::trade::{ + Plan, PrepareError, PrepareErrorKind, PrepareRequest, prepare, project, +}; +pub use radroots_trade::{Projection, ReducerIssue, ReductionInput, ValidationError, WorkflowPlan}; diff --git a/crates/radroots/src/transport.rs b/crates/radroots/src/transport.rs @@ -1 +1,7 @@ //! Curated transport entry points. + +pub use radroots_sdk::transport::Profile; +pub use radroots_transport::{ + Error, Target, TargetSet, TransportId, + policy::{SatisfactionClass, SatisfactionPolicy, TargetPolicy}, +}; diff --git a/crates/radroots/tests/package_boundary.rs b/crates/radroots/tests/package_boundary.rs @@ -32,6 +32,28 @@ fn root_has_exact_exports_and_no_sdk_namespace() { assert_eq!(ROOT.matches("pub use ").count(), 1); } +#[test] +fn modules_use_deliberate_reexports_without_wildcards() { + let source_root = std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("src"); + for entry in std::fs::read_dir(source_root).expect("read facade source") { + let path = entry.expect("read facade source entry").path(); + if path.extension().and_then(|value| value.to_str()) != Some("rs") { + continue; + } + let source = std::fs::read_to_string(&path).expect("read facade module"); + assert!( + !source.contains("::*"), + "{} contains a wildcard reexport", + path.display() + ); + assert!( + !source.contains("pub mod sdk"), + "{} exposes the forbidden SDK namespace", + path.display() + ); + } +} + fn dependency_names(manifest: &str) -> BTreeSet<&str> { manifest .split_once("[dependencies]") diff --git a/crates/radroots/tests/public_surface.rs b/crates/radroots/tests/public_surface.rs @@ -18,3 +18,25 @@ fn root_exports_only_the_client_boundary() { let result: radroots::Result<()> = Ok(()); assert!(result.is_ok()); } + +#[test] +fn canonical_domain_paths_compile() { + #[allow(unused_imports)] + use radroots::{ + event::{Event, EventDraft, EventId}, + farm::{Farm, FarmPublicLocation, Plan as FarmPlan, PrepareRequest as FarmRequest}, + identity::{AccountId, PublicKey, Username}, + listing::{EditV1, OperationalListing, Plan as ListingPlan}, + signing::{Mode, Provider}, + storage::{IntegrityStatus, Operations as StorageOperations, Status}, + trade::{Money, MutationV1, Plan as TradePlan, Projection}, + transport::{Profile, SatisfactionPolicy, Target, TargetSet, TransportId}, + }; +} + +#[cfg(feature = "knowledge")] +#[test] +fn canonical_knowledge_paths_compile() { + #[allow(unused_imports)] + use radroots::knowledge::{KnowledgeClaim, WikiArticle, normalize_wiki_d_tag}; +}