lib

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

commit 448f4106f2b8b672ae05a8cc53c8b15b47746774
parent 8d857be8772c81413cf8e565e0cc5327d08a3922
Author: triesap <tyson@radroots.org>
Date:   Tue, 28 Jul 2026 17:35:39 +0000

event_store: derive ledger DDL identity

- share one ledger schema literal
- derive qualified creation SQL
- remove runtime identity drift
- retain exact catalog bytes

Diffstat:
Mcontracts/event_store_production_sources.toml | 2+-
Mcrates/event_store/src/migrations.rs | 27+++++++++------------------
2 files changed, 10 insertions(+), 19 deletions(-)

diff --git a/contracts/event_store_production_sources.toml b/contracts/event_store_production_sources.toml @@ -11,7 +11,7 @@ sha256 = "7d588cd181f42b6c8731d84f71e5a778cd6605add07dc9b7d0b8144b51a44a9f" [[sources]] path = "crates/event_store/src/migrations.rs" -sha256 = "f698d03ee78de42bfef98c3689c7db3fb3796ad95f2055fe7bf80f290733dfa8" +sha256 = "097bca46604d381fdb047b059a51c759988038e0b98e60e7b75828fd4d4f4276" [[sources]] path = "crates/event_store/src/model.rs" diff --git a/crates/event_store/src/migrations.rs b/crates/event_store/src/migrations.rs @@ -11,21 +11,20 @@ pub(crate) const EVENT_STORE_RESERVED_PREFIX: &str = "radroots_event_store_"; pub const RADROOTS_EVENT_STORE_SCHEMA_VERSION_MIN: u32 = 1; pub const RADROOTS_EVENT_STORE_SCHEMA_VERSION_CURRENT: u32 = 4; -pub(crate) const EVENT_STORE_LEDGER_DDL: &str = "CREATE TABLE radroots_event_store_schema_migrations ( +macro_rules! event_store_ledger_ddl { + ($schema:literal) => { + concat!("CREATE TABLE ", $schema, "radroots_event_store_schema_migrations ( version INTEGER PRIMARY KEY NOT NULL CHECK (version > 0), name TEXT NOT NULL UNIQUE CHECK (length(name) > 0), up_sha256 TEXT NOT NULL CHECK (length(up_sha256) = 64 AND up_sha256 NOT GLOB '*[^0-9a-f]*'), down_sha256 TEXT NOT NULL CHECK (length(down_sha256) = 64 AND down_sha256 NOT GLOB '*[^0-9a-f]*'), schema_sha256 TEXT NOT NULL CHECK (length(schema_sha256) = 64 AND schema_sha256 NOT GLOB '*[^0-9a-f]*') -) STRICT, WITHOUT ROWID"; -pub(crate) const EVENT_STORE_LEDGER_CREATE_DDL: &str = - "CREATE TABLE main.radroots_event_store_schema_migrations ( - version INTEGER PRIMARY KEY NOT NULL CHECK (version > 0), - name TEXT NOT NULL UNIQUE CHECK (length(name) > 0), - up_sha256 TEXT NOT NULL CHECK (length(up_sha256) = 64 AND up_sha256 NOT GLOB '*[^0-9a-f]*'), - down_sha256 TEXT NOT NULL CHECK (length(down_sha256) = 64 AND down_sha256 NOT GLOB '*[^0-9a-f]*'), - schema_sha256 TEXT NOT NULL CHECK (length(schema_sha256) = 64 AND schema_sha256 NOT GLOB '*[^0-9a-f]*') -) STRICT, WITHOUT ROWID"; +) STRICT, WITHOUT ROWID") + }; +} + +pub(crate) const EVENT_STORE_LEDGER_DDL: &str = event_store_ledger_ddl!(""); +pub(crate) const EVENT_STORE_LEDGER_CREATE_DDL: &str = event_store_ledger_ddl!("main."); pub(crate) const EVENT_STORE_BASELINE_OBJECT_NAMES: &[&str] = &[ "event_envelope_contract_idx", @@ -456,14 +455,6 @@ pub(crate) fn validate_migration_registry( minimum: u32, current: u32, ) -> Result<(), RadrootsEventStoreError> { - if EVENT_STORE_LEDGER_CREATE_DDL.strip_prefix("CREATE TABLE main.") - != EVENT_STORE_LEDGER_DDL.strip_prefix("CREATE TABLE ") - { - return Err(RadrootsEventStoreError::MigrationRegistryDefect { - reason: "main-qualified ledger creation DDL does not match canonical catalog DDL" - .to_owned(), - }); - } if registry .iter() .any(|migration| migration.hook == EventStoreMigrationHook::Nip09ReconciliationV1)