Session infrastructure: OpenRouter + tree-split reducer + observer→LLM Team + scrum_applier #11

Merged
profit merged 118 commits from scrum/auto-apply-19814 into main 2026-04-27 15:55:24 +00:00
Showing only changes of commit c47523e5bd - Show all commits

View File

@ -69,6 +69,11 @@ struct QueryResponse {
columns: Vec<ColumnInfo>, columns: Vec<ColumnInfo>,
rows: serde_json::Value, rows: serde_json::Value,
row_count: usize, row_count: usize,
// Elapsed wall time from handler entry to response. Required for
// audit-log parity — gateway's audit row previously stored null here.
// Scrum iter 9 finding, populated from std::time::Instant captured
// at the top of execute_query / paged_query.
latency_ms: u64,
} }
#[derive(Serialize)] #[derive(Serialize)]
@ -115,6 +120,7 @@ async fn execute_query(
State(state): State<QueryState>, State(state): State<QueryState>,
Json(req): Json<QueryRequest>, Json(req): Json<QueryRequest>,
) -> impl IntoResponse { ) -> impl IntoResponse {
let started = std::time::Instant::now();
tracing::info!("executing query: {}", req.sql); tracing::info!("executing query: {}", req.sql);
if let Some(reason) = sql_policy_check(&state.truth, &req.sql) { if let Some(reason) = sql_policy_check(&state.truth, &req.sql) {
@ -129,6 +135,7 @@ async fn execute_query(
columns: vec![], columns: vec![],
rows: serde_json::Value::Array(vec![]), rows: serde_json::Value::Array(vec![]),
row_count: 0, row_count: 0,
latency_ms: started.elapsed().as_millis() as u64,
})); }));
} }
@ -147,6 +154,7 @@ async fn execute_query(
columns, columns,
rows, rows,
row_count, row_count,
latency_ms: started.elapsed().as_millis() as u64,
})) }))
} }
Err(e) => Err((StatusCode::BAD_REQUEST, e)), Err(e) => Err((StatusCode::BAD_REQUEST, e)),