Scan for multi-attester disagreement
emem_memory_contradictionsSurface where the corpus DISAGREES with itself (algebra: competing evidence). When two or more independent sources signed different values for the same place + band + time, this returns that disagreement with a 0–1 severity score and citations to every disputed fact, instead of silently picking one value and hiding the conflict. The opposite of a confident single answer: it tells you when not to trust one. Read the SCOPE before quoting a zero: by default this asks only whether two DISTINCT attesters disagree, so one responder answering an address from two different upstreams is not counted until you pass include_same_attester_sources: true.
When to use: Call before you rely on a number: 'is there disagreement about X', 'do the sources corroborate this', 'audit this claim'. Narrow with cell_prefix for a region and band for one family; min_severity drops trivial differences. Severity is per band kind: scalar = spread over the band's range, vector = 1 - mean cosine, categorical = 1 - mode share. On a single-responder deployment add include_same_attester_sources: true, because the likeliest real disagreement there is one signer answering from two providers and the default scope cannot report it. Each record names its disagreement_scope. The receipt cites every disputed cid; quantify a pair with emem_diff, or read the disagrees_with edge via emem_edges_recall.
Example arguments: {"cell_prefix":"damO","band":"indices.ndvi","min_severity":0.2}
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| band | No | Band key filter (e.g. `indices.ndvi`). Omit to include all bands. | |
| cell | No | Alias for `cell_prefix`, and the spelling the rest of the surface uses for a cell64. Send a cell64 you already hold and the scan narrows to that place instead of running over the corpus. | |
| limit | No | Max contradictions to return. | |
| cell64 | No | Alias for `cell_prefix`. | |
| cell_prefix | No | A cell64 to scan, or a bytewise prefix of one (e.g. `defi.zb5f9`). Omit to scan the whole corpus up to the scan cap. A full cell64 is a prefix of itself, so passing one narrows the scan to exactly that place. | |
| min_severity | No | Severity floor in [0, 1]. 0 = report every disagreement, 1 = only flagrant. Severity scoring is per band kind: scalar (max-min over band range), vector (1 - mean cosine), categorical (1 - mode share). | |
| window_unix_s | No | [lo, hi] inclusive Unix-seconds filter on attestations' signed_at, all disagreeing attestations must fall in the window. | |
| include_same_attester_sources | No | Also report keys where ONE attester answered the same address from two different upstreams. Default false, which scans only for disagreement between two or more DISTINCT attesters — so on a single-responder corpus a zero here means the narrower question was answered, not that nothing disagrees. Set true and a key qualifies when the facts differ in `derivation.fn_key` or in their `sources[].scheme` set; the same provider re-signed is a refresh, not a disagreement, and stays excluded. Each record carries `disagreement_scope` and a `providers[]` list naming what changed. |