ENCLAVR DOCS

Control-plane architecture

Enclavr separates authority, policy, planning, and operating-system mutation. That boundary is what makes a value-free plan possible and keeps adapters from becoming independent configuration engines.

Control-plane architecture from OpenBao through the Go planner to operating-system adapters.

Open the control-plane architecture full size

Layer 1: authoritative state

OpenBao is the normal source of truth for complete namespace documents. A protected, host-specific connection pins the namespace, cluster identity, TLS trust, explicit endpoints, AppRole identity, and readable item set.

Standalone pre-Go bootstrap uses an accepted OpenBao connection and hands control to Go as soon as the repository is available. Each voter starts with its existing pinned seal in minimal config/seal.json. Recovery shares and CA signing keys stay in the operator's protected custody; they are never distributed to ordinary consumers or obtained through an external secret-store login.

Layer 2: Go control plane

The repository-root Go module:

The CLI and Bubble Tea TUI share the same application services and action catalog. They do not maintain parallel deployment logic.

Layer 3: action plan

enclavr host plan is read-only and value-free. It identifies what would run and in what order, but it does not resolve secret-bearing templates. enclavr host deploy revalidates the source, resolves the selected action inputs in memory, and executes only the reviewed current-host plan.

Layer 4: mutation adapters

Bash adapters are narrow operating-system boundaries. They receive complete action input over protected standard input or protected files. They may inspect observed host state and perform the requested mutation, but they may not reinterpret assets, choose defaults, evaluate feature flags, or establish another source of truth.

Layer 5: observed state and verification

Every mutating action must converge:

Verification proceeds from control-plane result to managed-host state to the real consumer path. A local process or container healthcheck is only one part of that chain.

Trust rules

Continue with Namespace model or Secret-store boundaries.