Observation

An observation is one event Firsthand watched happen and hashed. Not a rating somebody left, but an event read from the chain and keyed by a hash of the raw log.

kind          erc8004_feedback
source        base:0x8004BAa17C55a88189AE136b182e5fdA19dE9b63
content_hash  sha256:9cc1136c08a...
tx_hash       0x48a0875f7f61b39015a5773bf620b0413234e0134cb335d569786de3c3f2614a

The kinds Firsthand currently holds

Three, all read from the ERC-8004 registries on Base 8453.

kindwhat it records
erc8004_registrationan agent registered, with its owner and registration file
erc8004_feedbacka claimant left feedback about an agent
erc8004_claimthe same event, filed in the claimant's own dossier

The design anticipated ACP job completions and x402 settlements as well. The indexer reads the registries, so those are what exist. Firsthand shows three kinds and says three.

Why the hash matters

Idempotency is a SHA-256 over the raw log, checked against the journal itself, because an observation is a fact and the journal is the seen-set. Re-indexing a range writes nothing new. It also lets a reader holding the dossier verify that a published verdict rests on the observations Firsthand says it does.

What is deliberately not decoded

The feedback event carries three integers whose meaning is not published anywhere checkable. They are stored under unresolved rather than given names like "score". Guessing a field name and then judging a real agent on the guess is how a counterparty gets called suspect for no reason.