# Redmine #739 · DB 소유 게임별 실행 작업 계약 ## 목표 복수 게임 질문에서 Portal과 `smilegate_fewshot_nl2sql`은 게임명을 재해석하거나 원 질문을 수정하지 않는다. ADB의 `sg_game_query_plan`이 DB 카탈로그·OCI Chat 결과를 바탕으로 실행 가능한 작업을 만들고, 호출자는 그 작업을 그대로 실행한다. ## 계약 `executionTasks`의 `QUERY` 작업은 다음 값을 모두 가진다. - `action`: `QUERY` - `workerTool`: 호출할 worker 도구명 - `workerArguments.prompt`: 원 질문의 지표·날짜·필터·결과 모양을 보존한 해당 target 전용 질의 - `workerArguments.scopeGameKey`: DB가 확정한 game key - `workerArguments.queryPlan`: 해당 target 하나만 담긴 `SINGLE` plan - `fewShotArguments.question`: 보조 진단 도구가 필요할 때만 사용할 같은 target 전용 질의 `REPORT_UNAVAILABLE` 작업은 worker 인자를 갖지 않으며 최종 응답 항목으로만 사용한다. ## 책임 분리 | 구성요소 | 책임 | | --- | --- | | `sg_game_query_plan` | 게임 식별, 데이터 가능 여부, target별 자연어 작업 생성, 단일 target plan 생성 | | Portal 오케스트레이터 | 작업 순회, worker 호출, 결과 합성, task 완료 판정 | | `fewshot_preflight` | reasoning에서 필요할 때만 후보 적합성을 확인하는 보조 진단 도구 | | `smilegate_fewshot_nl2sql` | 전달된 단일 작업으로 DB Few-shot 검색·승인 판정 후 SQL 생성 및 읽기 전용 실행 | ## 안전 규칙 - planner가 생성한 target 전용 작업 질의에는 다른 계획 target의 실제 mention이 포함되면 실패 처리한다. 호출자가 문자열을 제거하거나 보정하지 않는다. - worker는 `queryPlan`이 단일 target인지 검증만 하며, 전체 plan에서 target을 추출하거나 원 질문을 재작성하지 않는다. - worker의 Few-shot 검색은 DB가 발급한 `workerArguments.prompt`로 수행한다. preflight 결과는 선택적으로만 전달할 수 있으며 worker 실행의 조건이 아니다. - Java는 지표별 SQL 조건, 결과 모양, Few-shot 활성화/리타이어, 후보 유사도에 관여하지 않는다. 이 정책은 DB 메타데이터와 `sg_qa_vector_search`에서 관리한다. ## 검증 STD-11에서 Bubblyz는 `REPORT_UNAVAILABLE`, 카제나는 `QUERY` 한 건이 되어야 한다. 카제나 worker에 전달되는 prompt·plan·생성 SQL 어디에도 Bubblyz가 없어야 하며, 결과는 2026-07-15 매출 227681이어야 한다.