secrets-engine/docs/openrouter-native-access.md
tegwick 1f7f42b277
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 3s
Prepare exact native recipient and record approval service activation
Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a09cbb-87c6-7900-a145-4ce53ba9f1a6
2026-09-14 01:08:50 +02:00

5.9 KiB

OpenRouter native preparation — 2026-09-14

SECRETS-WP-0010 implements the bounded owner packet from IR-WP-0004, message cfab5355-b0f9-4868-b4e6-61ea42c54b0f.

Implemented

Every action request now includes a deep copy of the non-secret catalog target in context.catalog_target: custody mount/path, owning org/repo, declared fields, consumers, mount management, delivery modes/config/auth and workload delivery. The existing action, stage, purpose and human-control fields remain bound. Approval object identifiers are excluded so issuance does not change its own approval-free digest. Changed targets or token limits require a new approval; existing approvals created before this change cannot authorize new submissions. This binds proposed inputs; it does not turn catalog metadata into a grant.

Plans now expose all AppRole limits, including the secret-ID TTL and use count. The OpenRouter plan checks the existing mount and writes only the exact-path policy and AppRole se-prod-openrouter-llm-connect. Limits: token TTL 15m, maximum 30m, secret-ID TTL 15m/single use, eight token uses. No KV mutation or ESO change. See the non-secret plan and claim-free request under docs/evidence/2026-09-14-*. Those are review inputs, not issued approvals; regenerate after configuring the actual recipient because its target binding changes.

tools/openrouter_key_check.py is the first proposed recipient. It performs one TLS-verified GET to the fixed endpoint, ignores proxy configuration, follows no redirects and makes no inference request. It emits only a fixed result and HTTP status; no provider fields, labels, response bodies, key values or exception text. The endpoint is OpenRouter's documented current-key information API. A successful check does not reconcile radar's existing spend reservation.

docs/proposals/openrouter-key-check.yaml is an inactive proposed catalog overlay. It retains the existing lane id/KV/policy/AppRole and ESO consumer, declares human control, and names the key-check recipient with an installed, configured exec-owner binding. The active catalog/openrouter-llm-connect.yaml remains limited to its admitted llm-connect purpose. The proposal is outside the active catalog; configuration is not approval. Its exact interpreter/script paths and pins are recorded in the install receipt. Do not copy it into the active catalog until custody-owner admission and the exact protected recipient installation are reviewed.

Verification

410 tests passed, including disposable OpenBao coverage. New tests cover changed path, mount, owner, consumer, limits, fields and delivery mode replay; frozen request inputs; complete plan limits; and sanitized key-check success/errors, redirect refusal, malformed/oversized responses and transport cleanup. The actual local KeyCape + Approval Engine + compiled Flex Auth exercise passed 26 checks, including changed catalog target refusal before consume/backend and exact child isolation. Its human approval and backend are explicit synthetic fixtures, not native production evidence.

Flex Auth's dedicated native pin was promoted to Helm revision 4 with the existing published image sha256:05a03a8790c2210c48ea92391441c77ddf640d0cd32f5ec09838f5393171fcbd. Eleven live evaluation checks passed, including current replay/approval binding; other PDP deployment specs are unchanged. The separate local and live receipts state their scope and cleanup. This removes the outdated PDP image dependency.

Remaining admitted execution sequence (SECRETS-WP-0010-T03)

  1. APPROVAL-WP-0002-T03 is now deployed, with existing audit custody and current JWKS verified (2026-09-14 deployment receipt). T01/T05 still require the admitted requesting/human/consumer path. Complete RPF-WP-0035-T06 / CCR-2026-0019 client-side reader admission for the secrets-engine approval-client. Keep secrets outside Git and use the existing attended procedure in docs/approval-service-auth.md; do not read the verifier's Secret.
  2. Have the custody owner admit this exact read-only recipient. The configured local installation already pins its Python executable and script, exact argv, private working directory and fixed environment; review the installation receipt against docs/exec-owner-binding.md. Obtain the scoped attended platform authority; no standing bootstrap credential or sibling identity.
  3. Render the finalized request, use the evaluator-origin digest to create a declared-human-control approval, obtain the real human entry, observe claim, validate Check and CAS-consume before apply. ActionAuthorization is deferred, not a missing API to implement. CCR-2026-0003 is provenance, not this approval.
  4. Apply only the reviewed policy/AppRole. Verify correct-reader access, unrelated identity and unrelated path denials, all fields, role limits, native session revocation and llm-connect ESO/application health. No raw provider value in evidence. Obtain a separate exact exec approval for the pinned key check.
  5. Only after verified native readiness should SECRETS-WP-0006-T06 retire the interim route. Rollback removes only the new policy/AppRole; preserve KV/ESO.
  6. Trial delivery requires its own reviewed, pinned radar recipient/config and approval. Reconcile the existing USD 0.023712 reservation in campaign ir-openrouter-pilot-20260913; preserve the authorized USD 10 ceiling. This task did not execute the key check or spend campaign funds.

The finalized request artifacts are docs/evidence/2026-09-14-openrouter-final-*-request.json. They replace the earlier pending-recipient proposal as review inputs, not as an issued approval. Recipient proof is in 2026-09-14-openrouter-recipient-install.json. The exact operator-group question is pending user input. Native requesting identity (approval:create) and Informed Decision human review are also needed; do not reuse the withdrawn combined operator client or seed a production approval.