Map the world by obligation, not by text.

An open upper schema for laws, cases, and joint interpretations. Bound to Semantic Arts gist. Aligned with LegalRuleML.

Statutes, cases, and agreements all create, interpret, or allocate obligations. Obligation-First makes the obligation the unit of comparison across jurisdictions, instruments, and time. EveryAILaw, PubLedge, and AI Incident Law have published v0.6 projections validated against the released contract.

What's in the current draft (v0.6)

A small, opinionated upper schema. The spine is lifted from PubLedge; the proceeding strand is the new contribution. Together they cover three domains in one schema.

Obligation as unit

The schema models normative content by what it requires, not what it says. Two laws with the same Obligation are commensurable even when their texts differ.

Bound to gist

Every entity binds to a Semantic Arts gist class. Authority wraps gist:Organization. Determination is gist:Determination. No new upper ontology.

Three-domain bridge

Statutes, cases, and joint interpretations ride one schema. A Determination can anchor to an EveryAILaw Term from a PubLedge JIA's Obligation.

The four-role spine

RoleTermgist bindingWhat it is
Authorityof:Authoritygist:OrganizationAn organization exercising an evidenced legal, administrative, adjudicative, enforcement, or standards role. Unsupported bases are omitted.
Containerof:Instrumentgist:Agreement / gist:SpecificationThe artifact with binding force — a law, agreement, or ruling.
Secondaryof:Termgist:Specification; contractual Terms may also assert gist:ContractTermA clause or provision within an Instrument.
Primaryof:Obligationexplicit unclassified state or deontic quartet*A source-grounded normative position. Unknown classification never silently defaults to Requirement.

*Aligned with LegalRuleML 1.0 §5.3 deontic operators.

The proceeding strand

RoleTermgist bindingWhat it is
Matterof:Proceedingof:LegalProceeding over gist:EventThe legal matter — case, action, or enforcement docket.
Assertedof:Allegationgist:Content + gist:Intention (when intent-bearing)Asserted but unverified facts. Not authoritative until decided.
Decidedof:Determinationgist:DeterminationAn Authority's ruling. Resolves Allegations and anchors to Obligations.

The category layer

RoleTermgist bindingWhat it is
Conceptof:ObligationCategorygist:CategoryA jurisdiction-neutral duty concept — human oversight, incident reporting. What makes a Colorado transparency duty comparable to a Utah one.

A Category is deliberately not a duty: no jurisdiction, no duty holder, no created_by, and nobody can comply with one. Obligations join categories through gist:isCategorizedBy; skos:exactMatch remains concept-to-concept only. A ruling that concerns a concept generally rather than one statute's version of it anchors the Category.

The alleged-vs-determined distinction is core. An "event" in a legal matter is alleged until determined; post-ruling, the disposition could go either way. Modeling that as a status flag forces premature classification. Three distinct entity types preserve epistemic honesty: an Allegation is what was asserted; a Determination is what was decided; a Proceeding accumulates both over its lifetime.

Bind your dataset (current draft: v0.6)

Adopters bind via JSON-LD @context. obligationfirst.org/v1/ is the live resolution target; w3id.org/of/v1/ is the planned permanent vocabulary prefix. Legacy v0.5 shapes remain schema-valid, while projections using v0.6 vocabulary migrate deterministically and declare obligation-first >=0.6.0 <0.7.0.

JSON-LD context: Colorado evolution companion

{
  "@context": "https://obligationfirst.org/v1/context.jsonld",
  "@type": "of:Instrument",
  "@id": "https://obligationfirst.org/v1/examples/colorado-evolution/instrument/predecessor",
  "title": "Colorado SB 24-205 predecessor, current-contract teaching representation",
  "operative_status": "unknown",
  "enforcement_status": "unknown",
  "computed_as_of": "2026-09-05",
  "describesSameEntityAs": [
    "https://obligationfirst.org/v1/examples/colorado-sb24-205/instrument/sb24-205"
  ]
}

This teaching excerpt preserves a fixed evidence date and explicit unknowns. Its separate identifier and describesSameEntityAs link avoid merging independently maintained descriptions. The omitted predecessor lifecycle label remains unresolved. See the evolution companion and original snapshot for the full evidence boundary and retained history.

JSON Schema validation

# Each entity has a schema at /v1/schema/

curl https://obligationfirst.org/v1/schema/instrument.schema.json
curl https://obligationfirst.org/v1/schema/term.schema.json
curl https://obligationfirst.org/v1/schema/obligation.schema.json
curl https://obligationfirst.org/v1/schema/proceeding.schema.json

# Validate with any JSON Schema 2020-12 validator

Level 2 adopters validate every record, inverse and relation constraints, lifecycle coherence, naming-profile fidelity, and parity across all emitted surfaces.

Scope continuity evaluation

Scope evaluator v1 checks exact territorial and institutional identifiers against adopter-owned inventories and continuity baselines. Recognition, modeled coverage, uncovered scope, and unknown evidence remain distinct. It complements schema and fingerprint checks without changing the v0.6 record contract or certifying legal applicability.

Review the scope contract and diagnostics, inventory tooling schema, and synthetic evaluation fixtures. The deterministic evals cover scope substitutions, institutional and territorial confusion, lost specificity, and unknown evidence.

Implementation status beyond the release package

The v0.6.6 reference package includes scope continuity evaluation. F14 qualified-time evaluation is released offline reference tooling: expected/fallback branches and evidence/date boundaries are tested, while the v0.6 record schema and production serialization are unchanged. These fixtures do not determine legal applicability or predecessor operative history.

Operational federation reconciliation checks supplied source, projection, exact-edge and deployed-artifact evidence for EveryAILaw, PubLedge and AI Incident Law. EveryAILaw owns collection and scheduling; EveryAILaw Pro is a downstream service, not an adopter. Byte equivalence is not deployment attestation or proof that legal content is current. Independent missing-run notification and live recovery acceptance remain open. Operational reconciliation contract.

The machine-readable evaluation status supplements the release-versioned agent files. It describes implementation scope, not deployment acceptance. The F14 fixture contract defines the evidence boundaries and remaining work.

Three steps to bind a dataset

  1. Reference the canonical @context — set @context: "https://obligationfirst.org/v1/context.jsonld" on every record. Repo-local extensions go in a second context object.
  2. Validate shape and graph contracts — run every record through the schema for its Obligation-First @type, validate graph coherence and every emitted surface, and publish a .well-known naming profile.
  3. Cite obligationfirst.org as the canonical reference — preserve record identifiers. The separate w3id vocabulary redirect remains pending.

Assistant-assisted setup

For assistant-assisted repository work, start with the GuideCheck artifact at /.well-known/assistant-guide.txt. Verify it with GuideCheck or another conformant verifier before the assistant acts. The Level 4 sidecar manifest is published at /.well-known/assistant-guide-manifest.txt. Conformance verifies form and provenance, not safety.

Conformance levels

LevelBarRequired
L1IRI-only@id and @type use canonical of: IRIs. @context references this domain.
L2Schema-and-graph-conformant (recommended)L1 plus record shape, graph coherence, publication-surface parity, validator identity, a published naming profile, and typed legal competence where supported.
L3Crosswalk-conformantL2 plus every crosswalk the adopter's naming profile declares is present on every applicable record. Recommended baseline is the crosswalk matrix: Wikidata (SHOULD for authorities), ELI (MUST for instruments where issued), ECLI / neutral citation for cases, urn:lex (MAY), Akoma Ntoso, EuroVoc.

Adopters

Three PAICE legal projects publish v0.6 projections. Obligation-First is their shared semantic, validation, provenance, and identifier contract, and the combined graph passes the released federation gate.

PubLedge

Open recordkeeping protocol for joint interpretations — JIAs, RMAs, no-action letters.

binding live

EveryAILaw

AI law and obligation tracker. Publishes statutory and regulatory obligation records.

binding live

AI Incident Law

Public-record corpus of AI-related cases. Exercises the proceeding strand.

binding live

Worked examples

The repo includes five worked record sets round-tripped through the current draft. Each tests a different part of the schema; the Colorado evolution companion is explicitly synthetic and evidence-bounded.

Flag of Canada

Moffatt v. Air Canada

BC tribunal claim. Two Allegations, one Determination, common-law anchoring. Tests the proceeding strand.

Flag of Colorado

Colorado SB 24-205

Historical modeling fixture: statute, enforcement proceeding, and enacted successor Instrument. It tests relationships, not current legal status or predecessor operative history. F14 separately tests qualified date boundaries.

Flag of Colorado

Colorado evolution companion

Two synthetic current-contract Instruments at a fixed as-of: legislative succession is evidenced, while operation and enforcement remain explicitly unknown. It does not reuse the historical fixture's synthetic litigation as current fact.

Flag of Utah

Utah OAIP JIA

Joint interpretation between Utah OAIP and a regulated party. Tests PubLedge round-trip; binding is purely additive.

Flag of the European Union

EU AI Act Article 50

The source-hierarchy collapse: regulation article, recital, and non-binding Commission guideline all ride one schema as Terms. Interpretation is anchors, never override. Tests cross-layer EU normative structure.

Release archive

Immutable release packages: v0.6.6, v0.6.5, v0.6.4, v0.6.3, v0.6.2, v0.6.1, v0.6.0, v0.5.0, v0.4.3, v0.4.2, v0.4.1, v0.4.0, v0.3.1, v0.3.0 draft, v0.2.2 draft, and v0.2.1 draft.