## Summary
The revision substantively resolves the four prior blockers: it defines the exact daily canonical cutover, persists a pre-call daily decision claim, checks Kimi/Moonshot after restrictive resolution, and makes shadow mode/configuration/test isolation explicit. It is still not safe to approve under the assignment contract because the selector is explicitly designed to support Anthropic Messages and Codex Responses rather than the required OpenAI-only fallback.

## Claims
- The reviewed immutable artifact is `.gjc/_session-019fa80a-aa06-7000-aed8-cdd8fd418149/plans/ralplan/019fa7fb-3be3-7000-b23f-03f6c05d81ff/stage-03-revision.md`; its run `index.jsonl` records the assignment SHA-256 `f2fb0bc0a113d75d0c52b9b0f80f6f4844cd71e55b54d402ed77c9a59ebf15a4`.
- The prior daily-baseline/replay finding is addressed by the fixed complete/missing literals, the removal of the legacy feedback helpers/config, the finalized-event key, and explicit canonical legacy replay (revision lines 18-45, 131-146).
- The prior at-most-one finding is addressed by an fsync'd, hash-chained decision ledger, pre-request `attempt_started`, conditional terminalization, and canonical crash/concurrency recovery (lines 69-89).
- The prior Kimi-resolution finding is addressed by a public normalized identity predicate, post-resolution enforcement, and Kimi/alias/endpoint test matrix (lines 111-125, 148-150).
- The prior shadow/configuration, telemetry, package-isolation, weekly, and adaptive concerns are addressed by the exact mapping, bounded event schema, shared `gateway/platforms/korean_expression.py`, and zero-slot surfaces (lines 46-67, 91-108, 127-146).

## Analysis
### Spec compliance
The plan now correctly removes the unsafe free-form daily text path rather than masking it with a prompt. Its local-only variants, strict response parser, canonical fallback, no-content telemetry, and immutable weekly/adaptive exclusions satisfy the original safety direction.

However, the assignment imposes an OpenAI-only fallback boundary. The plan's restrictive policy instead permits raw OpenAI Chat Completions, Codex Responses, and Anthropic Messages (line 113), with specific Anthropic/Codex execution behavior (lines 119-122) and tests for all three transports (line 148). An implementation following this plan can send the selection document to Anthropic. The unspecified compiled allow-list is not an executable restriction that cures this contradiction.

### Architecture and synthesis
The broader multi-transport policy is a fair attempt to reuse configured providers and prove one wire attempt. Its cost is a larger security and maintenance surface and noncompliance with the narrower provider contract. Keep the ledger, strict parser, and post-resolution predicate, but replace the transport policy with a direct, declared OpenAI-only identity rule: exact approved provider/host/API mode, `max_retries=0`, one Chat Completions call, and fail-closed canonical output for every other identity. Explicitly decide whether Codex is included; absent an explicit allowance, reject it with Anthropic, aggregators, proxies, custom endpoints, and auto resolution.

## Root Cause
The revision hardened a general non-Kimi multi-provider selector instead of applying the assignment's stricter OpenAI-only transport boundary.

## Findings
1. **HIGH — revision lines 113-123:** The plan permits Anthropic Messages and Codex Responses despite the OpenAI-only fallback contract. **Impact:** an otherwise valid selection may be sent to a prohibited non-OpenAI transport. **Fix:** reduce the policy and its tests to the exact approved direct OpenAI identity; explicitly reject all other transports before client construction. Reported as P1.

## Recommendations
1. Replace the supported transport set with direct OpenAI Chat Completions on an explicit approved OpenAI endpoint/provider allow-list; reject Anthropic, Codex unless expressly allowed, aggregators, custom routes, and auto.
2. Change the provider tests to assert zero construction/request for every rejected transport and preserve the current retry/timeout/Kimi tests for the one allowed route.
3. Retain all revised canonical rendering, durable claim, resolved Kimi predicate, strict config/shadow, privacy telemetry, shared-module, and zero-slot safeguards unchanged.

## Architectural Status
BLOCK

## Code Review Recommendation
REQUEST CHANGES

## Tradeoffs
| Option | Benefit | Cost / risk |
|---|---|---|
| Direct OpenAI Chat Completions only | Meets the provider contract; smallest identity and retry surface | No selection on non-OpenAI deployments; canonical fallback is required |
| OpenAI + Codex + Anthropic (current plan) | More configured environments can select a local variant | Violates OpenAI-only scope and expands adapter/retry proof obligations |
