Project separate lifecycle and intake audiences for the selected workload
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s

Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a10780-6d41-7952-9718-dfbc1f41236f
This commit is contained in:
tegwick 2026-10-04 22:37:45 +02:00
parent 4a59b234b9
commit a64aa58b38
2 changed files with 26 additions and 3 deletions

View file

@ -25,9 +25,10 @@ Concurrent enqueue may report queue_busy while dispatch is in flight; retry the
same explicit enqueue after the bounded attempt. SIGTERM stops between attempts.
The worker uses the selected existing State Hub service account. It has no
Service/Ingress, database credential, browser route or approval scopes. Only the
intake-audience token is mounted: lifecycle API clients must use their separately
admitted lifecycle-audience token. Token mounts are read-only without subPath.
Service/Ingress, database credential, browser route or approval scopes. Separate 600-second tokens are projected for intake and lifecycle audiences.
The dispatcher reads only intake-token; admitted headless lifecycle clients use
lifecycle-token inside this workload context. Neither token is printed or
exported through the Hub API. Token mounts are read-only without subPath.
The worker image does not change the Hub API image or PostgreSQL schema.
All execution that can write this private queue or run commands as this workload
@ -40,3 +41,18 @@ requester delivery, the INFD lifecycle service and policy candidates. Retain the
PVC and rows on withdrawal; rollback stops the worker but does not undo submitted
memos, native approvals or human acts. Native human acceptance and audit receipts
remain STATE-WP-0096-T03 / INFD-WP-0007-T07.
Explicit queueing from an authorized workstation session (the file contains the
exact envelope returned by lifecycle request-review, not an access token):
```sh
kubectl -n state-hub exec -i deployment/state-hub-memo-dispatch -- \
python -m api.services.memo_dispatch --queue /data/private enqueue \
--envelope /dev/stdin < /private/review-envelope.json
```
This is a per-decision data operation, not a deployment. Headless clients call
8081 with the appropriate projected audience and the normal API idempotency key;
they never request approval:approve or approval:consume. Automatic scanning and
a public delegate endpoint are deliberately outside this worker's contract.

View file

@ -120,6 +120,13 @@
"expirationSeconds": 600,
"path": "intake-token"
}
},
{
"serviceAccountToken": {
"audience": "informed-decision-lifecycle",
"expirationSeconds": 600,
"path": "lifecycle-token"
}
}
]
}