diff --git a/crates/gateway/src/v1/iterate.rs b/crates/gateway/src/v1/iterate.rs index 38e6538..06872d7 100644 --- a/crates/gateway/src/v1/iterate.rs +++ b/crates/gateway/src/v1/iterate.rs @@ -87,6 +87,14 @@ pub struct IterateResponse { pub validation: serde_json::Value, pub iterations: u32, pub history: Vec, + /// Echoes the resolved trace id (caller-forwarded header, body + /// field, langfuse-middleware mint, or local fallback). Operators + /// pivot from this id straight into Langfuse + the + /// coordinator_sessions.jsonl join key. Cross-runtime parity with + /// Go's `validator.IterateResponse` (commit 6847bbc in + /// golangLAKEHOUSE). + #[serde(skip_serializing_if = "Option::is_none")] + pub trace_id: Option, } #[derive(Serialize)] @@ -94,6 +102,8 @@ pub struct IterateFailure { pub error: String, pub iterations: u32, pub history: Vec, + #[serde(skip_serializing_if = "Option::is_none")] + pub trace_id: Option, } pub async fn iterate( @@ -217,6 +227,7 @@ pub async fn iterate( validation: report, iterations: iteration + 1, history, + trace_id: Some(trace_id.clone()), })).into_response(); } Err(err) => { @@ -259,6 +270,7 @@ pub async fn iterate( error: format!("max iterations reached ({max_iter}) without passing validation"), iterations: max_iter, history, + trace_id: Some(trace_id.clone()), })).into_response() } diff --git a/lakehouse.toml b/lakehouse.toml index d0eea54..1c1582f 100644 --- a/lakehouse.toml +++ b/lakehouse.toml @@ -5,9 +5,13 @@ host = "0.0.0.0" port = 3100 # Coordinator session JSONL — one row per /v1/iterate session for # offline DuckDB analysis. Cross-runtime parity with the Go-side -# [validatord].session_log_path. Empty = disabled. Production: -# session_log_path = "/var/lib/lakehouse/gateway/sessions.jsonl" -session_log_path = "" +# [validatord].session_log_path. Set to the SAME path Go validatord +# writes to so DuckDB queries see one unified longitudinal stream +# across both runtimes (rows are tagged daemon="gateway" vs +# daemon="validatord" so producers stay distinguishable). Append-write +# is atomic at the row sizes both runtimes produce — both daemons +# co-writing is safe. +session_log_path = "/tmp/lakehouse-validator/sessions.jsonl" [storage] root = "./data"