lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README

commit f366e8aca107fe638adb1dc8ffab5f3973964389
parent 94da71c063f25f47c73d128c072215eaa72f57fd
Author: triesap <tyson@radroots.org>
Date:   Tue, 11 Aug 2026 00:21:24 +0000

build: register service host crates

- register unpublished host and SQLite mechanism packages
- inherit workspace lint and package identity policy
- classify both packages in governed private inventories
- test empty dependency and export boundaries

Diffstat:
MCargo.lock | 8++++++++
MCargo.toml | 4++++
Mcontracts/coverage.toml | 2++
Mcontracts/crates/catalog.v2.toml | 54+++++++++++++++++++++++++++++++++++++++++++++++++++++-
Mcontracts/crates/generated/package_groups.v1.toml | 10+++++-----
Mcontracts/crates/generated/platform_inventory.v1.toml | 4++--
Mcontracts/crates/generated/release_inventory.v2.toml | 4++--
Mcontracts/releases/publish_policy.toml | 2++
Acrates/service_host/Cargo.toml | 17+++++++++++++++++
Acrates/service_host/README.md | 16++++++++++++++++
Acrates/service_host/src/lib.rs | 6++++++
Acrates/service_host/tests/package_boundary.rs | 35+++++++++++++++++++++++++++++++++++
Acrates/service_sqlite/Cargo.toml | 17+++++++++++++++++
Acrates/service_sqlite/README.md | 14++++++++++++++
Acrates/service_sqlite/src/lib.rs | 6++++++
Acrates/service_sqlite/tests/package_boundary.rs | 35+++++++++++++++++++++++++++++++++++
16 files changed, 224 insertions(+), 10 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock @@ -3875,6 +3875,14 @@ dependencies = [ ] [[package]] +name = "radroots_service_host" +version = "0.1.0-alpha" + +[[package]] +name = "radroots_service_sqlite" +version = "0.1.0-alpha" + +[[package]] name = "radroots_signing" version = "0.1.0-alpha" dependencies = [ diff --git a/Cargo.toml b/Cargo.toml @@ -31,6 +31,8 @@ members = [ "crates/runtime_paths", "crates/runtime_distribution", "crates/runtime_manager", + "crates/service_host", + "crates/service_sqlite", "crates/trade", "crates/transport", "crates/mesh", @@ -135,6 +137,8 @@ radroots_protocol = { package = "radroots_protocol", path = "crates/protocol", v radroots_runtime_paths = { path = "crates/runtime_paths", version = "=0.1.0-alpha", default-features = false } radroots_runtime_distribution = { path = "crates/runtime_distribution", version = "=0.1.0-alpha", default-features = false } radroots_runtime_manager = { path = "crates/runtime_manager", version = "=0.1.0-alpha", default-features = false } +radroots_service_host = { path = "crates/service_host", version = "=0.1.0-alpha", default-features = false } +radroots_service_sqlite = { path = "crates/service_sqlite", version = "=0.1.0-alpha", default-features = false } radroots_transport_nostr = { package = "radroots_transport_nostr", path = "crates/transport_nostr", version = "=0.1.0-alpha", default-features = false } radroots_transport_reticulum = { path = "crates/transport_reticulum", version = "=0.1.0-alpha", default-features = false } radroots_simplex_agent_proto = { path = "crates/simplex_agent_proto", version = "=0.1.0-alpha", default-features = false } diff --git a/contracts/coverage.toml b/contracts/coverage.toml @@ -108,6 +108,8 @@ crates = [ "radroots_runtime_distribution", "radroots_runtime_manager", "radroots_runtime_paths", + "radroots_service_host", + "radroots_service_sqlite", "radroots_sql_core", "radroots_sdk", "radroots_sdk_ffi", diff --git a/contracts/crates/catalog.v2.toml b/contracts/crates/catalog.v2.toml @@ -7,7 +7,7 @@ rust_version = "1.97.1" edition = "2024" resolver = "3" public_package_count = 19 -package_count = 61 +package_count = 63 digest_algorithm = "sha256-raw-bytes-v1" source_tree_digest_algorithm = "sha256-git-ls-tree-r-v1" native_introduction_tree_digest_algorithm = "sha256-git-tree-records-z-v1" @@ -892,6 +892,58 @@ compatibility = ["package_private"] replaces = [] [[package]] +name = "radroots_service_host" +path = "crates/service_host" +state = "active" +tier = "runtime" +visibility = "private_runtime" +publish = false +version = "0.1.0-alpha" +license = "MIT OR Apache-2.0" +platforms = ["native"] +groups = ["coverage_required", "preview"] +owners = ["runtime"] +permitted_dependency_tiers = [ + "foundation", + "domain", + "spi", + "adapter", + "orchestration", + "preview", + "runtime", +] +provenance_kind = "native" +introduction_tree_sha256 = "4c12f734bfb33366546f87f6273b687635debc84876c51b1eff10a3dccf2e52d" +compatibility = ["package_private"] +replaces = [] + +[[package]] +name = "radroots_service_sqlite" +path = "crates/service_sqlite" +state = "active" +tier = "runtime" +visibility = "private_runtime" +publish = false +version = "0.1.0-alpha" +license = "MIT OR Apache-2.0" +platforms = ["native"] +groups = ["coverage_required", "preview"] +owners = ["storage"] +permitted_dependency_tiers = [ + "foundation", + "domain", + "spi", + "adapter", + "orchestration", + "preview", + "runtime", +] +provenance_kind = "native" +introduction_tree_sha256 = "6418eec43a267381235158312d4799ffe1a1e3f36ab59ae2063e75bb0235f4a4" +compatibility = ["package_private"] +replaces = [] + +[[package]] name = "radroots_test_fixtures" path = "crates/test_fixtures" state = "active" diff --git a/contracts/crates/generated/package_groups.v1.toml b/contracts/crates/generated/package_groups.v1.toml @@ -1,5 +1,5 @@ schema = "radroots.workspace.package-groups.v1" -catalog_sha256 = "d42a2ec2f86f4df22b0deee5afe0fb7e971dae2f3657758961ff9d19c7e2d27e" +catalog_sha256 = "58d9d5ed0a98eeaec9198928d1a3ec8d722ad2eb08fbb5ab6ef4bb1eba898d0f" [[group]] id = "boundaries" @@ -9,8 +9,8 @@ reserved_packages = [] [[group]] id = "coverage_required" -packages = ["radroots", "radroots_blossom", "radroots_core", "radroots_core_bindings", "radroots_event", "radroots_event_bindings", "radroots_event_codec", "radroots_event_codec_wasm", "radroots_geonames", "radroots_identity", "radroots_identity_bindings", "radroots_mesh", "radroots_mesh_agent_client", "radroots_mesh_agent_proto", "radroots_mobile_bindgen", "radroots_mobile_core", "radroots_mobile_ffi", "radroots_mobile_wasm", "radroots_nostr", "radroots_nostr_connect", "radroots_nostrdb", "radroots_protocol", "radroots_replica_schema", "radroots_replica_schema_bindings", "radroots_replica_store", "radroots_replica_store_wasm", "radroots_replica_sync", "radroots_replica_sync_wasm", "radroots_runtime_distribution", "radroots_runtime_manager", "radroots_runtime_paths", "radroots_sdk", "radroots_sdk_ffi", "radroots_sdk_sql_wasm_runtime", "radroots_secrets", "radroots_signing", "radroots_sql_core", "radroots_storage", "radroots_storage_sqlite", "radroots_studio_application", "radroots_studio_domain", "radroots_studio_ffi", "radroots_studio_nostr", "radroots_studio_preferences", "radroots_studio_runtime", "radroots_studio_storage", "radroots_studio_uniffi_bindgen", "radroots_sync", "radroots_test_fixtures", "radroots_trade", "radroots_trade_bindings", "radroots_transport", "radroots_transport_nostr", "radroots_transport_reticulum", "xtask"] -active_packages = ["radroots", "radroots_blossom", "radroots_core", "radroots_core_bindings", "radroots_event", "radroots_event_bindings", "radroots_event_codec", "radroots_event_codec_wasm", "radroots_geonames", "radroots_identity", "radroots_identity_bindings", "radroots_mesh", "radroots_mesh_agent_client", "radroots_mesh_agent_proto", "radroots_mobile_bindgen", "radroots_mobile_core", "radroots_mobile_ffi", "radroots_mobile_wasm", "radroots_nostr", "radroots_nostr_connect", "radroots_nostrdb", "radroots_protocol", "radroots_replica_schema", "radroots_replica_schema_bindings", "radroots_replica_store", "radroots_replica_store_wasm", "radroots_replica_sync", "radroots_replica_sync_wasm", "radroots_runtime_distribution", "radroots_runtime_manager", "radroots_runtime_paths", "radroots_sdk", "radroots_sdk_ffi", "radroots_sdk_sql_wasm_runtime", "radroots_secrets", "radroots_signing", "radroots_sql_core", "radroots_storage", "radroots_storage_sqlite", "radroots_studio_application", "radroots_studio_domain", "radroots_studio_ffi", "radroots_studio_nostr", "radroots_studio_preferences", "radroots_studio_runtime", "radroots_studio_storage", "radroots_studio_uniffi_bindgen", "radroots_sync", "radroots_test_fixtures", "radroots_trade", "radroots_trade_bindings", "radroots_transport", "radroots_transport_nostr", "radroots_transport_reticulum", "xtask"] +packages = ["radroots", "radroots_blossom", "radroots_core", "radroots_core_bindings", "radroots_event", "radroots_event_bindings", "radroots_event_codec", "radroots_event_codec_wasm", "radroots_geonames", "radroots_identity", "radroots_identity_bindings", "radroots_mesh", "radroots_mesh_agent_client", "radroots_mesh_agent_proto", "radroots_mobile_bindgen", "radroots_mobile_core", "radroots_mobile_ffi", "radroots_mobile_wasm", "radroots_nostr", "radroots_nostr_connect", "radroots_nostrdb", "radroots_protocol", "radroots_replica_schema", "radroots_replica_schema_bindings", "radroots_replica_store", "radroots_replica_store_wasm", "radroots_replica_sync", "radroots_replica_sync_wasm", "radroots_runtime_distribution", "radroots_runtime_manager", "radroots_runtime_paths", "radroots_sdk", "radroots_sdk_ffi", "radroots_sdk_sql_wasm_runtime", "radroots_secrets", "radroots_service_host", "radroots_service_sqlite", "radroots_signing", "radroots_sql_core", "radroots_storage", "radroots_storage_sqlite", "radroots_studio_application", "radroots_studio_domain", "radroots_studio_ffi", "radroots_studio_nostr", "radroots_studio_preferences", "radroots_studio_runtime", "radroots_studio_storage", "radroots_studio_uniffi_bindgen", "radroots_sync", "radroots_test_fixtures", "radroots_trade", "radroots_trade_bindings", "radroots_transport", "radroots_transport_nostr", "radroots_transport_reticulum", "xtask"] +active_packages = ["radroots", "radroots_blossom", "radroots_core", "radroots_core_bindings", "radroots_event", "radroots_event_bindings", "radroots_event_codec", "radroots_event_codec_wasm", "radroots_geonames", "radroots_identity", "radroots_identity_bindings", "radroots_mesh", "radroots_mesh_agent_client", "radroots_mesh_agent_proto", "radroots_mobile_bindgen", "radroots_mobile_core", "radroots_mobile_ffi", "radroots_mobile_wasm", "radroots_nostr", "radroots_nostr_connect", "radroots_nostrdb", "radroots_protocol", "radroots_replica_schema", "radroots_replica_schema_bindings", "radroots_replica_store", "radroots_replica_store_wasm", "radroots_replica_sync", "radroots_replica_sync_wasm", "radroots_runtime_distribution", "radroots_runtime_manager", "radroots_runtime_paths", "radroots_sdk", "radroots_sdk_ffi", "radroots_sdk_sql_wasm_runtime", "radroots_secrets", "radroots_service_host", "radroots_service_sqlite", "radroots_signing", "radroots_sql_core", "radroots_storage", "radroots_storage_sqlite", "radroots_studio_application", "radroots_studio_domain", "radroots_studio_ffi", "radroots_studio_nostr", "radroots_studio_preferences", "radroots_studio_runtime", "radroots_studio_storage", "radroots_studio_uniffi_bindgen", "radroots_sync", "radroots_test_fixtures", "radroots_trade", "radroots_trade_bindings", "radroots_transport", "radroots_transport_nostr", "radroots_transport_reticulum", "xtask"] reserved_packages = [] [[group]] @@ -27,8 +27,8 @@ reserved_packages = [] [[group]] id = "preview" -packages = ["radroots_mesh", "radroots_mesh_agent_client", "radroots_mesh_agent_proto", "radroots_nostrdb", "radroots_replica_schema", "radroots_replica_store", "radroots_replica_sync", "radroots_runtime_distribution", "radroots_runtime_manager", "radroots_runtime_paths", "radroots_simplex_agent_proto", "radroots_simplex_app_store", "radroots_simplex_chat_proto", "radroots_simplex_smp_crypto", "radroots_simplex_smp_proto", "radroots_simplex_smp_transport", "radroots_sql_core", "radroots_test_fixtures", "radroots_transport_reticulum"] -active_packages = ["radroots_mesh", "radroots_mesh_agent_client", "radroots_mesh_agent_proto", "radroots_nostrdb", "radroots_replica_schema", "radroots_replica_store", "radroots_replica_sync", "radroots_runtime_distribution", "radroots_runtime_manager", "radroots_runtime_paths", "radroots_simplex_agent_proto", "radroots_simplex_app_store", "radroots_simplex_chat_proto", "radroots_simplex_smp_crypto", "radroots_simplex_smp_proto", "radroots_simplex_smp_transport", "radroots_sql_core", "radroots_test_fixtures", "radroots_transport_reticulum"] +packages = ["radroots_mesh", "radroots_mesh_agent_client", "radroots_mesh_agent_proto", "radroots_nostrdb", "radroots_replica_schema", "radroots_replica_store", "radroots_replica_sync", "radroots_runtime_distribution", "radroots_runtime_manager", "radroots_runtime_paths", "radroots_service_host", "radroots_service_sqlite", "radroots_simplex_agent_proto", "radroots_simplex_app_store", "radroots_simplex_chat_proto", "radroots_simplex_smp_crypto", "radroots_simplex_smp_proto", "radroots_simplex_smp_transport", "radroots_sql_core", "radroots_test_fixtures", "radroots_transport_reticulum"] +active_packages = ["radroots_mesh", "radroots_mesh_agent_client", "radroots_mesh_agent_proto", "radroots_nostrdb", "radroots_replica_schema", "radroots_replica_store", "radroots_replica_sync", "radroots_runtime_distribution", "radroots_runtime_manager", "radroots_runtime_paths", "radroots_service_host", "radroots_service_sqlite", "radroots_simplex_agent_proto", "radroots_simplex_app_store", "radroots_simplex_chat_proto", "radroots_simplex_smp_crypto", "radroots_simplex_smp_proto", "radroots_simplex_smp_transport", "radroots_sql_core", "radroots_test_fixtures", "radroots_transport_reticulum"] reserved_packages = [] [[group]] diff --git a/contracts/crates/generated/platform_inventory.v1.toml b/contracts/crates/generated/platform_inventory.v1.toml @@ -1,5 +1,5 @@ schema = "radroots.workspace.platform-inventory.v1" -catalog_sha256 = "d42a2ec2f86f4df22b0deee5afe0fb7e971dae2f3657758961ff9d19c7e2d27e" +catalog_sha256 = "58d9d5ed0a98eeaec9198928d1a3ec8d722ad2eb08fbb5ab6ef4bb1eba898d0f" [[platform]] id = "android" @@ -23,7 +23,7 @@ packages = ["radroots_studio_ffi"] [[platform]] id = "native" -packages = ["radroots_core_bindings", "radroots_event_bindings", "radroots_geonames", "radroots_identity_bindings", "radroots_mesh", "radroots_mesh_agent_client", "radroots_mobile_bindgen", "radroots_mobile_core", "radroots_nostrdb", "radroots_replica_schema_bindings", "radroots_replica_store", "radroots_replica_sync", "radroots_runtime_distribution", "radroots_runtime_manager", "radroots_runtime_paths", "radroots_sdk_ffi", "radroots_secrets", "radroots_simplex_app_store", "radroots_simplex_smp_transport", "radroots_sql_core", "radroots_storage", "radroots_storage_sqlite", "radroots_studio_application", "radroots_studio_domain", "radroots_studio_nostr", "radroots_studio_preferences", "radroots_studio_runtime", "radroots_studio_storage", "radroots_studio_uniffi_bindgen", "radroots_sync", "radroots_trade_bindings", "radroots_transport_nostr", "radroots_transport_reticulum", "xtask"] +packages = ["radroots_core_bindings", "radroots_event_bindings", "radroots_geonames", "radroots_identity_bindings", "radroots_mesh", "radroots_mesh_agent_client", "radroots_mobile_bindgen", "radroots_mobile_core", "radroots_nostrdb", "radroots_replica_schema_bindings", "radroots_replica_store", "radroots_replica_sync", "radroots_runtime_distribution", "radroots_runtime_manager", "radroots_runtime_paths", "radroots_sdk_ffi", "radroots_secrets", "radroots_service_host", "radroots_service_sqlite", "radroots_simplex_app_store", "radroots_simplex_smp_transport", "radroots_sql_core", "radroots_storage", "radroots_storage_sqlite", "radroots_studio_application", "radroots_studio_domain", "radroots_studio_nostr", "radroots_studio_preferences", "radroots_studio_runtime", "radroots_studio_storage", "radroots_studio_uniffi_bindgen", "radroots_sync", "radroots_trade_bindings", "radroots_transport_nostr", "radroots_transport_reticulum", "xtask"] [[platform]] id = "wasm32" diff --git a/contracts/crates/generated/release_inventory.v2.toml b/contracts/crates/generated/release_inventory.v2.toml @@ -1,7 +1,7 @@ schema = "radroots.workspace.release-inventory.v2" -catalog_sha256 = "d42a2ec2f86f4df22b0deee5afe0fb7e971dae2f3657758961ff9d19c7e2d27e" +catalog_sha256 = "58d9d5ed0a98eeaec9198928d1a3ec8d722ad2eb08fbb5ab6ef4bb1eba898d0f" architecture = "radroots.crates.release.v2" version = "0.1.0-alpha" public_packages = ["radroots", "radroots_blossom", "radroots_core", "radroots_event", "radroots_event_codec", "radroots_geonames", "radroots_identity", "radroots_nostr", "radroots_nostr_connect", "radroots_protocol", "radroots_sdk", "radroots_secrets", "radroots_signing", "radroots_storage", "radroots_storage_sqlite", "radroots_sync", "radroots_trade", "radroots_transport", "radroots_transport_nostr"] -private_packages = ["radroots_core_bindings", "radroots_event_bindings", "radroots_event_codec_wasm", "radroots_identity_bindings", "radroots_mesh", "radroots_mesh_agent_client", "radroots_mesh_agent_proto", "radroots_mobile_bindgen", "radroots_mobile_core", "radroots_mobile_ffi", "radroots_mobile_wasm", "radroots_nostrdb", "radroots_replica_schema", "radroots_replica_schema_bindings", "radroots_replica_store", "radroots_replica_store_wasm", "radroots_replica_sync", "radroots_replica_sync_wasm", "radroots_runtime_distribution", "radroots_runtime_manager", "radroots_runtime_paths", "radroots_sdk_ffi", "radroots_sdk_sql_wasm_runtime", "radroots_simplex_agent_proto", "radroots_simplex_app_store", "radroots_simplex_chat_proto", "radroots_simplex_smp_crypto", "radroots_simplex_smp_proto", "radroots_simplex_smp_transport", "radroots_sql_core", "radroots_studio_application", "radroots_studio_domain", "radroots_studio_ffi", "radroots_studio_nostr", "radroots_studio_preferences", "radroots_studio_runtime", "radroots_studio_storage", "radroots_studio_uniffi_bindgen", "radroots_test_fixtures", "radroots_trade_bindings", "radroots_transport_reticulum", "xtask"] +private_packages = ["radroots_core_bindings", "radroots_event_bindings", "radroots_event_codec_wasm", "radroots_identity_bindings", "radroots_mesh", "radroots_mesh_agent_client", "radroots_mesh_agent_proto", "radroots_mobile_bindgen", "radroots_mobile_core", "radroots_mobile_ffi", "radroots_mobile_wasm", "radroots_nostrdb", "radroots_replica_schema", "radroots_replica_schema_bindings", "radroots_replica_store", "radroots_replica_store_wasm", "radroots_replica_sync", "radroots_replica_sync_wasm", "radroots_runtime_distribution", "radroots_runtime_manager", "radroots_runtime_paths", "radroots_sdk_ffi", "radroots_sdk_sql_wasm_runtime", "radroots_service_host", "radroots_service_sqlite", "radroots_simplex_agent_proto", "radroots_simplex_app_store", "radroots_simplex_chat_proto", "radroots_simplex_smp_crypto", "radroots_simplex_smp_proto", "radroots_simplex_smp_transport", "radroots_sql_core", "radroots_studio_application", "radroots_studio_domain", "radroots_studio_ffi", "radroots_studio_nostr", "radroots_studio_preferences", "radroots_studio_runtime", "radroots_studio_storage", "radroots_studio_uniffi_bindgen", "radroots_test_fixtures", "radroots_trade_bindings", "radroots_transport_reticulum", "xtask"] reserved_packages = [] diff --git a/contracts/releases/publish_policy.toml b/contracts/releases/publish_policy.toml @@ -57,6 +57,8 @@ private = [ "radroots_runtime_manager", "radroots_runtime_paths", "radroots_sdk_ffi", + "radroots_service_host", + "radroots_service_sqlite", "radroots_sql_core", "radroots_studio_application", "radroots_studio_domain", diff --git a/crates/service_host/Cargo.toml b/crates/service_host/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "radroots_service_host" +publish = false +version = "0.1.0-alpha" +edition.workspace = true +authors.workspace = true +rust-version.workspace = true +license.workspace = true +description = "Reusable service-host mechanics for Radroots services" +repository.workspace = true +homepage.workspace = true +readme = "README.md" + +[dependencies] + +[lints] +workspace = true diff --git a/crates/service_host/README.md b/crates/service_host/README.md @@ -0,0 +1,16 @@ +# radroots_service_host + +`radroots_service_host` is the unpublished, native host-mechanism crate for +Radroots services. It provides narrow, reusable building blocks for validated +service identity, deterministic configuration loading, injected time and +entropy, lifecycle supervision, local administration, and cached operations +surfaces. + +The crate owns mechanisms only. Service-specific configuration, policy, +database schema, domain routes, readiness decisions, process CLI parsing, +runtime creation, global logging, and signal installation remain with the +consuming service or binary boundary. Authoritative tasks may not be detached, +and this crate must not become a broad lifecycle framework. + +Publication is disabled. The package is not part of the public Radroots crate +release closure. diff --git a/crates/service_host/src/lib.rs b/crates/service_host/src/lib.rs @@ -0,0 +1,6 @@ +#![forbid(unsafe_code)] + +//! Reusable, service-neutral host mechanics for Radroots services. +//! +//! This crate is intentionally empty while its public modules are introduced +//! as independently reviewed contract checkpoints. diff --git a/crates/service_host/tests/package_boundary.rs b/crates/service_host/tests/package_boundary.rs @@ -0,0 +1,35 @@ +use std::collections::BTreeSet; + +const MANIFEST: &str = include_str!("../Cargo.toml"); +const ROOT: &str = include_str!("../src/lib.rs"); + +#[test] +fn service_host_is_unpublished_lint_governed_and_dependency_free() { + for required in [ + "name = \"radroots_service_host\"", + "publish = false", + "version = \"0.1.0-alpha\"", + "[lints]\nworkspace = true", + ] { + assert!( + MANIFEST.contains(required), + "manifest is missing `{required}`" + ); + } + + assert_eq!(dependency_keys(MANIFEST), BTreeSet::new()); + assert!(!ROOT.contains("pub mod ")); +} + +fn dependency_keys(manifest: &str) -> BTreeSet<&str> { + manifest + .split_once("[dependencies]") + .map(|(_, dependencies)| dependencies) + .unwrap_or_default() + .lines() + .skip(1) + .take_while(|line| !line.starts_with('[')) + .filter_map(|line| line.split_once('=').map(|(key, _)| key.trim())) + .filter(|key| !key.is_empty()) + .collect() +} diff --git a/crates/service_sqlite/Cargo.toml b/crates/service_sqlite/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "radroots_service_sqlite" +publish = false +version = "0.1.0-alpha" +edition.workspace = true +authors.workspace = true +rust-version.workspace = true +license.workspace = true +description = "Reusable SQLite mechanics for Radroots service state" +repository.workspace = true +homepage.workspace = true +readme = "README.md" + +[dependencies] + +[lints] +workspace = true diff --git a/crates/service_sqlite/README.md b/crates/service_sqlite/README.md @@ -0,0 +1,14 @@ +# radroots_service_sqlite + +`radroots_service_sqlite` is the unpublished, native SQLite-mechanism crate for +Radroots services. It provides narrow, reusable building blocks for exclusive +writer authority, instance locking, versioned schema mechanics, bounded +transactions, integrity checks, backup, restore, and passive storage status. + +The crate owns mechanics only. Service-specific tables, SQL, repositories, +backup content policy, identity material, process lifecycle, and readiness +policy remain with the consuming service. Its connection pool stays private; +the crate does not provide callers with raw database authority. + +Publication is disabled. The package is not part of the public Radroots crate +release closure. diff --git a/crates/service_sqlite/src/lib.rs b/crates/service_sqlite/src/lib.rs @@ -0,0 +1,6 @@ +#![forbid(unsafe_code)] + +//! Reusable, service-neutral SQLite mechanics for Radroots services. +//! +//! This crate is intentionally empty while its public modules are introduced +//! as independently reviewed contract checkpoints. diff --git a/crates/service_sqlite/tests/package_boundary.rs b/crates/service_sqlite/tests/package_boundary.rs @@ -0,0 +1,35 @@ +use std::collections::BTreeSet; + +const MANIFEST: &str = include_str!("../Cargo.toml"); +const ROOT: &str = include_str!("../src/lib.rs"); + +#[test] +fn service_sqlite_is_unpublished_lint_governed_and_dependency_free() { + for required in [ + "name = \"radroots_service_sqlite\"", + "publish = false", + "version = \"0.1.0-alpha\"", + "[lints]\nworkspace = true", + ] { + assert!( + MANIFEST.contains(required), + "manifest is missing `{required}`" + ); + } + + assert_eq!(dependency_keys(MANIFEST), BTreeSet::new()); + assert!(!ROOT.contains("pub mod ")); +} + +fn dependency_keys(manifest: &str) -> BTreeSet<&str> { + manifest + .split_once("[dependencies]") + .map(|(_, dependencies)| dependencies) + .unwrap_or_default() + .lines() + .skip(1) + .take_while(|line| !line.starts_with('[')) + .filter_map(|line| line.split_once('=').map(|(key, _)| key.trim())) + .filter(|key| !key.is_empty()) + .collect() +}