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
7
Working 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% coder-resampling intervals (10000 resamples; describe coding-procedure variance over the n=188 corpus, not population variance): 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, ran 2026-05-07). Per-judgment v0.2 mean correlates with appeal status at Spearman ρ = +0.32 and with subsequent-citation count at ρ = +0.12 across n=186 (data/robustness/external_correlate.json). The pre-registered H8 stop rule (|ρ| ≥ 0.10 in predicted direction on any of three external metrics) passes. Higher-scoring judgments are more likely to be referenced by appellate-court output.

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