세션 — 현장 내용 탭 분리: 카톡관리(1탭) + 통화관리(2탭) · 야간 통화 파이프라인 (2026-07-28)
지시 (페페)
"카톡관리를 pfs field/worklog 의 메인페이지로 해줘. 기존 페이지를 탭으로 나눠서 첫번째 탭으로. 현재 worklog 페이지는 통화관리 탭으로 2번째 위치시키고 통화내용 수집분만 전시한다. 더이상 카톡내용 같이 관리할 필요 없음. 통화내용 전사분은 매일 야간시간에 현장 매핑을 서브에이전트를 통해서 진행한다. 전사내용은 가구 전문가 지식베이스와 현장별 업무 내용 정리에 사용한다. 이번주 월요일부터의 기록만 카톡 게시글과 같은 방식으로 정리해서 현장별로 그룹화 한다. 월요일 이전의 내용은 모두 숨김이력으로 돌린다. 앞으로는 매일 야간에 같은 작업을 반복한다. 운영 배포"
결과 — 운영 배포 완료
| 항목 | 상태 | 커밋 |
|---|---|---|
| A 카톡관리 1탭(신규 API·미러·명령큐) | ✅ | pfs master 028fd6a → deploy-live 9e3a049 |
| B 통화관리 2탭(source='call'만) | ✅ | 〃 |
| C 이번주 월요일 창 + 숨김이력 | ✅ | 〃 |
| D 야간 서브에이전트 현장매핑·KB | ✅ | talklog 1440777, 예약작업 PFS-Night-Worklog 02:00 |
| E 운영 배포 | ✅ | + 후속 502 수정 master dd76774 → deploy-live a9036c3 |
| 로컬 동기화(데몬↔PFS) | ✅ | poin-agent 39726f9, 예약작업 PFS-KakaoBoard-Sync 1분 |
핵심 설계 — 왜 「미러 + 명령 큐」인가
게시글 원본(board.md·hidden.jsonl)은 사무실 PC에 있고 폰 조작도 그 감시 데몬만 한다.
PFS는 EC2에 있고 그 PC로 들어올 수 없다(NAT 뒤). 그래서 방향을 뒤집었다.
[사무실 PC] poin-agent/pfs_board_sync.py [EC2] PFS
board.md ──① 미러 push(rows/hidden/원문) ─────▶ kakao_board → 화면이 읽는 단일 출처
◀─② 대기 명령 pull ─────────────────── kakao_board_op ← 웹의 ✔⊘✎✖↩ 가 쌓이는 큐
③ board_rows 로 적용 → board.md
──④ ack(완료/실패) + 갱신 미러 ────────▶
⑤ watcher.push_web_edits() 가 board_hash 변화를 보고 폰 게시글에 반영(08~20시)
- 웹이 파일을 직접 못 고치므로 「의도(명령)」를 넘긴다 — devplan 로컬 페이지와 동작이 같다.
- 폰 조작 주체는 여전히 감시 데몬 하나 → 웹·데몬 이중 조작이 구조적으로 없다.
- 미러를 웹에서 낙관적으로 고치지 않는다. 원본은 로컬이고 되돌아오는 sync가 진실이다.
- 반영 전 상태를 화면에 「반영 대기 n건」으로 노출 — 조용한 미반영 금지(59.2% 사고 교훈).
- 실패한 명령은 사유와 함께 화면 상단 배너로 회신된다(사라진 행 =
KeyError→ "행이 바뀌었다").
통화관리 탭 — 통화 수집분만
worklog_dao._source_clause()를 조회·집계·묶음변경 전 경로에 적용(source='call'). 카드 건수 = 펼친 목록 = 일괄변경 범위가 어긋나지 않는다. 카톡 과거 적재분은 화면 어디에도 안 나오고 일괄변경이 몰래 건드리지도 않는다.- 적용 지점 = site_summary·by_field·by_site_name·status_bulk·hidden_sites·owner_summary· unlinked_groups·nos_by_site_name·by_owner·field_by_field·field_by_site_name + count(배지).
- 단건 수정(status/note/remove/field/review/private)은
worklog_no지정이라 게이트 불필요.
노출 창 — 이번주 월요일부터
worklog_service.week_start()= 이번주 월요일(월요일 당일이면 그날). 기본창 =(월요일, None). 상한 없음을 유지한 이유는 07-27과 같다 —work_date미래 '예정' 항목이 증발하면 안 된다.scope=hidden=(1년 전, 이번주 월요일). 배타 상한이 기본창 시작과 정확히 맞물려 경계 항목이 누락되지도 중복 노출되지도 않는다(테스트로 고정).- 화면 =
🗂 숨김 이력토글 버튼 + 배너 + 시작일 입력 잠금. 월요일이 지나면 지난주 기록은 가만히 둬도 숨김이력으로 넘어간다(선언적 규칙 — 야간 배치가 옮기는 게 아니다).
야간 파이프라인 (talklog/server/night_worklog.py, 매일 02:00)
- P1 적재 =
pipeline_worker.py --env live --classifier claude(Whisper medium 전사 → 분류 → 멱등 적재) - P2 현장매핑 = ① 규칙
auto-link(확실한 것만) → ② 남은 미연결만 claude 서브에이전트에 pfs 현장 목록과 함께 넘겨 매칭 →confidence>=0.8만 연결. 에이전트가 지어낸 현장명·번호는 입력에 없으면 버린다(신뢰경계). 애매하면 연결하지 않는다. - P3 가구 KB = 새 전사문을 8버킷으로 분류해
furniture-expert/practice/ops_*_calls.md에 append. 처리한 파일명을 상태에 남겨 재적립을 막고, 실패한 묶음은 done에 넣지 않아 다음 밤 재시도된다. - 각 단계 독립 — 앞이 실패해도 뒤는 돌고, 결과를 broker로 알린다.
검증
- 자체검사 18항목 —
pfs/scripts/test_worklog_window.py(9: 월요일 계산·scope 맞물림·source 게이트·%s/파라미터 일치) +pfs/scripts/test_kakao_board.py(9: 명령검증·읽기전용·세션·ack·깨진 JSON) - 로컬 7항목 —
poin-agent/test_pfs_board_sync.py(격리 임시폴더, 운영 board.md 무접촉) - E2E 8항목 —
poin-agent/test_pfs_board_sync_e2e.py(pfs-test 실왕복: 미러/읽기전용 거부/명령등록/ 적용/복원/실패회신/수정) - 운영 UI(Playwright) — 탭 기본=카톡관리(4방 85항목), 이번주 창
2026-07-27~, 숨김이력 682현장, 통화탭 카톡 배지 0 · 통화 배지 1211, 콘솔 오류 0 - 운영 쓰기경로 무해 왕복 1건 — 같은 본문 되쓰기 edit → 40초 내 완료 회신,
board.md해시 불변 (고객 게시글 무변경. 게시 허용시간 08~20시라 발송 자체도 없음) - 야간 파이프라인
--skip-p1 --dry실측 — 규칙 35건 + 서브에이전트가 STT 오인식 4건 추가 발굴 (신형 광주→신영 광주,롯데 화성혁남→롯데 화성 향남), KB 12건, 2.6분
배포 중 잡은 회귀 (운영 실측)
숨김이력은 현장 묶음이 682장이라 ⊞ 전체 펼침이 /api/worklog/items를 한꺼번에 쏘고
상당수가 502로 떨어졌다(2주 창일 땐 수십 장이라 안 드러나던 문제). 모든 항목 조회가 지나는
loadItems 한 곳에 큐를 두고 동시 6개만 흘려보내 해결 — 전체펼침·검색펼침이 함께 보호된다.
complete에서 큐를 풀어 실패해도 막히지 않는다. 재검증 = 콘솔 오류 0.
함정 · 규칙 (신규)
api/config.py는 브랜치 간 파일 통째 포워드 금지 — master엔 미배포monthly_close네임스페이스가 있어 그대로 가져오면 운영이 임포트에서 죽는다. 이 파일만 deploy-live에서 해당 2블록을 직접 추가했다. (다른 파일은 두 브랜치가 동일해git checkout origin/master --로 안전.)- 감시 데몬은 상승권한이라 코디가 재시작 못 한다(
Stop-Process액세스 거부, PID 2204 pythonw). → 예약작업PFS-KakaoBoard-Sync(1분, 숨김 vbs)를 예비 경로로 두어 구버전 데몬이 떠 있어도 웹 편집이 반영되게 했다. 데몬 안 호출과 겹치지 않도록 싱글턴 락 47312. - 대량 카드 화면에서 일괄 XHR = 502 — 창을 넓히는 기능을 추가할 땐 펼침 경로의 동시성을 같이 본다.
schtasks를 git-bash에서 부르면/Create가 경로로 변환된다 →MSYS_NO_PATHCONV=1접두.
⏳ 페페 몫
- 감시 데몬 재시작(관리자 권한) → watcher 안의
pfs_sync()가 살아난다. 지금은 1분 예약작업이 대신하고 있어 기능은 정상 동작한다(재시작은 정리 차원). - devplan
kakao-ops.html(로컬 8799)과 PFS 카톡관리 탭이 둘 다 살아 있다 — 같은 board.md를 본다. 로컬 페이지를 접을지 유지할지 결정. - pfs-test DB에 E2E 잔여 방 2건(
__E2E …__)이 남아 있다(테스트 환경 한정, 삭제는 승인 필요).