How the numbers are checked

Four gates between a vendor row and your inbox.

Each gate is plain Python with fixed constants. No model decides whether a figure passes.

Problem

A number can trace to a real field and still be impossible.

The FMP price field sometimes holds the trade total instead of a unit price. Shares times price then gives a figure that traces to the filing and is false.

Issuer / filersharesprice fieldshares x price
MetLife / FINS40,000,00040,000,000$1,600,000,000,000,000
Sutherland / PSX3,5232,110,482$7,435,228,086

Both rows are fixtures in the test suite.

Solution

Check provenance and plausibility separately.

"Provenance only" is a pipeline that only asks where a number came from. "Whale Agent" is this pipeline. Select a gate to see its constants and source.

Provenance only
vendor row does the figure traceto a field? yes formatted as money sent inbox shows$1.6 quadrillion
Whale Agent
vendor row gate 1parse-time coercion gate 2plausibility gate 3figure check gate 4egress screen inbox: row withheld,"1 filing withheld"

stopped at gate 1 price 40,000,000 is "above the 1,000,000 per-share ceiling; the field most likely holds a transaction total rather than a unit price". The price becomes unknown (None). The share count is kept.

Hover, focus or tap a gate.

Defence in depth

Gates, code and tests

GateChecksCodeOn failureTests
1 CoercionPrice band, share count ceiling, USD ceiling, sentinelsingestion.vendor_typesField becomes Nonetest_quadrillion.py: 12
2 PlausibilityMarket cap, shares outstanding, value ratio, ceilings, sentinels, placeholdersenrichment.plausibilityRow quarantined, left out of readstest_output_safety.py: 51
test_valuation.py: 10
3 Figure checkEvery number in the text is in the allowed token setsummarization.provenanceSentence dropped, then template render, then errortest_pipeline.py: 5
4 EgressRendered $ figures and source rowsdelivery.emailSend blocked, quarantine recordtest_email_themes.py: 15

Counts are grep -c "def test_" per file in the public repository, checked 28 Sep 2026. Several files test more than one gate, so the counts overlap and do not add up to a gate total. test_quadrillion.py pins the MetLife row at the adapter, valuation, storage read and send.

The only model in the pipeline is the optional summary writer. Gate 3 filters its sentences. These gates stop figures that are impossible. A figure that is wrong but possible still gets through.

The rest of the limits