Ship secret-use snapshot surface for kings-guard
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s

Add secrets-engine secret-use snapshot: catalog plus local evidence only,
contracted non-secret fields, declared 1d heartbeat cadence. Never contacts
OpenBao. Completeness is not claimed. owner_status stays proposed until
kings-guard admits the snapshot as an observation input.

Assistant: grok
Assistant-Session: 01a05f07-ae72-7781-9fcb-19efd61add00
This commit is contained in:
tegwick 2026-09-02 01:31:23 +02:00
parent 3abee434df
commit 2278cefbb3
8 changed files with 374 additions and 13 deletions

View file

@ -64,6 +64,7 @@ secrets-engine lifecycle suspend <catalog-id> [--dry-run]
secrets-engine lifecycle deactivate <catalog-id> [--dry-run]
secrets-engine lifecycle destroy <catalog-id> [--dry-run] [--confirm-destroy <catalog-id>]
secrets-engine audit <catalog-id> [--json]
secrets-engine secret-use snapshot [--catalog-id ID] [--json]
```
`policy publication` resolves a lane's effective publication scope and the env

View file

@ -1,8 +1,9 @@
# Secret-use evidence engine contract (proposed)
# Secret-use evidence engine contract
Status: **proposed**. `layer.yaml` owner_status remains `proposed` until this
surface ships. kings-guard must assent or contest before it is treated as an
observation input.
Status: **shipped** as `secrets-engine secret-use snapshot`. Observation-input
admission remains **proposed** until kings-guard consumes it. `layer.yaml`
`owner_status` stays `proposed` until that admission. Completeness is not
claimed.
Standard: NetKingdom Security Layer Model v0.7 §9.6. Companion:
`net-kingdom/SECURITY-COMPANION.md` §6.
@ -14,7 +15,9 @@ mount, rotation, and delivery-session metadata, so kings-guard can evaluate
secret-abuse posture without a vault client.
`secrets-engine route` and `secrets-engine audit` are operator summaries over
local JSONL. They are not this surface.
local JSONL. They are not this surface. The shipped command is
`secrets-engine secret-use snapshot [--catalog-id ID] [--json]`. It reads the
catalog and local evidence only. It never contacts OpenBao.
## Bound (normative)
@ -53,9 +56,18 @@ exception prose.
## Freshness
Every row carries `as_of`. There is no cached authorization verdict. A consumer
must not treat a stale snapshot as a standing allow. Recommended maximum age
for posture evaluation is the heartbeat interval declared in
`evidence-classification.yaml` (`1d`) until a tighter contract is assented.
must not treat a stale snapshot as a standing allow. Cadence for load-bearing
classes is the heartbeat declared in `evidence-classification.yaml`:
```text
form: heartbeat
interval: 1d
command: secrets-engine evidence heartbeat
```
The snapshot envelope repeats that cadence. Evidence-derived fields (`ready`,
session, stance, decision id) appear only when a local record exists. Omission
is not non-occurrence.
## Destination