# User Review Required - m-iop-owned-single-request-agent-execution/25+23,24_claude_smoke_qualification

## Requested At

2026-08-08

## Status

RESOLVED

## Reason

- Type: external-execution / credential-boundary
- Current review number: 11
- Final verdict: FAIL
- Summary: The repaired harness now detects Edge credential/model admission without starting Claude and safely classifies future child failures. `/config/workspace/iop/token/.claude` is selected by Claude Code as an API key but is rejected by the selected dev Edge model catalog, so another live call would fail before S12 admission.

## Verified Evidence

- Repository repair: authenticated bounded catalog probe, unchanged S12 ingress assertion, and five closed child-failure classes pass local and remote deterministic self-tests.
- Actual zero-child result: `auth=api_key`, `authenticated model probe rejected`, ingress 0, result/manifest absent, Claude child absent, temporary config absent.
- The selected model is present in the candidate config.
- Constant-time in-memory comparison: `.claude` does not equal the configured legacy Edge caller token. The catalog rejection also proves it is not admitted through the configured principal-token path.
- Prior live authorization was consumed exactly once under plan 9; no retry occurred. Plan 10 invoked no Claude/provider.

## Why a Decision Is Needed

Claude Code sends `ANTHROPIC_API_KEY` to the configured base URL as the caller `x-api-key`. IOP Edge authenticates that value as an Edge caller credential before it admits the selected single-request model. The current `.claude` value is not an admitted Edge caller credential for this dev runtime.

## Required User Action

- [x] Choose the credential strategy:
  - **Recommended — existing dev Edge caller token:** read the disposable candidate's already configured `openai.bearer_token` only into the Claude runner process as `ANTHROPIC_API_KEY`. Do not print or copy it. `.claude` is not used in the caller path.
  - **Existing principal credential:** provide the source path/name for a credential already corresponding to one of the configured Edge principal tokens.
  - **Enroll `.claude`:** explicitly authorize hashing/enrolling `.claude` as a candidate Edge principal credential plus the necessary config rebuild/restart. This repurposes a provider-style secret as a caller identity and is not recommended.
- [x] After the selected credential passes the zero-child authenticated model preflight, explicitly authorize exactly one new non-retriable live S12 invocation. Any non-zero live exit consumes that authorization and stops without retry.

## Resolution

- Resolved at: 2026-08-08 10:52:10 KST
- User decision: use the remote SOPS-managed existing principal credential, specifically `tokens.toki-dev-cline`, for Claude Code → IOP Edge caller authentication. Claude, Gemini, and all other provider credentials and calls remain owned by the already declared IOP internal provider routing.
- Authorization: the user's `진행해` conditionally authorizes exactly one new non-retriable live S12 invocation after the SOPS caller credential passes the zero-child authenticated model preflight.
- Discovery evidence: `/Users/toki/.config/iop/secrets/dev-openai-toki.sops.yaml` decrypts in memory with `/Users/toki/.config/sops/age/keys.txt`; `toki-dev-cline` matches the currently configured Edge principal-token hash. No plaintext or hash was printed or persisted.

## Resume Condition

Record both the selected credential strategy and the conditional exactly-one authorization. Archive this stop as `user_review_4.log`, route a fresh external-verification pair, pass the new authenticated zero-child preflight, and only then execute `--run` once. Accept completion only from the schema-valid redacted manifest.

## Next Execution Hint

- If the recommended strategy is selected, do not edit Edge config or restart Edge/Node. Read the existing candidate bearer value in memory and validate it with `--preflight-only` first.
- Do not use `/config/workspace/iop/token/.claude` again as the Edge caller key unless the user explicitly selects enrollment.

## Closure Rules

- PASS requires the S12 manifest, bounded contract/spec synchronization, `complete.log`, and task archival.
- Any new repository defect routes through plan/review; any consumed failed live call returns to USER_REVIEW without retry.
