Skip to content

VBL: Verification Boundary Language Overview

VBL (Verification Boundary Language) is the language used to define verification boundaries. It specifies what evidence is required, what is prohibited, what conditions must hold, and how those conditions combine.

VBL is intentionally constrained:

  • Integer-only: all arithmetic uses 64-bit signed integers. No floating-point operations.
  • No side effects: a boundary definition is a pure specification, not a program.
  • No imports: each boundary is self-contained.
  • No control flow: no if/else, no loops. Logic is expressed through predicates and the BOUNDARY expression.
  • Deterministic: the same evidence always produces the same result against the same boundary.

A boundary can be as simple as evidence requirements and predicates:

# Loan Applicant Eligibility
require_evidence: credit_score
require_evidence: debt_to_income_pct
require_evidence: account_age_months
require_evidence: identity_verified
predicate: creditworthy: credit_score >= 600
predicate: affordable: debt_to_income_pct <= 40
predicate: established: account_age_months >= 6
predicate: identity_confirmed: identity_verified == 1

Or it can include the full set of constructs:

boundary_id: payment-authorization
version: 1
scope: production
eta_cap: 9950
# Named set
define_set blocked_countries: ("NK", "IR", "SY")
# Type declarations
require_type: amount_cents: integer
require_type: destination_country: string
require_type: sanctions_cleared: boolean
# Evidence requirements
require_evidence: transaction_details
require_evidence: sanctions_screening
require_evidence: amount_cents
require_provenance: sanctions_screening: ofac_service
# Conditional evidence
require_evidence IF amount_cents > 1000000: enhanced_due_diligence
# Prohibitions
prohibit_evidence: manual_override_flag
# Predicates with failure messages
predicate: sanctions_ok: sanctions_cleared == true | "Sanctions screening must clear"
predicate: not_blocked: destination_country NOT IN @blocked_countries | "Blocked destination"
predicate: within_limit: amount_cents <= 5000000
# BOUNDARY block for complex logic (inline comparisons)
BOUNDARY {
sanctions_cleared == true AND amount_cents <= 5000000 AND
(destination_country NOT IN @blocked_countries OR amount_cents < 100000)
}
Construct Purpose Pipeline Stage
boundary_id: Unique identifier Metadata
version: Version string Metadata
scope: Operational scope Metadata
eta_cap: Maximum eta value (integer) Metadata
define_set Named set of literal values Declaration
require_evidence: Require a field Stage 1 (Admissibility)
require_evidence IF: Conditional requirement Stage 1
require_type: Require field type Stage 1
require_provenance: Require evidence source Stage 1 (Admissibility)
prohibit_evidence: Prohibit a field Stage 2 (Prohibition)
prohibit_evidence: ... WHERE Conditional prohibition Stage 2
predicate: Named condition Stage 3 (Predicates)
BOUNDARY { } Inline expression block Stage 3
Operator Example
==, !=, >, <, >=, <= amount >= 1000
AND, OR, NOT a AND (b OR NOT c)
IN, NOT IN country IN @allowed_countries
CONTAINS approver_list CONTAINS "compliance_officer"
Type Examples
Integer 42, -100, 0
String "USD", "production"
Boolean true, false

VBL supports two comment styles:

# Line comment (hash)
// Line comment (double slash)
  • Start with an ASCII letter (a-z, A-Z)
  • Contain only alphanumeric characters and underscores
  • Dot-separated paths for nested evidence: payment.amount
  • Evidence class names and predicate names must be lowercase only

Expression keywords: AND, OR, NOT, BOUNDARY, IN, CONTAINS, WHERE, true, false

Governance keywords: require_evidence, prohibit_evidence, require_provenance, require_type, predicate, define_set, boundary_id, version, scope, eta_cap

Governance keywords are reserved only when immediately followed by :. This ensures backward compatibility with field names that happen to match.