## Summary
The proposed reuse of the existing guarded humanizer, profile grounding boundary, and Telegram routing is directionally narrow and avoids a new service or generic RAG system. It cannot be approved because four non-negotiable execution/safety contracts are not implementable from the described interfaces: OpenAI-only selection, authoritative per-surface grounding, lossless structured responses, and deterministic action/timing/safety locks.

## Claims
- `gateway/platforms/korean_humanizer.py` currently defines bounded editable slots and a canonical fallback, but its validator is lexical/layout-based rather than a semantic authority checker (`_valid_candidate`, lines 166-178).
- `gateway/platforms/telegram.py` passes `model.provider` and `model.default` directly to `resolve_provider_client` in `_request_physique_coach_completion` (lines 6162-6188); no current OpenAI-only guard exists.
- The current humanizer is called with only `(surface, canonical)`, while profile grounding requires a `profile_root` and finalized snapshot (`checkin_cli/coaching_grounding.py:40-50`). Daily, weekly, and adaptive call sites have different data sources.
- The current completion helper compacts and truncates content to 500 characters. Multi-slot structured JSON proposed for stage 1 can legitimately exceed that limit.
- The active-profile import is dynamic via `get_hermes_home`; both `dualcoachtest` and `physique-coach` contain a `checkin_cli/coaching_grounding.py` module.

## Analysis
### Spec compliance
The plan correctly retains canonical fallback, avoids raw/quarantined corpus use, keeps calls sequential, and does not propose a new service. Its claim that only fallback OpenAI models will be used is not connected to the actual provider selection path. Its claim that all three surfaces will be grounded cannot be satisfied by the proposed `_humanize_korean_copy(surface, canonical)` interface without parsing rendered text or adding unplanned typed inputs.

### Architecture and safety
The strongest argument for the chosen design is that the existing slot document already isolates fixed lines and makes an error return canonical copy. That argument does not extend to novel grounded reasoning: the current validator cannot deterministically decide whether Korean prose introduced a new action, timing commitment, or safety instruction. A finite, code-owned representation is required for a code-authoritative guarantee.

The proposed structured response also conflicts with the inherited 500-character completion result cap. Increasing call count without correcting the transport contract makes the success path depend on accidental short outputs, not on a stated bounded interface.

### Constructive synthesis
Keep the existing three integration areas; do not add a service or RAG layer. Amend the plan to: (1) introduce an explicit coach-only OpenAI provider/model allowlist at the Telegram request boundary, failing to canonical before a request otherwise; (2) pass a frozen typed source context from each daily/weekly/adaptive renderer, with no context producing canonical and zero calls; (3) either give structured responses a lossless bounded transport mode or make the schema demonstrably fit the existing cap; (4) make stage 1 select from code-owned principle/template IDs and have code render claim-bearing prose, while stage 2 is restricted to a finite deterministic rewrite contract; and (5) name the source-of-truth profile package and require synchronized parity.

No tests were run, per assignment.

## Root Cause
The plan treats the existing prose-only humanizer as though its lexical output validation can enforce semantic coaching authority and as though its untyped `(surface, canonical)` input exposes the verified facts required for grounding. Neither is true in the inspected implementation.

## Findings
1. **HIGH — OpenAI-only/Kimi prohibition is unenforced.** Reported as `Enforce the OpenAI-only model boundary` at planner artifact lines 35-39. The existing request helper honors mutable global provider/model configuration. Define and test an exact OpenAI allowlist with zero requests outside it.
2. **HIGH — Per-surface authoritative grounding cannot be constructed from the planned Telegram signature.** Reported as `Pass typed grounding at each rendering boundary` at lines 35-42. Pass source snapshots/reports/payloads as typed inputs; never reparse canonical text.
3. **HIGH — Valid structured stage output can be truncated before validation.** Reported as `Budget structured responses before the transport truncates them` at lines 28-39. Establish a lossless bounded structured-response contract and maximum-size test.
4. **HIGH — The claimed action/timing/safety locks lack a deterministic enforcement mechanism.** Reported as `Replace semantic safety promises with a deterministic contract` at lines 28-33. Use finite code-owned templates/IDs for claim-bearing content, then adversarially test each surface.
5. **MEDIUM — Profile module authority and import parity are ambiguous.** Reported as `Resolve the profile module authority before changing grounding` at lines 40-43. Declare the source of truth and require both supported profile copies to stay compatible.

## Recommendations
1. Block implementation until the four HIGH contracts above are explicit in the plan and acceptance tests.
2. Keep the canonical fallback ladder and no-retry rule exactly as written; add provider-denied, missing-context, no-slot, transport-boundary, and per-surface semantic-lock cases.
3. Update the exact scope to include only the necessary typed call-boundary arguments, the narrow structured transport adjustment, and required profile-parity test. Retain the rejection of a new service, persistence, and raw-corpus prompting.

## Architectural Status
BLOCK

## Code Review Recommendation
REQUEST CHANGES

## Tradeoffs
- **Chosen design, repaired:** existing humanizer plus typed grounding adapters and finite code-rendered coaching templates. Preserves routing and fail-closed behavior with a small local scope increase.
- **Current plan:** smallest apparent diff, but depends on undefined semantic validation and unavailable source context; unsafe/nonfunctional on its stated guarantees.
- **New coaching/RAG service:** not recommended; it broadens deployment, persistence, and retrieval risk without solving the required authority boundary better than a typed local adapter.
