lib

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

commit 3fcace7e84036a9d247e95991a029bc078ab5a2a
parent 1162b1c3f2f8bc05d3616945751727123c233b53
Author: triesap <tyson@radroots.org>
Date:   Sun,  9 Aug 2026 03:59:20 +0000

catalog: add native introduction provenance

Diffstat:
MAGENTS.md | 12++++++++++++
MAGENT_INSTRUCTIONS.md | 12++++++++++++
Dcontracts/crates/catalog.v1.toml | 1624-------------------------------------------------------------------------------
Acontracts/crates/catalog.v2.toml | 1686+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mcontracts/crates/generated/package_groups.v1.toml | 2+-
Mcontracts/crates/generated/platform_inventory.v1.toml | 2+-
Mcontracts/crates/generated/release_inventory.v2.toml | 2+-
Mtools/xtask/src/build_control.rs | 4++--
Mtools/xtask/src/catalog.rs | 486+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
Mtools/xtask/src/release_qualification.rs | 2+-
Mtools/xtask/src/target_qualification.rs | 2+-
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