---
title: "핸드오프 — 코치 AI 에이전트 테스트반영 + 차감버그 + 잔여기능"
category: "handoff"
document_type: "핸드오프"
source_status: "generated"
knowledge_group: "03_history"
priority: "High"
purpose: "코치 채팅 유니버설 에이전트 야간작업 2차 인계. 사장님 실기기 테스트 결과를 반영(신발·운동시각 기록·저장에러노출·피드글편집·복수첨부·드래그앤드롭·이미지붙여넣기·기록수정)했고, 그 과정에서 ★코칭 차감 버그(free 계정인데 used_turns=0)를 서버 RPC 런타임에러로 좁혔다(콘솔 에러문구 대기). 남은 기능 3건(브리프탭갱신·프로필publication·복수피드공개)의 스펙과 현 상태·도구목록·주의사항을 다음 스레드가 즉시 이어받게 정리."
read_when: ["최신상태","핸드오프","코치AI","차감버그","tool-calling","에이전트","다음작업"]
updated: "2026-06-09"
work_timestamp: "20260609_092009"
context: "달록본레포CC (D:\\dallog\\dallog_git) — 야간 무인작업 2차 인계"
source_of_truth: "https://dallog-tools.hansbridge.co.kr/knowledge/"
---

# 핸드오프 — 코치 AI 에이전트 (테스트반영 + 차감버그 + 잔여기능)

## 0. 한 줄
코치 채팅이 기록 입력·수정, 테마, 프로필, 피드 글·기록공개, 브리프 생성을 전부 말로 처리한다(도구 11종 라이브). 사장님 테스트 갭 다수 반영 완료. **잔여 = 차감버그(서버 RPC) + 기능3건.**

## 1. ★최우선 — 코칭 차감 버그 (미해결, 서버측)
- **증상**: free 플랜 계정(`kakao_4930331697@kakao.dallog.kr`)이 is_unlimited=false·granted 30인데, 일반 코칭 대화 후에도 `used_turns=0` (차감 안 됨). owner(ccy8215)는 무제한이라 차감0이 정상.
- **확정한 것**: 클라이언트는 코칭 성공 시 `consumeTurn`을 정확히 호출(`src/hooks/useCoachChat.ts:413`). `coach_consume_turn` RPC 소스도 free=1회 차감이 맞음(`migrations/2026-06-07_coachchat_plan_billing.sql`). reset_cycle은 free 안 건드림, ensure_subscription은 멱등.
- **결론(추정)**: **배포된 `coach_consume_turn` RPC가 런타임 에러 → 클라가 조용히 삼킴**(`src/lib/coachChat/entitlement.ts:58` 에러를 console.warn만 하고 accepted=false·무차감 반환).
- **다음 스레드 할 일**: ① 사장님께 받을 콘솔 에러문구(`[coachChat] coach_consume_turn 실패: ...`)로 근본원인(테이블/컬럼 누락 vs 스테일 RPC) 확정 → RPC 재적용/수정. ② entitlement.ts 의 silent-swallow를 비silent로(빌링 무결성 — RPC 에러 시 무차감 무한 free 구멍). ③ `coach_thread_usage` 테이블/스키마 배포 여부 확인.

## 2. 이번에 반영한 것 (전부 main 머지·라이브)
- 사장님 1차 테스트 갭: **신발(shoe)·운동시각** 기록(러닝·근력), **저장에러 노출**(기존 [object Object]→실제 supabase 메시지), **피드 글 게시 전 내용 편집**(textarea) — PR#57.
- 입력방식 확장: **복수 파일 동시첨부·드래그앤드롭·클립보드 이미지 붙여넣기** — PR#58.
- **기능1 기존 기록 수정**(update_running/body/strength, 확인 후 update) — PR#60. 신규 `src/lib/coachChat/recordEdit.ts`.
- (이전 야간 1차: S0~S5b·S2 = 기록입력·테마·프로필·피드글·기록공개·브리프. 핸드오프 `20260608_193300` 참조.)

## 3. 현재 코치 도구 11종 (워커 라이브)
log_running / log_body / log_strength(+shoe·시각) · set_theme · update_memory_profile · create_feed_post · publish_record_to_feed · generate_brief · update_running / update_body / update_strength.
- 워커 `dallog-chat-proxy` 최신 배포 = **8d3f08d2** (feature1 update 도구 포함). 하위호환(enableRecordTools 게이트). 수동 wrangler 배포.
- main 최신 = PR#60 머지본. 워커/main 동기.

## 4. 남은 기능 3건 (스펙)
### 기능4. 복수 기록 피드 공개 [거의 됨 — 30분]
- "근력 3일치 자랑"(T-C_Special). **린 설계 확정**: publish_record_to_feed 에 `count`(INTEGER 2~5) 추가 → count>1이면 최근 N건을 요약한 텍스트 글 1건(첨부없음, buildFeedPost 재사용), count<=1이면 기존 단건 첨부 경로. 워커 도구에 count 파라미터 추가 + useCoachChat publish 분기에 count 처리(미커밋 시도분 있었음, 되돌림). 가장 먼저 닫기 권장.

### 기능3. 프로필에 대시보드 공개 [중·통합]
- "현재 대시보드를 프로필에 공개"(T-D_3). 피드 글이 아니라 `src/lib/publications.ts` 의 **createPublication**(kind:dashboard/history, section, range, snapshot 동결). 난점=스냅샷 빌드(loadPublishSource/buildSnapshotFor 가 대시보드 데이터 의존). publish_to_profile 확인액션 + publications 스냅샷 빌드 재사용.

### 기능2. AI브리프 탭 실제 갱신 [대·통합]
- "AI브리프 탭 내용 갱신"(T-D_2). 현 generate_brief 는 채팅 텍스트만. 실제 AI브리프 탭은 `src/pages/CoachNotes.tsx` 가 **구조화 VisualBrief**(내일운동·영양·주간평가 등)를 records(category='brief')에 저장하는 큰 기능. 채팅에서 갱신하려면 CoachNotes 의 brief 생성·저장 로직을 lib 로 추출 후 도구가 호출. 가장 무겁다 — 별도 집중작업.

## 5. 알려진 caveat (버그 아님)
- **저장 게이트 OFF**(`storageGate.ts` enabled=false): update_memory_profile(프로필 저장)이 게이트로 막힘 — 기존 수동 편집기도 동일. 개인정보 보호장치 5종 완비+플래그 후 작동.
- **상대날짜 오추출**: gemini-2.5-flash 가 "어제"를 오늘로 종종 잘못 변환. 기록입력 카드는 날짜 편집칸으로 보정 가능. 수정/공개(update/publish)는 recorded_at 미스매치 시 "기록 없음" 안내 → 사용자가 날짜 특정.
- **T-B(F) 저장실패**: 에러가 [object Object]로 가려져 있던 것 수정 완료 → 재시도 시 실제 에러 표출. 근본원인은 그 에러문구 받아야 확정.
- **owner 계정 무차감 정상**(ccy8215=owner). 차감 검증은 비-owner(kakao) 기준.

## 6. 작업 규칙(다음 스레드)
- §6 git: pull 금지(fetch→분기), reset/checkout(discard)/add . 금지, 수정파일만 명시 스테이징. 슬라이스별 브랜치→커밋→PR→`gh pr merge --merge --delete-branch`.
- 워커 배포: `cd workers/chat-proxy` → pwd+grep 확인 → `npx wrangler deploy` → curl 스모크. 하위호환 유지.
- 슬라이스 종결: 빌드(tsc+vite) → Codex 검수 루프(무결점) → 머지. 확인흐름 패턴 = pendingRecords/Profile/Post/Edit (제네릭 통합은 미래 리팩터).
- 패턴/지형 상세 = 본레포 `docs/go_work/20260608_coachchat_universal_agent_spec.md`.
