BTC —◆ ETH —◆ SOL —◆ STABLECOIN FLOAT $313.58B◆ NATIVE USDC ON BASE $4.31B◆ DEFI TVL $95.61B◆ THE PUBLIC LEDGER OF MACHINE MONEY — AGENTICFINANCEGRAPH.COM◆

Home/Research/Data health

Data health · live

We audit our own data before you have to

Assertion checks run against the tables behind every public number, every three hours. Zero failing rows means pass. Here is each one, as of the latest run.

Agentic Finance Graph · Published 2026-09-24 · Latest run 2026-09-26 20:17 UTC

Right now 37 checks, 1 failing. Health score 0.9771 (degraded), from the run at 2026-09-26 20:17 UTC. 3 informational notes are listed too: they are worth knowing, not defects.

Every number this site publishes is computed from a handful of tables: the payments behind each agent's rank, the agents themselves, the wallets bound to them, and the published snapshots. Before anyone trusts those tables, a set of assertion checks runs against them every three hours. Each check is a database query that returns zero rows when the data is healthy and the offending rows when it is not.

What a failure does

  • block: a published number would be wrong while this fails. Our rule is that the number it protects is withheld until the check passes. The automatic gate that enforces this is being built; until then, a block failure here is fixed by hand.
  • warn: something is late or drifting. The numbers are still right but may be behind.
  • info: worth knowing, not a defect. It never changes a public number.
  • A check that errors counts as failing. A broken smoke detector is not "no smoke".

By dataset and dimension

The worst state among the checks in each cell. A dash means no check covers that dimension for that dataset.
Datasetcompletenessuniquenessvalidityconsistencyreferentialfreshnessvolume
money_eventsi notei note✓ pass✓ pass✓ pass! late✓ pass
actors––✓ pass✓ pass–––
bindings–i note✓ pass✓ pass✓ pass––
snapshots––✓ pass––––
series✓ pass––––––
acp_jobs––✓ pass✓ pass–––
bankr_launches––✓ pass✓ pass–––
partner_identities–––✓ pass–––
x402_recipients––✓ pass––––
partner_cursors–––––✓ pass–
registrations––✓ pass––––
waitlist––✓ pass––––

Every check

Each check, its severity, its state on the latest run and how many rows it found. The raw results, with sample failing keys, are at /api/dq.
CheckDatasetDimensionSeverityStateRowsWhat it guards against
me_required_fieldsmoney_eventscompletenessblock✓ pass0A payment row is missing a field every downstream figure needs.
me_duplicate_logmoney_eventsuniquenessblock✓ pass0The same on-chain log (transaction + log position) is stored twice, which double-counts it.
me_identical_in_one_txmoney_eventsuniquenessinfoi note15Identical transfers inside one transaction. Usually a batch payment, not a duplicate: on 2026-09-24 all four counted groups were checked against their on-chain receipts and every one matched. Rows without a log position cannot be told apart from a double insert, which is why me_duplicate_log exists.
me_missing_log_indexmoney_eventscompletenessinfoi note1Payments stored before log positions were recorded. They fill in as the payment scan re-reads each wallet; until then me_duplicate_log cannot see them.
me_amount_rangemoney_eventsvalidityblock✓ pass0A payment amount is negative or implausibly large for a single agent transfer.
me_known_valuesmoney_eventsvalidityblock✓ pass0A kind, rail, asset or confidence value appeared that no downstream code knows how to treat.
me_address_formatmoney_eventsvalidityblock✓ pass0A sender or recipient is not a lowercase CAIP-10 address, so joins against it silently miss.
me_counted_self_paymentmoney_eventsconsistencyblock✓ pass0A wallet paying itself is counted as spending. Moving your own money is not paying anybody.
me_pre_registration_leakmoney_eventsconsistencyblock✓ pass0A payment from BEFORE the agent was registered is counted. This exact leak once overstated the headline by 46%.
me_orphan_actormoney_eventsreferentialblock✓ pass0A payment points at an actor that does not exist.
me_sender_never_boundmoney_eventsreferentialwarn✓ pass0A payment is attributed to an agent whose wallet was never bound to it, so the attribution has no basis.
me_pass_through_backlogmoney_eventsfreshnesswarn! late1Counted payments older than the backlog window have not been checked for pass-through routing yet. Pre-registration payments are excluded from every total already, so they never need checking (the first run flagged 3,313 of them by mistake).
me_freshnessmoney_eventsfreshnesswarn✓ pass0The newest observed payment is older than the scan's own cadence allows: the payment scan may have stalled.
me_volume_swingmoney_eventsvolumeinfo✓ pass0Yesterday's number of newly recorded payments is far from the trailing 7-day median. Needs a week of history.
actor_liveness_rangeactorsvalidityblock✓ pass0A liveness level outside the L0–L9 ladder.
actor_rank_without_evidenceactorsconsistencyblock✓ pass0An agent is ranked L7 or above with no countable payment behind it. The rank is the product; this is the check that protects it.
actor_evidence_without_rankactorsconsistencywarn✓ pass0An agent has a countable payment but is still ranked below L7: a promotion is pending.
actor_l9_counterpartiesactorsconsistencyblock✓ pass0An L9 agent does not have the three distinct counterparties in 30 days that L9 requires.
binding_orphan_actorbindingsreferentialblock✓ pass0A binding points at an actor that does not exist.
binding_wallet_formatbindingsvalidityblock✓ pass0A bound wallet is not a lowercase CAIP-10 address.
binding_intervalbindingsconsistencyblock✓ pass0A binding closes before it opens.
binding_shared_walletbindingsuniquenessinfoi note6,641One wallet is currently bound to several identities: an operator wallet, not an agent wallet.
snapshot_not_finitesnapshotsvalidityblock✓ pass0A published value is null, NaN or infinite.
snapshot_from_futuresnapshotsvalidityblock✓ pass0A published value claims a timestamp in the future.
snapshot_rate_out_of_rangesnapshotsvalidityblock✓ pass0A published rate or share is below 0 or above 1. A negative share was once published live.
series_missing_definitionseriescompletenesswarn✓ pass0A metric was written in the last day without a definition id, so /def cannot explain it.
acp_negative_amountacp_jobsvalidityblock✓ pass0An ACP job has a negative amount.
acp_paid_exceeds_fundedacp_jobsconsistencywarn✓ pass0An ACP job paid out more than it was funded with (outside rounding).
bankr_address_formatbankr_launchesvalidityblock✓ pass0A Bankr token, deployer or fee recipient is not a lowercase address.
bankr_fee_splitbankr_launchesconsistencywarn✓ pass0Bankr's platform plus creator fee exceeds the total fee it reported for the same token.
bankr_negative_feebankr_launchesvalidityblock✓ pass0A cited Bankr fee is negative.
partner_shared_flagpartner_identitiesconsistencyblock✓ pass0A wallet declared by several partner identities is not flagged as shared, so it could count as an agent wallet.
x402_address_formatx402_recipientsvalidityblock✓ pass0A named x402 seller is not a lowercase address, so payments to it are never attributed.
cursor_stalledpartner_cursorsfreshnesswarn✓ pass0A worker that pages through a source has not saved a new position for several of its own cycles, so whatever it feeds has quietly stopped updating.
catalogue_full_passpartner_cursorsfreshnesswarn✓ pass0The x402 harvest has not completed a full pass of the catalogue within the window. This is the page-one freeze of September 2026, caught by the machine instead of by a reader.
registration_from_futureregistrationsvalidityblock✓ pass0A registration claims to have been minted in the future.
waitlist_email_formatwaitlistvaliditywarn✓ pass0A waitlist entry does not look like an email address. Only a hash is returned: this table holds personal data.

How the health score is computed

A weighted pass rate over the block and warn checks. Each check weighs its dataset's importance (the tables the public rank is built from count 3, published snapshots and paging workers 2, partner and catalogue tables 1) times its severity (block 2, warn 1). Informational checks never move the score. A score of 1 means every check that could make a public number wrong passed on the latest run.

Why this page exists

Every serious correction this project has published was a data-shape error that a person noticed by eye: a share that went negative, routing hops counted as spending, a wallet's history from before its agent existed counted as the agent's spending, and a seller list that stayed frozen at page one for eleven days while every run reported success. Each of those is now a named check on this page, so the next one is found by a machine, not by a reader.

Questions people actually ask

How often are Agentic Finance Graph's data checks run?
Every three hours, on a timer on our own server. Each run stores its results and publishes them at /api/dq, and this page re-reads that document every time it is opened.
What happens when a data check fails?
A block-severity failure means a published number would be wrong, so that number should be withheld until the check passes. A warn failure means data is late or drifting. Info notes never change a public number.
Can I see the rows that failed?
Yes. /api/dq lists every check with up to five sample failing keys. For the one table that holds personal data, the waitlist, it shows only a hash, never an email address.