← 문서 허브 · 🔧 엔진 상태

코칭 엔진 — 현재 구현 + 문제 (2026-06-20)

새벽 크론이 매일 아이마다 편지 1통·질문 1개를 생성하는 파이프라인의 정확한 동작과, 자가정독(랄프위검)이 지목한 천장들의 근본 원인·코드 위치. 이사님이 전체를 보고 해결하기 위한 단일 진실.

0. 한눈에 — 매일 일어나는 일

새벽 크론 app/api/cron/coach/route.ts 가 활성 아이마다:
신호 수집 — meal_logs(끼니·식재료·수용도·환경)·daily_questions(어제 답) 읽어 잘먹는음식·결핍군·선호상태 산출
주간 닻(일요일만) — runWeeklyPlanning(Sonnet LLM)이 이번주 mission_target·레버·goals·소견 → enrichWeeklyPlan(결정론)이 7일치 구체 dish 슬롯·거울 스케줄 구움(weekly_plans.plan_detail)
커리큘럼 진척advanceProgress가 오늘 유닛 결정(deepen/advance/pivot/celebrate)
일간 두뇌pickActionByBrain이 오늘 시나리오·레버·음식추천여부(useFood) 결정
작문composeLetter가 위 전부를 프롬프트로 묶어 DeepSeek(intro만 Sonnet)로 편지 생성 → 안전·유사도·must-weave 가드로 재생성
오늘의 질문 — focus 유닛의 신호 프로브를 던져(P0-D) 답이 다음날 진척 신호로 흐르게

1. 모듈별 정확한 동작

① 신호 수집 + 선호계량화 출고

lib/preferenceQuantification.ts — 수용도를 식재료별 상태(liked/exploring/unknown/disliked)·Wilson 하한·집필터로 정량화. 핵심: 미상(null)을 liked로 오판 차단 — 명시 완식(acceptance_level≥3 또는 ate_well=true)이 ≥2회+Wilson 통과만 'liked'.

② 커리큘럼 상태기계 출고

lib/curriculumUnits.ts(12유닛 선언=명세)·lib/curriculum.ts(advanceProgress 순수함수). 각 유닛이 steps[].passWhen(evidence)로 졸업, extract가 meal_logs+프로브답에서 신호 산출.

③ 주간계획 — LLM 종합 + 결정론 enrich 출고

일요일에만. runWeeklyPlanning(Sonnet)=mission_target·budget(레버)·goals·impression(코치 내부 소견) 산출. enrichWeeklyPlan(coachWeekly·LLM0)=7일치 plan_detail: 구체 dish 슬롯 회전(supply 결핍보급 2 : challenge 잘먹는음식 사촌 1)·BMI/탄단지 macro·거울 스케줄.

④⑤ 일간 두뇌 + 작문(F-18 슬롯본문봉합) 부분

pickActionByBrain이 오늘 시나리오(예 nutrient-gap·mealtime-atmosphere)·useFood(음식추천 여부)를 정함. composeLetter가 프롬프트 조립:

⑥ P0-D 환경신호 다리 출고(다리만)

pickUnitProbe(coachDaily) — ICFQ 아닌 날 오늘 focus 유닛의 신호 프로브를 결정론 질문으로 던지고 daily_questions.context.unitProbe에 키 박음. 부모가 답하면 parseProbeAnswersadvanceProgress→유닛 extract로 흘러 envTablePct 등 표본 축적. 유닛 내 2프로브 일별 회전.

⚠️ 다리만 깔림 — 실제 진척은 부모가 답을 줘야 발생. 아린(시뮬)은 양성신호 0이라 envTablePct가 null→실수로만 바뀌고 0.4 미달.

2. 문제 — 랄프위검 천장 (연속성 52→48→44 하락)

핵심 통찰: 인프라(선호계량화·신호 다리·피벗·카테고리 정합)는 깔렸으나, 아린 시뮬은 양성신호 0이라 letters가 본질적으로 정체를 비춘다. 최근 라운드의 통독 품질 패치(변주·lever정합·일째단조)는 같은 정체를 더 또렷이 노출해 점수가 오히려 내려갔다. 분류: 실데이터 대기 코드 버그 다른 세션(coachRecos)

#1 슬롯-본문 음식 이혼 버그(부분봉합)

비-콩류 슬롯(치즈·메추리알 challenge) 날 메타는 슬롯 음식인데 본문은 두부로 회귀 → 메타-본문 이중장부.

근본(실측 06-16): brain.useFood=false(음식 쉬는 날)인데 최종 시나리오=home-daycare-gap(콩류 채우라는 음식 시나리오)로 모순. useFood=false라 slotFood=null이 돼 슬롯 강제가 풀리고, 시나리오 promptHint(coachScenarios.ts:116 "집에서 비는 식품군 1개에 행동을 두라")의 콩류→두부가 이김.

이번 봉합(route.ts:853): 음식-제안 시나리오(home-daycare-gap/nutrient-gap/repeat-menu)는 어차피 음식을 권하므로 _noFood를 끄고 슬롯 음식 강제. 남은 근본: brain.useFood ↔ 최종 scenario ↔ curriculum unit 3자가 독립 결정돼 모순 가능(별도 EPIC — brain이 useFood=false면 시나리오도 환경이어야).

#2 step 24일 1단 고착 — 전진 0 실데이터 대기

커리큘럼이 피벗(table↔exposure)은 하나 step 1단→2단 전진이 24일 0회. '다음:' 목표 문구가 글자까지 불변.

근본: passWhen 졸업 게이트가 아린 양성신호 0개(완식·환경 신호 미입력)로 영영 미충족. P0-D 다리는 깔렸으나 부모가 실제로 답·기록을 줘야 envTablePct가 임계(0.4)를 넘어 졸업. 코드 문제 아님 — 실데이터 필요. 일째단조 수술(전역 캠페인일)이 정체를 더 또렷이 보이게 함(숫자↑·단계 불변).

#3 두부 단일 디폴트 과포화 coachRecos·다른 세션

슬롯이 검은콩·메추리알·치즈·단호박으로 회전해도 본문 추천은 두부·달걀 2종에 46% 쏠림. '미역국+두부' 동일 문장 반복.

근본: 콜드스타트 시드(coachRecos.coldStartSeed)가 확신 liked 0개라 Tier2(자주 차려진=두부·달걀)에 수렴, Tier3 youa 큐레이션이 실추천으로 안 빠짐. 추천 풀 후보가 콩류 deficit→두부로 좁음. coachRecos는 현재 다른 세션이 개발 중(메뉴 정제·괴식 필터) — 충돌 회피로 미관여.

#4 7일 주기 무브/피벗 복붙 실데이터 대기일부

table↔exposure 교대가 진척이 아니라 같은 트랙 두 바퀴. 06-11≈06-18 무브·추천·피벗문구 완전 동일.

근본: 환경 무브풀 작고(7종으로 확장했으나) table-stage가 정체라 7일 주기로 같은 순열 재진입. 근본은 #2(정체)이고, 정체가 풀리면(실데이터) 자연 해소. 안티반복 윈도를 7일+로 넓히면 부분 완화 가능(코드).

#5 급식 안심·영양거울 후렴구 과다(17/24통) 구조

"어린이집 덕에 전체 영양 채워지고…"가 17통에 박힘. 변주 수술이 어절만 흔들고 출현빈도 자체는 안 줄임.

근본: 영양거울이 매일 무조건 1줄 삽입되는 구조(쿨다운/생략 게이트가 결핍줄 출현빈도엔 미적용). LLM 자체 기본 클로징 습관도 가세. 해결: 거울 결핍줄에 '최근 N일 출현이력 쿨다운'(생략 게이트)을 걸어 매일 출력을 막아야 — 변주가 아니라 빈도 감소.

#6 도입 훅 "부모님," 수렴(17/24) 코드

편지 첫 문장이 "부모님," 호명으로 수렴(후반 8/9). 도입 소재가 매일 달라야 하는데 한 종류로.

근본: 편지 빌더에 도입 훅 회전 풀이 없음(시간대·소재·질문형 회전). 해결: 도입 hook 선택기를 daySeed·소재로 회전(프로브회전을 첫문장에 연결 가능).

#7 macro(BMI/탄단지) 트랙 dead — 24통 0회 실데이터+배선

이사님 5조건 중 'BMI보고 저체중이면 고기류↑'가 본문에 한 번도 안 나옴. enrichWeeklyPlan의 macro 트랙이 plan_detail엔 있으나 일일 편지 본문 산출 경로에 미배선 + 아린 성장데이터(키·몸무게) 부재로 게이트 영영 false(profileNudge도 미도달=input starvation).

3. 무엇이 준비됐고 무엇이 대기인가

영역상태다음
선호계량화 캡처→정량화✅ end-to-end 라이브실데이터 유입 대기
P0-D 환경신호 다리✅ 다리 라이브부모 답 유입 시 졸업 작동
커리큘럼 피벗·온보딩✅ 라이브전진은 #2(실데이터)
F-18 슬롯본문봉합🟡 부분(#1 봉합)brain↔scenario↔unit 정합 EPIC
추천 풀 다양성🟣 coachRecos(다른 세션)Tier3 youa 큐레이션 배선
거울/도입 후렴구 빈도🔴 미해결(#5·#6)출현이력 쿨다운·도입 훅 회전
macro 트랙🔴 dead(#7)성장데이터 nudge + 본문 배선

전략적 결론: 아린(양성신호 0) 시뮬 폴리싱은 바닥에 도달 — 더 패치하면 정체를 더 또렷이 비출 뿐(점수 역효과). 진짜 개선은 실제 부모가 5단계 수용·환경 신호를 줄 때 인프라가 작동하며 나온다. 코드로 더 잡을 것: #1 잔여(정합 EPIC)·#5(거울 빈도 쿨다운)·#6(도입 훅 회전)·#7(macro 배선). #3은 coachRecos(다른 세션).

밀프레드 코칭 엔진 · 2026-06-20 · 단일 진실(이사님 검토용)