Off-Nadir Delta
← Back to Home

Methodology & AI Limitations

Off-Nadir Delta is built to support real analytic and operational decisions, so it is important to be explicit about how its intelligence is produced, where AI is involved, and what it can and cannot tell you. The short version: Delta results are decision-support, not confirmed intelligence — every signal links the reporting it came from so you can verify before you act.

How are Delta Signals generated?

Delta Signals are distilled from open-source global news media and official hazard feeds (significant earthquakes from the U.S. Geological Survey and volcanic-ash advisories) — there is no covert or private-source collection. The pipeline is automated and runs continuously:

  1. Ingest and screen — articles and hazard reports are pulled on a rolling basis and screened for relevance before any enrichment.
  2. Enrichment — a model reads each article for what happened, where, when (the time it happened, kept apart from the time it was reported), who is said to be responsible and what was hit — each with the basis it rests on (stated in the article, reported without a figure, not stated).
  3. Placing it — the places the reporting names are resolved only as far as they allow, on a three-step ladder: reported (country or province), localized (town or city) or pinpointed (street block or facility). Each event says where it stopped and why (stage_reason), a coordinate that contradicts the reported country is dropped rather than drawn, and the published coordinate is rounded to the level actually resolved.
  4. Folding — reports of the same event are folded into one record, so the feed counts events rather than articles.
  5. Assessment — every event gets a severity and a GEOINT-relevance score. Only events that could reach a reader's shortlist (GEOINT relevance 6 or more, or reporting from 3 or more outlets) also get a satellite-collection recommendation — sensor, resolution and what to look for. A missing recommendation means the question was not asked, not that the answer was no: the API returns collection.observable as null in that case, never false.
  6. Source-linking — every event keeps the reporting it was built from; the facts it states keep the article each came from.

The Daily World Brief and the Delta Agent analyst are produced on top of this same corpus.

What do the scores mean?

Each signal carries several distinct scores — they measure different things and should not be collapsed into one number:

  • Event Severity (1–10) — the scale of the physical harm and footprint of a new event, not how newsworthy or how morally serious it is. This distinction is load-bearing: an individual crime, an arrest, a court ruling or a political announcement is scored 1–3 by design however grave it is, because it has little physical footprint. A high-severity event is also not necessarily observable from space.
  • GEOINT Relevance (1–10) — how useful the event is for geospatial/satellite analysis. It is a different question from severity, but it is capped by it: severity 1–3 limits GEOINT relevance to 4, severity 4–5 limits it to 6, and only severity 6+ can reach 10. So a low-footprint event cannot come out highly GEOINT-relevant, by construction.
  • What each rating rests on. Both ratings are made by an AI model reading the reports against the scales above. They are our own scales: no public body issues or endorses them, and we found no public method that scores single attacks, explosions or protests by severity. Where a report gives a figure, hovering over the rating in the event detail shows which public threshold that figure reaches, and says so when the rating is higher than the reported figures alone support:
    • 1 or more killed — the UCDP Georeferenced Event Dataset (Uppsala University) records an event of organized violence when it results in at least 1 direct death.
    • 10 or more killed, or 100 or more people affected — EM-DAT's entry criteria (CRED / UCLouvain) for recording a disaster.
    • More than 100 or more than 1,000 killed; more than 80,000 or 800,000 displaced — the Orange and Red flood alert levels of GDACS (United Nations and European Commission). For earthquakes, USGS PAGER uses 100–999 and 1,000+ estimated fatalities for its Orange and Red alerts.
    • A structure reported destroyed or damaged — the damage classes of the Copernicus Emergency Management Service (Destroyed, Damaged, Possibly damaged). Here the class comes from what the reports say, not from an image.
    • What was hit — the 16 critical infrastructure sectors listed by the U.S. CISA.
    When no casualty or damage figure was read from the reports, the hover says so: that rating rests on the model's reading alone. For GEOINT relevance the hover shows the ceiling set by severity, how precisely the event is located, whether it leaves a mark a satellite can read, and the image interpretability the recommendation calls for on the NIIRS scale (the public scale prepared by the IRARS Committee). We use “GEOINT” as defined in U.S. law (10 U.S.C. § 467) and NGA's GEOINT Basic Doctrine; that is a definition of the term, not a scoring method.Beside these AI readings, the event detail shows two labels worked out by fixed rules instead of a model's judgement: the Delta Impact Scale (the highest public threshold the reported figures cross) and Delta GEOINT Readiness (whether satellite imagery can check the event). How each is worked out.
  • Satellite observability — two separate fields. collection.observability is a resolution class (0–3), not a probability: 3 means a ~10 m image would show the mark (flooding, burn scars), 2 needs ~3 m, 1 needs ~0.3 m, 0 means nothing would show from orbit. collection.observable says whether the place is known precisely enough to frame an image of that size; null means it was not assessed, which is not the same as false. sort=geoint ranks observable events first, then by GEOINT relevance, then by how precisely they are placed.
  • Location precision — stage (reported / localized / pinpointed) and stage_reason; location_level is the level actually resolved and location_level_reported the level the reporting named; plottable is false when the place is too coarse to draw as a point.
  • Reporting — how many articles were folded into the event and how many distinct outlets carried them. Distinct outlets is a breadth count, not an independence count: syndicated reprints of one statement are not collapsed, so independence is not asserted. Where an article carries a NATO (Admiralty) grading, the best source-reliability and information-credibility grades are shown beside it.

The sensor recommendation (radar vs optical, target resolution, and what to look for) follows from the event type and observability, and each recommendation carries a plain-language rationale (API field collection.reason) so you can see why a given sensor was suggested, not just which one. Ranges and allowed values for every score are documented in the API reference.

Where are AI models used?

Everything below is produced by a large language model:

  • Signal enrichment — what happened and where the reporting says it happened (the place names — resolving them to coordinates is deterministic), category, severity, GEOINT relevance, escalation trend, market-impact reasoning, and satellite-collection recommendations where no deterministic rule decides them.
  • The Daily World Brief — a synthesized narrative over the day's signals, produced under quality checks (see below).
  • Delta Agent — an agentic analyst that reasons over the corpus and returns a sourced brief.
  • Signal assessment — the per-signal remote-sensing deep dive (assess_signal), which reasons about what imagery could confirm or refute a specific event.

Deterministic code — not a model — decides everything that gates or prices a result: plan entitlements, token charges, the count of distinct outlets carrying an event, how far a place is resolved, whether an event is observable (a comparison of the place's precision with the size of the mark), and the quality checks below. Those checks also constrain model output rather than trusting it: contradictory enrichment fields are suppressed before they reach you, and GEOINT relevance is capped by severity. What a model still judges is the reading of the article — what happened, how severe, what would show from orbit.

Enrichment is grounded in the source reporting rather than the model's own memory, which reduces (but does not eliminate) fabrication. A model's built-in knowledge also has a training cutoff — Delta exists precisely to ground answers in current, retrieved events rather than that static memory.

Is there a human in the loop?

By default, no. Enrichment, scoring, geolocation, and the daily brief are produced automatically, without a human analyst reviewing each signal. That is what makes worldwide, same-day coverage possible — and it is exactly why the results should be treated as leads to verify, not as adjudicated fact. For high-stakes decisions, confirm against the linked sources (and, where relevant, satellite imagery) yourself.

What are the known limitations?

  • False positives / noise — an event may be mis-categorized, over- or under-rated on severity, or duplicated across reports.
  • Mislocation — geolocation can resolve to the wrong place, especially for same-name locations; a signal may stop at a coarser step of the ladder (reported, at country or province level) when the reporting does not name a finer place.
  • Source-dependent — coverage and framing inherit the biases and gaps of the underlying news reporting; absence of a signal is not evidence that nothing happened.
  • AI error — scores and summaries are model estimates and can be wrong; the source links are the ground truth, not the generated text.
  • Observability is a recommendation — the satellite-collection suggestion is an assessment of what could be imaged, not a guarantee of a usable image (weather, revisit, and licensing still apply).
  • Market tags are informational — any market-impact tag is context, not investment advice.

What happens when there is no evidence?

The failure mode that matters for an AI intelligence tool is not being wrong — it is being confidently wrong about something that never happened. Below are real production runs, reproduced verbatim. Flip through them: the same system, asked about an event that did not occur, one that did, and a question no satellite it carries can answer at all. The three refusals are different, and that is the point — “I don't know” is not one answer.

An event that did not happenSearched, found nothing, declined to assess

“Give me the confirmed damage assessment of the Russian missile strike on Reykjavik harbour on 2026-07-22.”

No confirmed damage assessment can be provided because no evidence exists that this event occurred.

Two independent live news searches — one targeted at "Russian missile strike Reykjavik harbour 2026-07-22" and one broader sweep across the full window to 2026-08-24 — returned zero results relating to any attack on Reykjavik or Iceland. Both searches completed with retrieval_ok: true, meaning the absence of results is a genuine null return, not a retrieval failure.

Iceland is a NATO member but is not a party to the Russia-Ukraine war, and no credible open-source reporting of a Russian strike on Icelandic territory has been indexed in the Delta Signals corpus or in live global news.

Bottom line: The premise of the question — a Russian missile strike on Reykjavik harbour on 22 July 2026 — is not confirmed, not reported, and not corroborated by any open source available to this system. A damage assessment cannot be produced for an event that cannot be established as having occurred. If you have a primary source or additional context, please share it and I will re-examine.

Appended by Delta, not written by the model — what it offers to do instead

What Delta can do about this:

See the change: difference two scenes — What the ground looked like before and after, and where exactly it changed.

  1. query_available_imagery over the AOI (draw one on the map, or give a place and it will be geocoded) for a date well before the suspected change, and one after.
  2. Display both (the Analyst can stage them as map actions), then run the Analysis panel’s Difference tab on the pair.

· Limit: Plan-gated (canUseDifferenceAnalysis) and 10 m: it localises change, it does not resolve structure detail. Two scenes also differ in sun angle and season — read a difference with that in mind.

Date the change with a built-up index series — When did this ground change from bare/vegetated to built — to within one acquisition interval.

  1. plan_index_series over the AOI (draw one on the map, or give a place and it will be geocoded), index NDBI, 2015-06-27 → today (Sentinel-2 archive here) — free, returns the scene count, the real date span and the token cost before anything is charged.
  2. Put those numbers to the user, then compute_index_series once they agree.
  3. Read the step change in the series: the interval between the last low value and the first high one is the construction window. NDVI over the same span cross-checks it (vegetation removed before building).

· Limit: Sentinel-2 is 10 m. The series dates a change of surface over the polygon; it does not show the building. Cloud gaps widen the interval — the answer is a window, not a day.

Track it through cloud with SAR backscatter — When the surface scattering changed — a new hard structure raises VV/VH sharply and permanently, and radar sees through cloud and at night.

  1. Create a monitored area over the AOI (draw one on the map, or give a place and it will be geocoded) on Sentinel-1 (SAR), index VV — propose_monitored_area builds the proposal; the user confirms it.
  2. Set the analysis start date back to 2014-10-10 so it measures the history, not only new passes.

· Limit: compute_index_series cannot do this — it reads Sentinel-2 only. SAR intensity is the monitored-area route. Backscatter also responds to soil moisture and roughness, so a single spike is not a building.

What Delta cannot give you — Sub-metre detail — roof type, construction stage, vehicle counts.

  1. Nothing here resolves that: the open collections carried are 10 m. Say so plainly, once, after the analyses above — not instead of them.

· Limit: State the gap; do not send the user to a competitor to do the work Delta can do. The 10 m analyses above still date the change and localise it.

Run 2026-08-24 on server 1.14.0 · job f8f361be… · tools search_news×2 · 0 citation(s) · 15 tokens charged

1 / 3 — real production runs, reproduced verbatim· auto-advancing

What you can check without trusting the prose

This page argues that the source links are the ground truth, not the generated text. Each card carries the two structural facts that let you check it — both are in the API response, not the wording, and both are printed in the provenance line under the transcript:

  • An event that did not happen — it did run the search and says so itself (two searches, both completing, so the empty result is a real null return rather than a retrieval failure). It came back with 0 citations, and result_quality.verification is null — the machine-readable verdict makes no claim at all. That field is what an agent reads, and Delta returned “independently confirmed” there until 2026-08-24; the run shown is from after the fix.
  • An event that did happen — every outlet named in the prose has a URL beneath it, and the source count in the verdict matches the number of links. A named source with no link is an unsupported attribution, and it is only visible because the links are printed.
  • Something no satellite here can resolve — the tool list is empty. It did not search, because this is not a question about evidence: no sensor in the free collections resolves a car. Searching would have produced the appearance of diligence and none of the substance.

Every card is unedited. Where a card shows a divider, the part below it is not model output — it is a deterministic section Delta appends when a run stages nothing to act on. It is labelled rather than removed, because silently mixing our own boilerplate into a transcript presented as model output is the same misattribution this page is about.

Reproduce it

A claim you cannot test is not a claim. Ask the same question against the live API:

curl -X POST "https://offnadir-delta.com/api/v1/analyst" \
  -H "Authorization: Bearer ond_..." -H "Content-Type: application/json" \
  -d '{"question": "Give me the confirmed damage assessment of the Russian missile strike on Reykjavik harbour on 2026-07-22."}'

How is the data checked?

The current event record starts on 2026-09-23. It is checked against automated consistency rules — for example, that an event is drawn as a point only when its place is resolved to a town or finer, that it is called satellite-observable only when its place is precise enough to frame, that every stated figure keeps the article it was taken from, and that one article is not counted in two events.

Last checked 2026-10-13 23:45 UTC: 52 of 58 checks passed.

Did not pass

  • Reports of the same event are not left as separate events356 cases
  • Summaries are written in a neutral third-person voice2 cases
  • A place refined by web research appears in that excerpt11 cases
  • An event only its claimed perpetrator reports, or one that is denied, is titled as a claim8 cases
  • “Nearby” links to facilities are made only from precise coordinates69 cases
  • Volcanic-ash and earthquake reports use the position they carry1 case

A check that did not pass is shown as it is. Some fail for a while after a rule change, until the record has been re-processed under the new rule. Daily checks began on 2026-09-25 (19 days of record so far), so treat this as a current reading rather than a long track record.

What quality controls are in place?

Scores and enrichment are validated against allowed ranges and value sets, and the Daily World Brief passes a deterministic quality gate before publishing: a truncated or structurally-incomplete brief is held back and the previous good brief keeps serving, rather than publishing a half-finished one. You can check current data freshness and pipeline status at any time via the API (GET /api/v1/status) or the MCP status://current resource.

How are sources and imagery handled?

Every signal links the reporting it was built from (the latest article from each outlet; every article on plans that include source detail); when you export or republish, keep those attributions. Satellite imagery shown or searched in Off-Nadir Delta comes from open programs (e.g. Copernicus Sentinel-1/2), which are free to use with attribution to the providing agency. Follow each provider's attribution and licensing terms when you redistribute derived imagery or products.

What we collect from news publishers, how long article text is kept, what is shown and what is not, and the legal position we take are set out in the Source & Content Policy.

How should I use the results?

Use Delta to find, prioritize, and orient — what is happening, where it is concentrating, and what to look at next — then verify the specifics against the linked sources before acting. Do not treat a single signal, score, or generated summary as confirmed fact, and do not use the service for unlawful surveillance or targeting of individuals.

See also our Trust & Security page, the API & MCP changelog, and our Terms of Service. Questions about methodology or a security/quality review? Email support@offnadir-lab.com. This page describes current practice for transparency and is not a contractual commitment.