18.2 KB · 수정 2026-09-04 10:15
목차

[코디] S25 카톡 → PFS worklog 자동 반영 파이프라인 부활 실행계획

작성 2026-09-04(금) KST · Plan 에이전트(fable) 조사 · 조사·계획 전용, 코드 변경 0 발주 = 페페 지시 「트레이 업무패널(A)은 통화만 먼저, 카톡(B)은 별도 에이전트로 계획 → 보고 → 승인 후 별도 작업 → 메인에 붙이기」 상태 = 페페 미결 7건 대기(맨 아래). 승인 전 착수 금지.


진단(증거 포함)

경로별 「마지막 성공」과 사인(死因)

경로 마지막 성공 증거 사인
① 폰 접근성 순회(S25 → C:\dev\talklog\data\mobile\<방>\session_*.txt) 2026-06-24 03:06 mobile\동혁이\session_20260624_030620.txt·checkpoints.json·_history.json mtime 전부 06-24 03:06~07 확정: ①3am 보안잠금(Extend Unlock 4시간룰, 08-03 실측) ②카톡 26.6.1 UI 변경으로 행 선택자 chat_room_list_item 소멸 → sweep_done rooms=0(08-04 USB 실측) ③페페 결정으로 v0.28에서 순회 코드 자체를 제거. 고장이 아니라 폐기
② PC 전량 스윕(collect_full.py → text_full\) 2026-07-17 text_full\_state.json·_run.log mtime 07-17 08:40, 원본 967개는 07-23 페페 지시로 삭제 확정: 마이닝용 1회성 실행, 스케줄 미등록. 재수집은 _state.json resume 가 막는다
③ PC 지정방 수집(kakao_pc_grab.py → poin-agent\data\kakaopc\text\) 2026-08-12 10:39 롯데건설 화성 향남(포인).txt mtime(그 전은 07-26 5방) 확정: 수동 도구 — 예약작업 0건, 지시 있을 때만 실행
④ worklog source='kakao' 적재 2026-06-14 13:31:56 단 1회 운영 RDS 실측: kakao 112건 전부 같은 regist_date, 전부 미검수, work_date 06-02~06-16 확정: 카톡→worklog 분류·적재기는 처음부터 상시 경로가 없었다
⑤ 신호 경로(S25 알림 리스너 → /kakao-event) 살아 있음 (2026-09-03 21:56) _kakao_events.jsonl 마지막 줄, kakao_dirty.json 57방 누적 —

한 문장 사인

2026-08-04 페페 결정으로 수집 주경로를 「폰 순회 → PC 카톡」으로 전환하는 설계(design-pc-collect.md)가 P1(폰 리스너 신호)까지만 구현되고 P0-4(수집기 회귀)·P2(호스트 프로브)·P3(오케스트레이션)·P4(안전망)가 미착수인 채 멈췄다. 즉 고장이 아니라 미완이다. 물증 3개:

  1. kakao_dirty.json 57방 전부 collected_ts: 0 — dirty 큐가 한 번도 소비된 적 없다.
  2. kakao_dirty 소비 코드가 리포 전체에 0건 — talklog_server.py(생산자)뿐. 서버 주석엔 "수집 오케스트레이터가 소비"라 적혀 있는데 그 오케스트레이터가 없다.
  3. 예약작업 전수 조회 — 통화용(PFS-CallCollect-5m·PFS-Fusion-30m·PFS-Night-Worklog)은 있는데 카톡 수집 작업이 없다.

추측(명시): poin-agent\data\kakaopc\login_filled.png mtime 09-03 21:53 = 발주서 카톡 발송 계정 전환 흔적으로 추정(수집 시도 아님). 미니PC 카톡은 현재 로그인 중(KakaoTalk PID 7044, 203.133.188.91:995 ESTABLISHED = LOCO 확정 판정식). 계정은 delix0731 로 추정 — 확정은 M0 캡처로.

통화 파이프라인 재사용 판정 (코드 기준)

C:\dev\talklog\server\pipeline_worker.py 정독 결론 = 「분류→적재」는 패턴 재사용, 워커는 별도 신설.

🔴 적재해도 어디에 보이나 — 기대치 관리 필수

C:\dev\pfs\api\pfs\worklog\dao\worklog_dao.py 의 _source_clause() = AND source='call' 이 현장내용 화면 전 쿼리에 걸려 있다 (코드 주석: "worklog 의 source='kakao' 행은 이 화면 어디에도 나오지 않는다").


살아있는 것 · 죽은 것 (2026-09-04 실측)

구성요소 상태 근거
S25 통화 파이프라인(수집→Groq전사→분류→적재) 🟢 가동 worklog call 2,699건·최신 regist 09-03 18:56, _pipeline_autorun.log 정상 완료
talklog_server 8792 (PID 36548) 🟢 가동 netstat 0.0.0.0:8792 LISTENING
rdstunnel 127.0.0.1:13306 🟢 가동 SELECT 실측 성공
S25 알림 리스너 → /kakao-event → dirty 큐 🟢 가동(신호만) _kakao_events.jsonl 최신 09-03 21:56 · 이벤트에 본문 없음(len·sig만)
dirty 큐 소비자(오케스트레이터) 🔴 존재한 적 없음 전 방 collected_ts: 0, 소비 코드 grep 0건, 예약작업 0건
PC 카톡(미니PC) 로그인 🟢 로그인 중(계정 미확정) KakaoTalk PID 7044, :995 ESTABLISHED
PC 지정방 수집기 kakao_pc_grab.py 🟡 동작하나 수동·회귀 미실시 마지막 08-12, 카톡 PC 버전 회귀 미완
PC 전량 스윕 collect_full.py 🟡 코드 생존·resume 차단 text_full\_state.json(07-17, done 967방)
폰 접근성 순회 ⚫ 폐기(v0.28) 카톡 26.6.1 선택자 소멸 + 페페 확정
카톡→worklog 분류·적재기 🔴 원천 부재 pipeline_worker 에 카톡 경로 0, 06-14 수동 1회뿐
노트20 리스너(본문 포함) → _collect\<방>\inbox.jsonl 🟢 가동(별계) sgc\watcher.py — 노트20(poin3133)이 멤버인 방만. 페페 1:1 거래처 방은 못 본다
worklog kakao 112건 🟡 좀비 06-14 미검수·현 UI 어디에도 안 보임

최소본(1일)

목표 = 「S25 알림(dirty) → 미니PC PC카톡 지정방 수집 → 증분 파싱 → claude 분류 → 운영 worklog source='kakao' 적재 → 통합현장 탭 노출」을 하루 1~2회 배치로 관통. PFS 제품코드 무변경(배포 없음), talklog_server.py 무변경.

신규 파일 3개(기존 검증 함수 재조합):

  1. C:\dev\talklog\collector\kakao_collect_dirty.py ①GET http://127.0.0.1:8792/kakao-dirty(토큰 = talklog_server.py 의 TOKEN 상수) ②대상 필터 = dirty 방 ∩ 수집 허용 목록 — fail-closed(목록에 없으면 절대 안 연다. 가족·쿠팡·카카오페이 등 개인방이 dirty 에 섞여 있음 실측) ③collect_full.py 의 검증 함수(robust_main_win·list_rect·open_row·ca.export_text·ca.close_non_main) 재사용, 창 제목 부분매칭 검증 후에만 export ④산출 C:\dev\talklog\data\kakaopc\text\<방>.txt + 자체 상태 C:\dev\talklog\data\_kakaopc_state.json(서버의 kakao_dirty.json 을 안 건드리고 자기 state 와 last_ts 비교 = 레이스 회피)
  2. C:\dev\talklog\server\_kakao_classify_system.txt — _classify_system.txt 카톡용 개작(입력 = 방이름/기간/신규 메시지 원문, 출력 스키마 동일).
  3. C:\dev\talklog\server\kakao_worker.py ①parse_kakao_export.py 재사용 파싱 ②방별 체크포인트 이후 신규분만 청크 ③claude -p 분류(_oauth_token·_parse_obj import, cwd = %TEMP% — CLAUDE.md 꼬리표 유출 방지) ④SSM env-baked 적재: source='kakao', review_status='미검수'(권장), owner_user=1, 멱등키 note='ksrc=<방>|<청크sha1 앞16>' ⑤--dry-run 필수.

하루 배분: 오전 = M0 실측+회귀(0.5~1h) → M1 수집기(2~3h) → 오후 = M2 워커(3~4h) → dry-run → 운영 적재 1회는 승인 후(M3) → 예약작업 등록(M4, 승인 후).


완성본


단계별 작업(검증 · 롤백 · 승인)

python 은 전부 PYTHONUTF8=1 접두. GUI 단계는 미니PC Session 1(schtasks /Create /IT /ru delix + pythonw), 화면 잠금·CRD 미접속 상태에서만.

# 무엇을 검증 롤백 위험/승인
M0 P0 실측 3종: ①미니PC 카톡 계정 확정(kakao_pc_grab.py --list → chatlist.png 육안) ②카톡 PC 버전 ③테스트 1방 export 회귀 --list 캡처 + 1방 --targets(--no-photos) → poin-agent\data\kakaopc\text\동혁이.txt 최신 메시지 포함 확인 없음(읽기·캡처뿐). 방을 열면 읽음 처리됨을 사전 고지 GUI 점유. 승인 불요, 시각만 조율
M1 kakao_collect_dirty.py 신규 드라이 → 실모드 1회 → 산출 txt·state 확인. 필터에 가족방·알림톡 0건 grep 산출물·state 삭제(적재 전이라 무해) 승인 불요(로컬 파일만)
M2 kakao_worker.py + _kakao_classify_system.txt PYTHONUTF8=1 python C:\dev\talklog\server\kakao_worker.py --dry-run → 생성 SQL·items 육안(현장명에 회사·지역 문구 배제) 코드 파일 삭제(DB 무접촉) 승인 불요
M3 운영 적재 1회 --env live SELECT COUNT(*),MAX(regist_date) FROM worklog WHERE source='kakao' AND note LIKE 'ksrc=%' + 통합현장 탭 렌더 확인 note LIKE 'ksrc=%' 로 특정 → remove_yn=1(worklog_no 사전 저장). 이 롤백도 운영 쓰기 = 승인 🔴 운영 DB 쓰기 — 승인 게이트
M4 예약작업 PFS-KakaoCollect(일 1~2회, 예 12:30·19:30, /IT /ru delix, 숨김 vbs) schtasks /Run 1회 → state 갱신·로그 schtasks /Delete 시스템 변경 + 상시 운영 DB 쓰기 개시 — 승인
F1 서버 훅 추가 로컬 curl 마킹 → collected_ts 갱신 확인 git revert + 서버 재기동 상주 서버 수정(통화와 공용) — 재기동 조율·승인
F2~F3 프로브 + 게이트 로그인 위치를 옮겨가며 netstat :995 판정 정확도 프로브 중지 사무실PC 배포 = 승인
F4 전량 스윕 재가동 _state.json 백업 후 삭제 → collect_full.py --max-rooms 20 백업 복원 장시간 GUI 점유 — 야간·승인
F5 PFS autolink 확장·노출·API 신설 pfs-test(8001) E2E → Playwright git revert 🔴 deploy-live 승인 게이트

함정 체크리스트 (rules 2본 전수 추출)

PC 카톡 GUI 1. 합성 입력 전부 무시 — PostMessage 만 먹는다. UIA 는 EVA 컨테이너까지만. 2. Session 0(Bash)에선 카톡 창 0개 — schtasks /IT /ru delix + pythonw 로 Session 1. 3. 화면 잠금이면 SetCursorPos 가 에러코드 0으로 조용히 실패, CRD(remoting_desktop.exe) 접속 중에도 동일 → 가드 3단(포그라운드 프로세스명 → BlockInput err5 → ImageGrab). 4. 행 높이 가변(pitch 68 vs 78) — 행 인덱스 산술 금지, 열고 나서 창 제목 검증. 5. 내보내기 완료 모달 WM_CLOSE 필수, 보조모니터 → MoveWindow 정규화, ≡ 메뉴 재클릭은 토글로 닫힘 → 폴링. 6. 카톡 PC 버전 상승(26.6.0.5208+) — 좌표·단축키 회귀 미완(M0). 7. 방을 열면 읽음 처리 — 페페 미읽음 표시가 사라진다(사전 고지). 8. 계정당 PC 1대 — 페페가 사무실PC 로 로그인하면 미니PC 가 튕긴다. 판정 = netstat 비-루프백 :995(레지스트리 UserAccounts 는 이력이라 오판). kakao_login.env 는 ID/PW 키가 2번 — dotenv 로 읽으면 코디 계정만 남는다(순서 파싱). 9. 방이름이 계정마다 다르다(delix0731 신동혁 = poin3133 포인 신동혁 대리) → 부분매칭 + people_map.py find. 10. 한글 방이름 → safe_name sanitize, stdout cp949 → PYTHONUTF8=1 + reconfigure. 11. should_prevent_auto_login_once 는 사무실PC(25.4.0)에선 무효, 트레이 숨은 로그인창은 IsWindowVisible 실패 → OnlineMainView_* 자식 유무로 판별. 12. 수집 원본 git 금지(gitignore).

신호·상태·resume 13. text_full\_state.json resume 스킵 — 전량 재수집 전 백업 후 삭제. 14. dirty 소비 표시 없으면 매번 전량 재수집 — 최소본은 자체 state, 완성본은 collected_ts 마킹. 15. 알림 미리보기는 잘린다. PC 내보내기엔 500자 함정 없음(3,439자 온전 실측) → 본문은 반드시 PC export 에서. 16. 서버 미도달 구간은 텔레메트리도 통째로 빈다 — 「로그가 조용함 = 정상」 금지, 무이벤트 경보로 방어.

폰(S25) 17. force-stop 금지(접근성 비활성), APK 재설치는 서명 불일치로 uninstall→install + adb 재프로비저닝. 18. am start 로 카톡 못 띄움 → monkey -p com.kakao.talk -c android.intent.category.LAUNCHER 1. 19. PHONE_STATE 는 am broadcast 흉내 불가 — 실통화로만 검증.

분류·적재 20. claude -p 는 C:\dev 밖 cwd 에서(CLAUDE.md 꼬리표 유출 실측) + pythonw 손자 claude.cmd 창 = import nowin. 21. ssm_run.py 는 원격 인자 미전달 — env·데이터를 스크립트에 baked. 22. 분류 현장명에 회사·지역 문구 금지(「한샘넥서스(추정)」·「광주 현장」) — autolink 병목 원인, 시스템 프롬프트에 명기. 23. 발신 절대 금지 · 읽기 전용 fail-closed — 수집 코드에 발신 경로를 만들지 않는다. 24. 미니PC 카톡 GUI 는 발주서 발송·인테이크체크와 공유 자원 — 시간대 겹침 회피.


미검수 112건 처리 방침

현황 = 전부 2026-06-14 13:31 적재, work_date 06-02~06-16, 현재 UI 어디에도 안 보인다. 통계·오너 요약 API 도 call 게이트라 오염 없음 = 무해한 좀비.


미결 — 페페 결정 필요

  1. 신규 카톡 적재의 review_status — 통화는 '확정' 적재 중이나, 카톡 첫 가동은 '미검수' 시작 → 정확도 확인 후 '확정' 전환 권장. 어느 쪽?
  2. 미니PC 카톡 계정 운용 — 수집은 delix0731 필요. 페페가 사무실PC 에서 쓰는 날은 미니PC 수집이 죽는다(계정 1대). 낮 수집을 사무실PC 로 넘길지, 미니PC 고정으로 갈지.
  3. 수집 대상 방 목록 확정 — 운영 kakao_room 56방이 6/24 기준이라 낡았다. dirty 기준 최근 활동 업무방으로 갱신할지, 기존 56방 그대로 갈지.
  4. 카톡 항목의 PFS 노출 위치 — 현행대로 통합현장 탭만(코드 무변경) vs 현장내용에 카톡 복원(PFS 수정 + deploy-live 승인).
  5. S25 리스너 본문 전송 재결정 — 켜면 PC GUI 수집 의존이 크게 준다(실시간 텍스트). 단 500자 잘림·알림 끈 방 누락 + 2026-08-04 「신호만」 확정을 뒤집는 것.
  6. 미검수 112건 — A/B/C 택1(권장 A).
  7. M3(운영 적재 1회)·M4(예약작업 상시화)·F5(deploy-live) 각각의 승인.

구현 시 핵심 파일