The email from the policyholder was short and a little rattled. A pipe had burst in the upstairs bathroom, the ceiling below had come down, and it had happened "sometime the week before Thanksgiving, I think, we were away." The intake pipeline read it, pulled out the facts, and wrote a clean record: policy number, address, cause of loss, and a date of loss of November 20.
The policy had started on November 19. The record showed a loss inside the coverage period, the coverage check passed, a reserve was set, and the claim moved along. Months later, during a subrogation review, a plumber's invoice turned up dated November 17. The pipe had burst two days before the policy existed.
Nobody lied. The customer gave an honest, vague answer. The model did what it was asked to do, which was to fill a required field called date_of_loss with a valid date. And every check in the pipeline passed, because every check was asking whether the output was well formed. It was. It parsed fine. It was also a guess wearing the clothes of a fact, and nothing downstream had any way to tell the difference.
Where words turn into records
Most of the enterprise AI work I see is not chat. It is extraction and decision support: read a document, an email, a call transcript, a supplier packet, and turn it into fields that another system acts on. That hand-off is the most consequential line in the whole architecture, and it gets less design attention than almost anything else.
On one side of the line, everything is language. Ambiguity is normal, hedges carry meaning, and "I think" is information. On the other side is a database, a rules engine, a payment system, a case file. Those systems were built to treat a populated field as true. They do not have a column for "the model was about sixty percent sure." Once a value crosses the line, it stops being an interpretation and becomes a record, and records get acted on.
So the question I ask about any AI pipeline is less about how good the model is and more about what happens at that crossing. What does the system on the other side believe about each value, and has anyone earned that belief?
Valid is a statement about shape
The industry has gotten very good at one half of this problem. Structured output modes, JSON schemas, function-calling formats, and constrained decoding mean a modern model will hand you output that parses nearly every time. That was a real gain. Not long ago, a fair share of the production bugs we chased were a model returning a sentence where code expected an object.
The trap is treating that gain as if it solved the other half. A schema can promise that date_of_loss is a date. It cannot promise that it is the right date, that it came from the document, or that the document contained a date at all. Validation answers "can my code read this?" The business needs an answer to "should my business believe this?", and those are different questions with different failure modes.
Constrained decoding can even make the second question harder. If the model is only allowed to emit tokens that form a valid date, then uncertainty has nowhere to go. The hedge in the customer's email gets squeezed out at generation time, and what comes back is the most plausible-looking date in range. You have built a very reliable machine for turning "I'm not sure" into a confident value.
A required field is an instruction to guess
This is the change I push for first, because it is cheap and it catches the most. If the source might not contain a value, the schema has to allow the model to say so. That means nullable fields where absence is possible, an explicit "unclear" or "other" option in every enum, and a place to record what the source actually said. For the burst pipe, a good record reads something like: date of loss unknown, stated as "the week before Thanksgiving," range November 17 to 21.
That record is uglier. It is also the one a coverage check can act on correctly, because a range that straddles the policy start date is a reason to stop and ask, and a single date inside the period is a reason to keep going.
Teams resist this for an understandable reason. Nulls break downstream code, and "unclear" means someone has to look. But the alternative does not remove that work. It moves it to the subrogation review, the audit, or the appeal, where it costs ten times as much and arrives with a wrong decision already attached. A required field the source can't always fill is a standing order to make something up.
Check meaning, not just form
Once the schema can carry uncertainty, the next layer is semantic validation: checks that ask whether a value makes sense, not whether it parses. Three kinds pull their weight.
Cross-field rules catch values that cannot all be true together. A loss date after the report date, a shipment that arrives before it was ordered, a patient discharged before admission. These are boring checks and they catch a surprising amount.
Reference checks compare extracted values against the system of record. Does this policy number exist, and is it active on the extracted date? Is this supplier ID real, and does it match the supplier name on the same page? Does this case number belong to the jurisdiction the document claims? A model is fluent enough to produce identifiers that look exactly right and point at nothing.
Grounding checks ask where each value came from. We wrote about provenance for answers in the answer was never the hard part; the same discipline applies field by field. If every extracted value comes with the span of source text it was drawn from, you can tell the difference between "the document says November 20" and "the model inferred November 20," and you can route them differently. A value with no supporting span is an inference, and the record should say so.
Treat the model like an upstream you don't control
It helps to stop thinking of the model's output as your own code's output. Think of it as a payload from a partner system you don't control, written by a party that is usually right, occasionally confidently wrong, and capable of being steered by whatever it just read. You would not let a partner's API write straight into your ledger without validation. The model deserves at least the same suspicion.
That matters most when the structured output is itself an action. A tool call is structured output. So is a generated query, a URL to fetch, a set of arguments to a payment function. In the instruction nobody typed we argued that text a model has read can steer what it does. The boundary is where that steering turns into effect, so it is the last place you can check the arguments against policy before something irreversible happens.
It also matters what you do when a check fails. The usual pattern is a retry loop: send the error back, ask the model to fix it, try again. A bounded retry for formatting errors is fine. For semantic failures it is dangerous, because a model asked to "fix" a date that failed a coverage check will often just produce a different date that passes. Semantic failures should go to quarantine and a person, with the source and the failed rule attached. And watch for silent coercion in the glue code, the helper that turns a missing number into zero or an unknown status into "active." Those defaults are guesses too, made by a developer months ago who never saw this document.
Routing a value to a person only works if the person is set up to decide, which we covered in agentic AI needs a hand on the wheel. A review queue full of every field the model touched trains people to click approve. A queue holding only the values that failed a meaning check, with the evidence beside them, gets real attention.
A parse rate of 99.8 percent tells you how often your code can read the model. It tells you nothing about how often your business should believe it. The number that matters is how often a value crossed the boundary looking more certain than the source that produced it.
The contract is part of the release
The schema, the semantic rules, and the routing are a contract between the model and everything downstream. Contracts change, and every change is a deploy. Adding a field, tightening an enum, or swapping the model behind the extraction can shift what lands in the database without a line of application code changing. That is the pattern from the deploy that looked like an edit, and the same gate applies.
What the gate measures matters, though. Parse rate is the easiest number to report and the least useful. The evals that earn their keep score each field against labeled truth, track how often the model abstains when the source is silent (too low is as bad as too high), and include deliberately vague documents like the burst-pipe email to see whether the system guesses. A model swap made for cost reasons, the kind we discussed in the biggest model for the smallest job, should have to show it still says "unknown" when it should.
Why the boundary belongs in the substrate
Nearly every solution in our portfolio has this crossing at its center. Clairant turns claim documents into records that drive coverage and payment. NeuraMed turns clinical documentation into fields that drive medical claim decisions. MatryxAI turns supplier packets and specifications into data a sourcing award depends on. Throughline turns case material into entities and links an investigator will build on. Lumen turns a question into an answer someone may put in a filing. The documents differ. The danger at the line is the same.
So the parts that should be identical everywhere sit in Neura-Cortex rather than in each solution. That covers how a field records that it is uncertain or unsupported, how source spans travel with values, how failed meaning checks route to people instead of retries, and how output that is really an action gets checked against policy before it runs. The audit log records, for every value, whether it was extracted, inferred, or confirmed by a person, which is exactly what you need when someone asks you to reconstruct a decision later, as we described in the decision you couldn't run twice. Solutions supply the schema and the domain rules. The platform supplies the discipline. That is the argument of the floor under the stack applied to a single line in the architecture.
Pick one pipeline where a model fills fields that another system acts on. List its required fields. Then pull fifty real source documents and count, for each field, how often the source actually stated the value. If a field is filled 100 percent of the time and the source supports it 80 percent of the time, you have found where your system invents facts, and roughly how often. Fields that are never null and never "unclear" are the first place I would look. Perfect completeness from messy inputs is a symptom, not an achievement.
The carrier changed the intake contract after the subrogation review. The date of loss is now allowed to be a range, every extracted value carries the sentence it came from, and a range that touches a policy boundary goes to an adjuster with the customer's own words on screen. If that email came in today, the record would say the week before Thanksgiving, not November 20, and an adjuster would pick up the phone and ask. That call takes four minutes. It is the cheapest control in the whole pipeline, and for months nobody made it, because the field always came back full.
MTekLabs designs, deploys, and governs production-grade agentic AI platforms for government and commercial enterprises. Our solutions are built human-in-the-decision-loop where it matters and auditable by design. Explore them at mteklabs.com.
Do you know which of your AI-filled fields are facts and which are guesses?
We would be glad to walk through the boundary where your models' output becomes your systems' records: where a required field forces a guess, which meaning checks are missing, and how to measure how often a value arrives looking more certain than its source.