# Task 5 — Migrate bootstrap and onboarding to customer DM

## Outcome

PASS. Customer-facing onboarding publication, ForceReply, activation notices, check-in,
and coaching routes use the canonical customer DM. Trainer and owner routes remain on
their staff-only topics.

## Candidate

- Aggregate SHA-256: `4fe733b3746e6a499b9381ab0482e8d98a7e6db99a189f8952d29a9582262f4f`
- Files:
  - `gateway/platforms/telegram_nutrition_onboarding_runtime_authority.py`
  - `gateway/platforms/telegram_nutrition_onboarding_runtime_collection.py`
  - `gateway/platforms/telegram_room_bootstrap_activation.py`
  - `gateway/platforms/telegram_activation_notice.py`
  - `tests/gateway/test_telegram_nutrition_onboarding.py`
  - `tests/gateway/test_telegram_activation_notice.py`
  - `tests/gateway/test_telegram_room_bootstrap_activation.py`

## Automated verification

- Exact seven-file onboarding/activation group: `94 passed`
- `tests/gateway/test_nutrition_coaching.py`: `113 passed`
- Ruff on the candidate scope: PASS
- BasedPyright on primary changed files: `0 errors` (`286 warnings`)
- Independent automated verifier: `agent://st_019fd807`
- Existing unrelated residual: `tests/gateway/test_adaptive_nutrition.py` exceeded its
  existing 140-second per-file budget at 64% without an assertion failure; Task 5 did
  not modify that residual.

## Real-surface manual QA

Independent no-file driver `agent://st_019fd80e` invoked the real
`TelegramNutritionOnboardingRuntime._send_publication` and `_route` methods and exited
zero:

```text
CUSTOMER_DM 10 0
FORCE_REPLY_ANCHOR 35
TRAINER_STAFF ('-100', '71')
OWNER_STAFF ('-100', '90')
PASS task-5 publication driver
```

The driver also proved the publication was committed rather than marked uncertain.

## Adversarial and cleanup receipt

- Wrong-surface and route negatives passed in the exact 94-test group.
- Customer DM topic normalization is canonical `0`.
- Staff routes stayed `-100/71` and `-100/90`.
- The manual verifier created or modified no files and left no process, customer,
  credential, or runtime state.
- No commit, push, reset, stash, clean, release activation, or customer delivery occurred.
