Public alpha. Stripe Live in ~2 weeks. → Get on the launch list
DSLOverview

DSL overview

Status: stub. Day 3 deliverable.

WOS policies are written in a tiny, deliberately constrained YAML DSL. Three primitives — inputs, rules, fallback — and one closing audit block. That’s it.

wos_version: "3.0"
policy_id: kyc.tier2.jp.v3
 
inputs:
  applicant: { type: LegalEntity, required: true }
  documents: { type: "Document[]", min: 1, max: 32 }
 
rules:
  - id: R001
    when: "applicant.sanctions_hit == true"
    then: { decision: REJECT, reason_code: SANCTIONS_HIT }
 
fallback:
  decision: ESCALATE_TO_HUMAN
  reason_code: NO_RULE_MATCHED
 
audit:
  retention_days: 2555
  export_format: JSONL

The compiler enforces hard limits (§5.1) so a hostile DSL can never bomb the evaluator. Glass-Box every step: every fact L2 read, every rule it evaluated, every rule it skipped — all attached to the decision JSON.