railiance-platform/docs/evidence/agent-high-risk-boundary-2026-08-21.md
codex 429cc912ed
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Finish coding-agent high-risk boundary coverage
Assistant: codex
Assistant-Model: gpt-5.6-sol
Assistant-Session: 01a02669-87ee-7a31-b111-edc95a16e0fa
2026-08-22 10:03:54 +02:00

79 lines
3.9 KiB
Markdown

# 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.