diff --git a/crates/buzz-core/src/ifc.rs b/crates/buzz-core/src/ifc.rs
index bfd3408b93..b3000c1087 100644
--- a/crates/buzz-core/src/ifc.rs
+++ b/crates/buzz-core/src/ifc.rs
@@ -47,6 +47,15 @@ pub struct IfcPolicyRef {
pub generation: i64,
}
+/// Signed optimistic-concurrency precondition for a fenced owner-memory slot.
+#[derive(Clone, Copy, Debug, Eq, PartialEq)]
+pub enum IfcMemoryExpectedHead {
+ /// The coordinate must not have a live head.
+ Absent,
+ /// The coordinate's live head must be this exact event ID.
+ Event([u8; 32]),
+}
+
/// Closed destination admitted by a version-one publication fence.
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum IfcPublicationTarget {
@@ -58,6 +67,8 @@ pub enum IfcPublicationTarget {
owner_pubkey: String,
/// Opaque HMAC address used by the existing memory protocol.
d_tag: String,
+ /// Exact head or absence frozen into the signed publication.
+ expected_head: IfcMemoryExpectedHead,
},
/// Existing owner-encrypted ephemeral telemetry route.
OwnerTelemetry {
@@ -211,6 +222,7 @@ pub fn parse_publication_fence(event: &Event) -> Result