# POSA Copyrighter 이미지 저작권 위험 자동 분석 + 운영자 판정 콘솔. **폐쇄망(air-gapped) 납품 대상.** ## 먼저 읽기 `docs/PROJECT_MAP.md` (구조·라우트·스키마 위치) → `docs/INDEX.md` (작업 이력). 전체 소스 재스캔 금지 — MAP 에서 위치를 찾고 필요한 부분만 연다. ## 검증 ```powershell .\verify.ps1 # ruff + pytest. 커밋 전 게이트, CI 도 이 명령 하나 ``` 모든 패치를 적용한 뒤 **마지막에 1회**만 실행한다. ## 이 프로젝트의 규칙 - **폐쇄망 우선**: 새 런타임 의존성 추가는 기본적으로 금지. 필요하면 오프라인 휠 반입 절차 (`docs/operations/offline-install.md`)까지 함께 처리한다. CDN·원격 fetch·자동업데이트 금지. - **`app-*.js` 로드 순서는 계약**: 클래식 스크립트 15개가 전역 스코프를 공유한다. 추가·제거· 재배치 시 `index.html` 과 `test_static_workbench.py` 의 `APP_SCRIPT_NAMES` 를 함께 고친다. - **점수를 바꾸면 `SCORER_VERSION` 을 올린다** (`analysis/risk_scoring.py`). 이 스탬프가 가중치 변경과 스코어링 버그를 사후 구분하는 유일한 근거다. - **직렬화 라운드트립은 원 점수를 재현해야 한다** (`store_serialization.py`). 과거에 `result_url` → `url` 별칭이 리스코어 시 0점을 45점으로 바꾼 사고가 있었다. - **LLM 은 요약기가 아니라 증거 판독기**다. 인용 없는 claim 은 폐기한다. 프롬프트나 모델을 바꾸면 가짜 transport 가 아니라 **실모델로 프로브**한다 — 형식 예시 반향 결함은 실모델에서만 드러났다. - **비ASCII 출력 주의**: 콘솔이 cp949 라 em-dash 등이 `UnicodeEncodeError` 로 프로세스를 죽인 이력이 있다. 스크립트 stdout 에 넣지 말 것. ## 커밋 의미 있는 묶음으로 1커밋 → `docs/INDEX.md` 에 결과 기록. 원격은 Forgejo(`tea` CLI, `gh` 아님).