코드 리딩으로는 나오지 않는 결함들이다. 서버를 실제로 띄우고 브라우저로 케이스 화면을 열어서 찾았다. ## 1. 서버가 기동조차 하지 않았다 (납품 치명) COPYRIGHTER_AUTH_TOKEN 없이 실행하면 경고 문구 안의 em dash 가 한국어 Windows 콘솔(cp949)에서 UnicodeEncodeError 를 일으켜, 포트를 바인딩하기도 전에 프로세스가 죽었다. 납품 대상이 정확히 그 환경이다. 기동 진단 문자열을 ASCII 로 바꾸고, stdout/stderr 를 errors="replace" 로 재설정한다. 진단 메시지가 기동을 막을 수 있어서는 안 된다 — 죽는 것은 프로세스가 아니라 표현 불가능한 문자여야 한다. ## 2. 요약이 모델이 본 적 없는 근거를 인용했다 (거버넌스) 프롬프트는 MAX_PROMPT_EVIDENCE 로 잘리는데 source_urls / source_evidence_ids 는 여전히 전체 증거에서 뽑혔다. 실측: 79행짜리 케이스가 12행만 읽은 요약을 만들고 화면에는 "연결 근거 78건" 이 떴다. 정책 검사는 통과했고 숫자는 허구였다. 앞선 커밋의 입력 경계는 이 구멍의 절반만 막았다. 이제 연결 근거는 검증된 claim 이 실제로 인용한 행이고, 인용이 하나도 살아남지 못하면 모델에게 보여준 행으로 폴백한다. verified 도 이제 "요약이 검증됐다" 를 뜻한다 — 이전에는 "케이스에 증거가 있다" 의 재진술이었다. ## 3. 조작 감지 지표가 저장되지 않았다 grounded_claims / dropped_claims 를 evidence.data 에는 넣었으나 _evidence_payload 에 매핑하지 않아 영속화되지 않았다. 모델이 지어내기 시작해도 아무도 볼 수 없는 상태였다. ## 4. 클라이언트가 서버의 그룹 분류를 무시했다 서버가 group=provenance 를 보내는데 app.js 의 evidenceGroupFor 가 자체 매핑으로 internal 로 재분류했다. 배관 목록에 서버 쪽만 넣고 클라이언트 쪽을 빠뜨렸다. 증거 출처 필터 드롭다운에도 항목이 없었다. ## 5. 기본 모델이 두 곳에서 서로 달랐다 OllamaGenerateLlmClient.__init__ 는 qwen2.5:3b-instruct(미설치), env_clients 는 qwen2.5:7b. 런타임 404 가 날 때까지 아무것도 실패하지 않았다. 클라이언트가 값을 소유하고 env_clients 가 재수출하도록 바꿔 드리프트를 구조적으로 막는다. ## 실렌더 확인 결과 - 출처 표기 그룹이 자체 섹션으로 렌더 (제목/건수/설명/칩) - 요약이 [E1, E2, ...] 인용이 붙은 한국어 2단으로 렌더 - sourceIds 78 -> 10, verified=True, grounded=2 dropped=0 - qwen2.5:7b 6.0초, initialRiskScore 21/low vs 실시간 100/high 분기 확인 pytest 534 passed. |
||
|---|---|---|
| .. | ||
| operator_gui | ||
| rights_filter | ||