diff --git a/.gitleaks.toml b/.gitleaks.toml
index 2de23039..44077ed3 100644
--- a/.gitleaks.toml
+++ b/.gitleaks.toml
@@ -28,6 +28,11 @@ regex = '''signal-cli.*password["\s:=]+[^\s"]{8,}'''
tags = ["password", "signal"]
[allowlist]
+regexes = [
+ # WHY: canonical exousia HS256 unit-test secret (fixture, no live credential); shared verbatim across
+ # exousia lib.rs/middleware.rs/service.rs test modules. Value-scoped so it needs no per-file maintenance.
+ '''test-secret-that-is-long-enough-for-hs256''',
+]
paths = [
'''vendor/''',
'''\.gitleaks\.toml''',
diff --git a/crates/apotheke/src/repo/music.rs b/crates/apotheke/src/repo/music.rs
index 5445665c..f7996111 100644
--- a/crates/apotheke/src/repo/music.rs
+++ b/crates/apotheke/src/repo/music.rs
@@ -1,7 +1,7 @@
use snafu::ResultExt;
use sqlx::SqlitePool;
-use crate::error::{DbError, QuerySnafu};
+use crate::error::{DbError, QuerySnafu, TransactionSnafu};
// WHY: wire DTO — SQLx row from the music_release_groups table.
#[derive(Debug, Clone, sqlx::FromRow)]
@@ -90,17 +90,22 @@ pub async fn insert_release_group(
Ok(())
}
-pub async fn get_release_group(
- pool: &SqlitePool,
+// NOTE: executor-generic so hierarchy reads can run inside a transaction
+// snapshot (`&mut *tx`) or directly on a pool (`&pool`).
+pub async fn get_release_group<'e, E>(
+ executor: E,
id: &[u8],
-) -> Result