CROSS-SOURCE CONTRADICTIONS

Conflicts surfaced before you sign.

A single source can be self-consistent and still be wrong. The way you find out it was wrong is by reading a second source that says something different. An agent reading both and acting on either one in isolation will quietly do the wrong thing. Limma surfaces the disagreement before the action fires.

A WORKED EXAMPLE

Two systems of record. One fact. They disagree.

A renewals agent is about to bill a customer for the next quarter. The CRM lists the customer on the Pro plan at one rate. The billing system records the customer on the Enterprise plan at another. Both sources speak to the same fact, paired on the same customer, plan, and billing period. They disagree. Without a verification step the agent silently picks one source and bills on it; the disagreement is never surfaced.

SOURCE A
crm.csv
row 412 · acme_corp
plan_tier
Pro · $1,200/mo
SOURCE B
billing.stripe
subscription · acme_corp
plan_tier
Enterprise · $4,800/mo
PAIRED ON (entity, metric, period)
CONFLICTtwo tiers · $3,600/mo delta
The renewals agent cannot pick a tier on its own. The engine refuses the proposed action and queues both citations for human adjudication. The decision (and which source becomes canonical) is written into the chain so the next renewal does not surface the same conflict.
THREE VERDICTS

Every paired comparison gets classified.

Tolerance is encoded per metric class, not as a global threshold. A $1 difference on a $3B total is rounding. A $1 difference on cash interest expense is a real arithmetic error. The system knows which is which.

AGREE

Within tolerance.

Both sources match within the rounding window for this metric class. Recorded in the chain. The user is not interrupted.

delta = $0 · or within the rounding band
DRIFT

Small, outside the band.

Could be rounding, could be early signal. Surfaced as advisory. The output is not blocked, the analyst is informed.

delta = 0.02% · advisory
CONFLICT

Material disagreement.

Surfaced as blocking. Output cannot be signed off until a human reviews both citations and picks the canonical reading.

delta = 1.05% · blocking
ENGINEERING DEPTH

The comparison itself is the easy part.

Pairing two values and computing a delta is trivial. The work is every step before the comparison. Four pieces of engineering most teams do not see, and the reason no shortcut produces the same surface.

01

Entity resolution

Apple Inc., AAPL, and Apple, Inc. must resolve to one entity across thousands of documents. The store carries canonical identifiers (CIK, LEI, ticker, internal mappings) and explicit parent and subsidiary relationships, so a parent and a subsidiary in the same binder never collapse into the same entity.

02

Metric semantics

Revenue, Net Revenue, Total Revenue, Net Sales, GAAP Revenue, and Adjusted Revenue are five different metrics that often appear under the same heading. The rule library encodes the relationships between them, so false conflicts do not fire when two sources are reporting different definitions.

03

Period alignment

FY2025 means December for one filer and September for another. H1 can mean calendar or fiscal. Periods are stored as typed date ranges, not labels, so the six months ended June 30 pairs correctly with H1 2025 for a calendar-year filer and not with H1 FY2025 for a September-year filer.

04

Tolerance calibration

A 0.1% delta on total assets is rounding. A 0.1% delta on a covenant ratio at the breach threshold is the difference between in compliance and in default. The rule library encodes which metrics tolerate what. There is no global tolerance number.

WHAT CHANGES FOR THE AGENT

Halted at the conflict, not after the action.

WITHOUT LIMMA

The agent silently picks one source.

The agent ingests every doc, summarizes confidently, and acts on whichever number its tool was configured to read. The disagreement is never surfaced. The action fires. The error is invisible until quarter end, or until the restatement, or until the auditor asks why two numbers in the binder do not match.

WITH LIMMA

The verdict comes back REFUSED. The action waits.

The agent posts the proposed action and its supporting facts. The engine pairs every overlapping value across sources and returns a verdict. Any unresolved conflict means the engine cannot ground the action and the verdict is refused. The action queues for human adjudication. Both citations and the decision become part of the chain.

Wire the verification step into your agent loop.

Submit the proposed action and its supporting facts. Get back proceed, advisory, or refused with the full chain attached. Every cross-source disagreement surfaced before the tool call fires.