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.execute 의 explain_validate! (app/services/cupix/compass/db_search/query_executor.rb:59, EXPLAIN #{sql}) 에서 MySQL 파싱 실패 → rescue ActiveRecord::StatementInvalid → Cupix::Errors::Parameter (ARG20006/ARG20003) → client_400_error → HTTP 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#
- 해당 없음 (코드 변경 없음).