Control Manifests
A control manifest defines organization resources that the Verdictan API
owns. It is different from the gateway's policy-config.yaml.
| File | Owner | Examples |
|---|---|---|
control-manifest.yaml | Verdictan control plane | IAM, members, teams, agents, budgets, organization policy |
policy-config.yaml | Gateway runtime | Providers, routes, policy chain, runtime behavior |
Do not use the two schemas together. This page defines control-manifest version
"1".
Supported resource groups
Version 1 can reconcile exported organization resources. These resources
include hosted secret references, IAM, teams, members, agents, gateway links,
budgets, approval policies, and organization authentication policy. Start from
verdictan control export so that the manifest contains only resource groups that the
authenticated organization can read.
The CLI orders dependent resources automatically. For example, it creates a policy before a role that refers to that policy. It creates an agent before a gateway link that refers to that agent.
Start from remote state
Export a YAML baseline to stdout:
verdictan control export
Write it to a file:
verdictan control export --file control-manifest.yaml
The export does not include secret values. To include secret records as environment stubs, use this command:
verdictan control export \
--file control-manifest.yaml \
--include-secret-stubs
Review each placeholder environment reference. Before you apply, replace each placeholder. Do not commit the environment's secret value.
By default, one resource-group export failure prevents all manifest output.
--allow-partial changes that behavior. If you use it to investigate a failure,
examine each reported omission. The output file is not a complete declaration
of the declared state.
If the output must be JSON, use --json. YAML is the default format.
Minimal example
version: "1"
resources:
secrets:
- name: openai-production-key
env: VERDICTAN_OPENAI_API_KEY
description: Production provider credential
iam:
policies:
- name: evidence-read
description: Read governance evidence
statements:
- Effect: Allow
Action:
- events:read
- exports:read
Resource:
- "*"
roles:
- name: evidence-reviewer
policies:
- evidence-read
teams:
- name: security-review
description: Governance evidence reviewers
members:
- email: reviewer@example.com
roles:
- evidence-reviewer
users:
- email: reviewer@example.com
teams:
- security-review
Names are dependency references in the manifest. Keep them stable and unique in their resource type.
Plan before you apply
Calculate a read-only plan:
verdictan control plan --file control-manifest.yaml
The plan reports creates, updates, deletes, no-ops, and the operation sequence. Capture JSON for review automation:
verdictan control plan \
--file control-manifest.yaml \
--json
Without --prune, the CLI does not change remote resources missing from the manifest.
With --prune, the plan can include deletions:
verdictan control plan \
--file control-manifest.yaml \
--prune
Use prune only for a file that is authoritative for all supported resources it includes. Do not use prune with an export that contains only some resources.
Apply the reviewed plan
Interactive application:
verdictan control apply --file control-manifest.yaml
The CLI recomputes the plan, prints it, and prompts. In CI, use --yes to show
the approved mutation intent:
verdictan control apply \
--file control-manifest.yaml \
--yes \
--json
In --json mode, apply output is noninteractive without --yes.
JSON mode is not a dry run. Use verdictan control plan --json for a dry run.
For a destructive reconciliation:
verdictan control plan --file control-manifest.yaml --prune --json
# Review the exact plan and required approvals.
verdictan control apply --file control-manifest.yaml --prune --yes --json
The CLI calculates the plan again when you apply it. Do not make unrelated
administrative changes between plan review and application. Review the apply
output for operation failures. Active JSON mode can return exit code zero after
individual operations fail. Automation must verify that applied == true and
that the failed array is empty. It must also verify the exit status.
Manage secrets
A manifest secret has name, env, and optional description. It has no raw
value field:
resources:
secrets:
- name: azure-openai-production-key
env: VERDICTAN_AZURE_OPENAI_API_KEY
Set the referenced variable only in the approved apply environment. Do not put
it in shell-history arguments, generated logs, or committed .env files.
Apply checklist
- Export a complete baseline with the necessary permissions.
- Store it in an access-controlled change workflow.
- Make one coherent change.
- Validate each name reference.
- Run
verdictan control plan. - Review creates, updates, and especially deletes.
- Get the necessary approval.
- Unless deletion is planned, apply without prune.
- Examine all failures.
- Verify the resources through their list or detail surfaces.
- Review Trail evidence for the change.