talklog — 업무 대화·통화 AI 자동 정리 파이프라인
🔎 카톡 collector 해결방안 조사 완료(2026-07-23, 워크플로 25에이전트 2회전·6축 조사+적대검증). 페페 질문 = "ADB 끊김·잠금화면일 때 카톡 수집 가능한 방법". - 결론: "ADB 끊김 + PIN 잠금" 동시 상황에서 카톡 UI를 읽어 텍스트를 뽑는 방법은 없다(Android 보안모델 — 잠금화면 위엔 어떤 앱 UI도 렌더되지 않음 = AccessibilityService 구조적 불가. 코드 버그 아님). 대신 잠금과 무관한 경로 3개를 조합한다. - 🔴중요 정정(적대검증서 반증): 현
kakao-listener(note20)는 알림을 logcat으로 emit만 한다 —KListener.java에 HTTP 업로드·로컬 영속화 코드 0건, 매니페스트에 INTERNET 권한도 없음. 즉 "알림리스너 = ADB 없이도 수집된다"는 캡처 단계까지만 참이고, PC 도달은 여전히adb logcat에 의존. ADB 무관 완성하려면 HTTP 직송 개조(INTERNET 권한+로컬 큐+재시도) 신규 개발 필요. - 생존 옵션: ①PC 카톡 풀스캔(collect_full.py, 폰·ADB 완전 무관·967방 전체이력, 이미 실증) ②PC 증분(collect_all.py컷오프+스케줄) ③알림리스너 HTTP 직송 개조 ④S25(페페 본계정)에 리스너 설치(1:1 업무대화까지 커버) ⑤장문 전문읽기(readlong, ADB 필요·저빈도) ⑥USB 상시연결 주전략화 ⑦PC 워치독+텔레그램 경보 ⑧라우터 AP격리 해제/전용 AP 추가 ⑨Note20을 업무 단톡방 초대(그룹방만). - 탈락(반증): 잠금 뒤 AccessibilityService 읽기(OS 차단) · DevicePolicyManager PIN 우회(비-owner SecurityException, 공장초기화 필요) · Tailscale+mDNS 무선ADB 자동복구(Tailscale은 tun P2P라 멀티캐스트 미전달 — 공식 이슈 확정, 재부팅마다 포트 랜덤이라 사람이 화면 봐야 하는 순환의존) · logcat 백로그 소급덤프로 야간 갭 회수(Note20 링버퍼 실측 1시간52분에 wrap) · 자가부팅 재무장 APK(Google TV 전용 검증) · 삼성 "16일 딥슬립" 수치(공식문서 근거 없음=허구). - 기존 모바일앱 야간 스윕 = 신뢰도 사실상 0: 텔레메트리 실측sweep_done12/12 rooms=0(100% 실패),night_kakao_launch=1건뿐인데 err=0 → 예외가 아니라getLaunchIntentForPackage가 조용히 null(AndroidManifest에<queries>선언 0건, targetSdk 34 = Android11+ 패키지 가시성 필터링 대상)이 유력 원인. 단 통화녹음 수집(MediaStore)은 같은 야간 실행에서 정상 동작(오디오 5~830건) = 잠금 무관 경로임이 원시 데이터로 확인. - 권고 조합 = 상시(PC 풀스캔 주1회) + 실시간 보완(알림리스너 HTTP 직송, S25 설치) + 백필(장문 readlong, ADB 붙어 있을 때). 착수는 페페 지시 대기. - 페페 확인 필요: 카톡 "알림에 메시지 내용 표시" ON 여부(꺼지면 알림 경로 전멸) · PC 야간 상시로그인·언락 수용 여부(잠긴 PC에서 GUI 자동화 성공 여부 이 PC 미실측) · 오피스 공유기 관리자 접근권(AP격리 해제 가능하면 무선ADB 정상화). - ⚠조사 에이전트가 "text_full 원본 967개 소실 원인 불명"이라 보고했으나 실제 원인은 같은 날 페페 지시로 코디가 삭제한 것(위 🧹 항목). 재수집하려면text_full/_state.json먼저 삭제.♻️ 위 "되돌릴 수 없음"은 통화 음성에 한해 사실이 아니었음 — 831개 중 829개 자동 재수집 확인(2026-07-24 코디 실측): 현
data/calls/m4a 855개(mtime 전부 07-24)를_purged_2026-07-23.tsv와 파일명 정규화 대조 → 삭제분 829개가 동일 파일명으로 복귀(미복귀 2·신규 26). 원인 = 폰이 원본 보관(통화녹음 MediaStore 경로, 잠금 무관 수집) → PC에서 지워도 다음 수집 때 그대로 재업로드. 즉 PC 삭제는 반영구 삭제가 아니다(카톡text_full은_state.jsonresume 때문에 스킵되어 미복귀 — 통화와 다름). ⚠매니페스트 대조 시 경로 구분자가C:/dev/talklog/data\calls\…로 혼합돼 있어 basename split이 실패함 → (번호,날짜,시각) 정규화 키로 비교할 것(단순 basename 비교하면 교집합 0이라는 오판이 난다 — 실제로 1회 발생). 전사본은 애초에 삭제 대상 아님:calls/transcripts_medium857개 .txt 보존(파일명에 발화자 이름 포함)..segments.json은 통화엔 없음(전체 5개=강의·미팅용).🎯 worklog-triage 매핑 실측(2026-07-24): 목업 129건 중 122건(95%)이 원본 음성+전사본 모두 존재(48통). 미보유 7건=5통(전사본도 없음).
raw문장 → 전사본 역매핑 작동 확인(피앤알 07-22 6건 중 4건 정확 매칭, 2건은 요약 변형으로 문자열 불일치). ⚠판단단위 교정: worklogreg는 통화 시각이 아니라 파이프라인 적재 배치 시각 — 목업이 1그룹 6건으로 본 것이 실제로는 5통의 개별 통화였다. 진짜 통화 단위 = 음성 파일 1개. ("129항목→48통"은 배치 기준이라 부정확.) 정확도 병목 = STT 자체(실측 오인식: 천심·피피언·여섯 호텔·권치하시면서). 개선 순서 = ①전사 전문을 통화단위로 매핑(비용0) ②Claude 후교정(도메인 사전, 재전사 불필요) ③재전사(transcribe_meeting.pyWPROMPT재사용, CPU 부담·large-v3는 환청 이력 → 최후수단).🧹 원본 정리(2026-07-23 페페 지시, 되돌릴 수 없음): 전사 완료 음성 원본 + 마이닝 완료 카톡 원본 텍스트 1,911개 1,395MB 삭제 —
data/1.8G→405M. 내역 = 통화 m4a 831(1002MB, 조건=transcripts_medium/<파일>.txt존재 AND_pipeline_state.jsonloaded:true=PFS worklog 적재완료) + 스터디 녹음 2(356MB) + 미팅 record 1(9.7MB) + 카톡 exporttext_full/*.txt967(24MB, 마이닝_synth18모듈 산출 완료) + 구 수집분text/*.txt110(3.6MB). 보존: 전사본calls/transcripts_medium832개·.segments.json·정리본(*.corrected.txt·스터디 md)·마이닝 파생 전부(text_full/_chunks20M·_extract_merged·_dedup_*·_synth)·photos/(368M, 요청 밖)·collector/_discarded·_cleanup_testsaves(이미지라 대상 아님). 미삭제 1건 =월드유재열사장님_01053791490_20260707103348.m4a(18KB, 전사본 없음 → 보류). 삭제 매니페스트(경로·바이트) =C:\dev\talklog\data\_purged_2026-07-23.tsv. ⚠재수집하려면text_full/_state.json(collect_full resume done목록)을 먼저 지워야 스킵 안 됨.목표: 카카오 정책 위반 없이 업무 카카오톡 대화(1:1·단톡, 내 발화 포함)를 AI로 자동 정리해 현장별·상대별·날짜별 누적(노션 또는 user_brief 로컬). 비용 소액 허용. 상태: PoC 전부 통과(양방향 화면 추출 확인) · 전용 앱 제작 진입 직전 · 결정 3건 대기 (2026-06-11) PC 분기(2026-06-14): PC 2주 수집 + 처리부(현장별 1차분류) 완료 → pfs 웹 "현장 내용" 페이지로 운영 통합·배포 완료. 아이폰 확대 설계 확정(2026-06-15): 신동혁(poin03) 수집머신=Windows 확정(Mac/VM 배제). 카톡=데스크톱+kakao-collector 거의무인, 통화=iOS26 보안폴더라 "오디오 저장 탭 1회" 반자동 상한(웹조사 확정). 착수시점 미정·페페 지시 대기. 상세=design#9 +
talklog\server\IPHONE_COLLECTION_RESEARCH.md. ✅ 카톡 다중방 자동순회 구현·검증 완료(2026-06-15, app v0.17880e7a4·b4ec65e): '채팅목록 활동순' [전체 순회] — 변화있는 수집대상(37)만 진입→증분수집→업로드→다음. 온디바이스 클로즈드루프 검증 PASS(7방·5업로드, 제외 스킵, 재실행 멱등). 핵심함정 해결=Kotlin 데몬 UTF-8(한글리터럴 깨짐), force-stop 금지(접근성 비활성), 트리거 시 카톡 포그라운드. 상세=design#10. ✅ [전체순회] 통화통합(v0.18)+소리알림(v0.19)+야간 03:00 무음스케줄(v0.20). 현재 ON·무장. 🔧 수집불능 핵심버그 해결(2026-06-18, v0.21e286ed6): 폰 Tailscale 끊겨 PC(100.108.234.45) 도달불가→targets0→순회 무동작·0개였음.Config.resolveServer폴백[Tailscale→로컬WiFi 192.168.45.2 ping선택]로 해결(같은WiFi면 동작). 검증 PASS(targets37·방진입·통화78건 catch-up). Smart Lock 신뢰장소=집 등록됨→야간 카톡도 수집(locked:False). ⚠로컬IP DHCP변경시 폴백깨짐→Tailscale 상시연결 권장. 상세=design#12. 🔧 신규방 수집누락 해결(v0.22ecec9ff, 2026-06-18): 순회가 '수집'대상만 받고 신규방 스킵했음→제외만빼고 신규도 수집+PC가 신규방 '수집' 자동등록. 자동회전 범인=테스트용 monkey(앱은 무관)→껐고 am start만 씀. ⚠카톡 순회는 카톡 전면 필요(폰에서 Claude앱 쓰면 sweep_no_kakao). 상세=design#13. 🎙️ 미팅 녹음 STT→노션 플로우 1회 실행(2026-06-18, 코디):data\record\음성 260618_111137.m4a(10분25초·모아 모델하우스 발주·결제 협의)를server\transcribe_meeting.py(구축 STT=Whisper medium·ko·vad·beam5,.segments.json보존)로 전사 → 플라우드식 화자 선정(사용자 확인 A=모아 이영애 대표/B=포인 신해철 대표) → 미팅노트 구조화 → 노션 새 페이지 "2026-06-18 모아 미팅"(전체 전사 토글+STT 주의문) 저장. ⚠pyannote(화자분리) 미설치=내용기반 추정. pfs 미업로드(사용자 지시). 통화 파이프라인과 별개의 '미팅 녹음→노션' 1회성 경로. 🎙️➕ STT 정확도 향상 후속(2026-06-18, 코디):transcribe_meeting.py에WMODEL/WPROMPT(initial_prompt)/WSUFFIX지원 추가 → large-v3 + 도메인 initial_prompt 재전사(CPU int8 1.45x실시간·908s). medium 대비 고유명사 개선(포스프→포스코·단독줄게→단독주택·타우나스→타운하우스·620세대 등). 단 large-v3는 "홍보관이" 환청 반복 아티팩트 발생→medium 교차대조+도메인 교정으로 최종본*.corrected.txt작성, 노션 페이지 전사 토글·메타·주의문 갱신(화자 마커 (모아)/(포인) 부여). 산출 3종 로컬 보존(.medium/.large-v3/.corrected). 의정부는 두 모델 모두 '위정부' 오인식→교정. 교훈=large-v3가 고유명사↑이나 반복환청 위험→교정 단계 필수. 🔓 야간 화면 자동해제 구현·실기기 검증 완료(v0.26app, 2026-06-20): 야간 카톡 수집이 화면 꺼짐 상태에서 안 되던 문제 해결. Smart Lock 신뢰장소(집)면 자격증명 불필요(isDeviceLocked=0)하나 화면 재점등 시 잠금화면(keyguard)은 표시(isKeyguardLocked=true)돼 기존 게이트!isKeyguardLocked가 카톡을 건너뛰고(실측 03:36 "카톡 생략: 폰 잠금") wake lock만으론 잠금화면이 카톡을 덮었음. 신규WakeUnlockActivity(투명·showWhenLocked·turnScreenOn)가 화면 켠 뒤isDeviceLocked확인→false면requestDismissKeyguard로 무프롬프트 해제 후 카톡 순회, true(보안잠금)면 통화만.NightRunner게이트를 isDeviceLocked로 전환. 카톡 전면 함정: 잠금해제는 됐으나 카톡이 전면에 안 옴(Android14 BAL이 백그라운드 startActivity의 태스크를 전면으로 안 올림 + showWhenLocked 액티비티가 위에 고정)→v0.26 수정=액티비티 전면일 때 그 컨텍스트로 포그라운드 런치 + showWhenLocked 해제 + RESET_TASK_IF_NEEDED. ✅ 무선ADB 실기기(Galaxy S25 Android14) 화면OFF+잠금표시 상태에서 종단 검증: 화면 ON→잠금해제→카톡 전면→순회 6개 방 수집·업로드. 백그라운드 자동실행=오버레이 권한(② '다른 앱 위에 표시') 필요. publish=server/apkvc26(http://100.108.234.45:8792/app.apk 자동업데이트). 상세=app/STATUS.md2026-06-20 로그. 🔧 적재 누락 진단·복원 + 수집관리 정렬(2026-06-20, 코디): ①진단 — 06-16 이후 수집분이 PFS(worklog)에 적재 안 됨. 원인=pipeline_worker.py가 전사(Whisper)→분류(claude)→끝에 한번 적재→끝에 한번 상태저장 구조라 1800초 타임아웃에 죽으면 적재·상태저장 모두 실패→다음 실행도 처음부터 반복(악순환). state상 202통화 중 loaded 40개뿐(미적재 162=전부 06-16+). ②워커 수정 — 증분(매건 상태저장 + N건마다 flush 적재 + 0건 즉시 loaded + 분류실패만 재시도 +--since필터),talklog_server타임아웃 1800→5400. ③운영 worklog 백로그 재적재 진행(--since 20260616 --env live, 45건 전사 포함). ⚠카톡 모바일 수집(33세션/21방)은 worklog 적재 경로가 워커에 아예 없음(06-14 일괄분만 별도 1회)—구조적 공백, 추후 카톡 분류기 신설 필요. ④대화방 수집관리 정렬 — kakao_room에last_collect(폰 sweep시각) 컬럼 추가(테스트 RDS만, 운영 승인대기),gen_room_syncv3가 checkpoints.json updatedAt로 채움, pfs DAOORDER BY COALESCE(last_collect,last_active,regist_date) DESC+'최근수집' 열(master6d3b985→test). 운영은 페페 승인 후 컬럼추가+deploy-live. 상세=session-2026-06-20. ✅ 정렬 운영배포 완료 + 사용자별 개인 수집관리 분리(2026-06-20, 코디, 페페 승인): ①정렬 운영반영 — 운영 RDSlast_collect컬럼추가+동기화 채움, deploy-live3235ba1(cherry-pick, 미배포 dispatch SQL 제외). ②사용자 구분 — kakao_roomowner_user컬럼+인덱스 추가(test/live, 기존 전부 poin01=1 백필), pfs DAO 목록·통계·수집변경·비고변경을owner_user=세션 user_no로 필터(타 직원 수집 안 보임=개인 수집관리),gen_room_sync/pipeline_worker/talklog_server가 owner_user 유지(신규방=업로드 payload owner). deploy-liveb516f8c. 운영 Playwright 검증 PASS(poin01 111방·최근수집열·06-20 최신순·타사용자0). pfs master50ecb43. 함정=ssm_run원격인자 미전달→env 박은 _LIVE 변형 / pw-chrome-profile 락=chrome.exe taskkill / 워커 cp949 stdout 크래시→UTF-8 reconfigure. ✅ 통화 백로그 재적재 완료(2026-06-20, 코디): 워커 증분화 후--since 20260616 --env live백그라운드 2회(1차 SSM타임아웃+em-dash크래시→UTF-8수정 후 재실행) → loaded 202/202(미적재0, 분류실패2=비업무추정·차회재시도). 운영 worklog 161→456건(통화 49→344, 06-16~19 누락 295건 복원, regist 06-20). 재적재가 만든 owner=NULL 통화방 26개 → owner=1 백필 완료(kakao_room 137방 전부 owner=1, NULL 0). 통화 worklog는 review_status='확정'으로 적재(build_load_script 기존동작). ⚠여전히 카톡 모바일→worklog 경로 없음(구조적 공백, 별도). 📋 추후 작업(미착수·기록만, 사용자 지시 2026-06-18): 미팅 녹음 '반복 사용' 자동화 —data\record\에 녹음 투입 시 전사(transcribe_meeting.py)→화자선정→미팅노트→노션 저장까지 자동화하는 워커(통화pipeline_worker.py패턴 재사용). + 노션 '미팅' 전용 DB(날짜·거래처·액션아이템 속성) 신설 검토. + 정확도 추가옵션: pyannote 화자분리(HF토큰 필요)·도메인사전 기반 Claude 자동교정. 페페 지시 시 착수.🎓 라이브 강의 회의록 신규(2026-06-27, 코디):
talklog\live\— 폰 브라우저(PWA)→ws PCM→faster-whisper 실시간 한국어 전사 + 주기적claude -p(구독OAuth·무과금, 통화분류와 동일방식) 회의록(주제/핵심/결정/액션). 신규 aiohttp 서버 8793(운영 8792 무손상), AudioWorklet PCM 스트리밍, VAD 세그먼트 확정/임시 분리, Wake Lock 화면꺼짐 방지. ✅ 검증=통화녹음파일 리허설(rehearse.py --realtime로 .m4a를 ws 스트리밍, 실제 서버 경로 통과) E2E 성공: medium/cpu 실시간 전사+회의록 구조화+data\lectures\lecture-*.md저장 확인. ✅ large-v3 동작확인(CPU 1.93x=실시간보다 느림→GPU 전용; 전환=envTALK_MODEL/DEVICE/COMPUTE,deploy_gpu.md). ✅ 폰 종단 검증 완료: 갤럭시 Chrome서 마이크 녹음→실시간 전사→claude 회의록 생성까지 라이브 동작 확인. 🔑 핵심 함정=Windows 방화벽(새 포트 8793/8443 인바운드 차단→폰 요청 도달 0, loopback PC만 통과; devplan 8799는 규칙있어 됐던 것). UAC/관리자 막혀 규칙추가 불가→방화벽 허용된python39(C:\Users\delix\AppData\Local\Programs\Python\Python39\python.exe, 프로그램단위 allow)로 서버 실행해 우회(venv python은 차단). 마이크=보안컨텍스트 필요→자체서명 HTTPS 8443(고급→이동1회). 기동=live\start_live.bat(python39+https8443), 폰=https://100.108.234.45:8443/. 상세=live\README_LIVE.md. 전사엔진=기존transcribe_meeting.py재사용.🔐 보안잠금(PIN/패턴) 자동해제 조사 결론(2026-06-30, 코디·vff-analyst): 일반 사이드로딩 앱(루트X)은 보안 keyguard를 비번 직접입력으로 못 푼다(안드 의도적 차단). 막힌 길=① KeyguardManager에 비번 넘기는 공개 API 없음(requestDismissKeyguard는 사람 입력 UI만) ② Device Owner
setKeyguardDisabled는 PIN 걸려있으면 무효(비번 먼저 제거 필요=닭/달걀)+삼성 Knox 제약 ③ 접근성으로 bouncer(PIN창) 직접 누르기=이론상 가능(스파이웨어 경로)하나 Android14+One UI에서 노드 가려질 수 있어 불안정·삼성 업뎃에 깨짐→야간 무인 부적합 ④ 생체인증 자동화·resetPassword=불가 ⑤ 루트=S25 Knox 영구손상 리스크. 유일 작동확인 경로=ADB(PC→폰):adb shell input keyevent 82 && input text "<PIN>" && input keyevent 66(패턴은 input swipe 좌표체인). 이미 PC-Tailscale·무선ADB 인프라 있어 적합. 권장 구조=앱이 isDeviceLocked=true면 PC에 해제요청(talklog_server에/unlock신설)→PC가 ADB로 PIN입력→수집→input keyevent 26재잠금. PIN은 PC쪽 .env에 저장(폰 앱 아님=폰 분실시 노출0). 패턴보다 PIN(숫자)이 안정적(input text 한줄 vs 좌표스와이프 기종변수). ⚠전제=무선ADB 1회 PC키 승인+상시활성, 폰 재부팅하면 무선ADB 꺼져 그 밤 해제불가→skip(재부팅 후 무인 재활성 불가). 그래서 현 Smart Lock 신뢰장소 우선 유지하고 신뢰장소 밖/재부팅후 PIN강제일 때만 ADB fallback. 구현 미착수=페페 지시 대기. 작업단위=①폰 무선ADB 상태확인 ②talklog_server/unlock+PIN env ③WakeUnlockActivityskip("deviceLocked")자리서 PC/unlock호출 ④재잠금.🎓 첫 실강 취합·devplan 등록(2026-06-27, 코디): 오늘 라이브 강의(Claude Code 비개발자 자동화, GSD 32기) 녹음 8개 중 강의 본편 4개(
lecture-20260627-080739·080804·082623·085655, talklog\data\lectures)를 취합·정리 →C:\dev\devplan\lecture-20260627-claude-code.html(강사소개·도입배경·진입장벽·참가자 니즈표·도구생태계·윈도우 설치 6단계) 생성. devplan 대시보드 상단 헤더에📚 강의노트pagetab 등록(build_dashboard.py헤더 수정 후 재빌드, index.html 241408B). http://localhost:8799/lecture-20260627-claude-code.html. 배송통화·마이크테스트(011927·022614·023323)는 강의 외라 제외. ⚠ 8793 라이브 서버가 강의 중반 일부 구간만 캡처(녹음이 8개로 쪼개진 것=세션 단절/재시작 흔적)—연속 캡처 안정성은 추후 점검.
🆕 NOW (2026-08-21(금)) — 수시·주기 통화수집 상시화 + 9일치 백로그 회수 + 통합현장 현장별 반영 ✅운영 반영 완료
페페 지시 = "S25 에서 지난번 규칙대로 수시 통화수집·주기적 통화수집 되게 설정 / field·worklog 통합현장에 수집된 통화내용 현장별 반영 처리 / 운영배포".
- 막혀 있던 진짜 원인 3개(전부 실측)
1. 무선 adb 접속 포트가 5555 로 하드코딩(
run_fusion30.WIRELESS) → 30분 배치가 6일간 노트20만 두드리고 있었다. 접속 포트는 부팅·무선디버깅 토글마다 바뀌는 랜덤 포트이고 페어링 포트와도 다르다(페페가 준35011·37207은 페어링용 —adb pair만 되고connect는 offline). → 캐시(data/_s25_adb.json) → 포트스캔(30000~50000, 61초, 30분 1회 상한) 순으로 찾는다. 실측100.106.4.88:41625로 접속·역터널·트리거 OK. 2. Groq 전사가 배포 이래 한 번도 안 돌았다 — 워커는 Python39 인데requests·sherpa_onnx가 Python312 에만 있었다(transcribe_err: No module named 'requests'가 매 통화마다, 조용히 medium 폴백). Py39 에 두 패키지 설치로 복구 → 실측engine=groq+speaker_label정상,transcripts_segs가 3 → 115. 3. 적재된 통화는field_no가 비어 통합현장 카드에 안 뜬다 — 이번주 통화 143건 전부 「현장 미연결」, 현장 카드 items 0 이었다. - 한 것 = ①수시 = 예약작업
PFS-CallCollect-5m(5분,run_collect5.vbs→run_fusion30.py --no-post --no-scan= 트리거만) ②주기 = 기존PFS-Fusion-30m유지 + autolink 를 정리본 직전에 편입 ③백로그 회수 =uploaded 143 / skipped 1110 / failed 1(8/12~8/21, 폰에만 쌓여 있던 9일치) → 전사·분류·PFS 적재까지 완주 ④현장별 반영 =_wl_autolink_run.py prod apply→ 27건 연결(현대 포항 13·롯데 화성 향남 5·넥서스 4·현대 청량리 2·삼성물산 2·고양 행신동 1) →fusion_post --live(전체) → 정리본 19행 생성(현대 포항 10·넥서스 4·현대 청량리 2·롯데 화성 향남 1·삼성물산 1·고양 행신동 1), 전사본 27건 업로드. - 검증 = 운영 브라우저
field/worklog🧩통합현장 = 현장 카드 16·통화 배지·「대기중」 배지 렌더, 콘솔 오류 0. 커밋8c1d058·2918517. PFS 제품코드 변경 0 → deploy-live 없음(1차·2차와 동일 — 데이터 반영이 곧 운영 반영). - ✅추가 지시(같은 날 13:30, 페페) = "adb 다시 연결 + 통화종료 트리거 추가" → 둘 다 완료.
- 재연결 = 포트가
41625→41041로 바뀌어 있었다(스캔 73초로 자동 발견·캐시 갱신). 포트 회전은 이제 실측 2회 — 사람이 화면 볼 필요 없다. - APK v0.30 배포 =
CallEndReceiver(PHONE_STATE) 신설 → 통화 종료 45초 뒤 기존TriggerReceiver(audio/new)알람. 매니페스트 리시버라 앱이 죽어 있어도 시스템이 깨운다 = adb·망 무관.READ_PHONE_STATE추가·pm grant완료(granted=true), 리시버 등록 확인. 서버/version도 30 으로 올려 자가업데이트 경로 일치. 커밋d739f56. - 같이 잡은 함정 = 30분 배치가 폰 prefs 에
setserver 127.0.0.1(역터널)을 눌러 놓고 가므로 adb 없는 경로가 그대로면 업로드 0건이 된다 →TriggerReceiveraudio 분기에Config.resolveServer()추가. 실측server_resolved = Tailscale,uploaded 4 / skipped 1253 / failed 0. - ⏳남은 검증 = 실통화 1건 —
PHONE_STATE는 보호된 브로드캐스트라am broadcast로 흉내낼 수 없다. 다음 통화가 끝나면 텔레메트리에call_end_armed→audio_collect가 찍힌다(감시 중). - ⏳남은 것 / 결정 필요
- 자동연결률 27/143 의 병목은 매칭기가 아니라 분류 LLM 이 쓰는 현장명(「한샘넥서스(추정)」·「광주 현장」 = 회사·지역 문구). 분류 프롬프트에 현장명 규칙을 넣는 쪽이 임계값 낮추기보다 안전하다. → 착수 지시 대기.
- 미연결 잔여 116건은 규칙대로 사람 몫(통합현장 「현장 미연결」 묶음에서 🔗 연결).
🔶 루트 NOW 이관 — 진행·미결 (2026-08-19 대청소, 페페 지시)
루트
HANDOFF.md를 pncad 만 남기고 비웠다. 아래는 그때 옮겨온 원문(문구 무변경).
- 🆕🔴텔레그램 파일 수신 경로 신설 + 통화파일 1건 소실 [코디] 26.8.18. 페페 지시 = "텔레그램으로 통화파일 보냈다, 전사 후 정리". 🔑broker 폴링 루프가
text·callback_query만 봐서 음성·문서가 조용히 버려졌다 —getUpdates는 offset 확인 즉시 큐에서 사라지고 봇은 지난 대화를 못 읽어 그 파일은 복구 불가(getUpdates 잔여 0·디스크 전역 검색 0·Telegram Desktop 미설치 확인). 수정 =broker.py_maybe_handle_file신설 →C:\dev\_inbox\telegram\저장 + 「📥 받았다」 회신, 20MB 초과는 안내(카톡 경로 유도), 실패도 반드시 알림. 자체검증test_tg_file.pyPASS(7항목) · broker 재시작 후 409 0. ⏳페페 = 통화파일을 텔레그램으로 다시 보내라(20MB 넘으면 노트20 카톡) → 받는 즉시 전사·정리. →rules/notify.md🆕 2026-08-18 - 🔴talklog [코디] 26.8.4 야간 카톡 수집 = 여전히 0방. 새 근본원인 발견(USB 실측) — ①S25 PIN 미제거(
cmd lock_settings verify="User has a lock credential", 낮의deviceLocked=0은 Extend Unlock 신뢰일 뿐 → 3am 4시간룰로 재잠금) ②🔴카톡 26.6.1 UI 변경으로 순회 행 선택자chat_room_list_item소멸 →sweep_loaded targets=58직후 1초 만에rooms=0. 잠금해제·<queries>(v0.27)·카톡 전면·서버도달·통화수집은 전부 정상 확인. 현 행 컨테이너 =layout_content(자식name/message/time/members_count는 생존). 🆕페페 결정 = 수집 주경로를 PC 카톡으로 전환(폰 PIN 삭제는 지문 소멸→은행앱·삼성패스·Secure Folder 붕괴라 폐기). 새 구조 = S25 알림 리스너(도착 신호) + 카톡PC 로그인 호스트 탐지(사무실PC 주간·미니PC 야간/휴일) + 그 호스트에서 방 지정 수집, 미읽음 배지 의존 금지(페페가 즉시 읽어 배지가 안 남음 → 행 시그니처·알림으로 감지). 계획서 =projects/talklog/design-pc-collect.md. ✅페페 결정 3건 확정(신호만·낮 수집 허용·순회 폐기) → ✅P1 완료 = APK v0.28 설치(알림 리스너klistener_connected확인, 서버/kakao-event+kakao_dirty.json큐, 야간 카톡 순회 제거 = 새벽에 폰 화면 안 켜짐). ✅P0 절반 = 로그인 판정식netstat확정(레지스트리는 이력이라 오판) · 500자 함정은 PC 경로에 없음 실측(3,439자 온전). ⏳남은 것 = ①실제 카톡 수신 1건으로 방이름 파싱 검증(다음 메시지 오면 자동) ②P0-4 PC수집기 26.6.0 회귀 ③P2 프로브·P3 오케스트레이션·P4 안전망 →projects/talklog/{design-pc-collect,rules}.md
🗂 2026-06-15 폴더 통합 — 경로 전면 변경 (코디, 최우선 확인)
C:\dev에 흩어진 talklog 관련 4폴더를 C:\dev\talklog\ 하나로 통합 + git init(로컬, 커밋 b7b4a89). 구 폴더명(talklog-android·talklog-server·kakao-inbox·kakao-collector)은 더 이상 없음 — 옛 문서·명령의 그 경로는 아래 매핑으로 읽을 것:
- talklog-android → talklog\app (앱 소스, STATUS.md·MORNING_GUIDE.md 여기)
- talklog-server → talklog\server (수집서버 talklog_server.py 8792·전사스크립트·apk\)
- kakao-collector → talklog\collector (카톡 일회성 수집기·room_status_server.py 8790)
- kakao-inbox → talklog\data (수집 데이터 mobile·calls·photos·text·sites, git 제외=대용량)
- 두 서버 새 위치에서 재기동·검증(8792 /version vc14, 8790 /api/rooms 200), 시작프로그램 VBS 사본도 새 경로 반영. 빌드/실행 시 경로는 전부 talklog\*. 구 빈 폴더 kakao-inbox·kakao-collector는 OS 잠금으로 삭제 대기(무해, 승인 후 제거).
🤖 자동 파이프라인 운영 가동 (2026-06-15, 코디) — 최상위 NOW
폰 통화 → 자동수집 → 자동분석 → 운영 PFS 미검수 적재 → 검수가 무인으로 가동 중. 설계·구현 단일출처 = design-auto-pipeline.md(P1~P6 완료 기록). 핵심:
- 워커 talklog\server\pipeline_worker.py(전사 Whisper medium → 분류 claude -p(OAuth, SARA .env) → SSM 적재, 멱등). 자동트리거 = talklog_server.py 백그라운드 auto_worker_loop(업로드→instant/batch). config env=live(운영 적재).
- 앱 v0.16: 통화 4모드 수집·오디오우선·처리트리거 설정. 서버 /upload-audio·/calls-have·/config.
- pfs 검수UI(현장 내용): 미검수↔확정 토글·미검수만 필터(deploy-live ce5ee6d). 운영 통화 worklog 54건 미검수.
- STT=Whisper medium 확정(별도 Claude STT 불필요). 남은=폰 실수집 1회 운영 E2E 자연확인.
▶▶ 다음 세션 즉시 이어갈 지점 (NOW — 2026-06-14 말)
- 완료(운영 LIVE): talklog 처리부가 pfs 웹 "현장 내용" 페이지(
/field/worklog)로 통합·운영배포됨. 카톡 35방→18현장 1차분류한 worklog 112건이 운영 RDS에 적재돼 직원과 공유 가능. 상세 =projects/pfs/handoff.md(worklog 항목 5건). - 페이지 기능: 본건/AS 섹션 → 업체별 그룹 → 업체내 상차일 내림차순, 항목별 상태(진행/대기/완료/보류/제외)·비고(통합반영), 완료현장 묶음 폴드, 현장 연결/변경(미연결·오연결 재지정·인라인 검색·중복 자동취합). 사이드메뉴 현장목록 아래 "현장 내용" 링크.
- 코드: pfs
api/pfs/worklog/(dao·service·controller·model)·web/templates/basic/field/field_worklog.html·field_list.html(💬버튼)·menu_catalog field_worklog(order 215). worklog 테이블 스키마에source(kakao/call)·is_private·review_status이미 반영. - ✅✅ 1차+3차 운영배포 완료(2026-06-14, pfs master
4b3e2e6→deploy-live727f754, RDS 테스트+운영 적용·검증 PASS): - RDS 마이그레이션 완료(테스트+운영 양쪽):
kakao_room테이블 생성 + 62방 시드 적재(수집37·제외25),worklog.owner_user컬럼 추가(INSTANT·112행 유지·private 0). 메뉴field_kakao_rooms(order 216) 양쪽 INSERT. 함정:ssm_run.py는 원격 스크립트에 인자를 전달 안 함 → env path를 sed로 baked한_LIVE변형으로 운영 적용(처음 4번째 인자 무시되어 테스트로 재실행된 것을 발견·정정). - 운영 배포·검증 PASS: deploy-live Actions 성공,
pfs.poin.co.kr신규 5라우트 200 OK(/api/kakao-room/list·stat,/api/worklog/owners,/field/kakao-rooms). 운영 데이터 = kakao-room/stat{수집37·제외25}, worklog/owners 112건(진행43·대기8·완료60·보류1·private0). 운영 배포 파일·_privacy_clause반영·is_super_admin분기 0 확인. 로그인 UI E2E(브라우저)는 미수행(라우트·데이터·접근제어 컬럼은 API·정적검증으로 확인). - 남은 미검증: 실제 로그인 상태에서 (a) 비공개 토글→다른 계정 로그인 시 숨김 (b) 직원별 뷰 펼침 — 운영 Playwright 또는 페페 육안. owner_user는 전부 NULL(공용)이라 비공개 동작은 사용자가 항목을 비공개 지정한 뒤에 발생.
- ✅ 1차+3차 코드 구현 완료(2026-06-14, pfs master
4b3e2e6— 위 운영배포로 적용 완료): - 1차 = 수집여부 관리 pfs 이전: 로컬 사이드카(
room_status_server.py·:8790·대화방목록.csv·room_status.json) → pfs RDSkakao_room테이블 +/field/kakao-rooms페이지. 백엔드api/pfs/kakao_room/(model/dao/service/controller)·/api/kakao-room(list·stat·{no}/collect·{no}/note)·메뉴field_kakao_rooms(order 216). 프론트field_kakao_rooms.html(Bootstrap 검색·필터·수집/제외/보류 토글·비고). 62방 시드 SQL =kakao-collector/_kakao_room_insert.sql(_gen_kakao_room_insert.py로 CSV+json→멱등 upsert). 마이그레이션 =pfs/scripts/codi_kakao_room_migrate.py(SSM·멱등, schema+menu+seed 3 SQL). - 3차 = 직원별 통합 + 개인 접근제어:
worklog.owner_user신규 컬럼(codi_worklog_owner_alter.py·멱등 ALTER). 접근제어 =_privacy_clause:is_private=1항목은owner_user==session.user_no본인만 조회/수정, super_admin도 예외 없음(DAO에 is_super_admin 분기 0·쿼리 레벨 차단). 전 SELECT/UPDATE(단건·묶음)에 적용. 신규 API/worklog/{no}/private(토글)·/worklog/owners(소유자 요약)·/worklog/owner-items. 프론트field_worklog.html에 현장별/직원별 뷰 토글 + 항목별 🔒비공개 토글. - 검증(로컬): Python 전수 컴파일 OK · worklog DAO 14쿼리
%s/param 정합 · 접근제어 행동 테스트 PASS(user7=본인 비공개 보임·타인 비공개 숨김, user9 반대, super_admin 분기 없음). - 미적용·승인 대기(위험작업): ① RDS 마이그레이션(테스트→운영,
codi_kakao_room_migrate.py·codi_worklog_owner_alter.py) ② 62방 시드 적재 ③ deploy-live 배포. 페페 승인 후 진행. - ✅ 모바일 앱 핵심 검증 완료 (2026-06-15 01:30 KST, 코디 야간 loop): 무선ADB(Tailscale 폰100.106.4.88) 클로즈드루프로 온디바이스 추출 검증. 앱 com.poin.talklog v0.10(repo
C:\dev\talklog-android)이 카톡 대화방을 접근성으로 읽어 증분수집→PC업로드. 닫힌루프로 실버그 5개 자율수정: ①cleartext차단(usesCleartextTraffic) ②메시지=text아닌 content-desc(resource-idmessage)·nickname/time_line/toolbar_default_title_text분류 ③수집 전 바닥스크롤 ④체크포인트 날짜경계(당일이하 제외) ⑤checkpoint 첫캡처 전 확정(findRoomTitle). 동혁이방 신규델타만 정확추출(나/상대·날짜 정확)→kakao-inbox/mobile/<방>/session_*.txt(owner=poin01) 생성검증. PC서버C:\dev\talklog-server\talklog_server.py(8792 tailnet·token tlk_9f3a2c7b1e: version/app.apk/rooms/checkpoints/upload/telemetry·autostart). 트리거=adb -s 100.106.4.88:36067 shell am broadcast -n com.poin.talklog/.TriggerReceiver --es action collect|upload. 단일진실원=C:\dev\talklog-android\STATUS.md. 전부 완료(v0.14): A3세션검토(SessionStore+MainActivity 목록)·A5로컬저장/일괄삭제·B⑤대화방현황(/rooms·/history)·연락처 1838명(/contacts)·통화녹음 18건 메타(/calls, 파일명=이름_번호_일시)+오디오 12MB(kakao-inbox/calls). 앱 기능 ①접근성~⑦통화녹음+세션관리. PC서버 8792에 upload/telemetry/rooms/checkpoints/contacts/calls. 매칭·전사는 PC측 후처리(연락처+kakao_room+user 조인, 통화 전사). - ✅ 통화 전사·분석 완료 (2026-06-15 02:30, 사용자 지시 "실사용 수준까지 loop"): 로컬 faster-whisper(small·CPU)로 통화녹음 18건 한국어 전사(
kakao-inbox/calls/transcripts/) → 현장/작업 분류 17건 call worklog(kakao-inbox/calls/_call_worklog.json, source=call·owner_user=1·site·work·status·speaker·work_date·excerpt). 스크립트=talklog-server/{transcribe_calls,build_call_worklog,organize_calls}.py. pfs worklog는 이미 source[kakao/call] 지원. STT 정정: Claude는 음성전사 불가 → 전사=Whisper, 분류/요약/교정 고도화=Claude(계획). - ✅✅ 통화↔카톡 출처구분 운영반영 완료 (2026-06-15 02:50, 사용자 승인 "sql·운영배포 승인"): ① W3 적재: 통화 worklog 17건 test+prod RDS 적재(source=call·owner_user=1·미검수, 멱등
_load_call_worklog.py). ② 현장내용(/field/worklog): 출처 배지 💬카톡/📞통화 +.wl-srcCSS. ③ 대화수집여부(/field/kakao-rooms):kakao_room.source컬럼 ALTER ADD(기본 kakao) + 통화상대 11명 시드(source=call·room_type=통화·note=번호, 멱등·room_name UNIQUE 충돌안전) + dao SELECT source + 방이름앞 배지 +.kr-srcCSS. 배포: master4edc420(test) → deploy-liveed31df9(prod). ALTER를 dao배포보다 먼저 실행해 페이지깨짐 방지(핵심 순서). 검증 PASS: prod/api/kakao-room/listhttp200·call11+kakao62, worklog call17+kakao112, sample call행(피앤알남태욱상무·신동혁 등) note=번호·수집 정상. 스크립트=talklog-server/{gen_kakao_call_seed,gen_load_script,gen_call_worklog_sql}.py(calls.json→번호집계 11명). 남은=W4 Claude STT 고도화(계획)·선택 Whisper medium 재전사. 06:00 KST 폰설정 복구·대기(알람보호: stayon false·timeout원복·adb disconnect). - ▶▶ 모바일 앱 v2 확장 — 야간 자율 loop 진행 중 (2026-06-15~, 코디): 설치기기=신동승 폰, 수집 owner=poin01/user_no1(업로드·히스토리·Phase C worklog.owner_user=1 포함). 사용자 결정 5건(① 업로드=PC HTTP/Tailscale ② 방설정=pfs kakao_room/room_status 동기화 ③ Phase A→B + 앱 자동업데이트 + 야간 loop 자율작업 ④ 체크포인트=기수집 kakao-inbox/text 기반·이후 증분, 새 방="지금부터" ⑤ 로컬삭제=업로드분+전체). 재설계=증분(자동스크롤+체크포인트+디둡)→업로드전 확인→PC kakao-inbox 자동업로드→로컬 일괄삭제. 단일 진실원=
C:\dev\talklog-android\STATUS.md(loop가 매 iteration 갱신, 컨텍스트 리셋 대비). 환경: PC 100.108.234.45·폰 galaxy-s25-edge 100.106.4.88(USB 미연결). 자율규칙: 위험작업(RDS쓰기·배포) 금지·아침 승인. 아침=자동업데이트 1탭→권한→4테스트. - ✅ 모바일 앱 Phase0+Phase1 완료 (2026-06-14, 코디 직접): 결정 확정(① 트리거=반자동 [이 화면 수집] 버튼 ② 저장처=pfs worklog 공통처리부 ③ 환경=커맨드라인 도구). 개발환경 설치(JDK17·Android SDK android-34·Gradle8.7, 전부
C:\dev\tools\하위; 영속 env JAVA_HOME/ANDROID_HOME) + Phase1 수집기 APK 빌드 성공(repoC:\dev\talklog-android·com.poin.talklog·minSdk26/target34·androidx없이 806KB·APK=C:\dev\talklog-android\talklog-collector-debug.apk). 구성=MainActivity(권한안내+수집패널 트리거)+CollectorAccessibilityService(접근성 오버레이 패널 [이 화면 수집]/[중단] +rootInActiveWindow로 카톡 말풍선 DFS 텍스트 추출·bounds centerX 좌우로 상대/나 구분 →getExternalFilesDir("captures")/session_*.txtappend). 오버레이=TYPE_ACCESSIBILITY_OVERLAY(오버레이 권한 불요). 빌드=gradle -p C:/dev/talklog-android :app:assembleDebug(JDK17·약1분). ▶▶ 다음=페페 S25 설치·온디바이스 테스트(설치→접근성 ON[안드13+ '제한된 설정' 해제]→카톡 대화방에서 [이 화면 수집]→session_*.txt 확인; 검증=오버레이 표시·추출 정확도·좌/우 화자구분) → 결과 보고 후 Phase1 보정 → Phase2(증분 체크포인트·다중방·PC 전송). - ▶▶ 다음 작업(페페 지시 2026-06-14): 모바일 환경 주기적 카톡 대화 수집 구축. PC 일회성 수집·처리부·pfs 통합이 끝났으니, 이제 talklog 원래 메인 줄기 = 모바일 상시 수집으로 진입. 방향은 이미 PoC 통과(접근성 화면 스크랩, 양방향 추출) — 설계 단일 출처 =
projects/talklog/design.md(전용 안드로이드 앱: AccessibilityService + 오버레이 + 중단/재개 체크포인트, 읽기전용·발신 금지). 착수 전 결정 3건(아래 '모바일 상시 앱' 절): ① 트리거 반자동/완전자동 ② 저장처 노션/user_brief 로컬 ③ PC 안드로이드 개발환경 유무. 수집 후 처리부는 PC 분기와 공통(현장별 1차분류 워크플로_classify_workflow.js+ pfs worklog 적재 — owner_user 반드시 채울 것). 주기적 수집 = 페페 폰에서 [지금 수집] 또는 유휴 배치로 증분 수집 → PC 전송 → 분류 → worklog. 다음 세션: 결정 3건 확정 → Phase1 코디 지시문(CODI_talklog_phase1_*.md) 작성. - 통화녹음(call) 통합(추후):
source='call'로 worklog 적재(스키마 이미 반영). 갤럭시 자동녹음→텍스트변환→분류 파이프라인은 모바일 분기와 공통. - 데이터/도구: 1차분류 결과 =
kakao-inbox/_classify_sites.json(18현장·112건), 현장사전 =kakao-inbox/pfs_fields_live.json(101현장,/api/field/search운영). 워크플로 =kakao-collector/_classify_workflow.js(재실행 가능). RDS는 SSM send-command + base64(한글 LIKE는 FROM_BASE64). 운영 pfs.field가 진짜 현장 마스터(field_no 2098=GS오산).
▶ 처리부 — 현장별 1차분류 (2026-06-14 신규, 진행 중)
- 목표: 수집 카톡(수집여부 '수집'·실내용 ~35방)을 현장 단위로 재조립 → 현장별 요약 + 작업 진행건은 작업트래커 후보로 추출. 추후 통화녹음 통합(이번엔 카톡만,
sourcekakao/call 구분 필드 미리 설계). - 확정 사실/결정(이 세션):
- pfs
field테이블(426행)은 현장 마스터로 미사용 — 모든 regist/modify_date가 2026-04-23(데이터 이관)에 멈춤, 최신 현장(GS오산 등 5월말~6월) 미등록. → 현장명은 카톡 내용에서 추출, pfs 현장명 426개는kakao-inbox/pfs_fields.tsv(+.json)로 받아 페이지 인라인 자동완성 검색으로 사용자가 정식현장 연결·보완(페페 결정). RDS는 SSM send-command+base64로 읽기조회(한글 LIKE는 FROM_BASE64; AWS MCP 미연결 세션이라 CLI 경로). - 한 현장이 여러 방에 조각남(GS오산=9방: 메인단톡·동혁이·포인01·효산·효산엘피엘·선재·조운·오엠씨·제일) + 한 방에 여러 현장 섞임(동혁이·오엠씨 등에 이천AS·쌍용홍은동·포스코군산·대보파주·봉적대구MBC 동시) → 1차분류 = 방 횡단 재조립이 핵심.
- GS오산은 노션 기존 정리됨: 페이지
3739512d…e6cee5d61446+ 작업트래커 DB27573f47…(스키마: 작업명·발화자·비고·상태[진행중/대기/완료/보류]·처리담당·날짜). → 완료 제외, 6.8 이후 신규/진전만 중복대조해 추출. - 작업트래커는 pfs RDS 신규 스키마(페페 결정):
worklog(site_name·field_no NULL·source[kakao/call]·source_room·work_name·status·speaker·handler·work_date·excerpt·note). 적용은 승인 후. - 공개 경로: 사생활 가능성 → 개인(비공개) 페이지 1차 필터링 후 pfs 웹 공용 전환. 산출은 로컬 md 먼저(검토용)+HTML 프리뷰.
- ✅ 샘플 완성·Playwright 검증(2026-06-14):
kakao-inbox/sites/=_SAMPLE_GS오산양산4구역MH.md(9방 재조립·6.8후 신규11건·중복⟳표기)·_SAMPLE_봉적_대구MBC어나드범어.md(단일방 1:1 견적)·_PREVIEW_현장별정리.html(다크테마, room_manager 톤; 현장카드+출처방칩+작업트래커표[상태배지·신규/업데이트·카톡/통화 배지·날짜·방]+pfs현장 인라인 자동완성 "위례"→426개 매칭 드롭다운 실동작). 생성기=kakao-collector/_make_preview.py. - ✅ 전체 1차분류 완료(2026-06-14, 멀티에이전트 워크플로 36에이전트·77초): 페페 승인(워크플로·DB작업·라이트=일반밝은테마). 결과 35방 → 18현장 · 작업항목 112건. 산출=
kakao-inbox/sites/<field_no>_<현장>.md18개 +_PREVIEW_현장별정리.html(다크기본+라이트토글). 주요: GS오산#2098(33건·9방 재조립·6.8후만), 쌍용홍은동#2105(25건·7방), 대구MBC#2104·포스코군산#2111(각9), IS동서울산#2106(6). 워크플로=kakao-collector/_classify_workflow.js(방별 에이전트 동일 COMMON지침+현장사전+GS오산 노션중복대조, StructuredOutput, 현장키 머지), 결과=_classify_sites.json, 렌더기=_build_sites_data.py·_make_preview.py. - ✅ 핵심 확정: 운영 pfs.field가 진짜 현장 마스터(2006행·최대 field_no 2111·2098=GS오산). 초기 SSM 조회 544는 오판. 카톡 방↔라이브현장 자동매핑(업체+담당자) → GS오산=넥서스 서예진, 대구MBC=봉적 김양훈 등 정확 매칭. 현장사전 101개 =
kakao-inbox/pfs_fields_live.json(/api/field/search응답·상차일 25.12~27.06 범위). 인라인검색은 현장명+업체+담당 매칭, GS오산 자동연결 #2098 검증. - ✅ worklog RDS 스키마 적용(테스트+운영 양쪽 생성, rows=0):
worklog(worklog_no PK·field_no NULL·site_name·**source[kakao/call] default kakao**·source_room·work_name·status[진행중/대기/완료/보류]·work_date·speaker·excerpt·note·dedup_status[신규/업데이트]·review_status[미검수/확정/보류/제외]·is_private·regist/modify·remove_yn). DDL=kakao-collector/_worklog_schema.sql. 적재는 사용자 검토·필터 후(112건 미적재). - pfs UI 톤: 라이트 Bootstrap(흰 배경+다크네이비 사이드바+파란 강조), 대기=노랑·진행=파랑 배지(작업트래커와 동일 컬러). pfs 자동로그인=poin01(Chrome 프로필 자동완성→로그인 클릭→/field/list).
- 다음: 페페가 18현장 HTML 검토 → 개인(비공개) 필터링(is_private·review_status) → worklog 112건 적재 → pfs 웹 페이지(다크/라이트 토글·인라인 현장검색) 통합·공용 공개. 통화녹음 통합은 그 후(source='call', 스키마 이미 반영).
▶ PC 일회성 수집 분기 (2026-06-13 신규 — 진행 중, 모바일 상시와 별개)
- 페페 지시: 상시 모바일(S25 엣지)은 추후. 지금은 현재 PC에서 최근 2주 대화 일회성 수집(방별 텍스트+사진 원본, 동영상 제외, AI요약 없음, 대화방 목록 작성→추후 업무외 방 사용자 지정).
- 확정 결정: 공식 "대화 내보내기" 자동화 / 사진 원본 일괄 저장 / 1:1+단톡 전부(오픈채팅·채널·나와의채팅 제외) / 1방 시범 후 확대. 코워크(카카오워크)=별 플랫폼 반출불가 폐기.
- ✅ 방법 완전 확정 + 텍스트 PoC 실증(신동승 1방): 방 더블클릭→방창(title=방이름)→Ctrl+S→표준 "다른이름으로저장"(#32770) UIA제어 저장→185KB UTF-8 .txt→
parse_kakao_export.py2주필터 9건 정상. 상세 역공학(창클래스·좌표·AutomationId·내보내기 형식·안전장치)=design.md "PC 일회성 수집기" 절(단일출처). - 코드=
C:\dev\kakao-collector\(STATUS.md 참조), 산출물=C:\dev\kakao-inbox\. 환경=카톡 v26.4.0.5128·Python3.9·uiautomation 등 설치 완료. - ✅ 사진 원본 + 전체 파이프라인 완료(2026-06-14): 채팅방 서랍 역공학(≡→채팅방 서랍▶→사진/동영상→서랍창 그리드, 썸네일 우클릭→저장=앨범통째→
OneDrive\문서\카카오톡 받은 파일\KakaoTalk_YYYYMMDD_id.jpg, 저장후 모달 WM_CLOSE 필수=핵심함정). 구현:collect_photos.py(사진·신동승 7장 검증) +collect_all.py(오케스트레이터=목록행 위→아래 열기[방명=창제목]·텍스트 export·2주필터·사진·대화방목록.csv·--resume·핀 대비 연속컷오프 종료·2방 검증) +parse_kakao_export.py. 상세=design.md "PC 일회성 수집기" 절(단일출처)·kakao-collector\STATUS.md. - ✅ 전체 실행 완료(2026-06-14, 순차 서브에이전트 분할): 55방 텍스트·42방 사진·189장·제외7방. 컷오프 05-31 연속3방 초과 시 자동종료. 라이브중 2함정 수정(≡메뉴 가변→첫▶서브항목 자동탐지 / 방·서랍창 보조모니터→MoveWindow 정규화) +
--build-csv(디스크스캔 CSV 재생성, 실행중 CSV는 스크롤로 누락 가능). 산출=kakao-inbox\{text\<방>.txt(+.filtered),photos\<방>\,대화방목록.csv}, 컷오프밖 신규분_discarded\(132장·가역). - 다음(사용자):
대화방목록.csv수집여부열에서 업무외/개인방 제외표시(개인방 일부 수집됨: 외갓집 남조카방 46장·아빠 등). 영구 제외는 collect_all.pyEXCLUDE추가. 추가/재수집=--resume. 후속 = 처리부(요약 파이프라인)는 모바일 분기와 공통. - ✅ 수집여부 관리 페이지(Evidence 임베드, 2026-06-14): Evidence 사이드바 "대화방 수집관리"(
report/pages/talklog-rooms.md) → iframe →room_status_server.py(kakao-collector, 0.0.0.0:8790, stdlib 사이드카)가room_manager.html서빙 +대화방목록.csv읽어 행별 [수집/제외/보류] 토글, 결정을kakao-inbox/room_status.json에 영속(결정만 기록, 기수집 데이터 미변경). 접속 = Evidence와 동일 Tailscale IP(PC·폰). 자동시작 =room_status_server_hidden.vbs(python.exe 직접 기동, 시작프로그램 등록). 상세 =kakao-collector\STATUS.md. 추후 '현장별 내용 정리'를 이 페이지에서 확장 예정(현장 태그·메모는 다음 단계).
▶ 다음 세션 즉시 이어갈 지점 (NOW) — 모바일 상시 앱(별개 분기)
- 검증 끝. 전용 안드로이드 앱(접근성 화면 스크랩) 제작 단계로 진입. 방향 = 페페 폰 1대 + 접근성 텍스트 추출 + 오버레이 안내화면 + 중단/재개 체크포인트. 읽기 전용(발신 절대 금지).
- 착수 전 결정 3건 → 정하면 바로 Phase1 코디 지시문 작성:
- ① 트리거: 반자동([지금 수집] 버튼, 권장 — 폰 점유·리스크 통제) vs 완전자동(유휴 감지).
- ② 저장처: 노션 3-DB(현장/연락처/기록, GS건설 패턴) vs user_brief 로컬(노션 미사용 기조) vs 둘 다.
- ③ 페페 PC 안드로이드 개발환경(Android Studio/SDK) 유무 — 없으면 Phase0=환경설치.
- 권장 단계 분할: Phase1 최소 수집기(접근성 추출+오버레이+중단/재개 → 한 방 텍스트 파일 저장, UI·정책·추출 실증) → Phase2 증분·다중방·PC 전송 → Phase3 처리부(폴더감시→Claude요약→저장처).
- 설계 단일 출처 =
projects/talklog/design.md(앱 구성요소·상태머신·빌드·리스크·단계). 폐기된 탐색 이력·정책 조사 원문 =projects/talklog/archive.md.
✅ PoC 검증 전부 통과 (2026-06-11 — MacroDroid로 실증)
- 1단계 ✅ 접근성 권한 켠 상태에서 카톡 정상 동작(경고·차단 없음).
- 2단계 ✅ 카톡 대화방 화면 말풍선 텍스트를 외부 접근성 앱이 읽음 — "화면 텍스트 확인"으로 실제 대화의 "테스트" 검색 true / 없는 "aaa" false. FLAG_SECURE 차단 없음 = 화면 본문 추출 가능.
- 3단계 ✅ 양방향 확정 — "테스트"가 페페(내) 말풍선(오른쪽)에 있었고 true. 내 발화도 읽힘 → 알림 리스너 약점(내 발신 누락) 해소. talklog 기술 전제 완전 성립.
- 매크로 앱은 "검사(true/false)"만 → 전용 앱은 "전체 텍스트 변수 추출" 구현(검사 가능 = 추출 거의 확실). MacroDroid는 PoC 도구일 뿐, 본 구현은 전용 앱.
확정 사실 (요지 — 상세는 design/archive)
- 수집 = 페페 폰 1대 접근성 화면 스크랩(카톡 PC·모바일 모두 계정당 1기기 동시로그인 제한이라 별도기기·VM 전부 본인 사용과 충돌 → 1대로 귀결).
- 정책: 읽기 전용·발신 없음이라 서버 빈도 탐지엔 안 걸림. 클라이언트측 접근성 자동화 인지 가능성은 있음 → 읽기만·사람속도·저빈도·유휴배치로 완화. 본계정 리스크 감수 결정.
- 사이드로딩: 구글 심사·허가 불필요(본인 폰 직접 설치). 처리부(폴더감시→Claude요약→저장처)는 수집 방식 무관 공통, GS건설 dedup 패턴 재사용.
- 통화 채널은 제미나이 1단계(갤럭시 자동녹음+텍스트변환→AI) 별도 병행 가치(카톡과 무관).
위험작업 (승인 필요)
앱 빌드·설치·권한 부여는 페페 폰에서 직접. 코디는 PC측 빌드·처리부 스크립트·user_brief 문서. 카톡 자동화는 본계정 리스크 감수 전제(페페 결정 완료).