Research artifact — not legal advice, not court-endorsed. Source judgments remain the property of the issuing court. See data/tos_audit.md and LICENSE.
Maxim Labs · Working Paper v0.2 · Atlas ↓ · Playground → · Simulator → · Authoring → · Ingestion → · Cross-border → · API →

Habeas Protocol

A computational layer for three operating commercial tribunals — the DIFC Courts in Dubai, the ADGM Courts in Abu Dhabi, and the Singapore International Commercial Court (SICC). Updated May 3, 2026.

At a glance

—
Judgments coded
—
First-pass set (LLM-graded)
—
DIFC
—
ADGM
—
SICC
—
SICC mean / 2.00
—
ADGM mean / 2.00
—
DIFC mean / 2.00
—
Worked traces

Empirical findings

All three tribunals score at near-ceiling on every per-ruling primitive, and 2/2 on both architectural system properties. The pattern is robust to two stress tests, and seven executable traces from the corpus demonstrate the protocol's methodological coverage across formula, deferred conditional, bounded discretion, arithmetic and Boolean composition, statutory partial-refusal, and a third-party-jurisdiction gate.

Inferential layer. Bootstrap 95% case-resampling intervals (10000 resamples of the judgments within each tribunal; they describe how much each mean moves with which cases are in the sample, and do not capture grader error): ADGM 1.91 [1.89, 1.94], SICC 1.85 [1.80, 1.90], DIFC 1.72 [1.62, 1.81]. All three pairwise differences exclude zero at α=0.05 — the ranking is statistically supported, not point-estimate noise. Raw values: data/bootstrap_ci.json; computation: scripts/compute_bootstrap_ci.py.

Construct validity (external correlate, recomputed 2026-10-05). No positive external correlate was found, so hypothesis H8 is not satisfied. Per-judgment v0.2 mean against subsequent-citation count: Spearman ρ = −0.04 (n=186, null). Against appeal status: ρ = −0.26 (n=163): the 10 first-instance judgments later referenced by appellate output score lower (1.70) than the rest (1.90). Raw values: data/robustness/external_correlate.json. An earlier release reported +0.32 and +0.12; those came from a rank formula that is invalid for tied data and are withdrawn (paper §4.12).

Of the 188 judgments scored, 39 form an LLM-graded first-pass set (32 DIFC + 7 ADGM, scored by Claude Sonnet 4.5); the remaining 149 entries (69 ADGM + 80 SICC) are scored by deterministic regex heuristics — no LLM in the loop for these 149. Per-entry grader-type and provenance are recorded in coding.grader_type, coding.coder, and grader-type-specific fields (model + prompt SHA for LLM entries; producing-script path for regex entries).

The tribunals already exist; what is missing is the computational layer.

The Atlas — 188 fingerprints

One sigil per judgment. Each fingerprint below is generated deterministically from the primitive scores of a single ruling in the coded corpus. Same scores → same shape; different scores → different shape. Six concentric rings encode PR1–PR6, two outer arcs encode SP1–SP2, and a hash-seeded rosette gives every case ID its own face.

Habeas Atlas · vol. I

Read the rings, and you can read the court.

DIFC Courts · 32 judgments
ADGM Courts · 76 judgments
SICC · 80 judgments
loading judgments…

How to read a fingerprint

Six concentric rings encode the per-ruling primitives, innermost to outermost: PR1 rule source · PR2 typed evidence · PR3 machine-readable order · PR4 procedural state · PR5 reasoning trace · PR6 replayability.

A full ring with eight tick-marks means a perfect score (2). A half-arc with four ticks means a partial score (1). A faint dashed circle means absent (0).

Two outer arcs encode the system properties: SP1 separation of powers (top), SP2 appeal path (bottom). The central rosette is a hash-seeded ornament unique to the case ID — so two judgments with identical scores still wear different faces. A small dot at the upper-right marks one of the seven cases that became an executable trace.

loading…
LOADING JUDGMENTS…

The six per-ruling primitives

Properties of any individual ruling, scored 0 (absent) / 1 (partial) / 2 (fully implemented). v0.2 of the framework. Definitions live in data/primitives.json.

IDNameWhat it tests

System properties

Architectural facts about the tribunal as a whole, not properties of individual rulings. Scored once per institution. The score-0 row is what you avoid by anchoring at DIFC or ADGM rather than at an ad-hoc Web3 arbitration project.

TribunalSP1 Separation of powersSP2 Appeal path

Seven working traces

Each trace lifts a real rule from the corpus into Catala source plus a Python evaluator and runs it against the case's event log. The seven span the full methodological spectrum: formula, deferred conditional, bounded discretion, arithmetic composition, Boolean composition, partial statutory refusal under Singapore IAA s 31, and a third-party-jurisdiction gate (Norwich Pharmacal + Bankers Trust). Three tribunals, three legal families, one engine. Trace #3 is the honest one — it shows what the rules cannot fully decide.

Trace viewer

Pick a trace. The left column is the rule as Catala source — the formal specification. The middle column is the event log — what happened, with the facts the human judge had to determine. The right column is the output — what the predicate produces when run against those facts, with assertions checked against the court's ruling.

Rule rule.catala_en

      
Events events.json
Output predicate ⟶ court

All judgments

Case Tribunal Date Judge Mean score PR1PR2PR3PR4PR5PR6