The claim being made

Clustering asserts that two addresses are the same operator. That is a serious claim about a named party, so the design is deliberately conservative: it would rather return nothing than return a plausible link it cannot evidence.

No single behavioural heuristic can cluster alone

Seven heuristics vote against an acceptance threshold of 0.75. Only two are weighted above it: The split is exactly the observe/infer line. An inferred pattern — similar timing, overlapping counterparties, comparable gas behaviour — needs corroboration before it can assert identity. An observed on-chain relationship does not.

Every edge carries its provenance

Accepted edges are returned with the evidence that produced them and marked status: 'inferred'never 'asserted'. The distinction survives into the payload so a downstream consumer cannot promote an inference to a fact by accident.

Zero clusters is normal

A low score means “no evidence of a link”, not “no link”.A live depth-2 run over 54 addresses clustered nothing, with a strongest pair of 0.369. That is the system working correctly, not a failure.Reading an empty cluster result as “these wallets are definitely unrelated” inverts the claim being made.

Skipped is not no-match

On Hyperliquid, the deployer and gas_fingerprint heuristics skip every pair, because the venue exposes no contract-creation events and no transaction-metadata class to fingerprint. The response distinguishes skipped-with-reason from evaluated-and-no-match. Collapsing them would report “we checked eight ways and found nothing” when the honest statement is “we checked six ways, and two were inapplicable here.”

Depth costs runtime

depth accepts 0–2 hops of counterparty expansion. Each hop multiplies runtime; depth 1+ can take tens of seconds by design. That is search breadth, not slowness.

Read-only, enforced

Clustering is invoked with persist=False and a test asserts it. Inferred edges are never written back into the entity graph — an edge written on a language model’s say-so would be a write reachable from a prompt.

Availability

The backing wallet_clustering module ships on an unmerged branch. On a master checkout, get_wallet_cluster returns module_absent with a reason. Do not repoint it at a different module to make it answer.
Scienter publishes impersonal market signals of general and regular circulation. Nothing here is investment, legal, or tax advice, or a recommendation to buy, sell, or hold any asset. Scienter is not a registered investment adviser or broker-dealer. Trading digital assets can result in the total loss of your funds — see Disclaimers for the full text.