commit c4d7ebfd91d4725fa440578df7d59de400c0065b
parent 02ecef9424453f4aa274ec33ac8d7ee3856be26e
Author: triesap <tyson@radroots.org>
Date: Mon, 27 Jul 2026 18:52:09 +0000
workspace: correct crate names to snake case
- rename the SDK package and lower registry identities to snake case
- align local patches, lock resolution, and dependency selectors
- update release contracts, synchronized specs, and documentation
- teach architecture fixtures to enforce exact snake-case package names
Diffstat:
11 files changed, 79 insertions(+), 80 deletions(-)
diff --git a/crates/sdk/Cargo.toml b/crates/sdk/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "radroots-sdk"
+name = "radroots_sdk"
publish = false
version.workspace = true
edition.workspace = true
diff --git a/crates/sdk/README.md b/crates/sdk/README.md
@@ -1,4 +1,4 @@
-# radroots-sdk
+# radroots_sdk
Curated Radroots Rust SDK for local-first Radroots product workflows.
@@ -78,10 +78,10 @@ not expose a public workflow-bypass namespace for product callers.
Compile the SDK v1 product examples with:
```bash
-cargo check -p radroots-sdk --example sdk_v1_listing_prepare --features runtime
-cargo check -p radroots-sdk --example sdk_v1_knowledge_prepare --features knowledge
-cargo check -p radroots-sdk --example sdk_v1_local_enqueue_and_mock_sync --features runtime,signer-adapters
-cargo check -p radroots-sdk --example sdk_v1_myc_nip46_signer_setup --features runtime,signer-adapters
+cargo check -p radroots_sdk --example sdk_v1_listing_prepare --features runtime
+cargo check -p radroots_sdk --example sdk_v1_knowledge_prepare --features knowledge
+cargo check -p radroots_sdk --example sdk_v1_local_enqueue_and_mock_sync --features runtime,signer-adapters
+cargo check -p radroots_sdk --example sdk_v1_myc_nip46_signer_setup --features runtime,signer-adapters
```
`sdk_v1_listing_prepare` shows `RadrootsClient::builder()`,
diff --git a/tools/sdk_xtask_import/src/architecture.rs b/tools/sdk_xtask_import/src/architecture.rs
@@ -589,10 +589,9 @@ fn validate_public_dependency_table(
} else {
None
};
- let normalized_key = dependency_key.replace('_', "-");
let dependency_name = declared_package
.or(path_package.as_deref())
- .unwrap_or(normalized_key.as_str());
+ .unwrap_or(dependency_key.as_str());
if !policy.public_packages.contains(dependency_name) {
continue;
}
@@ -1198,7 +1197,7 @@ adr_required = false
fs::write(
root.join("Cargo.toml"),
format!(
- "{}\n[workspace.dependencies]\nradroots_core = {{ package = \"radroots-core\", path = \"crates/dependency\", version = \"=0.1.0\" }}\n",
+ "{}\n[workspace.dependencies]\nradroots_core = {{ package = \"radroots_core\", path = \"crates/dependency\", version = \"=0.1.0\" }}\n",
complete_workspace_manifest("\"crates/radroots\"")
),
)
@@ -1210,19 +1209,19 @@ adr_required = false
.expect("write public manifest");
fs::write(
root.join("crates/dependency/Cargo.toml"),
- "[package]\nname = \"radroots-core\"\nversion = \"0.1.0\"\n",
+ "[package]\nname = \"radroots_core\"\nversion = \"0.1.0\"\n",
)
.expect("write dependency manifest");
let mut architecture = architecture();
architecture.package.push(ArchitecturePackage {
- name: "radroots-core".to_owned(),
+ name: "radroots_core".to_owned(),
});
architecture
.repositories
.get_mut("sdk")
.expect("sdk repository")
.packages
- .push("radroots-core".to_owned());
+ .push("radroots_core".to_owned());
validate_public_dependency_versions(&root, &architecture)
.expect("path plus exact version public dependency");
diff --git a/tools/sdk_xtask_import/src/architecture/api_leakage.rs b/tools/sdk_xtask_import/src/architecture/api_leakage.rs
@@ -1364,7 +1364,7 @@ mod tests {
#[test]
fn generic_sqlx_public_field_is_forbidden() {
- let findings = scan_fixture("radroots-storage", GENERIC_SQLX);
+ let findings = scan_fixture("radroots_storage", GENERIC_SQLX);
assert_eq!(findings.len(), 1);
assert_eq!(findings[0].item, "StorageHandle");
assert_eq!(findings[0].forbidden_path, "sqlx");
@@ -1373,7 +1373,7 @@ mod tests {
#[test]
fn renamed_tokio_return_type_is_resolved() {
- let findings = scan_fixture("radroots-sync", GENERIC_RENAMED_TOKIO);
+ let findings = scan_fixture("radroots_sync", GENERIC_RENAMED_TOKIO);
assert_eq!(findings.len(), 1);
assert_eq!(findings[0].item, "executor");
assert_eq!(findings[0].forbidden_path, "tokio");
@@ -1382,13 +1382,13 @@ mod tests {
#[test]
fn specified_nostr_adapter_may_expose_protocol_types() {
- let findings = scan_fixture("radroots-nostr", ALLOWED_ADAPTER);
+ let findings = scan_fixture("radroots_nostr", ALLOWED_ADAPTER);
assert!(findings.is_empty());
}
#[test]
fn private_implementation_types_are_not_public_api() {
- let findings = scan_fixture("radroots-sdk", PRIVATE_IMPLEMENTATION);
+ let findings = scan_fixture("radroots_sdk", PRIVATE_IMPLEMENTATION);
assert!(findings.is_empty());
}
@@ -1405,7 +1405,7 @@ mod tests {
let mut policy = policy();
policy.exception.push(ApiException {
id: "RCRV1-API-999".to_owned(),
- package: "radroots-sdk".to_owned(),
+ package: "radroots_sdk".to_owned(),
source: "src/lib.rs".to_owned(),
forbidden_path: "reqwest".to_owned(),
items: vec!["temporary_client".to_owned()],
@@ -1418,7 +1418,7 @@ mod tests {
let finding = scan_workspace(
root.path(),
&policy,
- &fixture_metadata(root.path(), "radroots-sdk", ADR_EXCEPTION),
+ &fixture_metadata(root.path(), "radroots_sdk", ADR_EXCEPTION),
)
.expect("scan exception fixture")
.pop()
diff --git a/tools/sdk_xtask_import/src/architecture/dependency_boundary.rs b/tools/sdk_xtask_import/src/architecture/dependency_boundary.rs
@@ -623,8 +623,8 @@ mod tests {
let policy = policy();
let error = validate_metadata(&policy, &placements(&policy), &metadata(DOMAIN_TO_STORAGE))
.expect_err("domain must not depend on storage");
- assert!(error.contains("radroots-event (tier=domain rank=1)"));
- assert!(error.contains("radroots-storage (tier=spi rank=2)"));
+ assert!(error.contains("radroots_event (tier=domain rank=1)"));
+ assert!(error.contains("radroots_storage (tier=spi rank=2)"));
assert!(error.contains("alias=storage_alias"));
assert!(error.contains("kind=normal"));
assert!(error.contains("target=cfg(unix)"));
@@ -636,8 +636,8 @@ mod tests {
let policy = policy();
let error = validate_metadata(&policy, &placements(&policy), &metadata(SPI_TO_ADAPTER))
.expect_err("SPI must not depend on adapter");
- assert!(error.contains("radroots-transport (tier=spi rank=2)"));
- assert!(error.contains("radroots-nostr (tier=adapter rank=3)"));
+ assert!(error.contains("radroots_transport (tier=spi rank=2)"));
+ assert!(error.contains("radroots_nostr (tier=adapter rank=3)"));
assert!(error.contains("alias=protocol_adapter"));
assert!(error.contains("kind=build"));
assert!(error.contains("target=cfg(target_arch = \"wasm32\")"));
@@ -649,8 +649,8 @@ mod tests {
let policy = policy();
let error = validate_metadata(&policy, &placements(&policy), &metadata(SERVICE_TO_SDK))
.expect_err("service orchestration must not depend on SDK");
- assert!(error.contains("radroots-sync (tier=orchestration rank=4)"));
- assert!(error.contains("radroots-sdk (tier=sdk rank=5)"));
+ assert!(error.contains("radroots_sync (tier=orchestration rank=4)"));
+ assert!(error.contains("radroots_sdk (tier=sdk rank=5)"));
assert!(error.contains("alias=client_engine"));
}
@@ -666,12 +666,12 @@ mod tests {
let policy = policy();
let owner = super::CargoPackage {
id: "owner".to_owned(),
- name: "radroots-trade".to_owned(),
+ name: "radroots_trade".to_owned(),
dependencies: Vec::new(),
};
let dependency = super::CargoPackage {
id: "dependency".to_owned(),
- name: "radroots-nostr".to_owned(),
+ name: "radroots_nostr".to_owned(),
dependencies: Vec::new(),
};
let kind = super::CargoDependencyKind {
@@ -679,7 +679,7 @@ mod tests {
target: None,
};
let exact = super::CargoDependency {
- name: "radroots-nostr".to_owned(),
+ name: "radroots_nostr".to_owned(),
kind: Some("dev".to_owned()),
features: vec!["std".to_owned(), "events".to_owned()],
target: None,
diff --git a/tools/sdk_xtask_import/src/check.rs b/tools/sdk_xtask_import/src/check.rs
@@ -2144,24 +2144,24 @@ mod tests {
};
const APPROVED_CRATES: [&str; 19] = [
- "radroots-core",
- "radroots-identity",
- "radroots-blossom",
- "radroots-protocol",
- "radroots-event",
- "radroots-event-codec",
- "radroots-trade",
- "radroots-signing",
- "radroots-transport",
- "radroots-nostr",
- "radroots-nostr-connect",
- "radroots-secrets",
- "radroots-storage",
- "radroots-storage-sqlite",
- "radroots-transport-nostr",
- "radroots-sync",
- "radroots-geonames",
- "radroots-sdk",
+ "radroots_core",
+ "radroots_identity",
+ "radroots_blossom",
+ "radroots_protocol",
+ "radroots_event",
+ "radroots_event_codec",
+ "radroots_trade",
+ "radroots_signing",
+ "radroots_transport",
+ "radroots_nostr",
+ "radroots_nostr_connect",
+ "radroots_secrets",
+ "radroots_storage",
+ "radroots_storage_sqlite",
+ "radroots_transport_nostr",
+ "radroots_sync",
+ "radroots_geonames",
+ "radroots_sdk",
"radroots",
];
@@ -2203,7 +2203,7 @@ registry = "crates-io"
final_enablement_step = 305
spec_id = "radroots.crates.release.v1"
approved_packages = [{}]
-local_packages = ["radroots-sdk", "radroots"]
+local_packages = ["radroots_sdk", "radroots"]
external_packages = [{}]
[workspace_classification]
@@ -2320,7 +2320,7 @@ retired = []
.expect("write policy");
fs::write(
root.join("crates/sdk/Cargo.toml"),
- "[package]\nname = \"radroots-sdk\"\nversion = \"0.1.0\"\npublish = [\"crates-io\"]\n",
+ "[package]\nname = \"radroots_sdk\"\nversion = \"0.1.0\"\npublish = [\"crates-io\"]\n",
)
.expect("write SDK manifest");
fs::write(
diff --git a/tools/sdk_xtask_import/src/smoke.rs b/tools/sdk_xtask_import/src/smoke.rs
@@ -218,7 +218,7 @@ mod tests {
#[test]
fn smoke_consumer_manifest_uses_exact_direct_dependency_pin() {
let manifest =
- render_consumer_manifest(Path::new("/tmp/radroots-sdk"), "=0.44.2").expect("manifest");
+ render_consumer_manifest(Path::new("/tmp/radroots_sdk"), "=0.44.2").expect("manifest");
assert!(manifest.contains("nostr = \"=0.44.2\""));
assert!(!manifest.contains("nostr = \"0.44.2\""));
diff --git a/tools/sdk_xtask_import/tests/fixtures/dependency-boundaries/domain-to-storage.json b/tools/sdk_xtask_import/tests/fixtures/dependency-boundaries/domain-to-storage.json
@@ -1,11 +1,11 @@
{
"packages": [
{
- "id": "fixture#radroots-event@0.1.0",
- "name": "radroots-event",
+ "id": "fixture#radroots_event@0.1.0",
+ "name": "radroots_event",
"dependencies": [
{
- "name": "radroots-storage",
+ "name": "radroots_storage",
"rename": "storage_alias",
"kind": null,
"features": ["memory"],
@@ -15,19 +15,19 @@
]
},
{
- "id": "fixture#radroots-storage@0.1.0",
- "name": "radroots-storage",
+ "id": "fixture#radroots_storage@0.1.0",
+ "name": "radroots_storage",
"dependencies": []
}
],
"resolve": {
"nodes": [
{
- "id": "fixture#radroots-event@0.1.0",
+ "id": "fixture#radroots_event@0.1.0",
"deps": [
{
"name": "storage_alias",
- "pkg": "fixture#radroots-storage@0.1.0",
+ "pkg": "fixture#radroots_storage@0.1.0",
"dep_kinds": [
{
"kind": null,
@@ -38,7 +38,7 @@
]
},
{
- "id": "fixture#radroots-storage@0.1.0",
+ "id": "fixture#radroots_storage@0.1.0",
"deps": []
}
]
diff --git a/tools/sdk_xtask_import/tests/fixtures/dependency-boundaries/service-to-sdk.json b/tools/sdk_xtask_import/tests/fixtures/dependency-boundaries/service-to-sdk.json
@@ -1,11 +1,11 @@
{
"packages": [
{
- "id": "fixture#radroots-sync@0.1.0",
- "name": "radroots-sync",
+ "id": "fixture#radroots_sync@0.1.0",
+ "name": "radroots_sync",
"dependencies": [
{
- "name": "radroots-sdk",
+ "name": "radroots_sdk",
"rename": "client_engine",
"kind": null,
"features": ["memory"],
@@ -15,19 +15,19 @@
]
},
{
- "id": "fixture#radroots-sdk@0.1.0",
- "name": "radroots-sdk",
+ "id": "fixture#radroots_sdk@0.1.0",
+ "name": "radroots_sdk",
"dependencies": []
}
],
"resolve": {
"nodes": [
{
- "id": "fixture#radroots-sync@0.1.0",
+ "id": "fixture#radroots_sync@0.1.0",
"deps": [
{
"name": "client_engine",
- "pkg": "fixture#radroots-sdk@0.1.0",
+ "pkg": "fixture#radroots_sdk@0.1.0",
"dep_kinds": [
{
"kind": null,
@@ -38,7 +38,7 @@
]
},
{
- "id": "fixture#radroots-sdk@0.1.0",
+ "id": "fixture#radroots_sdk@0.1.0",
"deps": []
}
]
diff --git a/tools/sdk_xtask_import/tests/fixtures/dependency-boundaries/spi-to-adapter.json b/tools/sdk_xtask_import/tests/fixtures/dependency-boundaries/spi-to-adapter.json
@@ -1,11 +1,11 @@
{
"packages": [
{
- "id": "fixture#radroots-transport@0.1.0",
- "name": "radroots-transport",
+ "id": "fixture#radroots_transport@0.1.0",
+ "name": "radroots_transport",
"dependencies": [
{
- "name": "radroots-nostr",
+ "name": "radroots_nostr",
"rename": "protocol_adapter",
"kind": "build",
"features": ["events"],
@@ -15,19 +15,19 @@
]
},
{
- "id": "fixture#radroots-nostr@0.1.0",
- "name": "radroots-nostr",
+ "id": "fixture#radroots_nostr@0.1.0",
+ "name": "radroots_nostr",
"dependencies": []
}
],
"resolve": {
"nodes": [
{
- "id": "fixture#radroots-transport@0.1.0",
+ "id": "fixture#radroots_transport@0.1.0",
"deps": [
{
"name": "protocol_adapter",
- "pkg": "fixture#radroots-nostr@0.1.0",
+ "pkg": "fixture#radroots_nostr@0.1.0",
"dep_kinds": [
{
"kind": "build",
@@ -38,7 +38,7 @@
]
},
{
- "id": "fixture#radroots-nostr@0.1.0",
+ "id": "fixture#radroots_nostr@0.1.0",
"deps": []
}
]
diff --git a/tools/sdk_xtask_import/tests/fixtures/dependency-boundaries/valid-downward.json b/tools/sdk_xtask_import/tests/fixtures/dependency-boundaries/valid-downward.json
@@ -1,11 +1,11 @@
{
"packages": [
{
- "id": "fixture#radroots-transport-nostr@0.1.0",
- "name": "radroots-transport-nostr",
+ "id": "fixture#radroots_transport_nostr@0.1.0",
+ "name": "radroots_transport_nostr",
"dependencies": [
{
- "name": "radroots-transport",
+ "name": "radroots_transport",
"rename": "transport_spi",
"kind": "dev",
"features": [],
@@ -15,19 +15,19 @@
]
},
{
- "id": "fixture#radroots-transport@0.1.0",
- "name": "radroots-transport",
+ "id": "fixture#radroots_transport@0.1.0",
+ "name": "radroots_transport",
"dependencies": []
}
],
"resolve": {
"nodes": [
{
- "id": "fixture#radroots-transport-nostr@0.1.0",
+ "id": "fixture#radroots_transport_nostr@0.1.0",
"deps": [
{
"name": "transport_spi",
- "pkg": "fixture#radroots-transport@0.1.0",
+ "pkg": "fixture#radroots_transport@0.1.0",
"dep_kinds": [
{
"kind": "dev",
@@ -38,7 +38,7 @@
]
},
{
- "id": "fixture#radroots-transport@0.1.0",
+ "id": "fixture#radroots_transport@0.1.0",
"deps": []
}
]