From 9485ced68a81f8880f3b173e62b62b55f0dd80aa Mon Sep 17 00:00:00 2001
From: cai <cai@nbcai.cc>
Date: Wed, 12 Aug 2026 10:29:38 +0800
Subject: [PATCH] fix(helper): observe fixture attributes through probe ttl

---
 src/asr_realtime.rs |   24 ++++++++++++++++++++++--
 1 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/src/asr_realtime.rs b/src/asr_realtime.rs
index a7ff7f7..ad99ff2 100644
--- a/src/asr_realtime.rs
+++ b/src/asr_realtime.rs
@@ -70,6 +70,18 @@
         }
     }
 
+    pub(crate) fn rejected_origin_status(
+        reason: &str,
+        attributes: &HashMap<String, String>,
+    ) -> &'static str {
+        let status = Self::origin_status(attributes);
+        if status == "sequence_absent" {
+            status
+        } else {
+            Self::rejection_status(reason)
+        }
+    }
+
     pub(crate) fn from_participant(
         attributes: &HashMap<String, String>,
     ) -> Result<Option<Self>, &'static str> {
@@ -586,17 +598,25 @@
             AudioIngressMetadata::rejection_status("invalid_source_or_sequence")
         );
         assert_eq!(
-            "sequence_replayed_or_regressed",
+            "origin_unprovable",
             AudioIngressMetadata::rejection_status("sequence_replayed")
         );
         assert_eq!(
-            "wrong_participant_or_track",
+            "origin_unprovable",
             AudioIngressMetadata::rejection_status("wrong_participant")
         );
         assert_eq!(
             "origin_unprovable",
             AudioIngressMetadata::rejection_status("unknown")
         );
+        let missing_sequence = HashMap::from([(
+            "inputSourceCategory".to_string(),
+            "controlled_fixture".to_string(),
+        )]);
+        assert_eq!(
+            "sequence_absent",
+            AudioIngressMetadata::rejected_origin_status("incomplete_metadata", &missing_sequence)
+        );
         assert_eq!(8, AudioIngressMetadata::ORIGIN_STATUSES.len());
     }
 

--
Gitblit v1.9.3