판례가 적재돼 있는지, 이번 판단에 실제로 쓰였는지가 화면에 전혀 드러나지 않았다. 엔진은 적재본 545건을 모두 로드하고 판정마다 저작물 유형·법적 태그가 맞는 상위 5건을 인용하는데, 사용자는 "판례를 쓰고 있는가"를 알 수 없었다. 세 곳에 표시한다. 헤더 배지 ● 정상 · 코퍼스 3건 · 판례 545건 푸터 판례 적재: 545건 판단 카드 관련 판례 사건번호 인용 3건 / 적재 545건 적재 수를 함께 보여 주는 것이 핵심이다. "인용 3건"만 있으면 판례를 3개만 쓰는 것처럼 읽히는데, "/ 적재 545건"이 붙어야 545건 중 이 건에 맞는 3건을 고른 결과임이 드러난다. 인용 0건과 판례 미적재도 구분했다. 겉보기엔 둘 다 판례가 없지만 앞은 정상 동작이고, 뒤는 엔진이 insufficient_precedent_data 를 내며 판단 자체를 보류하는 상태다. 설정 오류일 가능성이 높아 배지를 경고색으로 바꾼다. API 는 이미 /v1/health 의 precedent_count 와 응답의 precedent_ids 로 필요한 값을 주고 있었다. 프론트만 쓰지 않고 있었으므로 서버 변경은 없다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
64 lines
2.3 KiB
Python
64 lines
2.3 KiB
Python
from pathlib import Path
|
|
|
|
|
|
HTML = Path("app/static/index.html").read_text(encoding="utf-8")
|
|
|
|
|
|
def test_frontend_sends_human_verified_legal_context():
|
|
for field_id in (
|
|
"legal-work-type",
|
|
"legal-access-evidence",
|
|
"legal-protected-reviewed",
|
|
"legal-rights-verified",
|
|
):
|
|
assert f'id="{field_id}"' in HTML
|
|
assert "legal_context:" in HTML
|
|
|
|
|
|
def test_frontend_renders_llm_legal_judgment_and_safety_fields():
|
|
assert 'id="legal-risk"' in HTML
|
|
assert "function renderLegalRisk" in HTML
|
|
for field in (
|
|
"llm_verdict",
|
|
"llm_confidence",
|
|
"llm_matched_precedent_ids",
|
|
"supporting_reasons",
|
|
"counter_reasons",
|
|
"missing_factors",
|
|
"judgment_summary",
|
|
"disclaimer",
|
|
):
|
|
assert field in HTML
|
|
assert "escapeHtml(item)" in HTML
|
|
assert "법률상 침해 확정이 아닙니다" in HTML
|
|
assert "판례에 비추어 저작권 침해 의심" in HTML
|
|
assert "GPT 판례 비교" not in HTML
|
|
assert "GPT 판정" not in HTML
|
|
|
|
|
|
def test_frontend_shows_precedent_corpus_is_loaded():
|
|
"""판례 적재 여부가 화면에 드러나야 한다.
|
|
|
|
엔진은 적재본 전체를 로드하고 판정마다 상위 몇 건을 인용하는데, 화면에
|
|
그 사실이 전혀 없어서 "판례를 쓰고 있는가"를 사용자가 알 수 없었다.
|
|
"""
|
|
# 헬스 배지와 푸터에 적재 수가 나온다
|
|
assert 'id="precedent-count"' in HTML
|
|
assert "data.precedent_count" in HTML
|
|
# 판단 카드에 '인용 N건 / 적재 M건'
|
|
assert "precedentCountLabel" in HTML
|
|
assert "인용 ${selectedIds.length}건 / 적재 ${precedentCount}건" in HTML
|
|
|
|
|
|
def test_frontend_distinguishes_no_match_from_no_corpus():
|
|
"""매칭 실패와 판례 미적재는 다른 상황이므로 문구가 갈려야 한다.
|
|
|
|
앞은 이 건에 맞는 판례가 없는 것이고, 뒤는 판단 자체가 성립하지 않는다
|
|
(엔진이 insufficient_precedent_data 를 낸다).
|
|
"""
|
|
assert "판례가 적재되지 않아 판단 근거를 제시할 수 없습니다." in HTML
|
|
assert "저작물 유형·법적 태그가 맞는 판례가 없습니다." in HTML
|
|
# 미적재는 헬스 배지에서도 경고색으로 구분된다
|
|
assert "badge warn" in HTML
|
|
assert "header .badge.warn" in HTML
|