# 2025-10-21 Coldmail 리스트 ‘이메일’ 컬럼 분리 적용 및 LangGraph 재테스트

**작성일**: 2025-10-21  
**작성자**: Claude (51124 서버 전담)  
**상태**: 완료

---

## 배경
- 콜드메일 처리 결과가 Slack Lists에 기록될 때, 대표이름과 이메일이 같은 텍스트 컬럼에 합쳐 저장되는 사례가 있었음.
- 원인: Slack Lists API `slackLists.items.list` 응답에서 `columns` 메타가 누락되는 경우가 있어, 자동으로 ‘이메일’ 컬럼 ID를 식별하지 못함. 그 경우 로직이 연락처 텍스트 컬럼에 이메일을 병합 저장함.

## 조치 내용
- 이메일 컬럼 ID 강제 지정 기능 추가: `SLACK_LIST_EMAIL_COLUMN_ID`
  - 코드: `rb8001/app/services/coldmail_processor.py`에 이메일 컬럼 오버라이드 로직 추가 (env 존재 시 우선 적용)
  - 설정: `rb8001/docker-compose.yml`에 `SLACK_LIST_EMAIL_COLUMN_ID=Col09L4SH6YK0` 명시
  - 커밋: `rb8001@d3d915c`  
    메시지: feat(coldmail): allow override for Slack '이메일' column via SLACK_LIST_EMAIL_COLUMN_ID and set default (Col09L4SH6YK0) in compose

## 컬럼 ID 확인 방법(운영 확인)
1) skill-slack API로 리스트 아이템 조회:  
   `GET http://localhost:8502/api/v1/lists/F09L4S2C6BG/items?limit=200` (헤더: `X-API-Key`)
2) 응답의 `items[].fields[]` 중 `email` 키가 존재하는 항목의 `column_id`가 이메일 컬럼 ID  
   - 실제 확인 결과: `Col09L4SH6YK0` (샘플 값: `vincent@kayakoco.com`)

## LangGraph 체크포인트 재테스트
- 대상 메일: KAYAKOCO (메시지 ID: `18687`)
- 실행: LangGraph 체크포인트를 유지한 채 수동 실행  
  `docker exec -e SLACK_LIST_EMAIL_COLUMN_ID=Col09L4SH6YK0 rb8001 python /code/run_coldmail_email.py 18687`
- 결과(최신 아이템): `Rec09M5TN3U5D`  
  - 회사명(name): `KAYAKOCO`  
  - 이메일(email 컬럼 Col09L4SH6YK0): `vincent@kayakoco.com`  
  - 연락처 텍스트(대표/담당자): `없음`  
  → 이메일이 전용 컬럼으로 분리 저장됨을 확인

## 참고 로그/아이템
- 과거 테스트 아이템: `Rec09MZD27T89` (이메일 컬럼 미식별 시 연락처 텍스트에 이메일 병합 저장)  
- 오버라이드 적용 후: `Rec09M5S9RME3`, `Rec09M5TN3U5D` (이메일 분리 저장)

## 영향 및 주의
- `SLACK_LIST_EMAIL_COLUMN_ID`가 잘못 설정되면 이메일이 기록되지 않거나 에러 가능 → 운영 전 실제 리스트에서 컬럼 ID 재확인 권장.
- skill-slack의 `slackLists.items.list` 응답에 `columns` 메타가 제공되면 자동 식별 경로가 우선 적용되며, env는 강제 오버라이드로 동작.

## 추가 관찰(관련 이슈)
- (해결) skill-email의 `user_id` 입력은 UUID로 강제하여 비-UUID 입력으로 인한 스키마/조회 오류를 차단.
- (개선) skill-slack Lists 호출은 `X-Team-Id: <team_uuid>` 전달 시 DB(`slack_workspace`)에서 `slack_team_id`를 조회해 사용 (멀티 워크스페이스 드리프트 방지). `X-Team-Id` 미전달 시 env(`SLACK_TEAM_ID`)로 폴백.

## 다음 단계
1. rb8001 재배포 후 운영 스케줄 실행 시에도 이메일 분리 저장이 지속되는지 모니터링.  
2. 전체 플로우(목록→상세→첨부→리스트) 실메일 기반 재검증 (특히 skill-email 호출부가 UUID만 전달하는지).  
3. Slack Lists 컬럼 메타가 불규칙한 워크스페이스에서는 필요한 컬럼 ID를 `.env`나 compose 환경변수로 명시하는 운영 가이드 반영.
