ES /docs

ActiveRecord::StatementInvalid: Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds t

Fix Plan: Mysql2::Error SQL syntax error (Compass Text-to-SQL {facility_id}} placeholder)

Changes#

없음 (No automated code change).

RCA 판정은 noise 이며 tesla 서버 코드 결함이 아니다. cupixworks-mysql2 는 tesla 의 mysql2 APM adapter span 이고, 실제 발생 경로는 Compass Text-to-SQL 기능(POST /api/v1/mcp/search)에서 Gemini LLM(gemini-3-flash-preview, temp 0.0)이 값 대신 템플릿 placeholder {facility_id}} 를 SQL 에 그대로 남기는 경우다. 이 SQL 은 실행 전 QueryExecutor.executeexplain_validate! (app/services/cupix/compass/db_search/query_executor.rb:59, EXPLAIN #{sql}) 에서 MySQL 파싱 실패 → rescue ActiveRecord::StatementInvalidCupix::Errors::Parameter (ARG20006/ARG20003) → client_400_errorHTTP 400 으로 이미 정상 매핑된다. DB 에 잘못된 쿼리가 실행되지 않으며 사용자 데이터 영향이 없다.

클러스터의 Representative Error(facility_repository.rb default_joins SELECT)는 14일 창 0건으로 STALE 하며, ET 가 서로 다른 두 변형을 한 이슈로 묶은 결과다.

Hand-off (자동화 대상 아님 — feature 품질 개선)#

아래는 RCA 의 단기/장기 개선 제안으로, 자동 code-fix 대상이 아니다 (RCA 원문: "자동 code-fix 대상이 아니다"). breaking-change 및 feature 품질 성격이라 담당 엔지니어의 판단이 필요하다:

  • (tesla, feature) Cupix::Compass::DbSearch::GeminiOperation.build_prompt (app/services/cupix/compass/db_search/gemini_operation.rb:61-117) 프롬프트에 "Do NOT output template placeholders such as {facility_id}; substitute concrete literal values or omit the predicate" 규칙 추가.
  • (tesla, feature) Cupix::Compass::DbSearch::QueryValidator (query_validator.rb) 에 /\{\w+\}/ 같은 placeholder 정규식 pre-check 추가 → EXPLAIN 이전에 명시적 Cupix::Errors::Parameter 로 조기 반환하여 자동 교정 루프(pipeline.rb:81-94)의 재생성 성공률 향상.
  • (ops/monitoring) ET 에서 본 이슈는 IGNORE, Compass 4xx 는 서버 알람에서 제외(client-side).

Acceptance Criteria#

  • RCA verdict = noise 확인 (Risk Assessment "Verdict: noise").
  • "즉시 조치: 없음 / 코드 변경 불필요" 확인.
  • 코드 변경 / Jira / worktree / PR 생성하지 않음.
  • hand-off 항목을 summary.mdx 에 별도 트랙으로 명시.

Tests#

  • 해당 없음 (코드 변경 없음).