diff --git a/crates/manager-core/src/trigger_repo.rs b/crates/manager-core/src/trigger_repo.rs index e3d0e90..4ce15b5 100644 --- a/crates/manager-core/src/trigger_repo.rs +++ b/crates/manager-core/src/trigger_repo.rs @@ -1271,8 +1271,12 @@ impl TriggerRepo for PostgresTriggerRepo { } async fn get(&self, id: TriggerId) -> Result, TriggerRepoError> { + // §11 tail: `get` can fetch ANY trigger by id, including a group-owned + // TEMPLATE, so it must SELECT `group_id` (unlike `list_for_app`, whose + // rows are all app-owned) — else a template would hydrate with both + // owners None, breaking the exactly-one invariant in memory. let parent: Option = sqlx::query_as( - "SELECT id, app_id, script_id, name, kind, enabled, dispatch_mode, \ + "SELECT id, app_id, group_id, script_id, name, kind, enabled, dispatch_mode, \ retry_max_attempts, retry_backoff, retry_base_ms, \ registered_by_principal, created_at, updated_at \ FROM triggers WHERE id = $1",