From d16e15c8851c87aa7cd5f186253f3994223cf6d6 Mon Sep 17 00:00:00 2001 From: Celes Renata Date: Sun, 12 Apr 2026 03:45:51 -0700 Subject: [PATCH] phase 17: quote reserved word 'window' in all SQL queries across recommendation worker and query API --- .kiro/specs/stonks-oracle/tasks.md | 4 ++-- services/api/app.py | 10 +++++----- services/recommendation/worker.py | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.kiro/specs/stonks-oracle/tasks.md b/.kiro/specs/stonks-oracle/tasks.md index d2148ff..60226d8 100644 --- a/.kiro/specs/stonks-oracle/tasks.md +++ b/.kiro/specs/stonks-oracle/tasks.md @@ -208,7 +208,7 @@ - Debug any Ollama connection or schema validation issues - _Requirements: 5.1, 5.2, 6.1, 6.2, 6.3_ -- [-] 17.5 Validate aggregation produces trend summaries +- [x] 17.5 Validate aggregation produces trend summaries - Check aggregation worker logs for trend window generation - Verify `trend_windows` table has entries with direction, strength, confidence - Verify `trend_evidence` table links trends to contributing documents @@ -216,7 +216,7 @@ - Check the dashboard Trends page shows trend cards with real data - _Requirements: 7.1, 7.2, 7.3_ -- [ ] 17.6 Validate recommendation engine produces paper-trade recommendations +- [-] 17.6 Validate recommendation engine produces paper-trade recommendations - Check recommendation worker logs for recommendation generation - Verify `recommendations` table has entries with action, confidence, thesis - Verify `recommendation_evidence` links recommendations to documents diff --git a/services/api/app.py b/services/api/app.py index 9a20c08..888e1d2 100644 --- a/services/api/app.py +++ b/services/api/app.py @@ -351,13 +351,13 @@ async def list_trends( params.append(ticker.upper()) idx += 1 if window: - conditions.append(f"window = ${idx}") + conditions.append(f"\"window\" = ${idx}") params.append(window) idx += 1 where = " AND ".join(conditions) rows = await pool.fetch( - f"""SELECT id, entity_type, entity_id, window, trend_direction, + f"""SELECT id, entity_type, entity_id, "window", trend_direction, trend_strength, confidence, top_supporting_evidence, top_opposing_evidence, dominant_catalysts, material_risks, contradiction_score, market_context, generated_at @@ -383,7 +383,7 @@ async def list_trends( async def get_trend(trend_id: str): """Get a single trend summary by ID.""" row = await pool.fetchrow( - """SELECT id, entity_type, entity_id, window, trend_direction, + """SELECT id, entity_type, entity_id, "window", trend_direction, trend_strength, confidence, top_supporting_evidence, top_opposing_evidence, dominant_catalysts, material_risks, contradiction_score, market_context, generated_at, created_at @@ -637,7 +637,7 @@ async def get_recommendation_evidence_drilldown(recommendation_id: str): generated_at = rec_row["generated_at"] if ticker and generated_at: trend_row = await pool.fetchrow( - """SELECT id, entity_type, entity_id, window, trend_direction, + """SELECT id, entity_type, entity_id, "window", trend_direction, trend_strength, confidence, top_supporting_evidence, top_opposing_evidence, dominant_catalysts, material_risks, contradiction_score, market_context, generated_at @@ -691,7 +691,7 @@ async def get_trend_evidence_drilldown(trend_id: str): Requirements: 10.4, 6.5 """ trend_row = await pool.fetchrow( - """SELECT id, entity_type, entity_id, window, trend_direction, + """SELECT id, entity_type, entity_id, "window", trend_direction, trend_strength, confidence, top_supporting_evidence, top_opposing_evidence, dominant_catalysts, material_risks, contradiction_score, market_context, generated_at diff --git a/services/recommendation/worker.py b/services/recommendation/worker.py index 5ec11f9..dfca497 100644 --- a/services/recommendation/worker.py +++ b/services/recommendation/worker.py @@ -74,7 +74,7 @@ WHERE d.id = ANY( || COALESCE(tw.top_opposing_evidence, '[]'::jsonb) )::uuid FROM trend_windows tw - WHERE tw.entity_id = $1 AND tw.window = $2 + WHERE tw.entity_id = $1 AND tw."window" = $2 ORDER BY tw.generated_at DESC LIMIT 1 ) @@ -117,12 +117,12 @@ async def fetch_data_quality_context( _LATEST_TREND_QUERY = """ SELECT - entity_type, entity_id, window, trend_direction, trend_strength, + entity_type, entity_id, "window", trend_direction, trend_strength, confidence, top_supporting_evidence, top_opposing_evidence, dominant_catalysts, material_risks, contradiction_score, disagreement_details, market_context, generated_at FROM trend_windows -WHERE entity_id = $1 AND window = $2 +WHERE entity_id = $1 AND "window" = $2 ORDER BY generated_at DESC LIMIT 1 """