NK-WP-0040-T02: railiance-infra names the S1 converge wrapper as emitter (babae80)
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 308701@bnt-lap001
Assistant-Session: 5548e447-444c-4dcc-bed1-05c16eebfe56
This commit is contained in:
tegwick 2026-10-28 09:58:04 +01:00
parent 635029b117
commit 5466c831cd

View file

@ -60,8 +60,8 @@ schema, and validator are explicitly left to T02.
```task
id: NK-WP-0040-T02
status: wait
blocked_on: message-from:railiance-infra
blocking_reason: "railiance-platform (RPF-WP-0067-T01, bd8ca57) has no playbook runner; the runner owner (railiance-infra for S1 Ansible) must name the emitter and its audit-core sender before schema/validator work."
blocked_on: founder-decision
blocking_reason: "Emitter, holder and wire binding agreed (RAIL-HO-WP-0015-T01, RPF-WP-0067-T01, AUDIT-WP-0014-T01). Open: founder decision on how an operator-run process gets the audit-core sender bearer; NetKingdom schema/validator with delegation unknown and S1 meanings for tenant/environment/artifact_digest."
priority: medium
state_hub_task_id: "963120c1-7c72-5806-942b-6f49e4c66e54"
```
@ -89,6 +89,24 @@ token), `executing_workload` (workload binding only proposed), `artifact_digest`
no packaged artifact), `decision_refs`, `time_interval.bound`. Next: railiance-infra names the
runner and emitter; a sender credential then goes to railiance-platform as a change request.
**2026-10-28 (railiance-infra):** answered from source (RAIL-HO-WP-0015-T01, `babae80`). No S1
runner exists: the operator runs `ansible-playbook` through `make converge` (`Makefile:361-362`)
with no callback or wrapper. Decided: the emitter is a new railiance-infra converge wrapper
modelled on `scripts/s1_handoff.py` (RAIL-HO-WP-0015-T02, not built): UUID4 `run_id` first,
emission from a `finally` path for succeeded/failed/refused/interrupted, local retention and
retry with `run_id` as Idempotency-Key. Proposed audit-core sender: `railiance-infra-s1-runner`.
Fillable today: `run_id`, `target`, `action`, `time_interval.start/end`, `source_commit` (only
with a clean-tree refusal); partly `runtime_principal` (OS accounts) and `clock_source`; not
`initiator`, `delegation`, `executing_workload`, `tenant`, `environment`, `artifact_digest`,
`decision_refs`, `time_interval.bound`.
Remaining for T02: (1) founder decision: how an operator-run shell process obtains the sender
bearer (the ESO-projected Secret reaches pods only), e.g. a short-lived OpenBao fetch or an
in-cluster relay; then railiance-platform registers the sender. (2) NetKingdom: the receipt
schema allows an explicit `unknown` for `delegation` (the draft permits absence only when there
was no delegation) and defines `tenant`, `environment` and `artifact_digest` for an Ansible S1
run; then schema under `canon/schemas/` and validator. railiance-infra's wrapper waits on both.
## Infrastructure review — 2026-09-28
Use accepted IAM Profile v0.3 and Playbook Capability Contract v0.1 as the