---
title: "작업보고 — 코치 AI 에이전트 잔여 기능 4종 + 차감 진단 완료"
category: "workreport"
document_type: "작업보고"
source_status: "generated"
knowledge_group: "03_history"
priority: "High"
purpose: "핸드오프 #32가 잔여로 넘긴 코치 AI 에이전트 4종(복수 기록 피드공개·프로필 대시보드/기록 공개·코치챗 브리프의 브리프탭 실제 갱신)과 차감 버그 진단을 구현·검수·머지한 작업보고(PR#61~64). 코치 채팅 하나로 기록·수정·피드공개·대시보드공개·브리프생성까지 처리하는 유니버설 에이전트 1차 범위 완료. 도구 턴 무차감 과금모델 쟁점 포함."
read_when: ["코치노트AI","최신상태복구"]
updated: "2026-06-09"
work_timestamp: "20260609_101434"
context: "달록본레포CC (D:\\dallog\\dallog_git) — 코치 AI 유니버설 에이전트 잔여기능 4종(PR#61~64)"
source_of_truth: "https://dallog-tools.hansbridge.co.kr/knowledge/"
---
# 작업보고 — 코치 AI 에이전트 잔여 기능 4종 + 차감 진단 완료

## 한 줄 요약

핸드오프 #32 가 "잔여"로 넘긴 **차감 버그 진단 · 기능4(복수 기록 공개) · 기능3(대시보드 공개) · 기능2(브리프 탭 실제 갱신)** 를 모두 구현·검수·머지했다. 코치 채팅 하나로 "기록·수정·피드공개·대시보드공개·브리프생성"까지 말로 처리되는 유니버설 에이전트의 1차 범위가 닫혔다.

## 배경

비개발 사장님께 드리는 쉬운 설명: 코치 채팅창이 단순 상담을 넘어, **앱에서 손으로 하던 일을 말로 시키면 대신 해주는 비서**가 되도록 만드는 작업이다. 이번에 그 비서가 할 수 있는 일을 4가지 더 늘렸고, "코칭 횟수가 안 깎인다"던 현상의 원인도 코드로 규명했다.

## 완료 항목 (PR 기준)

### 1) 기능4 — 복수 기록 피드 공개 (PR #61, 머지)
- "최근 근력 3일치 피드에 올려줘"처럼 **여러 기록을 한 번에 자랑**하면, 최근 N건(2~5)을 한 줄씩 모은 글 1건을 미리보기·확인 후 발행.
- 워커 `publish_record_to_feed` 에 `count` 파라미터 추가(배포 완료).
- Codex 검수 4건(High1·Medium2·Low1) 전부 반영: 실수 count 정수화(`Math.trunc`), 날짜+복수 동시 지정 재확인(엉뚱한 기록 외부공개 방지), 280자 줄단위 절단, 후보 부족분 명시.

### 2) 차감 진단 — RPC 에러 침묵 제거 (PR #62, 머지)
- **결론(코드 기준)**: 차감 RPC(`coach_consume_turn`)·RLS UPDATE 정책·free 차감 경로는 모두 정상. 핵심은 **기록/액션 도구가 호출된 턴은 설계상 차감하지 않는다**(`useCoachChat.ts` — 도구 턴은 원가만 로깅, 코칭 회 차감 없음). 테스트가 대부분 기록 입력·도구 호출이었다면 차감이 안 되는 게 정상 동작이다.
- 그럼에도 `consumeTurn` 이 RPC 호출 실패를 모두 `'no_user'` 로 뭉뚱그려 삼키고 있어, **순수 코칭 턴에서 진짜 에러가 나도 안 보였다.** → `'rpc_error'` 사유로 구분하고 `console.error` 로 전체(message/details/hint/code) 로깅하도록 비침묵화.
- **남은 확인(사장님 액션)**: 순수 코칭 질문(도구 호출 없는 일반 상담) 1회 후에도 잔여 회가 안 줄면, F12 콘솔의 `[coachChat] coach_consume_turn RPC 실패:` 문구를 알려주시면 서버측 원인을 특정한다.
- **열린 제품 결정**: "도구를 부른 턴은 무료"가 의도된 과금 모델인지(데이터 입력=무료, AI 코칭 지능=유료) 확정 필요. 유니버설 에이전트에서 도구 턴 비중이 커지면 과금 정책에 직접 영향.

### 3) 기능3 — 프로필 대시보드/기록 공개 (PR #63, 머지)
- "체성분 대시보드 프로필에 공개해줘", "최근 한 달 러닝 기록 자랑하게 올려줘"처럼 **영역 종합 현황(대시보드)·기록 모음을 프로필 공개본으로 발행**.
- 워커 `publish_dashboard` 도구 추가(section 필수, kind/range/title/is_public 선택, 배포 완료).
- 기존 `publications.ts`(loadPublishSource→buildSnapshotFor→createPublication) 100% 재사용. 현재 데이터로 스냅샷 동결 후 **확인 카드** 노출(외부 공개라 확인 필수). 개별 1건 공개(`publish_record_to_feed`)와 명확히 분리.
- Codex 검수 **Pass(결함 0)**.

### 4) 기능2 — 코치챗 브리프가 브리프 탭을 실제 갱신 (PR #64, 머지)
- "브리프 만들어줘" 한마디로, 채팅 버블 간이 요약이 아니라 **브리프 탭의 진짜 브리프(6-섹션 prose + 시각화 카드)가 생성·저장**된다.
- CoachNotes 안에 있던 브리프 파이프라인을 React 비의존 `src/lib/coachChat/briefGenerate.ts` 로 **그대로 이동**하고 `generateAndPersistBrief`·`loadAiInstructions` 추가. CoachNotes·코치챗이 같은 lib 를 공유.
- 회귀 안전성 직접 검증: 지침 로드 매핑 동일, 이동 함수 바이트 동일(빌드가 전 참조 검증), `briefGenerate` 는 supabase 만 의존하는 leaf → 순환 import 없음.

## 검증

- 매 슬라이스 `npm run build` 통과, 워커 2회 재배포(`count`·`publish_dashboard`).
- 기능4·3 은 Codex 적대적 검수 반영/Pass. 기능2 는 Codex 도구 응답 지연으로 핵심 위험점(매핑 등가·순환·고아제거)을 빌드+코드로 직접 확정.
- main 머지 시 CF Pages 자동 배포.

## 시스템 프롬프트 버전

`rc2-11-recordedit` → `rc2-12-multipublish` → `rc2-13-pubdashboard`.

## 사장님 테스트 가이드 (쉬운 말)

1. **복수 자랑**: 코치챗에 "최근 러닝 3일치 피드에 올려줘" → 모아진 글 미리보기 뜨면 확인.
2. **대시보드 공개**: "체성분 대시보드 프로필에 공개해줘" → 공개 확인 카드 → 프로필에서 확인.
3. **브리프**: "브리프 만들어줘" → 코치노트 브리프 탭이 새 브리프로 갱신됐는지 확인.
4. **차감**: 도구 안 부르는 **순수 상담**(예: "요즘 컨디션 어때 보여?") 1회 후 잔여 회 변화 확인. 안 줄면 F12 콘솔 문구 공유.
