From 7777a0fd7eb6b853bc393dac8c9d50c0d4259606 Mon Sep 17 00:00:00 2001 From: DanConwayDev Date: Wed, 17 Jun 2026 10:47:47 +0000 Subject: [PATCH] test(purgatory): stabilize replacement announcement ordering --- grasp-audit/src/specs/grasp01/purgatory.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/grasp-audit/src/specs/grasp01/purgatory.rs b/grasp-audit/src/specs/grasp01/purgatory.rs index cb0c608..d5302a7 100644 --- a/grasp-audit/src/specs/grasp01/purgatory.rs +++ b/grasp-audit/src/specs/grasp01/purgatory.rs @@ -808,6 +808,11 @@ impl PurgatoryTests { .await .map_err(|e| format!("Failed to get purgatory test repo: {}", e))?; + let existing_announcement = ctx + .get_fixture(FixtureKind::PurgatoryValidRepoSent) + .await + .map_err(|e| format!("Failed to get purgatory announcement fixture: {}", e))?; + let repo_id = existing_state .tags .iter() @@ -816,6 +821,10 @@ impl PurgatoryTests { .ok_or("Missing d tag in state event")? .to_string(); + // Ensure replacement announcement is strictly newer than the existing + // owner announcement for this (pubkey, d) coordinate. + let replacement_created_at = Timestamp::from(existing_announcement.created_at.as_secs() + 1); + // Stage 2: generate a fresh keypair for a new maintainer let new_maintainer_keys = Keys::generate(); let new_maintainer_hex = new_maintainer_keys.public_key().to_hex(); @@ -850,6 +859,7 @@ impl PurgatoryTests { "maintainers", vec![new_maintainer_hex.clone()], )) + .custom_time(replacement_created_at) .build(client.keys()) .map_err(|e| format!("Failed to build replacement announcement: {}", e))?;