Skip to main content

Governance DSL Specification

The Governance DSL defines organizational constraints that validate policy documents before compilation.

Unlike policy rules, governance rules do not make runtime decisions. They enforce higher-order authoring constraints on policy structure, rule patterns, field usage, and mandatory controls.

This enables organizations to codify:

  • required safety controls
  • forbidden policy shapes
  • field access restrictions
  • minimum governance coverage
  • policy size limits
  • compliance guardrails

This page is the complete governance authoring reference for v1.


Validation Stage​

Governance validation runs in the compiler pipeline as:

YAML Policy
-> Policy AST
-> Governance Validation
-> Validated IR
-> Runtime Engine

A policy may be structurally valid yet still be rejected by governance.


Root Structure​

version: 1

governance:
rules:
- id: require_prod_approval
applies_to:
actions:
- deploy_service
select:
where:
effect: require_approval
must:
exists: true
error: "Production deploys must require approval"

Top-Level Fields​

version​

Type: Numeric scalar Required: Yes

Current supported value:

  • 1

governance​

Type: Object containing governance rules Required: Yes

Contains the governance rule set.


governance.rules​

Type: Sequence of governance rules Required: Yes

Rules are evaluated sequentially and violations are aggregated.


Governance Rule Specification

Each governance rule contains five major sections.

- id: restrict_sensitive_fields
select:
where:
when:
subject:
domain: snapshot
must:
allowed_fields:
- snapshot.tier
- snapshot.balance
error: "Only approved snapshot fields may be used"

Rule Fields​

id​

Type: String scalar Required: Yes

Unique governance rule identifier.


applies_to​

Optional applicability narrowing.

applies_to:
actions:
- delete_user
- deploy_service

If omitted, the governance rule applies to the entire policy document.

A governance rule applies if at least one policy rule targets one of the listed actions.


select​

Defines how policy rules are selected.

select:
where:
effect: block

The selector always uses a where clause.


must​

Defines the governance constraint.

Supported constraints:

  • exists
  • min_count
  • max_count
  • forbid
  • allowed_fields

error​

Type: String scalar Required: Yes

Custom error message returned when the constraint fails.

This message should be written for human governance reviews.


Selector DSL

Selectors match a subset of policy rules.

Matching is conjunctive: all specified filter clauses must match.


Selector Root​

select:
where:
id: require_prod_approval

Supported where Filters​

Filter by Rule ID​

where:
id: require_prod_approval

Filter by Effect​

where:
effect: require_approval

Supported values:

  • allow
  • block
  • require_approval

Filter by Scope​

Global Rules​

where:
scope:
global: true

Action Scope​

where:
scope:
action: deploy_service

Filter by Condition Subject​

where:
when:
subject:
domain: snapshot
field: balance

This matches if the rule condition references the selected subject.

Supported across:

  • atomic conditions
  • all
  • any

Constraint DSL

The must block uses a closed constraint vocabulary.


exists​

Requires at least one matching rule.

must:
exists: true

Inverse​

must:
exists: false

Requires no matching rules.


min_count​

Requires at least N matching rules.

must:
min_count: 2

Useful for mandatory layered controls.


max_count​

Limits the number of matching rules.

must:
max_count: 5

Useful for preventing rule explosion.


forbid​

Forbids selected rules.

must:
forbid: true

This is ideal for banning dangerous rule patterns.


allowed_fields​

Restricts referenced condition fields.

must:
allowed_fields:
- actor.role
- snapshot.tier

Fields must use:

<domain>.<field>

format.

This validates all referenced subjects inside:

  • atomic
  • all
  • any

conditions.


Violation Model

Governance failures are returned as an aggregated violation batch.

Each violation contains:

  • governance rule_id
  • custom error message

This design is excellent for:

  • CI validation
  • PR comments
  • policy review bots
  • IDE diagnostics
  • compliance exports

Validation Semantics

Governance validation executes in three deterministic stages.

1) Applicability Check​

If applies_to is defined, first determine whether the rule is relevant.


2) Rule Selection​

Select all matching policy rules using the selector.


3) Constraint Evaluation​

Evaluate the selected set against the declared constraint.

Violations are accumulated instead of fail-fast.


Governance Patterns

Mandatory Approval Gate​

- id: require_prod_approval
applies_to:
actions: [deploy_service]
select:
where:
effect: require_approval
must:
exists: true
error: "Deployments must require approval"

Forbid Global Block Rules​

- id: forbid_global_blocks
select:
where:
scope:
global: true
effect: block
must:
forbid: true
error: "Global block rules are not allowed"

Restrict Sensitive Fields​

- id: approved_subject_fields_only
select:
where:
when:
subject:
domain: snapshot
must:
allowed_fields:
- snapshot.tier
- snapshot.balance
error: "Unapproved snapshot field used"

Governance Best Practices

Prefer explicit human-readable errors​

Good:

error: "Production deploys must require approval"

Avoid vague messages.


Use allowed_fields for privacy boundaries​

This is extremely strong for:

  • PII isolation
  • tenant separation
  • financial field controls
  • export restrictions

Use forbid for dangerous anti-patterns​

Examples:

  • global deny rules
  • unrestricted approvals
  • broad admin allows

Strategic Value

This governance layer is one of Actra’s strongest differentiators.

It enables policy-on-policy enforcement, allowing platform teams to govern how teams write governance itself.

This creates a true:

  • compiler
  • governance engine
  • compliance layer
  • policy platform

rather than just a rules DSL.