NEAR on the Evidence

Methodology

How each number is produced, so anyone can check it or re-run it. All code is in nearthesis/; nothing on the dashboard is typed by hand.

Pipeline

  1. fetch (nearthesis/sources.py, snapshot.py): calls only public, key-less endpoints and writes data/snapshot-<UTC date>/<source>.json. Each file is {"meta": {url, provider, fetched_at, note}, "data": ...}. manifest.json lists every source and whether it succeeded. A failing source is recorded, not fatal.
  2. analyze (analyze.py, claims.py, scenario.py, narrative.py): reads only the snapshot, computes metrics, evaluates the pre-registered claims, runs the scenarios and writes out/analysis.json and THESIS.md.
  3. build (build.py): copies this static site to docs/ and embeds the analysis as data.js, so the dashboard opens from disk with no server and no network (Chart.js is vendored).

Definitions

Claims and kill criteria

config/claims.json defines each claim as support tests and kill tests on metric keys. A claim is SUPPORTED if every support test holds, FALSIFIED if any kill test holds (kill wins), MIXED if only some support tests hold, NOT SUPPORTED if none do. Thresholds were set on 2026-11-11; later snapshots test them out of sample. Changing a threshold should be a visible commit.

Scenario model

Per year: issued = supply × issuance rate; burned = gas fees × burned share ÷ price; bought back = Intents volume × buyback rate ÷ price; coverage = (burned + bought back) ÷ issued. Gas fees, Intents volume and price compound at their growth rates. Buybacks are treated as removed float (they are not burned, so total supply only falls by the burn). The same function exists in Python (scenario.py) and JavaScript (site/model.js); a test checks they agree.

Reproduce

  1. python3 -m nearthesis analyze && python3 -m nearthesis build rebuilds everything from the committed snapshot (offline).
  2. python3 -m nearthesis fetch pulls a fresh snapshot (about 3 minutes, mostly GitHub stats); then analyze + build again.
  3. python3 -m nearthesis scenario --set intents_volume_growth=0.6 re-runs the model with your assumptions.

Known limitations