commit 3fcace7e84036a9d247e95991a029bc078ab5a2a
parent 1162b1c3f2f8bc05d3616945751727123c233b53
Author: triesap <tyson@radroots.org>
Date: Sun, 9 Aug 2026 03:59:20 +0000
catalog: add native introduction provenance
Diffstat:
11 files changed, 2154 insertions(+), 1680 deletions(-)
diff --git a/AGENTS.md b/AGENTS.md
@@ -86,6 +86,18 @@ Before editing code:
## 7. Architecture, contract, and release discipline
- `contracts/` and `tools/xtask` are authoritative for core-library contracts, conformance, coverage, hygiene, and release-candidate governance.
+- `contracts/crates/catalog.v2.toml` is the package-catalog authority. Preserve
+ imported packages as `provenance_kind = "imported"` with their immutable
+ repository, revision, path, and tree digest. New repository-native packages
+ must be active, unpublished `provenance_kind = "native"` entries and must
+ store only `introduction_tree_sha256`; never embed a self-referential
+ introducing commit OID.
+- Before validating a new native catalog entry, stage the complete package path
+ and run `cargo xtask catalog check` or `cargo xtask catalog write`. The
+ pre-commit digest is derived from stage-zero index records, not the mutable
+ worktree. After the introducing commit, the same command derives the first
+ adding commit from repository history and verifies its immutable tree. Do
+ not rewrite that digest for later source changes.
- Behavior changes that affect public surfaces must update the relevant contract metadata, conformance vectors, export rules, or validation flows in the same change.
- Keep pure flake checks and repo-aware command apps aligned with the documented Nix command map.
- This repository owns packages 1-17 in `radroots.crates.release.v1`, from
diff --git a/AGENT_INSTRUCTIONS.md b/AGENT_INSTRUCTIONS.md
@@ -137,6 +137,18 @@ Do not duplicate contract knowledge between crates when `contracts/`, `contracts
`contracts/`, `contracts/conformance/`, and `tools/xtask` are first-class parts of the product surface, not secondary metadata.
+The package authority is `contracts/crates/catalog.v2.toml`. Imported entries
+retain their exact immutable source repository, full revision, source path, and
+source-tree digest. A newly created repository-native package instead uses
+`provenance_kind = "native"` and records only its
+`introduction_tree_sha256`; native entries are active and unpublished. Stage
+the complete new package path before running `cargo xtask catalog check` or
+`cargo xtask catalog write`. Before the first commit, xtask verifies the digest
+against canonical stage-zero index tree records. After that commit, xtask
+derives the earliest adding commit from history and verifies the same digest
+against that commit's package tree. Later source changes do not change the
+introduction digest, and the catalog never stores the introducing commit OID.
+
When a change affects exported models, transforms, identifiers, or public runtime expectations:
- update the relevant contract metadata
diff --git a/contracts/crates/catalog.v1.toml b/contracts/crates/catalog.v1.toml
@@ -1,1624 +0,0 @@
-schema_version = 1
-schema = "radroots.workspace.catalog.v1"
-architecture = "radroots.crates.release.v2"
-consolidation = "radroots.rust.consolidation.v1"
-version = "0.1.0-alpha"
-rust_version = "1.97.1"
-edition = "2024"
-resolver = "3"
-public_package_count = 19
-package_count = 61
-digest_algorithm = "sha256-raw-bytes-v1"
-source_tree_digest_algorithm = "sha256-git-ls-tree-r-v1"
-source_provenance_policy = "immutable_after_source_retirement"
-provenance_correction_contract = "approved_correction_record_required"
-retired_packages = [
- "radroots_app_core",
- "radroots_app_ffi",
- "radroots_app_wasm",
- "radroots_app_bindgen",
- "radroots-studio-domain",
- "radroots-studio-application",
- "radroots-studio-nostr",
- "radroots-studio-storage",
- "radroots-studio-ffi",
- "radroots-studio-uniffi-bindgen",
- "radroots_sdk_xtask",
-]
-
-[[package]]
-name = "radroots_core"
-path = "crates/core"
-state = "active"
-tier = "foundation"
-visibility = "public_release"
-publish = true
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["any"]
-groups = ["coverage_required", "portable", "public_native"]
-owners = ["core"]
-permitted_dependency_tiers = ["foundation"]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/core"
-source_tree_sha256 = "2b1c006eb548b1e3671d4bae1cf0202900909c40affe224e4f5dd098de3fe7c7"
-compatibility = ["rust_api", "features", "package"]
-replaces = []
-
-[[package]]
-name = "radroots_identity"
-path = "crates/identity"
-state = "active"
-tier = "foundation"
-visibility = "public_release"
-publish = true
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["any"]
-groups = ["coverage_required", "portable", "public_native"]
-owners = ["identity"]
-permitted_dependency_tiers = ["foundation"]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/identity"
-source_tree_sha256 = "6da935d01da21254f13477cfa45fc44e3bc48dc3e3a8786f7dd8d528fc51b5b9"
-compatibility = ["rust_api", "features", "package"]
-replaces = []
-
-[[package]]
-name = "radroots_blossom"
-path = "crates/blossom"
-state = "active"
-tier = "foundation"
-visibility = "public_release"
-publish = true
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["any"]
-groups = ["coverage_required", "portable", "public_native"]
-owners = ["protocol"]
-permitted_dependency_tiers = ["foundation"]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/blossom"
-source_tree_sha256 = "09cd49bdca7432ba0bab915950a6c7fe882ee75f6e70c8916c1f04030f27745d"
-compatibility = ["rust_api", "features", "package"]
-replaces = []
-
-[[package]]
-name = "radroots_protocol"
-path = "crates/protocol"
-state = "active"
-tier = "foundation"
-visibility = "public_release"
-publish = true
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["any"]
-groups = ["coverage_required", "portable", "public_native"]
-owners = ["protocol"]
-permitted_dependency_tiers = ["foundation"]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/protocol"
-source_tree_sha256 = "05f7c372daec2da2c2e249bc10a645fbe11bb36ca4f45b7ebb52094fb39dc593"
-compatibility = ["rust_api", "wire", "features", "package"]
-replaces = []
-
-[[package]]
-name = "radroots_event"
-path = "crates/event"
-state = "active"
-tier = "domain"
-visibility = "public_release"
-publish = true
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["any"]
-groups = ["coverage_required", "portable", "public_native"]
-owners = ["event"]
-permitted_dependency_tiers = ["foundation", "domain"]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/event"
-source_tree_sha256 = "bfe3e6ece4d728ba9e5b6476376c172d621a310788c420e33f81a4cdfc3067ef"
-compatibility = ["rust_api", "wire", "features", "package"]
-replaces = []
-
-[[package]]
-name = "radroots_event_codec"
-path = "crates/event_codec"
-state = "active"
-tier = "domain"
-visibility = "public_release"
-publish = true
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["any"]
-groups = ["coverage_required", "portable", "public_native"]
-owners = ["event"]
-permitted_dependency_tiers = ["foundation", "domain"]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/event_codec"
-source_tree_sha256 = "6b51309e57b163d7577ec4b7f0fd8e28b2c98aa44cb7fe51a38346300e6078f7"
-compatibility = ["rust_api", "wire", "generated", "features", "package"]
-replaces = []
-
-[[package]]
-name = "radroots_trade"
-path = "crates/trade"
-state = "active"
-tier = "domain"
-visibility = "public_release"
-publish = true
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["any"]
-groups = ["coverage_required", "portable", "public_native"]
-owners = ["trade"]
-permitted_dependency_tiers = ["foundation", "domain"]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/trade"
-source_tree_sha256 = "10c873d05c12255ebbdba57772688bb033a183f569959184f1fe9dac248b9bda"
-compatibility = ["rust_api", "behavior", "features", "package"]
-replaces = []
-
-[[package]]
-name = "radroots_signing"
-path = "crates/signing"
-state = "active"
-tier = "spi"
-visibility = "public_release"
-publish = true
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["any"]
-groups = ["coverage_required", "portable", "public_native"]
-owners = ["signing"]
-permitted_dependency_tiers = ["foundation", "domain", "spi"]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/signing"
-source_tree_sha256 = "55d4e9f719358a3bb5287688947a34773646aabc7b902a6da790b5c4c0d72026"
-compatibility = ["rust_api", "security", "features", "package"]
-replaces = []
-
-[[package]]
-name = "radroots_transport"
-path = "crates/transport"
-state = "active"
-tier = "spi"
-visibility = "public_release"
-publish = true
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["any"]
-groups = ["coverage_required", "portable", "public_native"]
-owners = ["transport"]
-permitted_dependency_tiers = ["foundation", "domain", "spi"]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/transport"
-source_tree_sha256 = "4f39941e5a3c7ec82e179198900541dfcd66ef6bfcffcc7de7e89b604461598a"
-compatibility = ["rust_api", "wire", "features", "package"]
-replaces = []
-
-[[package]]
-name = "radroots_secrets"
-path = "crates/secrets"
-state = "active"
-tier = "spi"
-visibility = "public_release"
-publish = true
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["native"]
-groups = ["coverage_required", "portable", "public_native"]
-owners = ["security"]
-permitted_dependency_tiers = ["foundation", "domain", "spi"]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/secrets"
-source_tree_sha256 = "f20923b87e73a65db157f75342fa6814a0b90707e2210f387f9aaddbd2705cf2"
-compatibility = ["rust_api", "security", "features", "package"]
-replaces = []
-
-[[package]]
-name = "radroots_storage"
-path = "crates/storage"
-state = "active"
-tier = "spi"
-visibility = "public_release"
-publish = true
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["native"]
-groups = ["coverage_required", "portable", "public_native"]
-owners = ["storage"]
-permitted_dependency_tiers = ["foundation", "domain", "spi"]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/storage"
-source_tree_sha256 = "383e648daaded9c02d8bf64164697fbd23f0c9a82887b0210a487c1803ccdf91"
-compatibility = ["rust_api", "data", "features", "package"]
-replaces = []
-
-[[package]]
-name = "radroots_nostr"
-path = "crates/nostr"
-state = "active"
-tier = "adapter"
-visibility = "public_release"
-publish = true
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["any"]
-groups = ["coverage_required", "portable", "public_native"]
-owners = ["nostr"]
-permitted_dependency_tiers = ["foundation", "domain", "spi", "adapter"]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/nostr"
-source_tree_sha256 = "5d526e5aa8c98b71218a341346a70250d278866b6818204b8a78b9772508bb0e"
-compatibility = ["rust_api", "wire", "features", "package"]
-replaces = []
-
-[[package]]
-name = "radroots_nostr_connect"
-path = "crates/nostr_connect"
-state = "active"
-tier = "adapter"
-visibility = "public_release"
-publish = true
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["any"]
-groups = ["coverage_required", "portable", "public_native"]
-owners = ["nostr"]
-permitted_dependency_tiers = ["foundation", "domain", "spi", "adapter"]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/nostr_connect"
-source_tree_sha256 = "10cb6c86a37d11fdf09aa8f47486e504b7ad94d2e0ba92f241442ec10a4578b5"
-compatibility = ["rust_api", "wire", "security", "features", "package"]
-replaces = []
-
-[[package]]
-name = "radroots_storage_sqlite"
-path = "crates/storage_sqlite"
-state = "active"
-tier = "adapter"
-visibility = "public_release"
-publish = true
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["native"]
-groups = ["coverage_required", "portable", "public_native"]
-owners = ["storage"]
-permitted_dependency_tiers = ["foundation", "domain", "spi", "adapter"]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/storage_sqlite"
-source_tree_sha256 = "1ba1c8adc6741e931220eae5fdcef7a05894e3d8276a869448ab6583b13b93e9"
-compatibility = ["rust_api", "data", "features", "package"]
-replaces = []
-
-[[package]]
-name = "radroots_transport_nostr"
-path = "crates/transport_nostr"
-state = "active"
-tier = "adapter"
-visibility = "public_release"
-publish = true
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["native"]
-groups = ["coverage_required", "portable", "public_native"]
-owners = ["transport"]
-permitted_dependency_tiers = ["foundation", "domain", "spi", "adapter"]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/transport_nostr"
-source_tree_sha256 = "1f8b471ee468200dc61e8452184d213906d3ca4b13e64b311aca7ad40fdacac6"
-compatibility = ["rust_api", "network", "features", "package"]
-replaces = []
-
-[[package]]
-name = "radroots_geonames"
-path = "crates/geonames"
-state = "active"
-tier = "adapter"
-visibility = "public_release"
-publish = true
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["native"]
-groups = ["coverage_required", "portable", "public_native"]
-owners = ["geonames"]
-permitted_dependency_tiers = ["foundation", "domain", "spi", "adapter"]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/geonames"
-source_tree_sha256 = "1ae21934d6b6dadf4baebad3f4658c6cfe04d4abb4b36f869644c87cebacdc3a"
-compatibility = ["rust_api", "data", "features", "package"]
-replaces = []
-
-[[package]]
-name = "radroots_sync"
-path = "crates/sync"
-state = "active"
-tier = "orchestration"
-visibility = "public_release"
-publish = true
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["native"]
-groups = ["coverage_required", "portable", "public_native"]
-owners = ["sync"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
-]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/sync"
-source_tree_sha256 = "23a16aaddc8366fd7ad6461e97103de03593d23a16687a7a2b6f86fc3a683c53"
-compatibility = ["rust_api", "behavior", "features", "package"]
-replaces = []
-
-[[package]]
-name = "radroots_nostrdb"
-path = "crates/nostrdb"
-state = "active"
-tier = "preview"
-visibility = "private_adapter"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["native"]
-groups = ["coverage_required", "preview"]
-owners = ["preview"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "preview",
-]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/nostrdb"
-source_tree_sha256 = "f1824eb3fe9f02046aabe40319d2c346de499c74a90aca11fe648e76bc8e744b"
-compatibility = ["package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_transport_reticulum"
-path = "crates/transport_reticulum"
-state = "active"
-tier = "preview"
-visibility = "private_adapter"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["native"]
-groups = ["coverage_required", "preview"]
-owners = ["preview"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "preview",
-]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/transport_reticulum"
-source_tree_sha256 = "590a69dabb65e891900884e5b67636d0a2e83f40a8d92fc4fdf3fb68bf9ac493"
-compatibility = ["package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_simplex_app_store"
-path = "crates/simplex_app_store"
-state = "active"
-tier = "preview"
-visibility = "private_adapter"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["native"]
-groups = ["preview"]
-owners = ["preview"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "preview",
-]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/simplex_app_store"
-source_tree_sha256 = "43d51e5601d16666faa32607da732e8c48d9c75dee8c308c782b90da5fa8fdf5"
-compatibility = ["package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_simplex_agent_proto"
-path = "crates/simplex_agent_proto"
-state = "active"
-tier = "preview"
-visibility = "private_runtime"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["any"]
-groups = ["preview"]
-owners = ["preview"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "preview",
-]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/simplex_agent_proto"
-source_tree_sha256 = "9ba0704f166f7cd3aa08f4cb8c3548f0da4d641266f5c6ac3691db0ebb2576f2"
-compatibility = ["package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_simplex_chat_proto"
-path = "crates/simplex_chat_proto"
-state = "active"
-tier = "preview"
-visibility = "private_runtime"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["any"]
-groups = ["preview"]
-owners = ["preview"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "preview",
-]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/simplex_chat_proto"
-source_tree_sha256 = "1ba255a084e8962c472c5d0fb89592b8e775cc1017827ff13d18315e6bebf0d9"
-compatibility = ["package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_simplex_smp_crypto"
-path = "crates/simplex_smp_crypto"
-state = "active"
-tier = "preview"
-visibility = "private_runtime"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["any"]
-groups = ["preview"]
-owners = ["preview"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "preview",
-]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/simplex_smp_crypto"
-source_tree_sha256 = "618926bd97e2b8e68732aff55b56817ee942ae66fbd4670a8a87ce9c28f37a93"
-compatibility = ["package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_simplex_smp_proto"
-path = "crates/simplex_smp_proto"
-state = "active"
-tier = "preview"
-visibility = "private_runtime"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["any"]
-groups = ["preview"]
-owners = ["preview"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "preview",
-]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/simplex_smp_proto"
-source_tree_sha256 = "4d3580ab580ec4008af0f1b6c45cfaf418b8f8f112d80e2c6338c83aba44c730"
-compatibility = ["package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_simplex_smp_transport"
-path = "crates/simplex_smp_transport"
-state = "active"
-tier = "preview"
-visibility = "private_runtime"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["native"]
-groups = ["preview"]
-owners = ["preview"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "preview",
-]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/simplex_smp_transport"
-source_tree_sha256 = "50d902c20901de5647e8a3dbe359b9d79eb336d8952c363b914f51ee39240f24"
-compatibility = ["package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_replica_schema"
-path = "crates/replica_schema"
-state = "active"
-tier = "preview"
-visibility = "private_runtime"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["any"]
-groups = ["coverage_required", "preview"]
-owners = ["preview"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "preview",
-]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/replica_schema"
-source_tree_sha256 = "65c91da5221a98f33d134ff19d760dc7185c33985574c127e7e3ffe9b6636538"
-compatibility = ["package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_replica_store"
-path = "crates/replica_store"
-state = "active"
-tier = "preview"
-visibility = "private_adapter"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["native"]
-groups = ["coverage_required", "preview"]
-owners = ["preview"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "preview",
-]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/replica_store"
-source_tree_sha256 = "6b4761d89269e5468b924c30d2b1f9da4ae42adcb5c6ae85bd65c2c47a565e08"
-compatibility = ["package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_replica_sync"
-path = "crates/replica_sync"
-state = "active"
-tier = "preview"
-visibility = "private_runtime"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["native"]
-groups = ["coverage_required", "preview"]
-owners = ["preview"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "preview",
- "fixture",
-]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/replica_sync"
-source_tree_sha256 = "8c957b0bc99c690c40d74cf747ece37b9f5b2d6a4849171fc2d0cce675850c90"
-compatibility = ["package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_mesh"
-path = "crates/mesh"
-state = "active"
-tier = "preview"
-visibility = "private_runtime"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["native"]
-groups = ["coverage_required", "preview"]
-owners = ["preview"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "preview",
-]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/mesh"
-source_tree_sha256 = "2aa1e901b21ecaa135e7af10ef96270aeae0a19eff5e5006ffdcd1aca62e7979"
-compatibility = ["package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_mesh_agent_client"
-path = "crates/mesh_agent_client"
-state = "active"
-tier = "preview"
-visibility = "private_runtime"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["native"]
-groups = ["coverage_required", "preview"]
-owners = ["preview"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "preview",
-]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/mesh_agent_client"
-source_tree_sha256 = "37a7a74761d6922264787d9dfc22c01453c423e0dfcece854a37ee9df725232a"
-compatibility = ["package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_mesh_agent_proto"
-path = "crates/mesh_agent_proto"
-state = "active"
-tier = "preview"
-visibility = "private_runtime"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["any"]
-groups = ["coverage_required", "preview"]
-owners = ["preview"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "preview",
-]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/mesh_agent_proto"
-source_tree_sha256 = "85767b6a613bd1e167484bb60221107c43648472e4cebfdcbeda7e4bc38f9c57"
-compatibility = ["package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_runtime_paths"
-path = "crates/runtime_paths"
-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",
-]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/runtime_paths"
-source_tree_sha256 = "59ed1e101555715827c33e7781ff4993149b2177011ab1401f5cd832a1666120"
-compatibility = ["package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_runtime_distribution"
-path = "crates/runtime_distribution"
-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",
-]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/runtime_distribution"
-source_tree_sha256 = "412a69a157253216fc08daa967e3de4f980b35cb6ef098baa4a77d74175ba193"
-compatibility = ["package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_runtime_manager"
-path = "crates/runtime_manager"
-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",
-]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/runtime_manager"
-source_tree_sha256 = "d6df1cfee50affc1e8bb3fcfbf283873c0442031d90db08da31bf3d668547809"
-compatibility = ["package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_sql_core"
-path = "crates/sql_core"
-state = "active"
-tier = "adapter"
-visibility = "private_adapter"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["native", "wasm32"]
-groups = ["coverage_required", "preview", "wasm"]
-owners = ["storage"]
-permitted_dependency_tiers = ["foundation", "domain", "spi", "adapter"]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/sql_core"
-source_tree_sha256 = "18e107bdeeee8761f731a1c389e475e5caebbd2a958c0646d0c6aa5f8c95b8dc"
-compatibility = ["package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_test_fixtures"
-path = "crates/test_fixtures"
-state = "active"
-tier = "fixture"
-visibility = "private_fixture"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["any"]
-groups = ["coverage_required", "preview"]
-owners = ["testing"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "preview",
- "runtime",
- "fixture",
-]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "crates/test_fixtures"
-source_tree_sha256 = "763e4af22fbf5e7f11709c1b00f55569dbe3ebf8b679bdb937d462d576f02524"
-compatibility = ["fixtures"]
-replaces = []
-
-[[package]]
-name = "xtask"
-path = "tools/xtask"
-state = "active"
-tier = "tool"
-visibility = "private_tool"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["native"]
-groups = ["coverage_required", "tools"]
-owners = ["architecture"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "preview",
- "runtime",
- "fixture",
- "codegen",
- "tool",
-]
-source_repository = "https://github.com/radrootslabs/lib"
-source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
-source_path = "tools/xtask"
-source_tree_sha256 = "2846b559151c835b1a561153166074625a8430130b2f1adcaf1a358eb0da20ff"
-compatibility = ["command_surface"]
-replaces = []
-
-[[package]]
-name = "radroots_sdk"
-path = "crates/sdk"
-state = "active"
-tier = "sdk"
-visibility = "public_release"
-publish = true
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["any"]
-groups = ["coverage_required", "portable", "public_native", "sdk"]
-owners = ["sdk"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "sdk",
-]
-source_repository = "https://github.com/radrootslabs/sdk"
-source_revision = "170ecf2b620107fadca85fcb11fbf3798b4ca1ef"
-source_path = "crates/sdk"
-source_tree_sha256 = "6cc78f544bd0a0d74783cbba118ea4815ce4b4bd094433193844621352411efb"
-compatibility = ["rust_api", "features", "package", "product"]
-replaces = []
-
-[[package]]
-name = "radroots"
-path = "crates/radroots"
-state = "active"
-tier = "facade"
-visibility = "public_release"
-publish = true
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["any"]
-groups = ["coverage_required", "portable", "public_native", "sdk"]
-owners = ["sdk"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "sdk",
- "facade",
-]
-source_repository = "https://github.com/radrootslabs/sdk"
-source_revision = "170ecf2b620107fadca85fcb11fbf3798b4ca1ef"
-source_path = "crates/radroots"
-source_tree_sha256 = "7c9b4392eb7e8d8e799f4a62c9886f349161bad440659beb0d1a739911ab1425"
-compatibility = ["rust_api", "features", "package", "product"]
-replaces = []
-
-[[package]]
-name = "radroots_core_bindings"
-path = "crates/core_bindings"
-state = "active"
-tier = "codegen"
-visibility = "private_codegen"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["native"]
-groups = ["coverage_required", "sdk", "boundaries"]
-owners = ["sdk"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "sdk",
- "facade",
- "codegen",
-]
-source_repository = "https://github.com/radrootslabs/sdk"
-source_revision = "170ecf2b620107fadca85fcb11fbf3798b4ca1ef"
-source_path = "crates/core_bindings"
-source_tree_sha256 = "f1a72bde7364179687bbdf6c4dacddacd504c52a884af941ce3557bae27ee981"
-compatibility = ["generated", "package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_event_bindings"
-path = "crates/event_bindings"
-state = "active"
-tier = "codegen"
-visibility = "private_codegen"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["native"]
-groups = ["coverage_required", "sdk", "boundaries"]
-owners = ["sdk"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "sdk",
- "facade",
- "codegen",
-]
-source_repository = "https://github.com/radrootslabs/sdk"
-source_revision = "170ecf2b620107fadca85fcb11fbf3798b4ca1ef"
-source_path = "crates/event_bindings"
-source_tree_sha256 = "32f23a76a5c135de841cae623a28de3424dace3b6ba46af8c2cccc35b7c62f09"
-compatibility = ["generated", "package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_identity_bindings"
-path = "crates/identity_bindings"
-state = "active"
-tier = "codegen"
-visibility = "private_codegen"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["native"]
-groups = ["coverage_required", "sdk", "boundaries"]
-owners = ["sdk"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "sdk",
- "facade",
- "codegen",
-]
-source_repository = "https://github.com/radrootslabs/sdk"
-source_revision = "170ecf2b620107fadca85fcb11fbf3798b4ca1ef"
-source_path = "crates/identity_bindings"
-source_tree_sha256 = "a0cf1539805704195cf82f9ffffa06e443a9c1cabd90a47bfcf6110f20549acd"
-compatibility = ["generated", "package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_trade_bindings"
-path = "crates/trade_bindings"
-state = "active"
-tier = "codegen"
-visibility = "private_codegen"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["native"]
-groups = ["coverage_required", "sdk", "boundaries"]
-owners = ["sdk"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "sdk",
- "facade",
- "codegen",
-]
-source_repository = "https://github.com/radrootslabs/sdk"
-source_revision = "170ecf2b620107fadca85fcb11fbf3798b4ca1ef"
-source_path = "crates/trade_bindings"
-source_tree_sha256 = "28a60e08d65a891961189d5e614bbc008fe36574b3823333375339c589236342"
-compatibility = ["generated", "package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_replica_schema_bindings"
-path = "crates/replica_schema_bindings"
-state = "active"
-tier = "codegen"
-visibility = "private_codegen"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["native"]
-groups = ["coverage_required", "sdk", "boundaries"]
-owners = ["sdk"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "preview",
- "sdk",
- "facade",
- "codegen",
-]
-source_repository = "https://github.com/radrootslabs/sdk"
-source_revision = "170ecf2b620107fadca85fcb11fbf3798b4ca1ef"
-source_path = "crates/replica_schema_bindings"
-source_tree_sha256 = "41aeb6520962da64f13e09449d03b6df901b788965732eff439b282fe8f8abb1"
-compatibility = ["generated", "package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_event_codec_wasm"
-path = "crates/event_codec_wasm"
-state = "active"
-tier = "boundary"
-visibility = "private_boundary"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["wasm32"]
-groups = ["coverage_required", "sdk", "wasm", "boundaries"]
-owners = ["sdk"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "sdk",
- "facade",
- "boundary",
-]
-source_repository = "https://github.com/radrootslabs/sdk"
-source_revision = "170ecf2b620107fadca85fcb11fbf3798b4ca1ef"
-source_path = "crates/event_codec_wasm"
-source_tree_sha256 = "698abf3b77aa87b6460432342908b475c55bb55d285dc9aef24e27239e4cfa3c"
-compatibility = ["wasm", "generated", "package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_replica_store_wasm"
-path = "crates/replica_store_wasm"
-state = "active"
-tier = "boundary"
-visibility = "private_boundary"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["wasm32"]
-groups = ["coverage_required", "sdk", "wasm", "boundaries"]
-owners = ["sdk"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "preview",
- "sdk",
- "facade",
- "boundary",
-]
-source_repository = "https://github.com/radrootslabs/sdk"
-source_revision = "170ecf2b620107fadca85fcb11fbf3798b4ca1ef"
-source_path = "crates/replica_store_wasm"
-source_tree_sha256 = "59cb050d0493047b57aebc4e1bb3adfd5af2fcd464de1f76ffabc1dfabe2baad"
-compatibility = ["wasm", "generated", "package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_replica_sync_wasm"
-path = "crates/replica_sync_wasm"
-state = "active"
-tier = "boundary"
-visibility = "private_boundary"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["wasm32"]
-groups = ["coverage_required", "sdk", "wasm", "boundaries"]
-owners = ["sdk"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "preview",
- "sdk",
- "facade",
- "boundary",
-]
-source_repository = "https://github.com/radrootslabs/sdk"
-source_revision = "170ecf2b620107fadca85fcb11fbf3798b4ca1ef"
-source_path = "crates/replica_sync_wasm"
-source_tree_sha256 = "95f2a291066bab18c744f50a910feecc913dd50a4a3b6c9a464247695d8faffc"
-compatibility = ["wasm", "generated", "package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_sdk_ffi"
-path = "crates/sdk_ffi"
-state = "active"
-tier = "boundary"
-visibility = "private_boundary"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["native"]
-groups = ["coverage_required", "sdk", "boundaries"]
-owners = ["sdk"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "sdk",
- "facade",
- "boundary",
-]
-source_repository = "https://github.com/radrootslabs/sdk"
-source_revision = "170ecf2b620107fadca85fcb11fbf3798b4ca1ef"
-source_path = "crates/ffi"
-source_tree_sha256 = "f07e2087f0506b146848476048b32b01584905e2928fe56a36d4f90663590e33"
-compatibility = ["ffi", "generated", "package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_sdk_sql_wasm_runtime"
-path = "crates/sdk_sql_wasm_runtime"
-state = "active"
-tier = "adapter"
-visibility = "private_adapter"
-publish = false
-version = "0.1.0-alpha"
-license = "MIT OR Apache-2.0"
-platforms = ["wasm32"]
-groups = ["coverage_required", "sdk", "wasm"]
-owners = ["sdk"]
-permitted_dependency_tiers = ["foundation", "domain", "spi", "adapter"]
-source_repository = "https://github.com/radrootslabs/sdk"
-source_revision = "170ecf2b620107fadca85fcb11fbf3798b4ca1ef"
-source_path = "crates/sql_wasm_runtime"
-source_tree_sha256 = "6ca1dca6f248c50b6bcd4c684b4ad31acd17b8bfc36a8b0072872f6db927c303"
-compatibility = ["wasm", "data", "package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_mobile_core"
-path = "crates/mobile_core"
-state = "active"
-tier = "runtime"
-visibility = "private_runtime"
-publish = false
-version = "0.1.0-alpha"
-license = "GPL-3.0-or-later"
-platforms = ["native", "wasm32"]
-groups = ["coverage_required", "mobile"]
-owners = ["mobile"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "sdk",
- "facade",
- "runtime",
-]
-source_repository = "https://github.com/radrootslabs/app_rt"
-source_revision = "7ab1a8624d50890d6d18545ffb47d8083afa8c67"
-source_path = "crates/core"
-source_tree_sha256 = "8ae546ee60a97bfc145c12ea94dcd6d528bf5f49e974159442738c29eb3d6ee1"
-compatibility = ["product", "lifecycle", "package_private"]
-replaces = ["radroots_app_core"]
-
-[[package]]
-name = "radroots_mobile_ffi"
-path = "crates/mobile_ffi"
-state = "active"
-tier = "boundary"
-visibility = "private_boundary"
-publish = false
-version = "0.1.0-alpha"
-license = "GPL-3.0-or-later"
-platforms = ["apple", "android"]
-groups = ["coverage_required", "mobile", "boundaries"]
-owners = ["mobile"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "sdk",
- "facade",
- "runtime",
- "boundary",
-]
-source_repository = "https://github.com/radrootslabs/app_rt"
-source_revision = "7ab1a8624d50890d6d18545ffb47d8083afa8c67"
-source_path = "crates/ffi"
-source_tree_sha256 = "9a38699ad6d39b9f8764fed6a67bd55908ff54cb2e3cae9a3890ce1a46789b2b"
-compatibility = ["ffi", "swift", "kotlin", "lifecycle", "package_private"]
-replaces = ["radroots_app_ffi"]
-
-[[package]]
-name = "radroots_mobile_wasm"
-path = "crates/mobile_wasm"
-state = "active"
-tier = "boundary"
-visibility = "private_boundary"
-publish = false
-version = "0.1.0-alpha"
-license = "GPL-3.0-or-later"
-platforms = ["wasm32"]
-groups = ["coverage_required", "mobile", "wasm", "boundaries"]
-owners = ["mobile"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "sdk",
- "facade",
- "runtime",
- "boundary",
-]
-source_repository = "https://github.com/radrootslabs/app_rt"
-source_revision = "7ab1a8624d50890d6d18545ffb47d8083afa8c67"
-source_path = "crates/wasm"
-source_tree_sha256 = "8c65c867eafc0643ca9fd86150766af4f4ab2f0f8321d66306418261a8f43124"
-compatibility = ["wasm", "lifecycle", "package_private"]
-replaces = ["radroots_app_wasm"]
-
-[[package]]
-name = "radroots_mobile_bindgen"
-path = "crates/mobile_bindgen"
-state = "active"
-tier = "codegen"
-visibility = "private_codegen"
-publish = false
-version = "0.1.0-alpha"
-license = "GPL-3.0-or-later"
-platforms = ["native"]
-groups = ["coverage_required", "mobile", "boundaries"]
-owners = ["mobile"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "sdk",
- "facade",
- "runtime",
- "boundary",
- "codegen",
-]
-source_repository = "https://github.com/radrootslabs/app_rt"
-source_revision = "7ab1a8624d50890d6d18545ffb47d8083afa8c67"
-source_path = "crates/bindgen"
-source_tree_sha256 = "f0a9d7ec9794257bc56063117208e6e83a34efe1b852e8af6d6a56a1693d27fa"
-compatibility = ["generated", "swift", "kotlin", "package_private"]
-replaces = ["radroots_app_bindgen"]
-
-[[package]]
-name = "radroots_studio_domain"
-path = "crates/studio_domain"
-state = "active"
-tier = "application_domain"
-visibility = "private_runtime"
-publish = false
-version = "0.1.0-alpha"
-license = "GPL-3.0-only"
-platforms = ["native"]
-groups = ["coverage_required", "studio"]
-owners = ["studio"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "sdk",
- "facade",
- "application_domain",
-]
-source_repository = "https://github.com/radrootslabs/studio_app"
-source_revision = "2b5fe5d8321fd0e248a9d304651b1ba54ee6a180"
-source_path = "core/crates/domain"
-source_tree_sha256 = "25f8abe2f8f4e9dfeb6450116be67eb3faad53f2d3879a4c142796238f74b0a9"
-compatibility = ["product", "data", "package_private"]
-replaces = ["radroots-studio-domain"]
-
-[[package]]
-name = "radroots_studio_preferences"
-path = "crates/studio_preferences"
-state = "active"
-tier = "application_domain"
-visibility = "private_runtime"
-publish = false
-version = "0.1.0-alpha"
-license = "MPL-2.0"
-platforms = ["native"]
-groups = ["coverage_required", "studio"]
-owners = ["studio"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "sdk",
- "facade",
- "application_domain",
-]
-source_repository = "https://github.com/radrootslabs/_radroots"
-source_revision = "6074a4745be361f21bb47d4778c74a14b2d57954"
-source_path = "studio_app/studio_app_core/crates/core"
-source_tree_sha256 = "0237265710a676ce1db0fb3091e1e5d9a5831339e00076ea2a33b96d6343834d"
-compatibility = ["product", "preferences", "package_private"]
-replaces = ["studio_app_core"]
-
-[[package]]
-name = "radroots_studio_application"
-path = "crates/studio_application"
-state = "active"
-tier = "application"
-visibility = "private_runtime"
-publish = false
-version = "0.1.0-alpha"
-license = "GPL-3.0-only"
-platforms = ["native"]
-groups = ["coverage_required", "studio"]
-owners = ["studio"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "sdk",
- "facade",
- "application_domain",
- "application",
-]
-source_repository = "https://github.com/radrootslabs/studio_app"
-source_revision = "2b5fe5d8321fd0e248a9d304651b1ba54ee6a180"
-source_path = "core/crates/application"
-source_tree_sha256 = "8b0b5d4d74dde0af3c5fb3dac979b0cf57cccf073d597f7bd35b1e73a711fe0b"
-compatibility = ["product", "behavior", "package_private"]
-replaces = ["radroots-studio-application"]
-
-[[package]]
-name = "radroots_studio_nostr"
-path = "crates/studio_nostr"
-state = "active"
-tier = "application_adapter"
-visibility = "private_adapter"
-publish = false
-version = "0.1.0-alpha"
-license = "GPL-3.0-only"
-platforms = ["native"]
-groups = ["coverage_required", "studio"]
-owners = ["studio"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "sdk",
- "facade",
- "application_domain",
- "application",
- "application_adapter",
-]
-source_repository = "https://github.com/radrootslabs/studio_app"
-source_revision = "2b5fe5d8321fd0e248a9d304651b1ba54ee6a180"
-source_path = "core/crates/nostr"
-source_tree_sha256 = "2ce5ce0227ab190102a94ffdf80d95b37ed35f5ef62286c4e3e19cd42a777115"
-compatibility = ["network", "security", "package_private"]
-replaces = ["radroots-studio-nostr"]
-
-[[package]]
-name = "radroots_studio_storage"
-path = "crates/studio_storage"
-state = "active"
-tier = "application_adapter"
-visibility = "private_adapter"
-publish = false
-version = "0.1.0-alpha"
-license = "GPL-3.0-only"
-platforms = ["native"]
-groups = ["coverage_required", "studio"]
-owners = ["studio"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "sdk",
- "facade",
- "application_domain",
- "application",
- "application_adapter",
-]
-source_repository = "https://github.com/radrootslabs/studio_app"
-source_revision = "2b5fe5d8321fd0e248a9d304651b1ba54ee6a180"
-source_path = "core/crates/storage"
-source_tree_sha256 = "f3addecbd7f6dbccda4a438597b4e433443a34b48a6c4ef9efa90e49e8f05c4b"
-compatibility = ["data", "keyring", "package_private"]
-replaces = ["radroots-studio-storage"]
-
-[[package]]
-name = "radroots_studio_runtime"
-path = "crates/studio_runtime"
-state = "active"
-tier = "runtime_composition"
-visibility = "private_runtime"
-publish = false
-version = "0.1.0-alpha"
-license = "GPL-3.0-only"
-platforms = ["native"]
-groups = ["coverage_required", "studio"]
-owners = ["studio"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "sdk",
- "facade",
- "application_domain",
- "application",
- "application_adapter",
- "runtime_composition",
-]
-source_repository = "https://github.com/radrootslabs/studio_app"
-source_revision = "2b5fe5d8321fd0e248a9d304651b1ba54ee6a180"
-source_path = "core/crates/storage"
-source_tree_sha256 = "f3addecbd7f6dbccda4a438597b4e433443a34b48a6c4ef9efa90e49e8f05c4b"
-compatibility = ["product", "lifecycle", "package_private"]
-replaces = []
-
-[[package]]
-name = "radroots_studio_ffi"
-path = "crates/studio_ffi"
-state = "active"
-tier = "boundary"
-visibility = "private_boundary"
-publish = false
-version = "0.1.0-alpha"
-license = "GPL-3.0-only"
-platforms = ["linux", "macos", "windows"]
-groups = ["coverage_required", "studio", "boundaries"]
-owners = ["studio"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "sdk",
- "facade",
- "application_domain",
- "application",
- "application_adapter",
- "runtime_composition",
- "boundary",
-]
-source_repository = "https://github.com/radrootslabs/studio_app"
-source_revision = "2b5fe5d8321fd0e248a9d304651b1ba54ee6a180"
-source_path = "core/crates/ffi"
-source_tree_sha256 = "0bb1d02eb963a606a288d9c35fb418de7bfd914dc5e2c4a38112af64c643151c"
-compatibility = ["ffi", "kotlin", "product", "lifecycle", "package_private"]
-replaces = ["radroots-studio-ffi"]
-
-[[package]]
-name = "radroots_studio_uniffi_bindgen"
-path = "crates/studio_uniffi_bindgen"
-state = "active"
-tier = "codegen"
-visibility = "private_codegen"
-publish = false
-version = "0.1.0-alpha"
-license = "GPL-3.0-only"
-platforms = ["native"]
-groups = ["coverage_required", "studio", "boundaries"]
-owners = ["studio"]
-permitted_dependency_tiers = [
- "foundation",
- "domain",
- "spi",
- "adapter",
- "orchestration",
- "sdk",
- "facade",
- "application_domain",
- "application",
- "application_adapter",
- "runtime_composition",
- "boundary",
- "codegen",
-]
-source_repository = "https://github.com/radrootslabs/studio_app"
-source_revision = "2b5fe5d8321fd0e248a9d304651b1ba54ee6a180"
-source_path = "core/tools/uniffi-bindgen"
-source_tree_sha256 = "0eedd47c17fc7b2b84d953f2c4613aecf96575df466eb106450c7d7eee25ca9b"
-compatibility = ["generated", "kotlin", "package_private"]
-replaces = ["radroots-studio-uniffi-bindgen"]
diff --git a/contracts/crates/catalog.v2.toml b/contracts/crates/catalog.v2.toml
@@ -0,0 +1,1686 @@
+schema_version = 2
+schema = "radroots.workspace.catalog.v2"
+architecture = "radroots.crates.release.v2"
+consolidation = "radroots.rust.consolidation.v1"
+version = "0.1.0-alpha"
+rust_version = "1.97.1"
+edition = "2024"
+resolver = "3"
+public_package_count = 19
+package_count = 61
+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"
+source_provenance_policy = "imported_revision_tree_or_native_introduction_tree"
+provenance_correction_contract = "approved_correction_record_required"
+retired_packages = [
+ "radroots_app_core",
+ "radroots_app_ffi",
+ "radroots_app_wasm",
+ "radroots_app_bindgen",
+ "radroots-studio-domain",
+ "radroots-studio-application",
+ "radroots-studio-nostr",
+ "radroots-studio-storage",
+ "radroots-studio-ffi",
+ "radroots-studio-uniffi-bindgen",
+ "radroots_sdk_xtask",
+]
+
+[[package]]
+name = "radroots_core"
+path = "crates/core"
+state = "active"
+tier = "foundation"
+visibility = "public_release"
+publish = true
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["any"]
+groups = ["coverage_required", "portable", "public_native"]
+owners = ["core"]
+permitted_dependency_tiers = ["foundation"]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/core"
+source_tree_sha256 = "2b1c006eb548b1e3671d4bae1cf0202900909c40affe224e4f5dd098de3fe7c7"
+compatibility = ["rust_api", "features", "package"]
+replaces = []
+
+[[package]]
+name = "radroots_identity"
+path = "crates/identity"
+state = "active"
+tier = "foundation"
+visibility = "public_release"
+publish = true
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["any"]
+groups = ["coverage_required", "portable", "public_native"]
+owners = ["identity"]
+permitted_dependency_tiers = ["foundation"]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/identity"
+source_tree_sha256 = "6da935d01da21254f13477cfa45fc44e3bc48dc3e3a8786f7dd8d528fc51b5b9"
+compatibility = ["rust_api", "features", "package"]
+replaces = []
+
+[[package]]
+name = "radroots_blossom"
+path = "crates/blossom"
+state = "active"
+tier = "foundation"
+visibility = "public_release"
+publish = true
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["any"]
+groups = ["coverage_required", "portable", "public_native"]
+owners = ["protocol"]
+permitted_dependency_tiers = ["foundation"]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/blossom"
+source_tree_sha256 = "09cd49bdca7432ba0bab915950a6c7fe882ee75f6e70c8916c1f04030f27745d"
+compatibility = ["rust_api", "features", "package"]
+replaces = []
+
+[[package]]
+name = "radroots_protocol"
+path = "crates/protocol"
+state = "active"
+tier = "foundation"
+visibility = "public_release"
+publish = true
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["any"]
+groups = ["coverage_required", "portable", "public_native"]
+owners = ["protocol"]
+permitted_dependency_tiers = ["foundation"]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/protocol"
+source_tree_sha256 = "05f7c372daec2da2c2e249bc10a645fbe11bb36ca4f45b7ebb52094fb39dc593"
+compatibility = ["rust_api", "wire", "features", "package"]
+replaces = []
+
+[[package]]
+name = "radroots_event"
+path = "crates/event"
+state = "active"
+tier = "domain"
+visibility = "public_release"
+publish = true
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["any"]
+groups = ["coverage_required", "portable", "public_native"]
+owners = ["event"]
+permitted_dependency_tiers = ["foundation", "domain"]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/event"
+source_tree_sha256 = "bfe3e6ece4d728ba9e5b6476376c172d621a310788c420e33f81a4cdfc3067ef"
+compatibility = ["rust_api", "wire", "features", "package"]
+replaces = []
+
+[[package]]
+name = "radroots_event_codec"
+path = "crates/event_codec"
+state = "active"
+tier = "domain"
+visibility = "public_release"
+publish = true
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["any"]
+groups = ["coverage_required", "portable", "public_native"]
+owners = ["event"]
+permitted_dependency_tiers = ["foundation", "domain"]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/event_codec"
+source_tree_sha256 = "6b51309e57b163d7577ec4b7f0fd8e28b2c98aa44cb7fe51a38346300e6078f7"
+compatibility = ["rust_api", "wire", "generated", "features", "package"]
+replaces = []
+
+[[package]]
+name = "radroots_trade"
+path = "crates/trade"
+state = "active"
+tier = "domain"
+visibility = "public_release"
+publish = true
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["any"]
+groups = ["coverage_required", "portable", "public_native"]
+owners = ["trade"]
+permitted_dependency_tiers = ["foundation", "domain"]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/trade"
+source_tree_sha256 = "10c873d05c12255ebbdba57772688bb033a183f569959184f1fe9dac248b9bda"
+compatibility = ["rust_api", "behavior", "features", "package"]
+replaces = []
+
+[[package]]
+name = "radroots_signing"
+path = "crates/signing"
+state = "active"
+tier = "spi"
+visibility = "public_release"
+publish = true
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["any"]
+groups = ["coverage_required", "portable", "public_native"]
+owners = ["signing"]
+permitted_dependency_tiers = ["foundation", "domain", "spi"]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/signing"
+source_tree_sha256 = "55d4e9f719358a3bb5287688947a34773646aabc7b902a6da790b5c4c0d72026"
+compatibility = ["rust_api", "security", "features", "package"]
+replaces = []
+
+[[package]]
+name = "radroots_transport"
+path = "crates/transport"
+state = "active"
+tier = "spi"
+visibility = "public_release"
+publish = true
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["any"]
+groups = ["coverage_required", "portable", "public_native"]
+owners = ["transport"]
+permitted_dependency_tiers = ["foundation", "domain", "spi"]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/transport"
+source_tree_sha256 = "4f39941e5a3c7ec82e179198900541dfcd66ef6bfcffcc7de7e89b604461598a"
+compatibility = ["rust_api", "wire", "features", "package"]
+replaces = []
+
+[[package]]
+name = "radroots_secrets"
+path = "crates/secrets"
+state = "active"
+tier = "spi"
+visibility = "public_release"
+publish = true
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["native"]
+groups = ["coverage_required", "portable", "public_native"]
+owners = ["security"]
+permitted_dependency_tiers = ["foundation", "domain", "spi"]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/secrets"
+source_tree_sha256 = "f20923b87e73a65db157f75342fa6814a0b90707e2210f387f9aaddbd2705cf2"
+compatibility = ["rust_api", "security", "features", "package"]
+replaces = []
+
+[[package]]
+name = "radroots_storage"
+path = "crates/storage"
+state = "active"
+tier = "spi"
+visibility = "public_release"
+publish = true
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["native"]
+groups = ["coverage_required", "portable", "public_native"]
+owners = ["storage"]
+permitted_dependency_tiers = ["foundation", "domain", "spi"]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/storage"
+source_tree_sha256 = "383e648daaded9c02d8bf64164697fbd23f0c9a82887b0210a487c1803ccdf91"
+compatibility = ["rust_api", "data", "features", "package"]
+replaces = []
+
+[[package]]
+name = "radroots_nostr"
+path = "crates/nostr"
+state = "active"
+tier = "adapter"
+visibility = "public_release"
+publish = true
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["any"]
+groups = ["coverage_required", "portable", "public_native"]
+owners = ["nostr"]
+permitted_dependency_tiers = ["foundation", "domain", "spi", "adapter"]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/nostr"
+source_tree_sha256 = "5d526e5aa8c98b71218a341346a70250d278866b6818204b8a78b9772508bb0e"
+compatibility = ["rust_api", "wire", "features", "package"]
+replaces = []
+
+[[package]]
+name = "radroots_nostr_connect"
+path = "crates/nostr_connect"
+state = "active"
+tier = "adapter"
+visibility = "public_release"
+publish = true
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["any"]
+groups = ["coverage_required", "portable", "public_native"]
+owners = ["nostr"]
+permitted_dependency_tiers = ["foundation", "domain", "spi", "adapter"]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/nostr_connect"
+source_tree_sha256 = "10cb6c86a37d11fdf09aa8f47486e504b7ad94d2e0ba92f241442ec10a4578b5"
+compatibility = ["rust_api", "wire", "security", "features", "package"]
+replaces = []
+
+[[package]]
+name = "radroots_storage_sqlite"
+path = "crates/storage_sqlite"
+state = "active"
+tier = "adapter"
+visibility = "public_release"
+publish = true
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["native"]
+groups = ["coverage_required", "portable", "public_native"]
+owners = ["storage"]
+permitted_dependency_tiers = ["foundation", "domain", "spi", "adapter"]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/storage_sqlite"
+source_tree_sha256 = "1ba1c8adc6741e931220eae5fdcef7a05894e3d8276a869448ab6583b13b93e9"
+compatibility = ["rust_api", "data", "features", "package"]
+replaces = []
+
+[[package]]
+name = "radroots_transport_nostr"
+path = "crates/transport_nostr"
+state = "active"
+tier = "adapter"
+visibility = "public_release"
+publish = true
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["native"]
+groups = ["coverage_required", "portable", "public_native"]
+owners = ["transport"]
+permitted_dependency_tiers = ["foundation", "domain", "spi", "adapter"]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/transport_nostr"
+source_tree_sha256 = "1f8b471ee468200dc61e8452184d213906d3ca4b13e64b311aca7ad40fdacac6"
+compatibility = ["rust_api", "network", "features", "package"]
+replaces = []
+
+[[package]]
+name = "radroots_geonames"
+path = "crates/geonames"
+state = "active"
+tier = "adapter"
+visibility = "public_release"
+publish = true
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["native"]
+groups = ["coverage_required", "portable", "public_native"]
+owners = ["geonames"]
+permitted_dependency_tiers = ["foundation", "domain", "spi", "adapter"]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/geonames"
+source_tree_sha256 = "1ae21934d6b6dadf4baebad3f4658c6cfe04d4abb4b36f869644c87cebacdc3a"
+compatibility = ["rust_api", "data", "features", "package"]
+replaces = []
+
+[[package]]
+name = "radroots_sync"
+path = "crates/sync"
+state = "active"
+tier = "orchestration"
+visibility = "public_release"
+publish = true
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["native"]
+groups = ["coverage_required", "portable", "public_native"]
+owners = ["sync"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/sync"
+source_tree_sha256 = "23a16aaddc8366fd7ad6461e97103de03593d23a16687a7a2b6f86fc3a683c53"
+compatibility = ["rust_api", "behavior", "features", "package"]
+replaces = []
+
+[[package]]
+name = "radroots_nostrdb"
+path = "crates/nostrdb"
+state = "active"
+tier = "preview"
+visibility = "private_adapter"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["native"]
+groups = ["coverage_required", "preview"]
+owners = ["preview"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "preview",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/nostrdb"
+source_tree_sha256 = "f1824eb3fe9f02046aabe40319d2c346de499c74a90aca11fe648e76bc8e744b"
+compatibility = ["package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_transport_reticulum"
+path = "crates/transport_reticulum"
+state = "active"
+tier = "preview"
+visibility = "private_adapter"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["native"]
+groups = ["coverage_required", "preview"]
+owners = ["preview"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "preview",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/transport_reticulum"
+source_tree_sha256 = "590a69dabb65e891900884e5b67636d0a2e83f40a8d92fc4fdf3fb68bf9ac493"
+compatibility = ["package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_simplex_app_store"
+path = "crates/simplex_app_store"
+state = "active"
+tier = "preview"
+visibility = "private_adapter"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["native"]
+groups = ["preview"]
+owners = ["preview"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "preview",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/simplex_app_store"
+source_tree_sha256 = "43d51e5601d16666faa32607da732e8c48d9c75dee8c308c782b90da5fa8fdf5"
+compatibility = ["package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_simplex_agent_proto"
+path = "crates/simplex_agent_proto"
+state = "active"
+tier = "preview"
+visibility = "private_runtime"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["any"]
+groups = ["preview"]
+owners = ["preview"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "preview",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/simplex_agent_proto"
+source_tree_sha256 = "9ba0704f166f7cd3aa08f4cb8c3548f0da4d641266f5c6ac3691db0ebb2576f2"
+compatibility = ["package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_simplex_chat_proto"
+path = "crates/simplex_chat_proto"
+state = "active"
+tier = "preview"
+visibility = "private_runtime"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["any"]
+groups = ["preview"]
+owners = ["preview"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "preview",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/simplex_chat_proto"
+source_tree_sha256 = "1ba255a084e8962c472c5d0fb89592b8e775cc1017827ff13d18315e6bebf0d9"
+compatibility = ["package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_simplex_smp_crypto"
+path = "crates/simplex_smp_crypto"
+state = "active"
+tier = "preview"
+visibility = "private_runtime"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["any"]
+groups = ["preview"]
+owners = ["preview"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "preview",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/simplex_smp_crypto"
+source_tree_sha256 = "618926bd97e2b8e68732aff55b56817ee942ae66fbd4670a8a87ce9c28f37a93"
+compatibility = ["package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_simplex_smp_proto"
+path = "crates/simplex_smp_proto"
+state = "active"
+tier = "preview"
+visibility = "private_runtime"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["any"]
+groups = ["preview"]
+owners = ["preview"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "preview",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/simplex_smp_proto"
+source_tree_sha256 = "4d3580ab580ec4008af0f1b6c45cfaf418b8f8f112d80e2c6338c83aba44c730"
+compatibility = ["package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_simplex_smp_transport"
+path = "crates/simplex_smp_transport"
+state = "active"
+tier = "preview"
+visibility = "private_runtime"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["native"]
+groups = ["preview"]
+owners = ["preview"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "preview",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/simplex_smp_transport"
+source_tree_sha256 = "50d902c20901de5647e8a3dbe359b9d79eb336d8952c363b914f51ee39240f24"
+compatibility = ["package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_replica_schema"
+path = "crates/replica_schema"
+state = "active"
+tier = "preview"
+visibility = "private_runtime"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["any"]
+groups = ["coverage_required", "preview"]
+owners = ["preview"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "preview",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/replica_schema"
+source_tree_sha256 = "65c91da5221a98f33d134ff19d760dc7185c33985574c127e7e3ffe9b6636538"
+compatibility = ["package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_replica_store"
+path = "crates/replica_store"
+state = "active"
+tier = "preview"
+visibility = "private_adapter"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["native"]
+groups = ["coverage_required", "preview"]
+owners = ["preview"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "preview",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/replica_store"
+source_tree_sha256 = "6b4761d89269e5468b924c30d2b1f9da4ae42adcb5c6ae85bd65c2c47a565e08"
+compatibility = ["package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_replica_sync"
+path = "crates/replica_sync"
+state = "active"
+tier = "preview"
+visibility = "private_runtime"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["native"]
+groups = ["coverage_required", "preview"]
+owners = ["preview"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "preview",
+ "fixture",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/replica_sync"
+source_tree_sha256 = "8c957b0bc99c690c40d74cf747ece37b9f5b2d6a4849171fc2d0cce675850c90"
+compatibility = ["package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_mesh"
+path = "crates/mesh"
+state = "active"
+tier = "preview"
+visibility = "private_runtime"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["native"]
+groups = ["coverage_required", "preview"]
+owners = ["preview"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "preview",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/mesh"
+source_tree_sha256 = "2aa1e901b21ecaa135e7af10ef96270aeae0a19eff5e5006ffdcd1aca62e7979"
+compatibility = ["package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_mesh_agent_client"
+path = "crates/mesh_agent_client"
+state = "active"
+tier = "preview"
+visibility = "private_runtime"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["native"]
+groups = ["coverage_required", "preview"]
+owners = ["preview"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "preview",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/mesh_agent_client"
+source_tree_sha256 = "37a7a74761d6922264787d9dfc22c01453c423e0dfcece854a37ee9df725232a"
+compatibility = ["package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_mesh_agent_proto"
+path = "crates/mesh_agent_proto"
+state = "active"
+tier = "preview"
+visibility = "private_runtime"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["any"]
+groups = ["coverage_required", "preview"]
+owners = ["preview"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "preview",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/mesh_agent_proto"
+source_tree_sha256 = "85767b6a613bd1e167484bb60221107c43648472e4cebfdcbeda7e4bc38f9c57"
+compatibility = ["package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_runtime_paths"
+path = "crates/runtime_paths"
+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 = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/runtime_paths"
+source_tree_sha256 = "59ed1e101555715827c33e7781ff4993149b2177011ab1401f5cd832a1666120"
+compatibility = ["package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_runtime_distribution"
+path = "crates/runtime_distribution"
+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 = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/runtime_distribution"
+source_tree_sha256 = "412a69a157253216fc08daa967e3de4f980b35cb6ef098baa4a77d74175ba193"
+compatibility = ["package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_runtime_manager"
+path = "crates/runtime_manager"
+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 = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/runtime_manager"
+source_tree_sha256 = "d6df1cfee50affc1e8bb3fcfbf283873c0442031d90db08da31bf3d668547809"
+compatibility = ["package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_sql_core"
+path = "crates/sql_core"
+state = "active"
+tier = "adapter"
+visibility = "private_adapter"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["native", "wasm32"]
+groups = ["coverage_required", "preview", "wasm"]
+owners = ["storage"]
+permitted_dependency_tiers = ["foundation", "domain", "spi", "adapter"]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/sql_core"
+source_tree_sha256 = "18e107bdeeee8761f731a1c389e475e5caebbd2a958c0646d0c6aa5f8c95b8dc"
+compatibility = ["package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_test_fixtures"
+path = "crates/test_fixtures"
+state = "active"
+tier = "fixture"
+visibility = "private_fixture"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["any"]
+groups = ["coverage_required", "preview"]
+owners = ["testing"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "preview",
+ "runtime",
+ "fixture",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "crates/test_fixtures"
+source_tree_sha256 = "763e4af22fbf5e7f11709c1b00f55569dbe3ebf8b679bdb937d462d576f02524"
+compatibility = ["fixtures"]
+replaces = []
+
+[[package]]
+name = "xtask"
+path = "tools/xtask"
+state = "active"
+tier = "tool"
+visibility = "private_tool"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["native"]
+groups = ["coverage_required", "tools"]
+owners = ["architecture"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "preview",
+ "runtime",
+ "fixture",
+ "codegen",
+ "tool",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/lib"
+source_revision = "3f35c869c827b35b27e7a7d789d409e6c3def6a8"
+source_path = "tools/xtask"
+source_tree_sha256 = "2846b559151c835b1a561153166074625a8430130b2f1adcaf1a358eb0da20ff"
+compatibility = ["command_surface"]
+replaces = []
+
+[[package]]
+name = "radroots_sdk"
+path = "crates/sdk"
+state = "active"
+tier = "sdk"
+visibility = "public_release"
+publish = true
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["any"]
+groups = ["coverage_required", "portable", "public_native", "sdk"]
+owners = ["sdk"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "sdk",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/sdk"
+source_revision = "170ecf2b620107fadca85fcb11fbf3798b4ca1ef"
+source_path = "crates/sdk"
+source_tree_sha256 = "6cc78f544bd0a0d74783cbba118ea4815ce4b4bd094433193844621352411efb"
+compatibility = ["rust_api", "features", "package", "product"]
+replaces = []
+
+[[package]]
+name = "radroots"
+path = "crates/radroots"
+state = "active"
+tier = "facade"
+visibility = "public_release"
+publish = true
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["any"]
+groups = ["coverage_required", "portable", "public_native", "sdk"]
+owners = ["sdk"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "sdk",
+ "facade",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/sdk"
+source_revision = "170ecf2b620107fadca85fcb11fbf3798b4ca1ef"
+source_path = "crates/radroots"
+source_tree_sha256 = "7c9b4392eb7e8d8e799f4a62c9886f349161bad440659beb0d1a739911ab1425"
+compatibility = ["rust_api", "features", "package", "product"]
+replaces = []
+
+[[package]]
+name = "radroots_core_bindings"
+path = "crates/core_bindings"
+state = "active"
+tier = "codegen"
+visibility = "private_codegen"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["native"]
+groups = ["coverage_required", "sdk", "boundaries"]
+owners = ["sdk"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "sdk",
+ "facade",
+ "codegen",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/sdk"
+source_revision = "170ecf2b620107fadca85fcb11fbf3798b4ca1ef"
+source_path = "crates/core_bindings"
+source_tree_sha256 = "f1a72bde7364179687bbdf6c4dacddacd504c52a884af941ce3557bae27ee981"
+compatibility = ["generated", "package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_event_bindings"
+path = "crates/event_bindings"
+state = "active"
+tier = "codegen"
+visibility = "private_codegen"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["native"]
+groups = ["coverage_required", "sdk", "boundaries"]
+owners = ["sdk"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "sdk",
+ "facade",
+ "codegen",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/sdk"
+source_revision = "170ecf2b620107fadca85fcb11fbf3798b4ca1ef"
+source_path = "crates/event_bindings"
+source_tree_sha256 = "32f23a76a5c135de841cae623a28de3424dace3b6ba46af8c2cccc35b7c62f09"
+compatibility = ["generated", "package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_identity_bindings"
+path = "crates/identity_bindings"
+state = "active"
+tier = "codegen"
+visibility = "private_codegen"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["native"]
+groups = ["coverage_required", "sdk", "boundaries"]
+owners = ["sdk"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "sdk",
+ "facade",
+ "codegen",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/sdk"
+source_revision = "170ecf2b620107fadca85fcb11fbf3798b4ca1ef"
+source_path = "crates/identity_bindings"
+source_tree_sha256 = "a0cf1539805704195cf82f9ffffa06e443a9c1cabd90a47bfcf6110f20549acd"
+compatibility = ["generated", "package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_trade_bindings"
+path = "crates/trade_bindings"
+state = "active"
+tier = "codegen"
+visibility = "private_codegen"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["native"]
+groups = ["coverage_required", "sdk", "boundaries"]
+owners = ["sdk"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "sdk",
+ "facade",
+ "codegen",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/sdk"
+source_revision = "170ecf2b620107fadca85fcb11fbf3798b4ca1ef"
+source_path = "crates/trade_bindings"
+source_tree_sha256 = "28a60e08d65a891961189d5e614bbc008fe36574b3823333375339c589236342"
+compatibility = ["generated", "package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_replica_schema_bindings"
+path = "crates/replica_schema_bindings"
+state = "active"
+tier = "codegen"
+visibility = "private_codegen"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["native"]
+groups = ["coverage_required", "sdk", "boundaries"]
+owners = ["sdk"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "preview",
+ "sdk",
+ "facade",
+ "codegen",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/sdk"
+source_revision = "170ecf2b620107fadca85fcb11fbf3798b4ca1ef"
+source_path = "crates/replica_schema_bindings"
+source_tree_sha256 = "41aeb6520962da64f13e09449d03b6df901b788965732eff439b282fe8f8abb1"
+compatibility = ["generated", "package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_event_codec_wasm"
+path = "crates/event_codec_wasm"
+state = "active"
+tier = "boundary"
+visibility = "private_boundary"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["wasm32"]
+groups = ["coverage_required", "sdk", "wasm", "boundaries"]
+owners = ["sdk"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "sdk",
+ "facade",
+ "boundary",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/sdk"
+source_revision = "170ecf2b620107fadca85fcb11fbf3798b4ca1ef"
+source_path = "crates/event_codec_wasm"
+source_tree_sha256 = "698abf3b77aa87b6460432342908b475c55bb55d285dc9aef24e27239e4cfa3c"
+compatibility = ["wasm", "generated", "package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_replica_store_wasm"
+path = "crates/replica_store_wasm"
+state = "active"
+tier = "boundary"
+visibility = "private_boundary"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["wasm32"]
+groups = ["coverage_required", "sdk", "wasm", "boundaries"]
+owners = ["sdk"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "preview",
+ "sdk",
+ "facade",
+ "boundary",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/sdk"
+source_revision = "170ecf2b620107fadca85fcb11fbf3798b4ca1ef"
+source_path = "crates/replica_store_wasm"
+source_tree_sha256 = "59cb050d0493047b57aebc4e1bb3adfd5af2fcd464de1f76ffabc1dfabe2baad"
+compatibility = ["wasm", "generated", "package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_replica_sync_wasm"
+path = "crates/replica_sync_wasm"
+state = "active"
+tier = "boundary"
+visibility = "private_boundary"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["wasm32"]
+groups = ["coverage_required", "sdk", "wasm", "boundaries"]
+owners = ["sdk"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "preview",
+ "sdk",
+ "facade",
+ "boundary",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/sdk"
+source_revision = "170ecf2b620107fadca85fcb11fbf3798b4ca1ef"
+source_path = "crates/replica_sync_wasm"
+source_tree_sha256 = "95f2a291066bab18c744f50a910feecc913dd50a4a3b6c9a464247695d8faffc"
+compatibility = ["wasm", "generated", "package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_sdk_ffi"
+path = "crates/sdk_ffi"
+state = "active"
+tier = "boundary"
+visibility = "private_boundary"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["native"]
+groups = ["coverage_required", "sdk", "boundaries"]
+owners = ["sdk"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "sdk",
+ "facade",
+ "boundary",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/sdk"
+source_revision = "170ecf2b620107fadca85fcb11fbf3798b4ca1ef"
+source_path = "crates/ffi"
+source_tree_sha256 = "f07e2087f0506b146848476048b32b01584905e2928fe56a36d4f90663590e33"
+compatibility = ["ffi", "generated", "package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_sdk_sql_wasm_runtime"
+path = "crates/sdk_sql_wasm_runtime"
+state = "active"
+tier = "adapter"
+visibility = "private_adapter"
+publish = false
+version = "0.1.0-alpha"
+license = "MIT OR Apache-2.0"
+platforms = ["wasm32"]
+groups = ["coverage_required", "sdk", "wasm"]
+owners = ["sdk"]
+permitted_dependency_tiers = ["foundation", "domain", "spi", "adapter"]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/sdk"
+source_revision = "170ecf2b620107fadca85fcb11fbf3798b4ca1ef"
+source_path = "crates/sql_wasm_runtime"
+source_tree_sha256 = "6ca1dca6f248c50b6bcd4c684b4ad31acd17b8bfc36a8b0072872f6db927c303"
+compatibility = ["wasm", "data", "package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_mobile_core"
+path = "crates/mobile_core"
+state = "active"
+tier = "runtime"
+visibility = "private_runtime"
+publish = false
+version = "0.1.0-alpha"
+license = "GPL-3.0-or-later"
+platforms = ["native", "wasm32"]
+groups = ["coverage_required", "mobile"]
+owners = ["mobile"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "sdk",
+ "facade",
+ "runtime",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/app_rt"
+source_revision = "7ab1a8624d50890d6d18545ffb47d8083afa8c67"
+source_path = "crates/core"
+source_tree_sha256 = "8ae546ee60a97bfc145c12ea94dcd6d528bf5f49e974159442738c29eb3d6ee1"
+compatibility = ["product", "lifecycle", "package_private"]
+replaces = ["radroots_app_core"]
+
+[[package]]
+name = "radroots_mobile_ffi"
+path = "crates/mobile_ffi"
+state = "active"
+tier = "boundary"
+visibility = "private_boundary"
+publish = false
+version = "0.1.0-alpha"
+license = "GPL-3.0-or-later"
+platforms = ["apple", "android"]
+groups = ["coverage_required", "mobile", "boundaries"]
+owners = ["mobile"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "sdk",
+ "facade",
+ "runtime",
+ "boundary",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/app_rt"
+source_revision = "7ab1a8624d50890d6d18545ffb47d8083afa8c67"
+source_path = "crates/ffi"
+source_tree_sha256 = "9a38699ad6d39b9f8764fed6a67bd55908ff54cb2e3cae9a3890ce1a46789b2b"
+compatibility = ["ffi", "swift", "kotlin", "lifecycle", "package_private"]
+replaces = ["radroots_app_ffi"]
+
+[[package]]
+name = "radroots_mobile_wasm"
+path = "crates/mobile_wasm"
+state = "active"
+tier = "boundary"
+visibility = "private_boundary"
+publish = false
+version = "0.1.0-alpha"
+license = "GPL-3.0-or-later"
+platforms = ["wasm32"]
+groups = ["coverage_required", "mobile", "wasm", "boundaries"]
+owners = ["mobile"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "sdk",
+ "facade",
+ "runtime",
+ "boundary",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/app_rt"
+source_revision = "7ab1a8624d50890d6d18545ffb47d8083afa8c67"
+source_path = "crates/wasm"
+source_tree_sha256 = "8c65c867eafc0643ca9fd86150766af4f4ab2f0f8321d66306418261a8f43124"
+compatibility = ["wasm", "lifecycle", "package_private"]
+replaces = ["radroots_app_wasm"]
+
+[[package]]
+name = "radroots_mobile_bindgen"
+path = "crates/mobile_bindgen"
+state = "active"
+tier = "codegen"
+visibility = "private_codegen"
+publish = false
+version = "0.1.0-alpha"
+license = "GPL-3.0-or-later"
+platforms = ["native"]
+groups = ["coverage_required", "mobile", "boundaries"]
+owners = ["mobile"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "sdk",
+ "facade",
+ "runtime",
+ "boundary",
+ "codegen",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/app_rt"
+source_revision = "7ab1a8624d50890d6d18545ffb47d8083afa8c67"
+source_path = "crates/bindgen"
+source_tree_sha256 = "f0a9d7ec9794257bc56063117208e6e83a34efe1b852e8af6d6a56a1693d27fa"
+compatibility = ["generated", "swift", "kotlin", "package_private"]
+replaces = ["radroots_app_bindgen"]
+
+[[package]]
+name = "radroots_studio_domain"
+path = "crates/studio_domain"
+state = "active"
+tier = "application_domain"
+visibility = "private_runtime"
+publish = false
+version = "0.1.0-alpha"
+license = "GPL-3.0-only"
+platforms = ["native"]
+groups = ["coverage_required", "studio"]
+owners = ["studio"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "sdk",
+ "facade",
+ "application_domain",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/studio_app"
+source_revision = "2b5fe5d8321fd0e248a9d304651b1ba54ee6a180"
+source_path = "core/crates/domain"
+source_tree_sha256 = "25f8abe2f8f4e9dfeb6450116be67eb3faad53f2d3879a4c142796238f74b0a9"
+compatibility = ["product", "data", "package_private"]
+replaces = ["radroots-studio-domain"]
+
+[[package]]
+name = "radroots_studio_preferences"
+path = "crates/studio_preferences"
+state = "active"
+tier = "application_domain"
+visibility = "private_runtime"
+publish = false
+version = "0.1.0-alpha"
+license = "MPL-2.0"
+platforms = ["native"]
+groups = ["coverage_required", "studio"]
+owners = ["studio"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "sdk",
+ "facade",
+ "application_domain",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/_radroots"
+source_revision = "6074a4745be361f21bb47d4778c74a14b2d57954"
+source_path = "studio_app/studio_app_core/crates/core"
+source_tree_sha256 = "0237265710a676ce1db0fb3091e1e5d9a5831339e00076ea2a33b96d6343834d"
+compatibility = ["product", "preferences", "package_private"]
+replaces = ["studio_app_core"]
+
+[[package]]
+name = "radroots_studio_application"
+path = "crates/studio_application"
+state = "active"
+tier = "application"
+visibility = "private_runtime"
+publish = false
+version = "0.1.0-alpha"
+license = "GPL-3.0-only"
+platforms = ["native"]
+groups = ["coverage_required", "studio"]
+owners = ["studio"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "sdk",
+ "facade",
+ "application_domain",
+ "application",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/studio_app"
+source_revision = "2b5fe5d8321fd0e248a9d304651b1ba54ee6a180"
+source_path = "core/crates/application"
+source_tree_sha256 = "8b0b5d4d74dde0af3c5fb3dac979b0cf57cccf073d597f7bd35b1e73a711fe0b"
+compatibility = ["product", "behavior", "package_private"]
+replaces = ["radroots-studio-application"]
+
+[[package]]
+name = "radroots_studio_nostr"
+path = "crates/studio_nostr"
+state = "active"
+tier = "application_adapter"
+visibility = "private_adapter"
+publish = false
+version = "0.1.0-alpha"
+license = "GPL-3.0-only"
+platforms = ["native"]
+groups = ["coverage_required", "studio"]
+owners = ["studio"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "sdk",
+ "facade",
+ "application_domain",
+ "application",
+ "application_adapter",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/studio_app"
+source_revision = "2b5fe5d8321fd0e248a9d304651b1ba54ee6a180"
+source_path = "core/crates/nostr"
+source_tree_sha256 = "2ce5ce0227ab190102a94ffdf80d95b37ed35f5ef62286c4e3e19cd42a777115"
+compatibility = ["network", "security", "package_private"]
+replaces = ["radroots-studio-nostr"]
+
+[[package]]
+name = "radroots_studio_storage"
+path = "crates/studio_storage"
+state = "active"
+tier = "application_adapter"
+visibility = "private_adapter"
+publish = false
+version = "0.1.0-alpha"
+license = "GPL-3.0-only"
+platforms = ["native"]
+groups = ["coverage_required", "studio"]
+owners = ["studio"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "sdk",
+ "facade",
+ "application_domain",
+ "application",
+ "application_adapter",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/studio_app"
+source_revision = "2b5fe5d8321fd0e248a9d304651b1ba54ee6a180"
+source_path = "core/crates/storage"
+source_tree_sha256 = "f3addecbd7f6dbccda4a438597b4e433443a34b48a6c4ef9efa90e49e8f05c4b"
+compatibility = ["data", "keyring", "package_private"]
+replaces = ["radroots-studio-storage"]
+
+[[package]]
+name = "radroots_studio_runtime"
+path = "crates/studio_runtime"
+state = "active"
+tier = "runtime_composition"
+visibility = "private_runtime"
+publish = false
+version = "0.1.0-alpha"
+license = "GPL-3.0-only"
+platforms = ["native"]
+groups = ["coverage_required", "studio"]
+owners = ["studio"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "sdk",
+ "facade",
+ "application_domain",
+ "application",
+ "application_adapter",
+ "runtime_composition",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/studio_app"
+source_revision = "2b5fe5d8321fd0e248a9d304651b1ba54ee6a180"
+source_path = "core/crates/storage"
+source_tree_sha256 = "f3addecbd7f6dbccda4a438597b4e433443a34b48a6c4ef9efa90e49e8f05c4b"
+compatibility = ["product", "lifecycle", "package_private"]
+replaces = []
+
+[[package]]
+name = "radroots_studio_ffi"
+path = "crates/studio_ffi"
+state = "active"
+tier = "boundary"
+visibility = "private_boundary"
+publish = false
+version = "0.1.0-alpha"
+license = "GPL-3.0-only"
+platforms = ["linux", "macos", "windows"]
+groups = ["coverage_required", "studio", "boundaries"]
+owners = ["studio"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "sdk",
+ "facade",
+ "application_domain",
+ "application",
+ "application_adapter",
+ "runtime_composition",
+ "boundary",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/studio_app"
+source_revision = "2b5fe5d8321fd0e248a9d304651b1ba54ee6a180"
+source_path = "core/crates/ffi"
+source_tree_sha256 = "0bb1d02eb963a606a288d9c35fb418de7bfd914dc5e2c4a38112af64c643151c"
+compatibility = ["ffi", "kotlin", "product", "lifecycle", "package_private"]
+replaces = ["radroots-studio-ffi"]
+
+[[package]]
+name = "radroots_studio_uniffi_bindgen"
+path = "crates/studio_uniffi_bindgen"
+state = "active"
+tier = "codegen"
+visibility = "private_codegen"
+publish = false
+version = "0.1.0-alpha"
+license = "GPL-3.0-only"
+platforms = ["native"]
+groups = ["coverage_required", "studio", "boundaries"]
+owners = ["studio"]
+permitted_dependency_tiers = [
+ "foundation",
+ "domain",
+ "spi",
+ "adapter",
+ "orchestration",
+ "sdk",
+ "facade",
+ "application_domain",
+ "application",
+ "application_adapter",
+ "runtime_composition",
+ "boundary",
+ "codegen",
+]
+provenance_kind = "imported"
+source_repository = "https://github.com/radrootslabs/studio_app"
+source_revision = "2b5fe5d8321fd0e248a9d304651b1ba54ee6a180"
+source_path = "core/tools/uniffi-bindgen"
+source_tree_sha256 = "0eedd47c17fc7b2b84d953f2c4613aecf96575df466eb106450c7d7eee25ca9b"
+compatibility = ["generated", "kotlin", "package_private"]
+replaces = ["radroots-studio-uniffi-bindgen"]
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 = "8c27cebf6825f9ed74e122513c661f6dd31837dddb39d0988014121d8ab05e75"
+catalog_sha256 = "d42a2ec2f86f4df22b0deee5afe0fb7e971dae2f3657758961ff9d19c7e2d27e"
[[group]]
id = "boundaries"
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 = "8c27cebf6825f9ed74e122513c661f6dd31837dddb39d0988014121d8ab05e75"
+catalog_sha256 = "d42a2ec2f86f4df22b0deee5afe0fb7e971dae2f3657758961ff9d19c7e2d27e"
[[platform]]
id = "android"
diff --git a/contracts/crates/generated/release_inventory.v2.toml b/contracts/crates/generated/release_inventory.v2.toml
@@ -1,5 +1,5 @@
schema = "radroots.workspace.release-inventory.v2"
-catalog_sha256 = "8c27cebf6825f9ed74e122513c661f6dd31837dddb39d0988014121d8ab05e75"
+catalog_sha256 = "d42a2ec2f86f4df22b0deee5afe0fb7e971dae2f3657758961ff9d19c7e2d27e"
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"]
diff --git a/tools/xtask/src/build_control.rs b/tools/xtask/src/build_control.rs
@@ -12,7 +12,7 @@ use sha2::{Digest, Sha256};
const SOURCE_LOCK_NAME: &str = "radroots.lib.source-lock.v1.toml";
const CONSUMER_MARKER: &str = ".radroots-consumer-root";
-const CATALOG_RELATIVE: &str = "contracts/crates/catalog.v1.toml";
+const CATALOG_RELATIVE: &str = "contracts/crates/catalog.v2.toml";
const REPOSITORY: &str = "https://github.com/radrootslabs/lib";
const ARCHITECTURE: &str = "radroots.crates.release.v2";
const VERSION: &str = "0.1.0-alpha";
@@ -1084,7 +1084,7 @@ mod tests {
fs::create_dir_all(source.join("contracts/crates")).expect("contracts");
fs::write(
source.join(CATALOG_RELATIVE),
- "schema = \"radroots.workspace.catalog.v1\"\n",
+ "schema = \"radroots.workspace.catalog.v2\"\n",
)
.expect("catalog");
fs::create_dir_all(source.join("src")).expect("source crate");
diff --git a/tools/xtask/src/catalog.rs b/tools/xtask/src/catalog.rs
@@ -12,14 +12,14 @@ use crate::contract::artifact_bundle::{
GeneratedArtifact, read_regular_file, with_artifact_bundle_transaction,
};
-const CATALOG_RELATIVE: &str = "contracts/crates/catalog.v1.toml";
+const CATALOG_RELATIVE: &str = "contracts/crates/catalog.v2.toml";
const RELEASE_RELATIVE: &str = "contracts/crates/release.v2.toml";
const CONSOLIDATION_RELATIVE: &str = "contracts/consolidation/architecture.v1.toml";
const GROUPS_RELATIVE: &str = "contracts/crates/generated/package_groups.v1.toml";
const PLATFORMS_RELATIVE: &str = "contracts/crates/generated/platform_inventory.v1.toml";
const RELEASE_INVENTORY_RELATIVE: &str = "contracts/crates/generated/release_inventory.v2.toml";
const COVERAGE_RELATIVE: &str = "contracts/coverage.toml";
-const CATALOG_SCHEMA: &str = "radroots.workspace.catalog.v1";
+const CATALOG_SCHEMA: &str = "radroots.workspace.catalog.v2";
const RELEASE_ID: &str = "radroots.crates.release.v2";
const CONSOLIDATION_ID: &str = "radroots.rust.consolidation.v1";
const VERSION: &str = "0.1.0-alpha";
@@ -39,6 +39,7 @@ struct Catalog {
package_count: usize,
digest_algorithm: String,
source_tree_digest_algorithm: String,
+ native_introduction_tree_digest_algorithm: String,
source_provenance_policy: String,
provenance_correction_contract: String,
retired_packages: Vec<String>,
@@ -60,10 +61,12 @@ struct CatalogPackage {
groups: Vec<String>,
owners: Vec<String>,
permitted_dependency_tiers: Vec<String>,
- source_repository: String,
- source_revision: String,
- source_path: String,
- source_tree_sha256: String,
+ provenance_kind: String,
+ source_repository: Option<String>,
+ source_revision: Option<String>,
+ source_path: Option<String>,
+ source_tree_sha256: Option<String>,
+ introduction_tree_sha256: Option<String>,
compatibility: Vec<String>,
removal_gate: Option<String>,
replaces: Vec<String>,
@@ -251,7 +254,7 @@ fn parse_toml<T: for<'de> Deserialize<'de>>(relative: &str, bytes: &[u8]) -> Res
}
fn validate_catalog(catalog: &Catalog) -> Result<(), String> {
- if catalog.schema_version != 1
+ if catalog.schema_version != 2
|| catalog.schema != CATALOG_SCHEMA
|| catalog.architecture != RELEASE_ID
|| catalog.consolidation != CONSOLIDATION_ID
@@ -263,7 +266,8 @@ fn validate_catalog(catalog: &Catalog) -> Result<(), String> {
|| catalog.package_count != catalog.package.len()
|| catalog.digest_algorithm != "sha256-raw-bytes-v1"
|| catalog.source_tree_digest_algorithm != "sha256-git-ls-tree-r-v1"
- || catalog.source_provenance_policy != "immutable_after_source_retirement"
+ || catalog.native_introduction_tree_digest_algorithm != "sha256-git-tree-records-z-v1"
+ || catalog.source_provenance_policy != "imported_revision_tree_or_native_introduction_tree"
|| catalog.provenance_correction_contract != "approved_correction_record_required"
{
return Err("catalog identity, toolchain, or cardinality drifted".to_owned());
@@ -361,20 +365,7 @@ fn validate_catalog(catalog: &Catalog) -> Result<(), String> {
{
return Err(format!("GPL package {} has an invalid class", package.name));
}
- if package.source_repository
- != format!(
- "https://github.com/radrootslabs/{}",
- source_repository_name(&package.source_repository)?
- )
- {
- return Err(format!(
- "package {} source repository is noncanonical",
- package.name
- ));
- }
- validate_oid(&package.source_revision, "source revision")?;
- validate_relative_path(&package.source_path)?;
- validate_sha256(&package.source_tree_sha256, "source tree digest")?;
+ validate_package_provenance(package)?;
for replaced in &package.replaces {
validate_package_identity(replaced, "replaced package")?;
}
@@ -466,6 +457,80 @@ fn validate_catalog(catalog: &Catalog) -> Result<(), String> {
Ok(())
}
+fn validate_package_provenance(package: &CatalogPackage) -> Result<(), String> {
+ match package.provenance_kind.as_str() {
+ "imported" => {
+ let source_repository = package.source_repository.as_deref().ok_or_else(|| {
+ format!("imported package {} lacks source repository", package.name)
+ })?;
+ let source_revision = package.source_revision.as_deref().ok_or_else(|| {
+ format!("imported package {} lacks source revision", package.name)
+ })?;
+ let source_path = package
+ .source_path
+ .as_deref()
+ .ok_or_else(|| format!("imported package {} lacks source path", package.name))?;
+ let source_tree_sha256 = package.source_tree_sha256.as_deref().ok_or_else(|| {
+ format!("imported package {} lacks source tree digest", package.name)
+ })?;
+ if package.introduction_tree_sha256.is_some() {
+ return Err(format!(
+ "imported package {} declares native introduction provenance",
+ package.name
+ ));
+ }
+ if source_repository
+ != format!(
+ "https://github.com/radrootslabs/{}",
+ source_repository_name(source_repository)?
+ )
+ {
+ return Err(format!(
+ "package {} source repository is noncanonical",
+ package.name
+ ));
+ }
+ validate_oid(source_revision, "source revision")?;
+ validate_relative_path(source_path)?;
+ validate_sha256(source_tree_sha256, "source tree digest")
+ }
+ "native" => {
+ if package.source_repository.is_some()
+ || package.source_revision.is_some()
+ || package.source_path.is_some()
+ || package.source_tree_sha256.is_some()
+ {
+ return Err(format!(
+ "native package {} must not declare imported provenance",
+ package.name
+ ));
+ }
+ let introduction_tree_sha256 =
+ package.introduction_tree_sha256.as_deref().ok_or_else(|| {
+ format!(
+ "native package {} lacks introduction tree digest",
+ package.name
+ )
+ })?;
+ validate_sha256(introduction_tree_sha256, "introduction tree digest")?;
+ if package.state != "active"
+ || package.publish
+ || package.visibility == "public_release"
+ {
+ return Err(format!(
+ "native package {} must be active and unpublished",
+ package.name
+ ));
+ }
+ Ok(())
+ }
+ _ => Err(format!(
+ "package {} has unknown provenance kind {}",
+ package.name, package.provenance_kind
+ )),
+ }
+}
+
fn validate_coverage_authority(catalog: &Catalog, coverage: &CoveragePolicy) -> Result<(), String> {
let catalog_required = catalog
.package
@@ -806,38 +871,204 @@ fn validate_active_source_provenance(
catalog: &Catalog,
workspace_root: &Path,
) -> Result<(), String> {
- for package in catalog.package.iter().filter(|package| {
- package.state == "active"
- && package.source_repository == "https://github.com/radrootslabs/lib"
- }) {
- let output = Command::new("git")
- .args([
- "ls-tree",
- "-r",
- &package.source_revision,
- "--",
- &package.source_path,
- ])
- .current_dir(workspace_root)
- .output()
- .map_err(|error| format!("run git ls-tree for {}: {error}", package.name))?;
- if !output.status.success() {
- return Err(format!(
- "source revision for {} is unavailable: {}",
- package.name,
- String::from_utf8_lossy(&output.stderr).trim()
- ));
- }
- if sha256(&output.stdout) != package.source_tree_sha256 {
- return Err(format!(
- "source tree provenance drifted for {}",
- package.name
- ));
+ for package in catalog
+ .package
+ .iter()
+ .filter(|package| package.state == "active")
+ {
+ match package.provenance_kind.as_str() {
+ "imported"
+ if package.source_repository.as_deref()
+ == Some("https://github.com/radrootslabs/lib") =>
+ {
+ validate_imported_source_provenance(package, workspace_root)?;
+ }
+ "native" => validate_native_source_provenance(package, workspace_root)?,
+ _ => {}
}
}
Ok(())
}
+fn validate_imported_source_provenance(
+ package: &CatalogPackage,
+ workspace_root: &Path,
+) -> Result<(), String> {
+ let source_revision = package
+ .source_revision
+ .as_deref()
+ .ok_or_else(|| format!("imported package {} lacks source revision", package.name))?;
+ let source_path = package
+ .source_path
+ .as_deref()
+ .ok_or_else(|| format!("imported package {} lacks source path", package.name))?;
+ let expected = package
+ .source_tree_sha256
+ .as_deref()
+ .ok_or_else(|| format!("imported package {} lacks source tree digest", package.name))?;
+ let output = Command::new("git")
+ .args(["ls-tree", "-r", source_revision, "--", source_path])
+ .current_dir(workspace_root)
+ .output()
+ .map_err(|error| format!("run git ls-tree for {}: {error}", package.name))?;
+ if !output.status.success() {
+ return Err(format!(
+ "source revision for {} is unavailable: {}",
+ package.name,
+ String::from_utf8_lossy(&output.stderr).trim()
+ ));
+ }
+ if sha256(&output.stdout) != expected {
+ return Err(format!(
+ "source tree provenance drifted for {}",
+ package.name
+ ));
+ }
+ Ok(())
+}
+
+fn validate_native_source_provenance(
+ package: &CatalogPackage,
+ workspace_root: &Path,
+) -> Result<(), String> {
+ let expected = package
+ .introduction_tree_sha256
+ .as_deref()
+ .ok_or_else(|| format!("native package {} lacks introduction digest", package.name))?;
+ let introducing_commit = native_introducing_commit(workspace_root, &package.path)?;
+ let actual = if let Some(commit) = introducing_commit {
+ committed_tree_digest(workspace_root, &commit, &package.path)?
+ } else {
+ staged_tree_digest(workspace_root, &package.path)?
+ };
+ if actual != expected {
+ return Err(format!(
+ "native introduction tree provenance drifted for {}",
+ package.name
+ ));
+ }
+ Ok(())
+}
+
+fn native_introducing_commit(
+ workspace_root: &Path,
+ package_path: &str,
+) -> Result<Option<String>, String> {
+ let output = Command::new("git")
+ .args([
+ "log",
+ "--format=%H",
+ "--diff-filter=A",
+ "--reverse",
+ "--no-renames",
+ "HEAD",
+ "--",
+ package_path,
+ ])
+ .current_dir(workspace_root)
+ .output()
+ .map_err(|error| format!("derive native introduction commit: {error}"))?;
+ if !output.status.success() {
+ return Err(format!(
+ "derive native introduction commit for {package_path}: {}",
+ String::from_utf8_lossy(&output.stderr).trim()
+ ));
+ }
+ let stdout = std::str::from_utf8(&output.stdout)
+ .map_err(|error| format!("native introduction history is not UTF-8: {error}"))?;
+ let Some(commit) = stdout.lines().next() else {
+ return Ok(None);
+ };
+ validate_oid(commit, "native introducing commit")?;
+ Ok(Some(commit.to_owned()))
+}
+
+fn committed_tree_digest(
+ workspace_root: &Path,
+ commit: &str,
+ package_path: &str,
+) -> Result<String, String> {
+ let output = Command::new("git")
+ .args(["ls-tree", "-r", "-z", commit, "--", package_path])
+ .current_dir(workspace_root)
+ .output()
+ .map_err(|error| format!("read native introduction tree: {error}"))?;
+ if !output.status.success() {
+ return Err(format!(
+ "read native introduction tree for {package_path}: {}",
+ String::from_utf8_lossy(&output.stderr).trim()
+ ));
+ }
+ if output.stdout.is_empty() {
+ return Err(format!(
+ "native introducing commit {commit} has no tree at {package_path}"
+ ));
+ }
+ Ok(sha256(&output.stdout))
+}
+
+fn staged_tree_digest(workspace_root: &Path, package_path: &str) -> Result<String, String> {
+ let output = Command::new("git")
+ .args(["ls-files", "--stage", "-z", "--", package_path])
+ .current_dir(workspace_root)
+ .output()
+ .map_err(|error| format!("read staged native tree: {error}"))?;
+ if !output.status.success() {
+ return Err(format!(
+ "read staged native tree for {package_path}: {}",
+ String::from_utf8_lossy(&output.stderr).trim()
+ ));
+ }
+ let records = canonical_staged_tree_records(&output.stdout)?;
+ if records.is_empty() {
+ return Err(format!(
+ "native package {package_path} has no committed introduction or staged tree"
+ ));
+ }
+ Ok(sha256(&records))
+}
+
+fn canonical_staged_tree_records(input: &[u8]) -> Result<Vec<u8>, String> {
+ let mut output = Vec::new();
+ for record in input
+ .split(|byte| *byte == 0)
+ .filter(|record| !record.is_empty())
+ {
+ let tab = record
+ .iter()
+ .position(|byte| *byte == b'\t')
+ .ok_or_else(|| "staged tree record lacks a path separator".to_owned())?;
+ let header = std::str::from_utf8(&record[..tab])
+ .map_err(|error| format!("staged tree record header is not UTF-8: {error}"))?;
+ let fields = header.split(' ').collect::<Vec<_>>();
+ if fields.len() != 3 || fields[2] != "0" {
+ return Err("staged native tree must contain only stage-zero records".to_owned());
+ }
+ let mode = fields[0];
+ let oid = fields[1];
+ if mode.len() != 6 || !mode.bytes().all(|byte| matches!(byte, b'0'..=b'7')) {
+ return Err("staged native tree contains an invalid mode".to_owned());
+ }
+ validate_oid(oid, "staged native object")?;
+ if oid.bytes().all(|byte| byte == b'0') {
+ return Err("staged native tree contains an intent-to-add object".to_owned());
+ }
+ if record[tab + 1..].is_empty() {
+ return Err("staged native tree contains an empty path".to_owned());
+ }
+ let object_type = if mode == "160000" { "commit" } else { "blob" };
+ output.extend_from_slice(mode.as_bytes());
+ output.push(b' ');
+ output.extend_from_slice(object_type.as_bytes());
+ output.push(b' ');
+ output.extend_from_slice(oid.as_bytes());
+ output.push(b'\t');
+ output.extend_from_slice(&record[tab + 1..]);
+ output.push(0);
+ }
+ Ok(output)
+}
+
fn render_projections(catalog: &Catalog, digest: &str) -> Vec<GeneratedArtifact> {
let mut groups = BTreeMap::<&str, Vec<&str>>::new();
let mut active_groups = BTreeMap::<&str, Vec<&str>>::new();
@@ -1095,11 +1326,60 @@ fn sha256(bytes: &[u8]) -> String {
#[cfg(test)]
mod tests {
use super::*;
+ use tempfile::TempDir;
fn checked_in_catalog() -> Catalog {
parse_file(&crate::workspace_root(), CATALOG_RELATIVE).expect("checked-in catalog")
}
+ fn git(root: &Path, args: &[&str]) {
+ let output = Command::new("git")
+ .args(args)
+ .current_dir(root)
+ .output()
+ .expect("run git fixture command");
+ assert!(
+ output.status.success(),
+ "git {} failed: {}",
+ args.join(" "),
+ String::from_utf8_lossy(&output.stderr)
+ );
+ }
+
+ fn git_fixture() -> TempDir {
+ let root = tempfile::tempdir().expect("temporary git fixture");
+ git(root.path(), &["init", "--quiet"]);
+ git(root.path(), &["config", "user.name", "Catalog Test"]);
+ git(
+ root.path(),
+ &["config", "user.email", "catalog-test@example.invalid"],
+ );
+ fs::write(root.path().join("README.md"), "# Fixture\n").expect("baseline file");
+ git(root.path(), &["add", "README.md"]);
+ git(root.path(), &["commit", "--quiet", "-m", "baseline"]);
+ root
+ }
+
+ fn native_package<'a>(
+ catalog: &'a mut Catalog,
+ path: &str,
+ digest: &str,
+ ) -> &'a mut CatalogPackage {
+ let package = catalog
+ .package
+ .iter_mut()
+ .find(|package| package.name == "radroots_nostrdb")
+ .expect("private package fixture");
+ package.path = path.to_owned();
+ package.provenance_kind = "native".to_owned();
+ package.source_repository = None;
+ package.source_revision = None;
+ package.source_path = None;
+ package.source_tree_sha256 = None;
+ package.introduction_tree_sha256 = Some(digest.to_owned());
+ package
+ }
+
#[test]
fn public_inventory_is_exact() {
assert_eq!(expected_public_packages().len(), 19);
@@ -1117,6 +1397,114 @@ mod tests {
}
#[test]
+ fn provenance_kinds_are_disjoint_and_native_is_unpublished() {
+ let mut catalog = checked_in_catalog();
+ let imported = catalog
+ .package
+ .iter_mut()
+ .find(|package| package.name == "radroots_core")
+ .expect("imported fixture");
+ imported.source_revision = None;
+ assert!(validate_package_provenance(imported).is_err());
+
+ let mut catalog = checked_in_catalog();
+ let native = native_package(&mut catalog, "crates/nostrdb", &"a".repeat(64));
+ assert!(validate_package_provenance(native).is_ok());
+ native.source_revision = Some("a".repeat(40));
+ assert!(validate_package_provenance(native).is_err());
+
+ let mut catalog = checked_in_catalog();
+ let public = catalog
+ .package
+ .iter_mut()
+ .find(|package| package.name == "radroots_core")
+ .expect("public fixture");
+ public.provenance_kind = "native".to_owned();
+ public.source_repository = None;
+ public.source_revision = None;
+ public.source_path = None;
+ public.source_tree_sha256 = None;
+ public.introduction_tree_sha256 = Some("a".repeat(64));
+ assert!(validate_package_provenance(public).is_err());
+ }
+
+ #[test]
+ fn native_provenance_matches_staged_then_derived_introduction_tree() {
+ let root = git_fixture();
+ let package_root = root.path().join("crates/native_fixture");
+ fs::create_dir_all(&package_root).expect("native package root");
+ fs::write(
+ package_root.join("Cargo.toml"),
+ "[package]\nname='fixture'\n",
+ )
+ .expect("native manifest");
+ fs::write(package_root.join("lib.rs"), "pub fn initial() {}\n").expect("native source");
+ git(root.path(), &["add", "crates/native_fixture"]);
+
+ let staged =
+ staged_tree_digest(root.path(), "crates/native_fixture").expect("staged tree digest");
+ assert_eq!(
+ native_introducing_commit(root.path(), "crates/native_fixture")
+ .expect("precommit history"),
+ None
+ );
+ let mut catalog = checked_in_catalog();
+ let package = native_package(&mut catalog, "crates/native_fixture", &staged);
+ validate_native_source_provenance(package, root.path()).expect("staged provenance");
+
+ fs::write(package_root.join("lib.rs"), "unstaged change\n").expect("unstaged change");
+ validate_native_source_provenance(package, root.path())
+ .expect("only the staged introduction is authoritative before commit");
+ git(
+ root.path(),
+ &["commit", "--quiet", "-m", "add native package"],
+ );
+
+ let introducing = native_introducing_commit(root.path(), "crates/native_fixture")
+ .expect("committed history")
+ .expect("introducing commit");
+ assert_eq!(
+ committed_tree_digest(root.path(), &introducing, "crates/native_fixture")
+ .expect("committed introduction digest"),
+ staged
+ );
+ validate_native_source_provenance(package, root.path())
+ .expect("derived committed provenance");
+
+ git(root.path(), &["add", "crates/native_fixture/lib.rs"]);
+ git(
+ root.path(),
+ &["commit", "--quiet", "-m", "change native package"],
+ );
+ validate_native_source_provenance(package, root.path())
+ .expect("later changes do not rewrite introduction provenance");
+ package.introduction_tree_sha256 = Some("b".repeat(64));
+ assert!(validate_native_source_provenance(package, root.path()).is_err());
+ }
+
+ #[test]
+ fn native_precommit_provenance_requires_stage_zero_index_records() {
+ let root = git_fixture();
+ fs::create_dir_all(root.path().join("crates/native_fixture")).expect("native package root");
+ fs::write(
+ root.path().join("crates/native_fixture/lib.rs"),
+ "pub fn unstaged() {}\n",
+ )
+ .expect("unstaged native source");
+ assert!(staged_tree_digest(root.path(), "crates/native_fixture").is_err());
+
+ let oid = "a".repeat(40);
+ let conflicted = format!("100644 {oid} 1\tcrates/native_fixture/lib.rs\0");
+ assert!(canonical_staged_tree_records(conflicted.as_bytes()).is_err());
+
+ let intent_to_add = format!(
+ "100644 {} 0\tcrates/native_fixture/lib.rs\0",
+ "0".repeat(40)
+ );
+ assert!(canonical_staged_tree_records(intent_to_add.as_bytes()).is_err());
+ }
+
+ #[test]
fn generated_maps_are_sorted_and_digest_bound() {
let mut values = BTreeMap::from([("sdk", vec!["z", "a", "a"])]);
sort_map_values(&mut values);
diff --git a/tools/xtask/src/release_qualification.rs b/tools/xtask/src/release_qualification.rs
@@ -50,7 +50,7 @@ fn rustflags_with_warnings_denied() -> OsString {
}
fn feature_matrix(workspace_root: &Path) -> Result<Vec<CargoInvocation>, String> {
- let path = workspace_root.join("contracts/crates/catalog.v1.toml");
+ let path = workspace_root.join("contracts/crates/catalog.v2.toml");
let raw = fs::read_to_string(&path)
.map_err(|error| format!("failed to read {}: {error}", path.display()))?;
let catalog = toml::from_str::<Catalog>(&raw)
diff --git a/tools/xtask/src/target_qualification.rs b/tools/xtask/src/target_qualification.rs
@@ -73,7 +73,7 @@ fn load(workspace_root: &Path) -> Result<(TargetMatrix, Vec<String>), String> {
.map_err(|error| format!("failed to parse {}: {error}", matrix_path.display()))?;
validate(&matrix)?;
- let catalog_path = workspace_root.join("contracts/crates/catalog.v1.toml");
+ let catalog_path = workspace_root.join("contracts/crates/catalog.v2.toml");
let catalog = toml::from_str::<Catalog>(&read(&catalog_path)?)
.map_err(|error| format!("failed to parse {}: {error}", catalog_path.display()))?;
let mut packages = catalog