Orchestrate
orchestrate
Orchestrate missing-secret detection on top of axm-vault.
This module ORCHESTRATES; it never POSSESSES a secret. :func:missing_secrets
reads the vault catalog (:func:axm_vault.load_catalog) and the value-free
resolver provenance (:func:axm_vault.doctor.doctor_data) to surface the specs
that resolve to "missing" — without ever reading a secret value.
:func:provision_missing delegates to vault's :func:axm_vault.setup.run_setup
only on confirmation; doctor never writes a secret itself (every write goes
through vault's API — the SRP invariant).
Unlike :mod:axm_doctor.detect (bootstrap-sensitive, no AXM import), this is
the orchestration seam, so it depends on axm-vault directly.
MissingSecret
Bases: BaseModel
A credential spec that resolves to "missing" across every layer.
Value-less by construction: it carries only the coordinates of the spec
and a copy-pasteable recovery hint (setup_hint). required
preserves the catalog distinction between indispensable and optional
credentials (the catalog default is True). instance identifies
the account concerned, while awaiting_instance marks a multi-instance
group that declares no account yet. The secret value itself NEVER transits
axm_doctor.
Source code in packages/axm-doctor/src/axm_doctor/orchestrate.py
ProvideResult
Bases: BaseModel
Outcome of :func:provide_secret, value-free by construction.
Carries only the coordinates of the credential, the storage target
vault reported (prefixed keyring: or config:) and the attestation.
stored is True ONLY when a post-write re-resolution of the catalog no
longer reports the coordinate missing: a delegated write that raised
nothing is not proof, exactly as for :class:ProvisionResult.
still_missing lists the coordinates left unresolved after the call and
reason names why nothing was stored (vault's refusal, or a coordinate
that stayed unresolved). The supplied value NEVER appears here — the model
deliberately declares no field able to hold it.
Source code in packages/axm-doctor/src/axm_doctor/orchestrate.py
ProvisionResult
Bases: BaseModel
Outcome of :func:provision_missing.
On a dry-run (confirm=False) provisioned is False and groups
lists the groups it WOULD prompt for. On a confirmed run provisioned
is True ONLY when a post-setup re-scan confirms every previously-missing
spec now resolves — delegating to vault's setup driver is not proof the
user actually supplied the secrets (they may skip/empty the prompts).
still_missing lists the specs that remain unresolved after the run
(always empty on a dry-run), so a partial provisioning is reported truthfully
rather than as a false green.
Source code in packages/axm-doctor/src/axm_doctor/orchestrate.py
missing_secrets()
Return the catalog specs that resolve to "missing", value-free.
Reads the vault catalog and the value-free provenance report; a spec is
reported when no resolver layer supplies it. An empty catalog (the
nominal state for vault today) yields [] gracefully.
Source code in packages/axm-doctor/src/axm_doctor/orchestrate.py
provide_secret(*, group, name, value, instance=None)
Store a caller-supplied credential value, attested by a re-resolution.
The third provisioning capability, beside :func:missing_secrets (what is
missing) and :func:provision_missing (ask a human at a terminal): here
the caller already HOLDS the value. sys.stdin is never consulted, so
the call works behind a web server or in a packaged app with no shell.
The write is delegated to vault's vault_set tool, which owns the
sensitivity routing (SECRET to the keyring, CONFIG to axm-config,
NONSENSITIVE refused as environment-only); doctor never stores a
credential itself. A delegated write that did not fail is NOT proof the
credential now resolves — exactly as in :func:provision_missing, truth
comes from re-resolving the catalog afterwards, so a write that persisted
nothing is reported as a failure rather than as a false green.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
group
|
str
|
The credential group id, as declared by the vault catalog. |
required |
name
|
str
|
The credential name within that group. |
required |
value
|
str
|
The value handed to the storage layer. It is never logged, never returned and never placed on the result. |
required |
instance
|
str | None
|
The account identity within a multi-instance group. |
None
|
Returns:
| Type | Description |
|---|---|
ProvideResult
|
A value-free :class: |
ProvideResult
|
the post-write re-resolution no longer reports the coordinate missing. |
Source code in packages/axm-doctor/src/axm_doctor/orchestrate.py
provision_missing(*, confirm=False)
Plan (and on confirm execute) provisioning of missing secrets.
Collects the distinct groups owning at least one missing spec. With
confirm=False it returns the plan without prompting or storing. With
confirm=True it delegates to vault's :func:run_setup (one call per
group, restricted via only=); doctor never stores a secret itself.