commit 57a5f78b2e6f0a0ffde75c1694a269d8e0e157e5
parent 3f87f83d46f1fd561186fd91264d2bc528625d82
Author: triesap <tyson@radroots.org>
Date: Wed, 29 Jul 2026 02:24:01 +0000
event: refine event contract author-role ownership
- own canonical AuthorRole requirements inside event contracts
- keep signer and account provenance outside the event package
- migrate manifests, authority, and trade consumers without compatibility aliases
- prove complete stable role labels and refresh governed source evidence
Diffstat:
12 files changed, 291 insertions(+), 229 deletions(-)
diff --git a/crates/authority/src/actor.rs b/crates/authority/src/actor.rs
@@ -2,7 +2,7 @@
use crate::RadrootsAuthorityError;
use core::{fmt, str::FromStr};
-use radroots_event::contract::RadrootsActorRole;
+use radroots_event::contract::AuthorRole;
use radroots_identity::PublicKey;
#[cfg(not(feature = "std"))]
@@ -118,14 +118,14 @@ impl RadrootsActorSelector {
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct RadrootsActorResolutionRequest {
selector: RadrootsActorSelector,
- required_role: RadrootsActorRole,
+ required_role: AuthorRole,
contract_id: Option<String>,
}
impl RadrootsActorResolutionRequest {
pub fn new(
selector: RadrootsActorSelector,
- required_role: RadrootsActorRole,
+ required_role: AuthorRole,
contract_id: Option<String>,
) -> Self {
Self {
@@ -139,7 +139,7 @@ impl RadrootsActorResolutionRequest {
&self.selector
}
- pub fn required_role(&self) -> RadrootsActorRole {
+ pub fn required_role(&self) -> AuthorRole {
self.required_role
}
@@ -151,7 +151,7 @@ impl RadrootsActorResolutionRequest {
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct RadrootsActorContext {
pubkey: PublicKey,
- roles: BTreeSet<RadrootsActorRole>,
+ roles: BTreeSet<AuthorRole>,
account_id: Option<RadrootsActorAccountId>,
source: RadrootsActorSource,
}
@@ -162,7 +162,7 @@ impl RadrootsActorContext {
roles: I,
) -> Result<Self, RadrootsAuthorityError>
where
- I: IntoIterator<Item = RadrootsActorRole>,
+ I: IntoIterator<Item = AuthorRole>,
{
Self::with_provenance(pubkey, None, RadrootsActorSource::ExplicitPubkey, roles)
}
@@ -173,7 +173,7 @@ impl RadrootsActorContext {
roles: I,
) -> Result<Self, RadrootsAuthorityError>
where
- I: IntoIterator<Item = RadrootsActorRole>,
+ I: IntoIterator<Item = AuthorRole>,
{
Self::with_provenance(
pubkey,
@@ -189,7 +189,7 @@ impl RadrootsActorContext {
roles: I,
) -> Result<Self, RadrootsAuthorityError>
where
- I: IntoIterator<Item = RadrootsActorRole>,
+ I: IntoIterator<Item = AuthorRole>,
{
Self::with_provenance(
pubkey,
@@ -205,7 +205,7 @@ impl RadrootsActorContext {
roles: I,
) -> Result<Self, RadrootsAuthorityError>
where
- I: IntoIterator<Item = RadrootsActorRole>,
+ I: IntoIterator<Item = AuthorRole>,
{
Self::with_provenance(
pubkey,
@@ -217,7 +217,7 @@ impl RadrootsActorContext {
pub fn test<I>(pubkey: impl AsRef<str>, roles: I) -> Result<Self, RadrootsAuthorityError>
where
- I: IntoIterator<Item = RadrootsActorRole>,
+ I: IntoIterator<Item = AuthorRole>,
{
Self::with_provenance(pubkey, None, RadrootsActorSource::Test, roles)
}
@@ -229,7 +229,7 @@ impl RadrootsActorContext {
roles: I,
) -> Result<Self, RadrootsAuthorityError>
where
- I: IntoIterator<Item = RadrootsActorRole>,
+ I: IntoIterator<Item = AuthorRole>,
{
let pubkey = PublicKey::from_hex(pubkey.as_ref())
.map_err(|_| RadrootsAuthorityError::InvalidActorPubkey)?;
@@ -245,7 +245,7 @@ impl RadrootsActorContext {
&self.pubkey
}
- pub fn roles(&self) -> &BTreeSet<RadrootsActorRole> {
+ pub fn roles(&self) -> &BTreeSet<AuthorRole> {
&self.roles
}
@@ -257,17 +257,14 @@ impl RadrootsActorContext {
self.source
}
- pub fn satisfies(&self, required_role: RadrootsActorRole) -> bool {
+ pub fn satisfies(&self, required_role: AuthorRole) -> bool {
role_satisfies(&self.roles, required_role)
}
}
-pub fn role_satisfies(
- actor_roles: &BTreeSet<RadrootsActorRole>,
- required_role: RadrootsActorRole,
-) -> bool {
+pub fn role_satisfies(actor_roles: &BTreeSet<AuthorRole>, required_role: AuthorRole) -> bool {
match required_role {
- RadrootsActorRole::Any => true,
+ AuthorRole::Any => true,
role => actor_roles.contains(&role),
}
}
@@ -284,37 +281,33 @@ mod tests {
fn any_is_satisfied_by_any_actor_context() {
let actor = RadrootsActorContext::test(VALID_PUBKEY, []).expect("actor");
- assert!(actor.satisfies(RadrootsActorRole::Any));
+ assert!(actor.satisfies(AuthorRole::Any));
}
#[test]
fn specific_roles_require_explicit_membership() {
- let actor =
- RadrootsActorContext::test(VALID_PUBKEY, [RadrootsActorRole::Farmer]).expect("actor");
+ let actor = RadrootsActorContext::test(VALID_PUBKEY, [AuthorRole::Farmer]).expect("actor");
- assert!(actor.satisfies(RadrootsActorRole::Farmer));
- assert!(!actor.satisfies(RadrootsActorRole::Seller));
+ assert!(actor.satisfies(AuthorRole::Farmer));
+ assert!(!actor.satisfies(AuthorRole::Seller));
}
#[test]
fn farmer_does_not_globally_satisfy_seller() {
- let actor =
- RadrootsActorContext::test(VALID_PUBKEY, [RadrootsActorRole::Farmer]).expect("actor");
+ let actor = RadrootsActorContext::test(VALID_PUBKEY, [AuthorRole::Farmer]).expect("actor");
- assert!(!actor.satisfies(RadrootsActorRole::Seller));
+ assert!(!actor.satisfies(AuthorRole::Seller));
}
#[test]
fn multi_role_actors_satisfy_each_assigned_role() {
- let actor = RadrootsActorContext::test(
- VALID_PUBKEY,
- [RadrootsActorRole::Farmer, RadrootsActorRole::Seller],
- )
- .expect("actor");
+ let actor =
+ RadrootsActorContext::test(VALID_PUBKEY, [AuthorRole::Farmer, AuthorRole::Seller])
+ .expect("actor");
- assert!(actor.satisfies(RadrootsActorRole::Farmer));
- assert!(actor.satisfies(RadrootsActorRole::Seller));
- assert!(!actor.satisfies(RadrootsActorRole::Buyer));
+ assert!(actor.satisfies(AuthorRole::Farmer));
+ assert!(actor.satisfies(AuthorRole::Seller));
+ assert!(!actor.satisfies(AuthorRole::Buyer));
}
#[test]
@@ -322,7 +315,7 @@ mod tests {
let actor = RadrootsActorContext::local_account(
VALID_PUBKEY,
"acct-field-01",
- [RadrootsActorRole::Farmer],
+ [AuthorRole::Farmer],
)
.expect("actor");
@@ -330,7 +323,7 @@ mod tests {
assert_eq!(actor.pubkey().to_hex(), VALID_PUBKEY);
assert_eq!(
actor.roles().iter().copied().collect::<Vec<_>>(),
- vec![RadrootsActorRole::Farmer]
+ vec![AuthorRole::Farmer]
);
let account_id = actor.account_id().expect("account id");
assert_eq!(account_id.as_str(), "acct-field-01");
@@ -339,9 +332,8 @@ mod tests {
#[test]
fn explicit_pubkey_context_has_no_account_id() {
- let actor =
- RadrootsActorContext::explicit_pubkey(VALID_PUBKEY, [RadrootsActorRole::Seller])
- .expect("actor");
+ let actor = RadrootsActorContext::explicit_pubkey(VALID_PUBKEY, [AuthorRole::Seller])
+ .expect("actor");
assert_eq!(actor.source(), RadrootsActorSource::ExplicitPubkey);
assert_eq!(actor.account_id(), None);
@@ -349,8 +341,7 @@ mod tests {
#[test]
fn test_context_has_no_account_id() {
- let actor =
- RadrootsActorContext::test(VALID_PUBKEY, [RadrootsActorRole::Farmer]).expect("actor");
+ let actor = RadrootsActorContext::test(VALID_PUBKEY, [AuthorRole::Farmer]).expect("actor");
assert_eq!(actor.source(), RadrootsActorSource::Test);
assert_eq!(actor.account_id(), None);
@@ -358,18 +349,12 @@ mod tests {
#[test]
fn remote_signer_and_service_contexts_carry_account_ids() {
- let remote = RadrootsActorContext::remote_signer(
- VALID_PUBKEY,
- "acct-remote",
- [RadrootsActorRole::Buyer],
- )
- .expect("remote actor");
- let service = RadrootsActorContext::service(
- OTHER_VALID_PUBKEY,
- "acct-service",
- [RadrootsActorRole::Any],
- )
- .expect("service actor");
+ let remote =
+ RadrootsActorContext::remote_signer(VALID_PUBKEY, "acct-remote", [AuthorRole::Buyer])
+ .expect("remote actor");
+ let service =
+ RadrootsActorContext::service(OTHER_VALID_PUBKEY, "acct-service", [AuthorRole::Any])
+ .expect("service actor");
assert_eq!(remote.source(), RadrootsActorSource::RemoteSigner);
assert_eq!(
@@ -431,7 +416,7 @@ mod tests {
let selector = RadrootsActorSelector::account_id("acct-field-01").expect("selector");
let request = RadrootsActorResolutionRequest::new(
selector,
- RadrootsActorRole::Seller,
+ AuthorRole::Seller,
Some("radroots.operational_listing.published.v1".to_owned()),
);
@@ -439,7 +424,7 @@ mod tests {
request.selector(),
&RadrootsActorSelector::account_id("acct-field-01").expect("selector")
);
- assert_eq!(request.required_role(), RadrootsActorRole::Seller);
+ assert_eq!(request.required_role(), AuthorRole::Seller);
assert_eq!(
request.contract_id(),
Some("radroots.operational_listing.published.v1")
diff --git a/crates/authority/src/authorization.rs b/crates/authority/src/authorization.rs
@@ -18,12 +18,12 @@ pub fn authorize_actor_for_contract(
actor: &RadrootsActorContext,
contract: &RadrootsEventContract,
) -> Result<(), RadrootsAuthorityError> {
- if actor.satisfies(contract.author_role) {
+ if actor.satisfies(contract.required_author_role()) {
Ok(())
} else {
Err(RadrootsAuthorityError::ActorRoleUnsatisfied {
contract_id: contract.id.to_owned(),
- required_role: contract.author_role,
+ required_role: contract.required_author_role(),
})
}
}
@@ -171,7 +171,7 @@ mod tests {
use crate::RadrootsSignerError;
use core::cell::Cell;
use radroots_event::contract::{
- RADROOTS_EVENT_CONTRACT_REGISTRY_VERSION, RadrootsActorRole, event_contract,
+ AuthorRole, RADROOTS_EVENT_CONTRACT_REGISTRY_VERSION, event_contract,
};
use radroots_event::kinds::{KIND_CLASSIFIED_LISTING, KIND_POST, KIND_TRADE_PROPOSAL};
use radroots_identity::PublicKey;
@@ -188,11 +188,11 @@ mod tests {
}
fn seller_actor(pubkey: &str) -> RadrootsActorContext {
- RadrootsActorContext::explicit_pubkey(pubkey, [RadrootsActorRole::Seller]).expect("seller")
+ RadrootsActorContext::explicit_pubkey(pubkey, [AuthorRole::Seller]).expect("seller")
}
fn buyer_actor(pubkey: &str) -> RadrootsActorContext {
- RadrootsActorContext::explicit_pubkey(pubkey, [RadrootsActorRole::Buyer]).expect("buyer")
+ RadrootsActorContext::explicit_pubkey(pubkey, [AuthorRole::Buyer]).expect("buyer")
}
fn operational_listing_event_draft(pubkey: &str) -> RadrootsEventDraft {
@@ -403,7 +403,10 @@ mod tests {
let seller = seller_actor(hex_64('a').as_str());
let buyer = buyer_actor(OTHER_VALID_PUBKEY);
- assert_eq!(operational_listing.author_role, RadrootsActorRole::Seller);
+ assert_eq!(
+ operational_listing.required_author_role(),
+ AuthorRole::Seller
+ );
assert!(authorize_actor_for_contract(&seller, operational_listing).is_ok());
assert!(matches!(
authorize_actor_for_contract(&buyer, operational_listing),
@@ -414,7 +417,7 @@ mod tests {
authorize_actor_for_contract(&seller, trade_proposal),
Err(RadrootsAuthorityError::ActorRoleUnsatisfied { .. })
));
- assert_eq!(trade_decision.author_role, RadrootsActorRole::Seller);
+ assert_eq!(trade_decision.required_author_role(), AuthorRole::Seller);
assert!(authorize_actor_for_contract(&seller, trade_decision).is_ok());
assert!(matches!(
authorize_actor_for_contract(&buyer, trade_decision),
diff --git a/crates/authority/src/error.rs b/crates/authority/src/error.rs
@@ -35,7 +35,7 @@ pub enum RadrootsAuthorityError {
ActorRoleUnsatisfied {
contract_id: String,
- required_role: radroots_event::contract::RadrootsActorRole,
+ required_role: radroots_event::contract::AuthorRole,
},
ActorPubkeyMismatch {
@@ -248,7 +248,7 @@ impl std::error::Error for RadrootsSignerError {}
#[cfg(test)]
mod tests {
use super::*;
- use radroots_event::contract::RadrootsActorRole;
+ use radroots_event::contract::AuthorRole;
use std::error::Error as _;
#[test]
@@ -295,7 +295,7 @@ mod tests {
(
RadrootsAuthorityError::ActorRoleUnsatisfied {
contract_id: "radroots.operational_listing.published.v1".to_owned(),
- required_role: RadrootsActorRole::Seller,
+ required_role: AuthorRole::Seller,
},
"actor does not satisfy role Seller for contract `radroots.operational_listing.published.v1`",
),
diff --git a/crates/event/src/contract/registry_v7.rs b/crates/event/src/contract/registry_v7.rs
@@ -73,8 +73,12 @@ pub enum RadrootsEventStability {
Experimental,
}
+/// Event-contract role required of an author.
+///
+/// This is event authoring policy, not signer provenance, authentication
+/// state, account persistence, or proof that a host granted the role.
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
-pub enum RadrootsActorRole {
+pub enum AuthorRole {
Any,
Application,
Buyer,
@@ -86,6 +90,36 @@ pub enum RadrootsActorRole {
Service,
}
+impl AuthorRole {
+ pub const ALL: [Self; 9] = [
+ Self::Any,
+ Self::Application,
+ Self::Buyer,
+ Self::Farmer,
+ Self::Member,
+ Self::Moderator,
+ Self::Relay,
+ Self::Seller,
+ Self::Service,
+ ];
+
+ /// Stable registry label used by versioned manifest encoders.
+ #[must_use]
+ pub const fn as_str(self) -> &'static str {
+ match self {
+ Self::Any => "any",
+ Self::Application => "application",
+ Self::Buyer => "buyer",
+ Self::Farmer => "farmer",
+ Self::Member => "member",
+ Self::Moderator => "moderator",
+ Self::Relay => "relay",
+ Self::Seller => "seller",
+ Self::Service => "service",
+ }
+ }
+}
+
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum RadrootsReducer {
CalendarProjection,
@@ -358,7 +392,7 @@ pub struct RadrootsEventContract {
pub class: RadrootsEventClass,
pub stability: RadrootsEventStability,
pub privacy: RadrootsEventPrivacy,
- pub author_role: RadrootsActorRole,
+ required_author_role: AuthorRole,
pub content_schema: RadrootsContentSchema,
pub authoring_policy: RadrootsEventAuthoringPolicy,
pub discriminator: RadrootsEventDiscriminator,
@@ -366,6 +400,17 @@ pub struct RadrootsEventContract {
pub reducers: &'static [RadrootsReducer],
}
+impl RadrootsEventContract {
+ /// Returns the event-authoring role required by this contract.
+ ///
+ /// Hosts decide whether a concrete signer or actor has this role; the
+ /// event package only owns the contract requirement.
+ #[must_use]
+ pub const fn required_author_role(&self) -> AuthorRole {
+ self.required_author_role
+ }
+}
+
static CONTRACT_FAMILIES: &[RadrootsContractFamilyMetadata] = &[
RadrootsContractFamilyMetadata {
family: RadrootsContractFamily::Account,
@@ -1346,7 +1391,7 @@ macro_rules! event_contract_with_stability {
$payload_type:literal,
$class:expr,
$standard_privacy:expr,
- $author_role:expr,
+ $required_author_role:expr,
$content_schema:expr,
$discriminator:expr,
$tags:expr,
@@ -1361,7 +1406,7 @@ macro_rules! event_contract_with_stability {
class: $class,
stability: $stability,
privacy: $standard_privacy,
- author_role: $author_role,
+ required_author_role: $required_author_role,
content_schema: $content_schema,
authoring_policy: RadrootsEventAuthoringPolicy::GenericDraft,
discriminator: $discriminator,
@@ -1379,7 +1424,7 @@ macro_rules! event_contract_with_authoring_policy {
$payload_type:literal,
$class:expr,
$standard_privacy:expr,
- $author_role:expr,
+ $required_author_role:expr,
$content_schema:expr,
$authoring_policy:expr,
$discriminator:expr,
@@ -1395,7 +1440,7 @@ macro_rules! event_contract_with_authoring_policy {
$payload_type,
$class,
$standard_privacy,
- $author_role,
+ $required_author_role,
$content_schema,
$discriminator,
$tags,
@@ -1413,7 +1458,7 @@ macro_rules! event_contract {
$payload_type:literal,
$class:expr,
$standard_privacy:expr,
- $author_role:expr,
+ $required_author_role:expr,
$content_schema:expr,
$discriminator:expr,
$tags:expr,
@@ -1426,7 +1471,7 @@ macro_rules! event_contract {
$payload_type,
$class,
$standard_privacy,
- $author_role,
+ $required_author_role,
$content_schema,
$discriminator,
$tags,
@@ -1444,7 +1489,7 @@ macro_rules! experimental_event_contract {
$payload_type:literal,
$class:expr,
$standard_privacy:expr,
- $author_role:expr,
+ $required_author_role:expr,
$content_schema:expr,
$discriminator:expr,
$tags:expr,
@@ -1457,7 +1502,7 @@ macro_rules! experimental_event_contract {
$payload_type,
$class,
$standard_privacy,
- $author_role,
+ $required_author_role,
$content_schema,
$discriminator,
$tags,
@@ -2238,7 +2283,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsAuthoredProfile / RadrootsInboundProfileMetadata",
RadrootsEventClass::Replaceable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventAuthoringPolicy::TypedOnly,
RadrootsEventDiscriminator::KindOnly,
@@ -2252,7 +2297,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsPost",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::PlainText,
RadrootsEventAuthoringPolicy::ReadOnly,
RadrootsEventDiscriminator::KindOnly,
@@ -2266,7 +2311,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsAuthoredUpdate / RadrootsInboundPostProjection",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::PlainText,
RadrootsEventAuthoringPolicy::TypedOnly,
RadrootsEventDiscriminator::AdmissionOnly,
@@ -2280,7 +2325,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsAuthoredPhotoUpdate / RadrootsInboundPostProjection",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::PlainText,
RadrootsEventAuthoringPolicy::TypedOnly,
RadrootsEventDiscriminator::AdmissionOnly,
@@ -2294,7 +2339,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsAuthoredAsk / RadrootsInboundPostProjection",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::PlainText,
RadrootsEventAuthoringPolicy::TypedOnly,
RadrootsEventDiscriminator::AdmissionOnly,
@@ -2308,7 +2353,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsAuthoredNip10Reply / RadrootsInboundNip10ReplyProjection",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::PlainText,
RadrootsEventAuthoringPolicy::TypedOnly,
RadrootsEventDiscriminator::AdmissionOnly,
@@ -2322,7 +2367,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsFollowList",
RadrootsEventClass::Replaceable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
P_TAGS,
@@ -2335,7 +2380,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsAuthoredNip09DeletionRequest / RadrootsInboundNip09DeletionProjection",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::PlainText,
RadrootsEventAuthoringPolicy::TypedOnly,
RadrootsEventDiscriminator::AdmissionOnly,
@@ -2349,7 +2394,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsRepost",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
EVENT_POINTER_TAGS,
@@ -2362,7 +2407,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsReaction",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::PlainText,
RadrootsEventDiscriminator::KindOnly,
EVENT_POINTER_TAGS,
@@ -2375,7 +2420,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsSeal",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Encrypted,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::Encrypted,
RadrootsEventDiscriminator::KindOnly,
NO_TAGS,
@@ -2388,7 +2433,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsMessage",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Encrypted,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::Encrypted,
RadrootsEventDiscriminator::KindOnly,
P_TAGS,
@@ -2401,7 +2446,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsMessageFile",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Encrypted,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::Encrypted,
RadrootsEventDiscriminator::KindOnly,
P_TAGS,
@@ -2414,7 +2459,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsGenericRepost",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
EVENT_POINTER_TAGS,
@@ -2427,7 +2472,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsFarmCrdtChange",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Encrypted,
- RadrootsActorRole::Farmer,
+ AuthorRole::Farmer,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
NO_TAGS,
@@ -2440,7 +2485,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsGiftWrap",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Encrypted,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::Encrypted,
RadrootsEventDiscriminator::KindOnly,
P_TAGS,
@@ -2453,7 +2498,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsFileMetadata",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
FILE_METADATA_TAGS,
@@ -2466,7 +2511,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsAuthoredNip22Comment / RadrootsInboundNip22CommentProjection",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::PlainText,
RadrootsEventAuthoringPolicy::TypedOnly,
RadrootsEventDiscriminator::AdmissionOnly,
@@ -2480,7 +2525,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsReport",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Moderator,
+ AuthorRole::Moderator,
RadrootsContentSchema::PlainText,
RadrootsEventDiscriminator::KindOnly,
EVENT_POINTER_TAGS,
@@ -2493,7 +2538,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsGroupPutUser",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Moderator,
+ AuthorRole::Moderator,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
GROUP_ACTION_TAGS,
@@ -2506,7 +2551,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsGroupRemoveUser",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Moderator,
+ AuthorRole::Moderator,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
GROUP_ACTION_TAGS,
@@ -2519,7 +2564,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsGroupEditMetadata",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Moderator,
+ AuthorRole::Moderator,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
GROUP_ACTION_TAGS,
@@ -2532,7 +2577,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsGroupDeleteEvent",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Moderator,
+ AuthorRole::Moderator,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
GROUP_ACTION_TAGS,
@@ -2545,7 +2590,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsGroupCreateGroup",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Moderator,
+ AuthorRole::Moderator,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
GROUP_ACTION_TAGS,
@@ -2558,7 +2603,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsGroupDeleteGroup",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Moderator,
+ AuthorRole::Moderator,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
GROUP_ACTION_TAGS,
@@ -2571,7 +2616,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsGroupCreateInvite",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Moderator,
+ AuthorRole::Moderator,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
GROUP_ACTION_TAGS,
@@ -2584,7 +2629,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsGroupJoinRequest",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Member,
+ AuthorRole::Member,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
GROUP_ACTION_TAGS,
@@ -2597,7 +2642,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsGroupLeaveRequest",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Member,
+ AuthorRole::Member,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
GROUP_ACTION_TAGS,
@@ -2610,7 +2655,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsGeochat",
RadrootsEventClass::Ephemeral,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::PlainText,
RadrootsEventDiscriminator::KindOnly,
NO_TAGS,
@@ -2623,7 +2668,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsRelayAuth",
RadrootsEventClass::Ephemeral,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Relay,
+ AuthorRole::Relay,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
NO_TAGS,
@@ -2636,7 +2681,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsHttpAuth",
RadrootsEventClass::Ephemeral,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Application,
+ AuthorRole::Application,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
NO_TAGS,
@@ -2649,7 +2694,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsList",
RadrootsEventClass::Replaceable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_TAGS,
@@ -2662,7 +2707,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsList",
RadrootsEventClass::Replaceable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_TAGS,
@@ -2675,7 +2720,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsList",
RadrootsEventClass::Replaceable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_TAGS,
@@ -2688,7 +2733,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsList",
RadrootsEventClass::Replaceable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_TAGS,
@@ -2701,7 +2746,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsList",
RadrootsEventClass::Replaceable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_TAGS,
@@ -2714,7 +2759,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsList",
RadrootsEventClass::Replaceable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_TAGS,
@@ -2727,7 +2772,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsList",
RadrootsEventClass::Replaceable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_TAGS,
@@ -2740,7 +2785,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsList",
RadrootsEventClass::Replaceable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_TAGS,
@@ -2753,7 +2798,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsList",
RadrootsEventClass::Replaceable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_TAGS,
@@ -2766,7 +2811,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsList",
RadrootsEventClass::Replaceable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_TAGS,
@@ -2779,7 +2824,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsList",
RadrootsEventClass::Replaceable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_TAGS,
@@ -2792,7 +2837,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsList",
RadrootsEventClass::Replaceable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_TAGS,
@@ -2805,7 +2850,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsList",
RadrootsEventClass::Replaceable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_TAGS,
@@ -2818,7 +2863,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsList",
RadrootsEventClass::Replaceable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_TAGS,
@@ -2831,7 +2876,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsList",
RadrootsEventClass::Replaceable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_TAGS,
@@ -2844,7 +2889,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsList",
RadrootsEventClass::Replaceable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_TAGS,
@@ -2857,7 +2902,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsListSet",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_SET_TAGS,
@@ -2870,7 +2915,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsListSet",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Farmer,
+ AuthorRole::Farmer,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::Composite(FARM_MEMBERS_LIST_DISCRIMINATOR),
LIST_SET_TAGS,
@@ -2883,7 +2928,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsListSet",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Farmer,
+ AuthorRole::Farmer,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::Composite(FARM_OWNERS_LIST_DISCRIMINATOR),
LIST_SET_TAGS,
@@ -2896,7 +2941,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsListSet",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Farmer,
+ AuthorRole::Farmer,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::Composite(FARM_WORKERS_LIST_DISCRIMINATOR),
LIST_SET_TAGS,
@@ -2909,7 +2954,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsListSet",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Farmer,
+ AuthorRole::Farmer,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::Composite(FARM_PLOTS_LIST_DISCRIMINATOR),
LIST_SET_TAGS,
@@ -2922,7 +2967,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsListSet",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Farmer,
+ AuthorRole::Farmer,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::Composite(FARM_LISTINGS_LIST_DISCRIMINATOR),
LIST_SET_TAGS,
@@ -2935,7 +2980,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsListSet",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Member,
+ AuthorRole::Member,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::DTagExact("member_of.farms"),
LIST_SET_TAGS,
@@ -2948,7 +2993,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsListSet",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_SET_TAGS,
@@ -2961,7 +3006,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsListSet",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_SET_TAGS,
@@ -2974,7 +3019,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsListSet",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_SET_TAGS,
@@ -2987,7 +3032,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsListSet",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_SET_TAGS,
@@ -3000,7 +3045,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsListSet",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_SET_TAGS,
@@ -3013,7 +3058,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsListSet",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_SET_TAGS,
@@ -3026,7 +3071,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsListSet",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_SET_TAGS,
@@ -3039,7 +3084,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsListSet",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_SET_TAGS,
@@ -3052,7 +3097,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsListSet",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_SET_TAGS,
@@ -3065,7 +3110,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsListSet",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_SET_TAGS,
@@ -3078,7 +3123,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsArticle",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::Markdown,
RadrootsEventDiscriminator::KindOnly,
ARTICLE_TAGS,
@@ -3091,7 +3136,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsWikiMergeRequest",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::PlainText,
RadrootsEventDiscriminator::KindOnly,
WIKI_MERGE_REQUEST_TAGS,
@@ -3104,7 +3149,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsWikiArticle",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::Djot,
RadrootsEventDiscriminator::KindOnly,
WIKI_ARTICLE_TAGS,
@@ -3117,7 +3162,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsWikiRedirect",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::Empty,
RadrootsEventDiscriminator::KindOnly,
WIKI_REDIRECT_TAGS,
@@ -3130,7 +3175,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsAdmittedCalendarDateEvent",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::PlainText,
RadrootsEventDiscriminator::KindOnly,
CALENDAR_DATE_EVENT_TAGS,
@@ -3143,7 +3188,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsAdmittedCalendarTimeEvent",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::PlainText,
RadrootsEventDiscriminator::KindOnly,
CALENDAR_TIME_EVENT_TAGS,
@@ -3156,7 +3201,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsAdmittedCalendar",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::PlainText,
RadrootsEventDiscriminator::KindOnly,
CALENDAR_COLLECTION_TAGS,
@@ -3169,7 +3214,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsAdmittedCalendarEventRsvp",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::PlainText,
RadrootsEventDiscriminator::KindOnly,
CALENDAR_RSVP_TAGS,
@@ -3182,7 +3227,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsListSet",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_SET_TAGS,
@@ -3195,7 +3240,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsListSet",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
LIST_SET_TAGS,
@@ -3208,7 +3253,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsFarm",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Farmer,
+ AuthorRole::Farmer,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
FARM_TAGS,
@@ -3221,7 +3266,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsPlot",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Farmer,
+ AuthorRole::Farmer,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
FARM_TAGS,
@@ -3234,7 +3279,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsCoop",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Farmer,
+ AuthorRole::Farmer,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
FARM_TAGS,
@@ -3247,7 +3292,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsDocument",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Farmer,
+ AuthorRole::Farmer,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
D_TAGS,
@@ -3260,7 +3305,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsResourceArea",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Farmer,
+ AuthorRole::Farmer,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
FARM_TAGS,
@@ -3273,7 +3318,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsResourceHarvestCap",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Farmer,
+ AuthorRole::Farmer,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
FARM_TAGS,
@@ -3286,7 +3331,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsAccountClaim",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
D_TAGS,
@@ -3299,7 +3344,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsFarmWorkspaceManifest",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Encrypted,
- RadrootsActorRole::Farmer,
+ AuthorRole::Farmer,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
D_TAGS,
@@ -3312,7 +3357,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsOperationalListing",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Seller,
+ AuthorRole::Seller,
RadrootsContentSchema::Markdown,
RadrootsEventDiscriminator::ClassifiedListingPartition(
RadrootsClassifiedListingPartition::OperationalListing,
@@ -3327,7 +3372,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsFoodAvailabilityDetails / RadrootsInboundFoodAvailabilityProjection",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Seller,
+ AuthorRole::Seller,
RadrootsContentSchema::Markdown,
RadrootsEventAuthoringPolicy::TypedOnly,
RadrootsEventDiscriminator::AdmissionOnly,
@@ -3341,7 +3386,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsKnowledgeSource",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::TagEquals {
name: "contract",
@@ -3357,7 +3402,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsEvidenceBounty",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::TagEquals {
name: "contract",
@@ -3373,7 +3418,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsKnowledgeClaim",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::TagEquals {
name: "contract",
@@ -3389,7 +3434,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsKnowledgeRelation",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::TagEquals {
name: "contract",
@@ -3405,7 +3450,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsKnowledgeReview",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::TagEquals {
name: "contract",
@@ -3421,7 +3466,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsKnowledgeFieldReport",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::TagEquals {
name: "contract",
@@ -3437,7 +3482,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsKnowledgeChangeProposal",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::TagEquals {
name: "contract",
@@ -3453,7 +3498,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsContributionAttestation",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::TagEquals {
name: "contract",
@@ -3469,7 +3514,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsApplicationHandler",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Application,
+ AuthorRole::Application,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
D_TAGS,
@@ -3482,7 +3527,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsGroupMetadata",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Moderator,
+ AuthorRole::Moderator,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
GROUP_STATE_TAGS,
@@ -3495,7 +3540,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsGroupAdmins",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Moderator,
+ AuthorRole::Moderator,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
GROUP_STATE_TAGS,
@@ -3508,7 +3553,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsGroupMembers",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Moderator,
+ AuthorRole::Moderator,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
GROUP_STATE_TAGS,
@@ -3521,7 +3566,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsGroupRoles",
RadrootsEventClass::Addressable,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Moderator,
+ AuthorRole::Moderator,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
GROUP_STATE_TAGS,
@@ -3534,7 +3579,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsTradeMutationEnvelopeV1",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Buyer,
+ AuthorRole::Buyer,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::ContentJsonFieldEquals {
field: "contract_id",
@@ -3550,7 +3595,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsTradeMutationEnvelopeV1",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Seller,
+ AuthorRole::Seller,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::ContentJsonFieldEquals {
field: "contract_id",
@@ -3566,7 +3611,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsTradeMutationEnvelopeV1",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::ContentJsonFieldEquals {
field: "contract_id",
@@ -3582,7 +3627,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsTradeMutationEnvelopeV1",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::ContentJsonFieldEquals {
field: "contract_id",
@@ -3598,7 +3643,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsTradeMutationEnvelopeV1",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Buyer,
+ AuthorRole::Buyer,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::ContentJsonFieldEquals {
field: "contract_id",
@@ -3614,7 +3659,7 @@ static EVENT_CONTRACTS_REGISTRY_V7: &[RadrootsEventContract] = &[
"RadrootsTradeValidationReceipt",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Service,
+ AuthorRole::Service,
RadrootsContentSchema::JsonObject,
RadrootsEventDiscriminator::KindOnly,
TRADE_VALIDATION_RECEIPT_TAGS,
diff --git a/crates/event/src/contract/registry_v7/tests.rs b/crates/event/src/contract/registry_v7/tests.rs
@@ -10,7 +10,7 @@ static AMBIGUOUS_TEST_CONTRACTS: &[RadrootsEventContract] = &[
"Test",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::PlainText,
RadrootsEventDiscriminator::KindOnly,
NO_TAGS,
@@ -23,7 +23,7 @@ static AMBIGUOUS_TEST_CONTRACTS: &[RadrootsEventContract] = &[
"Test",
RadrootsEventClass::Regular,
RadrootsEventPrivacy::Public,
- RadrootsActorRole::Any,
+ AuthorRole::Any,
RadrootsContentSchema::PlainText,
RadrootsEventDiscriminator::KindOnly,
NO_TAGS,
@@ -93,7 +93,7 @@ fn synthetic_event_contract(
class: RadrootsEventClass::Regular,
stability: RadrootsEventStability::Experimental,
privacy: RadrootsEventPrivacy::Public,
- author_role: RadrootsActorRole::Any,
+ required_author_role: AuthorRole::Any,
content_schema: RadrootsContentSchema::PlainText,
authoring_policy: RadrootsEventAuthoringPolicy::GenericDraft,
discriminator: RadrootsEventDiscriminator::KindOnly,
@@ -113,6 +113,31 @@ fn synthetic_kind_contract(kind: u32) -> RadrootsKindContract {
}
}
+#[test]
+fn author_role_catalog_is_event_owned_complete_and_schema_stable() {
+ let declared = AuthorRole::ALL.into_iter().collect::<BTreeSet<_>>();
+ let used = all_event_contracts_registry_v7()
+ .iter()
+ .map(RadrootsEventContract::required_author_role)
+ .collect::<BTreeSet<_>>();
+ let labels = AuthorRole::ALL
+ .into_iter()
+ .map(AuthorRole::as_str)
+ .collect::<BTreeSet<_>>();
+
+ assert_eq!(used, declared, "every event author role must be exercised");
+ assert_eq!(labels.len(), AuthorRole::ALL.len());
+ assert!(
+ labels.iter().all(|label| {
+ !label.is_empty()
+ && label
+ .bytes()
+ .all(|byte| byte.is_ascii_lowercase() || byte == b'_')
+ }),
+ "author-role manifest labels must remain canonical snake case"
+ );
+}
+
fn unsigned_event(kind: u32, tags: Vec<Vec<&str>>, content: &str) -> RadrootsEventEnvelope {
RadrootsEventEnvelope::new(RadrootsEventEnvelopeParts {
id: "0".repeat(64),
@@ -551,7 +576,7 @@ fn classified_listing_kind_profiles_are_partitioned_and_explicit() {
);
assert_eq!(food.class, RadrootsEventClass::Addressable);
assert_eq!(food.privacy, RadrootsEventPrivacy::Public);
- assert_eq!(food.author_role, RadrootsActorRole::Seller);
+ assert_eq!(food.required_author_role(), AuthorRole::Seller);
assert_eq!(food.content_schema, RadrootsContentSchema::Markdown);
assert_eq!(
food.authoring_policy,
@@ -959,7 +984,7 @@ fn nip22_comment_contract_is_typed_and_admission_only() {
assert_eq!(contract.kind, KIND_COMMENT);
assert_eq!(contract.class, RadrootsEventClass::Regular);
assert_eq!(contract.privacy, RadrootsEventPrivacy::Public);
- assert_eq!(contract.author_role, RadrootsActorRole::Any);
+ assert_eq!(contract.required_author_role(), AuthorRole::Any);
assert_eq!(contract.content_schema, RadrootsContentSchema::PlainText);
assert_eq!(
contract.authoring_policy,
@@ -1020,7 +1045,7 @@ fn nip09_deletion_request_contract_is_typed_and_admission_only() {
assert_eq!(contract.kind, KIND_DELETION_REQUEST);
assert_eq!(contract.class, RadrootsEventClass::Regular);
assert_eq!(contract.privacy, RadrootsEventPrivacy::Public);
- assert_eq!(contract.author_role, RadrootsActorRole::Any);
+ assert_eq!(contract.required_author_role(), AuthorRole::Any);
assert_eq!(contract.content_schema, RadrootsContentSchema::PlainText);
assert_eq!(
contract.authoring_policy,
diff --git a/crates/event/tests/package_boundary.rs b/crates/event/tests/package_boundary.rs
@@ -17,6 +17,7 @@ use radroots_identity::PublicKey;
const MANIFEST: &str = include_str!("../Cargo.toml");
const ROOT: &str = include_str!("../src/lib.rs");
const IDENTIFIERS: &str = include_str!("../src/ids.rs");
+const CONTRACT_REGISTRY: &str = include_str!("../src/contract/registry_v7.rs");
const RELAY_HINT: &str = include_str!("../src/relay_hint.rs");
const TRADE: &str = include_str!("../src/trade.rs");
@@ -104,6 +105,23 @@ fn verification_typestates_are_native_private_and_policy_gated() {
}
#[test]
+fn contract_author_roles_are_event_owned_requirements_not_signer_provenance() {
+ let seller =
+ radroots_event::contract::event_contract("radroots.operational_listing.published.v1")
+ .expect("operational listing contract");
+
+ assert_eq!(
+ seller.required_author_role(),
+ radroots_event::contract::AuthorRole::Seller
+ );
+ assert!(!CONTRACT_REGISTRY.contains("RadrootsActorRole"));
+ assert!(!CONTRACT_REGISTRY.contains("pub author_role:"));
+ assert!(!CONTRACT_REGISTRY.contains("radroots_signing"));
+ assert!(!CONTRACT_REGISTRY.contains("RadrootsActorContext"));
+ assert!(!CONTRACT_REGISTRY.contains("AccountId"));
+}
+
+#[test]
fn canonical_identifier_api_owns_bytes_and_requires_explicit_text_encoding() {
let event_id = EventId::parse("A".repeat(64)).expect("event id");
let signature = EventSignature::parse("B".repeat(128)).expect("event signature");
diff --git a/crates/event_codec/src/manifest.rs b/crates/event_codec/src/manifest.rs
@@ -7,11 +7,11 @@ use alloc::{
use radroots_event::RADROOTS_EVENT_VERSION;
use radroots_event::contract::{
- RADROOTS_EVENT_CONTRACT_REGISTRY_VERSION, RadrootsActorRole, RadrootsContentSchema,
- RadrootsContractFamily, RadrootsEventClass, RadrootsEventContract, RadrootsEventDiscriminator,
- RadrootsEventPrivacy, RadrootsEventStability, RadrootsNostrStandard, RadrootsReducer,
- RadrootsTagCardinality, RadrootsTagContract, RadrootsTagSemantic, RadrootsTagValueType,
- all_event_contracts, event_contract_family, kind_contract,
+ RADROOTS_EVENT_CONTRACT_REGISTRY_VERSION, RadrootsContentSchema, RadrootsContractFamily,
+ RadrootsEventClass, RadrootsEventContract, RadrootsEventDiscriminator, RadrootsEventPrivacy,
+ RadrootsEventStability, RadrootsNostrStandard, RadrootsReducer, RadrootsTagCardinality,
+ RadrootsTagContract, RadrootsTagSemantic, RadrootsTagValueType, all_event_contracts,
+ event_contract_family, kind_contract,
};
use serde::{Deserialize, Serialize};
use sha2::{Digest, Sha256};
@@ -166,7 +166,7 @@ fn manifest_entry(contract: &RadrootsEventContract) -> RadrootsKnowledgeContract
standard: standard.to_string(),
stability: stability_label(contract.stability).to_string(),
privacy: privacy_label(contract.privacy).to_string(),
- author_role: actor_role_label(contract.author_role).to_string(),
+ author_role: contract.required_author_role().as_str().to_string(),
content_schema: content_schema_label(contract.content_schema).to_string(),
payload_type: contract.payload_type.to_string(),
discriminators: vec![discriminator_manifest(&contract.discriminator)],
@@ -344,20 +344,6 @@ fn privacy_label(value: RadrootsEventPrivacy) -> &'static str {
}
}
-fn actor_role_label(value: RadrootsActorRole) -> &'static str {
- match value {
- RadrootsActorRole::Any => "any",
- RadrootsActorRole::Application => "application",
- RadrootsActorRole::Buyer => "buyer",
- RadrootsActorRole::Farmer => "farmer",
- RadrootsActorRole::Member => "member",
- RadrootsActorRole::Moderator => "moderator",
- RadrootsActorRole::Relay => "relay",
- RadrootsActorRole::Seller => "seller",
- RadrootsActorRole::Service => "service",
- }
-}
-
fn content_schema_label(value: RadrootsContentSchema) -> &'static str {
match value {
RadrootsContentSchema::Empty => "empty",
diff --git a/crates/event_codec/src/manifest/registry_v7.rs b/crates/event_codec/src/manifest/registry_v7.rs
@@ -8,7 +8,7 @@ use alloc::{
use radroots_event::{
classified_listing::RadrootsClassifiedListingPartition,
contract::{
- RadrootsActorRole, RadrootsContentSchema, RadrootsEventAuthoringPolicy, RadrootsEventClass,
+ AuthorRole, RadrootsContentSchema, RadrootsEventAuthoringPolicy, RadrootsEventClass,
RadrootsEventContract, RadrootsEventDiscriminator, RadrootsEventPrivacy,
RadrootsEventStability, RadrootsKindContract, RadrootsNostrStandard, RadrootsReducer,
RadrootsTagCardinality, RadrootsTagContract, RadrootsTagSemantic, RadrootsTagValueType,
@@ -379,7 +379,7 @@ fn event_inventory_entry(
class: class_inventory(contract.class),
stability: stability_inventory(contract.stability),
privacy: privacy_inventory(contract.privacy),
- author_role: actor_role_inventory(contract.author_role),
+ author_role: author_role_inventory(contract.required_author_role()),
content_schema: content_schema_inventory(contract.content_schema),
authoring_policy: authoring_policy_inventory(contract.authoring_policy),
discriminator: discriminator_inventory(&contract.discriminator),
@@ -447,17 +447,17 @@ fn privacy_inventory(value: RadrootsEventPrivacy) -> RadrootsEventContractRegist
}
}
-fn actor_role_inventory(value: RadrootsActorRole) -> RadrootsEventContractRegistryV7ActorRole {
+fn author_role_inventory(value: AuthorRole) -> RadrootsEventContractRegistryV7ActorRole {
match value {
- RadrootsActorRole::Any => RadrootsEventContractRegistryV7ActorRole::Any,
- RadrootsActorRole::Application => RadrootsEventContractRegistryV7ActorRole::Application,
- RadrootsActorRole::Buyer => RadrootsEventContractRegistryV7ActorRole::Buyer,
- RadrootsActorRole::Farmer => RadrootsEventContractRegistryV7ActorRole::Farmer,
- RadrootsActorRole::Member => RadrootsEventContractRegistryV7ActorRole::Member,
- RadrootsActorRole::Moderator => RadrootsEventContractRegistryV7ActorRole::Moderator,
- RadrootsActorRole::Relay => RadrootsEventContractRegistryV7ActorRole::Relay,
- RadrootsActorRole::Seller => RadrootsEventContractRegistryV7ActorRole::Seller,
- RadrootsActorRole::Service => RadrootsEventContractRegistryV7ActorRole::Service,
+ AuthorRole::Any => RadrootsEventContractRegistryV7ActorRole::Any,
+ AuthorRole::Application => RadrootsEventContractRegistryV7ActorRole::Application,
+ AuthorRole::Buyer => RadrootsEventContractRegistryV7ActorRole::Buyer,
+ AuthorRole::Farmer => RadrootsEventContractRegistryV7ActorRole::Farmer,
+ AuthorRole::Member => RadrootsEventContractRegistryV7ActorRole::Member,
+ AuthorRole::Moderator => RadrootsEventContractRegistryV7ActorRole::Moderator,
+ AuthorRole::Relay => RadrootsEventContractRegistryV7ActorRole::Relay,
+ AuthorRole::Seller => RadrootsEventContractRegistryV7ActorRole::Seller,
+ AuthorRole::Service => RadrootsEventContractRegistryV7ActorRole::Service,
}
}
diff --git a/crates/event_store/contracts/source_maintenance_v1.manifest.json b/crates/event_store/contracts/source_maintenance_v1.manifest.json
@@ -264,8 +264,8 @@
{
"role": "event_contract_registry_v7_authority",
"path": "crates/event/src/contract/registry_v7.rs",
- "byte_length": 155739,
- "sha256": "64f5a67f8a54f364287210a3f717d9124bc1cb2b9c5fc67e9ff0e40acd7bd216",
+ "byte_length": 156426,
+ "sha256": "b24fd9cf75279dcd24971fba7d55df1a58f0fc773b68984528bd42e59b838086",
"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 @@
-f4c42eb9d41cfa5378c0111708a6d2ca0e4cbf8c7cee64c85638d75e5887cb97
+ef36b3010757fed79fc799db93308e32303d808788ddae41f8169c4bb64a6b28
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_contract_facade\",\n \"path\": \"crates/event/src/contract.rs\",\n \"byte_length\": 86,\n \"sha256\": \"9994cbca9dcc7450ad133b6b927e7c06bee08ef813652452cc1e56a284c1be10\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_contract_registry_v7_authority\",\n \"path\": \"crates/event/src/contract/registry_v7.rs\",\n \"byte_length\": 155739,\n \"sha256\": \"64f5a67f8a54f364287210a3f717d9124bc1cb2b9c5fc67e9ff0e40acd7bd216\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_envelope_authority\",\n \"path\": \"crates/event/src/envelope.rs\",\n \"byte_length\": 31143,\n \"sha256\": \"2478ca91b4dedaf8b8aefe653971b70c56c4ee076dcbfdf7f59f97f86c03b748\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_verification_typestate_authority\",\n \"path\": \"crates/event/src/verification.rs\",\n \"byte_length\": 9470,\n \"sha256\": \"181e17a5e45d7a01ae2d2d4057b210456072bfb260712ace71c2dd2461dda898\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_admission_typestate_authority\",\n \"path\": \"crates/event/src/admission.rs\",\n \"byte_length\": 5809,\n \"sha256\": \"8caf75f69994e9710b4e8f82abface29e752dd581c012e5e20452c82d21c2d01\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_head_facade\",\n \"path\": \"crates/event/src/event_head.rs\",\n \"byte_length\": 68,\n \"sha256\": \"cb52f6006f7ecd862707d6b048f9fc407e0cd5ebcd3091b3c54e195ffa5cba64\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_head_v1_authority\",\n \"path\": \"crates/event/src/event_head/v1.rs\",\n \"byte_length\": 7538,\n \"sha256\": \"fbc738b403afd3a186ab183ff5f457125a7fbfab01a51fd4b46c92a2543a0126\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_ids_authority\",\n \"path\": \"crates/event/src/ids.rs\",\n \"byte_length\": 51007,\n \"sha256\": \"7d5d52dcbdd2ec31d914999960fa58aa279a8d4f8bd380fb6050b9a1019ad2d8\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_trade_authority\",\n \"path\": \"crates/event/src/trade.rs\",\n \"byte_length\": 68514,\n \"sha256\": \"88c21633f60b84adf30ad7fe21d6d0b6844cc7186826600a83a467cc028e55dd\",\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\": 58707,\n \"sha256\": \"c21e1b2e9cf6bfb4e007a32772ba59452deef0c9ba5f652992159e85fe7ccb24\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_calendar_authority\",\n \"path\": \"crates/event/src/calendar.rs\",\n \"byte_length\": 103837,\n \"sha256\": \"928e5a3df61ab08565cecf20a5045352236bc3d807127f1cd66294d60ee65621\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_classified_listing_authority\",\n \"path\": \"crates/event/src/classified_listing.rs\",\n \"byte_length\": 8226,\n \"sha256\": \"745aa08953a6243ea1afad22aa63e44f6746f2f243ab0d6b617d6ab64fa58749\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_profile_authority\",\n \"path\": \"crates/event/src/profile.rs\",\n \"byte_length\": 18848,\n \"sha256\": \"7c7ac7f4926938f5cb5530be5450e5e23f18f216bdb222150fbdd451cec20d5c\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_post_authority\",\n \"path\": \"crates/event/src/post.rs\",\n \"byte_length\": 22738,\n \"sha256\": \"7ed4a4c39bed40b134369d16e1fc35ab2c7d27ee300dd36d367025def2283b39\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_comment_authority\",\n \"path\": \"crates/event/src/comment.rs\",\n \"byte_length\": 36434,\n \"sha256\": \"ec944bd868deb71215c915a35e79ff26715317fdb62c0fbbb5f1d0993f769c38\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_food_availability_authority\",\n \"path\": \"crates/event/src/food_availability.rs\",\n \"byte_length\": 45429,\n \"sha256\": \"b4357dfb6954631673b6cd58794015da29303cb54ce8405a57ad543870036c9e\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_deletion_authority\",\n \"path\": \"crates/event/src/deletion.rs\",\n \"byte_length\": 31177,\n \"sha256\": \"eaf5eac81cd90039dd2c8f5a1f647d7916f961841d51887f1c5a679947bc816a\",\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\": 14019,\n \"sha256\": \"f50a8fddd1ec9996a452f944ebc59ca4217fc8b28d90be33c2cca925dc3465d0\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_media_authority\",\n \"path\": \"crates/event/src/media.rs\",\n \"byte_length\": 3521,\n \"sha256\": \"8f670e634452872a525efdad0cb9480288885c62f22a9b9915a67a7e7965651c\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_social_authority\",\n \"path\": \"crates/event/src/social.rs\",\n \"byte_length\": 5483,\n \"sha256\": \"1b89c6d0954822e7f1e778479ed43694e88929bcd5310ee066f8f4ba6505045a\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_wire_facade\",\n \"path\": \"crates/event/src/wire.rs\",\n \"byte_length\": 68,\n \"sha256\": \"cb52f6006f7ecd862707d6b048f9fc407e0cd5ebcd3091b3c54e195ffa5cba64\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_wire_v1_authority\",\n \"path\": \"crates/event/src/wire/v1.rs\",\n \"byte_length\": 22133,\n \"sha256\": \"cc28c8cbd962b32ed2efe43e84c1e0d1ea3bd89636efff2d5553714072fce1a4\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_verification_facade\",\n \"path\": \"crates/event_codec/src/verification.rs\",\n \"byte_length\": 253,\n \"sha256\": \"b49a32df605035c87f295c0a151140d43d2e588c5e11b05183e5fc92993dae0e\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_verification_v1_authority\",\n \"path\": \"crates/event_codec/src/verification/v1.rs\",\n \"byte_length\": 8649,\n \"sha256\": \"1ef3d12f90eb7d35f4cafe36c2cc0bbd33731df278b58c9062fb13934e2a98c8\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_registry_v7_admission_authority\",\n \"path\": \"crates/event_codec/src/admission/registry_v7.rs\",\n \"byte_length\": 5350,\n \"sha256\": \"755e63dd7ad1115c219e5a3ea540bef67d2770fc9f2a5aa6ba97c925c99bdced\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_profile_inbound_facade\",\n \"path\": \"crates/event_codec/src/profile/inbound.rs\",\n \"byte_length\": 86,\n \"sha256\": \"9994cbca9dcc7450ad133b6b927e7c06bee08ef813652452cc1e56a284c1be10\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_profile_registry_v7_authority\",\n \"path\": \"crates/event_codec/src/profile/inbound/registry_v7.rs\",\n \"byte_length\": 10394,\n \"sha256\": \"c37c225ea8153beb098a39c4a56203aa03382af12646f40cd3f8628663700702\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_post_inbound_facade\",\n \"path\": \"crates/event_codec/src/post/inbound.rs\",\n \"byte_length\": 86,\n \"sha256\": \"9994cbca9dcc7450ad133b6b927e7c06bee08ef813652452cc1e56a284c1be10\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_post_registry_v7_authority\",\n \"path\": \"crates/event_codec/src/post/inbound/registry_v7.rs\",\n \"byte_length\": 16016,\n \"sha256\": \"bc0bb839c28f3588f05544c846c987528ea3934c75305fef70af8e027a97cc58\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_reply_inbound_facade\",\n \"path\": \"crates/event_codec/src/reply/inbound.rs\",\n \"byte_length\": 86,\n \"sha256\": \"9994cbca9dcc7450ad133b6b927e7c06bee08ef813652452cc1e56a284c1be10\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_reply_registry_v7_authority\",\n \"path\": \"crates/event_codec/src/reply/inbound/registry_v7.rs\",\n \"byte_length\": 26812,\n \"sha256\": \"a72e9721ed13addca2a63942ac9e43c1daa8f1d1457eef08ec6a3ee5eb8872c5\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_comment_inbound_facade\",\n \"path\": \"crates/event_codec/src/comment/inbound.rs\",\n \"byte_length\": 86,\n \"sha256\": \"9994cbca9dcc7450ad133b6b927e7c06bee08ef813652452cc1e56a284c1be10\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_comment_registry_v7_authority\",\n \"path\": \"crates/event_codec/src/comment/inbound/registry_v7.rs\",\n \"byte_length\": 53783,\n \"sha256\": \"30d1b0155963b25d64685ddd042f423ef7707b111dc56ead15bd468e0433a432\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_deletion_facade\",\n \"path\": \"crates/event_codec/src/deletion/mod.rs\",\n \"byte_length\": 115,\n \"sha256\": \"17d56f82ddb0a86bc97abbcf3e037fe460ea31fff2548f527be4bf004dac3a95\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_deletion_reconciliation_v1_authority\",\n \"path\": \"crates/event_codec/src/deletion/reconciliation_v1.rs\",\n \"byte_length\": 38469,\n \"sha256\": \"3e06d1fa923ca5faabb1e95338c35650b0e20b078ff5c972e35ab845d8b7476c\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_food_inbound_facade\",\n \"path\": \"crates/event_codec/src/food_availability/inbound.rs\",\n \"byte_length\": 86,\n \"sha256\": \"9994cbca9dcc7450ad133b6b927e7c06bee08ef813652452cc1e56a284c1be10\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_food_registry_v7_authority\",\n \"path\": \"crates/event_codec/src/food_availability/inbound/registry_v7.rs\",\n \"byte_length\": 26764,\n \"sha256\": \"a5786cff942b7b0038f741afb5b9a19230ac58cb57a5ba747b32e1b95d414e15\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_job_traits_authority\",\n \"path\": \"crates/event_codec/src/job/traits.rs\",\n \"byte_length\": 5067,\n \"sha256\": \"de0b3f67177a48bd8e3c62534850103d09b7be099e80e88a9583363db705fcbb\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_store_dependency_authority\",\n \"path\": \"crates/event_store/Cargo.toml\",\n \"byte_length\": 1567,\n \"sha256\": \"46e03d3c758e1116638021a0499dfa588b4266498e0d50cfa758f9bef9bcfeb3\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_store_error_and_limits\",\n \"path\": \"crates/event_store/src/error.rs\",\n \"byte_length\": 19517,\n \"sha256\": \"4bf24ee1aa6117597ab467b1379a05549b79024213dc7622a2d276bc26fffab4\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"generated_descriptor_registration\",\n \"path\": \"crates/event_store/src/generated.rs\",\n \"byte_length\": 144,\n \"sha256\": \"6b0a8d6f249bd4fc3f878d37cb5e418680f0f1be2d9eec2518dedf03efc47121\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"public_surface\",\n \"path\": \"crates/event_store/src/lib.rs\",\n \"byte_length\": 3844,\n \"sha256\": \"3cd9653bcb752fb3c4442d4904b98a0a6208011a9a238125b7b7073d7f4e312b\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"migration_registry\",\n \"path\": \"crates/event_store/src/migrations.rs\",\n \"byte_length\": 73585,\n \"sha256\": \"a47477d04759ec6e71d14d3d05459864eae78fce0e3c2481a1b03147f04637f7\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"predecessor_model_public_surface\",\n \"path\": \"crates/event_store/src/model.rs\",\n \"byte_length\": 33596,\n \"sha256\": \"98b1742ffb517f66f8e9edefa61d1c3cf3e22be5985202c6c340310a98c72c8e\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_store_reconciliation_v1_model\",\n \"path\": \"crates/event_store/src/model/reconciliation_v1.rs\",\n \"byte_length\": 11138,\n \"sha256\": \"8a26bc373035878ef9b41767ceea7b681896e17d88bedce118de1d622125e1d6\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_store_reconciliation_v1_ingest_model\",\n \"path\": \"crates/event_store/src/model/ingest_reconciliation_v1.rs\",\n \"byte_length\": 1626,\n \"sha256\": \"47bf13b3fc0f8a913a660f7d655413de0f6b90568bc4acc510aa6bd741bab47b\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"addressable_transition_feed_model\",\n \"path\": \"crates/event_store/src/model/addressable_transition_feed_v1.rs\",\n \"byte_length\": 22279,\n \"sha256\": \"f8ea454a0e998a3d433bba52d1ff9759a04fcb91db286cf2a2b10ef7d0057694\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"food_projection_model\",\n \"path\": \"crates/event_store/src/model/food_availability_projection_v1.rs\",\n \"byte_length\": 17437,\n \"sha256\": \"6fdfc8c5eb3dd9c451fd47b2394af123b50f7fe6d74113f8777221a8fa31ba30\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"source_generation_rebuild_authority\",\n \"path\": \"crates/event_store/src/nip09/reconciliation_v1.rs\",\n \"byte_length\": 185215,\n \"sha256\": \"575c9fb25b1f728144f5fe649007be705092d9b137f51fd8d771439871bfa09a\",\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\": 17983,\n \"sha256\": \"a1d919aa545d7c506d7ae8740445025732c2cda302790d243a4ff3d6cee898f6\",\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\": 395012,\n \"sha256\": \"5538b600fa5e457e10f23fe4e3a3c55496662098abaef2692108dc69c29aa3e6\",\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\": 40260,\n \"sha256\": \"46ea9c9786099c85150e4979c9dac6f84c1b85b8f30ec44aae6d25f9eb9bebc5\",\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\": 15786,\n \"sha256\": \"bf03f9fc45561366cc489daa400b39d65e68cc70aea2ef4a9cd7724224ca9514\",\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\": 48959,\n \"sha256\": \"a01ed95983481a8f0efdcc985635efba122fdbfafc226b7e0b30325af6b4de80\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"predecessor_post_core_v1_extension\",\n \"path\": \"crates/event_store/src/store/post_core_extensions_v1.rs\",\n \"byte_length\": 6923,\n \"sha256\": \"3820dad764a0575c20f3dc80a2f850651a1e41ab767cf46305377bf800558699\",\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\": 16897,\n \"sha256\": \"3fb583b06dbd2e4fde96346da21e6d4516e79c8a4a3889299a7dd736c882c5df\",\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\": 30153,\n \"sha256\": \"de7c327d940d561f0818fade4dc79cabb0b5141e30e02574c702b6f109aee392\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"predecessor_protocol_storage\",\n \"path\": \"crates/event_store/src/store/protocol_storage_v1.rs\",\n \"byte_length\": 10929,\n \"sha256\": \"20de4436945bac0d8cbeca0ae6cd95232a92da8cd6be6ae6beacba17fe50d658\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"source_maintenance_runtime\",\n \"path\": \"crates/event_store/src/source_maintenance_v1.rs\",\n \"byte_length\": 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\": 34061,\n \"sha256\": \"7cdbdda875a876482a061bcd8886d9ba56c10fab0fa76a07d73d0f368324b545\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"artifact_transaction_authority\",\n \"path\": \"tools/xtask/src/contract/artifact_bundle.rs\",\n \"byte_length\": 38279,\n \"sha256\": \"f326ea57b56d40135f95b6b1e15961f66eed363337180a6d12a5ea903e1a9a29\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"predecessor_successor_governance\",\n \"path\": \"tools/xtask/src/contract/food_availability_projection.rs\",\n \"byte_length\": 198638,\n \"sha256\": \"66a703e5284d0ce91a95d519eee93bd9763d4ab24b7fe8ef39672064118ed391\",\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\": 836177,\n \"sha256\": \"0ac3b005475394432534fcb657fee34efdb8e8360231c44f94649d46e88fce94\",\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\": 193992,\n \"sha256\": \"6c550f688224ffd5404b4f5b44780c48e95b8cf2adee730f3a178024625b7c80\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"contract_command_authority\",\n \"path\": \"tools/xtask/src/contract.rs\",\n \"byte_length\": 506277,\n \"sha256\": \"3a06ed79b5b342dce5b6582fc5c58311378a2dba97e5a8c74361f0186886023d\",\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_contract_facade\",\n \"path\": \"crates/event/src/contract.rs\",\n \"byte_length\": 86,\n \"sha256\": \"9994cbca9dcc7450ad133b6b927e7c06bee08ef813652452cc1e56a284c1be10\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_contract_registry_v7_authority\",\n \"path\": \"crates/event/src/contract/registry_v7.rs\",\n \"byte_length\": 156426,\n \"sha256\": \"b24fd9cf75279dcd24971fba7d55df1a58f0fc773b68984528bd42e59b838086\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_envelope_authority\",\n \"path\": \"crates/event/src/envelope.rs\",\n \"byte_length\": 31143,\n \"sha256\": \"2478ca91b4dedaf8b8aefe653971b70c56c4ee076dcbfdf7f59f97f86c03b748\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_verification_typestate_authority\",\n \"path\": \"crates/event/src/verification.rs\",\n \"byte_length\": 9470,\n \"sha256\": \"181e17a5e45d7a01ae2d2d4057b210456072bfb260712ace71c2dd2461dda898\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_admission_typestate_authority\",\n \"path\": \"crates/event/src/admission.rs\",\n \"byte_length\": 5809,\n \"sha256\": \"8caf75f69994e9710b4e8f82abface29e752dd581c012e5e20452c82d21c2d01\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_head_facade\",\n \"path\": \"crates/event/src/event_head.rs\",\n \"byte_length\": 68,\n \"sha256\": \"cb52f6006f7ecd862707d6b048f9fc407e0cd5ebcd3091b3c54e195ffa5cba64\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_head_v1_authority\",\n \"path\": \"crates/event/src/event_head/v1.rs\",\n \"byte_length\": 7538,\n \"sha256\": \"fbc738b403afd3a186ab183ff5f457125a7fbfab01a51fd4b46c92a2543a0126\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_ids_authority\",\n \"path\": \"crates/event/src/ids.rs\",\n \"byte_length\": 51007,\n \"sha256\": \"7d5d52dcbdd2ec31d914999960fa58aa279a8d4f8bd380fb6050b9a1019ad2d8\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_trade_authority\",\n \"path\": \"crates/event/src/trade.rs\",\n \"byte_length\": 68514,\n \"sha256\": \"88c21633f60b84adf30ad7fe21d6d0b6844cc7186826600a83a467cc028e55dd\",\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\": 58707,\n \"sha256\": \"c21e1b2e9cf6bfb4e007a32772ba59452deef0c9ba5f652992159e85fe7ccb24\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_calendar_authority\",\n \"path\": \"crates/event/src/calendar.rs\",\n \"byte_length\": 103837,\n \"sha256\": \"928e5a3df61ab08565cecf20a5045352236bc3d807127f1cd66294d60ee65621\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_classified_listing_authority\",\n \"path\": \"crates/event/src/classified_listing.rs\",\n \"byte_length\": 8226,\n \"sha256\": \"745aa08953a6243ea1afad22aa63e44f6746f2f243ab0d6b617d6ab64fa58749\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_profile_authority\",\n \"path\": \"crates/event/src/profile.rs\",\n \"byte_length\": 18848,\n \"sha256\": \"7c7ac7f4926938f5cb5530be5450e5e23f18f216bdb222150fbdd451cec20d5c\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_post_authority\",\n \"path\": \"crates/event/src/post.rs\",\n \"byte_length\": 22738,\n \"sha256\": \"7ed4a4c39bed40b134369d16e1fc35ab2c7d27ee300dd36d367025def2283b39\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_comment_authority\",\n \"path\": \"crates/event/src/comment.rs\",\n \"byte_length\": 36434,\n \"sha256\": \"ec944bd868deb71215c915a35e79ff26715317fdb62c0fbbb5f1d0993f769c38\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_food_availability_authority\",\n \"path\": \"crates/event/src/food_availability.rs\",\n \"byte_length\": 45429,\n \"sha256\": \"b4357dfb6954631673b6cd58794015da29303cb54ce8405a57ad543870036c9e\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_deletion_authority\",\n \"path\": \"crates/event/src/deletion.rs\",\n \"byte_length\": 31177,\n \"sha256\": \"eaf5eac81cd90039dd2c8f5a1f647d7916f961841d51887f1c5a679947bc816a\",\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\": 14019,\n \"sha256\": \"f50a8fddd1ec9996a452f944ebc59ca4217fc8b28d90be33c2cca925dc3465d0\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_media_authority\",\n \"path\": \"crates/event/src/media.rs\",\n \"byte_length\": 3521,\n \"sha256\": \"8f670e634452872a525efdad0cb9480288885c62f22a9b9915a67a7e7965651c\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_social_authority\",\n \"path\": \"crates/event/src/social.rs\",\n \"byte_length\": 5483,\n \"sha256\": \"1b89c6d0954822e7f1e778479ed43694e88929bcd5310ee066f8f4ba6505045a\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_wire_facade\",\n \"path\": \"crates/event/src/wire.rs\",\n \"byte_length\": 68,\n \"sha256\": \"cb52f6006f7ecd862707d6b048f9fc407e0cd5ebcd3091b3c54e195ffa5cba64\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_wire_v1_authority\",\n \"path\": \"crates/event/src/wire/v1.rs\",\n \"byte_length\": 22133,\n \"sha256\": \"cc28c8cbd962b32ed2efe43e84c1e0d1ea3bd89636efff2d5553714072fce1a4\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_verification_facade\",\n \"path\": \"crates/event_codec/src/verification.rs\",\n \"byte_length\": 253,\n \"sha256\": \"b49a32df605035c87f295c0a151140d43d2e588c5e11b05183e5fc92993dae0e\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_verification_v1_authority\",\n \"path\": \"crates/event_codec/src/verification/v1.rs\",\n \"byte_length\": 8649,\n \"sha256\": \"1ef3d12f90eb7d35f4cafe36c2cc0bbd33731df278b58c9062fb13934e2a98c8\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_registry_v7_admission_authority\",\n \"path\": \"crates/event_codec/src/admission/registry_v7.rs\",\n \"byte_length\": 5350,\n \"sha256\": \"755e63dd7ad1115c219e5a3ea540bef67d2770fc9f2a5aa6ba97c925c99bdced\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_profile_inbound_facade\",\n \"path\": \"crates/event_codec/src/profile/inbound.rs\",\n \"byte_length\": 86,\n \"sha256\": \"9994cbca9dcc7450ad133b6b927e7c06bee08ef813652452cc1e56a284c1be10\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_profile_registry_v7_authority\",\n \"path\": \"crates/event_codec/src/profile/inbound/registry_v7.rs\",\n \"byte_length\": 10394,\n \"sha256\": \"c37c225ea8153beb098a39c4a56203aa03382af12646f40cd3f8628663700702\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_post_inbound_facade\",\n \"path\": \"crates/event_codec/src/post/inbound.rs\",\n \"byte_length\": 86,\n \"sha256\": \"9994cbca9dcc7450ad133b6b927e7c06bee08ef813652452cc1e56a284c1be10\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_post_registry_v7_authority\",\n \"path\": \"crates/event_codec/src/post/inbound/registry_v7.rs\",\n \"byte_length\": 16016,\n \"sha256\": \"bc0bb839c28f3588f05544c846c987528ea3934c75305fef70af8e027a97cc58\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_reply_inbound_facade\",\n \"path\": \"crates/event_codec/src/reply/inbound.rs\",\n \"byte_length\": 86,\n \"sha256\": \"9994cbca9dcc7450ad133b6b927e7c06bee08ef813652452cc1e56a284c1be10\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_reply_registry_v7_authority\",\n \"path\": \"crates/event_codec/src/reply/inbound/registry_v7.rs\",\n \"byte_length\": 26812,\n \"sha256\": \"a72e9721ed13addca2a63942ac9e43c1daa8f1d1457eef08ec6a3ee5eb8872c5\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_comment_inbound_facade\",\n \"path\": \"crates/event_codec/src/comment/inbound.rs\",\n \"byte_length\": 86,\n \"sha256\": \"9994cbca9dcc7450ad133b6b927e7c06bee08ef813652452cc1e56a284c1be10\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_comment_registry_v7_authority\",\n \"path\": \"crates/event_codec/src/comment/inbound/registry_v7.rs\",\n \"byte_length\": 53783,\n \"sha256\": \"30d1b0155963b25d64685ddd042f423ef7707b111dc56ead15bd468e0433a432\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_deletion_facade\",\n \"path\": \"crates/event_codec/src/deletion/mod.rs\",\n \"byte_length\": 115,\n \"sha256\": \"17d56f82ddb0a86bc97abbcf3e037fe460ea31fff2548f527be4bf004dac3a95\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_deletion_reconciliation_v1_authority\",\n \"path\": \"crates/event_codec/src/deletion/reconciliation_v1.rs\",\n \"byte_length\": 38469,\n \"sha256\": \"3e06d1fa923ca5faabb1e95338c35650b0e20b078ff5c972e35ab845d8b7476c\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_food_inbound_facade\",\n \"path\": \"crates/event_codec/src/food_availability/inbound.rs\",\n \"byte_length\": 86,\n \"sha256\": \"9994cbca9dcc7450ad133b6b927e7c06bee08ef813652452cc1e56a284c1be10\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_food_registry_v7_authority\",\n \"path\": \"crates/event_codec/src/food_availability/inbound/registry_v7.rs\",\n \"byte_length\": 26764,\n \"sha256\": \"a5786cff942b7b0038f741afb5b9a19230ac58cb57a5ba747b32e1b95d414e15\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_codec_job_traits_authority\",\n \"path\": \"crates/event_codec/src/job/traits.rs\",\n \"byte_length\": 5067,\n \"sha256\": \"de0b3f67177a48bd8e3c62534850103d09b7be099e80e88a9583363db705fcbb\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_store_dependency_authority\",\n \"path\": \"crates/event_store/Cargo.toml\",\n \"byte_length\": 1567,\n \"sha256\": \"46e03d3c758e1116638021a0499dfa588b4266498e0d50cfa758f9bef9bcfeb3\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_store_error_and_limits\",\n \"path\": \"crates/event_store/src/error.rs\",\n \"byte_length\": 19517,\n \"sha256\": \"4bf24ee1aa6117597ab467b1379a05549b79024213dc7622a2d276bc26fffab4\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"generated_descriptor_registration\",\n \"path\": \"crates/event_store/src/generated.rs\",\n \"byte_length\": 144,\n \"sha256\": \"6b0a8d6f249bd4fc3f878d37cb5e418680f0f1be2d9eec2518dedf03efc47121\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"public_surface\",\n \"path\": \"crates/event_store/src/lib.rs\",\n \"byte_length\": 3844,\n \"sha256\": \"3cd9653bcb752fb3c4442d4904b98a0a6208011a9a238125b7b7073d7f4e312b\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"migration_registry\",\n \"path\": \"crates/event_store/src/migrations.rs\",\n \"byte_length\": 73585,\n \"sha256\": \"a47477d04759ec6e71d14d3d05459864eae78fce0e3c2481a1b03147f04637f7\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"predecessor_model_public_surface\",\n \"path\": \"crates/event_store/src/model.rs\",\n \"byte_length\": 33596,\n \"sha256\": \"98b1742ffb517f66f8e9edefa61d1c3cf3e22be5985202c6c340310a98c72c8e\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_store_reconciliation_v1_model\",\n \"path\": \"crates/event_store/src/model/reconciliation_v1.rs\",\n \"byte_length\": 11138,\n \"sha256\": \"8a26bc373035878ef9b41767ceea7b681896e17d88bedce118de1d622125e1d6\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"event_store_reconciliation_v1_ingest_model\",\n \"path\": \"crates/event_store/src/model/ingest_reconciliation_v1.rs\",\n \"byte_length\": 1626,\n \"sha256\": \"47bf13b3fc0f8a913a660f7d655413de0f6b90568bc4acc510aa6bd741bab47b\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"addressable_transition_feed_model\",\n \"path\": \"crates/event_store/src/model/addressable_transition_feed_v1.rs\",\n \"byte_length\": 22279,\n \"sha256\": \"f8ea454a0e998a3d433bba52d1ff9759a04fcb91db286cf2a2b10ef7d0057694\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"food_projection_model\",\n \"path\": \"crates/event_store/src/model/food_availability_projection_v1.rs\",\n \"byte_length\": 17437,\n \"sha256\": \"6fdfc8c5eb3dd9c451fd47b2394af123b50f7fe6d74113f8777221a8fa31ba30\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"source_generation_rebuild_authority\",\n \"path\": \"crates/event_store/src/nip09/reconciliation_v1.rs\",\n \"byte_length\": 185215,\n \"sha256\": \"575c9fb25b1f728144f5fe649007be705092d9b137f51fd8d771439871bfa09a\",\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\": 17983,\n \"sha256\": \"a1d919aa545d7c506d7ae8740445025732c2cda302790d243a4ff3d6cee898f6\",\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\": 395012,\n \"sha256\": \"5538b600fa5e457e10f23fe4e3a3c55496662098abaef2692108dc69c29aa3e6\",\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\": 40260,\n \"sha256\": \"46ea9c9786099c85150e4979c9dac6f84c1b85b8f30ec44aae6d25f9eb9bebc5\",\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\": 15786,\n \"sha256\": \"bf03f9fc45561366cc489daa400b39d65e68cc70aea2ef4a9cd7724224ca9514\",\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\": 48959,\n \"sha256\": \"a01ed95983481a8f0efdcc985635efba122fdbfafc226b7e0b30325af6b4de80\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"predecessor_post_core_v1_extension\",\n \"path\": \"crates/event_store/src/store/post_core_extensions_v1.rs\",\n \"byte_length\": 6923,\n \"sha256\": \"3820dad764a0575c20f3dc80a2f850651a1e41ab767cf46305377bf800558699\",\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\": 16897,\n \"sha256\": \"3fb583b06dbd2e4fde96346da21e6d4516e79c8a4a3889299a7dd736c882c5df\",\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\": 30153,\n \"sha256\": \"de7c327d940d561f0818fade4dc79cabb0b5141e30e02574c702b6f109aee392\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"predecessor_protocol_storage\",\n \"path\": \"crates/event_store/src/store/protocol_storage_v1.rs\",\n \"byte_length\": 10929,\n \"sha256\": \"20de4436945bac0d8cbeca0ae6cd95232a92da8cd6be6ae6beacba17fe50d658\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"source_maintenance_runtime\",\n \"path\": \"crates/event_store/src/source_maintenance_v1.rs\",\n \"byte_length\": 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\": 34061,\n \"sha256\": \"7cdbdda875a876482a061bcd8886d9ba56c10fab0fa76a07d73d0f368324b545\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"artifact_transaction_authority\",\n \"path\": \"tools/xtask/src/contract/artifact_bundle.rs\",\n \"byte_length\": 38279,\n \"sha256\": \"f326ea57b56d40135f95b6b1e15961f66eed363337180a6d12a5ea903e1a9a29\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"predecessor_successor_governance\",\n \"path\": \"tools/xtask/src/contract/food_availability_projection.rs\",\n \"byte_length\": 198638,\n \"sha256\": \"66a703e5284d0ce91a95d519eee93bd9763d4ab24b7fe8ef39672064118ed391\",\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\": 836177,\n \"sha256\": \"0ac3b005475394432534fcb657fee34efdb8e8360231c44f94649d46e88fce94\",\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\": 193992,\n \"sha256\": \"6c550f688224ffd5404b4f5b44780c48e95b8cf2adee730f3a178024625b7c80\",\n \"hash_algorithm\": \"sha256_bytes_v1\"\n },\n {\n \"role\": \"contract_command_authority\",\n \"path\": \"tools/xtask/src/contract.rs\",\n \"byte_length\": 506277,\n \"sha256\": \"3a06ed79b5b342dce5b6582fc5c58311378a2dba97e5a8c74361f0186886023d\",\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 = 32509;
pub(crate) const SOURCE_MAINTENANCE_MANIFEST_SHA256: &str =
- "f4c42eb9d41cfa5378c0111708a6d2ca0e4cbf8c7cee64c85638d75e5887cb97";
+ "ef36b3010757fed79fc799db93308e32303d808788ddae41f8169c4bb64a6b28";
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/trade/src/operational_listing/draft.rs b/crates/trade/src/operational_listing/draft.rs
@@ -12,7 +12,7 @@ use std::vec::Vec;
use radroots_authority::RadrootsActorContext;
use radroots_event::{
- contract::RadrootsActorRole,
+ contract::AuthorRole,
ids::{RadrootsClassifiedListingAddress, RadrootsIdParseError, RadrootsInventoryBinId},
kinds::KIND_CLASSIFIED_LISTING,
operational_listing::RadrootsOperationalListing,
@@ -93,7 +93,7 @@ pub enum RadrootsOperationalListingEditError {
InvalidClassifiedListingAddress(RadrootsIdParseError),
InvalidModel(RadrootsOperationalListingValidationError),
ActorRoleUnsatisfied {
- required_role: RadrootsActorRole,
+ required_role: AuthorRole,
},
FarmPubkeyMismatch {
expected_pubkey: PublicKey,
@@ -174,9 +174,9 @@ pub fn canonicalize_operational_listing_edit(
actor: &RadrootsActorContext,
mut document: RadrootsOperationalListingEditDocumentV1,
) -> Result<RadrootsOperationalListingCanonicalEdit, RadrootsOperationalListingEditError> {
- if !actor.satisfies(RadrootsActorRole::Seller) {
+ if !actor.satisfies(AuthorRole::Seller) {
return Err(RadrootsOperationalListingEditError::ActorRoleUnsatisfied {
- required_role: RadrootsActorRole::Seller,
+ required_role: AuthorRole::Seller,
});
}
@@ -194,7 +194,7 @@ mod tests {
use radroots_authority::RadrootsActorContext;
use radroots_core::{Currency, Decimal, Money, Quantity, QuantityPrice, Unit};
use radroots_event::{
- contract::RadrootsActorRole,
+ contract::AuthorRole,
farm::RadrootsFarmRef,
ids::{RadrootsClassifiedListingAddress, RadrootsDTag, RadrootsInventoryBinId},
kinds::KIND_CLASSIFIED_LISTING,
@@ -279,11 +279,11 @@ mod tests {
}
fn seller_actor() -> RadrootsActorContext {
- RadrootsActorContext::explicit_pubkey(SELLER, [RadrootsActorRole::Seller]).expect("actor")
+ RadrootsActorContext::explicit_pubkey(SELLER, [AuthorRole::Seller]).expect("actor")
}
fn buyer_actor() -> RadrootsActorContext {
- RadrootsActorContext::explicit_pubkey(SELLER, [RadrootsActorRole::Buyer]).expect("actor")
+ RadrootsActorContext::explicit_pubkey(SELLER, [AuthorRole::Buyer]).expect("actor")
}
#[test]
@@ -367,7 +367,7 @@ mod tests {
assert_eq!(
error,
RadrootsOperationalListingEditError::ActorRoleUnsatisfied {
- required_role: RadrootsActorRole::Seller
+ required_role: AuthorRole::Seller
}
);
}