Prepare exact native recipient and record approval service activation
Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a09cbb-87c6-7900-a145-4ce53ba9f1a6
This commit is contained in:
parent
992f20f79d
commit
1f7f42b277
9 changed files with 514 additions and 62 deletions
84
docs/evidence/2026-09-14-approval-engine-deployment.json
Normal file
84
docs/evidence/2026-09-14-approval-engine-deployment.json
Normal file
|
|
@ -0,0 +1,84 @@
|
||||||
|
{
|
||||||
|
"storage": {
|
||||||
|
"schema_version": 5,
|
||||||
|
"expected_schema_version": 5,
|
||||||
|
"schema_current": true,
|
||||||
|
"persistent": true,
|
||||||
|
"required_tables": {
|
||||||
|
"approvals": true,
|
||||||
|
"entries": true,
|
||||||
|
"outbox": true
|
||||||
|
},
|
||||||
|
"integrity": [
|
||||||
|
"ok"
|
||||||
|
],
|
||||||
|
"foreign_key_violations": 0,
|
||||||
|
"ok": true
|
||||||
|
},
|
||||||
|
"outbox": {
|
||||||
|
"total": 1,
|
||||||
|
"pending": 0,
|
||||||
|
"max_age_seconds": 0,
|
||||||
|
"attempts": 1,
|
||||||
|
"failed_pending": 0,
|
||||||
|
"counts": {
|
||||||
|
"issuance": 0,
|
||||||
|
"use": 0,
|
||||||
|
"supersession": 0,
|
||||||
|
"revocation": 0,
|
||||||
|
"heartbeat": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"restored": {
|
||||||
|
"schema_version": 5,
|
||||||
|
"expected_schema_version": 5,
|
||||||
|
"schema_current": true,
|
||||||
|
"persistent": true,
|
||||||
|
"required_tables": {
|
||||||
|
"approvals": true,
|
||||||
|
"entries": true,
|
||||||
|
"outbox": true
|
||||||
|
},
|
||||||
|
"integrity": [
|
||||||
|
"ok"
|
||||||
|
],
|
||||||
|
"foreign_key_violations": 0,
|
||||||
|
"ok": true
|
||||||
|
},
|
||||||
|
"readiness": 200,
|
||||||
|
"anonymous_refusal": 401,
|
||||||
|
"invalid_bearer_refusal": 401,
|
||||||
|
"jwks_reachable": true,
|
||||||
|
"timestamp": "2026-09-13T23:06:37.566144+00:00",
|
||||||
|
"status": "deployed_and_restart_restore_verified",
|
||||||
|
"cluster_uid": "a553c742-0115-43d4-99a4-a5ca56fe0786",
|
||||||
|
"pod_uid_before_restart": "95215659-3b17-4ccf-ab8c-98418439cdbe",
|
||||||
|
"pod_uid_after_restart": "7b8c05d9-f1d5-403d-abb3-2250bff9db5e",
|
||||||
|
"image": "forgejo.coulomb.social/coulomb/approval-engine@sha256:251941a5cb2724b57cc32cff6b693b1ab0be695bee4f56f02d51961189c0fa49",
|
||||||
|
"resources": {
|
||||||
|
"limits": {
|
||||||
|
"cpu": "500m",
|
||||||
|
"memory": "256Mi"
|
||||||
|
},
|
||||||
|
"requests": {
|
||||||
|
"cpu": "25m",
|
||||||
|
"memory": "64Mi"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"caller_token_automount": false,
|
||||||
|
"tests": {
|
||||||
|
"repository": 156,
|
||||||
|
"changed_manifest": 6
|
||||||
|
},
|
||||||
|
"backup": {
|
||||||
|
"persistent_path": "/data/t03-initial-backup-20260914.sqlite",
|
||||||
|
"independent_local_copy": "/tmp/t03-approval-backup/restored.sqlite",
|
||||||
|
"restore_exercise": "isolated copy opened with actual engine; live database was not overwritten",
|
||||||
|
"retention": "initial test backups only; long-term backup schedule/retention not established"
|
||||||
|
},
|
||||||
|
"limitations": [
|
||||||
|
"No real approval created, human entry supplied, or credential consumed.",
|
||||||
|
"Consumer client-side reader and requesting identity remain unadmitted.",
|
||||||
|
"Heartbeat acknowledgment/outbox persistence proved; independent audit archive retrieval remains Audit Core owner work."
|
||||||
|
]
|
||||||
|
}
|
||||||
100
docs/evidence/2026-09-14-openrouter-final-apply-request.json
Normal file
100
docs/evidence/2026-09-14-openrouter-final-apply-request.json
Normal file
|
|
@ -0,0 +1,100 @@
|
||||||
|
{
|
||||||
|
"tenant": "tenant:platform",
|
||||||
|
"subject": {
|
||||||
|
"id": "secrets-engine",
|
||||||
|
"type": "service"
|
||||||
|
},
|
||||||
|
"action": "apply",
|
||||||
|
"resource": {
|
||||||
|
"id": "catalog:openrouter-llm-connect",
|
||||||
|
"type": "secret-catalog-lane",
|
||||||
|
"system": "secrets-engine",
|
||||||
|
"attributes": {
|
||||||
|
"stage": "prod",
|
||||||
|
"fields": [],
|
||||||
|
"policy_targets": [
|
||||||
|
"se-prod-openrouter-llm-connect"
|
||||||
|
],
|
||||||
|
"auth_targets": [
|
||||||
|
"se-prod-openrouter-llm-connect"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"context": {
|
||||||
|
"purpose": "IR-WP-0004 read-only OpenRouter key authentication check; no inference",
|
||||||
|
"catalog_target": {
|
||||||
|
"kind": "kv",
|
||||||
|
"org": "coulomb",
|
||||||
|
"repo": "llm-connect",
|
||||||
|
"mount": "platform",
|
||||||
|
"path": "workloads/activity-core/llm-connect/llm-connect-provider-secrets",
|
||||||
|
"fields": [
|
||||||
|
"OPENROUTER_API_KEY"
|
||||||
|
],
|
||||||
|
"mount_management": "existing",
|
||||||
|
"consumers": [
|
||||||
|
{
|
||||||
|
"name": "llm-connect-activity-core",
|
||||||
|
"auth": "kubernetes",
|
||||||
|
"claim": "serviceaccount:external-secrets/external-secrets",
|
||||||
|
"purpose": "sync llm-connect-provider-secrets for the activity-core deployment"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "intelligence-radar-key-check",
|
||||||
|
"auth": "approle",
|
||||||
|
"claim": "catalog:openrouter-llm-connect",
|
||||||
|
"purpose": "IR-WP-0004 read-only OpenRouter key authentication check; no inference"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"delivery_modes": [
|
||||||
|
"exec-env",
|
||||||
|
"read-check"
|
||||||
|
],
|
||||||
|
"delivery_auth": {
|
||||||
|
"method": "approle",
|
||||||
|
"management": "engine",
|
||||||
|
"policy_name": "se-prod-openrouter-llm-connect",
|
||||||
|
"role_name": "se-prod-openrouter-llm-connect",
|
||||||
|
"token_ttl": "15m",
|
||||||
|
"token_max_ttl": "30m",
|
||||||
|
"secret_id_ttl": "15m",
|
||||||
|
"secret_id_num_uses": 1,
|
||||||
|
"token_num_uses": 8
|
||||||
|
},
|
||||||
|
"delivery_config": {
|
||||||
|
"exec_owner": {
|
||||||
|
"status": "configured",
|
||||||
|
"owner": "intelligence-radar-key-check",
|
||||||
|
"command": [
|
||||||
|
"/usr/bin/python3.12",
|
||||||
|
"-I",
|
||||||
|
"-B",
|
||||||
|
"/home/worsch/.local/share/secrets-engine/recipients/openrouter-key-check-dc1569f63ef7/openrouter_key_check.py"
|
||||||
|
],
|
||||||
|
"cwd": "/run/user/1000/secrets-engine-openrouter-check",
|
||||||
|
"environment": {
|
||||||
|
"LANG": "C.UTF-8"
|
||||||
|
},
|
||||||
|
"files": {
|
||||||
|
"/usr/bin/python3.12": {
|
||||||
|
"sha256": "e50d468e8b0adfb05733f5b87b3cff34829c4a8c1aea50c865aa8bdfe4bb150f",
|
||||||
|
"private": false
|
||||||
|
},
|
||||||
|
"/home/worsch/.local/share/secrets-engine/recipients/openrouter-key-check-dc1569f63ef7/openrouter_key_check.py": {
|
||||||
|
"sha256": "dc1569f63ef74d73f0a735548c0573db2a1493f7ffc86945f52d0be9b27a3253",
|
||||||
|
"private": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"auth_capability": {},
|
||||||
|
"workload_delivery": [
|
||||||
|
{
|
||||||
|
"mode": "external-secrets",
|
||||||
|
"owner": "railiance-platform + llm-connect"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"human_control": true
|
||||||
|
}
|
||||||
|
}
|
||||||
103
docs/evidence/2026-09-14-openrouter-final-exec-request.json
Normal file
103
docs/evidence/2026-09-14-openrouter-final-exec-request.json
Normal file
|
|
@ -0,0 +1,103 @@
|
||||||
|
{
|
||||||
|
"tenant": "tenant:platform",
|
||||||
|
"subject": {
|
||||||
|
"id": "secrets-engine",
|
||||||
|
"type": "service"
|
||||||
|
},
|
||||||
|
"action": "exec",
|
||||||
|
"resource": {
|
||||||
|
"id": "catalog:openrouter-llm-connect",
|
||||||
|
"type": "secret-catalog-lane",
|
||||||
|
"system": "secrets-engine",
|
||||||
|
"attributes": {
|
||||||
|
"stage": "prod",
|
||||||
|
"fields": [
|
||||||
|
"OPENROUTER_API_KEY"
|
||||||
|
],
|
||||||
|
"policy_targets": [
|
||||||
|
"se-prod-openrouter-llm-connect"
|
||||||
|
],
|
||||||
|
"auth_targets": [
|
||||||
|
"se-prod-openrouter-llm-connect"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"context": {
|
||||||
|
"purpose": "IR-WP-0004 read-only OpenRouter key authentication check; no inference",
|
||||||
|
"catalog_target": {
|
||||||
|
"kind": "kv",
|
||||||
|
"org": "coulomb",
|
||||||
|
"repo": "llm-connect",
|
||||||
|
"mount": "platform",
|
||||||
|
"path": "workloads/activity-core/llm-connect/llm-connect-provider-secrets",
|
||||||
|
"fields": [
|
||||||
|
"OPENROUTER_API_KEY"
|
||||||
|
],
|
||||||
|
"mount_management": "existing",
|
||||||
|
"consumers": [
|
||||||
|
{
|
||||||
|
"name": "llm-connect-activity-core",
|
||||||
|
"auth": "kubernetes",
|
||||||
|
"claim": "serviceaccount:external-secrets/external-secrets",
|
||||||
|
"purpose": "sync llm-connect-provider-secrets for the activity-core deployment"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "intelligence-radar-key-check",
|
||||||
|
"auth": "approle",
|
||||||
|
"claim": "catalog:openrouter-llm-connect",
|
||||||
|
"purpose": "IR-WP-0004 read-only OpenRouter key authentication check; no inference"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"delivery_modes": [
|
||||||
|
"exec-env",
|
||||||
|
"read-check"
|
||||||
|
],
|
||||||
|
"delivery_auth": {
|
||||||
|
"method": "approle",
|
||||||
|
"management": "engine",
|
||||||
|
"policy_name": "se-prod-openrouter-llm-connect",
|
||||||
|
"role_name": "se-prod-openrouter-llm-connect",
|
||||||
|
"token_ttl": "15m",
|
||||||
|
"token_max_ttl": "30m",
|
||||||
|
"secret_id_ttl": "15m",
|
||||||
|
"secret_id_num_uses": 1,
|
||||||
|
"token_num_uses": 8
|
||||||
|
},
|
||||||
|
"delivery_config": {
|
||||||
|
"exec_owner": {
|
||||||
|
"status": "configured",
|
||||||
|
"owner": "intelligence-radar-key-check",
|
||||||
|
"command": [
|
||||||
|
"/usr/bin/python3.12",
|
||||||
|
"-I",
|
||||||
|
"-B",
|
||||||
|
"/home/worsch/.local/share/secrets-engine/recipients/openrouter-key-check-dc1569f63ef7/openrouter_key_check.py"
|
||||||
|
],
|
||||||
|
"cwd": "/run/user/1000/secrets-engine-openrouter-check",
|
||||||
|
"environment": {
|
||||||
|
"LANG": "C.UTF-8"
|
||||||
|
},
|
||||||
|
"files": {
|
||||||
|
"/usr/bin/python3.12": {
|
||||||
|
"sha256": "e50d468e8b0adfb05733f5b87b3cff34829c4a8c1aea50c865aa8bdfe4bb150f",
|
||||||
|
"private": false
|
||||||
|
},
|
||||||
|
"/home/worsch/.local/share/secrets-engine/recipients/openrouter-key-check-dc1569f63ef7/openrouter_key_check.py": {
|
||||||
|
"sha256": "dc1569f63ef74d73f0a735548c0573db2a1493f7ffc86945f52d0be9b27a3253",
|
||||||
|
"private": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"auth_capability": {},
|
||||||
|
"workload_delivery": [
|
||||||
|
{
|
||||||
|
"mode": "external-secrets",
|
||||||
|
"owner": "railiance-platform + llm-connect"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"human_control": true,
|
||||||
|
"exec_owner_sha256": "22393c7e751e458fa64bb24305ee66a26bbe3993c5aba03ae1fc1a488e777b42"
|
||||||
|
}
|
||||||
|
}
|
||||||
102
docs/evidence/2026-09-14-openrouter-final-verify-request.json
Normal file
102
docs/evidence/2026-09-14-openrouter-final-verify-request.json
Normal file
|
|
@ -0,0 +1,102 @@
|
||||||
|
{
|
||||||
|
"tenant": "tenant:platform",
|
||||||
|
"subject": {
|
||||||
|
"id": "secrets-engine",
|
||||||
|
"type": "service"
|
||||||
|
},
|
||||||
|
"action": "verify",
|
||||||
|
"resource": {
|
||||||
|
"id": "catalog:openrouter-llm-connect",
|
||||||
|
"type": "secret-catalog-lane",
|
||||||
|
"system": "secrets-engine",
|
||||||
|
"attributes": {
|
||||||
|
"stage": "prod",
|
||||||
|
"fields": [
|
||||||
|
"OPENROUTER_API_KEY"
|
||||||
|
],
|
||||||
|
"policy_targets": [
|
||||||
|
"se-prod-openrouter-llm-connect"
|
||||||
|
],
|
||||||
|
"auth_targets": [
|
||||||
|
"se-prod-openrouter-llm-connect"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"context": {
|
||||||
|
"purpose": "IR-WP-0004 read-only OpenRouter key authentication check; no inference",
|
||||||
|
"catalog_target": {
|
||||||
|
"kind": "kv",
|
||||||
|
"org": "coulomb",
|
||||||
|
"repo": "llm-connect",
|
||||||
|
"mount": "platform",
|
||||||
|
"path": "workloads/activity-core/llm-connect/llm-connect-provider-secrets",
|
||||||
|
"fields": [
|
||||||
|
"OPENROUTER_API_KEY"
|
||||||
|
],
|
||||||
|
"mount_management": "existing",
|
||||||
|
"consumers": [
|
||||||
|
{
|
||||||
|
"name": "llm-connect-activity-core",
|
||||||
|
"auth": "kubernetes",
|
||||||
|
"claim": "serviceaccount:external-secrets/external-secrets",
|
||||||
|
"purpose": "sync llm-connect-provider-secrets for the activity-core deployment"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "intelligence-radar-key-check",
|
||||||
|
"auth": "approle",
|
||||||
|
"claim": "catalog:openrouter-llm-connect",
|
||||||
|
"purpose": "IR-WP-0004 read-only OpenRouter key authentication check; no inference"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"delivery_modes": [
|
||||||
|
"exec-env",
|
||||||
|
"read-check"
|
||||||
|
],
|
||||||
|
"delivery_auth": {
|
||||||
|
"method": "approle",
|
||||||
|
"management": "engine",
|
||||||
|
"policy_name": "se-prod-openrouter-llm-connect",
|
||||||
|
"role_name": "se-prod-openrouter-llm-connect",
|
||||||
|
"token_ttl": "15m",
|
||||||
|
"token_max_ttl": "30m",
|
||||||
|
"secret_id_ttl": "15m",
|
||||||
|
"secret_id_num_uses": 1,
|
||||||
|
"token_num_uses": 8
|
||||||
|
},
|
||||||
|
"delivery_config": {
|
||||||
|
"exec_owner": {
|
||||||
|
"status": "configured",
|
||||||
|
"owner": "intelligence-radar-key-check",
|
||||||
|
"command": [
|
||||||
|
"/usr/bin/python3.12",
|
||||||
|
"-I",
|
||||||
|
"-B",
|
||||||
|
"/home/worsch/.local/share/secrets-engine/recipients/openrouter-key-check-dc1569f63ef7/openrouter_key_check.py"
|
||||||
|
],
|
||||||
|
"cwd": "/run/user/1000/secrets-engine-openrouter-check",
|
||||||
|
"environment": {
|
||||||
|
"LANG": "C.UTF-8"
|
||||||
|
},
|
||||||
|
"files": {
|
||||||
|
"/usr/bin/python3.12": {
|
||||||
|
"sha256": "e50d468e8b0adfb05733f5b87b3cff34829c4a8c1aea50c865aa8bdfe4bb150f",
|
||||||
|
"private": false
|
||||||
|
},
|
||||||
|
"/home/worsch/.local/share/secrets-engine/recipients/openrouter-key-check-dc1569f63ef7/openrouter_key_check.py": {
|
||||||
|
"sha256": "dc1569f63ef74d73f0a735548c0573db2a1493f7ffc86945f52d0be9b27a3253",
|
||||||
|
"private": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"auth_capability": {},
|
||||||
|
"workload_delivery": [
|
||||||
|
{
|
||||||
|
"mode": "external-secrets",
|
||||||
|
"owner": "railiance-platform + llm-connect"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"human_control": true
|
||||||
|
}
|
||||||
|
}
|
||||||
32
docs/evidence/2026-09-14-openrouter-recipient-install.json
Normal file
32
docs/evidence/2026-09-14-openrouter-recipient-install.json
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
{
|
||||||
|
"status": "recipient_installed_pending_admission",
|
||||||
|
"owner_digest": "22393c7e751e458fa64bb24305ee66a26bbe3993c5aba03ae1fc1a488e777b42",
|
||||||
|
"script_sha256": "dc1569f63ef74d73f0a735548c0573db2a1493f7ffc86945f52d0be9b27a3253",
|
||||||
|
"binding": {
|
||||||
|
"status": "configured",
|
||||||
|
"owner": "intelligence-radar-key-check",
|
||||||
|
"command": [
|
||||||
|
"/usr/bin/python3.12",
|
||||||
|
"-I",
|
||||||
|
"-B",
|
||||||
|
"/home/worsch/.local/share/secrets-engine/recipients/openrouter-key-check-dc1569f63ef7/openrouter_key_check.py"
|
||||||
|
],
|
||||||
|
"cwd": "/run/user/1000/secrets-engine-openrouter-check",
|
||||||
|
"environment": {
|
||||||
|
"LANG": "C.UTF-8"
|
||||||
|
},
|
||||||
|
"files": {
|
||||||
|
"/usr/bin/python3.12": {
|
||||||
|
"sha256": "e50d468e8b0adfb05733f5b87b3cff34829c4a8c1aea50c865aa8bdfe4bb150f",
|
||||||
|
"private": false
|
||||||
|
},
|
||||||
|
"/home/worsch/.local/share/secrets-engine/recipients/openrouter-key-check-dc1569f63ef7/openrouter_key_check.py": {
|
||||||
|
"sha256": "dc1569f63ef74d73f0a735548c0573db2a1493f7ffc86945f52d0be9b27a3253",
|
||||||
|
"private": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"credential_values_read": false,
|
||||||
|
"active_catalog_changed": false,
|
||||||
|
"runtime_trust": "system Python/stdlib maintained by root; executable and script pinned; -I -B isolates Python configuration"
|
||||||
|
}
|
||||||
|
|
@ -4,12 +4,6 @@
|
||||||
> live PDP receipt and remaining service/reader gates are in
|
> live PDP receipt and remaining service/reader gates are in
|
||||||
> docs/openrouter-native-access.md (SECRETS-WP-0010).
|
> docs/openrouter-native-access.md (SECRETS-WP-0010).
|
||||||
|
|
||||||
> Current protocol correction (2026-09-14): follow claim → validated PDP Check →
|
|
||||||
> CAS consume, as implemented in docs/approval-consumption.md. ActionAuthorization
|
|
||||||
> is deferred and never ratified. The OpenRouter-specific current implementation,
|
|
||||||
> live PDP receipt and remaining service/reader gates are in
|
|
||||||
> docs/openrouter-native-access.md (SECRETS-WP-0010).
|
|
||||||
|
|
||||||
# Native lane cutover (SECRETS-WP-0006-T05 / T06)
|
# Native lane cutover (SECRETS-WP-0006-T05 / T06)
|
||||||
|
|
||||||
Status: procedure only. Live apply is still fail-closed until
|
Status: procedure only. Live apply is still fail-closed until
|
||||||
|
|
|
||||||
|
|
@ -32,10 +32,10 @@ A successful check does not reconcile radar's existing spend reservation.
|
||||||
|
|
||||||
`docs/proposals/openrouter-key-check.yaml` is an inactive proposed catalog overlay.
|
`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
|
It retains the existing lane id/KV/policy/AppRole and ESO consumer, declares human
|
||||||
control, and names the key-check recipient with a pending exec-owner binding.
|
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
|
The active `catalog/openrouter-llm-connect.yaml` remains limited to its admitted
|
||||||
llm-connect purpose. The proposal is outside the active catalog and pending exec
|
llm-connect purpose. The proposal is outside the active catalog; configuration is not approval.
|
||||||
refuses before consume/backend. Do not copy it into the active catalog until
|
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.
|
custody-owner admission and the exact protected recipient installation are reviewed.
|
||||||
|
|
||||||
## Verification
|
## Verification
|
||||||
|
|
@ -57,14 +57,15 @@ state their scope and cleanup. This removes the outdated PDP image dependency.
|
||||||
|
|
||||||
## Remaining admitted execution sequence (SECRETS-WP-0010-T03)
|
## Remaining admitted execution sequence (SECRETS-WP-0010-T03)
|
||||||
|
|
||||||
1. Complete APPROVAL-WP-0002-T01/T03/T05 and its identity/audit dependencies;
|
1. APPROVAL-WP-0002-T03 is now deployed, with existing audit custody and current
|
||||||
its declared namespace currently has no StatefulSet, pod or Service. Complete
|
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
|
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
|
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.
|
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. Install and pin
|
2. Have the custody owner admit this exact read-only recipient. The configured local installation already pins
|
||||||
its Python runtime and script, exact argv, private working directory and fixed
|
its Python executable and script, exact argv, private working directory and fixed
|
||||||
environment via `docs/exec-owner-binding.md`. Obtain the scoped attended
|
environment; review the installation receipt against `docs/exec-owner-binding.md`. Obtain the scoped attended
|
||||||
platform authority; no standing bootstrap credential or sibling identity.
|
platform authority; no standing bootstrap credential or sibling identity.
|
||||||
3. Render the finalized request, use the evaluator-origin digest to create a
|
3. Render the finalized request, use the evaluator-origin digest to create a
|
||||||
declared-human-control approval, obtain the real human entry, observe claim,
|
declared-human-control approval, obtain the real human entry, observe claim,
|
||||||
|
|
@ -80,3 +81,11 @@ state their scope and cleanup. This removes the outdated PDP image dependency.
|
||||||
approval. Reconcile the existing USD 0.023712 reservation in campaign
|
approval. Reconcile the existing USD 0.023712 reservation in campaign
|
||||||
`ir-openrouter-pilot-20260913`; preserve the authorized USD 10 ceiling. This
|
`ir-openrouter-pilot-20260913`; preserve the authorized USD 10 ceiling. This
|
||||||
task did not execute the key check or spend campaign funds.
|
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.
|
||||||
|
|
|
||||||
|
|
@ -1,36 +1,32 @@
|
||||||
# PROPOSED reviewed-input template; not active catalog or credential admission.
|
# Configured local recipient proposal; not active catalog or credential admission.
|
||||||
# SECRETS-WP-0010; retain the existing KV and AppRole names.
|
|
||||||
id: openrouter-llm-connect
|
id: openrouter-llm-connect
|
||||||
kind: kv
|
kind: kv
|
||||||
org: coulomb
|
org: coulomb
|
||||||
repo: llm-connect
|
repo: llm-connect
|
||||||
stage: prod
|
stage: prod
|
||||||
description: >-
|
description: OpenRouter provider credential used by llm-connect for activity-core.
|
||||||
OpenRouter provider credential used by llm-connect for activity-core. The
|
The proposed native recipient checks key authentication only; trial delivery requires
|
||||||
proposed native recipient checks key authentication only; trial delivery
|
a separate reviewed recipient and exact-action approval.
|
||||||
requires a separate reviewed recipient and exact-action approval.
|
|
||||||
|
|
||||||
mount: platform
|
mount: platform
|
||||||
path: workloads/activity-core/llm-connect/llm-connect-provider-secrets
|
path: workloads/activity-core/llm-connect/llm-connect-provider-secrets
|
||||||
mount_management: existing
|
mount_management: existing
|
||||||
fields:
|
fields:
|
||||||
- OPENROUTER_API_KEY
|
- OPENROUTER_API_KEY
|
||||||
|
|
||||||
consumers:
|
consumers:
|
||||||
- name: llm-connect-activity-core
|
- name: llm-connect-activity-core
|
||||||
auth: kubernetes
|
auth: kubernetes
|
||||||
claim: serviceaccount:external-secrets/external-secrets
|
claim: serviceaccount:external-secrets/external-secrets
|
||||||
purpose: sync llm-connect-provider-secrets for the activity-core deployment
|
purpose: sync llm-connect-provider-secrets for the activity-core deployment
|
||||||
- name: intelligence-radar-key-check
|
- name: intelligence-radar-key-check
|
||||||
auth: approle
|
auth: approle
|
||||||
claim: catalog:openrouter-llm-connect
|
claim: catalog:openrouter-llm-connect
|
||||||
purpose: IR-WP-0004 read-only OpenRouter key authentication check; no inference
|
purpose: IR-WP-0004 read-only OpenRouter key authentication check; no inference
|
||||||
|
|
||||||
workload_delivery:
|
workload_delivery:
|
||||||
- mode: external-secrets
|
- mode: external-secrets
|
||||||
owner: railiance-platform + llm-connect
|
owner: railiance-platform + llm-connect
|
||||||
|
delivery_modes:
|
||||||
delivery_modes: [exec-env, read-check]
|
- exec-env
|
||||||
|
- read-check
|
||||||
delivery_auth:
|
delivery_auth:
|
||||||
method: approle
|
method: approle
|
||||||
management: engine
|
management: engine
|
||||||
|
|
@ -41,47 +37,51 @@ delivery_auth:
|
||||||
secret_id_ttl: 15m
|
secret_id_ttl: 15m
|
||||||
secret_id_num_uses: 1
|
secret_id_num_uses: 1
|
||||||
token_num_uses: 8
|
token_num_uses: 8
|
||||||
|
|
||||||
approval:
|
approval:
|
||||||
model: ccr
|
model: ccr
|
||||||
human_control: true
|
human_control: true
|
||||||
purpose: IR-WP-0004 read-only OpenRouter key authentication check; no inference
|
purpose: IR-WP-0004 read-only OpenRouter key authentication check; no inference
|
||||||
decision_ref: CCR-2026-0003
|
decision_ref: CCR-2026-0003
|
||||||
notes: >-
|
notes: CCR-2026-0003 approves the existing workload lane. A live native AppRole
|
||||||
CCR-2026-0003 approves the existing workload lane. A live native AppRole
|
apply remains gated by SECRETS-WP-0006-T05 review and operator approval. First
|
||||||
apply remains gated by SECRETS-WP-0006-T05 review and operator approval.
|
native-cutover candidate (docs/native-lane-cutover.md); not an authorization to
|
||||||
First native-cutover candidate (docs/native-lane-cutover.md); not an
|
apply.
|
||||||
authorization to apply.
|
|
||||||
|
|
||||||
verification:
|
verification:
|
||||||
positive: approved delivery AppRole can read OPENROUTER_API_KEY without printing it
|
positive: approved delivery AppRole can read OPENROUTER_API_KEY without printing
|
||||||
|
it
|
||||||
negative: unrelated token is denied on platform/data/workloads/activity-core/llm-connect/llm-connect-provider-secrets
|
negative: unrelated token is denied on platform/data/workloads/activity-core/llm-connect/llm-connect-provider-secrets
|
||||||
|
|
||||||
risk:
|
risk:
|
||||||
classification: high
|
classification: high
|
||||||
notes: provider key can incur spend and remains valid outside OpenBao until revoked at OpenRouter
|
notes: provider key can incur spend and remains valid outside OpenBao until revoked
|
||||||
|
at OpenRouter
|
||||||
rotation:
|
rotation:
|
||||||
owner: railiance-platform + llm-connect provider operator
|
owner: railiance-platform + llm-connect provider operator
|
||||||
expectation: >-
|
expectation: Mint a replacement at OpenRouter, update every live cluster copy, wait
|
||||||
Mint a replacement at OpenRouter, update every live cluster copy, wait for
|
for ESO refresh, restart llm-connect, verify, and revoke the old provider key.
|
||||||
ESO refresh, restart llm-connect, verify, and revoke the old provider key.
|
|
||||||
ttl: provider-defined
|
ttl: provider-defined
|
||||||
|
|
||||||
deactivation:
|
deactivation:
|
||||||
owner: railiance-platform + llm-connect
|
owner: railiance-platform + llm-connect
|
||||||
expectation: >-
|
expectation: Disable the front door and workload read path, remove materialized
|
||||||
Disable the front door and workload read path, remove materialized Secrets,
|
Secrets, stop consumers, and revoke the provider key at OpenRouter.
|
||||||
stop consumers, and revoke the provider key at OpenRouter.
|
|
||||||
|
|
||||||
audit:
|
audit:
|
||||||
evidence: CCR id, actor, exact path, field name, provider key identifier if non-secret, timestamps, and pass/fail only
|
evidence: CCR id, actor, exact path, field name, provider key identifier if non-secret,
|
||||||
|
timestamps, and pass/fail only
|
||||||
delivery_config:
|
delivery_config:
|
||||||
exec_owner:
|
exec_owner:
|
||||||
status: pending
|
status: configured
|
||||||
owner: intelligence-radar-key-check
|
owner: intelligence-radar-key-check
|
||||||
reason: >-
|
command:
|
||||||
Pin tools/openrouter_key_check.py and its protected Python runtime, exact
|
- /usr/bin/python3.12
|
||||||
argv, private cwd and fixed environment after custody-owner admission.
|
- -I
|
||||||
The pending binding refuses exec before consume or secret retrieval.
|
- -B
|
||||||
|
- /home/worsch/.local/share/secrets-engine/recipients/openrouter-key-check-dc1569f63ef7/openrouter_key_check.py
|
||||||
|
cwd: /run/user/1000/secrets-engine-openrouter-check
|
||||||
|
environment:
|
||||||
|
LANG: C.UTF-8
|
||||||
|
files:
|
||||||
|
/usr/bin/python3.12:
|
||||||
|
sha256: e50d468e8b0adfb05733f5b87b3cff34829c4a8c1aea50c865aa8bdfe4bb150f
|
||||||
|
private: false
|
||||||
|
/home/worsch/.local/share/secrets-engine/recipients/openrouter-key-check-dc1569f63ef7/openrouter_key_check.py:
|
||||||
|
sha256: dc1569f63ef74d73f0a735548c0573db2a1493f7ffc86945f52d0be9b27a3253
|
||||||
|
private: true
|
||||||
|
|
|
||||||
|
|
@ -70,3 +70,31 @@ SECRETS-WP-0007-T04/T07 and SECRETS-WP-0006-T05/T06 remain wait; this workplan
|
||||||
must not close them from synthetic evidence. Keep WARDEN-WP-0039-T03 and
|
must not close them from synthetic evidence. Keep WARDEN-WP-0039-T03 and
|
||||||
IR-WP-0004-T02 waiting until the native route passes. Trials require a separately
|
IR-WP-0004-T02 waiting until the native route passes. Trials require a separately
|
||||||
bound recipient and the existing campaign/budget reconciliation.
|
bound recipient and the existing campaign/budget reconciliation.
|
||||||
|
|
||||||
|
### T03 continuation — 2026-09-14
|
||||||
|
|
||||||
|
User explicitly requested execution of T03. Completed the independently runnable
|
||||||
|
prerequisites: Approval Engine is now deployed and restart/backup/restore verified
|
||||||
|
(APPROVAL-WP-0002-T03 done). Existing audit sender custody/ESO and KeyCape
|
||||||
|
consumer registration were already complete; neither was reprovisioned. Live
|
||||||
|
JWKS/readiness/anonymous and invalid-bearer refusal plus durable heartbeat/outbox
|
||||||
|
checks pass. See `docs/evidence/2026-09-14-approval-engine-deployment.json`.
|
||||||
|
|
||||||
|
Installed the read-only checker in the owner-private versioned local directory,
|
||||||
|
using pinned `/usr/bin/python3.12 -I -B <script>`, fixed environment and private
|
||||||
|
runtime cwd. `docs/proposals/openrouter-key-check.yaml` now has a configured
|
||||||
|
recipient; it remains outside the active catalog and does not admit key use.
|
||||||
|
Runtime trust is the system-owned Python standard library plus pinned executable
|
||||||
|
and script. The install receipt and finalized apply/verify/exec request JSONs are
|
||||||
|
under docs/evidence. No provider request or credential read was made.
|
||||||
|
|
||||||
|
Current wait: user input naming the exact authorized KeyCape operator group for
|
||||||
|
CCR-2026-0019 (asked during this continuation; not inferred from unrelated admin
|
||||||
|
roles). Then complete the scoped OIDC reader and admitted native delivery.
|
||||||
|
A separately admitted approval:create requester and real human approver flow
|
||||||
|
also remain necessary: the withdrawn approval-engine-operator convenience client
|
||||||
|
must not be restored or used to create and approve its own requests. Informed
|
||||||
|
Decision's native review flow and requester admission are dependencies, not
|
||||||
|
replaced by a service token or a seeded live approval. T03 remains open until
|
||||||
|
real approval/consume, attended OpenBao apply, key check, positive/negative
|
||||||
|
native delivery and revocation are evidenced.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue