# NutriCoach r44 customer UX production result

## Production identity

- Candidate: `62f33e7d4bff114082c4b7be8f3f5e9c9b0a29c2ae4e181a5387105693338d38`
- Package: `f41d43bc89b8faec168e9dd051a746aada436f741dfce7f3dba59022f8872668`
- Transaction receipt:
  `sha256:7eba627baefbe15e5745cce87114f2617f7c317c72af12358d1946fad481587a`
- Runtime: `.strict-runtime/62f33e7d-v150/venv`
- Service: active/running, NRestarts 0
- Telegram: two established API sockets
- Authority event count: 20
- Capacity: 5; enabled customers: 1
- Weekly authority:
  `data/weekly-operations-authority-62f33e7d4bff1140`
- Channel Inbox: OFF
- Authorization: CONSUMED/SUCCEEDED
- Execution: COMMITTED

## Stability evidence

- Reproducible exact wheel pairs: PASS
- Immutable verifier: PASS
- Rehearsal: 13/13 PASS, external events 0
- Independent closure, authority, and installed-wheel UX audits:
  unconditional PASS, blocker count 0
- Source and installed-wheel UX regression suites: 185 passed
- Installed production-wheel customer smoke: PASS
- Smoke Telegram sends: 0
- Smoke network events: 0
- Replay: denied before mutation

## Operator procedure for one real customer

1. Agree on a stable ASCII `customer_key`, display name, service start date,
   preferred daily check-in time, weekly review weekday, monthly review day,
   provisional calories/protein, and ordinary meal labels.
2. Create a private draft JSON owned by the operator with mode `0600`.
   Provisional nutrition values are onboarding inputs, not a medical
   prescription; the completed questionnaire and owner review remain
   authoritative.
3. Issue one 24-hour, single-use invite:

   ```bash
   /home/cube/.hermes/profiles/dualcoachtest/.strict-runtime/62f33e7d-v150/venv/bin/dualcoach_admin \
     customer invite \
     --profile-root /home/cube/.hermes/profiles/dualcoachtest \
     --draft /ABSOLUTE/PRIVATE/customer-draft.json \
     --json
   ```

4. Send only the returned `customer_link` to the intended customer.
5. The customer opens the link in Telegram private chat and confirms the
   customer identity.
6. The customer reads the privacy notice and chooses
   `동의하고 영양 온보딩 시작`.
7. The customer completes the guided questionnaire. They may use `이전`,
   `건너뛰기`, or `나중에 계속`; unclear answers stay on the current
   question with an example.
8. The customer reviews the summary and confirms it. This moves the record to
   owner review; it does not activate coaching automatically.
9. The owner checks safety-sensitive answers, goal feasibility, Telegram
   membership evidence, and the activation checklist. Complete the
   evidence-bound membership preflight/finalize/verify and customer activation
   commands; never bypass a failing evidence gate.
10. Confirm the customer receives the activated customer menu and can open
    `오늘 체크인`.
11. During the first check-in, confirm one save receipt and no duplicate event.
    Use `오늘 체크인 수정` for corrections rather than entering a second
    independent record.

## Customer message

안녕하세요. NutriCoach 등록이 준비됐습니다.

아래 초대 링크는 24시간 동안 한 번만 사용할 수 있습니다. 링크를 눌러
Telegram 개인 채팅에서 본인 확인과 개인정보 처리 동의를 진행해 주세요.

동의 후 약 5분 정도의 기초 문진이 시작됩니다. 모르는 항목은 예시를
참고하고, 선택 항목은 `건너뛰기`, 잠시 멈추려면 `나중에 계속`을 누르면
됩니다. 문진을 마치면 입력 내용을 확인해 주세요.

문진 완료 후 운영자가 안전성과 설정을 검토하며, 활성화가 완료되면
`오늘 체크인` 메뉴를 안내해 드립니다.

## Draft example

```json
{
  "customer_key": "customer_002",
  "display_name": "고객 이름",
  "starts_on": "2026-09-01",
  "daily_time": "08:00",
  "weekly_weekday": 0,
  "monthly_day": 1,
  "calories_kcal": 2000,
  "protein_g": 120,
  "meals": ["아침", "점심", "저녁"]
}
```

Replace every sample value before issuance. Do not reuse a draft customer key,
invite link, bootstrap session, or consumed activation evidence.

## Observation

- Window: 2026-09-01 00:00 through 2026-09-08 00:00 KST
- Cadence: every ten minutes
- Output: `observer-r44`
