feat(notification-outbox): operator Retry/Discard emit audit rows with operator identity

Additive RequestedBy on Retry/DiscardNotificationRequest, plumbed from the Central
UI. RetryAsync emits a NotifyDeliver Submitted row (records who un-parked); Discard
stamps the operator on the Terminal row. Best-effort — audit failure never aborts
the action.
This commit is contained in:
Joseph Doherty
2026-07-09 08:12:47 -04:00
parent f2f196aa6d
commit 50bb1ef8ab
5 changed files with 226 additions and 14 deletions
@@ -51,9 +51,17 @@ public record NotificationOutboxQueryResponse(
/// <summary>
/// Outbox UI -> Central: request to immediately retry delivery of a notification.
/// </summary>
/// <param name="CorrelationId">Request/response correlation id.</param>
/// <param name="NotificationId">The notification to re-queue.</param>
/// <param name="RequestedBy">
/// The authenticated operator who initiated the retry, stamped as the <c>Actor</c> on
/// the emitted audit row so an un-park is attributable (Task 13). Additive; null where
/// no identity is available (legacy senders compile unchanged).
/// </param>
public record RetryNotificationRequest(
string CorrelationId,
string NotificationId);
string NotificationId,
string? RequestedBy = null);
/// <summary>
/// Central -> Outbox UI: result of a <see cref="RetryNotificationRequest"/>.
@@ -66,9 +74,16 @@ public record RetryNotificationResponse(
/// <summary>
/// Outbox UI -> Central: request to discard (cancel) a pending or stuck notification.
/// </summary>
/// <param name="CorrelationId">Request/response correlation id.</param>
/// <param name="NotificationId">The notification to discard.</param>
/// <param name="RequestedBy">
/// The authenticated operator who initiated the discard, stamped as the <c>Actor</c> on
/// the emitted terminal audit row (Task 13). Additive; null where no identity is available.
/// </param>
public record DiscardNotificationRequest(
string CorrelationId,
string NotificationId);
string NotificationId,
string? RequestedBy = null);
/// <summary>
/// Central -> Outbox UI: result of a <see cref="DiscardNotificationRequest"/>.