POSA_Copyrighter/web/operator-gui/operator-labels.js
changukyu 2735ce1194 feat: 운영자 신원 기록 + 게시처 성격(언론·공식 / 무단 게시처) 표시
④ 감사 actor 31곳이 'rights.ops' 리터럴이라 누가 판정했는지 답이 없었다. ContextVar 로 요청
   범위 운영자를 걸고 스토어는 current_actor() 를 읽는다. 콘솔 좌측 하단 '운영자' 칸 →
   X-Operator 헤더(한글 percent-encode, 서버에서 제어문자 제거·40자). 이름 없으면 판정이
   막힌다. 인증이 아니라 기록 — 권한은 공유 토큰.
⑤ 기준 DB 유형 news_host / scraper_host. 점수는 바꾸지 않고 한 줄 요약에
   '(언론·공식 n · 무단 게시처 m)', 증거 호스트 칩 옆에 배지.

verify.ps1: ruff clean, 684 passed. 실렌더: 운영자 입력칸 표시 확인(44px).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BStHFrjQj2VypecSG9ex1V
2026-09-26 14:46:20 +09:00

102 lines
2.3 KiB
JavaScript

(function attachOperatorLabels(global) {
const riskLabels = {
high: "높음",
medium: "중간",
low: "낮음",
failed: "실패",
pending: "대기",
};
const decisionLabels = {
unreviewed: "미심사",
held: "보류",
rejected: "반려",
approved: "승인",
corrected: "보정됨",
};
const providerLabels = {
internal: "내부 분석",
naver: "네이버 검색",
naver_blog: "네이버 블로그 검색",
naver_web: "네이버 웹문서 검색",
google: "구글 이미지",
google_search: "구글 근거 검색",
llm: "내부 요약",
};
const sourceLabels = {
internal: "내부",
fingerprint: "이미지 유사도",
face: "얼굴/인물 감지",
provenance: "출처 표기",
naver: "네이버",
google: "구글",
llm: "내부 요약",
failure: "실패",
};
const providerStatusLabels = {
ok: "정상",
covered: "근거 있음",
empty: "결과 없음",
failed: "실패",
disabled: "중지",
skipped: "건너뜀",
pending: "미실행",
not_run: "미실행",
};
const candidateStatusLabels = {
candidate: "후보",
promoted: "반영됨",
};
const evidenceStatusLabels = {
used_for_judgment: "판단에 사용",
irrelevant: "무관",
false_positive: "오탐",
ignored: "무관",
pending: "보류",
};
const knowledgeStatusLabels = {
confirmed: "확정 DB",
watchlist: "주의 후보",
excluded: "제외됨",
};
const provenanceLabels = {
manual: "수동 등록",
automatic: "자동 등록",
external_evidence: "외부 근거",
};
const knowledgeTypeLabels = {
celebrity: "연예인/유명인",
public_figure: "연예인/유명인",
work: "작품",
character: "캐릭터",
game: "게임",
rejected_image: "반려 이미지",
rejected_reference: "반려 이미지",
cleared_reference: "클리어 기준",
trusted_host: "신뢰 출처",
news_host: "언론·공식 출처",
scraper_host: "무단 게시처",
other: "기타",
};
global.OperatorLabels = {
riskLabels,
decisionLabels,
providerLabels,
sourceLabels,
providerStatusLabels,
candidateStatusLabels,
evidenceStatusLabels,
knowledgeStatusLabels,
provenanceLabels,
knowledgeTypeLabels,
};
})(window);