- Add the 2026-07-24 multi-agent review report (43 confirmed findings, runtime smoke, feature proposals with judge scores) and the implementation checklist tracking what was done vs. deliberately deferred (with reasons). - Record the batch-decision decision: the v1 "no bulk approve/reject" GUI-spec restriction is revised, not silently overridden, and lists the guardrails that made lifting it acceptable. - Fix the README `python -m rights_filter.server` invocation (needs PYTHONPATH=src) and start a docs/INDEX.md continuity log. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E6GD9gxUtfUiVB3JHejGpU
6.4 KiB
6.4 KiB
2026-07-24 구현 체크리스트 (전체 개선 + 신규 기능)
기준:
docs/reviews/2026-07-24-project-review.md. 최종 검증:pytest tests/rights_filter tests/operator_gui→ 457 passed (착수 전 377 passed / 2 failed). 실서버 스모크(포트 9561): 인증·시드·중복인덱스·일괄판정·프리셋·내보내기·백업·복구 CLI 실동작 확인.
배치 0 — 저장소 위생 ✅
- 루트
Microsoft/삭제 +.gitignore에Microsoft/추가 - 루트
tmp_*4건 삭제 (git 미추적 확인 후) - 저장소 전체 stale
__pycache__삭제 (옛 경로Desktop\complete\내장분) data/logs/edge-profile-static/삭제 (612엔트리·27MB)
배치 1 — HIGH ✅
- H1
face_person_detection.pycv2 호환 가드(경고 1회) +batch_analyzer제출물단위 예외 격리 + 환경 정리(opencv-python 5.0.0 제거 → 핀 4.13.0.92 복구) - H2
risk_scoring.pymatch=="search_image"명시적 0점 — 왕복 시 0→45 인플레 차단 - H3
store_serialization.pySEARCH_SKIPPED/ENRICHMENT_FAILURE 를 dedup 시그니처에서 제외 - H4
store_operations.pyrerun 예외 격리 + 'queued' 마커 finally 정리 +lastRerunDiff.error노출 - H5
external_policy.py날짜 윈도우 리셋 + Lock (SearchApiPolicy 패턴 미러) - H6
image_store.py매니페스트 행 단위 예외 격리 + width/height 안전 변환 - H7
app.js/index.html/styles.css인증 게이트(401→토큰 입력→헤더 재시도→세션 쿠키)
배치 2 — 큐/스토어 정합성 ✅
sqlite_store.py큐 전역 id 충돌 시 스킵 + 1회성 감사 이벤트(판정 소실·증거 오염 차단)- Vision 실패만 provider 귀속(
provider: google) + 레거시 매처 확장. 스킵은 의도적으로 미귀속 — 정책 거부는 '실패'가 아니라 '미실행' _search_coverage실패-만 제출물을 커버리지에서 제외
배치 3 — enrichment/operations ✅
- Vision 정책거부 시 사용량 오계상 + 허위 생체정보 외부전송 감사기록 제거
- 재분석 FACE_PERSON +35 중첩 → 스코어러 단일 버킷
lastFailure를 실제 실패 항목에서 선택 (manual_search / collect 2곳)- 전부 스킵 시 기존 수집 후보 보존(무조건 삭제 제거) + provider 상태는 영속
- 수집 후보 카운트 인플레 → id 기준 dedup
배치 4 — HTTP/보안/부팅 ✅
- 비-객체/비-UTF8 JSON 바디 → 400 (핸들러 AttributeError 크래시 제거)
- 비ASCII Authorization/쿠키 → bytes 비교로 401 (무응답 종료 제거)
_file()OSError → 404env_file.py비인용 값의 인라인 주석 절단(인용 값은 원문 보존)__main__.pystdout 라인 버퍼링 — 리다이렉트 기동 시 보안 경고가 즉시 로그에 남음
배치 5 — analysis ✅
- EXIF Orientation 정규화 — 외부 파생물·얼굴크롭·pHash·PIL 폴백 디코드 (파생물 크기를 정규화 이미지 기준으로 재계산). cv2 기본 디코드는 이미 적용됨을 실측 확인
- aHash 저엔트로피 근접매칭 차단 (동일 해시는 1.0 유지 — 동일 이미지 매칭 보존)
- 프로모터 마커 스캔에서 URL 제외 (title/description 한정)
배치 6 — integrations ✅
- Vision 응답 매핑을 예외 경계 안으로 + bestGuessLabels 비-dict 항목 무시
http_json.pyHTTPError 본문 4KiB 캡_probe_connect프록시 적용 대상이면 프로브 생략search_policy.pytry_reserve/release예약형 회계 (쿼터 의미 보존: fetch 실패=환불, 매핑 실패=소비)
배치 7 — domain/admin/governance ✅
- LLM_SUMMARY 거버넌스 게이트를 실제 저장 경로에 적용(미근거 요약 폐기)
- admin 4개 모듈에 '운영 서버 미연결' docstring 경고
- 정상 스킵을
skipped그룹으로 분리 (failures 오분류 제거) register_manual_entry미지원 필드 조용한 폐기 → ValueError- 반복 반려 시 rejected_image 엔트리 upsert (무한 누적 제거)
배치 8 — 프론트엔드 ✅
- 케이스 전환 시 결정 메모/오류/수동쿼리 초기화 (
resetCaseScopedInputs) - 추천 쿼리 요약 — 실근거만 집계, 스킵/무결과 구분 표기
- '주의 후보 보기' → 등록 탭 + watchlist 필터
- 케이스 없음 시
evidence-next-actions초기화 - hashchange
#corrections진입 시 지식 탭 실제 전환 - 수동검색 완료 메시지에 대상 케이스 id 명시
배치 9 — 문서 ✅
- README
python -m rights_filter.serverPYTHONPATH 안내로 정정 - GUI 설계 스펙에 일괄 판정 제약 해제 개정 이력 명시
배치 10 — 신규 기능 ✅
- F1 키보드 연속 심사 — J/K 이동, A/H 판정 후 다음 미심사 자동 이동, R 메모 포커스, N 다음 미심사, ? 도움말, 진행 표시. 입력 중에는 비활성
- F2 일괄 판정 + 메모 프리셋 —
POST /api/submissions/decision-batch(케이스별 트랜잭션·감사·부분실패 보고, 최대 200건, 고위험 확인, 반려 메모 필수) /GET·POST /api/decision-memo-presets - F3 제출물 지문 중복·선례 인덱스 — 시드 시 지문 백필(멱등), exact+pHash≥0.97 클러스터, 큐 배지·그룹 일괄선택, 선례 판정·판정 불일치 표시
- F4 판정 내보내기 —
GET /api/decisions/export(internal / applicant 화이트리스트 분리, CSV+BOM) - F5 온라인 백업·복구 —
POST /api/admin/backup(sqlite backup API, WAL 안전) + 보존 로테이션 +--restore오프라인 CLI(복구 전 원본 보존)
의도적 비구현 (사유)
- #7 쿠키 Secure — localhost HTTP 에서 인증 붕괴, HTTPS 전제 필요
- #8 rate limit — 로컬 단일 운영자 콘솔, 인증으로 대체 커버
- #20
ScoreResult.reasonstuple — 다수 테스트== []단언과 충돌 - 운영자 역할분리 / 통계 대시보드 — 차점 기능, 다음 사이클
- google_search 수동검색 허용 — 2026-06-11 승인된 설계 결정(유지)
- aHash → DCT pHash 교체 — 저장된 지문 무효화 + 임계 재보정 필요. 근접매칭 가드로 완화, 별도 마이그레이션 과제
#12/M4 락 협소화, M7 스키마 coerce, M9 이관 검증, M8 id 마이그레이션 — 7/11 연기 사유 유효