Skip to content

Contested: two rows at one address

When two places in the evidence give different numbers for one coordinate, Limma keeps both rows and says so on each. It does not choose a side.

Here the annual report's table says headcount was 4,250 and the management discussion says 4,200 — same entity, same attribute, same period.

r = client.post("/v1/public/facts", json={
    "workspace_id": WS, "question": "headcount", "mode": "enumerate",
    "coordinate": {"attribute": "headcount", "period": "FY2023"}, "output_mode": "compact"})
body = r.json()
print(body["enumeration"]["exist"], "rows at the address")
for fact in sorted(body["facts"], key=lambda f: f["page"]):
    print(fact["value_token"], "| page", fact["page"],
          "| contested:", fact["contested"], "| checked:", fact["contested_checked"],
          "| distinct magnitudes:", fact["distinct_magnitudes"])
    for reading in fact["competing_readings"]:
        print("   reading", reading["value"], "from", reading["claim_id"])
2 rows at the address
4,250 | page 0 | contested: True | checked: True | distinct magnitudes: 2
   reading 4200.0 from hc_prose_fy2023::llm_page::1
   reading 4250.0 from hc_table_fy2023::llm_page::0
4,200 | page 1 | contested: True | checked: True | distinct magnitudes: 2
   reading 4200.0 from hc_prose_fy2023::llm_page::1
   reading 4250.0 from hc_table_fy2023::llm_page::0

Reading the bits

field meaning
contested the substrate holds competing readings for this coordinate
contested_checked a disagreement check actually ran for this fact
contested_scope WHAT it was checked against: same_address, judged_pairs, both (same_address+judged_pairs), or none
competing_readings every reading, raw: {value, source_id, claim_id, magnitude_group, ...}
distinct_magnitudes how many genuinely different numbers are in dispute after folding sign and power-of-ten scale

Read contested with contested_scope. contested: true is always a finding. contested: false is a finding only about the scope named: same_address means the readings recorded at this fact's coordinate were compared — nothing wider. judged_pairs means every statement of the same document filed under the same topic, or among the two nearest to it by meaning, that prints a different value of the same kind (a duration, an amount, a date, a percentage) was put to the reader model, which judged whether the two state the same property. contested_checked is false exactly when the scope is none, and then the field says nothing at all. It must not be read as safety.

A document that contradicts itself. When a summary says a notice period is 30 days and a clause says 60, and the model judged both to state the same property, every fact in either statement — the clause, its value, a number read from it — is contested: true, and competing_readings carries the other side with its receipt: value_token as printed, handle (the other clause), page / char_start / char_end (redeem with limma_region; page null is the document frame), topic, kind and judged_by (the model), with basis: "judged_same_property". Statements in OTHER documents are never compared.

distinct_magnitudes == 1 with several readings means the sources agree on the digits and disagree on the scale — the EPS-stored-as-$600,000 class, where every source prints 0.60 and one row stored it multiplied by a million. That is a scale dispute, not a numeric one, and it is the more dangerous of the two.

The control: an uncontested row says it was checked

r = client.post("/v1/public/facts", json={
    "workspace_id": WS, "question": "revenue", "mode": "enumerate",
    "coordinate": {"attribute": "revenue", "period": "FY2023"}, "output_mode": "compact"})
fact = r.json()["facts"][0]
print("contested:", fact["contested"], "| checked:", fact["contested_checked"])
contested: False | checked: True

What to do with a contested address

Do not act on one reading silently. Re-read each receipt with limma_region, and if the question is which reading a document meant, narrow coordinate with source_id and enumerate again. limma_verify applies the same rule from the other side: a derivation operand given as a coordinate that matches more than one fact is unverifiable, never silently one of them.