flex-auth (FLEX-DEC-2026-005 / FLEX-WP-0021-T01) reserved the coordinate secrets-engine.catalog-lane.lifecycle v1 and stated an action they infer is a blocker, not a default. This is the enforced set read out of cli.py. Includes the traps an inferred list would hit: `revoke` gates as the `deactivate` action and is not itself an action value; `destroy` is defined but unreachable live; `compromise`/`reactivate` gate overlay state only. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01M65ovP3eiiPHubibvWs9mD Assistant: claude-code Assistant-Model: opus Assistant-Process: 393550@bnt-lap001 Assistant-Session: 4bb359f9-1f12-4410-9e76-079cf23c82e4
2.6 KiB
2.6 KiB
Gated actions over secret-catalog-lane
Authoritative list of the action values secrets-engine passes to the shared
authorization gate (_require_lane_approval → resolve_consume_binding →
require_production_consume). Supplied to flex-auth for
secrets-engine.catalog-lane.lifecycle (FLEX-WP-0021-T01 / FLEX-DEC-2026-005).
This is the enforced set read out of cli.py, not the
secrets-engine.lifecycle/v1 example vocabulary. resource.type is
secret-catalog-lane and resource.system is secrets-engine; the catalog id
is request.resource.id.
| action | Reached by | Side effect |
|---|---|---|
apply |
apply |
writes consumer ACL policy + AppRole metadata |
provision |
provision |
writes one declared KV field |
rotate |
rotate |
replaces one declared KV field |
verify |
verify |
AppRole login + bounded read/capability probe |
handoff |
handoff |
mints role-id/secret-id to mode-0600 files |
wrap |
wrap |
response-wrapped operator handoff |
exec |
exec |
fetches one field into a child process |
deactivate |
revoke and lifecycle deactivate |
removes managed AppRole/policy; preserves KV |
suspend |
lifecycle suspend |
removes managed AppRole; preserves policy |
destroy |
lifecycle destroy |
irreversible KV metadata deletion |
compromise |
lifecycle compromise |
marks lane compromised; blocks delivery |
reactivate |
lifecycle reactivate |
clears overlay state |
Things a package author would otherwise get wrong
revokeis not an action. The CLI verbrevokegates asdeactivate. There is norevokeaction value. Do not add one.destroyis defined but currently unreachable live. The handler raises before the gate; only--dry-runrenders. Keep it in the package as the dual-control-capable case, but no livedestroyCheck will arrive until the exact-action approval contract lands (SECRETS-WP-0007-T04).compromiseandreactivatemutate local overlay state only. They touch no OpenBao object. They are gated because they change delivery posture, not because they write to the backend.plan,apply --dry-run,route,audit,catalog,decision inspectandevidencenever reach the gate and must not appear in the package.- Build and test stages remain fail-open relative to approval-engine; only
stage: prodreaches consume.
Request attributes carried today
resource.attributes carries stage, and sorted fields, policy_targets,
and auth_targets. fields is populated for provision, rotate, verify,
and exec; the others send an empty list rather than a guess.