{
  "probe": "erc8004_base_identity_probe",
  "probe_version": "1.0.0",
  "generated_at": "2026-08-02T05:48:10.056391+00:00",
  "digest": "f01dd0580950e1f7c9f82f6c0ec6b7d7aafcd43261bc5bd36d214277df6ad6a0",
  "chain": {
    "caip2": "eip155:8453",
    "identity_registry": "0x8004A169FB4a3325136EB29fA0ceB6D2e539a432",
    "agent_registry_caip10": "eip155:8453:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432",
    "pinned_block": 49430006,
    "pinned_block_hash": "0x2f1c73af317d6e81bd3b198a8287ef244f8ea25b0d628ae21304365bb21196ea"
  },
  "population_at_pinned_block": 60455,
  "sampled": 500,
  "no_agent_uri_rate": 0.306,
  "no_agent_uri_rate_ci95": [
    0.267213,
    0.347746
  ],
  "unresolvable_rate": 0.364,
  "unresolvable_rate_ci95": [
    0.323011,
    0.407063
  ],
  "must_admit": 143,
  "must_refuse": 357,
  "must_miss_rate": 0.714,
  "must_miss_rate_ci95": [
    0.672876,
    0.751861
  ],
  "full_admit": 56,
  "full_refuse": 444,
  "full_miss_rate": 0.888,
  "full_miss_rate_ci95": [
    0.857346,
    0.912738
  ],
  "refuse_limb_counts": {
    "agent_uri_resolves": 182,
    "registration_schema_valid": 155,
    "registration_self_reference": 83,
    "registration_parses": 20,
    "endpoint_answers_today": 4
  },
  "top_refuse_reasons": {
    "agent_uri_resolves:empty_agent_uri": 153,
    "registration_schema_valid:no_registration_type_declared": 150,
    "registration_self_reference:no_registrations_entry": 74,
    "registration_parses:json_parse_error:Expecting value: line 1 column 1 (char 0)": 19,
    "agent_uri_resolves:http_404": 10,
    "registration_self_reference:registrations_do_not_match_onchain_identity": 9,
    "agent_uri_resolves:http_500": 6,
    "registration_schema_valid:no_services_list": 5,
    "endpoint_answers_today:no_declared_endpoint_answered": 4,
    "agent_uri_resolves:[Errno 61] Connection refused": 2,
    "agent_uri_resolves:http_530": 1,
    "agent_uri_resolves:unsupported_uri_scheme:thuggy-10": 1
  },
  "limb_outcomes": {
    "agent_uri_resolves": {
      "ok": 318,
      "fail": 182,
      "not_applicable": 0,
      "absent": 0,
      "not_reached": 0
    },
    "registration_parses": {
      "ok": 298,
      "fail": 20,
      "not_applicable": 0,
      "absent": 0,
      "not_reached": 182
    },
    "registration_schema_valid": {
      "ok": 143,
      "fail": 155,
      "not_applicable": 0,
      "absent": 0,
      "not_reached": 202
    },
    "registration_self_reference": {
      "ok": 60,
      "fail": 238,
      "not_applicable": 0,
      "absent": 0,
      "not_reached": 202
    },
    "endpoint_answers_today": {
      "ok": 77,
      "fail": 42,
      "not_applicable": 179,
      "absent": 0,
      "not_reached": 202
    },
    "domain_wellknown_proof": {
      "ok": 0,
      "fail": 16,
      "not_applicable": 205,
      "absent": 77,
      "not_reached": 202
    }
  },
  "agent_uri_schemes": {
    "https": 180,
    "none": 153,
    "data": 126,
    "ipfs": 31,
    "not_a_uri": 8,
    "http": 2
  },
  "ledger": "https://geniusflow-federation.vercel.app/erc8004/ledger.json",
  "receipt_lookup": "https://geniusflow-federation.vercel.app/erc8004/receipts/<agentId>.json",
  "human_summary": "https://geniusflow-federation.vercel.app/erc8004/README.md",
  "human_page": "https://kaydeep0.github.io/eigenstate-research/erc8004/",
  "methodology": {
    "what_this_is": "A refusal ledger over the ERC-8004 Identity Registry on Base. For a uniform sample of registered agents it fetches the declared agentURI, runs six named limbs, and publishes the receipt including every refusal. It is not a reputation score and does not rank agents.",
    "why_not_a_score": "Explorers already list and score registered agents. This ledger publishes the other half: registrations that resolve to nothing, so a dead registration and a working one do not look identical once someone fetches them. The artifact here is the miss, named by limb.",
    "read_only": "Every chain interaction is eth_call at a pinned block. No transaction is sent, no key is used, nothing is written to any chain.",
    "politeness": "One GET per declared URL, at most two endpoints per agent, 12 second timeout, 512 KB body cap, identifying user agent that links back to this ledger.",
    "sampling": "Uniform sample without replacement of up to 500 agentIds from 1..N at a pinned block, seeded by that block's hash. The seed is published, so the id set is redrawable by a third party with stdlib random.Random and no input from this node.",
    "enumeration": "The registry is an ERC-721 without the Enumerable extension and without a burn path, so ids are contiguous from 1 and N is found by binary search on ownerOf at the pinned block.",
    "limb_order_frozen": [
      "agent_uri_resolves",
      "registration_parses",
      "registration_schema_valid",
      "registration_self_reference",
      "endpoint_answers_today",
      "domain_wellknown_proof"
    ],
    "limb_spec_level": {
      "agent_uri_resolves": "MUST",
      "registration_parses": "MUST",
      "registration_schema_valid": "MUST",
      "registration_self_reference": "SHOULD",
      "endpoint_answers_today": "OBSERVED",
      "domain_wellknown_proof": "MAY"
    },
    "statuses": {
      "ok": "limb observed to pass",
      "fail": "limb observed to fail; counts against the agent",
      "not_applicable": "limb cannot apply to this agent, e.g. no HTTP endpoint declared",
      "absent": "an optional artifact was not published; not counted as a failure",
      "not_reached": "an earlier limb failed, so this one was never observed; it is neither a pass nor an exemption"
    },
    "two_headline_rates": {
      "must_miss_rate": "fraction of sampled agents where at least one limb the ERC states as MUST failed: the agentURI did not resolve, the body was not JSON, or the document did not declare the ERC-8004 registration type with a service list",
      "full_miss_rate": "must_miss plus agents whose file does not point back at the on-chain identity it was read from, or whose declared HTTP endpoints did not answer today"
    },
    "known_limits": [
      "A sample is a sample. Both rates carry a 95 percent Wilson interval.",
      "One fetch at one moment from one network vantage point. A transient outage reads as a refusal, which is why the receipt records the exact status or transport error and the run is repeatable.",
      "The probe accepts either services or endpoints as the endpoint list key, because the pre-final draft of the ERC used the latter and files in the wild still do.",
      "Endpoint liveness means the host produced an HTTP response of any status. It is not a statement that the endpoint is correct, useful, or non-malicious.",
      "IPFS is read through public gateways, so a gateway failure is reported separately from a publisher failure."
    ],
    "sources": {
      "eip": "https://eips.ethereum.org/EIPS/eip-8004",
      "reference_contracts": "https://github.com/erc-8004/erc-8004-contracts",
      "explorer": "https://basescan.org/address/0x8004A169FB4a3325136EB29fA0ceB6D2e539a432",
      "address_confirmed_onchain_by": "eth_call name() on the address returns the string AgentIdentity, and ownerOf/tokenURI answer for low agentIds, so the address is checked against the chain rather than taken from a directory."
    }
  },
  "not_claimed": [
    "This is not a reputation score and does not rank agents.",
    "A refusal is what this probe observed at one moment from one vantage point, not a verdict on the operator. Re-run it and see.",
    "No agent was contacted beyond a plain GET of URLs it published itself.",
    "This node holds no ERC-8004 agentId, so it is not in its own sample."
  ]
}
