How I work · one problem, start to finish

Legal AI is moving too fast to guess, so I built one that doesn't have to.

And I wrote the whole thing down as I went.

One real problem, run from the first question to the finished tool. The tool forecasts where legal AI is heading and what controls firms will be forced to adopt, it grades its own calls against what actually happened, and it keeps its misses on the page, because a forecast that only shows its hits is just hype.

What follows is that build, start to finish.
How I built it

This is the loop I run on every build. Here it is on one real problem, from the first question to the fix.

Discover Design Build Evaluate Repair Track
1
Discover

Keep the problem big, and hold off on “how.”

Discovery is where I refuse to shrink the problem, and this one fought back. The effects run in orders, capability then ruling then adoption then what a firm can afford, but never in a tidy line, some are pure market reactions and some run backwards when a firm files AI output and provokes the rule, and that non-linearity is the thing to model. So no forced single order, each fault line carries the way its own effects actually move.

2
Design

Let the constraints pick the stack

Press the problem against the solution space until the constraints pick the stack: deterministic and replayable, weighted by who sets the rules not by volume, gradeable against what happened, auditable after the fact. That ruled out a model freehanding the forecast and pointed at plain scored code, and the forks resolved fast:

DecisionOptionsChosenWhy
Generate the forecast LLM free-generation vs deterministic weighted scoring Deterministic scoring Replayable and auditable. No hallucinated confidence.
Weight the sources By volume vs by authority tier Authority tiers T1 binding at 1.0 down to T5 vendor at 0.008. Who sets the rule matters, not how loud.
Grade the calls Predict dates vs called-versus-actual at 90-day lead Called-versus-actual Checkable against reality. A miss reads as a miss.
Prediction depth Single ruling meter vs three-order cascade Cascade Capability → ruling → adoption. Each layer only counts if the one it rests on held.
Conflicting evidence Average it out vs discount on conflict Conflict discount Disagreement should lower confidence, not wash out.
3
Build

AI for leverage, the logic stays mine

I paired with AI to move fast and leaned on it hard, but the scoring stayed deterministic code I can read and rerun and defend, five small files that each run on their own.

fault_lines.py
Model
Taxonomy, source tiers, market weights, the three orders.
score.py
Score
Two meters: ruling pressure and adoption pressure. Queue = their intersection.
calibration.py
Grade
Point-in-time backtest, per-order hit rate, cascade conditionals.
build.py
Render
The queue and calibration as a page anyone can read.
run.py
Archive
One pass: backtest, build, snapshot, immutable artifact.
4
Evaluate

Grade it against reality, then say what broke

Then I graded it against reality, replaying ninety days out to check which calls actually held, and I left the miss in on purpose, because a panel that only shows hits is marketing, not calibration.

0.83 overall called-versus-actual, replayed 90 days out at the 7.0 threshold
L2Ruling reactions: did the pressure meter flag the fault line before the ruling landed3 / 3
L3Adoption calls: which controls the market then demanded2 / 3
CascL3 calls that rested on a correctly-called L21 / 2
The agentic-liability L3 call is a logged miss, left in on purpose. A calibration panel that only shows hits is marketing, not calibration.
5
Repair

A logged miss is the next work item

A miss isn't something to bury, it's the next thing to build. This one said the base of the forecast was too thin, so the next work added a proper capability lane and widened the market evidence the calls sit on.

6
Track

Explainable, auditable, traceable

Every run gets logged, hashed and replayable, the inputs and the reasoning and the output and the sources each score rested on, so the whole thing audits end to end. And that record is where the improvements come from, the gaps surface on their own and the loop reopens with evidence instead of a guess.

The lawyers own the doctrine. I bring the modeling, the calibration, and the habit of checking my own work and leaving the misses on the page. A forecast that only shows its hits is just hype, and a forecast no one can read is no good to anyone, so everything is auditable, explainable, and traceable, the sources and the scores and the calls that missed. It keeps things honest, and it's also steroids for iteration and improvement.