# Agent high-risk OpenBao boundary — 2026-08-21 ## Scope This is capabilities and metadata evidence for `RAILIANCE-WP-0022`. No credential value was read, no token was minted, and no operator role was modified. ## Source and live coverage - State Hub message `828e4903-30fe-4903-acfd-cd2ecdda437d` reported that the live `agent-high-risk-boundary` lacked the Core Hub path and that six other concrete high-risk catalog paths were absent from both source and live. - Source now denies KV-v2 data and permits metadata only for all concrete high-risk catalog paths. Pattern-only and non-KV lanes do not generate an invented address. - Under attended `platform-admin` OIDC, OpenBao accepted the updated policy. A normalized readback matched the source file. - The ops-warden audit used `policy_source: server` and reported 17 high-risk lanes: 12 covered catalog entries, zero uncovered, and five with no concrete KV address. The policy itself contains 12 unique deny paths because two catalog entries share the Binky IMAP path and Core Hub is an additional reviewed deny without a catalog lane. ### 2026-08-22 generated-input reconciliation - Ops-warden delivered generated artifact revision `55f0f47a021375b8b25c924953d1b49a24e002c5`: 19 high-risk lanes, 14 concrete entries (13 unique paths), and five pattern/non-KV lanes. - The corrected grades add issue-core runtime (whose bundle also contains `GITEA_BACKEND_TOKEN`) and reuse-surface runtime (whose bundle also contains `REUSE_SURFACE_FORGEJO_WEBHOOK_SECRET`). Both data paths now have explicit deny blocks and read-only metadata blocks. - `scripts/agent_high_risk_boundary.py` verified that the vendored input equals the clean upstream artifact aside from generation time and that every entry is covered. Forty-nine focused tests passed. - Under attended `platform-admin` OIDC, the policy was uploaded and read back. OpenBao added only its normal trailing newline. The server-backed ops-warden audit reported 19 high-risk lanes, 14 covered, zero uncovered, and five with no concrete address. ## Attachment audit and residual blocker A metadata-only scan listed and read role configuration under netkingdom OIDC, Kubernetes auth, AppRole, and token roles. It found: - roles attaching `agent-high-risk-boundary`: **0**; - roles combining it with any `workload-kv-read-*` policy: **0**. The 2026-08-21 scan accurately found no attachment at that time. On 2026-08-22, State Hub decision `f0955252-7b20-4c80-86e9-f8080ec60793` selected the platform-owned `coding-agent-railiance-platform` AppRole as the operational machine identity while retaining the KeyCape JWT role as an issuer-backed migration target. Live AppRole metadata matched the reviewed source: - `bind_secret_id=true`, `secret_id_ttl=300`, and `secret_id_num_uses=1`; - `token_ttl=900`, `token_max_ttl=900`, `token_num_uses=8`, and no default policy; - policies exactly `agent-high-risk-boundary` and `workload-kv-read-issue-core-runtime`. The non-disclosing verifier minted one ephemeral SecretID, logged in, and used only token metadata plus `sys/capabilities-self`. The data path resolved to `deny`; its metadata path resolved to `read`; the token TTL was 900 seconds. The first verification exposed that a no-default-policy token could not revoke itself. That bounded test token was located and revoked by accessor under attended authority, `auth/token/revoke-self:update` was added to the boundary, and the repeat verification passed and self-revoked without warning. No KV read was attempted and no SecretID, token, or protected value was printed or logged. The exact-bound JWT role `auth/netkingdom/role/coding-agent` was also applied with audience `codex-railiance-platform`, subject `service:codex:railiance-platform`, `principal_type=service`, `tenant=tenant:coulomb`, and role `coding-agent`. KeyCape client registration is a future identity-hardening handoff; it is not required for the live AppRole attachment proven here.