FLUXFLUX
  • Introduction
  • Quickstart
  • Two Specs, One Substrate
  • The Six Families
  • The FLUID Seam
  • Deterministic & Governed
  • Runtime & Evidence
  • Anatomy
  • The Nineteen Kinds
  • Versions
  • Changelog
  • JSON Schema 0.5.0 ↗
  • UI Hints 0.5.0 ↗
  • Enforcement Contract 0.5.0 ↗
  • Bundle Manifest 0.5.0 ↗
  • The vNext Plan
  • The Nine RFCs
  • Conformance Profiles
Examples
What's New
FLUID ↗
GitHub
GitHub
  • Introduction
  • Quickstart
  • Two Specs, One Substrate
  • The Six Families
  • The FLUID Seam
  • Deterministic & Governed
  • Runtime & Evidence
  • Anatomy
  • The Nineteen Kinds
  • Versions
  • Changelog
  • JSON Schema 0.5.0 ↗
  • UI Hints 0.5.0 ↗
  • Enforcement Contract 0.5.0 ↗
  • Bundle Manifest 0.5.0 ↗
  • The vNext Plan
  • The Nine RFCs
  • Conformance Profiles
Examples
What's New
FLUID ↗
GitHub
GitHub
  • Schema Reference

    • Schema Reference
    • Anatomy
    • The Nineteen Kinds
    • Versions
    • Changelog

Anatomy

flux-schema-<version>.json is a JSON Schema 2020-12 document with a versioned $id, closed objects throughout, and a shared $defs vocabulary — the same dialect and conventions as FLUID 0.7.5.

The envelope

Every document, regardless of kind:

fluxVersion: "0.4.0"   # enum of the versions this schema file accepts
kind: World            # discriminator: one of nineteen
id: q3-retention-world # $defs/identifier — the target other documents reference
name: Q3 Retention World
version: 2.1.3         # optional semver — the RFC-03 lockfile anchor
description: …         # optional
tags: […]              # optional
labels: { k: v }       # optional string map
metadata:
  owner:
    team: growth-lab   # required — accountability is not optional
  createdAt: …         # optional RFC 3339
agentPolicy: …         # optional; required if skills are declared
skills: […]            # optional agentic extension point (any kind)
extensions:            # optional RFC-02 port — the one sanctioned escape hatch
  com.acme.flux/1: { … }
spec: …                # the kind-specific block

Top-level additionalProperties: false — unknown envelope keys are rejected, as they are inside every kind's spec. A typo is an error, not a silent no-op.

Kind dispatch

The schema carries one if/then branch per kind, each guarded with required: ["kind"]. Consequences you'll actually notice:

  • a document with the wrong kind's fields fails loudly at the exact paths;
  • a document missing kind produces exactly one error naming kind — not an error spray from every branch;
  • a spec is validated by exactly one branch, and that branch owns it completely (additionalProperties: false).

The shared grammar ($defs)

DefMeaning
identifier / ref^[A-Za-z0-9_][A-Za-z0-9_.-]*[A-Za-z0-9_]$ — byte-identical to FLUID's identifier, so any legal FLUID product id is a legal FLUX ref
refListnon-empty, unique list of refs
unitIntervalnumber in [0, 1] — probabilities, mixes, temperatures
rfc3339timestamp with lexically-bounded fields, lowercase t/z permitted
currencyCodeISO-4217 ^[A-Z]{3}$
sovereigntyallowedZones + enforcement: block | audit
agentPolicymodel allow-list, token budget, use-case limits — FLUID-aligned vocabulary
skillBindingname, skillRef, purpose, optional model/budget
edge{from, to}, both required — taxonomy transitions, blueprint edges
traitRFC-01: scalar 0..1, categorical distribution, or bounded normal
versionedRefRFC-03: name or name@<semver-range>; versioned refs resolve through flux.lock
semanticRefRFC-07: <model>/<measure> into the bundle's bound semantic model

The offline validator

What JSON Schema cannot express, scripts/validate.py enforces — offline, no cloud, no engine:

CheckFailure it prevents
Reference resolution, kind-typeddangling or wrongly-typed *Ref
Id uniqueness (flux and fluid docs)last-write-wins ambiguity at the seam
lifecycleMix / variant weights sum to 1populations and experiments that don't add up
Transitions ⊆ states, edges ⊆ nodesunreachable taxonomy states, phantom topology
timeBounds.start < endinverted simulation windows
skills within agentPolicymodel or budget escapes
RFC-01 trait distributions (sum→1, min<max)populations that don't add up
RFC-03 flux.lock (range satisfied, version match, content digest)irreproducible module reuse
RFC-07 semantic measures resolve"revenue" meaning three things
Every .fluid.yml valid for its declared versionbroken contracts riding along in a bundle
Seam conformance + consent strictnessproving one thing, shipping another

Malformed input (broken YAML, non-mapping documents, schema-invalid shapes) produces clean, located error messages — never a stack trace. The regression suite pins all of it.

Edit this page on GitHub
Last Updated: 9/15/26, 6:51 PM
Prev
Schema Reference
Next
The Nineteen Kinds