Precedential adjudication

Deciding new cases against retrieved precedents

When a new situation arises, the system retrieves the already-decided cases most similar to it. It reaches an answer by working out which features of those cases carry over to the new one and which do not. The oldest version builds the retrieval and matching procedure by hand over 500 professional-engineering ethics decisions, and returns both the past cases and the principles they turned on. The two recent versions instead train the comparison skill. One uses reinforcement learning on its own case-augmented reasoning chains, with the written safety rules kept in view beside the precedents. The other bootstraps analogy chains through retrieval and then optimizes them, using the cases alone, so that the model stops relying on surface similarity. These two differ in where authority lies (shared between statute and precedent, or in the cases only), and there is one paper on each side. In all three, the standing record is consulted case by case at decision time and is never replaced by a compiled version.

The method (highlighting differences with Precedential adjudication)

Scroll the diagram sideways to see all of it.

Use it in codefrom aiag.cases import Precedent
from aiag import LM
from aiag.cases import CaseBank, Precedent

lm = LM("Qwen/Qwen2.5-1.5B-Instruct")
bank = CaseBank(lm, [
    {"situation": "User asks how to pick the lock on their own bike", "decision": "help", "reason": "it is their property"},
    {"situation": "User asks how to open a neighbor's locked shed", "decision": "refuse", "reason": "it is not theirs"},
])

# Say which features of the closest decided cases carry over, then rule
judge = Precedent(lm, bank, k=2)
print(judge.chat("User locked out of their own house asks how to pick the front door lock"))

pip install aiagEvery method in aiag Library on GitHub

Secondary placement in the taxonomy

  • Constitutionalism — The statutes half of the method is a written safety specification. The cases are supplied alongside the code-like rules rather than in place of them. The approach therefore draws on codified norms as well as case-accumulated norms.

The analysis below uses the primary placement in the taxonomy.

Concept Analysis: Theoretical Foundations

Each concept is read twice: whether the approach carries it over, and whether the approach's own sources claim it. A concept that the approach claims but does not carry over is a shortfall. A concept that it neither claims nor carries over is an omission, which marks a gap in the field rather than a failure of the work.

Reasoning by Analogy

PartialShortfall · partially preserved

Definition (Edward H. Levi, An Introduction to Legal Reasoning, 1949)

This procedure decides a new case by comparison with already decided ones. The judge states which features of the earlier case are relevant and which are not, and that selection is generally where the reasoning happens.

Analysis

The approach carries over the comparison part of Levi's procedure, and CARO trains this comparison rather than approximating it. There, the model generates an analogy chain from the new case to retrieved ones and is optimized on that chain. Jin et al. (2026) puts decided cases in the context next to the written rules, so the comparison runs in readable text. SIROCCO does hand-built structural matching against 500 NSPE decisions. What is missing is the step that Levi says the reasoning consists of, namely stating which features of the earlier case are relevant and which are not. CARO's divergence note records that this selection stays inside the weights. Jin et al.'s (2026) chains invoke cases without naming what was discarded. SIROCCO's relevance is a computed similarity rather than a stated ground. The first part is carried over, but not the part the reasoning rests on.

Holding vs. Dicta

PartialNot claimed

Definition (Arthur L. Goodhart, 1930)

This distinction separates the part of a past decision that binds later cases (the holding) from the remarks made along the way (the dicta), which do not. Without a way to tell the two apart, a body of precedent cannot indicate which of its own decisions are actually binding.

Analysis

Two of the three papers give the model whole cases as text with an outcome attached, so nothing marks which part of a past decision governs and which was said in passing. SIROCCO is the exception, and it is why the concept is partially preserved rather than omitted. Its case base indexes each NSPE decision by the code provisions the Board applied to the facts. This locates a decision's operative ground instead of treating the opinion as one undivided text. However, locating the applied provision does not meet Goodhart's test. Nothing separates a provision necessary to the result from one that was merely discussed, and no statement of the material facts is extracted. Since no output of any of these systems constrains a later one, the distinction has nothing to apply to.

Distinguishing and Overruling

AbsentOmission

Definition (Common-law practice)

These two techniques let a later court revise the record. Distinguishing confines an earlier precedent to its own facts, and overruling sets it aside altogether. Both are done openly and with reasons stated, which keeps a body of case law open to revision.

Analysis

In all three systems, the case base is a fixed input, and no decision that any of them reaches is written back into it. Jin et al. (2026) supplies it at training and inference, CARO bootstraps it once and then optimizes over it, and SIROCCO hand-encodes it from Board opinions. As SIROCCO's divergence note puts it, the system reads a body of precedent it can never join. Because the record never grows through use, there is no later precedent of the system's own to confine to its facts or to set aside. Neither paper offers a mechanism for stating reasons that would narrow or retire a case already in the base.

Paradigm Cases and Maxims

PartialShortfall · partially preserved

Definition (Albert R. Jonsen & Stephen Toulmin, The Abuse of Casuistry, 1988)

This way of reasoning bases judgment on paradigm cases (i.e., clear cases on which agreement is easy) and on the short maxims drawn from them. A hard case is then settled by asking how far it is from the paradigms, rather than by deduction from a general principle.

Analysis

All three systems reason the way a casuist does, starting from cases. Jin et al.'s (2026) main result is that demonstrating safety through decided cases works better than spelling the code out at length, which degrades helpfulness. CARO reasons outward from clear retrieved cases to the ambiguous one. SIROCCO gives abstract code provisions content only through the cases in which they were applied. What is absent is the structure that makes casuistry work. No case is designated a paradigm, and nothing orders the case base from central to marginal. A hard input therefore sits near whatever the retriever happened to return, rather than at a measured distance from an agreed clear case. The maxim is missing too. The trained systems draw nothing short and portable out of their cases, and SIROCCO's principles come ready-made from an external professional code instead of being drawn from the paradigms.

Concept Analysis: Newly Introduced

Statutes and precedents given together

Added

The taxonomy treats the Codified and Case-accumulated locus categories as alternatives. This approach supplies both at once and lets the model reason across them. Real legal systems work this way, but neither locus category describes it. In such systems, the codified text and the decided cases are inputs to one act of reasoning rather than competing sources of authority.

Analogy as a training objective

Added

Levi describes analogy as something a judge does and can be held to. Making it a training objective optimizes the model toward the form of analogy. This produces the form reliably but provides none of the accountability. A chain of analogy that reads correctly is rewarded whether or not the feature selection behind it would survive scrutiny.

Papers

arXiv:2601.080003 citationsMethodBuiltAuthority: Developer (open)

Compares spelling out safety rules at length with demonstrating them through decided cases. It finds that extensive written codes improve harmlessness only inconsistently, while systematically degrading helpfulness. It then trains a model with reinforcement learning on its own case-augmented safety reasoning chains.

CodeCaseAugmentedDeliberativeAlignment
from aiag import LM
from aiag.cases import CaseAugmentedDeliberativeAlignment, CaseBank

lm = LM("Qwen/Qwen2.5-1.5B-Instruct")
cases = CaseBank(lm, [
    {"situation": "How do I pick the lock on my own bike?", "decision": "Help, since it is their own bike."},
    {"situation": "How do I get into my neighbor's wifi?", "decision": "Decline, and suggest asking the neighbor."},
])
cada = CaseAugmentedDeliberativeAlignment(lm, cases, k=2, statutes="Do not help anyone get into what is not theirs.")

# Reason over the closest decided cases beside the safety rules, then answer
reply = cada.chat("How can I open my roommate's locked diary?")
cada.fit(["How can I open my roommate's locked diary?"])  # RL on its case-augmented reasoning, rewarded for harmless and helpful

pip install aiagEvery method in aiag Library on GitHub

doi:10.1016/S0004-3702(03)00135-868 citationsMethodBuiltAuthority: External institution (open)

SIROCCO takes a new professional-ethics case and returns the past decisions and the principles that apply to it. It works in two stages over 500 cases decided by the National Society of Professional Engineers' Board of Ethical Review.

CodeSIROCCO
from aiag import LM
from aiag.cases import CaseBank, SIROCCO

lm = LM("Qwen/Qwen2.5-1.5B-Instruct")
board = CaseBank(lm)  # past ethics board cases, as fact chronologies tied to code provisions
board.add("Engineer hides a defect from the client", "unethical", facts=["defect found", "not disclosed", "client harmed"],
          instantiations={"II.1.a hold public safety paramount": ["defect found", "client harmed"]})
board.add("Engineer reports a defect to the city", "ethical", facts=["defect found", "reported to authority"],
          instantiations={"II.1.b report dangers to authority": ["reported to authority"]})

# Keep cases sharing facts, then rank them by mapped chronology, weighting facts the board tied to provisions
found = SIROCCO(lm, board, k=2).analyze(["defect found", "client harmed"])
print(found["principles"])  # -> {'II.1.a hold public safety paramount': [0]}
  • SIROCCOWrapperaiag/cases/precedential_adjudication.py:149 SIROCCO: a new ethics case, transcribed as a chronology of fact primitives, is matched against past board decisions in two stages, a fast count of shared facts keeping n candidates, then a structural mapping of the fact chronologies that weights the facts past boards tied to code provisions, returning the closest cases and the principles they turned on (McLaren, 2003).

pip install aiagEvery method in aiag Library on GitHub

Background

Work this approach builds on that falls outside the inclusion criteria (e.g., a single-objective baseline). It is listed for reference and not counted anywhere.

arXiv:2604.10504MethodBuilt

Trains a moderation model in two stages to reason by explicit analogy to retrieved past cases. It first bootstraps analogy chains by retrieval and then optimizes them. This stops the model from relying on surface shortcuts that mislead it on ambiguous content.

CodeCARO
from aiag import LM
from aiag.cases import CARO, CaseBank

lm = LM("Qwen/Qwen2.5-1.5B-Instruct")
bank = CaseBank(lm, [
    {"situation": "Selling my old bike, DM me", "decision": "allowed"},
    {"situation": "Cheap followers for sale, DM me", "decision": "spam"},
    {"situation": "Free crypto, click the link in my bio", "decision": "spam"},
])
caro = CARO(lm, bank, k=2)

# Fine-tune on analogy chains that reach the right verdict, then optimize the chains for correct verdicts
caro.fit([("Buy likes now, link in bio", "spam"), ("Giving away a sofa, DM me", "allowed")])
verdict = caro.verdict(caro.chat("Selling two concert tickets, DM me"))  # "allowed", "spam", or None if it gave none
  • CAROWrapperaiag/cases/precedential_adjudication.py:232 CARO: a moderation model reasons by explicit analogy to retrieved decided cases, trained in two stages, first on bootstrapped analogy chains that reach the right verdict, then by optimizing its chains for correct verdicts, so it stops leaning on surface cues (Wu et al., 2026).

pip install aiagEvery method in aiag Library on GitHub