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))?;