lib

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

commit 0550e24a7f5feeb3ba9b05ec16ea4dd6fa58e950
parent 70e46c2b7d89f3268cf60779fec16f82b289b114
Author: triesap <tyson@radroots.org>
Date:   Tue, 28 Jul 2026 18:38:59 +0000

release: freeze library package cohort

- Pin every lib workspace crate and exact internal dependency to 0.1.0-alpha.
- Preserve independent protocol, wire, schema, and SDK version authorities.
- Update architecture validation, release specifications, and deviation records.
- Refresh lockfile and generated manifests under the new package cohort.

Diffstat:
MCargo.lock | 116++++++++++++++++++++++++++++++++++++++++----------------------------------------
MCargo.toml | 118++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mcontracts/knowledge/knowledge_event_contract_manifest.v2.json | 4++--
Mcontracts/knowledge/knowledge_event_contract_manifest.v2.sha256 | 2+-
Mcontracts/releases/1.0.0-alpha.1.toml | 4++--
Mcrates/authority/Cargo.toml | 2+-
Mcrates/blossom/Cargo.toml | 2+-
Mcrates/blossom/tests/package_boundary.rs | 2+-
Mcrates/core/Cargo.toml | 2+-
Mcrates/event/Cargo.toml | 2+-
Mcrates/event_codec/Cargo.toml | 2+-
Mcrates/event_index/Cargo.toml | 2+-
Mcrates/event_store/Cargo.toml | 2+-
Mcrates/event_store/contracts/source_maintenance_v1.manifest.json | 20++++++++++----------
Mcrates/event_store/contracts/source_maintenance_v1.manifest.sha256 | 2+-
Mcrates/event_store/src/generated/source_maintenance_manifest.rs | 4++--
Mcrates/geocoder/Cargo.toml | 2+-
Mcrates/geonames/Cargo.toml | 2+-
Mcrates/identity/Cargo.toml | 2+-
Mcrates/log/Cargo.toml | 2+-
Mcrates/mesh/Cargo.toml | 2+-
Mcrates/mesh_agent_client/Cargo.toml | 2+-
Mcrates/mesh_agent_proto/Cargo.toml | 2+-
Mcrates/net/Cargo.toml | 2+-
Mcrates/nostr/Cargo.toml | 2+-
Mcrates/nostr_accounts/Cargo.toml | 2+-
Mcrates/nostr_connect/Cargo.toml | 2+-
Mcrates/nostr_runtime/Cargo.toml | 2+-
Mcrates/nostr_signer/Cargo.toml | 2+-
Mcrates/nostrdb/Cargo.toml | 2+-
Mcrates/outbox/Cargo.toml | 2+-
Mcrates/protected_store/Cargo.toml | 2+-
Mcrates/protocol/Cargo.toml | 2+-
Mcrates/protocol/tests/package_boundary.rs | 2+-
Mcrates/protocol_contract_v1/Cargo.toml | 2+-
Mcrates/replica_schema/Cargo.toml | 2+-
Mcrates/replica_store/Cargo.toml | 2+-
Mcrates/replica_sync/Cargo.toml | 2+-
Mcrates/runtime/Cargo.toml | 2+-
Mcrates/runtime_distribution/Cargo.toml | 2+-
Mcrates/runtime_manager/Cargo.toml | 2+-
Mcrates/runtime_paths/Cargo.toml | 2+-
Mcrates/runtime_store/Cargo.toml | 2+-
Mcrates/secret_vault/Cargo.toml | 2+-
Mcrates/secrets/Cargo.toml | 2+-
Mcrates/signing/Cargo.toml | 2+-
Mcrates/simplex_agent_proto/Cargo.toml | 2+-
Mcrates/simplex_agent_runtime/Cargo.toml | 2+-
Mcrates/simplex_agent_store/Cargo.toml | 2+-
Mcrates/simplex_app_store/Cargo.toml | 2+-
Mcrates/simplex_chat_proto/Cargo.toml | 2+-
Mcrates/simplex_interop_tests/Cargo.toml | 2+-
Mcrates/simplex_smp_crypto/Cargo.toml | 2+-
Mcrates/simplex_smp_proto/Cargo.toml | 2+-
Mcrates/simplex_smp_transport/Cargo.toml | 2+-
Mcrates/sql_core/Cargo.toml | 2+-
Mcrates/storage/Cargo.toml | 2+-
Mcrates/storage_sqlite/Cargo.toml | 2+-
Mcrates/sync/Cargo.toml | 2+-
Mcrates/test_fixtures/Cargo.toml | 2+-
Mcrates/trade/Cargo.toml | 2+-
Mcrates/trade_sp1_guest/Cargo.toml | 2+-
Mcrates/trade_sp1_host/Cargo.toml | 2+-
Mcrates/transport/Cargo.toml | 2+-
Mcrates/transport_nostr/Cargo.toml | 2+-
Mcrates/transport_publish_protocol/Cargo.toml | 2+-
Mcrates/transport_reticulum/Cargo.toml | 2+-
Mdocs/implementation/DEVIATIONS.md | 1+
Mdocs/implementation/TRACEABILITY.md | 1+
Mdocs/implementation/deviations.toml | 35+++++++++++++++++++++++++++++++++++
Mdocs/specs/radroots_crates_release_v1.md | 25++++++++++++++++++++++---
Mdocs/specs/radroots_crates_release_v1.sha256 | 6+++---
Mdocs/specs/radroots_crates_release_v1.toml | 3++-
Mdocs/specs/radroots_crates_release_v1_inventory.csv | 34+++++++++++++++++-----------------
Mtools/xtask/Cargo.toml | 2+-
Mtools/xtask/src/architecture.rs | 41++++++++++++++++++++++++++++++-----------
Mtools/xtask/src/contract.rs | 73++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------
Mtools/xtask/src/contract/food_availability_projection.rs | 2+-
Mtools/xtask/src/contract/nip09_reconciliation.rs | 18+++++++++---------
Mtools/xtask/src/coverage.rs | 2+-
80 files changed, 369 insertions(+), 262 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock @@ -4496,7 +4496,7 @@ checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" [[package]] name = "radroots_authority" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "radroots_event", "radroots_identity", @@ -4506,7 +4506,7 @@ dependencies = [ [[package]] name = "radroots_blossom" -version = "0.1.0" +version = "0.1.0-alpha" dependencies = [ "hex", "mediatype", @@ -4519,7 +4519,7 @@ dependencies = [ [[package]] name = "radroots_core" -version = "0.1.0" +version = "0.1.0-alpha" dependencies = [ "dto_bindgen", "rust_decimal", @@ -4529,7 +4529,7 @@ dependencies = [ [[package]] name = "radroots_event" -version = "0.1.0" +version = "0.1.0-alpha" dependencies = [ "dto_bindgen", "hex", @@ -4547,7 +4547,7 @@ dependencies = [ [[package]] name = "radroots_event_codec" -version = "0.1.0" +version = "0.1.0-alpha" dependencies = [ "hex", "nostr", @@ -4563,7 +4563,7 @@ dependencies = [ [[package]] name = "radroots_event_index" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "dto_bindgen", "dto_bindgen_core", @@ -4573,7 +4573,7 @@ dependencies = [ [[package]] name = "radroots_event_store" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "getrandom 0.2.17", "hex", @@ -4594,7 +4594,7 @@ dependencies = [ [[package]] name = "radroots_geocoder" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "futures-executor", "hex", @@ -4611,11 +4611,11 @@ dependencies = [ [[package]] name = "radroots_geonames" -version = "0.1.0" +version = "0.1.0-alpha" [[package]] name = "radroots_identity" -version = "0.1.0" +version = "0.1.0-alpha" dependencies = [ "k256", "serde", @@ -4625,7 +4625,7 @@ dependencies = [ [[package]] name = "radroots_log" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "chrono", "serde_json", @@ -4637,7 +4637,7 @@ dependencies = [ [[package]] name = "radroots_mesh" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "radroots_transport", "serde", @@ -4646,7 +4646,7 @@ dependencies = [ [[package]] name = "radroots_mesh_agent_client" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "radroots_mesh", "radroots_mesh_agent_proto", @@ -4657,14 +4657,14 @@ dependencies = [ [[package]] name = "radroots_mesh_agent_proto" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "sha2", ] [[package]] name = "radroots_net" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "directories", "futures", @@ -4688,7 +4688,7 @@ dependencies = [ [[package]] name = "radroots_nostr" -version = "0.1.0" +version = "0.1.0-alpha" dependencies = [ "base64 0.22.1", "nostr", @@ -4707,7 +4707,7 @@ dependencies = [ [[package]] name = "radroots_nostr_accounts" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "nostr", "radroots_identity", @@ -4725,7 +4725,7 @@ dependencies = [ [[package]] name = "radroots_nostr_connect" -version = "0.1.0" +version = "0.1.0-alpha" dependencies = [ "nostr", "serde", @@ -4737,7 +4737,7 @@ dependencies = [ [[package]] name = "radroots_nostr_runtime" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "futures", "nostr", @@ -4748,7 +4748,7 @@ dependencies = [ [[package]] name = "radroots_nostr_signer" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "hex", "nostr", @@ -4768,7 +4768,7 @@ dependencies = [ [[package]] name = "radroots_nostrdb" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "futures", "hex", @@ -4784,7 +4784,7 @@ dependencies = [ [[package]] name = "radroots_outbox" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "hex", "radroots_event", @@ -4803,7 +4803,7 @@ dependencies = [ [[package]] name = "radroots_protected_store" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "chacha20poly1305", "getrandom 0.2.17", @@ -4816,7 +4816,7 @@ dependencies = [ [[package]] name = "radroots_protocol" -version = "0.1.0" +version = "0.1.0-alpha" dependencies = [ "serde", "serde_json", @@ -4824,7 +4824,7 @@ dependencies = [ [[package]] name = "radroots_protocol_contract_v1" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "radroots_protocol", "serde", @@ -4833,7 +4833,7 @@ dependencies = [ [[package]] name = "radroots_replica_schema" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "dto_bindgen_core", "serde", @@ -4842,7 +4842,7 @@ dependencies = [ [[package]] name = "radroots_replica_store" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "hex", "radroots_replica_schema", @@ -4854,7 +4854,7 @@ dependencies = [ [[package]] name = "radroots_replica_sync" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "base64 0.22.1", "hex", @@ -4875,7 +4875,7 @@ dependencies = [ [[package]] name = "radroots_runtime" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "anyhow", "chacha20poly1305", @@ -4901,7 +4901,7 @@ dependencies = [ [[package]] name = "radroots_runtime_distribution" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "serde", "thiserror 1.0.69", @@ -4910,7 +4910,7 @@ dependencies = [ [[package]] name = "radroots_runtime_manager" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "flate2", "radroots_runtime_paths", @@ -4923,7 +4923,7 @@ dependencies = [ [[package]] name = "radroots_runtime_paths" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "serde", "thiserror 1.0.69", @@ -4931,7 +4931,7 @@ dependencies = [ [[package]] name = "radroots_runtime_store" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "radroots_sql_core", "serde", @@ -4941,22 +4941,22 @@ dependencies = [ [[package]] name = "radroots_secret_vault" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "keyring", ] [[package]] name = "radroots_secrets" -version = "0.1.0" +version = "0.1.0-alpha" [[package]] name = "radroots_signing" -version = "0.1.0" +version = "0.1.0-alpha" [[package]] name = "radroots_simplex_agent_proto" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "base64 0.22.1", "radroots_simplex_smp_crypto", @@ -4965,7 +4965,7 @@ dependencies = [ [[package]] name = "radroots_simplex_agent_runtime" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "base64 0.22.1", "radroots_simplex_agent_proto", @@ -4980,7 +4980,7 @@ dependencies = [ [[package]] name = "radroots_simplex_agent_store" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "chacha20poly1305", "getrandom 0.2.17", @@ -4998,7 +4998,7 @@ dependencies = [ [[package]] name = "radroots_simplex_app_store" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "hex", "serde", @@ -5007,7 +5007,7 @@ dependencies = [ [[package]] name = "radroots_simplex_chat_proto" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "base64 0.22.1", "serde", @@ -5017,7 +5017,7 @@ dependencies = [ [[package]] name = "radroots_simplex_interop_tests" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "radroots_simplex_agent_proto", "radroots_simplex_agent_runtime", @@ -5030,7 +5030,7 @@ dependencies = [ [[package]] name = "radroots_simplex_smp_crypto" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "aes-gcm", "base64 0.22.1", @@ -5050,14 +5050,14 @@ dependencies = [ [[package]] name = "radroots_simplex_smp_proto" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "base64 0.22.1", ] [[package]] name = "radroots_simplex_smp_transport" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "base64 0.22.1", "radroots_simplex_smp_crypto", @@ -5070,7 +5070,7 @@ dependencies = [ [[package]] name = "radroots_sql_core" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "chrono", "futures-executor", @@ -5082,26 +5082,26 @@ dependencies = [ [[package]] name = "radroots_storage" -version = "0.1.0" +version = "0.1.0-alpha" [[package]] name = "radroots_storage_sqlite" -version = "0.1.0" +version = "0.1.0-alpha" [[package]] name = "radroots_sync" -version = "0.1.0" +version = "0.1.0-alpha" [[package]] name = "radroots_test_fixtures" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "radroots_event", ] [[package]] name = "radroots_trade" -version = "0.1.0" +version = "0.1.0-alpha" dependencies = [ "base64 0.22.1", "dto_bindgen", @@ -5127,7 +5127,7 @@ dependencies = [ [[package]] name = "radroots_trade_sp1_guest" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "serde", "serde_json", @@ -5138,7 +5138,7 @@ dependencies = [ [[package]] name = "radroots_trade_sp1_host" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "base64 0.22.1", "bincode", @@ -5157,7 +5157,7 @@ dependencies = [ [[package]] name = "radroots_transport" -version = "0.1.0" +version = "0.1.0-alpha" dependencies = [ "futures", "serde", @@ -5167,7 +5167,7 @@ dependencies = [ [[package]] name = "radroots_transport_nostr" -version = "0.1.0" +version = "0.1.0-alpha" dependencies = [ "futures", "nostr", @@ -5185,7 +5185,7 @@ dependencies = [ [[package]] name = "radroots_transport_publish_protocol" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "radroots_protocol", "radroots_transport", @@ -5195,7 +5195,7 @@ dependencies = [ [[package]] name = "radroots_transport_reticulum" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "futures", "radroots_transport", @@ -9017,7 +9017,7 @@ dependencies = [ [[package]] name = "xtask" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" dependencies = [ "dto_bindgen_core", "fs2", diff --git a/Cargo.toml b/Cargo.toml @@ -62,7 +62,7 @@ members = [ resolver = "3" [workspace.package] -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition = "2024" rust-version = "1.97.1" license = "MIT OR Apache-2.0" @@ -72,7 +72,7 @@ readme = "README" authors = ["Tyson Lupul <tyson@radroots.org>"] [workspace.metadata.radroots.public-package] -version = "0.1.0" +version = "0.1.0-alpha" authors = ["Tyson Lupul <tyson@radroots.org>"] readme = "README.md" @@ -91,63 +91,63 @@ unimplemented = "deny" [workspace.dependencies] dto_bindgen = { version = "0.1.0" } dto_bindgen_core = { version = "0.1.0" } -radroots_core = { package = "radroots_core", path = "crates/core", version = "=0.1.0", default-features = false } -radroots_event = { package = "radroots_event", path = "crates/event", version = "=0.1.0", default-features = false } -radroots_event_store = { path = "crates/event_store", version = "=1.0.0-alpha.1", default-features = false } -radroots_event_codec = { package = "radroots_event_codec", path = "crates/event_codec", version = "=0.1.0", default-features = false } -radroots_event_index = { path = "crates/event_index", version = "=1.0.0-alpha.1", default-features = false } -radroots_authority = { path = "crates/authority", version = "=1.0.0-alpha.1", default-features = false } -radroots_blossom = { package = "radroots_blossom", path = "crates/blossom", version = "=0.1.0", default-features = false } -radroots_geocoder = { path = "crates/geocoder", version = "=1.0.0-alpha.1" } -radroots_identity = { package = "radroots_identity", path = "crates/identity", version = "=0.1.0", default-features = false } -radroots_runtime_store = { path = "crates/runtime_store", version = "=1.0.0-alpha.1", default-features = false } -radroots_nostr = { package = "radroots_nostr", path = "crates/nostr", version = "=0.1.0", default-features = false } -radroots_nostr_accounts = { path = "crates/nostr_accounts", version = "=1.0.0-alpha.1", default-features = false } -radroots_nostr_connect = { package = "radroots_nostr_connect", path = "crates/nostr_connect", version = "=0.1.0", default-features = false } -radroots_nostr_signer = { path = "crates/nostr_signer", version = "=1.0.0-alpha.1", default-features = false } -radroots_nostrdb = { path = "crates/nostrdb", version = "=1.0.0-alpha.1", default-features = false } -radroots_protocol = { package = "radroots_protocol", path = "crates/protocol", version = "=0.1.0", default-features = false } -radroots_runtime = { path = "crates/runtime", version = "=1.0.0-alpha.1", default-features = false } -radroots_runtime_paths = { path = "crates/runtime_paths", version = "=1.0.0-alpha.1", default-features = false } -radroots_runtime_distribution = { path = "crates/runtime_distribution", version = "=1.0.0-alpha.1", default-features = false } -radroots_runtime_manager = { path = "crates/runtime_manager", version = "=1.0.0-alpha.1", default-features = false } -radroots_log = { path = "crates/log", version = "=1.0.0-alpha.1", default-features = false } -radroots_net = { path = "crates/net", version = "=1.0.0-alpha.1", default-features = false } -radroots_nostr_runtime = { path = "crates/nostr_runtime", version = "=1.0.0-alpha.1", default-features = false } -radroots_outbox = { path = "crates/outbox", version = "=1.0.0-alpha.1", default-features = false } -radroots_protocol_contract_v1 = { path = "crates/protocol_contract_v1", version = "=1.0.0-alpha.1", default-features = false } -radroots_transport_publish_protocol = { path = "crates/transport_publish_protocol", version = "=1.0.0-alpha.1", default-features = false } -radroots_transport_nostr = { package = "radroots_transport_nostr", path = "crates/transport_nostr", version = "=0.1.0", default-features = false } -radroots_transport_reticulum = { path = "crates/transport_reticulum", version = "=1.0.0-alpha.1", default-features = false } -radroots_simplex_agent_proto = { path = "crates/simplex_agent_proto", version = "=1.0.0-alpha.1", default-features = false } -radroots_simplex_agent_runtime = { path = "crates/simplex_agent_runtime", version = "=1.0.0-alpha.1", default-features = false } -radroots_simplex_agent_store = { path = "crates/simplex_agent_store", version = "=1.0.0-alpha.1", default-features = false } -radroots_simplex_chat_proto = { path = "crates/simplex_chat_proto", version = "=1.0.0-alpha.1", default-features = false } -radroots_simplex_interop_tests = { path = "crates/simplex_interop_tests", version = "=1.0.0-alpha.1", default-features = false } -radroots_simplex_smp_crypto = { path = "crates/simplex_smp_crypto", version = "=1.0.0-alpha.1", default-features = false } -radroots_simplex_smp_proto = { path = "crates/simplex_smp_proto", version = "=1.0.0-alpha.1", default-features = false } -radroots_simplex_smp_transport = { path = "crates/simplex_smp_transport", version = "=1.0.0-alpha.1", default-features = false } -radroots_sql_core = { path = "crates/sql_core", version = "=1.0.0-alpha.1", default-features = false } -radroots_test_fixtures = { path = "crates/test_fixtures", version = "=1.0.0-alpha.1" } -radroots_replica_schema = { path = "crates/replica_schema", version = "=1.0.0-alpha.1", default-features = false } -radroots_replica_sync = { path = "crates/replica_sync", version = "=1.0.0-alpha.1", default-features = false } -radroots_replica_store = { path = "crates/replica_store", version = "=1.0.0-alpha.1", default-features = false } -radroots_geonames = { package = "radroots_geonames", path = "crates/geonames", version = "=0.1.0", default-features = false } -radroots_secrets = { package = "radroots_secrets", path = "crates/secrets", version = "=0.1.0", default-features = false } -radroots_signing = { package = "radroots_signing", path = "crates/signing", version = "=0.1.0", default-features = false } -radroots_storage = { package = "radroots_storage", path = "crates/storage", version = "=0.1.0", default-features = false } -radroots_storage_sqlite = { package = "radroots_storage_sqlite", path = "crates/storage_sqlite", version = "=0.1.0", default-features = false } -radroots_sync = { package = "radroots_sync", path = "crates/sync", version = "=0.1.0", default-features = false } -radroots_trade = { package = "radroots_trade", path = "crates/trade", version = "=0.1.0", default-features = false } -radroots_transport = { package = "radroots_transport", path = "crates/transport", version = "=0.1.0", default-features = false } -radroots_mesh = { path = "crates/mesh", version = "=1.0.0-alpha.1", default-features = false } -radroots_mesh_agent_client = { path = "crates/mesh_agent_client", version = "=1.0.0-alpha.1", default-features = false } -radroots_mesh_agent_proto = { path = "crates/mesh_agent_proto", version = "=1.0.0-alpha.1", default-features = false } -radroots_protected_store = { path = "crates/protected_store", version = "=1.0.0-alpha.1", default-features = false } -radroots_secret_vault = { path = "crates/secret_vault", version = "=1.0.0-alpha.1", default-features = false } -radroots_simplex_app_store = { path = "crates/simplex_app_store", version = "=1.0.0-alpha.1", default-features = false } -radroots_trade_sp1_guest = { path = "crates/trade_sp1_guest", version = "=1.0.0-alpha.1", default-features = false } -radroots_trade_sp1_host = { path = "crates/trade_sp1_host", version = "=1.0.0-alpha.1", default-features = false } +radroots_core = { package = "radroots_core", path = "crates/core", version = "=0.1.0-alpha", default-features = false } +radroots_event = { package = "radroots_event", path = "crates/event", version = "=0.1.0-alpha", default-features = false } +radroots_event_store = { path = "crates/event_store", version = "=0.1.0-alpha", default-features = false } +radroots_event_codec = { package = "radroots_event_codec", path = "crates/event_codec", version = "=0.1.0-alpha", default-features = false } +radroots_event_index = { path = "crates/event_index", version = "=0.1.0-alpha", default-features = false } +radroots_authority = { path = "crates/authority", version = "=0.1.0-alpha", default-features = false } +radroots_blossom = { package = "radroots_blossom", path = "crates/blossom", version = "=0.1.0-alpha", default-features = false } +radroots_geocoder = { path = "crates/geocoder", version = "=0.1.0-alpha" } +radroots_identity = { package = "radroots_identity", path = "crates/identity", version = "=0.1.0-alpha", default-features = false } +radroots_runtime_store = { path = "crates/runtime_store", version = "=0.1.0-alpha", default-features = false } +radroots_nostr = { package = "radroots_nostr", path = "crates/nostr", version = "=0.1.0-alpha", default-features = false } +radroots_nostr_accounts = { path = "crates/nostr_accounts", version = "=0.1.0-alpha", default-features = false } +radroots_nostr_connect = { package = "radroots_nostr_connect", path = "crates/nostr_connect", version = "=0.1.0-alpha", default-features = false } +radroots_nostr_signer = { path = "crates/nostr_signer", version = "=0.1.0-alpha", default-features = false } +radroots_nostrdb = { path = "crates/nostrdb", version = "=0.1.0-alpha", default-features = false } +radroots_protocol = { package = "radroots_protocol", path = "crates/protocol", version = "=0.1.0-alpha", default-features = false } +radroots_runtime = { path = "crates/runtime", version = "=0.1.0-alpha", default-features = false } +radroots_runtime_paths = { path = "crates/runtime_paths", version = "=0.1.0-alpha", default-features = false } +radroots_runtime_distribution = { path = "crates/runtime_distribution", version = "=0.1.0-alpha", default-features = false } +radroots_runtime_manager = { path = "crates/runtime_manager", version = "=0.1.0-alpha", default-features = false } +radroots_log = { path = "crates/log", version = "=0.1.0-alpha", default-features = false } +radroots_net = { path = "crates/net", version = "=0.1.0-alpha", default-features = false } +radroots_nostr_runtime = { path = "crates/nostr_runtime", version = "=0.1.0-alpha", default-features = false } +radroots_outbox = { path = "crates/outbox", version = "=0.1.0-alpha", default-features = false } +radroots_protocol_contract_v1 = { path = "crates/protocol_contract_v1", version = "=0.1.0-alpha", default-features = false } +radroots_transport_publish_protocol = { path = "crates/transport_publish_protocol", version = "=0.1.0-alpha", default-features = false } +radroots_transport_nostr = { package = "radroots_transport_nostr", path = "crates/transport_nostr", version = "=0.1.0-alpha", default-features = false } +radroots_transport_reticulum = { path = "crates/transport_reticulum", version = "=0.1.0-alpha", default-features = false } +radroots_simplex_agent_proto = { path = "crates/simplex_agent_proto", version = "=0.1.0-alpha", default-features = false } +radroots_simplex_agent_runtime = { path = "crates/simplex_agent_runtime", version = "=0.1.0-alpha", default-features = false } +radroots_simplex_agent_store = { path = "crates/simplex_agent_store", version = "=0.1.0-alpha", default-features = false } +radroots_simplex_chat_proto = { path = "crates/simplex_chat_proto", version = "=0.1.0-alpha", default-features = false } +radroots_simplex_interop_tests = { path = "crates/simplex_interop_tests", version = "=0.1.0-alpha", default-features = false } +radroots_simplex_smp_crypto = { path = "crates/simplex_smp_crypto", version = "=0.1.0-alpha", default-features = false } +radroots_simplex_smp_proto = { path = "crates/simplex_smp_proto", version = "=0.1.0-alpha", default-features = false } +radroots_simplex_smp_transport = { path = "crates/simplex_smp_transport", version = "=0.1.0-alpha", default-features = false } +radroots_sql_core = { path = "crates/sql_core", version = "=0.1.0-alpha", default-features = false } +radroots_test_fixtures = { path = "crates/test_fixtures", version = "=0.1.0-alpha" } +radroots_replica_schema = { path = "crates/replica_schema", version = "=0.1.0-alpha", default-features = false } +radroots_replica_sync = { path = "crates/replica_sync", version = "=0.1.0-alpha", default-features = false } +radroots_replica_store = { path = "crates/replica_store", version = "=0.1.0-alpha", default-features = false } +radroots_geonames = { package = "radroots_geonames", path = "crates/geonames", version = "=0.1.0-alpha", default-features = false } +radroots_secrets = { package = "radroots_secrets", path = "crates/secrets", version = "=0.1.0-alpha", default-features = false } +radroots_signing = { package = "radroots_signing", path = "crates/signing", version = "=0.1.0-alpha", default-features = false } +radroots_storage = { package = "radroots_storage", path = "crates/storage", version = "=0.1.0-alpha", default-features = false } +radroots_storage_sqlite = { package = "radroots_storage_sqlite", path = "crates/storage_sqlite", version = "=0.1.0-alpha", default-features = false } +radroots_sync = { package = "radroots_sync", path = "crates/sync", version = "=0.1.0-alpha", default-features = false } +radroots_trade = { package = "radroots_trade", path = "crates/trade", version = "=0.1.0-alpha", default-features = false } +radroots_transport = { package = "radroots_transport", path = "crates/transport", version = "=0.1.0-alpha", default-features = false } +radroots_mesh = { path = "crates/mesh", version = "=0.1.0-alpha", default-features = false } +radroots_mesh_agent_client = { path = "crates/mesh_agent_client", version = "=0.1.0-alpha", default-features = false } +radroots_mesh_agent_proto = { path = "crates/mesh_agent_proto", version = "=0.1.0-alpha", default-features = false } +radroots_protected_store = { path = "crates/protected_store", version = "=0.1.0-alpha", default-features = false } +radroots_secret_vault = { path = "crates/secret_vault", version = "=0.1.0-alpha", default-features = false } +radroots_simplex_app_store = { path = "crates/simplex_app_store", version = "=0.1.0-alpha", default-features = false } +radroots_trade_sp1_guest = { path = "crates/trade_sp1_guest", version = "=0.1.0-alpha", default-features = false } +radroots_trade_sp1_host = { path = "crates/trade_sp1_host", version = "=0.1.0-alpha", default-features = false } anyhow = { version = "1" } aes-gcm = { version = "0.10.3", default-features = false, features = [ diff --git a/contracts/knowledge/knowledge_event_contract_manifest.v2.json b/contracts/knowledge/knowledge_event_contract_manifest.v2.json @@ -1,8 +1,8 @@ { "schema_version": 2, "registry_version": 7, - "radroots_event_version": "0.1.0", - "radroots_event_codec_version": "0.1.0", + "radroots_event_version": "0.1.0-alpha", + "radroots_event_codec_version": "0.1.0-alpha", "contract_count": 11, "contracts": [ { diff --git a/contracts/knowledge/knowledge_event_contract_manifest.v2.sha256 b/contracts/knowledge/knowledge_event_contract_manifest.v2.sha256 @@ -1 +1 @@ -4c7143b04c4c2113bfc7c992daf727ca7eed860fda107a1afd394a0063207d59 +d75fe077862204dc68c1c2098ddb23ccd4d3829befd6178f52ad21f8a5395a24 diff --git a/contracts/releases/1.0.0-alpha.1.toml b/contracts/releases/1.0.0-alpha.1.toml @@ -87,10 +87,10 @@ semver_impacts = [ summary = "Decouple replica backup compatibility from package SemVer and retain restore support for schema-compatible 0.1.0-alpha.2 backups." [[changes]] -id = "workspace-version-lockstep" +id = "library-crate-version-authority" classification = "fix" semver_impacts = ["fix_packaging_metadata"] -summary = "Move the workspace and event contract to the 1.0.0-alpha.1 version cohort with exact internal requirements." +summary = "Pin every library workspace crate and internal requirement to the authoritative 0.1.0-alpha Cargo cohort independently of protocol contract versions." [[changes]] id = "general-verified-event-boundary" diff --git a/crates/authority/Cargo.toml b/crates/authority/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_authority" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/blossom/Cargo.toml b/crates/blossom/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_blossom" publish = false -version = "0.1.0" +version = "0.1.0-alpha" edition.workspace = true authors.workspace = true rust-version.workspace = true diff --git a/crates/blossom/tests/package_boundary.rs b/crates/blossom/tests/package_boundary.rs @@ -18,7 +18,7 @@ const ROOT: &str = include_str!("../src/lib.rs"); #[test] fn manifest_has_final_identity_features_and_no_radroots_dependencies() { assert!(MANIFEST.contains("name = \"radroots_blossom\"")); - assert!(MANIFEST.contains("version = \"0.1.0\"")); + assert!(MANIFEST.contains("version = \"0.1.0-alpha\"")); assert!(MANIFEST.contains("publish = false")); assert!(MANIFEST.contains("[lib]\nname = \"radroots_blossom\"")); assert!(MANIFEST.contains("default = [\"std\", \"serde\"]")); diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_core" publish = false -version = "0.1.0" +version = "0.1.0-alpha" edition.workspace = true authors.workspace = true rust-version.workspace = true diff --git a/crates/event/Cargo.toml b/crates/event/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_event" publish = false -version = "0.1.0" +version = "0.1.0-alpha" edition.workspace = true authors.workspace = true rust-version.workspace = true diff --git a/crates/event_codec/Cargo.toml b/crates/event_codec/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_event_codec" publish = false -version = "0.1.0" +version = "0.1.0-alpha" edition.workspace = true authors.workspace = true rust-version.workspace = true diff --git a/crates/event_index/Cargo.toml b/crates/event_index/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_event_index" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/event_store/Cargo.toml b/crates/event_store/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_event_store" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/event_store/contracts/source_maintenance_v1.manifest.json b/crates/event_store/contracts/source_maintenance_v1.manifest.json @@ -152,8 +152,8 @@ { "role": "workspace_dependency_authority", "path": "Cargo.toml", - "byte_length": 12385, - "sha256": "c53c5c5a464267d7df850e03fdfa99dcde0b469972cf921f9b81c18b52a9c4b2", + "byte_length": 12411, + "sha256": "cad96f080b0cc9ac7ffda703c8807540c9cf89f47a2299b141e6e7949714bf9f", "hash_algorithm": "sha256_bytes_v1" }, { @@ -523,8 +523,8 @@ { "role": "event_store_dependency_authority", "path": "crates/event_store/Cargo.toml", - "byte_length": 1569, - "sha256": "30f43004bcf0ffa9b9b6f338cba8c56be0265bc1cee708e93f7b7dc54ed60f9c", + "byte_length": 1567, + "sha256": "46e03d3c758e1116638021a0499dfa588b4266498e0d50cfa758f9bef9bcfeb3", "hash_algorithm": "sha256_bytes_v1" }, { @@ -677,15 +677,15 @@ { "role": "predecessor_successor_governance", "path": "tools/xtask/src/contract/food_availability_projection.rs", - "byte_length": 197131, - "sha256": "6b71c927b41404f633dfbd0f8e321dcdab933285a196671f27046c0c15d55434", + "byte_length": 197137, + "sha256": "78db6c9c85e2f58c7924f61ab5cef67e8994e703bbbeb222a721e5677b229c56", "hash_algorithm": "sha256_bytes_v1" }, { "role": "transitive_predecessor_membership_governance", "path": "tools/xtask/src/contract/nip09_reconciliation.rs", - "byte_length": 836131, - "sha256": "af71c0172eb214f10a615fc867e309cb6d07780a0dc583858a42c617e10cea83", + "byte_length": 836171, + "sha256": "c92849e87248e45b5bea66f387d5aaa113de631ff8cd49aa673fac1faf023624", "hash_algorithm": "sha256_bytes_v1" }, { @@ -698,8 +698,8 @@ { "role": "contract_command_authority", "path": "tools/xtask/src/contract.rs", - "byte_length": 505562, - "sha256": "bdd8eb7614454e456d57d458ae55534cb8360eebd9b060267549b49978930ef9", + "byte_length": 506264, + "sha256": "035157c6731989cf79ba70a6b4517c5fb5f9443a795f81f817e7abcfabc718f0", "hash_algorithm": "sha256_bytes_v1" }, { diff --git a/crates/event_store/contracts/source_maintenance_v1.manifest.sha256 b/crates/event_store/contracts/source_maintenance_v1.manifest.sha256 @@ -1 +1 @@ -d07bf308df331e4768312d746e0a5b0e4ec3b4279181f10f7cf6cc76827eef1b +a5ac463d827d19b59b27558bca7552b17b463b6c325fa26faa96f46b434e2a11 diff --git a/crates/event_store/src/generated/source_maintenance_manifest.rs b/crates/event_store/src/generated/source_maintenance_manifest.rs @@ -1,8 +1,8 @@ // @generated by `cargo xtask contract source-maintenance-manifest --write`; do not edit. -pub(crate) const SOURCE_MAINTENANCE_MANIFEST_JSON: &str = "{\n \"schema_version\": 1,\n \"contract_id\": \"radroots_event_store.source_maintenance_v1\",\n \"hook_id\": \"source_maintenance_v1\",\n \"manifest_schema\": {\n \"path\": \"crates/event_store/contracts/source_maintenance_v1.manifest.schema.json\",\n \"byte_length\": 12315,\n \"sha256\": \"96ea98a5abf3348b61565954cd34f2c622411d8dd34205ef04134bbe0e3d3f2b\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n \"predecessor\": {\n \"hook_id\": \"food_availability_projection_v1\",\n \"manifest\": {\n \"path\": \"crates/event_store/contracts/food_availability_projection_v1.manifest.json\",\n \"byte_length\": 17455,\n \"sha256\": \"02dfe1b450fbdac16e718888215b4dd5c85d8975440fa21e8f439fb24c2b2990\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n }\n },\n \"migration\": {\n \"version\": 4,\n \"name\": \"source_maintenance\",\n \"up\": {\n \"path\": \"crates/event_store/migrations/0004_source_maintenance.up.sql\",\n \"byte_length\": 19841,\n \"sha256\": \"ab2724188f8d08c897eebea2533a635e7c74282a25e84e4c0c37e78b08837a43\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n \"down\": {\n \"path\": \"crates/event_store/migrations/0004_source_maintenance.down.sql\",\n \"byte_length\": 5172,\n \"sha256\": \"fe44fd53c51545c08ea479b385e6781079dab70fc63da2a3c205d727a00ce860\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n \"schema_sha256\": \"074f85b663444ac150239ecd8441ea4a96ad83a798a55e22d2e5e2f7ee943a8c\",\n \"catalog\": {\n \"objects\": [\n \"radroots_event_store_source_capacity_delete_guard\",\n \"radroots_event_store_source_capacity_insert_guard\",\n \"radroots_event_store_source_capacity_marker_close_guard\",\n \"radroots_event_store_source_capacity_update_guard\",\n \"radroots_event_store_source_capacity_v1\",\n \"radroots_event_store_source_generation_capacity_advance\",\n \"radroots_event_store_source_generation_capacity_guard\"\n ],\n \"replaced_objects\": [\n \"radroots_event_store_food_availability_image_delete_guard\",\n \"radroots_event_store_food_availability_projection_delete_guard\",\n \"radroots_event_store_source_rebuild_marker_insert_guard\"\n ],\n \"tables\": [\n \"radroots_event_store_source_capacity_v1\"\n ],\n \"fts5_tables\": []\n }\n },\n \"source_maintenance\": {\n \"version\": 1,\n \"event_contract_registry_version\": 7,\n \"capacity_authority_id\": \"radroots_event_store_source_capacity_v1\",\n \"accounting\": {\n \"algorithm\": \"sqlite_cast_blob_octet_sum_v1\",\n \"raw_event_columns\": [\n \"event_id\",\n \"pubkey\",\n \"tags_json\",\n \"content\",\n \"sig\",\n \"raw_json\"\n ],\n \"raw_tag_columns\": [\n \"event_id\",\n \"tag_name\",\n \"tag_value\",\n \"tag_json\"\n ],\n \"nullable_raw_tag_columns\": [\n \"tag_value\"\n ]\n },\n \"limits\": {\n \"raw_events\": 25000,\n \"raw_tags\": 250000,\n \"raw_event_text_bytes\": 67108864,\n \"raw_tag_text_bytes\": 33554432,\n \"retained_source_generations\": 8\n },\n \"reopen_validation\": {\n \"mode\": \"bounded_full_raw_recount_v1\",\n \"raw_event_rejection_scan_bound\": 25001,\n \"raw_tag_rejection_scan_bound\": 250001,\n \"generation_history_validation\": \"bounded_count_plus_active_ordinal_v1\",\n \"retained_generation_rejection_scan_bound\": 9\n },\n \"rebuild_seal\": {\n \"nip09_hook_id\": \"nip09_reconciliation_v1\",\n \"nip09_manifest_sha256\": \"74af832420ffbaa9805e89df3c0b34f126a443e1598f757e3372f407f9003b77\",\n \"food_hook_id\": \"food_availability_projection_v1\",\n \"food_manifest_sha256\": \"02dfe1b450fbdac16e718888215b4dd5c85d8975440fa21e8f439fb24c2b2990\",\n \"food_scope_fingerprint_sha256\": \"8b63c5ddc48a2cc7db69295238b96d5f814dba50427c80b4d0079f061e6d3de0\",\n \"active_generation_authority\": \"radroots_event_store_source_state\",\n \"marker_close_authority\": \"radroots_event_store_source_capacity_marker_close_guard\"\n }\n },\n \"entry_points\": [\n {\n \"role\": \"migration_registry\",\n \"rust_path\": \"radroots_event_store::migrations::EVENT_STORE_MIGRATIONS[3]\"\n },\n {\n \"role\": \"migration_apply_hook\",\n \"rust_path\": \"radroots_event_store::schema::apply_migration_hook\"\n },\n {\n \"role\": \"migration_validation_hook\",\n \"rust_path\": \"radroots_event_store::schema::validate_migration_hook_state\"\n },\n {\n \"role\": \"capacity_query\",\n \"rust_path\": \"radroots_event_store::RadrootsEventStore::source_capacity_v1\"\n },\n {\n \"role\": \"raw_append_preflight\",\n \"rust_path\": \"radroots_event_store::source_maintenance_v1::preflight_unique_raw_source_append_v1\"\n },\n {\n \"role\": \"raw_append_advance\",\n \"rust_path\": \"radroots_event_store::source_maintenance_v1::advance_source_capacity_after_insert_v1\"\n },\n {\n \"role\": \"generation_append_preflight\",\n \"rust_path\": \"radroots_event_store::source_maintenance_v1::preflight_source_generation_append_v1\"\n },\n {\n \"role\": \"generation_rebuild_bind\",\n \"rust_path\": \"radroots_event_store::source_maintenance_v1::bind_source_capacity_to_generation_v1\"\n },\n {\n \"role\": \"sqlite_encoding_preflight\",\n \"rust_path\": \"radroots_event_store::store::validate_main_database_encoding\"\n },\n {\n \"role\": \"source_generation_history_rollback_guard\",\n \"rust_path\": \"radroots_event_store::schema::validate_rollback_preserves_source_generation_history\"\n },\n {\n \"role\": \"result_vector_executor\",\n \"rust_path\": \"source_maintenance_v1_result_vector\"\n }\n ],\n \"source_files\": [\n {\n \"role\": \"workspace_dependency_authority\",\n \"path\": \"Cargo.toml\",\n \"byte_length\": 12385,\n \"sha256\": \"c53c5c5a464267d7df850e03fdfa99dcde0b469972cf921f9b81c18b52a9c4b2\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"core_currency_value_authority\",\n \"path\": \"crates/core/src/currency.rs\",\n \"byte_length\": 4142,\n \"sha256\": \"42e6da2d8d2fdd6955dc2d83e98dd00266e02bc910b69923b117662c05089d14\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"core_decimal_value_authority\",\n \"path\": \"crates/core/src/decimal.rs\",\n \"byte_length\": 7839,\n \"sha256\": \"4b1d681a92d7a9e074bee7e1f20eb1499bb05bfc6528a6c9ba69fa7d00416550\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"core_money_value_authority\",\n \"path\": \"crates/core/src/money.rs\",\n \"byte_length\": 8025,\n \"sha256\": \"3f30bc21e21951a62fdc5d4033736ed42a883df590e8403940775bd2edfeebc5\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"core_percent_value_authority\",\n \"path\": \"crates/core/src/percent.rs\",\n \"byte_length\": 2652,\n \"sha256\": \"42ceab109881329f3539d06a0ee0381ab4359985fe185a18d58a9c9558c5eb7f\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"core_quantity_value_authority\",\n \"path\": \"crates/core/src/quantity.rs\",\n \"byte_length\": 6785,\n \"sha256\": \"d14e619da3829cdaf3ca7385fb892d330c286c1e21455c135c37518cbb588b5f\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"core_quantity_price_value_authority\",\n \"path\": \"crates/core/src/quantity_price.rs\",\n \"byte_length\": 7061,\n \"sha256\": \"d60f70377099470ed283f45868a5119d7bb46143cb250b5082a4c038ba7f6cdc\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"core_unit_value_authority\",\n \"path\": \"crates/core/src/unit.rs\",\n \"byte_length\": 10023,\n \"sha256\": \"550e9582b6a5290aac3f637b83853b21fefcbab92c432d067c83448f4b2fe3e9\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"blossom_public_surface\",\n \"path\": \"crates/blossom/src/lib.rs\",\n \"byte_length\": 510,\n \"sha256\": \"a4dfcbd193457c50c1b0fbfc91bb547981ecd3a6e23cfc6f1030edfb511dc58c\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"blossom_authorization_authority\",\n \"path\": \"crates/blossom/src/authorization.rs\",\n \"byte_length\": 39360,\n \"sha256\": \"461947b30516315a342b3b5697599f701d27050888f29f67f5d7a7ad4afa4c28\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"blossom_descriptor_authority\",\n \"path\": \"crates/blossom/src/descriptor.rs\",\n \"byte_length\": 13702,\n \"sha256\": \"b2a4ffa760256e1316f70e012d200e2b5f4afd8ede771b85a5147f96b247f599\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"blossom_error_authority\",\n \"path\": \"crates/blossom/src/error.rs\",\n \"byte_length\": 17229,\n \"sha256\": \"02af55beacf437040be17d1fc3271d6e2a62915f656ec2dbe06247deef83f95a\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"blossom_hash_authority\",\n \"path\": \"crates/blossom/src/hash.rs\",\n \"byte_length\": 11006,\n \"sha256\": \"45eca0d81ac0f46c305a32f81aafcdd90b14679d0614f72862289a6e5d4cb08f\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"blossom_media_type_authority\",\n \"path\": \"crates/blossom/src/media_type.rs\",\n \"byte_length\": 2368,\n \"sha256\": \"69db5c0f9fcdd7dbe1f22daa499f65603ae4ce198083dab2c73a36813fa18a46\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"blossom_url_authority\",\n \"path\": \"crates/blossom/src/url.rs\",\n \"byte_length\": 14580,\n \"sha256\": \"342c995fcf620e5fb32461a7d8276f5668ba2662890bd32d12780cc9121c6451\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_contract_facade\",\n \"path\": \"crates/event/src/contract.rs\",\n \"byte_length\": 86,\n \"sha256\": \"9994cbca9dcc7450ad133b6b927e7c06bee08ef813652452cc1e56a284c1be10\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_contract_registry_v7_authority\",\n \"path\": \"crates/event/src/contract/registry_v7.rs\",\n \"byte_length\": 155738,\n \"sha256\": \"e9133e65b37810478c3e34ec4ac2005d81209a714ec2de5bd0232b9f02740dde\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_envelope_authority\",\n \"path\": \"crates/event/src/envelope.rs\",\n \"byte_length\": 31165,\n \"sha256\": \"97a3bb38d630666bba497b98e856ee457d6899de230dabf6cab786a5bd55a3ce\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_head_facade\",\n \"path\": \"crates/event/src/event_head.rs\",\n \"byte_length\": 68,\n \"sha256\": \"cb52f6006f7ecd862707d6b048f9fc407e0cd5ebcd3091b3c54e195ffa5cba64\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_head_v1_authority\",\n \"path\": \"crates/event/src/event_head/v1.rs\",\n \"byte_length\": 7529,\n \"sha256\": \"0a4b50c4b7a93e9d88cc995cf69d9e87b341cba66d7feb51c357dfa4e5b2de37\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_ids_authority\",\n \"path\": \"crates/event/src/ids.rs\",\n \"byte_length\": 46282,\n \"sha256\": \"f3c34e7dcf09fc225cb9c12f02ae932d5155c859f73f8b8573db8e5ebf298678\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_trade_authority\",\n \"path\": \"crates/event/src/trade.rs\",\n \"byte_length\": 68376,\n \"sha256\": \"1012b44295cb26844206304bc24b355a49c18a023844f6b3905337c63b1417a7\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_kinds_authority\",\n \"path\": \"crates/event/src/kinds.rs\",\n \"byte_length\": 34961,\n \"sha256\": \"8b3ce6193cab1f7e1587d0c1b2880a81b0aa43c77d89671b602772db37edcebf\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_tags_authority\",\n \"path\": \"crates/event/src/tags.rs\",\n \"byte_length\": 4530,\n \"sha256\": \"cb8f12a639fc72d9238e32495d9e67e928e6627fb8c94ec0a58c5d95e7373cd6\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_draft_authority\",\n \"path\": \"crates/event/src/draft.rs\",\n \"byte_length\": 58674,\n \"sha256\": \"fa4e802f1143eba72ba7fc334104ea0d6613c886725ff9f3e61dab2443c243b6\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_calendar_authority\",\n \"path\": \"crates/event/src/calendar.rs\",\n \"byte_length\": 103814,\n \"sha256\": \"f8e0fcb4802d0dcd2a1a13b17216a0c5278950a60c09a261ab349e9ce1989d72\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_classified_listing_authority\",\n \"path\": \"crates/event/src/classified_listing.rs\",\n \"byte_length\": 8226,\n \"sha256\": \"745aa08953a6243ea1afad22aa63e44f6746f2f243ab0d6b617d6ab64fa58749\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_profile_authority\",\n \"path\": \"crates/event/src/profile.rs\",\n \"byte_length\": 18848,\n \"sha256\": \"7c7ac7f4926938f5cb5530be5450e5e23f18f216bdb222150fbdd451cec20d5c\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_post_authority\",\n \"path\": \"crates/event/src/post.rs\",\n \"byte_length\": 22738,\n \"sha256\": \"7ed4a4c39bed40b134369d16e1fc35ab2c7d27ee300dd36d367025def2283b39\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_comment_authority\",\n \"path\": \"crates/event/src/comment.rs\",\n \"byte_length\": 36375,\n \"sha256\": \"f4d1a57780eff0d315bc4e2fbad316dfb7c7ced1bcc9e8e85afe0b5ecdaf3aa8\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_food_availability_authority\",\n \"path\": \"crates/event/src/food_availability.rs\",\n \"byte_length\": 45429,\n \"sha256\": \"b4357dfb6954631673b6cd58794015da29303cb54ce8405a57ad543870036c9e\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_deletion_authority\",\n \"path\": \"crates/event/src/deletion.rs\",\n \"byte_length\": 31155,\n \"sha256\": \"c8b7ab79998ae62e03497f5511dd3950a41d73155edda3d8d34c65fc797e9d09\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_relay_hint_authority\",\n \"path\": \"crates/event/src/relay_hint.rs\",\n \"byte_length\": 14317,\n \"sha256\": \"1a14aea5d2f2620970dc1de9e3d311d9042cab4d5805a56461548168112a0801\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_media_authority\",\n \"path\": \"crates/event/src/media.rs\",\n \"byte_length\": 3521,\n \"sha256\": \"8f670e634452872a525efdad0cb9480288885c62f22a9b9915a67a7e7965651c\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_social_authority\",\n \"path\": \"crates/event/src/social.rs\",\n \"byte_length\": 5483,\n \"sha256\": \"1b89c6d0954822e7f1e778479ed43694e88929bcd5310ee066f8f4ba6505045a\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_wire_facade\",\n \"path\": \"crates/event/src/wire.rs\",\n \"byte_length\": 68,\n \"sha256\": \"cb52f6006f7ecd862707d6b048f9fc407e0cd5ebcd3091b3c54e195ffa5cba64\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_wire_v1_authority\",\n \"path\": \"crates/event/src/wire/v1.rs\",\n \"byte_length\": 22133,\n \"sha256\": \"cc28c8cbd962b32ed2efe43e84c1e0d1ea3bd89636efff2d5553714072fce1a4\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_verification_facade\",\n \"path\": \"crates/event_codec/src/verification.rs\",\n \"byte_length\": 253,\n \"sha256\": \"b49a32df605035c87f295c0a151140d43d2e588c5e11b05183e5fc92993dae0e\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_verification_v1_authority\",\n \"path\": \"crates/event_codec/src/verification/v1.rs\",\n \"byte_length\": 8751,\n \"sha256\": \"fc4c5d45e475151c56330ba9c4db70de603e4ec48adabd6365f80d5f6a3733f4\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_registry_v7_admission_authority\",\n \"path\": \"crates/event_codec/src/admission/registry_v7.rs\",\n \"byte_length\": 5350,\n \"sha256\": \"755e63dd7ad1115c219e5a3ea540bef67d2770fc9f2a5aa6ba97c925c99bdced\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_profile_inbound_facade\",\n \"path\": \"crates/event_codec/src/profile/inbound.rs\",\n \"byte_length\": 86,\n \"sha256\": \"9994cbca9dcc7450ad133b6b927e7c06bee08ef813652452cc1e56a284c1be10\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_profile_registry_v7_authority\",\n \"path\": \"crates/event_codec/src/profile/inbound/registry_v7.rs\",\n \"byte_length\": 10394,\n \"sha256\": \"c37c225ea8153beb098a39c4a56203aa03382af12646f40cd3f8628663700702\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_post_inbound_facade\",\n \"path\": \"crates/event_codec/src/post/inbound.rs\",\n \"byte_length\": 86,\n \"sha256\": \"9994cbca9dcc7450ad133b6b927e7c06bee08ef813652452cc1e56a284c1be10\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_post_registry_v7_authority\",\n \"path\": \"crates/event_codec/src/post/inbound/registry_v7.rs\",\n \"byte_length\": 16016,\n \"sha256\": \"bc0bb839c28f3588f05544c846c987528ea3934c75305fef70af8e027a97cc58\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_reply_inbound_facade\",\n \"path\": \"crates/event_codec/src/reply/inbound.rs\",\n \"byte_length\": 86,\n \"sha256\": \"9994cbca9dcc7450ad133b6b927e7c06bee08ef813652452cc1e56a284c1be10\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_reply_registry_v7_authority\",\n \"path\": \"crates/event_codec/src/reply/inbound/registry_v7.rs\",\n \"byte_length\": 26812,\n \"sha256\": \"a72e9721ed13addca2a63942ac9e43c1daa8f1d1457eef08ec6a3ee5eb8872c5\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_comment_inbound_facade\",\n \"path\": \"crates/event_codec/src/comment/inbound.rs\",\n \"byte_length\": 86,\n \"sha256\": \"9994cbca9dcc7450ad133b6b927e7c06bee08ef813652452cc1e56a284c1be10\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_comment_registry_v7_authority\",\n \"path\": \"crates/event_codec/src/comment/inbound/registry_v7.rs\",\n \"byte_length\": 53783,\n \"sha256\": \"30d1b0155963b25d64685ddd042f423ef7707b111dc56ead15bd468e0433a432\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_deletion_facade\",\n \"path\": \"crates/event_codec/src/deletion/mod.rs\",\n \"byte_length\": 115,\n \"sha256\": \"17d56f82ddb0a86bc97abbcf3e037fe460ea31fff2548f527be4bf004dac3a95\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_deletion_reconciliation_v1_authority\",\n \"path\": \"crates/event_codec/src/deletion/reconciliation_v1.rs\",\n \"byte_length\": 38469,\n \"sha256\": \"3e06d1fa923ca5faabb1e95338c35650b0e20b078ff5c972e35ab845d8b7476c\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_food_inbound_facade\",\n \"path\": \"crates/event_codec/src/food_availability/inbound.rs\",\n \"byte_length\": 86,\n \"sha256\": \"9994cbca9dcc7450ad133b6b927e7c06bee08ef813652452cc1e56a284c1be10\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_food_registry_v7_authority\",\n \"path\": \"crates/event_codec/src/food_availability/inbound/registry_v7.rs\",\n \"byte_length\": 26764,\n \"sha256\": \"a5786cff942b7b0038f741afb5b9a19230ac58cb57a5ba747b32e1b95d414e15\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_job_traits_authority\",\n \"path\": \"crates/event_codec/src/job/traits.rs\",\n \"byte_length\": 5029,\n \"sha256\": \"353df3703de4d99fc318474952dc6c95cbce9a19756f3e235ed2d715f36c4364\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_store_dependency_authority\",\n \"path\": \"crates/event_store/Cargo.toml\",\n \"byte_length\": 1569,\n \"sha256\": \"30f43004bcf0ffa9b9b6f338cba8c56be0265bc1cee708e93f7b7dc54ed60f9c\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_store_error_and_limits\",\n \"path\": \"crates/event_store/src/error.rs\",\n \"byte_length\": 19517,\n \"sha256\": \"4bf24ee1aa6117597ab467b1379a05549b79024213dc7622a2d276bc26fffab4\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"generated_descriptor_registration\",\n \"path\": \"crates/event_store/src/generated.rs\",\n \"byte_length\": 144,\n \"sha256\": \"6b0a8d6f249bd4fc3f878d37cb5e418680f0f1be2d9eec2518dedf03efc47121\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"public_surface\",\n \"path\": \"crates/event_store/src/lib.rs\",\n \"byte_length\": 3844,\n \"sha256\": \"3cd9653bcb752fb3c4442d4904b98a0a6208011a9a238125b7b7073d7f4e312b\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"migration_registry\",\n \"path\": \"crates/event_store/src/migrations.rs\",\n \"byte_length\": 73585,\n \"sha256\": \"a47477d04759ec6e71d14d3d05459864eae78fce0e3c2481a1b03147f04637f7\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"predecessor_model_public_surface\",\n \"path\": \"crates/event_store/src/model.rs\",\n \"byte_length\": 33596,\n \"sha256\": \"98b1742ffb517f66f8e9edefa61d1c3cf3e22be5985202c6c340310a98c72c8e\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_store_reconciliation_v1_model\",\n \"path\": \"crates/event_store/src/model/reconciliation_v1.rs\",\n \"byte_length\": 11138,\n \"sha256\": \"8a26bc373035878ef9b41767ceea7b681896e17d88bedce118de1d622125e1d6\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_store_reconciliation_v1_ingest_model\",\n \"path\": \"crates/event_store/src/model/ingest_reconciliation_v1.rs\",\n \"byte_length\": 1626,\n \"sha256\": \"47bf13b3fc0f8a913a660f7d655413de0f6b90568bc4acc510aa6bd741bab47b\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"addressable_transition_feed_model\",\n \"path\": \"crates/event_store/src/model/addressable_transition_feed_v1.rs\",\n \"byte_length\": 22279,\n \"sha256\": \"f8ea454a0e998a3d433bba52d1ff9759a04fcb91db286cf2a2b10ef7d0057694\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"food_projection_model\",\n \"path\": \"crates/event_store/src/model/food_availability_projection_v1.rs\",\n \"byte_length\": 17437,\n \"sha256\": \"6fdfc8c5eb3dd9c451fd47b2394af123b50f7fe6d74113f8777221a8fa31ba30\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"source_generation_rebuild_authority\",\n \"path\": \"crates/event_store/src/nip09/reconciliation_v1.rs\",\n \"byte_length\": 184402,\n \"sha256\": \"7fa01e52f51d3470ba60e6068dc05797c2a6eaf5eb317d23111a961dbe4451f9\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"schema_migration_and_reopen_authority\",\n \"path\": \"crates/event_store/src/schema.rs\",\n \"byte_length\": 146146,\n \"sha256\": \"93b060e80d3edd73f86208e4bf698fa9d53eaf1eeb04526c9261fb8b5726fb0d\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"public_store_and_transaction_authority\",\n \"path\": \"crates/event_store/src/store.rs\",\n \"byte_length\": 394732,\n \"sha256\": \"6710a4b3e366b724f6b3d4904e2403c15456f23111996945931d2ba20e301f52\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"addressable_transition_feed_store\",\n \"path\": \"crates/event_store/src/store/addressable_transition_feed_v1.rs\",\n \"byte_length\": 40254,\n \"sha256\": \"de656face46735b938b7b20780687404eade47885871129cc5a7c009155d6336\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"food_projection_store\",\n \"path\": \"crates/event_store/src/store/food_availability_projection_v1.rs\",\n \"byte_length\": 48971,\n \"sha256\": \"189b824af305f39c7f71a285f4746455ff30f1a27b24b95d8d21223b41772152\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"predecessor_post_core_v1_extension\",\n \"path\": \"crates/event_store/src/store/post_core_extensions_v1.rs\",\n \"byte_length\": 6923,\n \"sha256\": \"2fbfc6252f9ce249468a99b5230fd6b7b59b9e47ee4f38783c5fd9379c823fd0\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"predecessor_post_core_v1_storage\",\n \"path\": \"crates/event_store/src/store/post_core_storage_v1.rs\",\n \"byte_length\": 16876,\n \"sha256\": \"f27dc7dcd643762226f8d4df0d297027b384bcf1004277222e978965bc2d40cf\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"raw_ingest_capacity_authority\",\n \"path\": \"crates/event_store/src/store/protocol_reconciliation_v1.rs\",\n \"byte_length\": 30145,\n \"sha256\": \"a8a26763dc39124ab7537fdcc3f89a1f0aa7e1830f4f9dec9ee4057bbb4fd228\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"predecessor_protocol_storage\",\n \"path\": \"crates/event_store/src/store/protocol_storage_v1.rs\",\n \"byte_length\": 10929,\n \"sha256\": \"20de4436945bac0d8cbeca0ae6cd95232a92da8cd6be6ae6beacba17fe50d658\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"source_maintenance_runtime\",\n \"path\": \"crates/event_store/src/source_maintenance_v1.rs\",\n \"byte_length\": 51762,\n \"sha256\": \"5db9c9e86fd18a2fcc08dbc3468f373bf39d8948bc6a08936b252a4dda3546e9\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"predecessor_food_result_vector_executor\",\n \"path\": \"crates/event_store/tests/food_availability_projection_v1_result_vector.rs\",\n \"byte_length\": 34070,\n \"sha256\": \"aa098bcb0f975f690ca9535d3cbb76c6e57e6d70fd3a892c4399fd35fe8ec21c\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"artifact_transaction_authority\",\n \"path\": \"tools/xtask/src/contract/artifact_bundle.rs\",\n \"byte_length\": 38279,\n \"sha256\": \"f326ea57b56d40135f95b6b1e15961f66eed363337180a6d12a5ea903e1a9a29\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"predecessor_successor_governance\",\n \"path\": \"tools/xtask/src/contract/food_availability_projection.rs\",\n \"byte_length\": 197131,\n \"sha256\": \"6b71c927b41404f633dfbd0f8e321dcdab933285a196671f27046c0c15d55434\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"transitive_predecessor_membership_governance\",\n \"path\": \"tools/xtask/src/contract/nip09_reconciliation.rs\",\n \"byte_length\": 836131,\n \"sha256\": \"af71c0172eb214f10a615fc867e309cb6d07780a0dc583858a42c617e10cea83\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"source_maintenance_governance\",\n \"path\": \"tools/xtask/src/contract/source_maintenance.rs\",\n \"byte_length\": 190367,\n \"sha256\": \"17476b4253f108f49f9c4be82205c6fe2e31b5ce151f34d9775fc27c8e7b6bb7\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"contract_command_authority\",\n \"path\": \"tools/xtask/src/contract.rs\",\n \"byte_length\": 505562,\n \"sha256\": \"bdd8eb7614454e456d57d458ae55534cb8360eebd9b060267549b49978930ef9\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"xtask_dispatch_and_release_preflight\",\n \"path\": \"tools/xtask/src/main.rs\",\n \"byte_length\": 15786,\n \"sha256\": \"6bffd4851031c75b1b77593c498ae0758901dae06c25e1449c7f2cc58125bde8\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n }\n ],\n \"public_api\": {\n \"inherited_predecessor_symbols\": [\n \"RADROOTS_ADDRESSABLE_TRANSITION_CURSOR_JSON_MAX_BYTES_V1\",\n \"RADROOTS_ADDRESSABLE_TRANSITION_D_TAG_MAX_BYTES_V1\",\n \"RADROOTS_ADDRESSABLE_TRANSITION_FEED_VERSION_V1\",\n \"RADROOTS_ADDRESSABLE_TRANSITION_PAGE_LIMIT_MAX_V1\",\n \"RADROOTS_ADDRESSABLE_TRANSITION_PAGE_RAW_JSON_MAX_BYTES_V1\",\n \"RADROOTS_ADDRESSABLE_TRANSITION_PAGE_SCAN_MAX_V1\",\n \"RADROOTS_ADDRESSABLE_TRANSITION_SCOPE_KIND_MAX_V1\",\n \"RADROOTS_FOOD_AVAILABILITY_PROJECTION_APPLY_PAGE_LIMIT_V1\",\n \"RADROOTS_FOOD_AVAILABILITY_PROJECTION_VERSION_V1\",\n \"RADROOTS_FOOD_AVAILABILITY_SEARCH_QUERY_MAX_BYTES_V1\",\n \"RADROOTS_FOOD_AVAILABILITY_SEARCH_QUERY_MAX_TERMS_V1\",\n \"RadrootsAddressableTransitionCauseV1\",\n \"RadrootsAddressableTransitionCoordinateV1\",\n \"RadrootsAddressableTransitionCursorV1\",\n \"RadrootsAddressableTransitionEventReferenceV1\",\n \"RadrootsAddressableTransitionOriginV1\",\n \"RadrootsAddressableTransitionPageV1\",\n \"RadrootsAddressableTransitionRawHeadDecisionV1\",\n \"RadrootsAddressableTransitionScopeFingerprintV1\",\n \"RadrootsAddressableTransitionScopeV1\",\n \"RadrootsAddressableTransitionV1\",\n \"RadrootsAddressableTransitionVisibilityV1\",\n \"RadrootsCurrentEventVisibilityV1\",\n \"RadrootsCurrentVisibilityDecisionV1\",\n \"RadrootsFoodAvailabilitySearchQueryV1\",\n \"RadrootsFoodAvailabilityStatusFilterV1\",\n \"RadrootsNip09SuppressionEvidenceV1\",\n \"RadrootsNip09SuppressionOutcome\",\n \"RadrootsNip09SuppressionReason\",\n \"RadrootsStoreProducedCanonicalEventV1\",\n \"RadrootsStoredFoodAvailabilityImageV1\",\n \"RadrootsStoredFoodAvailabilityV1\"\n ],\n \"added_symbols\": [\n \"RADROOTS_EVENT_STORE_RAW_EVENT_COUNT_LIMIT_V1\",\n \"RADROOTS_EVENT_STORE_RAW_EVENT_TEXT_BYTES_LIMIT_V1\",\n \"RADROOTS_EVENT_STORE_RAW_TAG_COUNT_LIMIT_V1\",\n \"RADROOTS_EVENT_STORE_RAW_TAG_TEXT_BYTES_LIMIT_V1\",\n \"RADROOTS_EVENT_STORE_RETAINED_SOURCE_GENERATION_LIMIT_V1\",\n \"RadrootsEventStoreSourceCapacityResourceV1\",\n \"RadrootsEventStoreSourceCapacityV1\"\n ],\n \"methods\": [\n \"RadrootsEventStore::source_capacity_v1\",\n \"RadrootsEventStoreSourceCapacityResourceV1::as_str\",\n \"RadrootsEventStoreSourceCapacityV1::source_generation\",\n \"RadrootsEventStoreSourceCapacityV1::raw_event_count\",\n \"RadrootsEventStoreSourceCapacityV1::raw_tag_count\",\n \"RadrootsEventStoreSourceCapacityV1::raw_event_text_bytes\",\n \"RadrootsEventStoreSourceCapacityV1::raw_tag_text_bytes\",\n \"RadrootsEventStoreSourceCapacityV1::raw_high_water_seq\",\n \"RadrootsEventStoreSourceCapacityV1::retained_generation_count\",\n \"RadrootsEventStoreSourceCapacityV1::retained_generation_limit\"\n ],\n \"error_variants\": [\n \"SourceCapacityExceeded\",\n \"SourceGenerationHistoryLimitReached\",\n \"PersistedEphemeralRawEvent\",\n \"SourceCapacityStateDrift\",\n \"SqliteMainDatabaseEncodingNotUtf8\",\n \"RollbackWouldDiscardSourceGenerationHistory\"\n ],\n \"removed_symbols\": [\n \"RadrootsEventStoreReconciliationResource\",\n \"RadrootsEventStoreError::ReconciliationCapacityExceeded\"\n ],\n \"breaking_replacements\": [\n {\n \"removed\": \"RadrootsEventStoreReconciliationResource\",\n \"replacement\": \"RadrootsEventStoreSourceCapacityResourceV1\"\n },\n {\n \"removed\": \"RadrootsEventStoreError::ReconciliationCapacityExceeded\",\n \"replacement\": \"RadrootsEventStoreError::SourceCapacityExceeded\"\n }\n ]\n },\n \"result_vector\": {\n \"canonical_path\": \"contracts/conformance/vectors/event_store/source_maintenance.v1.json\",\n \"mirror_path\": \"crates/event_store/tests/fixtures/source_maintenance.v1.json\",\n \"byte_length\": 16253,\n \"sha256\": \"997aba2604a2b9d199fb87dc9d07942ca50d91863aeadcf3eeacf16d191dd71f\",\n \"hash_algorithm\": \"sha256_bytes_v1\",\n \"executor_id\": \"radroots_event_store.source_maintenance_v1.result_vector_executor.v1\",\n \"executor_path\": \"crates/event_store/tests/source_maintenance_v1_result_vector.rs\",\n \"executor_test\": \"source_maintenance_v1_result_vector\",\n \"executor_byte_length\": 23510,\n \"executor_sha256\": \"a7487afdfe19fc5fc794811d0f0e6035203e1aabcf0a33a1d398f6b3555d38f3\",\n \"executor_hash_algorithm\": \"sha256_bytes_v1\"\n }\n}\n"; +pub(crate) const SOURCE_MAINTENANCE_MANIFEST_JSON: &str = "{\n \"schema_version\": 1,\n \"contract_id\": \"radroots_event_store.source_maintenance_v1\",\n \"hook_id\": \"source_maintenance_v1\",\n \"manifest_schema\": {\n \"path\": \"crates/event_store/contracts/source_maintenance_v1.manifest.schema.json\",\n \"byte_length\": 12315,\n \"sha256\": \"96ea98a5abf3348b61565954cd34f2c622411d8dd34205ef04134bbe0e3d3f2b\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n \"predecessor\": {\n \"hook_id\": \"food_availability_projection_v1\",\n \"manifest\": {\n \"path\": \"crates/event_store/contracts/food_availability_projection_v1.manifest.json\",\n \"byte_length\": 17455,\n \"sha256\": \"02dfe1b450fbdac16e718888215b4dd5c85d8975440fa21e8f439fb24c2b2990\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n }\n },\n \"migration\": {\n \"version\": 4,\n \"name\": \"source_maintenance\",\n \"up\": {\n \"path\": \"crates/event_store/migrations/0004_source_maintenance.up.sql\",\n \"byte_length\": 19841,\n \"sha256\": \"ab2724188f8d08c897eebea2533a635e7c74282a25e84e4c0c37e78b08837a43\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n \"down\": {\n \"path\": \"crates/event_store/migrations/0004_source_maintenance.down.sql\",\n \"byte_length\": 5172,\n \"sha256\": \"fe44fd53c51545c08ea479b385e6781079dab70fc63da2a3c205d727a00ce860\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n \"schema_sha256\": \"074f85b663444ac150239ecd8441ea4a96ad83a798a55e22d2e5e2f7ee943a8c\",\n \"catalog\": {\n \"objects\": [\n \"radroots_event_store_source_capacity_delete_guard\",\n \"radroots_event_store_source_capacity_insert_guard\",\n \"radroots_event_store_source_capacity_marker_close_guard\",\n \"radroots_event_store_source_capacity_update_guard\",\n \"radroots_event_store_source_capacity_v1\",\n \"radroots_event_store_source_generation_capacity_advance\",\n \"radroots_event_store_source_generation_capacity_guard\"\n ],\n \"replaced_objects\": [\n \"radroots_event_store_food_availability_image_delete_guard\",\n \"radroots_event_store_food_availability_projection_delete_guard\",\n \"radroots_event_store_source_rebuild_marker_insert_guard\"\n ],\n \"tables\": [\n \"radroots_event_store_source_capacity_v1\"\n ],\n \"fts5_tables\": []\n }\n },\n \"source_maintenance\": {\n \"version\": 1,\n \"event_contract_registry_version\": 7,\n \"capacity_authority_id\": \"radroots_event_store_source_capacity_v1\",\n \"accounting\": {\n \"algorithm\": \"sqlite_cast_blob_octet_sum_v1\",\n \"raw_event_columns\": [\n \"event_id\",\n \"pubkey\",\n \"tags_json\",\n \"content\",\n \"sig\",\n \"raw_json\"\n ],\n \"raw_tag_columns\": [\n \"event_id\",\n \"tag_name\",\n \"tag_value\",\n \"tag_json\"\n ],\n \"nullable_raw_tag_columns\": [\n \"tag_value\"\n ]\n },\n \"limits\": {\n \"raw_events\": 25000,\n \"raw_tags\": 250000,\n \"raw_event_text_bytes\": 67108864,\n \"raw_tag_text_bytes\": 33554432,\n \"retained_source_generations\": 8\n },\n \"reopen_validation\": {\n \"mode\": \"bounded_full_raw_recount_v1\",\n \"raw_event_rejection_scan_bound\": 25001,\n \"raw_tag_rejection_scan_bound\": 250001,\n \"generation_history_validation\": \"bounded_count_plus_active_ordinal_v1\",\n \"retained_generation_rejection_scan_bound\": 9\n },\n \"rebuild_seal\": {\n \"nip09_hook_id\": \"nip09_reconciliation_v1\",\n \"nip09_manifest_sha256\": \"74af832420ffbaa9805e89df3c0b34f126a443e1598f757e3372f407f9003b77\",\n \"food_hook_id\": \"food_availability_projection_v1\",\n \"food_manifest_sha256\": \"02dfe1b450fbdac16e718888215b4dd5c85d8975440fa21e8f439fb24c2b2990\",\n \"food_scope_fingerprint_sha256\": \"8b63c5ddc48a2cc7db69295238b96d5f814dba50427c80b4d0079f061e6d3de0\",\n \"active_generation_authority\": \"radroots_event_store_source_state\",\n \"marker_close_authority\": \"radroots_event_store_source_capacity_marker_close_guard\"\n }\n },\n \"entry_points\": [\n {\n \"role\": \"migration_registry\",\n \"rust_path\": \"radroots_event_store::migrations::EVENT_STORE_MIGRATIONS[3]\"\n },\n {\n \"role\": \"migration_apply_hook\",\n \"rust_path\": \"radroots_event_store::schema::apply_migration_hook\"\n },\n {\n \"role\": \"migration_validation_hook\",\n \"rust_path\": \"radroots_event_store::schema::validate_migration_hook_state\"\n },\n {\n \"role\": \"capacity_query\",\n \"rust_path\": \"radroots_event_store::RadrootsEventStore::source_capacity_v1\"\n },\n {\n \"role\": \"raw_append_preflight\",\n \"rust_path\": \"radroots_event_store::source_maintenance_v1::preflight_unique_raw_source_append_v1\"\n },\n {\n \"role\": \"raw_append_advance\",\n \"rust_path\": \"radroots_event_store::source_maintenance_v1::advance_source_capacity_after_insert_v1\"\n },\n {\n \"role\": \"generation_append_preflight\",\n \"rust_path\": \"radroots_event_store::source_maintenance_v1::preflight_source_generation_append_v1\"\n },\n {\n \"role\": \"generation_rebuild_bind\",\n \"rust_path\": \"radroots_event_store::source_maintenance_v1::bind_source_capacity_to_generation_v1\"\n },\n {\n \"role\": \"sqlite_encoding_preflight\",\n \"rust_path\": \"radroots_event_store::store::validate_main_database_encoding\"\n },\n {\n \"role\": \"source_generation_history_rollback_guard\",\n \"rust_path\": \"radroots_event_store::schema::validate_rollback_preserves_source_generation_history\"\n },\n {\n \"role\": \"result_vector_executor\",\n \"rust_path\": \"source_maintenance_v1_result_vector\"\n }\n ],\n \"source_files\": [\n {\n \"role\": \"workspace_dependency_authority\",\n \"path\": \"Cargo.toml\",\n \"byte_length\": 12411,\n \"sha256\": \"cad96f080b0cc9ac7ffda703c8807540c9cf89f47a2299b141e6e7949714bf9f\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"core_currency_value_authority\",\n \"path\": \"crates/core/src/currency.rs\",\n \"byte_length\": 4142,\n \"sha256\": \"42e6da2d8d2fdd6955dc2d83e98dd00266e02bc910b69923b117662c05089d14\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"core_decimal_value_authority\",\n \"path\": \"crates/core/src/decimal.rs\",\n \"byte_length\": 7839,\n \"sha256\": \"4b1d681a92d7a9e074bee7e1f20eb1499bb05bfc6528a6c9ba69fa7d00416550\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"core_money_value_authority\",\n \"path\": \"crates/core/src/money.rs\",\n \"byte_length\": 8025,\n \"sha256\": \"3f30bc21e21951a62fdc5d4033736ed42a883df590e8403940775bd2edfeebc5\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"core_percent_value_authority\",\n \"path\": \"crates/core/src/percent.rs\",\n \"byte_length\": 2652,\n \"sha256\": \"42ceab109881329f3539d06a0ee0381ab4359985fe185a18d58a9c9558c5eb7f\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"core_quantity_value_authority\",\n \"path\": \"crates/core/src/quantity.rs\",\n \"byte_length\": 6785,\n \"sha256\": \"d14e619da3829cdaf3ca7385fb892d330c286c1e21455c135c37518cbb588b5f\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"core_quantity_price_value_authority\",\n \"path\": \"crates/core/src/quantity_price.rs\",\n \"byte_length\": 7061,\n \"sha256\": \"d60f70377099470ed283f45868a5119d7bb46143cb250b5082a4c038ba7f6cdc\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"core_unit_value_authority\",\n \"path\": \"crates/core/src/unit.rs\",\n \"byte_length\": 10023,\n \"sha256\": \"550e9582b6a5290aac3f637b83853b21fefcbab92c432d067c83448f4b2fe3e9\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"blossom_public_surface\",\n \"path\": \"crates/blossom/src/lib.rs\",\n \"byte_length\": 510,\n \"sha256\": \"a4dfcbd193457c50c1b0fbfc91bb547981ecd3a6e23cfc6f1030edfb511dc58c\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"blossom_authorization_authority\",\n \"path\": \"crates/blossom/src/authorization.rs\",\n \"byte_length\": 39360,\n \"sha256\": \"461947b30516315a342b3b5697599f701d27050888f29f67f5d7a7ad4afa4c28\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"blossom_descriptor_authority\",\n \"path\": \"crates/blossom/src/descriptor.rs\",\n \"byte_length\": 13702,\n \"sha256\": \"b2a4ffa760256e1316f70e012d200e2b5f4afd8ede771b85a5147f96b247f599\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"blossom_error_authority\",\n \"path\": \"crates/blossom/src/error.rs\",\n \"byte_length\": 17229,\n \"sha256\": \"02af55beacf437040be17d1fc3271d6e2a62915f656ec2dbe06247deef83f95a\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"blossom_hash_authority\",\n \"path\": \"crates/blossom/src/hash.rs\",\n \"byte_length\": 11006,\n \"sha256\": \"45eca0d81ac0f46c305a32f81aafcdd90b14679d0614f72862289a6e5d4cb08f\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"blossom_media_type_authority\",\n \"path\": \"crates/blossom/src/media_type.rs\",\n \"byte_length\": 2368,\n \"sha256\": \"69db5c0f9fcdd7dbe1f22daa499f65603ae4ce198083dab2c73a36813fa18a46\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"blossom_url_authority\",\n \"path\": \"crates/blossom/src/url.rs\",\n \"byte_length\": 14580,\n \"sha256\": \"342c995fcf620e5fb32461a7d8276f5668ba2662890bd32d12780cc9121c6451\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_contract_facade\",\n \"path\": \"crates/event/src/contract.rs\",\n \"byte_length\": 86,\n \"sha256\": \"9994cbca9dcc7450ad133b6b927e7c06bee08ef813652452cc1e56a284c1be10\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_contract_registry_v7_authority\",\n \"path\": \"crates/event/src/contract/registry_v7.rs\",\n \"byte_length\": 155738,\n \"sha256\": \"e9133e65b37810478c3e34ec4ac2005d81209a714ec2de5bd0232b9f02740dde\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_envelope_authority\",\n \"path\": \"crates/event/src/envelope.rs\",\n \"byte_length\": 31165,\n \"sha256\": \"97a3bb38d630666bba497b98e856ee457d6899de230dabf6cab786a5bd55a3ce\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_head_facade\",\n \"path\": \"crates/event/src/event_head.rs\",\n \"byte_length\": 68,\n \"sha256\": \"cb52f6006f7ecd862707d6b048f9fc407e0cd5ebcd3091b3c54e195ffa5cba64\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_head_v1_authority\",\n \"path\": \"crates/event/src/event_head/v1.rs\",\n \"byte_length\": 7529,\n \"sha256\": \"0a4b50c4b7a93e9d88cc995cf69d9e87b341cba66d7feb51c357dfa4e5b2de37\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_ids_authority\",\n \"path\": \"crates/event/src/ids.rs\",\n \"byte_length\": 46282,\n \"sha256\": \"f3c34e7dcf09fc225cb9c12f02ae932d5155c859f73f8b8573db8e5ebf298678\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_trade_authority\",\n \"path\": \"crates/event/src/trade.rs\",\n \"byte_length\": 68376,\n \"sha256\": \"1012b44295cb26844206304bc24b355a49c18a023844f6b3905337c63b1417a7\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_kinds_authority\",\n \"path\": \"crates/event/src/kinds.rs\",\n \"byte_length\": 34961,\n \"sha256\": \"8b3ce6193cab1f7e1587d0c1b2880a81b0aa43c77d89671b602772db37edcebf\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_tags_authority\",\n \"path\": \"crates/event/src/tags.rs\",\n \"byte_length\": 4530,\n \"sha256\": \"cb8f12a639fc72d9238e32495d9e67e928e6627fb8c94ec0a58c5d95e7373cd6\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_draft_authority\",\n \"path\": \"crates/event/src/draft.rs\",\n \"byte_length\": 58674,\n \"sha256\": \"fa4e802f1143eba72ba7fc334104ea0d6613c886725ff9f3e61dab2443c243b6\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_calendar_authority\",\n \"path\": \"crates/event/src/calendar.rs\",\n \"byte_length\": 103814,\n \"sha256\": \"f8e0fcb4802d0dcd2a1a13b17216a0c5278950a60c09a261ab349e9ce1989d72\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_classified_listing_authority\",\n \"path\": \"crates/event/src/classified_listing.rs\",\n \"byte_length\": 8226,\n \"sha256\": \"745aa08953a6243ea1afad22aa63e44f6746f2f243ab0d6b617d6ab64fa58749\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_profile_authority\",\n \"path\": \"crates/event/src/profile.rs\",\n \"byte_length\": 18848,\n \"sha256\": \"7c7ac7f4926938f5cb5530be5450e5e23f18f216bdb222150fbdd451cec20d5c\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_post_authority\",\n \"path\": \"crates/event/src/post.rs\",\n \"byte_length\": 22738,\n \"sha256\": \"7ed4a4c39bed40b134369d16e1fc35ab2c7d27ee300dd36d367025def2283b39\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_comment_authority\",\n \"path\": \"crates/event/src/comment.rs\",\n \"byte_length\": 36375,\n \"sha256\": \"f4d1a57780eff0d315bc4e2fbad316dfb7c7ced1bcc9e8e85afe0b5ecdaf3aa8\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_food_availability_authority\",\n \"path\": \"crates/event/src/food_availability.rs\",\n \"byte_length\": 45429,\n \"sha256\": \"b4357dfb6954631673b6cd58794015da29303cb54ce8405a57ad543870036c9e\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_deletion_authority\",\n \"path\": \"crates/event/src/deletion.rs\",\n \"byte_length\": 31155,\n \"sha256\": \"c8b7ab79998ae62e03497f5511dd3950a41d73155edda3d8d34c65fc797e9d09\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_relay_hint_authority\",\n \"path\": \"crates/event/src/relay_hint.rs\",\n \"byte_length\": 14317,\n \"sha256\": \"1a14aea5d2f2620970dc1de9e3d311d9042cab4d5805a56461548168112a0801\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_media_authority\",\n \"path\": \"crates/event/src/media.rs\",\n \"byte_length\": 3521,\n \"sha256\": \"8f670e634452872a525efdad0cb9480288885c62f22a9b9915a67a7e7965651c\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_social_authority\",\n \"path\": \"crates/event/src/social.rs\",\n \"byte_length\": 5483,\n \"sha256\": \"1b89c6d0954822e7f1e778479ed43694e88929bcd5310ee066f8f4ba6505045a\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_wire_facade\",\n \"path\": \"crates/event/src/wire.rs\",\n \"byte_length\": 68,\n \"sha256\": \"cb52f6006f7ecd862707d6b048f9fc407e0cd5ebcd3091b3c54e195ffa5cba64\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_wire_v1_authority\",\n \"path\": \"crates/event/src/wire/v1.rs\",\n \"byte_length\": 22133,\n \"sha256\": \"cc28c8cbd962b32ed2efe43e84c1e0d1ea3bd89636efff2d5553714072fce1a4\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_verification_facade\",\n \"path\": \"crates/event_codec/src/verification.rs\",\n \"byte_length\": 253,\n \"sha256\": \"b49a32df605035c87f295c0a151140d43d2e588c5e11b05183e5fc92993dae0e\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_verification_v1_authority\",\n \"path\": \"crates/event_codec/src/verification/v1.rs\",\n \"byte_length\": 8751,\n \"sha256\": \"fc4c5d45e475151c56330ba9c4db70de603e4ec48adabd6365f80d5f6a3733f4\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_registry_v7_admission_authority\",\n \"path\": \"crates/event_codec/src/admission/registry_v7.rs\",\n \"byte_length\": 5350,\n \"sha256\": \"755e63dd7ad1115c219e5a3ea540bef67d2770fc9f2a5aa6ba97c925c99bdced\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_profile_inbound_facade\",\n \"path\": \"crates/event_codec/src/profile/inbound.rs\",\n \"byte_length\": 86,\n \"sha256\": \"9994cbca9dcc7450ad133b6b927e7c06bee08ef813652452cc1e56a284c1be10\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_profile_registry_v7_authority\",\n \"path\": \"crates/event_codec/src/profile/inbound/registry_v7.rs\",\n \"byte_length\": 10394,\n \"sha256\": \"c37c225ea8153beb098a39c4a56203aa03382af12646f40cd3f8628663700702\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_post_inbound_facade\",\n \"path\": \"crates/event_codec/src/post/inbound.rs\",\n \"byte_length\": 86,\n \"sha256\": \"9994cbca9dcc7450ad133b6b927e7c06bee08ef813652452cc1e56a284c1be10\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_post_registry_v7_authority\",\n \"path\": \"crates/event_codec/src/post/inbound/registry_v7.rs\",\n \"byte_length\": 16016,\n \"sha256\": \"bc0bb839c28f3588f05544c846c987528ea3934c75305fef70af8e027a97cc58\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_reply_inbound_facade\",\n \"path\": \"crates/event_codec/src/reply/inbound.rs\",\n \"byte_length\": 86,\n \"sha256\": \"9994cbca9dcc7450ad133b6b927e7c06bee08ef813652452cc1e56a284c1be10\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_reply_registry_v7_authority\",\n \"path\": \"crates/event_codec/src/reply/inbound/registry_v7.rs\",\n \"byte_length\": 26812,\n \"sha256\": \"a72e9721ed13addca2a63942ac9e43c1daa8f1d1457eef08ec6a3ee5eb8872c5\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_comment_inbound_facade\",\n \"path\": \"crates/event_codec/src/comment/inbound.rs\",\n \"byte_length\": 86,\n \"sha256\": \"9994cbca9dcc7450ad133b6b927e7c06bee08ef813652452cc1e56a284c1be10\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_comment_registry_v7_authority\",\n \"path\": \"crates/event_codec/src/comment/inbound/registry_v7.rs\",\n \"byte_length\": 53783,\n \"sha256\": \"30d1b0155963b25d64685ddd042f423ef7707b111dc56ead15bd468e0433a432\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_deletion_facade\",\n \"path\": \"crates/event_codec/src/deletion/mod.rs\",\n \"byte_length\": 115,\n \"sha256\": \"17d56f82ddb0a86bc97abbcf3e037fe460ea31fff2548f527be4bf004dac3a95\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_deletion_reconciliation_v1_authority\",\n \"path\": \"crates/event_codec/src/deletion/reconciliation_v1.rs\",\n \"byte_length\": 38469,\n \"sha256\": \"3e06d1fa923ca5faabb1e95338c35650b0e20b078ff5c972e35ab845d8b7476c\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_food_inbound_facade\",\n \"path\": \"crates/event_codec/src/food_availability/inbound.rs\",\n \"byte_length\": 86,\n \"sha256\": \"9994cbca9dcc7450ad133b6b927e7c06bee08ef813652452cc1e56a284c1be10\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_food_registry_v7_authority\",\n \"path\": \"crates/event_codec/src/food_availability/inbound/registry_v7.rs\",\n \"byte_length\": 26764,\n \"sha256\": \"a5786cff942b7b0038f741afb5b9a19230ac58cb57a5ba747b32e1b95d414e15\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_job_traits_authority\",\n \"path\": \"crates/event_codec/src/job/traits.rs\",\n \"byte_length\": 5029,\n \"sha256\": \"353df3703de4d99fc318474952dc6c95cbce9a19756f3e235ed2d715f36c4364\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_store_dependency_authority\",\n \"path\": \"crates/event_store/Cargo.toml\",\n \"byte_length\": 1567,\n \"sha256\": \"46e03d3c758e1116638021a0499dfa588b4266498e0d50cfa758f9bef9bcfeb3\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_store_error_and_limits\",\n \"path\": \"crates/event_store/src/error.rs\",\n \"byte_length\": 19517,\n \"sha256\": \"4bf24ee1aa6117597ab467b1379a05549b79024213dc7622a2d276bc26fffab4\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"generated_descriptor_registration\",\n \"path\": \"crates/event_store/src/generated.rs\",\n \"byte_length\": 144,\n \"sha256\": \"6b0a8d6f249bd4fc3f878d37cb5e418680f0f1be2d9eec2518dedf03efc47121\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"public_surface\",\n \"path\": \"crates/event_store/src/lib.rs\",\n \"byte_length\": 3844,\n \"sha256\": \"3cd9653bcb752fb3c4442d4904b98a0a6208011a9a238125b7b7073d7f4e312b\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"migration_registry\",\n \"path\": \"crates/event_store/src/migrations.rs\",\n \"byte_length\": 73585,\n \"sha256\": \"a47477d04759ec6e71d14d3d05459864eae78fce0e3c2481a1b03147f04637f7\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"predecessor_model_public_surface\",\n \"path\": \"crates/event_store/src/model.rs\",\n \"byte_length\": 33596,\n \"sha256\": \"98b1742ffb517f66f8e9edefa61d1c3cf3e22be5985202c6c340310a98c72c8e\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_store_reconciliation_v1_model\",\n \"path\": \"crates/event_store/src/model/reconciliation_v1.rs\",\n \"byte_length\": 11138,\n \"sha256\": \"8a26bc373035878ef9b41767ceea7b681896e17d88bedce118de1d622125e1d6\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_store_reconciliation_v1_ingest_model\",\n \"path\": \"crates/event_store/src/model/ingest_reconciliation_v1.rs\",\n \"byte_length\": 1626,\n \"sha256\": \"47bf13b3fc0f8a913a660f7d655413de0f6b90568bc4acc510aa6bd741bab47b\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"addressable_transition_feed_model\",\n \"path\": \"crates/event_store/src/model/addressable_transition_feed_v1.rs\",\n \"byte_length\": 22279,\n \"sha256\": \"f8ea454a0e998a3d433bba52d1ff9759a04fcb91db286cf2a2b10ef7d0057694\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"food_projection_model\",\n \"path\": \"crates/event_store/src/model/food_availability_projection_v1.rs\",\n \"byte_length\": 17437,\n \"sha256\": \"6fdfc8c5eb3dd9c451fd47b2394af123b50f7fe6d74113f8777221a8fa31ba30\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"source_generation_rebuild_authority\",\n \"path\": \"crates/event_store/src/nip09/reconciliation_v1.rs\",\n \"byte_length\": 184402,\n \"sha256\": \"7fa01e52f51d3470ba60e6068dc05797c2a6eaf5eb317d23111a961dbe4451f9\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"schema_migration_and_reopen_authority\",\n \"path\": \"crates/event_store/src/schema.rs\",\n \"byte_length\": 146146,\n \"sha256\": \"93b060e80d3edd73f86208e4bf698fa9d53eaf1eeb04526c9261fb8b5726fb0d\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"public_store_and_transaction_authority\",\n \"path\": \"crates/event_store/src/store.rs\",\n \"byte_length\": 394732,\n \"sha256\": \"6710a4b3e366b724f6b3d4904e2403c15456f23111996945931d2ba20e301f52\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"addressable_transition_feed_store\",\n \"path\": \"crates/event_store/src/store/addressable_transition_feed_v1.rs\",\n \"byte_length\": 40254,\n \"sha256\": \"de656face46735b938b7b20780687404eade47885871129cc5a7c009155d6336\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"food_projection_store\",\n \"path\": \"crates/event_store/src/store/food_availability_projection_v1.rs\",\n \"byte_length\": 48971,\n \"sha256\": \"189b824af305f39c7f71a285f4746455ff30f1a27b24b95d8d21223b41772152\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"predecessor_post_core_v1_extension\",\n \"path\": \"crates/event_store/src/store/post_core_extensions_v1.rs\",\n \"byte_length\": 6923,\n \"sha256\": \"2fbfc6252f9ce249468a99b5230fd6b7b59b9e47ee4f38783c5fd9379c823fd0\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"predecessor_post_core_v1_storage\",\n \"path\": \"crates/event_store/src/store/post_core_storage_v1.rs\",\n \"byte_length\": 16876,\n \"sha256\": \"f27dc7dcd643762226f8d4df0d297027b384bcf1004277222e978965bc2d40cf\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"raw_ingest_capacity_authority\",\n \"path\": \"crates/event_store/src/store/protocol_reconciliation_v1.rs\",\n \"byte_length\": 30145,\n \"sha256\": \"a8a26763dc39124ab7537fdcc3f89a1f0aa7e1830f4f9dec9ee4057bbb4fd228\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"predecessor_protocol_storage\",\n \"path\": \"crates/event_store/src/store/protocol_storage_v1.rs\",\n \"byte_length\": 10929,\n \"sha256\": \"20de4436945bac0d8cbeca0ae6cd95232a92da8cd6be6ae6beacba17fe50d658\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"source_maintenance_runtime\",\n \"path\": \"crates/event_store/src/source_maintenance_v1.rs\",\n \"byte_length\": 51762,\n \"sha256\": \"5db9c9e86fd18a2fcc08dbc3468f373bf39d8948bc6a08936b252a4dda3546e9\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"predecessor_food_result_vector_executor\",\n \"path\": \"crates/event_store/tests/food_availability_projection_v1_result_vector.rs\",\n \"byte_length\": 34070,\n \"sha256\": \"aa098bcb0f975f690ca9535d3cbb76c6e57e6d70fd3a892c4399fd35fe8ec21c\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"artifact_transaction_authority\",\n \"path\": \"tools/xtask/src/contract/artifact_bundle.rs\",\n \"byte_length\": 38279,\n \"sha256\": \"f326ea57b56d40135f95b6b1e15961f66eed363337180a6d12a5ea903e1a9a29\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"predecessor_successor_governance\",\n \"path\": \"tools/xtask/src/contract/food_availability_projection.rs\",\n \"byte_length\": 197137,\n \"sha256\": \"78db6c9c85e2f58c7924f61ab5cef67e8994e703bbbeb222a721e5677b229c56\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"transitive_predecessor_membership_governance\",\n \"path\": \"tools/xtask/src/contract/nip09_reconciliation.rs\",\n \"byte_length\": 836171,\n \"sha256\": \"c92849e87248e45b5bea66f387d5aaa113de631ff8cd49aa673fac1faf023624\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"source_maintenance_governance\",\n \"path\": \"tools/xtask/src/contract/source_maintenance.rs\",\n \"byte_length\": 190367,\n \"sha256\": \"17476b4253f108f49f9c4be82205c6fe2e31b5ce151f34d9775fc27c8e7b6bb7\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"contract_command_authority\",\n \"path\": \"tools/xtask/src/contract.rs\",\n \"byte_length\": 506264,\n \"sha256\": \"035157c6731989cf79ba70a6b4517c5fb5f9443a795f81f817e7abcfabc718f0\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"xtask_dispatch_and_release_preflight\",\n \"path\": \"tools/xtask/src/main.rs\",\n \"byte_length\": 15786,\n \"sha256\": \"6bffd4851031c75b1b77593c498ae0758901dae06c25e1449c7f2cc58125bde8\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n }\n ],\n \"public_api\": {\n \"inherited_predecessor_symbols\": [\n \"RADROOTS_ADDRESSABLE_TRANSITION_CURSOR_JSON_MAX_BYTES_V1\",\n \"RADROOTS_ADDRESSABLE_TRANSITION_D_TAG_MAX_BYTES_V1\",\n \"RADROOTS_ADDRESSABLE_TRANSITION_FEED_VERSION_V1\",\n \"RADROOTS_ADDRESSABLE_TRANSITION_PAGE_LIMIT_MAX_V1\",\n \"RADROOTS_ADDRESSABLE_TRANSITION_PAGE_RAW_JSON_MAX_BYTES_V1\",\n \"RADROOTS_ADDRESSABLE_TRANSITION_PAGE_SCAN_MAX_V1\",\n \"RADROOTS_ADDRESSABLE_TRANSITION_SCOPE_KIND_MAX_V1\",\n \"RADROOTS_FOOD_AVAILABILITY_PROJECTION_APPLY_PAGE_LIMIT_V1\",\n \"RADROOTS_FOOD_AVAILABILITY_PROJECTION_VERSION_V1\",\n \"RADROOTS_FOOD_AVAILABILITY_SEARCH_QUERY_MAX_BYTES_V1\",\n \"RADROOTS_FOOD_AVAILABILITY_SEARCH_QUERY_MAX_TERMS_V1\",\n \"RadrootsAddressableTransitionCauseV1\",\n \"RadrootsAddressableTransitionCoordinateV1\",\n \"RadrootsAddressableTransitionCursorV1\",\n \"RadrootsAddressableTransitionEventReferenceV1\",\n \"RadrootsAddressableTransitionOriginV1\",\n \"RadrootsAddressableTransitionPageV1\",\n \"RadrootsAddressableTransitionRawHeadDecisionV1\",\n \"RadrootsAddressableTransitionScopeFingerprintV1\",\n \"RadrootsAddressableTransitionScopeV1\",\n \"RadrootsAddressableTransitionV1\",\n \"RadrootsAddressableTransitionVisibilityV1\",\n \"RadrootsCurrentEventVisibilityV1\",\n \"RadrootsCurrentVisibilityDecisionV1\",\n \"RadrootsFoodAvailabilitySearchQueryV1\",\n \"RadrootsFoodAvailabilityStatusFilterV1\",\n \"RadrootsNip09SuppressionEvidenceV1\",\n \"RadrootsNip09SuppressionOutcome\",\n \"RadrootsNip09SuppressionReason\",\n \"RadrootsStoreProducedCanonicalEventV1\",\n \"RadrootsStoredFoodAvailabilityImageV1\",\n \"RadrootsStoredFoodAvailabilityV1\"\n ],\n \"added_symbols\": [\n \"RADROOTS_EVENT_STORE_RAW_EVENT_COUNT_LIMIT_V1\",\n \"RADROOTS_EVENT_STORE_RAW_EVENT_TEXT_BYTES_LIMIT_V1\",\n \"RADROOTS_EVENT_STORE_RAW_TAG_COUNT_LIMIT_V1\",\n \"RADROOTS_EVENT_STORE_RAW_TAG_TEXT_BYTES_LIMIT_V1\",\n \"RADROOTS_EVENT_STORE_RETAINED_SOURCE_GENERATION_LIMIT_V1\",\n \"RadrootsEventStoreSourceCapacityResourceV1\",\n \"RadrootsEventStoreSourceCapacityV1\"\n ],\n \"methods\": [\n \"RadrootsEventStore::source_capacity_v1\",\n \"RadrootsEventStoreSourceCapacityResourceV1::as_str\",\n \"RadrootsEventStoreSourceCapacityV1::source_generation\",\n \"RadrootsEventStoreSourceCapacityV1::raw_event_count\",\n \"RadrootsEventStoreSourceCapacityV1::raw_tag_count\",\n \"RadrootsEventStoreSourceCapacityV1::raw_event_text_bytes\",\n \"RadrootsEventStoreSourceCapacityV1::raw_tag_text_bytes\",\n \"RadrootsEventStoreSourceCapacityV1::raw_high_water_seq\",\n \"RadrootsEventStoreSourceCapacityV1::retained_generation_count\",\n \"RadrootsEventStoreSourceCapacityV1::retained_generation_limit\"\n ],\n \"error_variants\": [\n \"SourceCapacityExceeded\",\n \"SourceGenerationHistoryLimitReached\",\n \"PersistedEphemeralRawEvent\",\n \"SourceCapacityStateDrift\",\n \"SqliteMainDatabaseEncodingNotUtf8\",\n \"RollbackWouldDiscardSourceGenerationHistory\"\n ],\n \"removed_symbols\": [\n \"RadrootsEventStoreReconciliationResource\",\n \"RadrootsEventStoreError::ReconciliationCapacityExceeded\"\n ],\n \"breaking_replacements\": [\n {\n \"removed\": \"RadrootsEventStoreReconciliationResource\",\n \"replacement\": \"RadrootsEventStoreSourceCapacityResourceV1\"\n },\n {\n \"removed\": \"RadrootsEventStoreError::ReconciliationCapacityExceeded\",\n \"replacement\": \"RadrootsEventStoreError::SourceCapacityExceeded\"\n }\n ]\n },\n \"result_vector\": {\n \"canonical_path\": \"contracts/conformance/vectors/event_store/source_maintenance.v1.json\",\n \"mirror_path\": \"crates/event_store/tests/fixtures/source_maintenance.v1.json\",\n \"byte_length\": 16253,\n \"sha256\": \"997aba2604a2b9d199fb87dc9d07942ca50d91863aeadcf3eeacf16d191dd71f\",\n \"hash_algorithm\": \"sha256_bytes_v1\",\n \"executor_id\": \"radroots_event_store.source_maintenance_v1.result_vector_executor.v1\",\n \"executor_path\": \"crates/event_store/tests/source_maintenance_v1_result_vector.rs\",\n \"executor_test\": \"source_maintenance_v1_result_vector\",\n \"executor_byte_length\": 23510,\n \"executor_sha256\": \"a7487afdfe19fc5fc794811d0f0e6035203e1aabcf0a33a1d398f6b3555d38f3\",\n \"executor_hash_algorithm\": \"sha256_bytes_v1\"\n }\n}\n"; pub(crate) const SOURCE_MAINTENANCE_MANIFEST_BYTE_LENGTH: usize = 31374; pub(crate) const SOURCE_MAINTENANCE_MANIFEST_SHA256: &str = - "d07bf308df331e4768312d746e0a5b0e4ec3b4279181f10f7cf6cc76827eef1b"; + "a5ac463d827d19b59b27558bca7552b17b463b6c325fa26faa96f46b434e2a11"; pub(crate) const SOURCE_MAINTENANCE_MANIFEST_SCHEMA_VERSION: u32 = 1; pub(crate) const SOURCE_MAINTENANCE_CONTRACT_ID: &str = "radroots_event_store.source_maintenance_v1"; diff --git a/crates/geocoder/Cargo.toml b/crates/geocoder/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_geocoder" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/geonames/Cargo.toml b/crates/geonames/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_geonames" description = "GeoNames-backed geocoding for Radroots" -version = "0.1.0" +version = "0.1.0-alpha" edition.workspace = true rust-version.workspace = true license.workspace = true diff --git a/crates/identity/Cargo.toml b/crates/identity/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_identity" publish = false -version = "0.1.0" +version = "0.1.0-alpha" edition.workspace = true authors.workspace = true rust-version.workspace = true diff --git a/crates/log/Cargo.toml b/crates/log/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_log" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/mesh/Cargo.toml b/crates/mesh/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_mesh" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/mesh_agent_client/Cargo.toml b/crates/mesh_agent_client/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_mesh_agent_client" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/mesh_agent_proto/Cargo.toml b/crates/mesh_agent_proto/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_mesh_agent_proto" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/net/Cargo.toml b/crates/net/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_net" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/nostr/Cargo.toml b/crates/nostr/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_nostr" publish = false -version = "0.1.0" +version = "0.1.0-alpha" edition.workspace = true authors.workspace = true rust-version.workspace = true diff --git a/crates/nostr_accounts/Cargo.toml b/crates/nostr_accounts/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_nostr_accounts" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/nostr_connect/Cargo.toml b/crates/nostr_connect/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_nostr_connect" publish = false -version = "0.1.0" +version = "0.1.0-alpha" edition.workspace = true authors.workspace = true rust-version.workspace = true diff --git a/crates/nostr_runtime/Cargo.toml b/crates/nostr_runtime/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_nostr_runtime" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/nostr_signer/Cargo.toml b/crates/nostr_signer/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_nostr_signer" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/nostrdb/Cargo.toml b/crates/nostrdb/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_nostrdb" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/outbox/Cargo.toml b/crates/outbox/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_outbox" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/protected_store/Cargo.toml b/crates/protected_store/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_protected_store" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/protocol/Cargo.toml b/crates/protocol/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_protocol" publish = false -version = "0.1.0" +version = "0.1.0-alpha" edition.workspace = true authors.workspace = true rust-version.workspace = true diff --git a/crates/protocol/tests/package_boundary.rs b/crates/protocol/tests/package_boundary.rs @@ -19,7 +19,7 @@ const VERSIONED_SOURCES: &[&str] = &[ #[test] fn manifest_has_final_identity_features_and_no_radroots_dependencies() { assert!(MANIFEST.contains("name = \"radroots_protocol\"")); - assert!(MANIFEST.contains("version = \"0.1.0\"")); + assert!(MANIFEST.contains("version = \"0.1.0-alpha\"")); assert!(MANIFEST.contains("publish = false")); assert!(MANIFEST.contains("[lib]\nname = \"radroots_protocol\"")); assert!(MANIFEST.contains("default = [\"std\", \"serde\"]")); diff --git a/crates/protocol_contract_v1/Cargo.toml b/crates/protocol_contract_v1/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_protocol_contract_v1" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/replica_schema/Cargo.toml b/crates/replica_schema/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_replica_schema" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/replica_store/Cargo.toml b/crates/replica_store/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_replica_store" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/replica_sync/Cargo.toml b/crates/replica_sync/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_replica_sync" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/runtime/Cargo.toml b/crates/runtime/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_runtime" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/runtime_distribution/Cargo.toml b/crates/runtime_distribution/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_runtime_distribution" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/runtime_manager/Cargo.toml b/crates/runtime_manager/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_runtime_manager" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/runtime_paths/Cargo.toml b/crates/runtime_paths/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_runtime_paths" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/runtime_store/Cargo.toml b/crates/runtime_store/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_runtime_store" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/secret_vault/Cargo.toml b/crates/secret_vault/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_secret_vault" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/secrets/Cargo.toml b/crates/secrets/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_secrets" description = "Secret material and protected-storage abstractions for Radroots" -version = "0.1.0" +version = "0.1.0-alpha" edition.workspace = true rust-version.workspace = true license.workspace = true diff --git a/crates/signing/Cargo.toml b/crates/signing/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_signing" description = "Signing abstractions and authorization policy for Radroots" -version = "0.1.0" +version = "0.1.0-alpha" edition.workspace = true rust-version.workspace = true license.workspace = true diff --git a/crates/simplex_agent_proto/Cargo.toml b/crates/simplex_agent_proto/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_simplex_agent_proto" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/simplex_agent_runtime/Cargo.toml b/crates/simplex_agent_runtime/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_simplex_agent_runtime" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/simplex_agent_store/Cargo.toml b/crates/simplex_agent_store/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_simplex_agent_store" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/simplex_app_store/Cargo.toml b/crates/simplex_app_store/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_simplex_app_store" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/simplex_chat_proto/Cargo.toml b/crates/simplex_chat_proto/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_simplex_chat_proto" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/simplex_interop_tests/Cargo.toml b/crates/simplex_interop_tests/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_simplex_interop_tests" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/simplex_smp_crypto/Cargo.toml b/crates/simplex_smp_crypto/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_simplex_smp_crypto" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/simplex_smp_proto/Cargo.toml b/crates/simplex_smp_proto/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_simplex_smp_proto" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/simplex_smp_transport/Cargo.toml b/crates/simplex_smp_transport/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_simplex_smp_transport" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/sql_core/Cargo.toml b/crates/sql_core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_sql_core" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/storage/Cargo.toml b/crates/storage/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_storage" description = "Backend-neutral persistence abstractions for Radroots" -version = "0.1.0" +version = "0.1.0-alpha" edition.workspace = true rust-version.workspace = true license.workspace = true diff --git a/crates/storage_sqlite/Cargo.toml b/crates/storage_sqlite/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_storage_sqlite" description = "SQLite storage backend for Radroots" -version = "0.1.0" +version = "0.1.0-alpha" edition.workspace = true rust-version.workspace = true license.workspace = true diff --git a/crates/sync/Cargo.toml b/crates/sync/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_sync" description = "Synchronization orchestration for Radroots" -version = "0.1.0" +version = "0.1.0-alpha" edition.workspace = true rust-version.workspace = true license.workspace = true diff --git a/crates/test_fixtures/Cargo.toml b/crates/test_fixtures/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "radroots_test_fixtures" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true rust-version.workspace = true license = "MIT OR Apache-2.0" diff --git a/crates/trade/Cargo.toml b/crates/trade/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_trade" publish = false -version = "0.1.0" +version = "0.1.0-alpha" edition.workspace = true authors.workspace = true rust-version.workspace = true diff --git a/crates/trade_sp1_guest/Cargo.toml b/crates/trade_sp1_guest/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_trade_sp1_guest" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/trade_sp1_host/Cargo.toml b/crates/trade_sp1_host/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_trade_sp1_host" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true build = "build.rs" authors = ["Tyson Lupul <tyson@radroots.org>"] diff --git a/crates/transport/Cargo.toml b/crates/transport/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_transport" publish = false -version = "0.1.0" +version = "0.1.0-alpha" edition.workspace = true authors.workspace = true rust-version.workspace = true diff --git a/crates/transport_nostr/Cargo.toml b/crates/transport_nostr/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_transport_nostr" publish = false -version = "0.1.0" +version = "0.1.0-alpha" edition.workspace = true authors.workspace = true rust-version.workspace = true diff --git a/crates/transport_publish_protocol/Cargo.toml b/crates/transport_publish_protocol/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_transport_publish_protocol" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/crates/transport_reticulum/Cargo.toml b/crates/transport_reticulum/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "radroots_transport_reticulum" publish = false -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true authors = ["Tyson Lupul <tyson@radroots.org>"] rust-version.workspace = true diff --git a/docs/implementation/DEVIATIONS.md b/docs/implementation/DEVIATIONS.md @@ -12,6 +12,7 @@ silently change `radroots.crates.release.v1`. | `RCRV1-DEV-001` | 015-023 | Preserve the existing standalone `lib` and `sdk` repositories; replace repository import/unification with independent qualification. | | `RCRV1-DEV-002` | 249 | Pull only the facade scaffold forward to immediately after Step 014 in `sdk`; do not repeat it later. | | `RCRV1-DEV-004` | 098, 155, 225, 260, 268, 294, 298-299, 301-304, 314 | Enforce a temporary 90% four-dimension coverage baseline during heavy development; restore 100% only through a future explicit contract update. | +| `RCRV1-DEV-005` | 013, 019-026, 027-315 | Pin every Rust crate and internal Radroots dependency in `radrootslabs/lib` to exactly `0.1.0-alpha` until further explicit authority. | ## Record template diff --git a/docs/implementation/TRACEABILITY.md b/docs/implementation/TRACEABILITY.md @@ -7,6 +7,7 @@ and verification. It adds no product requirements; the synchronized | Durable requirement | Owning package or control | Handoff steps | Required evidence | | --- | --- | --- | --- | | Exactly 19 public packages with a 17/2 repository split | release policy and architecture catalog | 013, 015-026, 304-305 | Cargo-resolved graph report and exact allowlist validation | +| Every `radrootslabs/lib` Rust crate remains in the frozen `0.1.0-alpha` cohort | library repository version authority and architecture validators | 013, 019-315 | exact workspace package, dependency requirement, lockfile, and synchronized-spec validation | | Public-only identity and separated signing/secrets | `radroots_identity`, `radroots_signing`, `radroots_secrets` | 052-054, 099-111, 147-155 | public API, feature, dependency, and redaction tests | | One canonical `TradeId` | `radroots_event`, `radroots_trade` | 073-098 | compile/API inventory and trade conformance | | Version-neutral protocol ownership | `radroots_protocol` and private generators | 055-064, 261-268 | contract vectors and generated freshness | diff --git a/docs/implementation/deviations.toml b/docs/implementation/deviations.toml @@ -37,6 +37,41 @@ normative_architecture_change = false adr_required = false [[deviation]] +id = "RCRV1-DEV-005" +date = "2026-07-28" +status = "active" +approval = "Explicit user Rust version-policy update dated 2026-07-28 17:47 UTC." +affected_steps = [ + "013", + "019", + "020", + "021", + "022", + "023", + "024", + "025", + "026", + "305", +] +spec_anchors = [ + "docs/specs/radroots_crates_release_v1.md#221-initial-versions", + "docs/specs/radroots_crates_release_v1.toml#repositories.lib", +] +source_evidence = [ + "The prior 1.0.0 and mixed 0.1.0 prerelease crate cohorts were explicitly declared incorrect.", + "The user requires every Rust crate in radrootslabs/lib to remain exactly 0.1.0-alpha until further explicit notice.", +] +replacement_action = "Pin every workspace package, lockfile entry, and internal Radroots dependency requirement in radrootslabs/lib to 0.1.0-alpha; preserve independent protocol and sibling-repository versions; reject library cohort drift until new explicit authority is recorded." +verification = [ + "Repository architecture validation rejects any workspace package version other than 0.1.0-alpha.", + "Internal Radroots dependency requirements resolve exactly to =0.1.0-alpha.", + "Synchronized release specifications record the library cohort independently from the SDK repository version.", +] +unresolved_risk = "The prerelease cohort intentionally prevents independent library package version advancement until a future explicit policy change." +normative_architecture_change = false +adr_required = false + +[[deviation]] id = "RCRV1-DEV-002" date = "2026-07-27" status = "active" diff --git a/docs/specs/radroots_crates_release_v1.md b/docs/specs/radroots_crates_release_v1.md @@ -84,7 +84,11 @@ The final review makes the following deliberate changes: 6. **Public codegen features are removed.** `dto-bindgen`, binding generation, WASM wrappers, and fixture switches remain private build/test concerns. 7. **The workspace moves to Cargo resolver 3.** A virtual Rust 2024 workspace MUST explicitly set `resolver = "3"`. 8. **Release V1 uses MSRV 1.97.1.** The patch release is selected rather than 1.97.0 because it contains a compiler miscompilation fix. -9. **Lower crates do not remain permanently lockstep.** All begin at `0.1.0`, but only `radroots` and `radroots_sdk` are an exact lockstep pair; lower packages follow independent SemVer after the first release. +9. **Lower crates do not remain permanently lockstep.** The current + `radrootslabs/lib` development cohort is frozen at `0.1.0-alpha`, while + `radroots` and `radroots_sdk` remain an exact `0.1.0` lockstep pair. Lower + packages may follow independent SemVer only after explicit future authority + ends the temporary library version freeze. ## 4. Non-negotiable architecture invariants @@ -1282,7 +1286,7 @@ Every public package MUST define: ```toml [package] name = "radroots_..." -version = "0.1.0" +version = "<repository-governed exact version>" publish = ["crates-io"] edition.workspace = true rust-version.workspace = true @@ -1312,7 +1316,22 @@ Additional rules: ### 22.1 Initial versions -All 19 packages start at `0.1.0`. This document's “V1” is the architecture specification version, not a claim that Rust APIs are already 1.0-stable. +Every Rust crate in `radrootslabs/lib`, including private build, test, preview, +and support crates, is pinned to exactly `0.1.0-alpha`. Every same-repository +dependency requirement is pinned to exactly `=0.1.0-alpha`. This temporary +cohort is frozen until an explicit future authority changes it; neither normal +development nor release preparation may bump it implicitly. + +The two `radrootslabs/sdk` public packages remain at `0.1.0` under their +independent repository authority. Cross-repository dependencies therefore use +the exact version assigned to the package's owning repository rather than a +single monorepo-wide version. This document's “V1” is the architecture +specification version, not a claim that Rust APIs are already 1.0-stable. + +Cargo package versions are independent from versioned wire, conformance, +database, and operation contracts. Changing the library crate cohort MUST NOT +rewrite authenticated historical protocol artifacts or derive Cargo SemVer +from a protocol contract version. ### 22.2 SemVer groups diff --git a/docs/specs/radroots_crates_release_v1.sha256 b/docs/specs/radroots_crates_release_v1.sha256 @@ -1,4 +1,4 @@ -80c81c75b1eeba5a6f835ea49d53a0445f6852ff5b941d309577ffcf574826f5 radroots_crates_release_v1.md -3a6aead840fb14886e95f25f07b9b2fd9136b3daf70b93f199882cf99a54a209 radroots_crates_release_v1.toml -479f4a09dcad343161c9c644cbde18919eb4365cc295c296ed8ea1458e213882 radroots_crates_release_v1_inventory.csv +26c741a29b9c55b4aa2a834ce2558d61840210c684dc2796a30c76d4d9ecfacb radroots_crates_release_v1.md +93843b41c11d2854244eb5518b591e1d8efb8e5f560ccf895dc50e5779b3766f radroots_crates_release_v1.toml +c04ecb0de9143510862da8a2a9039d6aff28136d76cb819eb1bb1a2d8a370355 radroots_crates_release_v1_inventory.csv d47de10be596a4d33fee102a4f0617f66700b49515a75a1f42d62c9710043059 radroots_crates_release_v1.dot diff --git a/docs/specs/radroots_crates_release_v1.toml b/docs/specs/radroots_crates_release_v1.toml @@ -2,7 +2,6 @@ spec_id = "radroots.crates.release.v1" status = "final_architecture" date = "2026-07-26" package_count = 19 -initial_version = "0.1.0" edition = "2024" resolver = "3" rust_version = "1.97.1" @@ -14,6 +13,7 @@ canonical_repositories = [ [repositories.lib] url = "https://github.com/radrootslabs/lib" +version = "0.1.0-alpha" packages = [ "radroots_core", "radroots_identity", @@ -36,6 +36,7 @@ packages = [ [repositories.sdk] url = "https://github.com/radrootslabs/sdk" +version = "0.1.0" packages = ["radroots_sdk", "radroots"] [repository_policy] diff --git a/docs/specs/radroots_crates_release_v1_inventory.csv b/docs/specs/radroots_crates_release_v1_inventory.csv @@ -1,20 +1,20 @@ publish_order_hint,package,crate,repository,tier,platform,initial_version,default_features,features,required_radroots_dependencies,optional_radroots_dependencies,direct_consumers,responsibility,forbidden -1,radroots_core,radroots_core,lib,foundation,no_std + alloc; std feature,0.1.0,std;serde,std;serde,,,radroots_event;radroots_trade;radroots_sdk;radroots,"Foundational value objects and deterministic invariants: decimal, currency, money, percentage, quantity, units, and pricing.","Identifiers, identities, event kinds, networking, persistence, clocks, filesystem paths, process behavior, or application configuration." -2,radroots_identity,radroots_identity,lib,foundation,no_std + alloc; std feature,0.1.0,std;serde,std;serde,,,radroots_event;radroots_signing;radroots_transport;radroots_nostr;radroots_nostr_connect;radroots_sdk;services,"Public identity and account value types: canonical public keys, identity IDs, account IDs, public profiles, and usernames.","Secret keys, key generation, NIP-49 encryption, keyrings, files, SQLite, runtime paths, upstream nostr::Event values, signer sessions, or host account selection." -3,radroots_blossom,radroots_blossom,lib,protocol primitive,no_std + alloc; std feature,0.1.0,std;serde,std;serde,,,radroots_event;radroots_event_codec;radroots_nostr;media clients,"Portable Blossom protocol primitives: canonical blob URLs, hashes, media descriptors, byte-verification typestates, and authorization claims.","HTTP clients, upload scheduling, cache management, filesystem traversal, application media policy, or global authentication state." -4,radroots_protocol,radroots_protocol,lib,versioned wire contract,no_std + alloc; std feature,0.1.0,std;serde,std;serde,,,radroots_event;radroots_signing;radroots_transport;radroots_storage;radroots_sync;radroots_sdk;radrootsd;bindings,"Versioned cross-process and cross-language schemas, capability catalogs, operation descriptors, stable error reports, schema IDs, and structural validation.","Native clients, storage, network I/O, executor/runtime ownership, domain reducers, upstream dependency types, unversioned serialized DTOs, or package names containing protocol generations." -5,radroots_event,radroots_event,lib,domain protocol model,no_std + alloc; std feature,0.1.0,std;serde,std;serde;knowledge,radroots_core;radroots_identity;radroots_blossom;radroots_protocol,,radroots_event_codec;radroots_trade;radroots_signing;radroots_transport;radroots_storage;radroots_sync;radroots_nostr;radroots_sdk;indexers,"Canonical Radroots event-domain models, validated event identifiers, tags, event contracts, authoring drafts, signed/verified typestates, and NIP-01 wire-neutral representations.","Live Nostr clients, relay pools, signing backends, SQLite, outbox claims, retry scheduling, application state, or duplicate trade/order identifier concepts." -6,radroots_event_codec,radroots_event_codec,lib,deterministic algorithm,no_std + alloc where selected features permit; std feature,0.1.0,std;json,std;serde;json;knowledge;manifests,radroots_event;radroots_blossom;radroots_protocol,,radroots_nostr;radroots_storage_sqlite;radroots_transport_nostr;radroots_sync;radroots_sdk;bindings,"Deterministic canonical encoding, decoding, ID/signature verification, contract validation, admission, and manifest generation for Radroots events.","nostr-sdk clients, relay networking, persistence, background work, upstream client errors, or host configuration." -7,radroots_trade,radroots_trade,lib,domain algorithm,no_std + alloc for model/reducer; std feature,0.1.0,std;serde;json,std;serde;json,radroots_core;radroots_identity;radroots_event,,radroots_storage;radroots_sync;radroots_sdk;RHI;applications,"Trade validation, evidence models, deterministic reduction, conflict analysis, and side-effect-free workflow plans over the canonical event trade model.","A second TradeId definition, actor authorization, signers, event-store access, SQLx, filesystem state, transport delivery, outbox mutation, or process scheduling." -8,radroots_signing,radroots_signing,lib,host SPI,no_std + alloc core; std feature,0.1.0,std;serde,std;serde,radroots_identity;radroots_event;radroots_protocol,,radroots_nostr;radroots_sync;radroots_sdk;CLI;Studio;FFI hosts,"Object-safe author/signing SPI, actor provenance, authorization checks, requests, receipts, progress, capabilities, and normalized signing errors.","Raw secret-key ownership, keyrings, relay networking, NIP-46 session persistence, SQL, UI prompts, or executor creation." -9,radroots_transport,radroots_transport,lib,network SPI,no_std + alloc data model; std feature,0.1.0,std;serde,std;serde,radroots_identity;radroots_event;radroots_protocol,,radroots_storage;radroots_transport_nostr;radroots_sync;radroots_sdk;services;future adapters,"Transport-neutral target identities, capability/status models, source and sink SPIs, delivery/fetch policies, bounded requests, provenance, and normalized outcomes.","Closed enums that prevent new transports, Reticulum-specific constants, Nostr URLs at the generic root, storage/outbox access, retries, scheduler ownership, or silent fallback." -10,radroots_nostr,radroots_nostr,lib,protocol adapter,no_std + alloc for conversion surface; std feature,0.1.0,std;events,std;events;signing;nip17;blossom,radroots_identity;radroots_event;radroots_event_codec,radroots_signing;radroots_blossom,radroots_nostr_connect;radroots_transport_nostr;radroots_sdk;Myc;radrootsd,"Portable conversion between Radroots native event/identity types and Nostr protocol types, typed NIP helpers, and concrete local signing adapters; no live relay client.","nostr-sdk relay pools, reqwest clients, runtime ownership, broad aliases of upstream nostr types at the root, account persistence, or outbox orchestration." -11,radroots_nostr_connect,radroots_nostr_connect,lib,security protocol,std for v1; protocol data kept portable,0.1.0,serde,serde,radroots_identity;radroots_event;radroots_nostr;radroots_protocol,,radroots_sdk;Myc;remote signer tooling,"Nostr Connect/NIP-46 URIs, methods, permissions, requests, responses, client/server state machines, timeout-independent protocol validation, and normalized errors.","Relay-pool implementation, secret persistence, approval UI, global sessions, Tokio runtime ownership, or Myc-specific service storage." -12,radroots_secrets,radroots_secrets,lib,security SPI,no_std + alloc core; std adapters,0.1.0,std;serde,std;serde;memory;file;keyring,,,radroots_storage_sqlite;radroots_sdk;signing hosts;services,"Secret references, provider and key-wrapping SPIs, versioned encrypted envelopes, zeroization-safe secret handling, and explicit memory/file/keyring adapters.","Public secret bytes, Clone/Debug/Serialize for secret-bearing values, identity profiles, domain tables, arbitrary key/value storage, hidden key generation, or process-global vaults." -13,radroots_storage,radroots_storage,lib,storage SPI,std for v1,0.1.0,memory;serde,memory;serde,radroots_event;radroots_trade;radroots_transport;radroots_protocol,,radroots_storage_sqlite;radroots_sync;radroots_sdk;indexers;tests;future backends,"Backend-neutral canonical event, operation journal, outbox, transport evidence, projection, private-artifact metadata, backup, status, and atomic commit interfaces, plus an in-memory reference backend.","SQL text, SQLx pools or transactions, filesystem paths, application UI state, concrete retry loops, Nostr clients, or unconstrained raw key/value escape hatches." -14,radroots_storage_sqlite,radroots_storage_sqlite,lib,native storage backend,std-only native backend,0.1.0,,,radroots_storage;radroots_event_codec;radroots_secrets,,radroots_sdk;CLI;Studio;mobile/FFI,"SQLite implementation of the storage SPIs with schema migration, WAL, locking, integrity, backup/restore, crash recovery, and encrypted private storage.","Public SqlitePool/Connection/Transaction handles, caller-supplied arbitrary SQL, Studio state, global connection pools, runtime installation, or silent schema downgrade." -15,radroots_transport_nostr,radroots_transport_nostr,lib,native network adapter,std-only; Tokio implementation detail in v1,0.1.0,,,radroots_transport;radroots_nostr;radroots_event_codec;radroots_protocol,,radroots_sdk;CLI;radrootsd;advanced hosts,"Concrete Nostr EventSource/EventSink implementation: relay URL policy, connection, NIP-42 authentication, bounded fetch pages, delivery, status, and relay-outcome normalization.","Event-store ingestion, outbox claiming, retry scheduling, projection refresh, global relay clients, direct SQL, or transport fallback." -16,radroots_sync,radroots_sync,lib,local-first orchestration,std-only in v1; executor-neutral public API,0.1.0,serde,serde,radroots_event;radroots_event_codec;radroots_signing;radroots_transport;radroots_storage;radroots_trade;radroots_protocol,,radroots_sdk;CLI;Studio;mobile/FFI;advanced hosts,"Shared pull, verification, canonical admission, duplicate handling, projection refresh, outbox signing/delivery, status, and retry-decision orchestration without owning scheduling.","Creating an executor, spawning hidden workers, installing timers globally, owning process lifecycle, storing UI state, or transport-specific branches outside adapters." -17,radroots_geonames,radroots_geonames,lib,concrete data provider,std-only,0.1.0,,,,,radroots_sdk;CLI;geocoding applications,"GeoNames asset specification, authenticated/integrity-checked acquisition, database lifecycle, and forward/reverse locality lookup using provider-owned types.","Generic multi-provider abstraction before a second provider exists, runtime-path policy, hidden downloads, SDK configuration types, SQLx/reqwest types in the public API, or test-fixture features." +1,radroots_core,radroots_core,lib,foundation,no_std + alloc; std feature,0.1.0-alpha,std;serde,std;serde,,,radroots_event;radroots_trade;radroots_sdk;radroots,"Foundational value objects and deterministic invariants: decimal, currency, money, percentage, quantity, units, and pricing.","Identifiers, identities, event kinds, networking, persistence, clocks, filesystem paths, process behavior, or application configuration." +2,radroots_identity,radroots_identity,lib,foundation,no_std + alloc; std feature,0.1.0-alpha,std;serde,std;serde,,,radroots_event;radroots_signing;radroots_transport;radroots_nostr;radroots_nostr_connect;radroots_sdk;services,"Public identity and account value types: canonical public keys, identity IDs, account IDs, public profiles, and usernames.","Secret keys, key generation, NIP-49 encryption, keyrings, files, SQLite, runtime paths, upstream nostr::Event values, signer sessions, or host account selection." +3,radroots_blossom,radroots_blossom,lib,protocol primitive,no_std + alloc; std feature,0.1.0-alpha,std;serde,std;serde,,,radroots_event;radroots_event_codec;radroots_nostr;media clients,"Portable Blossom protocol primitives: canonical blob URLs, hashes, media descriptors, byte-verification typestates, and authorization claims.","HTTP clients, upload scheduling, cache management, filesystem traversal, application media policy, or global authentication state." +4,radroots_protocol,radroots_protocol,lib,versioned wire contract,no_std + alloc; std feature,0.1.0-alpha,std;serde,std;serde,,,radroots_event;radroots_signing;radroots_transport;radroots_storage;radroots_sync;radroots_sdk;radrootsd;bindings,"Versioned cross-process and cross-language schemas, capability catalogs, operation descriptors, stable error reports, schema IDs, and structural validation.","Native clients, storage, network I/O, executor/runtime ownership, domain reducers, upstream dependency types, unversioned serialized DTOs, or package names containing protocol generations." +5,radroots_event,radroots_event,lib,domain protocol model,no_std + alloc; std feature,0.1.0-alpha,std;serde,std;serde;knowledge,radroots_core;radroots_identity;radroots_blossom;radroots_protocol,,radroots_event_codec;radroots_trade;radroots_signing;radroots_transport;radroots_storage;radroots_sync;radroots_nostr;radroots_sdk;indexers,"Canonical Radroots event-domain models, validated event identifiers, tags, event contracts, authoring drafts, signed/verified typestates, and NIP-01 wire-neutral representations.","Live Nostr clients, relay pools, signing backends, SQLite, outbox claims, retry scheduling, application state, or duplicate trade/order identifier concepts." +6,radroots_event_codec,radroots_event_codec,lib,deterministic algorithm,no_std + alloc where selected features permit; std feature,0.1.0-alpha,std;json,std;serde;json;knowledge;manifests,radroots_event;radroots_blossom;radroots_protocol,,radroots_nostr;radroots_storage_sqlite;radroots_transport_nostr;radroots_sync;radroots_sdk;bindings,"Deterministic canonical encoding, decoding, ID/signature verification, contract validation, admission, and manifest generation for Radroots events.","nostr-sdk clients, relay networking, persistence, background work, upstream client errors, or host configuration." +7,radroots_trade,radroots_trade,lib,domain algorithm,no_std + alloc for model/reducer; std feature,0.1.0-alpha,std;serde;json,std;serde;json,radroots_core;radroots_identity;radroots_event,,radroots_storage;radroots_sync;radroots_sdk;RHI;applications,"Trade validation, evidence models, deterministic reduction, conflict analysis, and side-effect-free workflow plans over the canonical event trade model.","A second TradeId definition, actor authorization, signers, event-store access, SQLx, filesystem state, transport delivery, outbox mutation, or process scheduling." +8,radroots_signing,radroots_signing,lib,host SPI,no_std + alloc core; std feature,0.1.0-alpha,std;serde,std;serde,radroots_identity;radroots_event;radroots_protocol,,radroots_nostr;radroots_sync;radroots_sdk;CLI;Studio;FFI hosts,"Object-safe author/signing SPI, actor provenance, authorization checks, requests, receipts, progress, capabilities, and normalized signing errors.","Raw secret-key ownership, keyrings, relay networking, NIP-46 session persistence, SQL, UI prompts, or executor creation." +9,radroots_transport,radroots_transport,lib,network SPI,no_std + alloc data model; std feature,0.1.0-alpha,std;serde,std;serde,radroots_identity;radroots_event;radroots_protocol,,radroots_storage;radroots_transport_nostr;radroots_sync;radroots_sdk;services;future adapters,"Transport-neutral target identities, capability/status models, source and sink SPIs, delivery/fetch policies, bounded requests, provenance, and normalized outcomes.","Closed enums that prevent new transports, Reticulum-specific constants, Nostr URLs at the generic root, storage/outbox access, retries, scheduler ownership, or silent fallback." +10,radroots_nostr,radroots_nostr,lib,protocol adapter,no_std + alloc for conversion surface; std feature,0.1.0-alpha,std;events,std;events;signing;nip17;blossom,radroots_identity;radroots_event;radroots_event_codec,radroots_signing;radroots_blossom,radroots_nostr_connect;radroots_transport_nostr;radroots_sdk;Myc;radrootsd,"Portable conversion between Radroots native event/identity types and Nostr protocol types, typed NIP helpers, and concrete local signing adapters; no live relay client.","nostr-sdk relay pools, reqwest clients, runtime ownership, broad aliases of upstream nostr types at the root, account persistence, or outbox orchestration." +11,radroots_nostr_connect,radroots_nostr_connect,lib,security protocol,std for v1; protocol data kept portable,0.1.0-alpha,serde,serde,radroots_identity;radroots_event;radroots_nostr;radroots_protocol,,radroots_sdk;Myc;remote signer tooling,"Nostr Connect/NIP-46 URIs, methods, permissions, requests, responses, client/server state machines, timeout-independent protocol validation, and normalized errors.","Relay-pool implementation, secret persistence, approval UI, global sessions, Tokio runtime ownership, or Myc-specific service storage." +12,radroots_secrets,radroots_secrets,lib,security SPI,no_std + alloc core; std adapters,0.1.0-alpha,std;serde,std;serde;memory;file;keyring,,,radroots_storage_sqlite;radroots_sdk;signing hosts;services,"Secret references, provider and key-wrapping SPIs, versioned encrypted envelopes, zeroization-safe secret handling, and explicit memory/file/keyring adapters.","Public secret bytes, Clone/Debug/Serialize for secret-bearing values, identity profiles, domain tables, arbitrary key/value storage, hidden key generation, or process-global vaults." +13,radroots_storage,radroots_storage,lib,storage SPI,std for v1,0.1.0-alpha,memory;serde,memory;serde,radroots_event;radroots_trade;radroots_transport;radroots_protocol,,radroots_storage_sqlite;radroots_sync;radroots_sdk;indexers;tests;future backends,"Backend-neutral canonical event, operation journal, outbox, transport evidence, projection, private-artifact metadata, backup, status, and atomic commit interfaces, plus an in-memory reference backend.","SQL text, SQLx pools or transactions, filesystem paths, application UI state, concrete retry loops, Nostr clients, or unconstrained raw key/value escape hatches." +14,radroots_storage_sqlite,radroots_storage_sqlite,lib,native storage backend,std-only native backend,0.1.0-alpha,,,radroots_storage;radroots_event_codec;radroots_secrets,,radroots_sdk;CLI;Studio;mobile/FFI,"SQLite implementation of the storage SPIs with schema migration, WAL, locking, integrity, backup/restore, crash recovery, and encrypted private storage.","Public SqlitePool/Connection/Transaction handles, caller-supplied arbitrary SQL, Studio state, global connection pools, runtime installation, or silent schema downgrade." +15,radroots_transport_nostr,radroots_transport_nostr,lib,native network adapter,std-only; Tokio implementation detail in v1,0.1.0-alpha,,,radroots_transport;radroots_nostr;radroots_event_codec;radroots_protocol,,radroots_sdk;CLI;radrootsd;advanced hosts,"Concrete Nostr EventSource/EventSink implementation: relay URL policy, connection, NIP-42 authentication, bounded fetch pages, delivery, status, and relay-outcome normalization.","Event-store ingestion, outbox claiming, retry scheduling, projection refresh, global relay clients, direct SQL, or transport fallback." +16,radroots_sync,radroots_sync,lib,local-first orchestration,std-only in v1; executor-neutral public API,0.1.0-alpha,serde,serde,radroots_event;radroots_event_codec;radroots_signing;radroots_transport;radroots_storage;radroots_trade;radroots_protocol,,radroots_sdk;CLI;Studio;mobile/FFI;advanced hosts,"Shared pull, verification, canonical admission, duplicate handling, projection refresh, outbox signing/delivery, status, and retry-decision orchestration without owning scheduling.","Creating an executor, spawning hidden workers, installing timers globally, owning process lifecycle, storing UI state, or transport-specific branches outside adapters." +17,radroots_geonames,radroots_geonames,lib,concrete data provider,std-only,0.1.0-alpha,,,,,radroots_sdk;CLI;geocoding applications,"GeoNames asset specification, authenticated/integrity-checked acquisition, database lifecycle, and forward/reverse locality lookup using provider-owned types.","Generic multi-provider abstraction before a second provider exists, runtime-path policy, hidden downloads, SDK configuration types, SQLx/reqwest types in the public API, or test-fixture features." 18,radroots_sdk,radroots_sdk,sdk,advanced front door,std-only native engine,0.1.0,memory,memory;sqlite;sync;nostr;nip46;local-signing;radrootsd;geonames;knowledge;native;full,radroots_core;radroots_identity;radroots_protocol;radroots_event;radroots_event_codec;radroots_trade;radroots_signing;radroots_transport;radroots_storage,radroots_secrets;radroots_storage_sqlite;radroots_nostr;radroots_nostr_connect;radroots_transport_nostr;radroots_sync;radroots_geonames,CLI;Studio;FFI/mobile;advanced native applications,"Host-neutral asynchronous client engine, product operations, capability reporting, explicit storage/signing/transport composition, diagnostics, backup/restore, and safe commit semantics.","Global runtimes or subscribers, hidden workers, process signals, CLI parsing, UI state, Studio databases, raw SQLx/upstream client types, broad wildcard reexports, or a nominal no_std claim." 19,radroots,radroots,sdk,ordinary-user front door,std-only,0.1.0,client,client;native;nostr;nip46;radrootsd;geonames;knowledge;full,radroots_sdk;radroots_core;radroots_identity;radroots_event;radroots_trade;radroots_transport,,ordinary Rust applications;examples;documentation,"Canonical Rust onboarding package with curated modules, safe defaults, stable convenience builders, domain aggregation, examples, and primary documentation.","A public radroots::sdk namespace, wildcard reexport of radroots_sdk, duplicate engine implementation, CLI binary, hidden network/filesystem/keychain side effects, or exposure of every lower-crate symbol." diff --git a/tools/xtask/Cargo.toml b/tools/xtask/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "xtask" -version = "1.0.0-alpha.1" +version = "0.1.0-alpha" edition.workspace = true rust-version.workspace = true description = "Workspace task runner for Radroots Rust crates" diff --git a/tools/xtask/src/architecture.rs b/tools/xtask/src/architecture.rs @@ -47,7 +47,6 @@ struct DeviationRecord { #[derive(Debug, Deserialize)] struct ArchitectureIdentity { spec_id: String, - initial_version: String, edition: String, resolver: String, rust_version: String, @@ -60,6 +59,7 @@ struct ArchitectureIdentity { #[derive(Debug, Deserialize)] struct ArchitectureRepository { url: String, + version: String, packages: Vec<String>, } @@ -215,12 +215,15 @@ fn validate_workspace_toolchain( } let workspace_package = &manifest.workspace.package; let public_metadata = &manifest.workspace.metadata.radroots.public_package; - if public_metadata.version != architecture.initial_version - || architecture.initial_version != "0.1.0" - { + let repository = architecture + .repositories + .values() + .find(|repository| repository.url == workspace_package.repository) + .ok_or_else(|| "workspace repository has no architecture allocation".to_owned())?; + if public_metadata.version != repository.version { return Err(format!( - "public package version source {} must match architecture initial_version {}", - public_metadata.version, architecture.initial_version + "public package version source {} must match repository version {}", + public_metadata.version, repository.version )); } if public_metadata.authors != PUBLIC_AUTHORS { @@ -352,7 +355,7 @@ fn validate_public_package_metadata( package, "version", &workspace.workspace.package.version, - &architecture.initial_version, + &repository.version, name, )?; validate_public_manifest_field( @@ -473,6 +476,16 @@ fn validate_public_dependency_versions( .iter() .map(|package| package.name.as_str()) .collect::<BTreeSet<_>>(); + let package_versions = architecture + .repositories + .values() + .flat_map(|repository| { + repository + .packages + .iter() + .map(|package| (package.as_str(), repository.version.as_str())) + }) + .collect::<BTreeMap<_, _>>(); for member in &workspace.workspace.members { let manifest_path = workspace_root.join(member).join("Cargo.toml"); @@ -495,7 +508,7 @@ fn validate_public_dependency_versions( workspace_dependencies, public_packages: &public_packages, local_packages: &local_packages, - initial_version: &architecture.initial_version, + package_versions: &package_versions, }; validate_public_dependency_sections(member, package_name, &manifest, &policy)?; } @@ -507,7 +520,7 @@ struct PublicDependencyPolicy<'a> { workspace_dependencies: Option<&'a toml::value::Table>, public_packages: &'a BTreeSet<&'a str>, local_packages: &'a BTreeSet<&'a str>, - initial_version: &'a str, + package_versions: &'a BTreeMap<&'a str, &'a str>, } fn validate_public_dependency_sections( @@ -602,7 +615,13 @@ fn validate_public_dependency_table( toml::Value::Table(table) => table.get("version").and_then(toml::Value::as_str), _ => None, }; - let exact_version = format!("={}", policy.initial_version); + let governed_version = policy + .package_versions + .get(dependency_name) + .ok_or_else(|| { + format!("public dependency {dependency_name} has no repository version authority") + })?; + let exact_version = format!("={governed_version}"); if policy.local_packages.contains(dependency_name) && (dependency_path.is_none() || version != Some(exact_version.as_str())) { @@ -1164,7 +1183,6 @@ adr_required = false fn architecture() -> ArchitectureIdentity { ArchitectureIdentity { spec_id: "radroots.crates.release.v1".to_string(), - initial_version: "0.1.0".to_string(), edition: "2024".to_string(), resolver: "3".to_string(), rust_version: "1.97.1".to_string(), @@ -1174,6 +1192,7 @@ adr_required = false "sdk".to_string(), ArchitectureRepository { url: "https://github.com/radrootslabs/sdk".to_string(), + version: "0.1.0".to_string(), packages: vec!["radroots".to_string()], }, )]), diff --git a/tools/xtask/src/contract.rs b/tools/xtask/src/contract.rs @@ -3140,7 +3140,6 @@ struct WorkspaceReleaseClassification { struct CratesReleaseArchitecture { spec_id: String, package_count: usize, - initial_version: String, repositories: CratesReleaseRepositories, package: Vec<CratesReleasePackage>, } @@ -3153,6 +3152,7 @@ struct CratesReleaseRepositories { #[derive(Debug, Deserialize)] struct CratesReleaseRepository { + version: String, packages: Vec<String>, } @@ -3860,33 +3860,26 @@ fn validate_workspace_version_lockstep( ) -> Result<(), String> { let workspace_manifest = parse_toml::<WorkspaceVersionCargoManifest>(&workspace_root.join("Cargo.toml"))?; - if workspace_manifest.workspace.package.version != contract_version { - return Err(format!( - "workspace.package.version {} must match contract version {}", - workspace_manifest.workspace.package.version, contract_version - )); - } - let architecture_path = workspace_root.join("docs/specs/radroots_crates_release_v1.toml"); - let public_versions = if architecture_path.is_file() { - let architecture = parse_toml::<CratesReleaseArchitecture>(&architecture_path)?; - architecture + let governed_version = if architecture_path.is_file() { + parse_toml::<CratesReleaseArchitecture>(&architecture_path)? .repositories .lib - .packages - .into_iter() - .map(|name| (name, architecture.initial_version.clone())) - .collect::<BTreeMap<_, _>>() + .version } else { - BTreeMap::new() + contract_version.to_owned() }; + if workspace_manifest.workspace.package.version != governed_version { + return Err(format!( + "workspace.package.version {} must match library repository version {}", + workspace_manifest.workspace.package.version, governed_version + )); + } let mut governed_packages = BTreeMap::new(); for member in &workspace_manifest.workspace.members { let package_path = workspace_root.join(member).join("Cargo.toml"); let package = parse_toml::<VersionedPackageCargoManifest>(&package_path)?; - let expected_version = public_versions - .get(&package.package.name) - .map_or(contract_version, String::as_str); + let expected_version = governed_version.as_str(); match package.package.version { PackageVersionSource::Literal(ref version) if version == expected_version => {} PackageVersionSource::Literal(version) => { @@ -9391,6 +9384,26 @@ mod tests { fn create_synthetic_workspace(prefix: &str) -> PathBuf { let root = temp_root(prefix); write_file( + &root.join("docs/specs/radroots_crates_release_v1.toml"), + r#"spec_id = "radroots.crates.release.v1" +package_count = 2 + +[repositories.lib] +version = "1.0.0" +packages = ["radroots_a", "radroots_b"] + +[repositories.sdk] +version = "0.1.0" +packages = [] + +[[package]] +name = "radroots_a" + +[[package]] +name = "radroots_b" +"#, + ); + write_file( &root.join("Cargo.toml"), r#"[workspace] members = ["crates/a", "crates/b"] @@ -10753,6 +10766,24 @@ crates = ["radroots_a", "radroots_b", "radroots_c", "radroots_d", "radroots_e"] .expect_err("lockfile version drift must fail"); assert!(lock_error.contains("Cargo.lock package radroots_a version")); + write_file( + &root.join("docs/specs/radroots_crates_release_v1.toml"), + r#"spec_id = "radroots.crates.release.v1" +package_count = 0 + +[repositories.lib] +version = "0.1.0-alpha" +packages = [] + +[repositories.sdk] +version = "0.1.0" +packages = [] +"#, + ); + let architecture_error = validate_workspace_version_lockstep(&root, "1.0.0") + .expect_err("repository version authority must override protocol version"); + assert!(architecture_error.contains("must match library repository version 0.1.0-alpha")); + assert!(parse_semver_version("01.0.0").is_err()); assert!(parse_semver_version("1.0").is_err()); assert!(parse_semver_version("1.0.0-alpha_1").is_err()); @@ -11555,7 +11586,7 @@ edition = "2024" fs::create_dir_all(&policy_dir).expect("create policy dir"); fs::write( policy_dir.join("coverage.toml"), - "[gate]\nfail_under_exec_lines = 100.0\nfail_under_functions = 100.0\nfail_under_regions = 100.0\nfail_under_branches = 100.0\nrequire_branches = true\n\n[overrides.radroots_event_codec]\nfail_under_exec_lines = 100.0\nfail_under_functions = 100.0\nfail_under_regions = 99.946\nfail_under_branches = 100.0\ntemporary = true\nreason = \"publish 1.0.0-alpha.1 temporary coverage override\"\n\n[overrides.radroots_log]\nfail_under_exec_lines = 100.0\nfail_under_functions = 100.0\nfail_under_regions = 100.0\nfail_under_branches = 100.0\nrequire_branches = false\ntemporary = true\nreason = \"branch coverage is not applicable while the crate has no measured branch records\"\n\n[required]\ncrates = [\"radroots_event_codec\", \"radroots_log\"]\n", + "[gate]\nfail_under_exec_lines = 100.0\nfail_under_functions = 100.0\nfail_under_regions = 100.0\nfail_under_branches = 100.0\nrequire_branches = true\n\n[overrides.radroots_event_codec]\nfail_under_exec_lines = 100.0\nfail_under_functions = 100.0\nfail_under_regions = 99.946\nfail_under_branches = 100.0\ntemporary = true\nreason = \"publish 0.1.0-alpha temporary coverage override\"\n\n[overrides.radroots_log]\nfail_under_exec_lines = 100.0\nfail_under_functions = 100.0\nfail_under_regions = 100.0\nfail_under_branches = 100.0\nrequire_branches = false\ntemporary = true\nreason = \"branch coverage is not applicable while the crate has no measured branch records\"\n\n[required]\ncrates = [\"radroots_event_codec\", \"radroots_log\"]\n", ) .expect("write coverage policy"); let required = [ @@ -12581,7 +12612,7 @@ crates = ["radroots_a"] .collect::<Vec<_>>() .join(", "); let mut architecture = format!( - "spec_id = \"radroots.crates.release.v1\"\npackage_count = 19\ninitial_version = \"0.1.0\"\n\n[repositories.lib]\npackages = [\"package-01\"]\n\n[repositories.sdk]\npackages = [{external_toml}]\n" + "spec_id = \"radroots.crates.release.v1\"\npackage_count = 19\n\n[repositories.lib]\nversion = \"0.1.0-alpha\"\npackages = [\"package-01\"]\n\n[repositories.sdk]\nversion = \"0.1.0\"\npackages = [{external_toml}]\n" ); for name in &approved { architecture.push_str(&format!("\n[[package]]\nname = \"{name}\"\n")); diff --git a/tools/xtask/src/contract/food_availability_projection.rs b/tools/xtask/src/contract/food_availability_projection.rs @@ -2681,7 +2681,7 @@ fn validate_blossom_dependency_values( || workspace_dependency .get("version") .and_then(toml::Value::as_str) - != Some("=0.1.0") + != Some("=0.1.0-alpha") || workspace_dependency .get("default-features") .and_then(toml::Value::as_bool) diff --git a/tools/xtask/src/contract/nip09_reconciliation.rs b/tools/xtask/src/contract/nip09_reconciliation.rs @@ -235,7 +235,7 @@ const GOVERNED_DEPENDENCY_TABLE_SHA256: [(&str, &str); 7] = [ ), ( "Cargo.toml#governed-workspace-dependencies", - "3c7294555fa6b99fe9cf4d50d3bdfd8c4709abd5a75ce80bdf2cdfb6fdc059ef", + "385bbd09be2e8f3a64f97d23d47a691fb48cc2f12ed87f692a36242e24f7851e", ), ]; @@ -14405,37 +14405,37 @@ xtask = "run -q -p xtask --" ( CORE_CARGO_MANIFEST_RELATIVE, "radroots_core", - "0.1.0", + "0.1.0-alpha", Some("radroots_core"), ), ( EVENT_CARGO_MANIFEST_RELATIVE, "radroots_event", - "0.1.0", + "0.1.0-alpha", Some("radroots_event"), ), ( EVENT_CODEC_CARGO_MANIFEST_RELATIVE, "radroots_event_codec", - "0.1.0", + "0.1.0-alpha", Some("radroots_event_codec"), ), ( BLOSSOM_CARGO_MANIFEST_RELATIVE, "radroots_blossom", - "0.1.0", + "0.1.0-alpha", Some("radroots_blossom"), ), ( EVENT_STORE_CARGO_MANIFEST_RELATIVE, "radroots_event_store", - "1.0.0-alpha.1", + "0.1.0-alpha", None, ), ( TRANSPORT_CARGO_MANIFEST_RELATIVE, "radroots_transport", - "0.1.0", + "0.1.0-alpha", Some("radroots_transport"), ), ]; @@ -20537,7 +20537,7 @@ pub(crate) fn migration_for_version"#, let cargo_lock = fs::read_to_string(&cargo_lock_path).expect("Cargo.lock"); let transport_lock_package = r#"[[package]] name = "radroots_transport" -version = "0.1.0" +version = "0.1.0-alpha" dependencies = [ "futures", "serde", @@ -20547,7 +20547,7 @@ dependencies = [ "#; let future_transport_lock_package = r#"[[package]] name = "radroots_transport" -version = "0.1.0" +version = "0.1.0-alpha" dependencies = [ "futures", "serde", diff --git a/tools/xtask/src/coverage.rs b/tools/xtask/src/coverage.rs @@ -4410,7 +4410,7 @@ test_threads = 0 ); write_file( &root.join("crates").join("core").join("Cargo.toml"), - "[package]\nname = \"radroots_core\"\nversion = \"1.0.0-alpha.1\"\nedition = \"2024\"\n", + "[package]\nname = \"radroots_core\"\nversion = \"0.1.0-alpha\"\nedition = \"2024\"\n", ); };