From d26fc44fe6814796e80abbe3b1a1a75d959f03e9 Mon Sep 17 00:00:00 2001 From: zyycn Date: Sun, 2 Aug 2026 00:18:16 +0800 Subject: [PATCH] feat(provider): version provider observation metadata with schemaVersion OpenAI and xAI now stamp provider_observation_json with schemaVersion: 1 so historical records can be decoded per version (missing version = v0). Per project-redundancy-boundary-audit DB-03. Co-Authored-By: Claude Fable 5 --- backend/crates/providers/openai/src/provider.rs | 2 ++ backend/crates/providers/xai/src/provider.rs | 2 ++ backend/crates/providers/xai/tests/provider/contract.rs | 1 + 3 files changed, 5 insertions(+) diff --git a/backend/crates/providers/openai/src/provider.rs b/backend/crates/providers/openai/src/provider.rs index 3cb482492..b2f9e8aef 100644 --- a/backend/crates/providers/openai/src/provider.rs +++ b/backend/crates/providers/openai/src/provider.rs @@ -1127,6 +1127,8 @@ impl OpenAiResponseObservationState { fn provider_metadata(&self) -> Option { let mut metadata = Map::new(); + // 观测对象版本信封:读取端按 schemaVersion 解码,缺失视为 v0(见 DB-03)。 + metadata.insert("schemaVersion".to_owned(), json!(1)); let effective_model = self .response_metadata .effective_model diff --git a/backend/crates/providers/xai/src/provider.rs b/backend/crates/providers/xai/src/provider.rs index 2b69369f8..86768438d 100644 --- a/backend/crates/providers/xai/src/provider.rs +++ b/backend/crates/providers/xai/src/provider.rs @@ -1543,6 +1543,8 @@ fn xai_transport_metadata( if metadata.is_empty() { return None; } + // 观测对象版本信封:读取端按 schemaVersion 解码,缺失视为 v0(见 DB-03)。 + metadata.insert("schemaVersion".to_owned(), Value::from(1)); ProviderResponseMetadata::new(serde_json::to_string(&Value::Object(metadata)).ok()?) } diff --git a/backend/crates/providers/xai/tests/provider/contract.rs b/backend/crates/providers/xai/tests/provider/contract.rs index 03ee2c366..4e3b3dc3e 100644 --- a/backend/crates/providers/xai/tests/provider/contract.rs +++ b/backend/crates/providers/xai/tests/provider/contract.rs @@ -1012,6 +1012,7 @@ async fn execute_returns_cold_stream_and_records_selected_account() { assert_eq!( metadata, json!({ + "schemaVersion": 1, "clientCache": "miss", "dnsSource": "system", "dnsMs": 7,