The same shopper's body is a Size 28 in one pair of jeans and a Size 29 in a visually identical pair. The size chart is identical for both. The body is identical for both. The only thing that changed is the fabric, and the fabric is the one thing a size chart, and a generative try-on image, can never see.
That gap is where returns come from, and it is why AI fit prediction has to be grounded in the fabric's physics rather than a prettier guess. In the research behind this demo (Veriprajna WP34 research, 2026, drawing on industry sources), 53 to 67 percent of apparel returns are fit-related, and 63 percent of shoppers already bracket, ordering two sizes so they can send one back. Jeans sit among the worst, because rise, waist, and stretch interact in ways a four-number chart cannot resolve. The carrier eats the reverse-logistics bill every time.
The instinct across the industry has been to answer this with better pictures. A more convincing virtual try-on. A generative image of the garment draped on a body. But a picture, however photoreal, is still a 2-D render pretending to be fit data. It can show you the jeans on your body and still have no idea whether the thigh blows past that denim's stretch limit the moment you sit down. This is the argument behind Contour, the AI fit prediction demo we built and put online, and the reason its load-bearing decision is a deterministic strain engine rather than a model that guesses.
Fit is not a taste question. It is a mechanical one.
Whether a garment fits is a mechanical fact: the circumferential strain at each body zone, measured against that fabric's elastic comfort limit. A size chart gives four 1-D numbers and has no idea whether the fabric is zero-stretch raw selvedge or four-way ponte.
Once you frame fit that way, the failure mode of the size chart stops being mysterious. The chart matches a waist number and stops. It never asks how much a specific fabric can give before it is uncomfortable, so it recommends the same size for a rigid selvedge and a stretch knit that behave nothing alike on the same body.
Contour computes the thing the chart skips. For a given body (measurements in, no photo) and a garment (fabric mechanics plus finished dimensions), it calculates the circumferential strain at each zone, (body circumference minus garment finished circumference) divided by garment finished circumference, and compares each zone against that fabric's elastic comfort limit. That calculation lives in plain, unit-tested Python, with eight tests pinning the physics. No language model computes the number, and no language model decides the size. We call it "agents advise, code decides."
One catch, watched end to end
Take a synthetic shopper the demo calls Riley on the Ironside 14oz Raw Selvedge Straight Jean. A waist-only chart lands on Size 28. Contour returns Size 29 at 95 percent confidence, comfortable at every zone.
Riley on the Ironside raw selvedge jean: Size 29, 95 percent confidence. Every zone (waist minus 3 percent, hip minus 2 percent, thigh minus 1 percent, inseam minus 3 percent) sits inside the fabric's comfort band. The panel flags that a waist-only chart would have said Size 28.
Why does the chart get it wrong? Raw selvedge is a rigid, zero-stretch denim. Its audit receipt records an elastic comfort limit around 2 percent. At Size 28 the thigh's circumferential strain runs past that limit, so the strain engine rejects 28 as failing a zone the chart never checked, and lands on 29, where all four zones fall inside the band. The chart could not feel the fabric. The engine could.
Now keep Riley's body exactly the same and swap the garment for the Driftwood Stretch Slim Jean.
Same body, different fabric. On the Driftwood stretch denim the correct size drops to 28, because the stretch forgives the thigh that the rigid selvedge would not. Identical shopper, visually similar jean, different correct size. That is the whole thesis in one screen.
Same body, one number apart, and the physics explains exactly why. This is not a model being cleverer than a chart. It is a mechanical quantity the chart was never computing.
The catch above is the one we developed in full, but it is a family. On a zero-stretch fabric where no single size clears every zone, the engine abstains rather than bluff a confident answer, and it does so on 33 of the 105 body-by-garment pairs in the eval. When vendor copy is physically contradictory, for example the Maverick jean advertised as "100% cotton raw selvedge with 4-way stretch," an adversarial critic refuses the inference and routes it to human review with no recommendation issued. Honest silence is a feature, not a gap.
Why a better base model does not remove the need for this
There is a comfortable assumption that the next, larger model will absorb problems like sizing. It will not, and the reason is structural rather than a matter of scale.
Even a perfect language model still needs the fabric mechanics, the body geometry, the per-zone strain calculation, the abstain policy, and a replayable receipt. That infrastructure is the product. The model is one swappable advisor inside it.
In Contour the model does two narrow jobs. It reads messy vendor product copy into a structured fabric spec, and it phrases the final result into plain language. It never touches the decision. Everything that a checkout would have to trust, the size, the confidence, the abstain, is deterministic code you can unit-test and replay. A smarter model reads the vendor copy a little better. It does not change what makes the answer safe to ship, and it does not age out the strain engine, the policy gate, or the receipt.
That receipt is the part an enterprise buyer usually asks about last and cares about most. Every recommendation writes a JSON record: the extracted fabric spec with the exact source phrases that drove each parameter, the full per-size by per-zone strain matrix, and the final decision.
The audit receipt for the raw selvedge decision: the fabric spec (elastic strain limit 0.02, extraction confidence 0.95), the source phrases that justify each parameter, the critic's verdict, and the per-size strain matrix. A reproducible decision record, not a black-box score.
The same result is served at /api/fit as a machine-readable payload, {recommended_size, confidence, abstain, per_zone_fit, audit_id}, which matters as commerce moves toward AI shopping agents that transact on a buyer's behalf. An agent needs a confidence-scored, auditable report, not a picture.
Where the physics actually pays off
Against the real incumbent method, waist-only size-chart matching, Contour beats the chart by 40 percentage points on a labeled 105-pair synthetic golden set (15 synthetic bodies by 7 scored garments). It eliminates bracketing on 67.6 percent of pairs and catches 39 fit conflicts the chart would have shipped. We lead with that lift over the incumbent, not with a headline accuracy figure, because the golden set's labels share the same measurable fabric-stretch values the engine uses, so it is a controlled comparison rather than an open-world guarantee.
Per-fabric results on the labeled synthetic golden set. On the rigid raw selvedge jean the engine reads 100 percent against the waist-only chart's 33 percent, and it abstains where no size is clean while the chart confidently prints a wrong number. The advantage is largest exactly where fit is hardest.
The pattern in that table is the whole point. On extreme-stretch knits the fabric forgives almost everything, and simple waist-matching nearly catches up. On rigid denim and tailoring, where fit actually bites and returns actually pile up, the chart falls apart and the physics pulls far ahead. The engine's advantage concentrates precisely where a returns lead needs it.
You can run all of this yourself in the demo at https://veriprajna.com/demos/ai-fit-prediction-fashion. Pick a shopper, pick a garment, and watch the strain bars, the abstain, and the receipt update live.
An open question for anyone who owns returns
If you run sizing for a denim, tailoring, or structured-fit catalog, here is the question worth sitting with. When your storefront tells a shopper a size, can anything downstream prove why that number and not the one next to it, against the actual mechanical properties of that specific fabric, or is the recommendation a match on a waist number with a confidence you cannot inspect? We think the durable answer is a physics engine with an honesty policy rather than a smarter guesser, and the demo at https://veriprajna.com/demos/ai-fit-prediction-fashion is the argument in runnable form. The returns problem is industry-wide, and we would genuinely like to hear how your team is reasoning about the fit signal underneath it.