# RALPLAN-DR: 듀얼코치 단일 고객 유료 파일럿 실행계획

## Status
- Mode: deliberate
- Source spec: `.gjc/_session-019f8455-334a-7000-99ca-318dfd0e06b1/specs/deep-interview-dual-coach-single-customer-pilot.md`
- Planning only; pending approval
- Planner fallback: persisted Planner subagent failed twice before producing an artifact; parent synthesized this stage from the approved spec and inspected code context.

## Principles
1. 실제 고객 활성화보다 데이터 격리·권한·동의·사람 승인 경계를 먼저 증명한다.
2. 기존 개인 체크인 경로를 수정 최소화하고 고객용 기능은 독립 모듈과 고객별 저장소로 유지한다.
3. 첫 4주의 핵심 반복 루프만 자동화하고 월간·다중 고객·B2B 기능은 보류한다.
4. AI는 판단 보조와 근거 초안만 담당하며 최종 전송 권한은 Richard님에게만 둔다.
5. 모든 성공지표와 최종 전송문은 감사 가능한 단일 기록원에 남긴다.

## Decision Drivers
1. 첫 외부 유료 고객의 안전과 신뢰
2. 체크인 80%·만족도 8점·재결제·주 60분 이하를 실제 증거로 판정할 수 있는가
3. 기존 Hermes/개인 최코치 경로를 깨뜨리지 않고 빠르게 출시할 수 있는가

## Viable Options
### A. Telegram 중심 + 읽기 전용 운영 보고서
- 장점: 변경량과 공격면이 작고 기존 흐름을 최대한 재사용한다.
- 단점: 근거 확인·수정·승인·전송이 여러 도구에 흩어지고 운영시간 목표를 검증하기 어렵다.

### B. Telegram 고객/트레이너 입력 + Richard님 전용 내부 웹 승인 콘솔 (선택)
- 장점: 입력 채널은 익숙한 Telegram을 유지하면서 근거·초안·수정·승인·전송·KPI 기록을 한 운영 표면에 모은다.
- 단점: 내부 인증, CSRF/재전송 방지, 상태 일관성, 웹 장애 시 수동 전환을 새로 설계해야 한다.

### C. 외부 공개 다중 역할 웹 플랫폼
- 장점: 장기적으로 다중 트레이너와 B2B에 유리하다.
- 기각: 고객 1명 검증 전에 인증·권한·고객 포털·외부 배포 범위를 과도하게 확대한다.

## Decision
Option B를 선택한다. 웹은 SSH 터널/서버 내부 전용이며 `근거 조회 → 초안 수정 → 승인 → 중복 없는 전송 → 최종문 기록`과 핵심 KPI 입력·조회만 제공한다.

## Phase 0: 출시 차단 조건과 현재 구현 차이 확정
### Files
- `/home/cube/.hermes/profiles/physique-coach/SOUL.md`
- `/home/cube/.hermes/profiles/physique-coach/knowledge/README.md`
- `/home/cube/.hermes/profiles/physique-coach/workspace/checkin_cli/checkin_cli/customer_coaching.py`
- `/home/cube/projects/richard/hermes-agent/gateway/platforms/nutrition_coaching.py`
- `/home/cube/projects/richard/hermes-agent/gateway/platforms/telegram.py`

### Work
- RTF `2026-07-21` 이후 요구사항과 승인된 PDF/딥인터뷰 명세를 기능 매트릭스로 대조한다.
- 현재 고객 레지스트리·동의·주소·초안·전송·삭제·백업 경로를 확인하고 신규/재사용/보류로 분류한다.
- 실제 AI 제공자의 학습·보존·처리지역·재위탁 조건과 버전형 동의문 필드를 확정한다.
- 노출 이력 Telegram 토큰 교체와 테스트 계정 검증을 실고객 활성화의 선행 게이트로 둔다.

### Acceptance
- 실고객 활성화를 막는 체크리스트가 코드/운영 절차와 1:1로 매핑된다.
- 미확인 provider 조건, 토큰 미교체, 주소 미검증, 동의 미승인은 모두 fail-closed다.

## Phase 1: 고객·트레이너 기록과 단일 고객 격리
### Files
- `/home/cube/.hermes/profiles/physique-coach/workspace/checkin_cli/checkin_cli/customer_coaching.py`
- `/home/cube/.hermes/profiles/physique-coach/workspace/checkin_cli/checkin_cli/wizard.py`
- `/home/cube/.hermes/profiles/physique-coach/workspace/checkin_cli/checkin_cli/wizard_models.py`
- `/home/cube/projects/richard/hermes-agent/gateway/platforms/nutrition_coaching.py`
- `/home/cube/projects/richard/hermes-agent/gateway/platforms/telegram.py`

### Work
- 기존 `nutrition_daily` 흐름을 60~90초 핵심 질문과 상태 기반 추가 질문으로 고도화한다.
- 트레이너 전용 30초 세션 기록(완료, 수행도, 계획 대비 강도, 통증, 운영자 확인사항)을 별도 권한·주소로 추가한다.
- 고객 체크인과 세션 기록을 `customer_key`, KST 날짜, 세션 식별자로 연결하되 append-only 수정 원칙을 유지한다.
- 비등록 발신자, 중복 Telegram 공간, 다른 고객/개인 기록 혼입을 fail-closed로 거부한다.

### Acceptance
- 고객 체크인과 트레이너 기록의 정상·누락·중복·수정·타인 접근 분기가 테스트된다.
- 고객 A 또는 개인 기록이 고객 B 컨텍스트에 0건 포함된다.
- 위험 신호가 있으면 일반 초안 생성이 중단된다.

## Phase 2: 근거 결합·피드백 정책·의사결정 이력
### Files
- `/home/cube/.hermes/profiles/physique-coach/workspace/checkin_cli/checkin_cli/customer_grounding.py`
- `/home/cube/.hermes/profiles/physique-coach/workspace/checkin_cli/checkin_cli/coaching_grounding.py`
- `/home/cube/.hermes/profiles/physique-coach/workspace/checkin_cli/checkin_cli/customer_reporting.py`
- `/home/cube/projects/richard/hermes-agent/gateway/platforms/nutrition_coaching.py`

### Work
- 12주 계획, 최근 고객 체크인, 트레이너 세션 기록, 승인된 최코치 지식만 고객별 초안 컨텍스트에 결합한다.
- 정상일은 짧은 확인, 변화·문제일은 확인한 사실·해석·오늘 행동·다음 판단시점이 포함된 상세 초안으로 분기한다.
- 초안, 사용 근거, 운영자 수정문, 최종 승인문, 전송 결과, 결정 이유, 재평가 날짜를 append-only로 기록한다.
- 피드백 생성과 고객 전송을 분리해 승인 없는 전송을 구조적으로 불가능하게 한다.

### Acceptance
- 같은 입력에서 분류·근거 선택·초안 정책이 결정적이며 근거 없는 단정이 없다.
- 승인 전 고객 전송 0회, 승인 후 정확히 1회, 재시도 중복 0회다.
- 위험·동의 철회·삭제 대기 상태에서는 초안/전송이 차단된다.

## Phase 3: Richard님 전용 내부 웹 승인 콘솔
### Files
- `/home/cube/projects/richard/hermes-agent/gateway/platforms/nutrition_coaching.py`
- `/home/cube/projects/richard/hermes-agent/gateway/platforms/telegram.py`
- 신규 내부 웹 라우트 모듈 1개(기존 Hermes 웹 프레임워크 위치 조사 후 확정)
- 신규 최소 HTML/JS 화면 1개(기존 자산 관례에 맞춰 확정)
- 해당 라우트/보안 테스트 1개

### Work
- localhost 기본 바인딩, SSH 터널 접근, Richard님 단일 운영자 세션을 구현한다.
- 미처리 초안 목록, 근거, 초안 편집, 승인, 전송, 최종문과 전송상태를 한 화면에 제공한다.
- 승인 요청에는 CSRF/재생 방지 토큰과 idempotency key를 적용한다.
- 웹 장애 시 기존 Telegram owner-only 수동 초안/전송 경로로 전환한다.

### Acceptance
- 비인증·외부 바인딩·변조·재생·중복 클릭이 모두 거부된다.
- 웹 승인과 Telegram 수동 경로가 동일한 전송·감사 저장 서비스를 사용한다.
- 고객 PII가 URL·브라우저 로그·일반 애플리케이션 로그에 나타나지 않는다.

## Phase 4: 주간 요약·파일럿 지표·온보딩
### Files
- `/home/cube/.hermes/profiles/physique-coach/workspace/checkin_cli/checkin_cli/customer_reporting.py`
- `/home/cube/.hermes/profiles/physique-coach/workspace/checkin_cli/checkin_cli/customer_schedule.py`
- `/home/cube/.hermes/profiles/physique-coach/workspace/checkin_cli/checkin_cli/customer_admin.py`
- `/home/cube/projects/richard/hermes-agent/gateway/platforms/nutrition_coaching.py`
- 해당 리포트/통합 테스트 파일

### Work
- 예정 체크인 분모, 완료 수, 피드백 응답시간, 운영자·트레이너 작업시간, 만족도, 최초 결제, 재결제를 단일 파일럿 기록원에 저장한다.
- 주간 요약에는 추세, 유지할 행동, 바꿀 행동, 다음 판단시점만 포함한다.
- 월간 자동 고객 전달은 비활성화하고 4주 종료 시 성공 판정만 생성한다.
- 고객 등록은 비활성 초안 → 주소 검증 → 동의 → 12주 계획 승인 → 테스트 전송 → 활성화 순으로 제한한다.

### Acceptance
- 성공 판정은 `재결제 AND 체크인율>=0.8 AND 만족도>=8 AND 주간 운영시간<=60분`으로 재현 가능하다.
- 지표마다 단일 소유자·타임스탬프·분모가 있고 누락은 성공으로 계산되지 않는다.
- 실고객 활성화 전 테스트 계정으로 예약→체크인→세션기록→초안→승인→전송→주간요약 전체가 검증된다.

## Verification Plan
### Unit
- 스키마·동의·주소 중복·적응형 질문·세션 기록·분류·idempotency·KPI 계산의 경계값과 오류 분기.

### Integration
- 고객과 트레이너 Telegram 주소가 각자 허용된 흐름만 실행하는지 확인.
- 고객 저장→트레이너 기록→grounding→초안→웹 승인→최종 전송의 실제 저장소 seam.
- 동의 철회·삭제 대기·위험 신호·웹 장애·모델 장애에서 fail-closed와 수동 전환.

### E2E
- 테스트 계정으로 KST 예약부터 주간 요약까지 전체 1회.
- 승인 전 전송 0회, 승인 후 1회, 중복 클릭/재시도 후에도 1회.
- 개인 코칭 전체 회귀와 고객 경로의 분리 검증.

### Observability
- 고객 키를 가명화한 이벤트 ID, 단계, 지연, 성공/실패, 전송 idempotency만 기록.
- 토큰·이름·Telegram ID·체크인 원문·건강정보는 로그 금지.
- 운영자 화면에서 미처리·실패·수동 복구 필요 상태를 확인.

## Pre-mortem
1. **오발송/혼입**: 주소 또는 customer_key 매핑 오류로 다른 사람에게 전송. 조기 신호는 주소 중복·예상치 못한 route miss. 완화는 비활성 등록, 주소 유일성, 테스트 전송, idempotent 단일 전송 서비스.
2. **과도한 운영시간**: 상세 피드백과 웹 관리가 주 60분을 초과. 조기 신호는 정상일 초안 수정률·미처리 증가. 완화는 정상일 짧은 확인, 예외만 상세, 작업시간 자동 기록, 2주차 범위 축소.
3. **동의/공급자 불일치**: 실제 provider 보존·학습 조건이 고지와 다름. 조기 신호는 약관 또는 계정 설정 미확인. 완화는 활성화 차단 체크리스트, 버전형 동의, 최소 필드 전송, 철회·삭제 runbook.

## Rollback and Manual Operation
- 신규 고객 기능은 고객 `enabled` 플래그와 별도 내부 웹 기능 플래그로 즉시 비활성화한다.
- 장애 시 자동 예약/웹 전송을 중지하고 owner-only Telegram 수동 경로로 전환한다.
- 이미 성공한 전송 claim/idempotency는 유지해 중복 전송하지 않는다.
- 개인 코칭 서비스와 저장소는 롤백 대상에서 분리한다.

## ADR
### Decision
Telegram 입력과 Richard님 전용 내부 웹 승인 콘솔을 결합한 최소 4주 운영 루프를 구현한다.

### Drivers
안전한 단일 고객 검증, 운영시간 통제, 감사 가능한 사람 승인.

### Alternatives considered
Telegram-only, 외부 공개 다중 역할 웹 플랫폼.

### Why chosen
Telegram-only보다 운영 일관성과 측정성이 높고, 공개 플랫폼보다 범위·권한·개인정보 위험이 작다.

### Consequences
내부 웹 보안과 전송 idempotency 구현이 추가되지만, 다중 역할·고객 포털·B2B는 보류된다.

### Follow-ups
4주 성공 후에만 월간 자동 리포트, 다중 고객/트레이너, 외부 인증, B2B를 재평가한다.

## Intent Reconciliation
- 딥 인터뷰에서 확정된 단일 고객, 월 15만원 송금, 외부 고객, 친구 트레이너, 12주 계획/첫 4주 일일·주간 운영, 내부 웹 접근, 사람 승인, KPI 논리곱을 그대로 유지한다.
- 새 제품 범위로 확대하지 않고 현재 코드 기반을 고도화한다.
