Zubin Deepak Rajasekar
Back to home page

Contract triage desk

Category

Prototype

Year

2026

Live demo

A queue-first gate for routine legal contracts. The model reads, a rule decides.

The bottleneck is not reading speed. It is that every contract gets human attention whether or not it needs any. This desk sorts the queue into three lanes, with a published false-clear budget of zero.

Context

A small in-house legal team reads every contract that arrives. Mutual NDAs, order forms, mostly boilerplate, with redlines they have answered before. The queue runs longer than the day and quarter end makes it worse.

The thinking

The obvious build is a contract reviewer. I think that is the wrong target. The bottleneck is not reading, it is that every contract gets human attention whether or not it needs any.

There are two ways a triage system can be wrong, and they are not symmetric. Over-escalation sends a lawyer a contract they did not need to see, and costs minutes. A false clear sends an unreviewed contract to a counterparty. Only one of those escapes the building.

So the false clear budget was published as zero before the build started, and the harness fails the run if it is breached. Every other decision followed from that.

Contract triage queue sorted into auto-clear, flag and escalate lanes

What I built

Three lanes: auto-clear, flag with the standard response already drafted, escalate with reasons stated.

The model reads and drafts. A deterministic rule decides the lane. Escalate wins, then abstention on low confidence, then flag, then clear. A contract clears only when there are no issues at all.

Legal positions live in one YAML file the legal team owns. The engine holds no view of its own. Change a threshold, contracts move lanes, no code change.

Flagged contract with drafted response for a confidentiality term deviation

What I measured

Fifteen labelled NDAs, three arms, same corpus and labels.

Offline baselineGated modelModel picks the lane
False clears000
Coverage4/156/156/15
Accuracy0.8671.0001.000
Issue recall1.0001.0000.818

15/15 arrived only after two prompt corrections against those labels, so I froze the prompt and wrote five new contracts afterwards. Both arms scored 5/5.

The better evidence came from two contracts written after the freeze. One hid a non-solicit in the purpose clause and a ten-year survival period in the second half of a compliant sentence. Neither uses a trigger word. The system escalated and named both. The keyword baseline clears it, which is a false clear on a document a lawyer would escalate.

The limit

The ablation removed the gate and let the model pick the lane. Same coverage, same accuracy, same zero false clears. On this corpus the gate bought nothing measurable except a closed issue vocabulary.

I am reporting that rather than burying it. The corpus cannot test the gate, because every problem in it is legible on the surface. To test it you need a contract that reads clean and is not. That narrows the gate's justification to one measured claim and two arguments, and it is a weaker case than I set out with.

More projects