RINDA · Cleanup Log

리드 Import 데드코드 제거
— 작업 로그

스페로네 "16명 → 4 리스트" 신고에서 출발해, 고아가 된 /lead-import 흐름을 추적·제거하고 CI까지 그린으로 맞춘 전 과정을 기록합니다. 두 PR(#9058, #9059) 모두 alpha에 머지 완료.

작성: Claude (Opus 4.8) 완료: 2026-06-25 구조 분석 리포트: rinda-import-audit ↗

결과 한눈에

2
PR 머지 (alpha)
1,226줄
service 축소 (1627→401)
8+4
제거 함수 + private 헬퍼
17s
최종 send-ci 그린
최종 상태 sh send-ci.shAll services completed successfully. 고아 /lead-import 흐름 제거, 현행 smart-import으로 일원화. 라이브 동작 변화 없음(이미 도달 불가였음).
PR내용상태
#9058고아 /lead-import 임포트 흐름 제거 (smart-import 일원화)MERGED
#9059제거 후 route-auth-map 생성 산출물 동기화 (CI 수정)MERGED

1진행 타임라인

신고 → 진단 → 검증 → 제거 → CI 수정.

신고 접수 — 스페로네 "16명 업로드 → 4 리스트만"
다운로드의 gap_..._shortlist.csv 구조 분석 (16행, 회사명 4종).
경로 식별 — 두 임포트 구현 발견
현행 smart-import(/leads/add) vs 고아 lead-import(/lead-import). 실사용은 smart-import.
근본원인 확정 — 회사명 dedup (beta DB 재현)
스페로네_0430에서 신규 3 + 기존 Gap 1 = 4 멤버. website_url 빈값 → 회사명이 판정축.
데드코드 판정 — 진입점 전수 검색 0건
navigate/Link/사이드바 어디에도 /lead-import 없음. 단 공유 함수 3종은 생존.
제거 PR #9058 — 워크트리 + 타입체커 반복 검증
FE+BE 제거, 공유 함수 보존, 타입 이관. send-ci 통과 후 squash merge.
CI 수정 PR #9059 — 생성 산출물 동기화
check:route-auth-map stale 실패 → build:route-auth-map 재생성 → 머지.

2#9058 — 데드코드 제거 상세

제거 프론트엔드

  • pages/lead-import/ (페이지 + 동의폼)
  • lib/api/hooks/lead-import.ts
  • lib/api/services/lead-import.ts
  • 라우트 등록: dashboard-admin-routes·lazy-imports
  • 브레드크럼 DashboardLayout · 권한맵 permission/constants
  • baseline: workspace-header-baseline.json

제거 백엔드

  • routes/lead-import.routes.ts + app.ts 마운트
  • 전용 함수 8: importLeadsStream·importLeadsBatch·importSingleLead·analyzeLeadPreviewWithAI·getSheetNames·validateFileExtension·validateNonEmptyData·checkDuplicate
  • 전용 private 헬퍼 4: truncateString·checkDuplicateBatch·checkDuplicateEmailsInWorkspace·updateExistingLead
  • lead-import.service.ts 1627 → 401줄

안전장치 — 호출 그래프 사전 검증

// 제거 전 의존성 확인
KEEP  parseUploadedFile     ← smart-import, web-extraction
KEEP  bulkImportLeads       ← smart-import
KEEP  verifyImportEmails    ← smart-import
DEL   importLeadsStream → importLeadsBatch → importSingleLead  (데드 클러스터)
DEL   checkDuplicate        호출처 0
검증  bun type-check exit 0  →  send-ci ALL GREEN

3#9059 — CI 수정 (생성 산출물 동기화)

증상 send-cicheck:route-auth-map 실패 — lead-import 라우트를 지웠으나 생성 스냅샷이 옛 엔드포인트를 들고 있어 drift.
단계내용
재생성cd elysia-server && bun run build:route-auth-map
변경docs/route-auth-map.json · docs/missing-iam.json — lead-import 3 엔드포인트(upload·sheet-names·preview) 순수 삭제 30줄
검증diff에 lead-import 외 변경 0 확인 → send-ci 그린 → squash merge
교훈 worktree CI(ci-autofix.sh)는 build:route-auth-map(prebuild hook 경로)를 돌리지 않는다. 라우트 추가/삭제 PR은 route-auth-map 재생성을 같은 PR에 포함해야 후속 CI 실패를 막는다.

4보존 & 이관

대상처리이유
parseUploadedFile·bulkImportLeads·verifyImportEmails보존smart-import·web-extraction가 import
임포트 진행/결과 타입 (ImportProgress·ImportResult·PreviewLeadData·ProgressLog 등)이관유일 소비처 types/chatbot.ts(mastra 챗봇)로 인라인
lead-import.service.ts유지(축소)공유 함수 셸로 잔존

5남은 후속 (미구현)

GDPR 동의 입증 결정
제거된 lead-import만 consent attestation을 수집했고 smart-import엔 없음. smart-import에 동의 수집을 추가할지 제품/법무 결정 필요.
dedup 근본 개선
회사명 매칭 시 행 폐기 → 기존 리드에 contact 병합(URL 매칭과 대칭)으로 변경. 스페로네 13명 복구 임포트 포함.