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:
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};
+}