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"])
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.