commit 40acc9c4d65719b16a98c9eeb8ae896b30559db8
parent c3b2d8ec0f20c7acc12a6bfc3920aa16b80879fb
Author: triesap <tyson@radroots.org>
Date: Tue, 23 Jun 2026 20:59:20 +0000
outbox: expose claimed attempt count
- include attempt_count on claimed outbox events
- return the incremented count from ready claim paths
- assert claim and reclaim attempt counts in store tests
- support attempt-scoped publish proxy idempotency keys
Diffstat:
2 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/crates/outbox/src/model.rs b/crates/outbox/src/model.rs
@@ -273,6 +273,7 @@ pub struct RadrootsOutboxClaimedEvent {
pub outbox_event_id: i64,
pub operation_id: i64,
pub expected_event_id: String,
+ pub attempt_count: i64,
pub state: RadrootsOutboxEventState,
pub claim_token: String,
pub draft: RadrootsFrozenEventDraft,
diff --git a/crates/outbox/src/store.rs b/crates/outbox/src/store.rs
@@ -398,6 +398,7 @@ impl RadrootsOutbox {
outbox_event_id: record.outbox_event_id,
operation_id: record.operation_id,
expected_event_id: record.event_id,
+ attempt_count: record.attempt_count,
state: claimed_state,
claim_token: claim_token.as_ref().to_owned(),
draft: record.draft,
@@ -449,6 +450,7 @@ impl RadrootsOutbox {
outbox_event_id: record.outbox_event_id,
operation_id: record.operation_id,
expected_event_id: record.event_id,
+ attempt_count: record.attempt_count,
state: RadrootsOutboxEventState::Publishing,
claim_token: claim_token.as_ref().to_owned(),
draft: record.draft,
@@ -2046,6 +2048,7 @@ mod tests {
.expect("claim")
.expect("claimed event");
assert_eq!(claimed.state, RadrootsOutboxEventState::Signing);
+ assert_eq!(claimed.attempt_count, 1);
assert_eq!(
claimed.target_relays,
vec![RELAY_PRIMARY_WSS.to_owned(), RELAY_SECONDARY_WSS.to_owned()]
@@ -2090,6 +2093,7 @@ mod tests {
.expect("claim")
.expect("reclaimed");
assert_eq!(reclaimed.state, RadrootsOutboxEventState::Signing);
+ assert_eq!(reclaimed.attempt_count, 2);
}
#[tokio::test]