Headless multi-application, multi-tenant secrets mangement engine.
Find a file
tegwick f211525f00
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Keep serve on the live lifecycle path until the job stream ends.
The process reads one stage credential file at startup, applies each job through the CLI lifecycle functions, and waits for further jobs. A second stage credential file refuses startup. A local allow flag does not authorize the call.

Assistant: grok
Assistant-Session: 01a1609f-72b8-7222-9dff-fae300115e42
2026-10-22 18:15:23 +02:00
.claude/rules Declare Engine/Lifecycle against security layer model v0.7 2026-08-29 11:57:47 +02:00
.decisions Document scope alignment and warden-sign readiness 2026-06-30 00:52:05 +02:00
.forgejo/workflows Add Forgejo CI smoke workflow (enablement template) 2026-07-08 12:37:57 +02:00
catalog Correct metered Sonnet 5 admission and prepare native action packet 2026-09-27 17:00:33 +02:00
docs Manifest the lifecycle engine as a library, a one-stage CLI, and an in-process service. 2026-10-22 18:02:21 +02:00
history Declare Engine/Lifecycle against security layer model v0.7 2026-08-29 11:57:47 +02:00
intakes Point exec-owner-binding at the access-engine checkout 2026-10-09 19:53:41 +02:00
policies Harden secret provisioning and lifecycle controls 2026-08-23 12:05:58 +02:00
registry chore(registry,workplans): refresh reuse-surface entry; record WP14/WP15 upstream critical paths 2026-10-21 08:41:59 +02:00
scripts build: package CLI with pinned producer verifier 2026-10-16 09:20:33 +02:00
src/secrets_engine Keep serve on the live lifecycle path until the job stream ends. 2026-10-22 18:15:23 +02:00
tests Keep serve on the live lifecycle path until the job stream ends. 2026-10-22 18:15:23 +02:00
tools feat(admission): founder-signed trust and recovery-attempt admission (WP14 T02, WP15 T05) 2026-10-21 00:30:59 +02:00
verifier Verify normalized task approval facts and preserve signed source types 2026-10-16 17:28:03 +02:00
workplans Manifest the lifecycle engine as a library, a one-stage CLI, and an in-process service. 2026-10-22 18:02:21 +02:00
.generated-work-records.json build: adopt staged records and retain reviewed orientation snapshot 2026-10-19 13:30:57 +02:00
.generated-work-records.mk build: adopt staged records and retain reviewed orientation snapshot 2026-10-19 13:30:57 +02:00
.gitignore build: keep generated orientation brief local and untracked 2026-10-19 13:44:06 +02:00
.repo-classification.yaml feat(mvp): working secrets-engine CLI for the whynot-design npm publish lane 2026-06-28 12:28:45 +02:00
AGENTS.md Declare Engine/Lifecycle against security layer model v0.7 2026-08-29 11:57:47 +02:00
CLAUDE.md Regenerate agent instructions from state-hub templates (CUST-WP-0055 T01) 2026-07-08 14:50:36 +02:00
evidence-classification.yaml Add native rotate and persistent lane overlay states 2026-09-02 13:09:10 +02:00
INTENT.md Align the lifecycle intent with the accepted engine blueprint. 2026-10-22 17:46:15 +02:00
layer.yaml Reflect the published service-JWT login contract and proven login 2026-10-10 12:41:16 +02:00
LICENSE Adopt Target Revenue Source License V1C1 (org-wide preliminary rollout) 2026-07-30 01:04:47 +02:00
Makefile build: adopt staged records and retain reviewed orientation snapshot 2026-10-19 13:30:57 +02:00
pep-stance.yaml Implement SECRETS-WP-0008 unblocked layer-model obligations 2026-08-29 12:52:55 +02:00
ProductRequirementsDocument.md Add value-safe verification and audit reporting 2026-08-23 12:33:38 +02:00
pyproject.toml build: package CLI with pinned producer verifier 2026-10-16 09:20:33 +02:00
README.md build: package CLI with pinned producer verifier 2026-10-16 09:20:33 +02:00
SCOPE.md Keep serve on the live lifecycle path until the job stream ends. 2026-10-22 18:15:23 +02:00
uv.lock Use bounded Railiance time for protected validity checks 2026-09-15 22:16:31 +02:00
WORK-RECORDS.md Manifest the lifecycle engine as a library, a one-stage CLI, and an in-process service. 2026-10-22 18:02:21 +02:00

secrets-engine

Headless, multi-application, multi-tenant secrets workflow and automation layer for approved secret custody, delivery, and lifecycle work across build, test, and production stages.

Layer: Engine / Lifecycle under the accepted NetKingdom Security Layer Model (layer.yaml). OpenBao remains the custody and enforcement backend. secrets-engine is the deterministic API over it: catalog, decision consumption, plan/apply, guarded provisioning, verification, delivery, evidence, lifecycle metadata, and native-access deactivation. It does not render authorization decisions. Local evidence can be inspected through an allowlisted per-lane audit summary without exposing record detail.

Start Here

Core Direction

The MVP proves the whynot-design-npm-publish lane end to end:

  1. describe the lane in a non-secret catalog (catalog/);
  2. verify an approved decision (State Hub or local fixture);
  3. apply OpenBao policy/auth metadata through a stage-aware role;
  4. provision and verify the value without printing it;
  5. run a workload command through safe exec-time delivery.

Target command shape:

secrets-engine exec --catalog whynot-design-npm-publish -- npm publish

Quickstart

uv venv && uv pip install -e ".[dev]"
source .venv/bin/activate
secrets-engine catalog list

# Run the whole pilot chain live against a throwaway OpenBao dev server:
SECRETS_ENGINE_HUB_URL="" bash scripts/demo-e2e.sh

The implementation is a Python package (src/secrets_engine/). OpenBao is reached only through the bao CLI adapter (openbao.py); the rest of the code speaks in lanes and guarded plans.

Security Rules

  • Do not put raw secret values in Git, State Hub, chat, prompts, issue comments, workplans, or normal logs.
  • OpenBao is the backend custody and audit authority.
  • Build, test, and production have separate policy boundaries.
  • Production live actions fail closed until the durable State Hub action-authorization endpoint is available; local approval mirrors are throwaway-demo material only.
  • A privileged production OpenBao call also requires a successful approval-engine CAS consume first. Conflict or unavailability means do not write.
  • Temporary bootstrap OpenBao credentials must live outside repos, use mode 0600, be revocable, and be removed after narrower auth is working.

Packaged CLI deployment uses the reviewed wheel + verifier bundle. A Python wheel alone omits the mandatory signature helper.