commit 007ac831a95d1963c4e1d5e01e2af9362f095c11 parent fd8ac5539de80b0984f754dd072dc7d909671070 Author: triesap <tyson@radroots.org> Date: Thu, 30 Jul 2026 04:21:03 +0000 event-codec: migrate workspace consumers - expose domain algorithms through the canonical codec namespaces - migrate Nostr, SQLite, and synchronization consumers off legacy roots - repair deterministic test identities and Copy-ID lint drift - refresh source-maintenance authority and pass workspace qualification Diffstat:
42 files changed, 508 insertions(+), 222 deletions(-)
diff --git a/crates/event_codec/src/admission.rs b/crates/event_codec/src/admission.rs @@ -40,6 +40,19 @@ use crate::{ }, }; +/// Typed comment admission. +pub mod comment; +/// Typed deletion admission and deterministic suppression evaluation. +pub mod deletion; +/// Typed food-availability admission and revision validation. +pub mod food_availability; +/// Typed post admission. +pub mod post; +/// Typed profile admission. +pub mod profile; +/// Typed reply admission. +pub mod reply; + #[doc(hidden)] pub mod registry_v7; pub use registry_v7::{RadrootsRegistryV7AdmissionDecision, admit_verified_event_registry_v7}; diff --git a/crates/event_codec/src/admission/comment.rs b/crates/event_codec/src/admission/comment.rs @@ -0,0 +1 @@ +pub use crate::comment::admission::*; diff --git a/crates/event_codec/src/admission/deletion.rs b/crates/event_codec/src/admission/deletion.rs @@ -0,0 +1,7 @@ +pub use crate::deletion::admission::*; +pub use crate::deletion::evaluator::*; + +pub mod reconciliation_v1 { + pub use crate::deletion::reconciliation_v1::admission::*; + pub use crate::deletion::reconciliation_v1::evaluator::*; +} diff --git a/crates/event_codec/src/admission/food_availability.rs b/crates/event_codec/src/admission/food_availability.rs @@ -0,0 +1,2 @@ +pub use crate::food_availability::admission::*; +pub use crate::food_availability::revision::*; diff --git a/crates/event_codec/src/admission/post.rs b/crates/event_codec/src/admission/post.rs @@ -0,0 +1 @@ +pub use crate::post::admission::*; diff --git a/crates/event_codec/src/admission/profile.rs b/crates/event_codec/src/admission/profile.rs @@ -0,0 +1 @@ +pub use crate::profile::admission::*; diff --git a/crates/event_codec/src/admission/reply.rs b/crates/event_codec/src/admission/reply.rs @@ -0,0 +1 @@ +pub use crate::reply::admission::*; diff --git a/crates/event_codec/src/decode.rs b/crates/event_codec/src/decode.rs @@ -7,6 +7,120 @@ use core::fmt; use radroots_event::{envelope::EventEnvelopeError, wire::EventWireError}; +// Domain-specific parsers live behind the canonical decoding namespace. +pub use crate::error::EventParseError; +pub use crate::parsed::{RadrootsParsedData, RadrootsParsedEvent}; + +macro_rules! decode_domain { + ($name:ident, $source:path) => { + pub mod $name { + pub use $source::*; + } + }; +} + +decode_domain!(app_data, crate::app_data::decode); +decode_domain!(article, crate::article::decode); +decode_domain!(calendar, crate::calendar::decode); +#[cfg(feature = "json")] +decode_domain!(coop, crate::coop::decode); +#[cfg(feature = "json")] +decode_domain!(document, crate::document::decode); +#[cfg(feature = "json")] +decode_domain!(farm_crdt, crate::farm_crdt::decode); +decode_domain!(farm_file, crate::farm_file::decode); +#[cfg(feature = "json")] +decode_domain!(farm_workspace, crate::farm_workspace::decode); +decode_domain!(file_metadata, crate::file_metadata::decode); +decode_domain!(follow, crate::follow::decode); +decode_domain!(geochat, crate::geochat::decode); +decode_domain!(gift_wrap, crate::gift_wrap::decode); +decode_domain!(group, crate::group::decode); +decode_domain!(http_auth, crate::http_auth::decode); +decode_domain!(list, crate::list::decode); +decode_domain!(list_set, crate::list_set::decode); +decode_domain!(message, crate::message::decode); +decode_domain!(message_file, crate::message_file::decode); +#[cfg(feature = "json")] +decode_domain!(plot, crate::plot::decode); +decode_domain!(reaction, crate::reaction::decode); +decode_domain!(relay_auth, crate::relay_auth::decode); +decode_domain!(report, crate::report::decode); +decode_domain!(repost, crate::repost::decode); +#[cfg(feature = "json")] +decode_domain!(resource_area, crate::resource_area::decode); +#[cfg(feature = "json")] +decode_domain!(resource_cap, crate::resource_cap::decode); +decode_domain!(seal, crate::seal::decode); + +pub mod comment { + pub use crate::comment::inbound::*; +} + +pub mod deletion { + pub use crate::deletion::inbound::*; + pub use crate::deletion::reconciliation_v1::inbound as reconciliation_v1; +} + +#[cfg(feature = "json")] +pub mod farm { + pub use crate::farm::decode::*; +} + +pub mod food_availability { + pub use crate::food_availability::inbound::*; +} + +pub mod job { + pub use crate::job::error::*; + pub use crate::job::traits::*; + + pub mod feedback { + pub use crate::job::feedback::decode::*; + } + pub mod request { + pub use crate::job::request::decode::*; + } + pub mod result { + pub use crate::job::result::decode::*; + } +} + +#[cfg(feature = "knowledge")] +pub mod knowledge { + pub use crate::knowledge::decode::*; +} + +pub mod operational_listing { + pub use crate::operational_listing::decode::*; +} + +#[cfg(feature = "json")] +pub mod order { + pub use crate::order::decode::*; +} + +pub mod post { + pub use crate::post::decode::*; + pub use crate::post::inbound::*; +} + +#[cfg(feature = "json")] +pub mod profile { + pub use crate::profile::decode::*; + pub use crate::profile::inbound::*; + pub use crate::profile::{LegacyProfile, RadrootsProfileData}; +} + +pub mod reply { + pub use crate::reply::inbound::*; +} + +#[cfg(feature = "json")] +pub mod trade { + pub use crate::trade::{RadrootsTradeMutationParseError, trade_mutation_from_event}; +} + #[cfg(feature = "json")] use radroots_event::{ admission::RawEvent, diff --git a/crates/event_codec/src/encode.rs b/crates/event_codec/src/encode.rs @@ -9,6 +9,109 @@ use std::string::String; #[cfg(feature = "json")] use radroots_event::envelope::EventEnvelope; +// Domain-specific algorithms live behind the canonical encoding namespace. +// The implementation modules remain crate-private compatibility structure +// until their final removal checkpoint. +pub use crate::error::{EventEncodeError, RadrootsEncodeError}; + +macro_rules! encode_domain { + ($name:ident, $source:path) => { + pub mod $name { + pub use $source::*; + } + }; +} + +encode_domain!(app_data, crate::app_data::encode); +encode_domain!(article, crate::article::encode); +encode_domain!(calendar, crate::calendar::encode); +encode_domain!(coop, crate::coop::encode); +encode_domain!(document, crate::document::encode); +encode_domain!(farm_crdt, crate::farm_crdt::encode); +encode_domain!(farm_file, crate::farm_file::encode); +encode_domain!(farm_workspace, crate::farm_workspace::encode); +encode_domain!(file_metadata, crate::file_metadata::encode); +encode_domain!(follow, crate::follow::encode); +encode_domain!(geochat, crate::geochat::encode); +encode_domain!(gift_wrap, crate::gift_wrap::encode); +encode_domain!(group, crate::group::encode); +encode_domain!(http_auth, crate::http_auth::encode); +encode_domain!(list, crate::list::encode); +encode_domain!(list_set, crate::list_set::encode); +encode_domain!(message, crate::message::encode); +encode_domain!(message_file, crate::message_file::encode); +encode_domain!(plot, crate::plot::encode); +encode_domain!(reaction, crate::reaction::encode); +encode_domain!(relay_auth, crate::relay_auth::encode); +encode_domain!(report, crate::report::encode); +encode_domain!(repost, crate::repost::encode); +encode_domain!(resource_area, crate::resource_area::encode); +encode_domain!(resource_cap, crate::resource_cap::encode); +encode_domain!(seal, crate::seal::encode); + +pub mod comment { + pub use crate::comment::authored::*; +} + +pub mod deletion { + pub use crate::deletion::authored::*; +} + +pub mod farm { + pub use crate::farm::encode::*; + pub use crate::farm::list_sets::*; +} + +pub mod food_availability { + pub use crate::food_availability::authored::*; +} + +pub mod job { + pub mod feedback { + pub use crate::job::feedback::encode::*; + } + pub mod request { + pub use crate::job::request::encode::*; + } + pub mod result { + pub use crate::job::result::encode::*; + } +} + +#[cfg(feature = "knowledge")] +pub mod knowledge { + pub use crate::knowledge::encode::*; +} + +pub mod operational_listing { + pub use crate::operational_listing::encode::*; + pub use crate::operational_listing::tags::*; +} + +pub mod order { + #[cfg(feature = "json")] + pub use crate::order::encode::*; + pub use crate::order::tags::*; +} + +pub mod post { + pub use crate::post::authored::*; +} + +#[cfg(feature = "json")] +pub mod profile { + pub use crate::profile::authored::*; +} + +pub mod reply { + pub use crate::reply::authored::*; +} + +#[cfg(feature = "json")] +pub mod trade { + pub use crate::trade::{trade_mutation_event_build, trade_mutation_tags}; +} + /// A failure while encoding an event. #[non_exhaustive] #[derive(Clone, Copy, Debug, PartialEq, Eq)] diff --git a/crates/event_codec/src/verify.rs b/crates/event_codec/src/verify.rs @@ -8,6 +8,10 @@ pub use radroots_event::admission::{ ContractValidatedEvent, IdVerifiedEvent, RawEvent, SignatureVerifiedEvent, SignatureVerifier, }; +// Preserve the mature verification profiles under the final verification +// namespace while consumers move away from the superseded crate-root exports. +pub use crate::verification::*; + /// Verifies that an event's declared identifier matches its canonical bytes. pub fn id(event: RawEvent) -> Result<IdVerifiedEvent, VerificationError> { event.verify_id() diff --git a/crates/event_store/contracts/source_maintenance_v1.manifest.json b/crates/event_store/contracts/source_maintenance_v1.manifest.json @@ -509,8 +509,8 @@ { "role": "event_codec_admission_facade", "path": "crates/event_codec/src/admission.rs", - "byte_length": 20592, - "sha256": "49cc28d06e99880d5df75e899ca72c97f4fa27e8cb4f96457527b6cff783e0ae", + "byte_length": 20946, + "sha256": "1217ef75ee71c5dba88e16545933c8fcf53cb82b133ab4830b3c3ba08946ca16", "hash_algorithm": "sha256_bytes_v1" }, { @@ -684,8 +684,8 @@ { "role": "event_store_error_and_limits", "path": "crates/event_store/src/error.rs", - "byte_length": 19464, - "sha256": "47be522eb0541619683f8b30eb6f66da821b65eb310a60815c81c7b7f3349947", + "byte_length": 19458, + "sha256": "3d87df984af6ae5decf7ca8c3a8d5422be6c647e6a05490225b6b2037bf3701b", "hash_algorithm": "sha256_bytes_v1" }, { @@ -719,15 +719,15 @@ { "role": "event_store_reconciliation_v1_model", "path": "crates/event_store/src/model/reconciliation_v1.rs", - "byte_length": 10452, - "sha256": "bd3a8f0efe6d4b2959ab8a5b8048cd940fd078dce842083be2386544722017ef", + "byte_length": 10446, + "sha256": "475b7b840bffdae7e3f7a31f5b940b9dfa579eaa1cac640729aaaeadabf83ba6", "hash_algorithm": "sha256_bytes_v1" }, { "role": "event_store_reconciliation_v1_ingest_model", "path": "crates/event_store/src/model/ingest_reconciliation_v1.rs", - "byte_length": 1594, - "sha256": "27b02ef508b4df45a801ef72e9f92b43819ea6372a3936bc2507c67a42acd07a", + "byte_length": 1588, + "sha256": "6117e797674c35bb1ccebffbc6a8c0108bfc38c7c9f82607066dfd802b8f0734", "hash_algorithm": "sha256_bytes_v1" }, { @@ -741,21 +741,21 @@ "role": "current_visibility_model", "path": "crates/event_store/src/model/current_visibility_v1.rs", "byte_length": 5634, - "sha256": "7d5b2b35ceb52d7472d68444515fa4a6aab43f6838b557aefff74fcebf487657", + "sha256": "d64429bc7985231e923c1c3e5295d94270a817dd5dc96693f35dfdf2dc398e4f", "hash_algorithm": "sha256_bytes_v1" }, { "role": "food_projection_model", "path": "crates/event_store/src/model/food_availability_projection_v1.rs", - "byte_length": 17109, - "sha256": "2fd51989da7f07b3e80557fb1a4b89814126eb3ffd80023e42012f0242b0584d", + "byte_length": 17108, + "sha256": "67861a966d674efbc40f0b0433db2ec006048ff923f6261df4161e2ddba717b5", "hash_algorithm": "sha256_bytes_v1" }, { "role": "source_generation_rebuild_authority", "path": "crates/event_store/src/nip09/reconciliation_v1.rs", - "byte_length": 184853, - "sha256": "b6887f9f319809d401ac519137cfa78467ca26594cae53720a58a37ccc72757e", + "byte_length": 184833, + "sha256": "3ca802cb7a8444c8512b2be1390a019281704316a430fb9b75a8ad2cad358a07", "hash_algorithm": "sha256_bytes_v1" }, { @@ -775,15 +775,15 @@ { "role": "public_store_and_transaction_authority", "path": "crates/event_store/src/store.rs", - "byte_length": 393835, - "sha256": "d47f5d8d95599783162533dcd26b0114160a098ddef3447fb2ee6648c3949e5f", + "byte_length": 393535, + "sha256": "c3286b50a2e9e17a330938492cfded0829dc19516f55aa4f62289d513457bad7", "hash_algorithm": "sha256_bytes_v1" }, { "role": "addressable_transition_feed_store", "path": "crates/event_store/src/store/addressable_transition_feed_v1.rs", - "byte_length": 40216, - "sha256": "31ed3390d279aee5261848386889cf256667759b9898be5607856a3f80fd7eb7", + "byte_length": 40209, + "sha256": "2cebcca9602633652a79e7041d18d3a7d3feb1388a98f4f68137b9814efcedfa", "hash_algorithm": "sha256_bytes_v1" }, { @@ -796,8 +796,8 @@ { "role": "food_projection_store", "path": "crates/event_store/src/store/food_availability_projection_v1.rs", - "byte_length": 48927, - "sha256": "78a96d441e2fbfdfc6f9e2787ae773e8fd6aa5c53ca10d658350b843c0d1537e", + "byte_length": 48919, + "sha256": "3a30da308ef863b806ed63d1cb65ac80f6a946a71821af84a0c595330491757e", "hash_algorithm": "sha256_bytes_v1" }, { @@ -867,7 +867,7 @@ "role": "source_maintenance_governance", "path": "tools/xtask/src/contract/source_maintenance.rs", "byte_length": 199270, - "sha256": "148698b4f9f46bcad6af5ce84240153d5742b8ee2ce8b938539ede0da9ef9cdb", + "sha256": "a6685c27255918769f894ab098ba13a927c0d70c423fbd72b5404c0af0ae2f89", "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 @@ -0212fe980f1f28e08dd0cfa8ec3f98b3ee0d2aed7cb29e5b365b08c0f55d8d59 +34e0308172f30a2086b25b053bd37fd4369d240317742e6d00c0192296a49107 diff --git a/crates/event_store/src/error.rs b/crates/event_store/src/error.rs @@ -1,7 +1,7 @@ use radroots_event::draft::SignedEventError; use radroots_event::id::ParseError; use radroots_event::wire::EventWireError; -use radroots_event_codec::verification::RadrootsNip01VerificationError; +use radroots_event_codec::verify::RadrootsNip01VerificationError; use radroots_transport::RadrootsTransportError; /// Maximum retained raw event rows in one event store. 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\": 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_public_surface\",\n \"path\": \"crates/event/src/lib.rs\",\n \"byte_length\": 1892,\n \"sha256\": \"5d609b963a9b8db18ef96a10f394617413734d2631774d3296e6d8fc029cb02c\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_contract_facade\",\n \"path\": \"crates/event/src/contract.rs\",\n \"byte_length\": 208,\n \"sha256\": \"27466bf36461071931f391c60646a13f7781d19584583166cc54c0eece76d010\",\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\": 145805,\n \"sha256\": \"0a62603f6fc05dc9f758561cf7da258c676ada810ceaeca7fb151364a5c83d62\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_envelope_authority\",\n \"path\": \"crates/event/src/envelope.rs\",\n \"byte_length\": 29310,\n \"sha256\": \"29f8d8c4b17c01cb5a8c7f59e4ce52e134180e0e6f37d265063d278b8f2ff26e\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_verification_typestate_authority\",\n \"path\": \"crates/event/src/verification.rs\",\n \"byte_length\": 9400,\n \"sha256\": \"417acb2ce670d266b1fa4fcafd6b48a910218deab38f57fb8b942056db76f94d\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_admission_typestate_authority\",\n \"path\": \"crates/event/src/admission.rs\",\n \"byte_length\": 7052,\n \"sha256\": \"62bd2ceb0f434946fdfc2b81f4efb13738676a29a6936c23a427e43aadf2d9cb\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_head_facade\",\n \"path\": \"crates/event/src/event_head.rs\",\n \"byte_length\": 97,\n \"sha256\": \"f761ff3e74c4f5e1e28381db00ce698c633ff048669b22984d14a587482e8e83\",\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\": 6849,\n \"sha256\": \"9f4144d8d240023cf493ce0b538ade4c16dc44204d6b5f2797152caf6f9e7dba\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_ids_authority\",\n \"path\": \"crates/event/src/id.rs\",\n \"byte_length\": 48381,\n \"sha256\": \"a08fe3873815453a03318a706e2fa98a8a6728ec69d24368a87ec60025566fe0\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_trade_authority\",\n \"path\": \"crates/event/src/trade.rs\",\n \"byte_length\": 65549,\n \"sha256\": \"f818a7287ed82de3fb9ef1d973f0fb18d84b30eb4827ddc576ee502dd980145f\",\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\": 51150,\n \"sha256\": \"ecc619aae28d688d13f35467398f17766b60f26c2bf3616d772ce65b7fa4fb53\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_calendar_authority\",\n \"path\": \"crates/event/src/calendar.rs\",\n \"byte_length\": 97992,\n \"sha256\": \"73e79d61ee175cb46e6123e1d28239252ddf0ad094dc1113bdb1286b63b88d57\",\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\": 7956,\n \"sha256\": \"ac58484b87c7712c81f50f884d1c0dd60938571aa5f6f05d555191f529a4c2b0\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_profile_authority\",\n \"path\": \"crates/event/src/profile.rs\",\n \"byte_length\": 17011,\n \"sha256\": \"572bfe3b6f1711d109db445077f0a8453cad3f021cc0638f79201b618e16b978\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_post_authority\",\n \"path\": \"crates/event/src/post.rs\",\n \"byte_length\": 19968,\n \"sha256\": \"a822cd51eff9cbaa39db998cc5c90d117f7a983f0fe2d42d42118cb00e95982c\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_comment_authority\",\n \"path\": \"crates/event/src/comment.rs\",\n \"byte_length\": 34745,\n \"sha256\": \"24b7fda13229f21cee5cef2a9941e3aaafdbc486b19ed42731b0b6ee37c28703\",\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\": 42829,\n \"sha256\": \"52472c07eb0855d884c60755dc3a3e1a963793451d707e51f769f2d78384f318\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_deletion_authority\",\n \"path\": \"crates/event/src/deletion.rs\",\n \"byte_length\": 30022,\n \"sha256\": \"8c3f2e32407520a8e8242c1293af32613c648fb76218b8003a18929ac0b3811f\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_dto_authority\",\n \"path\": \"crates/event/src/dto.rs\",\n \"byte_length\": 5038,\n \"sha256\": \"9e228c95ff6ff33f99441d8682781fd0a1c4d3f1db24284a43985dcbac3ba136\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_farm_crdt_authority\",\n \"path\": \"crates/event/src/farm_crdt.rs\",\n \"byte_length\": 21118,\n \"sha256\": \"cec265ac9c42b59a14be4eb96924d26a83477c27291f667f23e6e47a64b6b2c7\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_knowledge_authority\",\n \"path\": \"crates/event/src/knowledge.rs\",\n \"byte_length\": 54624,\n \"sha256\": \"3d55ff88a4e30d5d605f9ae4b2e96b9df6978d6c14e52f9aeb0b8039cfc200d7\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_operational_listing_authority\",\n \"path\": \"crates/event/src/operational_listing.rs\",\n \"byte_length\": 10307,\n \"sha256\": \"52e710db816c89c8d4b87c86541987f7447f2f7091c394c68d9cb98a27f90159\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_order_authority\",\n \"path\": \"crates/event/src/order.rs\",\n \"byte_length\": 60218,\n \"sha256\": \"4203fcc469612cac5c705884564e140b9fb076cd57079e22ed85275a8b936e50\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_reply_authority\",\n \"path\": \"crates/event/src/reply.rs\",\n \"byte_length\": 15581,\n \"sha256\": \"b0b83a1e96125c0892d932e9314519242a715fa8f46334aff765ffd248c91d9a\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_trade_validation_authority\",\n \"path\": \"crates/event/src/trade_validation.rs\",\n \"byte_length\": 4669,\n \"sha256\": \"1486f79bd1d0eadea6cc1b7646ce1f7f57ccade18334a3ea37286426676b9b98\",\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\": 13598,\n \"sha256\": \"fb8b026eeccf51d78f20771c44223e7b48825aa0e3c760d6b3cb90148021a674\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_media_authority\",\n \"path\": \"crates/event/src/media.rs\",\n \"byte_length\": 3455,\n \"sha256\": \"10678af3a202d5367dbcf3bcdc0bf9fdf8d8fb89b045d7d3fb96b3cc195ab6f9\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_social_authority\",\n \"path\": \"crates/event/src/social.rs\",\n \"byte_length\": 6076,\n \"sha256\": \"a2dab19caad46eab14fac86e7c878a801a450d8ac374b0e728b71a5a224eef19\",\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\": 22198,\n \"sha256\": \"c818bc1f67e215948ba253c8c62b09ab788db9aeec9b6df8096014b55565cb8c\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_public_surface\",\n \"path\": \"crates/event_codec/src/lib.rs\",\n \"byte_length\": 2698,\n \"sha256\": \"021496688fbc8390639a4ec47be1d0b26fe3af0926fbae195692687f04ee4401\",\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\": 6584,\n \"sha256\": \"72f64615bd6b6dc3b051579e3069b2213f3781dcc28e12f0b533c7d81b81b9b1\",\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\": 5228,\n \"sha256\": \"62da30cb6ef7d0ed2d43715a73bd529283e8ae8c12571bc5c68722cb400f17b8\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_admission_facade\",\n \"path\": \"crates/event_codec/src/admission.rs\",\n \"byte_length\": 20592,\n \"sha256\": \"49cc28d06e99880d5df75e899ca72c97f4fa27e8cb4f96457527b6cff783e0ae\",\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\": 10347,\n \"sha256\": \"32111c0e0592229c11a93a3a8054e7b124b039451aa696a9abcb56df2a6608d3\",\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\": 15985,\n \"sha256\": \"e17083b0596e3a55994c399bc6272c0ebf04cabaa513260b3d45dd546f7f50ef\",\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\": 26662,\n \"sha256\": \"d1d11116ca27801b7e2f17da60900e6a9ca0b6f27ea9ee0bf19e97dbf24c0c32\",\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\": 53311,\n \"sha256\": \"c63fe853536b17bded6073f32b53434b60fc5123f911d01c642a6b3982f09c70\",\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\": 38028,\n \"sha256\": \"c6901f559e83700610595720c47a4d062078ae8411e1fc2fb952dd215b19dd90\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_error_authority\",\n \"path\": \"crates/event_codec/src/error.rs\",\n \"byte_length\": 3666,\n \"sha256\": \"174ce982bca37fac28d016c3ab3236441c9b31b2169ec94db6c9288b36c72849\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_food_admission_authority\",\n \"path\": \"crates/event_codec/src/food_availability/admission.rs\",\n \"byte_length\": 5681,\n \"sha256\": \"99809859090f5295572688d06bbb30dbe50524ba2c996de7ec5b26f6dd390643\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_food_authored_authority\",\n \"path\": \"crates/event_codec/src/food_availability/authored.rs\",\n \"byte_length\": 9724,\n \"sha256\": \"8673ec62ed3fc47b691efd9ca828643719803971e72b756c5b4603d409d0fba5\",\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\": 26037,\n \"sha256\": \"92a7e75da3293967cec17a514479144c3c948a64542577dd58c7f07992968e4f\",\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\": 4946,\n \"sha256\": \"1b3558a3196744005978dceddd33d3a72ad1ab8f50fb1cbfd997dcfe98bb9e39\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_job_encode_authority\",\n \"path\": \"crates/event_codec/src/job/encode.rs\",\n \"byte_length\": 1670,\n \"sha256\": \"5d6cae6309fcdd02deb7c751b5c451d257cf1900986391cb39cbb2bfd1ddb577\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_knowledge_verification_authority\",\n \"path\": \"crates/event_codec/src/knowledge/verification.rs\",\n \"byte_length\": 6986,\n \"sha256\": \"6f8a10ed262ce37f05acd9c89a1e37ca2fa99ce7da18407891e8abe228ee2349\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_operational_listing_tags_authority\",\n \"path\": \"crates/event_codec/src/operational_listing/tags.rs\",\n \"byte_length\": 50222,\n \"sha256\": \"55b6860bc6f4699dd47a49f8336764e9db78aafb7c32849102dedeb96804b373\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_order_decode_authority\",\n \"path\": \"crates/event_codec/src/order/decode.rs\",\n \"byte_length\": 42667,\n \"sha256\": \"033d9465bc041d205eab3f820572b719a35651340dcb50bdce7c60fabee5f6e1\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_profile_facade\",\n \"path\": \"crates/event_codec/src/profile/mod.rs\",\n \"byte_length\": 1456,\n \"sha256\": \"06b890da54580e2ec68f7e729281b7c3b650ac0a95a4fcb0db3c6cdaa591a7ef\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_tag_builders_authority\",\n \"path\": \"crates/event_codec/src/tag_builders.rs\",\n \"byte_length\": 9232,\n \"sha256\": \"bd81ccf04fd72358331b48eddcde087a95e115c5bd90c05fd9332644979ad5e6\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_trade_facade\",\n \"path\": \"crates/event_codec/src/trade/mod.rs\",\n \"byte_length\": 21472,\n \"sha256\": \"10cee4b6cd6429ac9eb00327a521bcd0982fae4de98bda77e4728fda002965d3\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_store_dependency_authority\",\n \"path\": \"crates/event_store/Cargo.toml\",\n \"byte_length\": 1550,\n \"sha256\": \"9901a09402592ee873c255edf2e0c0d770105401255679d86ad47c35cb159d72\",\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\": 19464,\n \"sha256\": \"47be522eb0541619683f8b30eb6f66da821b65eb310a60815c81c7b7f3349947\",\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\": 32314,\n \"sha256\": \"d7ffa47719783c9f08cb4e00fbe47123cf0310ead06f77d3ad1d81edfda96b2c\",\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\": 10452,\n \"sha256\": \"bd3a8f0efe6d4b2959ab8a5b8048cd940fd078dce842083be2386544722017ef\",\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\": 1594,\n \"sha256\": \"27b02ef508b4df45a801ef72e9f92b43819ea6372a3936bc2507c67a42acd07a\",\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\": 22229,\n \"sha256\": \"e651952d73ed0a29d2b137076f56f699beada205ac84ed8a96834e86e343fa78\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"current_visibility_model\",\n \"path\": \"crates/event_store/src/model/current_visibility_v1.rs\",\n \"byte_length\": 5634,\n \"sha256\": \"7d5b2b35ceb52d7472d68444515fa4a6aab43f6838b557aefff74fcebf487657\",\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\": 17109,\n \"sha256\": \"2fd51989da7f07b3e80557fb1a4b89814126eb3ffd80023e42012f0242b0584d\",\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\": 184853,\n \"sha256\": \"b6887f9f319809d401ac519137cfa78467ca26594cae53720a58a37ccc72757e\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"nip09_successor_result_vector_executor\",\n \"path\": \"crates/event_store/tests/support/nip09_reconciliation_v1_result_vector_v2.rs\",\n \"byte_length\": 18205,\n \"sha256\": \"c632beee70dc777b8dd2a4f88cadb55296fee7aa5742e6e2c9f6d49f26ae2c78\",\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\": 393835,\n \"sha256\": \"d47f5d8d95599783162533dcd26b0114160a098ddef3447fb2ee6648c3949e5f\",\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\": 40216,\n \"sha256\": \"31ed3390d279aee5261848386889cf256667759b9898be5607856a3f80fd7eb7\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"current_visibility_store\",\n \"path\": \"crates/event_store/src/store/current_visibility_v1.rs\",\n \"byte_length\": 15737,\n \"sha256\": \"aa5d1bff7a5368cbac2b37906bb40f54bfc8aa6906bab34369569fdd105bf899\",\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\": 48927,\n \"sha256\": \"78a96d441e2fbfdfc6f9e2787ae773e8fd6aa5c53ca10d658350b843c0d1537e\",\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\": 6569,\n \"sha256\": \"f5bd8ddb45e1b2144895bd8da737fc92db051be1844ce7e8047a32b47376ce37\",\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\": 16558,\n \"sha256\": \"d88c1f7ff5cc0a19221ad893eb840d55c11535f13adf84ffb3076cbc18d4abf1\",\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\": 29950,\n \"sha256\": \"c72aaff06e4f35d0b4523c6625e83345879f9e15b9fe9563dccf589e5d01e277\",\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\": 10835,\n \"sha256\": \"c82179b9f57968191f3e71dd008cc701787c62715ada74090eeecaa3b213076d\",\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\": 51849,\n \"sha256\": \"db43df5849c811d767a87bfa7884ce499400d0b169734e18242542a4415b3a51\",\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\": 34046,\n \"sha256\": \"776903c6431ff07f26c6ad6b713db5628efce1a72f34d86de6e47d4404fa3a6d\",\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\": 39149,\n \"sha256\": \"3d1bba3980b80698d2a21e26caf7af6fe4d9dc4a7fbabc6e406b5d33928b457f\",\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\": 198991,\n \"sha256\": \"36fd3d8b5dda3b0855a06a47dae14cae7f4cc84aaca9902c31477c218859fccc\",\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\": 842232,\n \"sha256\": \"08c2cc956f0f055c8e25d99b5c05dd8f7f2b095c52efa125b7f05471302ef9f5\",\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\": 199270,\n \"sha256\": \"148698b4f9f46bcad6af5ce84240153d5742b8ee2ce8b938539ede0da9ef9cdb\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"contract_command_authority\",\n \"path\": \"tools/xtask/src/contract.rs\",\n \"byte_length\": 508534,\n \"sha256\": \"43900769fc0d364ff6d693ec735312126b233774ca23d525997823409a4b783b\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"dto_root_generation_authority\",\n \"path\": \"tools/xtask/src/dto_roots.rs\",\n \"byte_length\": 35940,\n \"sha256\": \"a899a5695d7533c151d03477c4bd697a6e55c47a4980549724ac42046af694f5\",\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\": 16426,\n \"sha256\": \"abc24896c6c740c10811a3e003ec4be8ebdb376a7b6b01445bfa7a5889f094a7\",\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_public_surface\",\n \"path\": \"crates/event/src/lib.rs\",\n \"byte_length\": 1892,\n \"sha256\": \"5d609b963a9b8db18ef96a10f394617413734d2631774d3296e6d8fc029cb02c\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_contract_facade\",\n \"path\": \"crates/event/src/contract.rs\",\n \"byte_length\": 208,\n \"sha256\": \"27466bf36461071931f391c60646a13f7781d19584583166cc54c0eece76d010\",\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\": 145805,\n \"sha256\": \"0a62603f6fc05dc9f758561cf7da258c676ada810ceaeca7fb151364a5c83d62\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_envelope_authority\",\n \"path\": \"crates/event/src/envelope.rs\",\n \"byte_length\": 29310,\n \"sha256\": \"29f8d8c4b17c01cb5a8c7f59e4ce52e134180e0e6f37d265063d278b8f2ff26e\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_verification_typestate_authority\",\n \"path\": \"crates/event/src/verification.rs\",\n \"byte_length\": 9400,\n \"sha256\": \"417acb2ce670d266b1fa4fcafd6b48a910218deab38f57fb8b942056db76f94d\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_admission_typestate_authority\",\n \"path\": \"crates/event/src/admission.rs\",\n \"byte_length\": 7052,\n \"sha256\": \"62bd2ceb0f434946fdfc2b81f4efb13738676a29a6936c23a427e43aadf2d9cb\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_head_facade\",\n \"path\": \"crates/event/src/event_head.rs\",\n \"byte_length\": 97,\n \"sha256\": \"f761ff3e74c4f5e1e28381db00ce698c633ff048669b22984d14a587482e8e83\",\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\": 6849,\n \"sha256\": \"9f4144d8d240023cf493ce0b538ade4c16dc44204d6b5f2797152caf6f9e7dba\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_ids_authority\",\n \"path\": \"crates/event/src/id.rs\",\n \"byte_length\": 48381,\n \"sha256\": \"a08fe3873815453a03318a706e2fa98a8a6728ec69d24368a87ec60025566fe0\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_trade_authority\",\n \"path\": \"crates/event/src/trade.rs\",\n \"byte_length\": 65549,\n \"sha256\": \"f818a7287ed82de3fb9ef1d973f0fb18d84b30eb4827ddc576ee502dd980145f\",\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\": 51150,\n \"sha256\": \"ecc619aae28d688d13f35467398f17766b60f26c2bf3616d772ce65b7fa4fb53\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_calendar_authority\",\n \"path\": \"crates/event/src/calendar.rs\",\n \"byte_length\": 97992,\n \"sha256\": \"73e79d61ee175cb46e6123e1d28239252ddf0ad094dc1113bdb1286b63b88d57\",\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\": 7956,\n \"sha256\": \"ac58484b87c7712c81f50f884d1c0dd60938571aa5f6f05d555191f529a4c2b0\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_profile_authority\",\n \"path\": \"crates/event/src/profile.rs\",\n \"byte_length\": 17011,\n \"sha256\": \"572bfe3b6f1711d109db445077f0a8453cad3f021cc0638f79201b618e16b978\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_post_authority\",\n \"path\": \"crates/event/src/post.rs\",\n \"byte_length\": 19968,\n \"sha256\": \"a822cd51eff9cbaa39db998cc5c90d117f7a983f0fe2d42d42118cb00e95982c\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_comment_authority\",\n \"path\": \"crates/event/src/comment.rs\",\n \"byte_length\": 34745,\n \"sha256\": \"24b7fda13229f21cee5cef2a9941e3aaafdbc486b19ed42731b0b6ee37c28703\",\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\": 42829,\n \"sha256\": \"52472c07eb0855d884c60755dc3a3e1a963793451d707e51f769f2d78384f318\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_deletion_authority\",\n \"path\": \"crates/event/src/deletion.rs\",\n \"byte_length\": 30022,\n \"sha256\": \"8c3f2e32407520a8e8242c1293af32613c648fb76218b8003a18929ac0b3811f\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_dto_authority\",\n \"path\": \"crates/event/src/dto.rs\",\n \"byte_length\": 5038,\n \"sha256\": \"9e228c95ff6ff33f99441d8682781fd0a1c4d3f1db24284a43985dcbac3ba136\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_farm_crdt_authority\",\n \"path\": \"crates/event/src/farm_crdt.rs\",\n \"byte_length\": 21118,\n \"sha256\": \"cec265ac9c42b59a14be4eb96924d26a83477c27291f667f23e6e47a64b6b2c7\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_knowledge_authority\",\n \"path\": \"crates/event/src/knowledge.rs\",\n \"byte_length\": 54624,\n \"sha256\": \"3d55ff88a4e30d5d605f9ae4b2e96b9df6978d6c14e52f9aeb0b8039cfc200d7\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_operational_listing_authority\",\n \"path\": \"crates/event/src/operational_listing.rs\",\n \"byte_length\": 10307,\n \"sha256\": \"52e710db816c89c8d4b87c86541987f7447f2f7091c394c68d9cb98a27f90159\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_order_authority\",\n \"path\": \"crates/event/src/order.rs\",\n \"byte_length\": 60218,\n \"sha256\": \"4203fcc469612cac5c705884564e140b9fb076cd57079e22ed85275a8b936e50\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_reply_authority\",\n \"path\": \"crates/event/src/reply.rs\",\n \"byte_length\": 15581,\n \"sha256\": \"b0b83a1e96125c0892d932e9314519242a715fa8f46334aff765ffd248c91d9a\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_trade_validation_authority\",\n \"path\": \"crates/event/src/trade_validation.rs\",\n \"byte_length\": 4669,\n \"sha256\": \"1486f79bd1d0eadea6cc1b7646ce1f7f57ccade18334a3ea37286426676b9b98\",\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\": 13598,\n \"sha256\": \"fb8b026eeccf51d78f20771c44223e7b48825aa0e3c760d6b3cb90148021a674\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_media_authority\",\n \"path\": \"crates/event/src/media.rs\",\n \"byte_length\": 3455,\n \"sha256\": \"10678af3a202d5367dbcf3bcdc0bf9fdf8d8fb89b045d7d3fb96b3cc195ab6f9\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_social_authority\",\n \"path\": \"crates/event/src/social.rs\",\n \"byte_length\": 6076,\n \"sha256\": \"a2dab19caad46eab14fac86e7c878a801a450d8ac374b0e728b71a5a224eef19\",\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\": 22198,\n \"sha256\": \"c818bc1f67e215948ba253c8c62b09ab788db9aeec9b6df8096014b55565cb8c\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_public_surface\",\n \"path\": \"crates/event_codec/src/lib.rs\",\n \"byte_length\": 2698,\n \"sha256\": \"021496688fbc8390639a4ec47be1d0b26fe3af0926fbae195692687f04ee4401\",\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\": 6584,\n \"sha256\": \"72f64615bd6b6dc3b051579e3069b2213f3781dcc28e12f0b533c7d81b81b9b1\",\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\": 5228,\n \"sha256\": \"62da30cb6ef7d0ed2d43715a73bd529283e8ae8c12571bc5c68722cb400f17b8\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_admission_facade\",\n \"path\": \"crates/event_codec/src/admission.rs\",\n \"byte_length\": 20946,\n \"sha256\": \"1217ef75ee71c5dba88e16545933c8fcf53cb82b133ab4830b3c3ba08946ca16\",\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\": 10347,\n \"sha256\": \"32111c0e0592229c11a93a3a8054e7b124b039451aa696a9abcb56df2a6608d3\",\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\": 15985,\n \"sha256\": \"e17083b0596e3a55994c399bc6272c0ebf04cabaa513260b3d45dd546f7f50ef\",\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\": 26662,\n \"sha256\": \"d1d11116ca27801b7e2f17da60900e6a9ca0b6f27ea9ee0bf19e97dbf24c0c32\",\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\": 53311,\n \"sha256\": \"c63fe853536b17bded6073f32b53434b60fc5123f911d01c642a6b3982f09c70\",\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\": 38028,\n \"sha256\": \"c6901f559e83700610595720c47a4d062078ae8411e1fc2fb952dd215b19dd90\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_error_authority\",\n \"path\": \"crates/event_codec/src/error.rs\",\n \"byte_length\": 3666,\n \"sha256\": \"174ce982bca37fac28d016c3ab3236441c9b31b2169ec94db6c9288b36c72849\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_food_admission_authority\",\n \"path\": \"crates/event_codec/src/food_availability/admission.rs\",\n \"byte_length\": 5681,\n \"sha256\": \"99809859090f5295572688d06bbb30dbe50524ba2c996de7ec5b26f6dd390643\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_food_authored_authority\",\n \"path\": \"crates/event_codec/src/food_availability/authored.rs\",\n \"byte_length\": 9724,\n \"sha256\": \"8673ec62ed3fc47b691efd9ca828643719803971e72b756c5b4603d409d0fba5\",\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\": 26037,\n \"sha256\": \"92a7e75da3293967cec17a514479144c3c948a64542577dd58c7f07992968e4f\",\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\": 4946,\n \"sha256\": \"1b3558a3196744005978dceddd33d3a72ad1ab8f50fb1cbfd997dcfe98bb9e39\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_job_encode_authority\",\n \"path\": \"crates/event_codec/src/job/encode.rs\",\n \"byte_length\": 1670,\n \"sha256\": \"5d6cae6309fcdd02deb7c751b5c451d257cf1900986391cb39cbb2bfd1ddb577\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_knowledge_verification_authority\",\n \"path\": \"crates/event_codec/src/knowledge/verification.rs\",\n \"byte_length\": 6986,\n \"sha256\": \"6f8a10ed262ce37f05acd9c89a1e37ca2fa99ce7da18407891e8abe228ee2349\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_operational_listing_tags_authority\",\n \"path\": \"crates/event_codec/src/operational_listing/tags.rs\",\n \"byte_length\": 50222,\n \"sha256\": \"55b6860bc6f4699dd47a49f8336764e9db78aafb7c32849102dedeb96804b373\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_order_decode_authority\",\n \"path\": \"crates/event_codec/src/order/decode.rs\",\n \"byte_length\": 42667,\n \"sha256\": \"033d9465bc041d205eab3f820572b719a35651340dcb50bdce7c60fabee5f6e1\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_profile_facade\",\n \"path\": \"crates/event_codec/src/profile/mod.rs\",\n \"byte_length\": 1456,\n \"sha256\": \"06b890da54580e2ec68f7e729281b7c3b650ac0a95a4fcb0db3c6cdaa591a7ef\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_tag_builders_authority\",\n \"path\": \"crates/event_codec/src/tag_builders.rs\",\n \"byte_length\": 9232,\n \"sha256\": \"bd81ccf04fd72358331b48eddcde087a95e115c5bd90c05fd9332644979ad5e6\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_trade_facade\",\n \"path\": \"crates/event_codec/src/trade/mod.rs\",\n \"byte_length\": 21472,\n \"sha256\": \"10cee4b6cd6429ac9eb00327a521bcd0982fae4de98bda77e4728fda002965d3\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_store_dependency_authority\",\n \"path\": \"crates/event_store/Cargo.toml\",\n \"byte_length\": 1550,\n \"sha256\": \"9901a09402592ee873c255edf2e0c0d770105401255679d86ad47c35cb159d72\",\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\": 19458,\n \"sha256\": \"3d87df984af6ae5decf7ca8c3a8d5422be6c647e6a05490225b6b2037bf3701b\",\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\": 32314,\n \"sha256\": \"d7ffa47719783c9f08cb4e00fbe47123cf0310ead06f77d3ad1d81edfda96b2c\",\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\": 10446,\n \"sha256\": \"475b7b840bffdae7e3f7a31f5b940b9dfa579eaa1cac640729aaaeadabf83ba6\",\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\": 1588,\n \"sha256\": \"6117e797674c35bb1ccebffbc6a8c0108bfc38c7c9f82607066dfd802b8f0734\",\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\": 22229,\n \"sha256\": \"e651952d73ed0a29d2b137076f56f699beada205ac84ed8a96834e86e343fa78\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"current_visibility_model\",\n \"path\": \"crates/event_store/src/model/current_visibility_v1.rs\",\n \"byte_length\": 5634,\n \"sha256\": \"d64429bc7985231e923c1c3e5295d94270a817dd5dc96693f35dfdf2dc398e4f\",\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\": 17108,\n \"sha256\": \"67861a966d674efbc40f0b0433db2ec006048ff923f6261df4161e2ddba717b5\",\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\": 184833,\n \"sha256\": \"3ca802cb7a8444c8512b2be1390a019281704316a430fb9b75a8ad2cad358a07\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"nip09_successor_result_vector_executor\",\n \"path\": \"crates/event_store/tests/support/nip09_reconciliation_v1_result_vector_v2.rs\",\n \"byte_length\": 18205,\n \"sha256\": \"c632beee70dc777b8dd2a4f88cadb55296fee7aa5742e6e2c9f6d49f26ae2c78\",\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\": 393535,\n \"sha256\": \"c3286b50a2e9e17a330938492cfded0829dc19516f55aa4f62289d513457bad7\",\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\": 40209,\n \"sha256\": \"2cebcca9602633652a79e7041d18d3a7d3feb1388a98f4f68137b9814efcedfa\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"current_visibility_store\",\n \"path\": \"crates/event_store/src/store/current_visibility_v1.rs\",\n \"byte_length\": 15737,\n \"sha256\": \"aa5d1bff7a5368cbac2b37906bb40f54bfc8aa6906bab34369569fdd105bf899\",\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\": 48919,\n \"sha256\": \"3a30da308ef863b806ed63d1cb65ac80f6a946a71821af84a0c595330491757e\",\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\": 6569,\n \"sha256\": \"f5bd8ddb45e1b2144895bd8da737fc92db051be1844ce7e8047a32b47376ce37\",\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\": 16558,\n \"sha256\": \"d88c1f7ff5cc0a19221ad893eb840d55c11535f13adf84ffb3076cbc18d4abf1\",\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\": 29950,\n \"sha256\": \"c72aaff06e4f35d0b4523c6625e83345879f9e15b9fe9563dccf589e5d01e277\",\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\": 10835,\n \"sha256\": \"c82179b9f57968191f3e71dd008cc701787c62715ada74090eeecaa3b213076d\",\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\": 51849,\n \"sha256\": \"db43df5849c811d767a87bfa7884ce499400d0b169734e18242542a4415b3a51\",\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\": 34046,\n \"sha256\": \"776903c6431ff07f26c6ad6b713db5628efce1a72f34d86de6e47d4404fa3a6d\",\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\": 39149,\n \"sha256\": \"3d1bba3980b80698d2a21e26caf7af6fe4d9dc4a7fbabc6e406b5d33928b457f\",\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\": 198991,\n \"sha256\": \"36fd3d8b5dda3b0855a06a47dae14cae7f4cc84aaca9902c31477c218859fccc\",\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\": 842232,\n \"sha256\": \"08c2cc956f0f055c8e25d99b5c05dd8f7f2b095c52efa125b7f05471302ef9f5\",\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\": 199270,\n \"sha256\": \"a6685c27255918769f894ab098ba13a927c0d70c423fbd72b5404c0af0ae2f89\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"contract_command_authority\",\n \"path\": \"tools/xtask/src/contract.rs\",\n \"byte_length\": 508534,\n \"sha256\": \"43900769fc0d364ff6d693ec735312126b233774ca23d525997823409a4b783b\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"dto_root_generation_authority\",\n \"path\": \"tools/xtask/src/dto_roots.rs\",\n \"byte_length\": 35940,\n \"sha256\": \"a899a5695d7533c151d03477c4bd697a6e55c47a4980549724ac42046af694f5\",\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\": 16426,\n \"sha256\": \"abc24896c6c740c10811a3e003ec4be8ebdb376a7b6b01445bfa7a5889f094a7\",\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 = 38397; pub(crate) const SOURCE_MAINTENANCE_MANIFEST_SHA256: &str = - "0212fe980f1f28e08dd0cfa8ec3f98b3ee0d2aed7cb29e5b365b08c0f55d8d59"; + "34e0308172f30a2086b25b053bd37fd4369d240317742e6d00c0192296a49107"; 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/event_store/src/model/current_visibility_v1.rs b/crates/event_store/src/model/current_visibility_v1.rs @@ -2,7 +2,7 @@ use super::{ RadrootsEventAdmissionStatus, RadrootsEventStoreSourceGeneration, RadrootsStoredRawEvent, }; use radroots_event::id::EventId; -pub use radroots_event_codec::deletion::reconciliation_v1::evaluator::{ +pub use radroots_event_codec::admission::deletion::reconciliation_v1::{ RadrootsNip09SuppressionOutcome, RadrootsNip09SuppressionReason, }; diff --git a/crates/event_store/src/model/food_availability_projection_v1.rs b/crates/event_store/src/model/food_availability_projection_v1.rs @@ -11,7 +11,7 @@ use radroots_event::{ }, id::EventId, }; -use radroots_event_codec::food_availability::inbound::{ +use radroots_event_codec::decode::food_availability::{ RadrootsFoodAvailabilityImageDiagnostic, RadrootsInboundFoodAvailabilityImage, RadrootsInboundFoodAvailabilityProjection, }; diff --git a/crates/event_store/src/model/ingest_reconciliation_v1.rs b/crates/event_store/src/model/ingest_reconciliation_v1.rs @@ -2,7 +2,7 @@ use super::reconciliation_v1::RadrootsEventIngest; use crate::RadrootsEventStoreError; use radroots_event::draft::SignedEvent; use radroots_event::wire::v1::Nip01EventWire; -use radroots_event_codec::verification::v1::verify_nip01_event_v1; +use radroots_event_codec::verify::v1::verify_nip01_event_v1; impl RadrootsEventIngest { pub(crate) fn from_signed_event_reconciliation_v1( diff --git a/crates/event_store/src/model/reconciliation_v1.rs b/crates/event_store/src/model/reconciliation_v1.rs @@ -4,7 +4,7 @@ use radroots_event::contract::registry_v7::{TagSemantic, TagValueType}; use radroots_event::draft::SignedEvent; use radroots_event::envelope::event_head::v1::EventHeadDecision; use radroots_event::envelope::{EventEnvelope, EventKindClass}; -use radroots_event_codec::verification::v1::RadrootsSignatureVerifiedEvent; +use radroots_event_codec::verify::v1::RadrootsSignatureVerifiedEvent; #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub enum RadrootsEventAdmissionStatus { diff --git a/crates/event_store/src/nip09/reconciliation_v1.rs b/crates/event_store/src/nip09/reconciliation_v1.rs @@ -24,16 +24,16 @@ use radroots_event::envelope::event_head::v1::{ }; use radroots_event::envelope::{EventEnvelope, EventKindClass}; use radroots_event::id::Nip01Coordinate; -use radroots_event_codec::admission::registry_v7::{ - RadrootsRegistryV7AdmissionDecision, admit_verified_event_registry_v7, -}; -use radroots_event_codec::deletion::reconciliation_v1::admission::{ +use radroots_event_codec::admission::deletion::reconciliation_v1::{ RadrootsAdmittedNip09DeletionRequestEventV1, admit_verified_nip09_deletion_request_event_v1, }; -use radroots_event_codec::deletion::reconciliation_v1::evaluator::{ +use radroots_event_codec::admission::deletion::reconciliation_v1::{ RadrootsNip09SuppressionOutcome, evaluate_nip09_suppression_from_borrowed_requests_v1, }; -use radroots_event_codec::verification::v1::RadrootsSignatureVerifiedEvent; +use radroots_event_codec::admission::registry_v7::{ + RadrootsRegistryV7AdmissionDecision, admit_verified_event_registry_v7, +}; +use radroots_event_codec::verify::v1::RadrootsSignatureVerifiedEvent; #[cfg(test)] use sqlx::SqlitePool; use sqlx::{Row, SqliteConnection}; @@ -1964,7 +1964,7 @@ fn apply_raw_head_to_winners( .get(&candidate.coordinate) .map(|winner| CurrentEventHead { coordinate: winner.candidate.coordinate.clone(), - event_id: winner.candidate.event_id.clone(), + event_id: winner.candidate.event_id, created_at: winner.candidate.created_at, }); let decision = select_event_head_v1(candidate.clone(), current.as_ref()); @@ -3604,7 +3604,7 @@ mod tests { post::deletion::RADROOTS_NIP09_DELETION_TAG_MAX_COUNT, wire::compute_canonical_nip01_event_id, }; - use radroots_event_codec::verification::v1::verify_nip01_event_v1; + use radroots_event_codec::verify::v1::verify_nip01_event_v1; use sqlx::sqlite::{SqliteConnectOptions, SqlitePoolOptions}; use std::str::FromStr; diff --git a/crates/event_store/src/store.rs b/crates/event_store/src/store.rs @@ -404,8 +404,8 @@ impl RadrootsEventStore { let mut unique_event_ids = Vec::new(); let mut seen_event_ids = BTreeMap::new(); for event_id in &event_ids { - if seen_event_ids.insert(event_id.clone(), ()).is_none() { - unique_event_ids.push(event_id.clone()); + if seen_event_ids.insert(*event_id, ()).is_none() { + unique_event_ids.push(*event_id); } } if unique_event_ids.is_empty() { @@ -1100,8 +1100,8 @@ async fn event_visibility_in_transaction( })?; RadrootsEventVisibility::Suppressed { reason: evidence.reason, - event_reference_request_id: evidence.event_reference_request_id.clone(), - address_reference_request_id: evidence.address_reference_request_id.clone(), + event_reference_request_id: evidence.event_reference_request_id, + address_reference_request_id: evidence.address_reference_request_id, address_reference_cutoff: evidence.address_reference_cutoff, } } @@ -1800,7 +1800,7 @@ mod tests { DEFAULT_CONTENT_MAX_BYTES, DEFAULT_RAW_JSON_MAX_BYTES, Nip01EventWire, compute_canonical_nip01_event_id, }; - use radroots_event_codec::food_availability::inbound::RadrootsFoodAvailabilityImageDiagnostic; + use radroots_event_codec::decode::food_availability::RadrootsFoodAvailabilityImageDiagnostic; use radroots_identity::PublicKey; use std::sync::Arc; @@ -1984,24 +1984,24 @@ mod tests { let TradeMutationBodyV1::Proposal { candidate } = &proposal.envelope.body else { panic!("proposal"); }; - let candidate_id = candidate.candidate_id.clone().expect("candidate id"); + let candidate_id = candidate.candidate_id.expect("candidate id"); let line = candidate.lines.first().expect("candidate line"); TradeMutationEnvelopeV1 { mutation_id: None, contract_id: RADROOTS_TRADE_DECISION_CONTRACT_ID.to_owned(), schema_version: RADROOTS_TRADE_SCHEMA_VERSION, - trade_id: proposal.envelope.trade_id.clone(), - root_mutation_id: Some(proposal.mutation_id.clone()), + trade_id: proposal.envelope.trade_id, + root_mutation_id: Some(proposal.mutation_id), buyer_pubkey: public_key('a'), seller_pubkey: public_key('a'), farm_id: DTag::parse("farm-1").expect("farm id"), - parent_mutation_ids: vec![proposal.mutation_id.clone()], + parent_mutation_ids: vec![proposal.mutation_id], author_pubkey: public_key('a'), counterparty_pubkey: public_key('a'), authored_at_unix_s: 1_799_000_060, body: TradeMutationBodyV1::Decision { - proposal_mutation_id: proposal.mutation_id.clone(), - candidate_id: candidate_id.clone(), + proposal_mutation_id: proposal.mutation_id, + candidate_id, decision: TradeDecisionV1::Accepted { reservation_assertion: Some(SellerReservationAssertionV1 { reservation_id: DTag::parse("reservation-1").expect("reservation id"), @@ -5949,43 +5949,43 @@ CREATE TABLE aux.event_transport_observation (event_id TEXT);", }; let mut revision_decision = decision.envelope.clone(); revision_decision.body = TradeMutationBodyV1::RevisionDecision { - proposal_mutation_id: proposal_mutation_id.clone(), - candidate_id: candidate_id.clone(), + proposal_mutation_id: *proposal_mutation_id, + candidate_id: *candidate_id, decision: decision_value.clone(), }; let mut cancellation = proposal.envelope.clone(); cancellation.body = TradeMutationBodyV1::Cancellation { - target_candidate_id: Some(candidate_id.clone()), - target_claim_mutation_id: Some(decision.mutation_id.clone()), + target_candidate_id: Some(*candidate_id), + target_claim_mutation_id: Some(decision.mutation_id), reason: "fixture".to_owned(), }; let mut claim_only_cancellation = cancellation.clone(); claim_only_cancellation.body = TradeMutationBodyV1::Cancellation { target_candidate_id: None, - target_claim_mutation_id: Some(decision.mutation_id.clone()), + target_claim_mutation_id: Some(decision.mutation_id), reason: "fixture".to_owned(), }; assert_eq!( candidate_id_for_mutation(&revision_proposal), - Some(candidate_id.clone()) + Some(*candidate_id) ); assert_eq!( candidate_id_for_mutation(&revision_decision), - Some(candidate_id.clone()) + Some(*candidate_id) ); assert_eq!( candidate_id_for_mutation(&cancellation), - Some(candidate_id.clone()) + Some(*candidate_id) ); assert_eq!(candidate_id_for_mutation(&claim_only_cancellation), None); assert_eq!( proposal_mutation_id_for_mutation(&revision_decision), - Some(proposal_mutation_id.clone()) + Some(*proposal_mutation_id) ); assert_eq!( target_claim_mutation_id_for_mutation(&cancellation), - Some(decision.mutation_id.clone()) + Some(decision.mutation_id) ); assert!(seller_reservation_for_mutation(&revision_decision).is_some()); assert!(seller_reservation_for_mutation(&cancellation).is_none()); @@ -6243,7 +6243,7 @@ CREATE TABLE aux.event_transport_observation (event_id TEXT);", assert!(matches!( error, RadrootsEventStoreError::Nip01Verification( - radroots_event_codec::verification::RadrootsNip01VerificationError::SignatureInvalid + radroots_event_codec::verify::RadrootsNip01VerificationError::SignatureInvalid ) )); assert!( @@ -6273,9 +6273,7 @@ CREATE TABLE aux.event_transport_observation (event_id TEXT);", assert!(matches!( error, RadrootsEventStoreError::Nip01Verification( - radroots_event_codec::verification::RadrootsNip01VerificationError::KindOutOfRange { - .. - } + radroots_event_codec::verify::RadrootsNip01VerificationError::KindOutOfRange { .. } ) )); assert!( @@ -8749,7 +8747,7 @@ CREATE TABLE aux.event_transport_observation (event_id TEXT);", assert!(matches!( error, RadrootsEventStoreError::Nip01Verification( - radroots_event_codec::verification::RadrootsNip01VerificationError::SignatureInvalid + radroots_event_codec::verify::RadrootsNip01VerificationError::SignatureInvalid ) )); assert!( @@ -9586,7 +9584,7 @@ CREATE TABLE aux.event_transport_observation (event_id TEXT);", signed_event(KIND_PROFILE, 20, Vec::new(), "{\"name\":\"a\"}"), signed_event(KIND_PROFILE, 20, Vec::new(), "{\"name\":\"b\"}"), ]; - events.sort_by(|left, right| left.id_hex().cmp(&right.id_hex())); + events.sort_by_key(|event| event.id_hex()); let lower = events[0].clone(); let higher = events[1].clone(); @@ -9766,7 +9764,7 @@ CREATE TABLE aux.event_transport_observation (event_id TEXT);", reducer_contract_id: "radroots.trade.reducer.v1".to_owned(), reducer_version: 1, projection_digest: event_id('f'), - root_mutation_id: Some(proposal.mutation_id.clone()), + root_mutation_id: Some(proposal.mutation_id), negotiation_state: "open".to_owned(), agreement_state: "none".to_owned(), evidence_state: "complete".to_owned(), @@ -9776,7 +9774,7 @@ CREATE TABLE aux.event_transport_observation (event_id TEXT);", fulfillment_state: "not_started".to_owned(), payment_state: "not_tracked".to_owned(), projection_json: "{\"trade_id\":\"fixture\"}".to_owned(), - last_mutation_id: Some(proposal.mutation_id.clone()), + last_mutation_id: Some(proposal.mutation_id), last_transport_event_seq: proposal_receipt.persistence.sequence(), updated_at_ms: 7_100, }) @@ -9787,10 +9785,7 @@ CREATE TABLE aux.event_transport_observation (event_id TEXT);", .await .expect("checkpoint query") .expect("checkpoint"); - assert_eq!( - checkpoint.root_mutation_id, - Some(proposal.mutation_id.clone()) - ); + assert_eq!(checkpoint.root_mutation_id, Some(proposal.mutation_id)); assert_eq!(checkpoint.agreement_state, "none"); let mutation_plan = explain_query_plan( diff --git a/crates/event_store/src/store/addressable_transition_feed_v1.rs b/crates/event_store/src/store/addressable_transition_feed_v1.rs @@ -423,7 +423,7 @@ async fn transition_from_row( ))); } Some(RadrootsStoreProducedCanonicalEventV1 { - event_id: raw_head.event_id().clone(), + event_id: *raw_head.event_id(), pubkey: *coordinate.pubkey(), created_at: raw_event.created_at, kind: coordinate.kind(), diff --git a/crates/event_store/src/store/food_availability_projection_v1.rs b/crates/event_store/src/store/food_availability_projection_v1.rs @@ -18,7 +18,7 @@ use crate::nip09::reconciliation_v1::{ }; use radroots_event::food::availability::FoodIdentifier; use radroots_event::id::EventId; -use radroots_event_codec::food_availability::inbound::{ +use radroots_event_codec::decode::food_availability::{ RadrootsFoodAvailabilityImageDiagnostic, RadrootsFoodAvailabilityProjectionOutcome, project_verified_food_availability_event_registry_v7, }; @@ -416,7 +416,7 @@ async fn apply_transition( let stored = RadrootsStoredFoodAvailabilityV1::from_projection( transition.source_generation(), *canonical.pubkey(), - canonical.event_id().clone(), + *canonical.event_id(), transition.raw_head().event_seq(), canonical.created_at(), transition.transition_seq(), diff --git a/crates/nostr/src/codec_adapters.rs b/crates/nostr/src/codec_adapters.rs @@ -7,11 +7,10 @@ use radroots_event::{ social::job_feedback::JobFeedback, social::job_request::JobRequest, social::job_result::JobResult, }; -use radroots_event_codec::job::{ - error::JobParseError, feedback::decode as fb_decode, request::decode as req_decode, - result::decode as res_decode, +use radroots_event_codec::decode::job::{ + JobParseError, feedback as fb_decode, request as req_decode, result as res_decode, }; -use radroots_event_codec::parsed::{RadrootsParsedData, RadrootsParsedEvent}; +use radroots_event_codec::decode::{RadrootsParsedData, RadrootsParsedEvent}; fn event_id(e: &RadrootsNostrEvent) -> String { e.id.to_hex() diff --git a/crates/nostr/src/error.rs b/crates/nostr/src/error.rs @@ -59,13 +59,13 @@ pub enum RadrootsNostrError { #[error("FoodAvailability encoding error: {0}")] FoodAvailabilityEncode( #[from] - radroots_event_codec::food_availability::authored::RadrootsFoodAvailabilityEncodeError, + radroots_event_codec::encode::food_availability::RadrootsFoodAvailabilityEncodeError, ), #[cfg(feature = "events")] #[error("Profile encoding error: {0}")] ProfileEncode( - #[from] radroots_event_codec::profile::authored::RadrootsAuthoredProfileEncodeError, + #[from] radroots_event_codec::encode::profile::RadrootsAuthoredProfileEncodeError, ), #[cfg(feature = "events")] diff --git a/crates/nostr/src/event_adapters.rs b/crates/nostr/src/event_adapters.rs @@ -3,10 +3,10 @@ use radroots_event::profile::{ RADROOTS_PROFILE_TYPE_TAG_KEY, radroots_profile_type_from_tag_value, }; #[cfg(feature = "events")] -use radroots_event_codec::parsed::RadrootsParsedData; +use radroots_event_codec::decode::RadrootsParsedData; #[cfg(feature = "events")] -use radroots_event_codec::{ - post::decode::LegacyPost, +use radroots_event_codec::decode::{ + post::LegacyPost, profile::{LegacyProfile, RadrootsProfileData}, }; diff --git a/crates/nostr/src/events/comment.rs b/crates/nostr/src/events/comment.rs @@ -6,7 +6,7 @@ use crate::{ }, }; use radroots_event::{post::comment::AuthoredNip22Comment, wire::Nip01EventWireParts}; -use radroots_event_codec::comment::authored::authored_nip22_comment_to_wire_parts; +use radroots_event_codec::encode::comment::authored_nip22_comment_to_wire_parts; /// A sealed builder for a validated strict NIP-22 Comment. /// diff --git a/crates/nostr/src/events/deletion.rs b/crates/nostr/src/events/deletion.rs @@ -6,7 +6,7 @@ use crate::{ }, }; use radroots_event::{post::deletion::AuthoredNip09DeletionRequest, wire::Nip01EventWireParts}; -use radroots_event_codec::deletion::authored::authored_nip09_deletion_request_to_wire_parts; +use radroots_event_codec::encode::deletion::authored_nip09_deletion_request_to_wire_parts; /// A sealed builder for a validated NIP-09 deletion request. /// diff --git a/crates/nostr/src/events/food_availability.rs b/crates/nostr/src/events/food_availability.rs @@ -6,7 +6,7 @@ use crate::{ }, }; use radroots_event::food::availability::FoodAvailabilityDetails; -use radroots_event_codec::food_availability::authored::authored_food_availability_to_wire_parts; +use radroots_event_codec::encode::food_availability::authored_food_availability_to_wire_parts; /// A sealed builder for a validated focused FoodAvailability event. /// diff --git a/crates/nostr/src/events/metadata.rs b/crates/nostr/src/events/metadata.rs @@ -13,7 +13,7 @@ use core::time::Duration; #[cfg(feature = "events")] use radroots_event::profile::AuthoredProfile; #[cfg(feature = "events")] -use radroots_event_codec::profile::authored::authored_profile_to_wire_parts; +use radroots_event_codec::encode::profile::authored_profile_to_wire_parts; /// A sealed builder for a validated kind-0 Profile replacement snapshot. /// diff --git a/crates/nostr/src/events/post.rs b/crates/nostr/src/events/post.rs @@ -11,7 +11,7 @@ use radroots_event::post::{AuthoredAsk, AuthoredPhotoUpdate, AuthoredUpdate}; #[cfg(feature = "events")] use radroots_event::wire::Nip01EventWireParts; #[cfg(feature = "events")] -use radroots_event_codec::post::authored::{ +use radroots_event_codec::encode::post::{ authored_ask_to_wire_parts, authored_photo_update_to_wire_parts, authored_update_to_wire_parts, }; @@ -108,8 +108,8 @@ pub async fn radroots_nostr_fetch_post_events( since_unix: Option<u64>, ) -> Result< Vec< - radroots_event_codec::parsed::RadrootsParsedData< - radroots_event_codec::post::decode::LegacyPost, + radroots_event_codec::decode::RadrootsParsedData< + radroots_event_codec::decode::post::LegacyPost, >, >, RadrootsNostrError, diff --git a/crates/nostr/src/events/reply.rs b/crates/nostr/src/events/reply.rs @@ -6,7 +6,7 @@ use crate::{ }, }; use radroots_event::{post::reply::AuthoredNip10Reply, wire::Nip01EventWireParts}; -use radroots_event_codec::reply::authored::authored_nip10_reply_to_wire_parts; +use radroots_event_codec::encode::reply::authored_nip10_reply_to_wire_parts; /// A sealed builder for a validated strict marked NIP-10 Reply. /// diff --git a/crates/nostr/src/job_adapter.rs b/crates/nostr/src/job_adapter.rs @@ -2,7 +2,7 @@ use crate::types::{RadrootsNostrEvent, RadrootsNostrKind}; use radroots_event::envelope::kind::KIND_PROFILE; -use radroots_event_codec::job::traits::{JobEventBorrow, JobEventLike}; +use radroots_event_codec::decode::job::{JobEventBorrow, JobEventLike}; #[derive(Clone, Debug)] pub struct RadrootsNostrEventAdapter<'a> { diff --git a/crates/nostr/src/nip17.rs b/crates/nostr/src/nip17.rs @@ -14,12 +14,11 @@ use radroots_event::envelope::kind::{KIND_MESSAGE, KIND_MESSAGE_FILE}; use radroots_event::social::message::Message; use radroots_event::social::message_file::MessageFile; use radroots_event::wire::Nip01EventWireParts; -use radroots_event_codec::error::{EventEncodeError, EventParseError}; -use radroots_event_codec::message::decode as message_decode; -use radroots_event_codec::message::encode as message_encode; -use radroots_event_codec::message_file::decode as message_file_decode; -use radroots_event_codec::message_file::encode as message_file_encode; -use radroots_event_codec::parsed::RadrootsParsedData; +use radroots_event_codec::decode::RadrootsParsedData; +use radroots_event_codec::decode::message_file as message_file_decode; +use radroots_event_codec::decode::{EventParseError, message as message_decode}; +use radroots_event_codec::encode::message_file as message_file_encode; +use radroots_event_codec::encode::{EventEncodeError, message as message_encode}; #[derive(Debug, Error)] pub enum RadrootsNip17Error { diff --git a/crates/nostr/tests/food_availability_profile.rs b/crates/nostr/tests/food_availability_profile.rs @@ -5,7 +5,7 @@ use radroots_event::food::availability::{ FoodPrice, FoodPublishedAt, FoodQuantity, FoodText, FoodUnit, }; use radroots_event::media::AuthoredImage; -use radroots_event_codec::food_availability::admission::{ +use radroots_event_codec::admission::food_availability::{ RadrootsFoodAvailabilityAdmissionOutcome, verify_and_admit_food_availability_event, }; use radroots_nostr::prelude::{ diff --git a/crates/nostr/tests/nip09_deletion_request_profile.rs b/crates/nostr/tests/nip09_deletion_request_profile.rs @@ -4,7 +4,7 @@ use radroots_event::{ AuthoredNip09DeletionRequest, Nip09DeletionAddressTarget, Nip09DeletionEventTarget, }, }; -use radroots_event_codec::deletion::admission::verify_and_admit_nip09_deletion_request_event; +use radroots_event_codec::admission::deletion::verify_and_admit_nip09_deletion_request_event; use radroots_nostr::prelude::{ RadrootsNostrError, RadrootsNostrGenericEventBuilder, RadrootsNostrKeys, RadrootsNostrKind, RadrootsNostrSecretKey, RadrootsNostrTimestamp, radroots_event_from_nostr, diff --git a/crates/nostr/tests/nip10_reply_profile.rs b/crates/nostr/tests/nip10_reply_profile.rs @@ -1,10 +1,10 @@ use radroots_event::post::reply::{AuthoredNip10Reply, Nip10ReplyReference}; use radroots_event_codec::{ - post::admission::{RadrootsPostAdmissionOutcome, verify_and_admit_post_event}, - reply::{ - admission::{admit_thread_excluded_post_candidate, verify_and_admit_nip10_reply_event}, - inbound::RadrootsNip10ReplyStyle, + admission::{ + post::{RadrootsPostAdmissionOutcome, verify_and_admit_post_event}, + reply::{admit_thread_excluded_post_candidate, verify_and_admit_nip10_reply_event}, }, + decode::reply::RadrootsNip10ReplyStyle, }; use radroots_nostr::prelude::{ RadrootsNostrError, RadrootsNostrGenericEventBuilder, RadrootsNostrKeys, RadrootsNostrKind, diff --git a/crates/nostr/tests/nip22_comment_profile.rs b/crates/nostr/tests/nip22_comment_profile.rs @@ -7,8 +7,9 @@ use radroots_event::{ Nip22EventRootReference, }, }; -use radroots_event_codec::comment::{ - admission::verify_and_admit_nip22_comment_event, inbound::RadrootsInboundNip22CommentPosition, +use radroots_event_codec::{ + admission::comment::verify_and_admit_nip22_comment_event, + decode::comment::RadrootsInboundNip22CommentPosition, }; use radroots_nostr::prelude::{ RadrootsNostrError, RadrootsNostrGenericEventBuilder, RadrootsNostrKeys, RadrootsNostrKind, diff --git a/crates/replica_sync/src/emit.rs b/crates/replica_sync/src/emit.rs @@ -24,10 +24,10 @@ use radroots_event::farm::location::{has_textual_locality, is_public_geohash5}; use radroots_event::farm::plot::Plot as EventPlot; use radroots_event::farm::{Farm as EventFarm, FarmPublicLocation, FarmRef}; use radroots_event::wire::Nip01EventWireParts; -use radroots_event_codec::farm::encode as farm_encode; -use radroots_event_codec::farm::list_sets as farm_list_sets; -use radroots_event_codec::list_set::encode as list_set_encode; -use radroots_event_codec::plot::encode as plot_encode; +use radroots_event_codec::encode::farm as farm_encode; +use radroots_event_codec::encode::farm as farm_list_sets; +use radroots_event_codec::encode::list_set as list_set_encode; +use radroots_event_codec::encode::plot as plot_encode; use radroots_replica_schema::farm::{ Farm, IFarmFieldsFilter, IFarmFindMany, IFarmFindOne, IFarmFindOneArgs, }; diff --git a/crates/replica_sync/src/error.rs b/crates/replica_sync/src/error.rs @@ -3,8 +3,8 @@ use alloc::string::{String, ToString}; use core::fmt; -use radroots_event_codec::error::{EventEncodeError, EventParseError}; -use radroots_event_codec::verification::RadrootsNip01VerificationError; +use radroots_event_codec::verify::RadrootsNip01VerificationError; +use radroots_event_codec::{decode::EventParseError, encode::EventEncodeError}; use radroots_replica_schema::ReplicaSchemaError; use radroots_sql_core::error::SqlError; @@ -61,8 +61,8 @@ impl From<RadrootsNip01VerificationError> for RadrootsReplicaEventsError { #[cfg(test)] mod tests { use super::RadrootsReplicaEventsError; - use radroots_event_codec::error::{EventEncodeError, EventParseError}; - use radroots_event_codec::verification::RadrootsNip01VerificationError; + use radroots_event_codec::verify::RadrootsNip01VerificationError; + use radroots_event_codec::{decode::EventParseError, encode::EventEncodeError}; use radroots_replica_schema::ReplicaSchemaError; use radroots_sql_core::error::SqlError; diff --git a/crates/replica_sync/src/ingest.rs b/crates/replica_sync/src/ingest.rs @@ -33,15 +33,15 @@ use radroots_event::{ envelope::EventEnvelope, listing::classified::{ClassifiedListingPartition, classify_classified_listing_tags}, }; -use radroots_event_codec::farm::decode as farm_decode; -use radroots_event_codec::food_availability::inbound::{ +use radroots_event_codec::decode::farm as farm_decode; +use radroots_event_codec::decode::food_availability::{ RadrootsFoodAvailabilityProjectionOutcome, project_verified_food_availability_event, }; -use radroots_event_codec::list_set::decode as list_set_decode; -use radroots_event_codec::operational_listing::decode as listing_decode; -use radroots_event_codec::plot::decode as plot_decode; -use radroots_event_codec::profile::decode as profile_decode; -use radroots_event_codec::verification::{RadrootsSignatureVerifiedEvent, verify_nip01_event}; +use radroots_event_codec::decode::list_set as list_set_decode; +use radroots_event_codec::decode::operational_listing as listing_decode; +use radroots_event_codec::decode::plot as plot_decode; +use radroots_event_codec::decode::profile as profile_decode; +use radroots_event_codec::verify::{RadrootsSignatureVerifiedEvent, verify_nip01_event}; use radroots_replica_schema::ReplicaSchemaError; use radroots_replica_schema::farm::{ FarmQueryBindValues, IFarmFields, IFarmFieldsFilter, IFarmFieldsPartial, IFarmFindMany, @@ -1632,10 +1632,10 @@ mod tests { }; use radroots_event::social::list::ListEntry; use radroots_event::social::list_set::ListSet; - use radroots_event_codec::farm::encode as farm_encode; - use radroots_event_codec::farm::list_sets as farm_list_sets; - use radroots_event_codec::list_set::encode as list_set_encode; - use radroots_event_codec::plot::encode as plot_encode; + use radroots_event_codec::encode::farm as farm_encode; + use radroots_event_codec::encode::farm as farm_list_sets; + use radroots_event_codec::encode::list_set as list_set_encode; + use radroots_event_codec::encode::plot as plot_encode; use radroots_nostr::prelude::radroots_event_from_nostr; use radroots_replica_schema::farm::IFarmFields; use radroots_replica_schema::farm_gcs_location::IFarmGcsLocationFields; @@ -1654,6 +1654,13 @@ mod tests { use radroots_sql_core::{ExecOutcome, SqlExecutor, SqlxSqliteExecutor}; use radroots_test_fixtures::{FIXTURE_ALICE_PUBLIC_KEY_HEX, FIXTURE_ALICE_SECRET_KEY_HEX}; + fn fixture_public_key(seed: u8) -> String { + Keys::parse(&format!("{seed:064x}")) + .expect("fixture secret key") + .public_key() + .to_hex() + } + fn test_event_envelope( id: u64, author: &str, @@ -2126,7 +2133,7 @@ mod tests { d_tag: "AAAAAAAAAAAAAAAAAAAAAA".parse().expect("d tag"), published_at: Some(1), farm: FarmRef { - pubkey: "c".repeat(64), + pubkey: fixture_public_key(12), d_tag: "AAAAAAAAAAAAAAAAAAAAAZ".to_string(), }, product: OperationalListingProduct { @@ -2205,7 +2212,7 @@ mod tests { updated_at: "2026-01-01T00:00:00Z".to_string(), key: "profile".to_string(), kind: KIND_PROFILE, - pubkey: "a".repeat(64), + pubkey: fixture_public_key(10), d_tag: String::new(), last_event_id: "not-an-event-id".to_string(), last_created_at: 1, @@ -2213,7 +2220,7 @@ mod tests { }; let coordinate = EventHeadCoordinate::Replaceable { kind: KIND_PROFILE, - pubkey: "a".repeat(64).parse().expect("pubkey"), + pubkey: fixture_public_key(10).parse().expect("pubkey"), }; let err = current_event_head_from_row(&row, &coordinate) @@ -2227,7 +2234,7 @@ mod tests { exec, &IFarmFields { d_tag: "AAAAAAAAAAAAAAAAAAAAAA".to_string(), - pubkey: "f".repeat(64), + pubkey: fixture_public_key(15), name: "farm".to_string(), about: None, website: None, @@ -2323,7 +2330,7 @@ mod tests { exec, &IFarmMemberFields { farm_id: farm_row.id.clone(), - member_pubkey: "6".repeat(64), + member_pubkey: fixture_public_key(6), role: "member".to_string(), }, ) @@ -2331,7 +2338,7 @@ mod tests { let _ = farm_member_claim::create( exec, &IFarmMemberClaimFields { - member_pubkey: "6".repeat(64), + member_pubkey: fixture_public_key(6), farm_pubkey: farm_row.pubkey.clone(), }, ) @@ -2354,7 +2361,7 @@ mod tests { }; let event = test_event_envelope( 1, - &"a".repeat(64), + &fixture_public_key(10), 1, KIND_LIST_SET_FOLLOW, Vec::new(), @@ -2399,7 +2406,8 @@ mod tests { commit_err: None, rollback_count: Arc::new(AtomicUsize::new(0)), }; - let unsupported = test_event_envelope(2, &"a".repeat(64), 2, 42, Vec::new(), String::new()); + let unsupported = + test_event_envelope(2, &fixture_public_key(10), 2, 42, Vec::new(), String::new()); let err = radroots_replica_ingest_event_with_factory( &rollback_executor, &unsupported, @@ -2440,7 +2448,7 @@ mod tests { }; let event = test_event_envelope( 3, - &"a".repeat(64), + &fixture_public_key(10), 3, KIND_CALENDAR, Vec::new(), @@ -2466,7 +2474,7 @@ mod tests { let factory = RadrootsReplicaDefaultIdFactory; assert_eq!(factory.new_d_tag().len(), 22); - let profile_pubkey = "9".repeat(64); + let profile_pubkey = fixture_public_key(9); let profile = profile_event( 10, &profile_pubkey, @@ -2525,7 +2533,7 @@ mod tests { let decision = event_head_decision(&exec, &profile_same_time_lower_id).expect("decision"); assert!(decision.apply); - let farm_pubkey = "f".repeat(64); + let farm_pubkey = fixture_public_key(15); let farm_d_tag = "AAAAAAAAAAAAAAAAAAAAAA"; let farm = farm_event( 20, @@ -2614,12 +2622,14 @@ mod tests { RadrootsReplicaIngestOutcome::Skipped ); - let members = farm_list_sets::farm_members_list_set(farm_d_tag, vec!["6".repeat(64)]) - .expect("members"); - let owners = - farm_list_sets::farm_owners_list_set(farm_d_tag, vec!["8".repeat(64)]).expect("owners"); - let workers = farm_list_sets::farm_workers_list_set(farm_d_tag, vec!["0".repeat(64)]) - .expect("workers"); + let members = + farm_list_sets::farm_members_list_set(farm_d_tag, vec![fixture_public_key(6)]) + .expect("members"); + let owners = farm_list_sets::farm_owners_list_set(farm_d_tag, vec![fixture_public_key(8)]) + .expect("owners"); + let workers = + farm_list_sets::farm_workers_list_set(farm_d_tag, vec![fixture_public_key(16)]) + .expect("workers"); let plots = farm_list_sets::farm_plots_list_set( farm_d_tag, &farm_pubkey, @@ -3208,7 +3218,7 @@ mod tests { &exec, &IFarmFields { d_tag: "AAAAAAAAAAAAAAAAAAAAAA".to_string(), - pubkey: "f".repeat(64), + pubkey: fixture_public_key(15), name: "farm-none".to_string(), about: None, website: None, @@ -3309,7 +3319,7 @@ mod tests { ); let members_list_set = - farm_list_sets::farm_members_list_set(&farm_d_tag, vec!["7".repeat(64)]) + farm_list_sets::farm_members_list_set(&farm_d_tag, vec![fixture_public_key(7)]) .expect("members"); assert!( upsert_farm_members(&exec, &farm_id, ListSetRole::Members, &members_list_set).is_ok() @@ -3320,7 +3330,7 @@ mod tests { err: SqlError::NotFound("farm_member".to_string()), }; let not_found_members_list_set = - farm_list_sets::farm_members_list_set(&farm_d_tag, vec!["a".repeat(64)]) + farm_list_sets::farm_members_list_set(&farm_d_tag, vec![fixture_public_key(10)]) .expect("not found members"); assert!( upsert_farm_members( @@ -3342,18 +3352,23 @@ mod tests { ); let member_claims = - farm_list_sets::member_of_farms_list_set(vec!["3".repeat(64)]).expect("claims"); - assert!(upsert_member_claims(&exec, &"6".repeat(64), &member_claims).is_ok()); + farm_list_sets::member_of_farms_list_set(vec![fixture_public_key(3)]).expect("claims"); + assert!(upsert_member_claims(&exec, &fixture_public_key(6), &member_claims).is_ok()); let not_found_claims = DeleteErrorExecutor { inner: &exec, table_name: "farm_member_claim", err: SqlError::NotFound("farm_member_claim".to_string()), }; let not_found_member_claims = - farm_list_sets::member_of_farms_list_set(vec!["2".repeat(64)]).expect("claims nf"); + farm_list_sets::member_of_farms_list_set(vec![fixture_public_key(2)]) + .expect("claims nf"); assert!( - upsert_member_claims(¬_found_claims, &"6".repeat(64), ¬_found_member_claims) - .is_ok() + upsert_member_claims( + ¬_found_claims, + &fixture_public_key(6), + ¬_found_member_claims + ) + .is_ok() ); assert!(not_found_claims.begin().is_ok()); assert!(not_found_claims.commit().is_ok()); @@ -3427,7 +3442,9 @@ mod tests { table_name: "farm_member_claim", err: SqlError::Internal, }; - assert!(upsert_member_claims(&internal_claims, &"6".repeat(64), &member_claims).is_err()); + assert!( + upsert_member_claims(&internal_claims, &fixture_public_key(6), &member_claims).is_err() + ); } #[test] @@ -3447,8 +3464,8 @@ mod tests { migrations::run_all_up(&exec).expect("migrations"); let pass = PassExecutor { inner: &exec }; - let profile_pubkey = "9".repeat(64); - let farm_pubkey = "f".repeat(64); + let profile_pubkey = fixture_public_key(9); + let farm_pubkey = fixture_public_key(15); let farm_d_tag = "AAAAAAAAAAAAAAAAAAAAAA"; let plot_d_tag = "AAAAAAAAAAAAAAAAAAAAAQ"; @@ -3514,7 +3531,8 @@ mod tests { ); let members = - farm_list_sets::farm_members_list_set(farm_d_tag, vec!["6".repeat(64)]).expect("list"); + farm_list_sets::farm_members_list_set(farm_d_tag, vec![fixture_public_key(6)]) + .expect("list"); let members_event = list_set_event(503, &farm_pubkey, 53, KIND_LIST_SET_GENERIC, &members); assert_eq!( ingest_list_set_event(&pass, &members_event).expect("members list set"), @@ -3540,7 +3558,7 @@ mod tests { }, ListEntry { tag: "p".to_string(), - values: vec!["6".repeat(64)], + values: vec![fixture_public_key(6)], }, ], title: None, @@ -3597,7 +3615,7 @@ mod tests { let exec = SqlxSqliteExecutor::open_memory().expect("db"); migrations::run_all_up(&exec).expect("migrations"); - let farm_pubkey = "f".repeat(64); + let farm_pubkey = fixture_public_key(15); let farm_d_tag = "AAAAAAAAAAAAAAAAAAAAAA"; let farm_create = farm_event( 600, @@ -3688,7 +3706,7 @@ mod tests { rollback_count: Arc::new(AtomicUsize::new(0)), }; - let profile_pubkey = "9".repeat(64); + let profile_pubkey = fixture_public_key(9); let profile_event_row = profile_event( 700, &profile_pubkey, @@ -3714,7 +3732,7 @@ mod tests { RadrootsReplicaIngestOutcome::Skipped ); - let farm_pubkey = "f".repeat(64); + let farm_pubkey = fixture_public_key(15); let farm_d_tag = "AAAAAAAAAAAAAAAAAAAAAA"; let farm_event_row = farm_event( 701, @@ -3789,14 +3807,15 @@ mod tests { .is_ok() ); let members_list = - farm_list_sets::farm_members_list_set(farm_d_tag, vec!["6".repeat(64)]).expect("list"); + farm_list_sets::farm_members_list_set(farm_d_tag, vec![fixture_public_key(6)]) + .expect("list"); assert!( upsert_farm_members(&pass_txn, &farm_row.id, ListSetRole::Members, &members_list) .is_ok() ); let member_of_list = farm_list_sets::member_of_farms_list_set(vec![farm_pubkey.clone()]).expect("member_of"); - assert!(upsert_member_claims(&pass_txn, &"6".repeat(64), &member_of_list).is_ok()); + assert!(upsert_member_claims(&pass_txn, &fixture_public_key(6), &member_of_list).is_ok()); let rollback_count = Arc::new(AtomicUsize::new(0)); let txn = TxnExecutor { @@ -3840,7 +3859,7 @@ mod tests { .is_err() ); assert!(upsert_farm_members(&txn, "farm-id", ListSetRole::Members, &members_list).is_err()); - assert!(upsert_member_claims(&txn, &"6".repeat(64), &member_of_list).is_err()); + assert!(upsert_member_claims(&txn, &fixture_public_key(6), &member_of_list).is_err()); } #[test] @@ -3865,10 +3884,10 @@ mod tests { let _ = pass_through.rollback(); let _ = pass_through.commit(); - let farm_pubkey = "f".repeat(64); + let farm_pubkey = fixture_public_key(15); let farm_d_tag = "AAAAAAAAAAAAAAAAAAAAAA"; let plot_d_tag = "AAAAAAAAAAAAAAAAAAAAAQ"; - let profile_pubkey = "9".repeat(64); + let profile_pubkey = fixture_public_key(9); let profile = profile_event( 800, @@ -3912,7 +3931,7 @@ mod tests { }; let profile_new = profile_event( 802, - &"7".repeat(64), + &fixture_public_key(7), 82, Some(ProfileType::Individual), "profile-new", @@ -3926,7 +3945,7 @@ mod tests { }; let profile_state_event = profile_event( 803, - &"c".repeat(64), + &fixture_public_key(12), 83, Some(ProfileType::Individual), "profile-state", @@ -3963,7 +3982,7 @@ mod tests { }; let farm_query_event = farm_event( 811, - &"a".repeat(64), + &fixture_public_key(10), 91, farm_d_tag, "farm-query", @@ -3995,7 +4014,7 @@ mod tests { }; let farm_create = farm_event( 813, - &"c".repeat(64), + &fixture_public_key(12), 93, farm_d_tag, "farm-create", @@ -4011,7 +4030,7 @@ mod tests { }; let farm_tag_event = farm_event( 814, - &"d".repeat(64), + &fixture_public_key(13), 94, farm_d_tag, "farm-tag", @@ -4027,7 +4046,7 @@ mod tests { }; let farm_gcs_event = farm_event( 815, - &"0".repeat(64), + &fixture_public_key(16), 95, farm_d_tag, "farm-gcs", @@ -4052,7 +4071,7 @@ mod tests { }; let farm_rel_event = farm_event( 816, - &"b".repeat(64), + &fixture_public_key(11), 96, farm_d_tag, "farm-rel", @@ -4077,7 +4096,7 @@ mod tests { }; let farm_state_event = farm_event( 817, - &"0".repeat(64), + &fixture_public_key(16), 97, farm_d_tag, "farm-state", @@ -4088,7 +4107,7 @@ mod tests { let farm_public_location = farm_event( 818, - &"1".repeat(64), + &fixture_public_key(1), 98, farm_d_tag, "farm-public-location", @@ -4109,7 +4128,7 @@ mod tests { let farm_public_locality = farm_event( 819, - &"2".repeat(64), + &fixture_public_key(2), 99, farm_d_tag, "farm-public-locality", @@ -4317,8 +4336,9 @@ mod tests { ); assert!(ingest_list_set_event(&exec, &list_decode_fail).is_err()); - let members_list = farm_list_sets::farm_members_list_set(farm_d_tag, vec!["6".repeat(64)]) - .expect("members list"); + let members_list = + farm_list_sets::farm_members_list_set(farm_d_tag, vec![fixture_public_key(6)]) + .expect("members list"); let member_event = list_set_event(831, &farm_pubkey, 109, KIND_LIST_SET_GENERIC, &members_list); let list_decision_fail = QueryFailExecutor { @@ -4330,8 +4350,13 @@ mod tests { let member_of = farm_list_sets::member_of_farms_list_set(vec![farm_pubkey.clone()]).expect("member-of"); - let member_of_event = - list_set_event(832, &"6".repeat(64), 110, KIND_LIST_SET_GENERIC, &member_of); + let member_of_event = list_set_event( + 832, + &fixture_public_key(6), + 110, + KIND_LIST_SET_GENERIC, + &member_of, + ); let claims_fail = QueryFailExecutor { inner: &exec, needle: "farm_member_claim", @@ -4362,10 +4387,11 @@ mod tests { assert!(ingest_list_set_event(&plots_state_fail, &plots_event).is_err()); let missing_farm_members = - farm_list_sets::farm_members_list_set(farm_d_tag, vec!["7".repeat(64)]).expect("list"); + farm_list_sets::farm_members_list_set(farm_d_tag, vec![fixture_public_key(7)]) + .expect("list"); let missing_farm_event = list_set_event( 834, - &"3".repeat(64), + &fixture_public_key(3), 112, KIND_LIST_SET_GENERIC, &missing_farm_members, @@ -4404,7 +4430,7 @@ mod tests { }; let profile_update = profile_event( 808, - &"9".repeat(64), + &fixture_public_key(9), 101, Some(ProfileType::Individual), "profile-update-error", @@ -4419,7 +4445,7 @@ mod tests { let profile = profile_event( 900, - &"e".repeat(64), + &fixture_public_key(14), 120, Some(ProfileType::Individual), "profile-state-insert", @@ -4433,7 +4459,7 @@ mod tests { let farm_state = farm_event( 901, - &"a".repeat(64), + &fixture_public_key(10), 121, "AAAAAAAAAAAAAAAAAAAAAQ", "farm-state-insert", @@ -4457,8 +4483,9 @@ mod tests { ); assert!(ingest_plot_event(&state_insert_fail, &plot_state, &FixedFactory).is_err()); - let members_set = farm_list_sets::farm_members_list_set(&farm_d_tag, vec!["7".repeat(64)]) - .expect("members"); + let members_set = + farm_list_sets::farm_members_list_set(&farm_d_tag, vec![fixture_public_key(7)]) + .expect("members"); let members_event = list_set_event(903, &farm_pubkey, 123, KIND_LIST_SET_GENERIC, &members_set); assert!(ingest_list_set_event(&state_insert_fail, &members_event).is_err()); @@ -4476,7 +4503,7 @@ mod tests { farm_list_sets::member_of_farms_list_set(vec![farm_pubkey.clone()]).expect("member_of"); let member_of_event = list_set_event( 905, - &"7".repeat(64), + &fixture_public_key(7), 125, KIND_LIST_SET_GENERIC, &member_of_set, @@ -4589,7 +4616,8 @@ mod tests { err: SqlError::Internal, }; assert!( - upsert_member_claims(&claims_insert_fail, &"7".repeat(64), &member_of_set).is_err() + upsert_member_claims(&claims_insert_fail, &fixture_public_key(7), &member_of_set) + .is_err() ); super::failpoints::set_gcs_point_serialize_error(); @@ -4606,7 +4634,7 @@ mod tests { let exec = SqlxSqliteExecutor::open_memory().expect("db"); let (farm_id, farm_pubkey, _, _) = seed_rows(&exec); - let member_pubkey = "6".repeat(64); + let member_pubkey = fixture_public_key(6); let member_list_set = ListSet { d_tag: "farm:AAAAAAAAAAAAAAAAAAAAAQ:members".to_string(), content: String::new(), @@ -4651,7 +4679,7 @@ mod tests { upsert_farm_members(&exec, &farm_id, ListSetRole::Plots, &member_list_set) .expect("plots is no-op"); - let claimant_pubkey = "7".repeat(64); + let claimant_pubkey = fixture_public_key(7); let claims_list_set = ListSet { d_tag: "member_of.farms".to_string(), content: String::new(), @@ -4703,7 +4731,7 @@ mod tests { 220, &plot_d_tag, FarmRef { - pubkey: "1".repeat(64), + pubkey: fixture_public_key(1), d_tag: farm_d_tag.clone(), }, "plot-missing-farm", @@ -4717,7 +4745,7 @@ mod tests { bad_member_of.entries[0].tag = "x".to_string(); let bad_member_of_event = list_set_event( 951, - &"7".repeat(64), + &fixture_public_key(7), 221, KIND_LIST_SET_GENERIC, &bad_member_of, @@ -4736,7 +4764,7 @@ mod tests { assert!(ingest_list_set_event(&exec, &bad_plots_event).is_err()); let mut bad_members = - farm_list_sets::farm_members_list_set(&farm_d_tag, vec!["6".repeat(64)]) + farm_list_sets::farm_members_list_set(&farm_d_tag, vec![fixture_public_key(6)]) .expect("members"); bad_members.entries[0].tag = "a".to_string(); let bad_members_event = diff --git a/crates/replica_sync/tests/ingest_roundtrip.rs b/crates/replica_sync/tests/ingest_roundtrip.rs @@ -1,3 +1,4 @@ +use nostr::Keys; use radroots_event::envelope::kind::{ KIND_FARM, KIND_LIST_SET_FOLLOW, KIND_LIST_SET_GENERIC, KIND_PLOT, KIND_PROFILE, }; @@ -10,11 +11,11 @@ use radroots_event::profile::{ use radroots_event::social::list::ListEntry; use radroots_event::social::list_set::ListSet; use radroots_event::{envelope::EventEnvelope, envelope::EventEnvelopeParts}; -use radroots_event_codec::error::{EventEncodeError, EventParseError}; -use radroots_event_codec::farm::encode as farm_encode; -use radroots_event_codec::farm::list_sets as farm_list_sets; -use radroots_event_codec::list_set::encode as list_set_encode; -use radroots_event_codec::plot::encode as plot_encode; +use radroots_event_codec::encode::farm as farm_encode; +use radroots_event_codec::encode::farm as farm_list_sets; +use radroots_event_codec::encode::list_set as list_set_encode; +use radroots_event_codec::encode::plot as plot_encode; +use radroots_event_codec::{decode::EventParseError, encode::EventEncodeError}; use radroots_replica_schema::ReplicaSchemaError; use radroots_replica_schema::farm::{IFarmFields, IFarmFieldsFilter, IFarmFindMany}; use radroots_replica_schema::farm_gcs_location::IFarmGcsLocationFields; @@ -45,6 +46,13 @@ use radroots_sql_core::error::SqlError; use radroots_sql_core::{ExecOutcome, SqlExecutor}; use std::panic; +fn fixture_public_key(seed: u8) -> String { + Keys::parse(&format!("{seed:064x}")) + .expect("fixture secret key") + .public_key() + .to_hex() +} + fn unwrap_sql<T>(result: Result<T, ReplicaSchemaError<SqlError>>, label: &str) -> T { match result { Ok(value) => value, @@ -199,7 +207,7 @@ fn seed_source( ) { migrations::run_all_up(exec).expect("migrations"); - let farm_pubkey = "f".repeat(64); + let farm_pubkey = fixture_public_key(15); let farm_d_tag = "AAAAAAAAAAAAAAAAAAAAAA".to_string(); let farm_fields = IFarmFields { d_tag: farm_d_tag.clone(), @@ -383,7 +391,7 @@ fn seed_source( "plot_tag", ); - let owner_pubkey = "8".repeat(64); + let owner_pubkey = fixture_public_key(8); let _ = unwrap_sql( farm_member::create( exec, @@ -546,7 +554,7 @@ fn ingest_rejects_unsupported_kind() { migrations::run_all_up(&exec).expect("migrations"); let event = event_with_parts( 1, - &"a".repeat(64), + &fixture_public_key(10), 1_720_000_001, 42, String::new(), @@ -560,7 +568,7 @@ fn ingest_rejects_unsupported_kind() { fn ingest_reports_transaction_boundary_errors() { let exec = SqlxSqliteExecutor::open_memory().expect("db"); migrations::run_all_up(&exec).expect("migrations"); - let author = "a".repeat(64); + let author = fixture_public_key(10); let profile = profile_event( 9_001, &author, @@ -580,7 +588,7 @@ fn ingest_reports_transaction_boundary_errors() { fn ingest_reports_delete_internal_errors() { let exec = SqlxSqliteExecutor::open_memory().expect("db"); migrations::run_all_up(&exec).expect("migrations"); - let farm_pubkey = "f".repeat(64); + let farm_pubkey = fixture_public_key(15); let farm_d_tag = "AAAAAAAAAAAAAAAAAAAAAA"; let create_event = farm_event( @@ -619,7 +627,7 @@ fn ingest_reports_parse_and_state_error_paths_for_all_kinds() { let exec = SqlxSqliteExecutor::open_memory().expect("db"); migrations::run_all_up(&exec).expect("migrations"); - let profile_pubkey = "a".repeat(64); + let profile_pubkey = fixture_public_key(10); let profile_ok = profile_event( 9_201, &profile_pubkey, @@ -637,7 +645,7 @@ fn ingest_reports_parse_and_state_error_paths_for_all_kinds() { ); assert!(radroots_replica_ingest_event(&exec, &profile_parse_error).is_err()); - let farm_pubkey = "b".repeat(64); + let farm_pubkey = fixture_public_key(11); let farm_seed_d_tag = "AAAAAAAAAAAAAAAAAAAAAA"; let farm_seed = farm_event( 9_203, @@ -723,7 +731,7 @@ fn ingest_reports_parse_and_state_error_paths_for_all_kinds() { }; let profile_insert_state_error = profile_event( 9_209, - &"c".repeat(64), + &fixture_public_key(12), 18, Some(ProfileType::Individual), "profile-state-insert", @@ -777,7 +785,7 @@ fn ingest_reports_query_fail_paths_for_profile_farm_plot_and_list_sets() { ); }; - let profile_pubkey = "d".repeat(64); + let profile_pubkey = fixture_public_key(13); let profile_create = profile_event( 9_301, &profile_pubkey, @@ -800,7 +808,7 @@ fn ingest_reports_query_fail_paths_for_profile_farm_plot_and_list_sets() { ); assert_query_fail("update nostr_profile", &profile_update); - let farm_pubkey = "e".repeat(64); + let farm_pubkey = fixture_public_key(14); let farm_d_tag = "AAAAAAAAAAAAAAAAAAAAAA"; let farm_create = farm_event( 9_303, @@ -890,7 +898,8 @@ fn ingest_reports_query_fail_paths_for_profile_farm_plot_and_list_sets() { assert_query_fail("insert into farm_member_claim", &member_of_event); let members_set = - farm_list_sets::farm_members_list_set(farm_d_tag, vec!["6".repeat(64)]).expect("members"); + farm_list_sets::farm_members_list_set(farm_d_tag, vec![fixture_public_key(6)]) + .expect("members"); let members_event = list_set_event(9_308, &farm_pubkey, 17, KIND_LIST_SET_GENERIC, &members_set); assert_query_fail("insert into farm_member", &members_event); @@ -1081,7 +1090,7 @@ fn ingest_event_paths_cover_profile_farm_plot_and_list_set_variants() { let exec = SqlxSqliteExecutor::open_memory().expect("db"); migrations::run_all_up(&exec).expect("migrations"); - let profile_pubkey = "9".repeat(64); + let profile_pubkey = fixture_public_key(9); let profile_create = profile_event( 101, &profile_pubkey, @@ -1138,10 +1147,14 @@ fn ingest_event_paths_cover_profile_farm_plot_and_list_set_variants() { assert!(err.to_string().contains("profile_type required")); let profile_types = [ - (ProfileType::Farm, "f".repeat(64), "farm-profile"), - (ProfileType::Coop, "c".repeat(64), "coop-profile"), - (ProfileType::Any, "a".repeat(64), "any-profile"), - (ProfileType::Radrootsd, "d".repeat(64), "radrootsd-profile"), + (ProfileType::Farm, fixture_public_key(15), "farm-profile"), + (ProfileType::Coop, fixture_public_key(12), "coop-profile"), + (ProfileType::Any, fixture_public_key(10), "any-profile"), + ( + ProfileType::Radrootsd, + fixture_public_key(13), + "radrootsd-profile", + ), ]; for (index, (profile_type, pubkey, name)) in profile_types.iter().enumerate() { let event = profile_event( @@ -1157,7 +1170,7 @@ fn ingest_event_paths_cover_profile_farm_plot_and_list_set_variants() { ); } - let farm_pubkey = "e".repeat(64); + let farm_pubkey = fixture_public_key(14); let farm_d_tag = "AAAAAAAAAAAAAAAAAAAAAA"; let farm_location = FarmPublicLocation { primary: "farm-primary".to_string(), @@ -1370,7 +1383,7 @@ fn ingest_event_paths_cover_profile_farm_plot_and_list_set_variants() { 201, "AAAAAAAAAAAAAAAAAAAAAg", FarmRef { - pubkey: "3".repeat(64), + pubkey: fixture_public_key(3), d_tag: "AAAAAAAAAAAAAAAAAAAAAw".to_string(), }, "plot-missing-farm", @@ -1644,9 +1657,11 @@ fn ingest_event_paths_cover_profile_farm_plot_and_list_set_variants() { .contains("must only include p tags") ); - let members_valid = - farm_list_sets::farm_members_list_set(farm_d_tag, vec!["6".repeat(64), "6".repeat(64)]) - .expect("members list"); + let members_valid = farm_list_sets::farm_members_list_set( + farm_d_tag, + vec![fixture_public_key(6), fixture_public_key(6)], + ) + .expect("members list"); let members_event = list_set_event( 406, &farm_pubkey, @@ -1678,14 +1693,16 @@ fn ingest_event_paths_cover_profile_farm_plot_and_list_set_variants() { RadrootsReplicaIngestOutcome::Applied ); let owners_valid = - farm_list_sets::farm_owners_list_set(farm_d_tag, vec!["8".repeat(64)]).expect("owners"); + farm_list_sets::farm_owners_list_set(farm_d_tag, vec![fixture_public_key(8)]) + .expect("owners"); let owners_event = list_set_event(407, &farm_pubkey, 307, KIND_LIST_SET_GENERIC, &owners_valid); assert_eq!( radroots_replica_ingest_event(&exec, &owners_event).expect("owners apply"), RadrootsReplicaIngestOutcome::Applied ); let workers_valid = - farm_list_sets::farm_workers_list_set(farm_d_tag, vec!["0".repeat(64)]).expect("workers"); + farm_list_sets::farm_workers_list_set(farm_d_tag, vec![fixture_public_key(16)]) + .expect("workers"); let workers_event = list_set_event( 408, &farm_pubkey, @@ -1887,7 +1904,7 @@ fn sync_all_rejects_invalid_selectors_and_resolves_unique_pair() { assert!(missing_id_err.to_string().contains("farm not found")); let duplicate_d_tag = "AAAAAAAAAAAAAAAAAAAAAA".to_string(); - let duplicate_pubkey = "e".repeat(64); + let duplicate_pubkey = fixture_public_key(14); let fields = IFarmFields { d_tag: duplicate_d_tag.clone(), pubkey: duplicate_pubkey.clone(), @@ -1924,7 +1941,7 @@ fn sync_emit_handles_invalid_geojson_and_unknown_profile_type() { let exec = SqlxSqliteExecutor::open_memory().expect("db"); migrations::run_all_up(&exec).expect("migrations"); - let farm_pubkey = "0".repeat(64); + let farm_pubkey = fixture_public_key(16); let farm_d_tag = "AAAAAAAAAAAAAAAAAAAAAA".to_string(); let farm_row = unwrap_sql( farm::create( @@ -2017,7 +2034,7 @@ fn sync_emit_handles_invalid_geojson_and_unknown_profile_type() { "plot gcs", ); - let member_pubkey = "6".repeat(64); + let member_pubkey = fixture_public_key(6); let _ = unwrap_sql( farm_member::create( &exec, @@ -2117,7 +2134,7 @@ fn sync_emit_reports_encode_error_for_invalid_farm_record() { &exec, &IFarmFields { d_tag: String::new(), - pubkey: "f".repeat(64), + pubkey: fixture_public_key(15), name: "invalid farm".to_string(), about: None, website: None, diff --git a/tools/xtask/src/contract/source_maintenance.rs b/tools/xtask/src/contract/source_maintenance.rs @@ -3728,7 +3728,7 @@ struct DelegatedAuthoritySpec { const EXECUTABLE_AUTHORITY_AST_SHA256: &str = "730fe3bf7d8a1eed342ea58ca1ab6cdad9065cb6fdb1695244ebaeb17168cef2"; const BOUND_AUTHORITY_SOURCE_AST_SHA256: &str = - "174bf7141407d2259bd277b2d9d093ba664480ec2bd8cd37ca5edf5a32f594d8"; + "aaf8433098153cad9105761402d65c78d7f8134c260bc2737c0bbcb032ae9d60"; #[derive(Clone, Debug, Serialize)] struct ExecutableAuthorityIdentity {