THE GIDEON CORP. Back to selected work
Case Study / Platform

ITAR Screen

An internal compliance system for export control. It took a plain product description and returned a structured read on whether the item was restricted, why, and what to do next, with the record kept for the team. Owned outright, and designed to be operated by one person.

What it did
Answered "can we ship this, and to whom" in seconds instead of days
Who runs it
One compliance officer, no team required
Scale
31,306 lines across 270 files
Domain
US export control (ITAR, USML, EAR)
01 / The problem

The question is cheap to ask and expensive to answer.

An engineer holding a part description cannot tell from that description alone whether the item falls under the US Munitions List or the Commerce Control List. The two regimes are administered by different agencies, carry different licensing paths, and getting the call wrong carries criminal exposure under the Arms Export Control Act.

So firms do one of two things. They route every question to outside counsel at counsel rates and counsel turnaround, which throttles the pace of quoting and shipping. Or they guess, and carry the exposure quietly. Neither scales with an engineering team that touches export-relevant hardware every week.

ITAR Screen was built to sit in front of that decision: to take a plain product description, a destination, and an end use, and return a structured, reasoned first pass that tells a compliance officer where to look and how hard to worry, so counsel time goes to the cases that actually need it.

02 / What was built

Three pieces. One job.

Someone types in what they are shipping and where it is going. The system tells them whether it is export controlled, how confident it is, and what to do next. Then it keeps the record.

The dashboard
Where the work happened

Run a classification, screen a counterparty, search past runs, export a report, manage who on the team has access.

The engine
Where every rule lived

One service held all of it: the classification logic, watchlist matching, permissions, billing, and email. Nothing else touched the database.

The public site
The front door

Reference pages for all 21 USML categories, plus a limited trial run so someone could see the output before asking for access.

Keeping every rule in one place is the whole trick. Permissions, usage limits, and the audit trail each had exactly one home, so there was never a second copy to drift out of sync. Five tables carried the state, and each of the three pieces deployed on its own.

03 / The portal

What it looked like to use.

Three fields in. Back came a plain-language read with its reasoning attached and a next step, not a yes or no.

Empty ITAR Screen classification form
The ask. Product description, destination country, and end use. Deliberately short: the friction of a long intake form is what pushed people back to guessing.
Classification form filled with a gimballed EO/IR sensor turret bound for Singapore
A hard case, on purpose. A gimballed EO/IR sensor turret bound for Singapore for coastal surveillance by a foreign naval auxiliary. Exactly the shape of item that sits on the USML and EAR boundary.
Classification result card showing HIGH risk, AMBIGUOUS state, reasoning, and recommended next steps
The result card, and the whole design argument in one screen. The system returned HIGH risk and an AMBIGUOUS state rather than picking a side. The reasoning paragraph cites the Category XII optics revisions at 90 FR 41784 and explains why the item could read as Category XI(c) or as EAR 3A001. The recommended next steps are procedural, not conclusory: submit a Commodity Jurisdiction request to DDTC for a binding determination, and do not export pending counsel review. Where the honest answer was "a human has to decide this", the product said so.
Classification history with usage meter, export controls, and a table of past runs
History, usage, and export. Every run persisted with its inputs, its reasoning, and its risk read, searchable and filterable, with CSV, PDF, and audit exports. The monthly usage meter tracked against the plan cap. The spread across the table is the point: a mix of specific USML hits, EAR jurisdiction, and ambiguous cases, at high, medium, and low risk. A tool that returns the same answer to everything is not doing any work.
04 / The hard part

Anyone can put AI behind a text box. The work is deciding how it fails.

In this domain a wrong answer is not a bad user experience, it is a federal crime. So the real engineering was not getting good answers. It was making sure the bad answers were the safe kind. Four decisions did that.

DECISION 01

When it was not sure, it said so

The two ways of being wrong are not equal. Missing a restricted item can end a company. Flagging a harmless one wastes an hour. So the system was built to lean toward the hour. When it could not tell which side of the line an item fell on, it said "I cannot tell" and sent the case to a human. It was never allowed to guess its way to "you are fine".

Not USML — EAR Jurisdiction
Ambiguous — Legal Review Required

The result card above is that rule doing its job. Handed a genuinely borderline sensor turret, the system refused to pick a side, flagged it high risk, and told the operator exactly which filing would settle it. The easy failure would have been a clean, confident, wrong answer.

DECISION 02

It never pretended to be the final word

A fixed rule governed every word the system produced: it reported what it found and what a qualified person should do next, and it never claimed to have settled anything. That applied to the interface and the writing around it, not just the output.

This was a hard constraint, not a style preference. The moment a tool like this is allowed to sound certain, people start treating it as legal advice, and it has created the exact risk it was built to remove.

DECISION 03

The rules were versioned like code, not tweaked on a whim

The instructions driving the AI were not settings. They encoded real regulatory judgment: where the category lines sit, how much destination and end use matter, when a case counts as too close to call.

So they were treated like any other critical code. Versioned, reviewed before changing, and stamped onto every result. If the system's behavior shifted, you could point at the exact change that caused it instead of guessing.

DECISION 04

The AI was never trusted to quote the law

Claude Opus 4.7 ran the classification, but it was never asked to remember what the regulations say. AI models are confident about details they have half-remembered, and in this domain a half-remembered rule is worse than no answer at all.

So the split was strict. The model read a product description against rules it was handed, which it is genuinely good at. The rules themselves came from the actual published sources, cited rather than recalled, and anything the system drafted for publication needed a human sign-off first.

05 / What it actually replaced

It replaced the process, not the task.

Answering the question is one step out of six. A real export-control function also has to clear the counterparty, prove it did the work, keep the record for years, decide who is allowed to ask, and catch the case nobody looked at. Miss any of those and the officer is back in a spreadsheet within a week.

Clears the buyer, not just the part

A cleared item shipped to a barred party is still a violation. Every counterparty ran against the three federal denied-party lists, with matching that survived spelling variants and ignored filler words like "international" so the operator was not buried in false hits.

Proves the work was done

Every run was kept with its inputs, its reasoning, and the version of the rules that produced it. Years later you can show not just what was decided but why, and what the system knew at the time.

The record outlives the tool

Any run, or a whole filtered history, out to PDF or CSV on demand. The evidence belongs to the company, not to the software. If the system were switched off tomorrow, nothing about the last five years of decisions would be stranded behind a login.

Engineers ask, compliance decides

Roles and invitations meant an engineer could run a check without being handed authority over the function. The compliance lead stayed the one accountable for what the answer was used for.

Nobody has to remember to look

The system reached out rather than waiting to be checked: nine automatic notifications covering access, thresholds, and anything that changed underneath a user. Silence meant nothing needed attention.

Costs that cannot run away

Every account carried a hard monthly ceiling on AI spend, enforced in the engine rather than the interface, so it could not be sidestepped by hitting the API directly.

06 / The point

Owned, not rented.

31,306
Lines of code
270
Source files
3
Federal watchlists checked
21
USML categories covered

Most companies rent this function. A screening subscription for the counterparty checks, counsel hours for anything the subscription will not answer. Both work. Both mean the rules that decide what your company is allowed to ship live on somebody else's roadmap, and every change to them is a support ticket.

This is the same function built to be owned. The classification logic, the thresholds, the record, and the data all sit inside the company. Move a threshold on a Monday because the product line changed. Pull five years of history because a customer's auditor asked. Nothing waits on a vendor, and nothing walks out the door when a contract lapses.

It was designed to be operated by one person rather than staffed by a department, and that is where the drag comes out. Thirty-one thousand lines exist so the routine cases stop consuming expert attention, and the genuinely hard ones finally get it.

None of that came from the model. It came from deciding, before a line was written, which way the system should fail when it did not know the answer.