{"what_this_is":"The mutable companion to the frozen ERC-8004 identity document for agentId 851891. It carries corrections that cannot go into frozen bytes, and serves as a fallback way to reach those bytes when IPFS gateways do not.","see_also":"https://app.tikpema.xyz/built — what else exists here, with the actual state of each.","trust_ordering":{"1_immutable":"The document bytes. Content-addressed: hash them, compare to the CID. Cannot change.","2_on_chain_pointer":"tokenURI(851891) on 0x8004A818BFB912233c491871b3d84c89A494BD9e. The operator can re-point it (setAgentURI, selector 0x0af28bd3) — but the move is an observable on-chain event.","3_this_endpoint":"Operator-controlled. Its DNS, TLS, contents and availability can change with NO on-chain record and NO notice. Trust it LAST.","if_they_disagree":"The CID wins. Always. This endpoint being wrong is a possibility the design accounts for; the CID being wrong is not possible.","why_stated_here":"This service's product is flagging trusted-mutable-surfaces in other people's contracts. It does not exempt itself, and a disclosure only a source-code reader would see is not a disclosure."},"identity":{"agent_id":"851891","owner":"0xc54D47211997aCA90Ef4fCfBc742a3b511B4e621","registry":"0x8004A818BFB912233c491871b3d84c89A494BD9e","chain_id":5042002,"network":"Arc Testnet","how_to_verify_independently":["ownerOf(851891) on 0x8004A818BFB912233c491871b3d84c89A494BD9e should equal 0xc54D47211997aCA90Ef4fCfBc742a3b511B4e621","tokenURI(851891) should equal ipfs://<the current CID below>","Fetch that CID from any gateway and sha256 it — it should equal the sha256 recorded for that version.","None of these steps requires trusting this endpoint."]},"current_document":{"version":"1.1.0","cid":"bafkreib6viz4fqa4oqrrgxfecwcttxyda6ilm5nmzr7yplznqeahqmomla","sha256":"3eaa33c2c01c7423135ca4158539df030790b675accc7f87af2d81007831cc58","bytes":18756,"ipfs_uri":"ipfs://bafkreib6viz4fqa4oqrrgxfecwcttxyda6ilm5nmzr7yplznqeahqmomla","caveat":"This is the CID this endpoint was deployed with. It is NOT a live read of tokenURI. It can disagree with the chain in EITHER direction, and the chain wins both times: if the pointer has already moved past this, this is STALE; if the pointer has not moved yet, this is AHEAD (see pointer_expectation). Read tokenURI(851891) yourself — that is the only authority here.","pointer_expectation":"This route is deployed BEFORE setAgentURI is sent, so during the changeover it runs AHEAD of the chain rather than behind it. If tokenURI(851891) still returns an earlier CID than the one above, the move has not happened yet and THAT earlier document is still the authoritative one — its entry below, errata included, describes it correctly. The reverse order was rejected: it would hand a reader the NEW document off the chain while this endpoint still called it superseded, which is the contradiction this companion exists to prevent."},"where_to_fetch_the_bytes":{"prefer_a_gateway":"Fetch the CID from any IPFS gateway and verify the hash. Prefer this over asking us — a copy you obtain independently and verify yourself is worth more than one we hand you.","gateways_tested_2026_08_18":["https://gateway.pinata.cloud/ipfs/<cid> — served correct bytes","https://ipfs.io/ipfs/<cid> — HTTP 504 on a COLD fetch, correct bytes once warm","https://dweb.link/ipfs/<cid> — HTTP 504 on a COLD fetch, correct bytes once warm"],"follow_redirects":"Use curl -L. Gateways redirect to a subdomain form, and without -L you capture a 301 body and may mistake it for the document.","if_every_gateway_fails":"Then the document is unreachable, and content addressing does not fix that. Content addressing guarantees any copy you DO obtain is the right one; it guarantees nothing about a copy existing where you can reach it. That is a real limit and is stated rather than papered over."},"versions":[{"version":"1.0.0","cid":"bafkreigtonfmznrzbi3b34w27b5utra5jjcngc74skc7i67dymue3o2af4","sha256":"d3734accb6390a361df2daf87b49c41d4a44d30bfc9285f47be3c3284dbb402f","bytes":28628,"pinned":"permanently — two paid reports were produced under this document","superseded_by":"1.1.0","known_errata":["Says NO WALLET EXISTS / NOTHING IS REGISTERED / NO agentId EXISTS. It was registered 2026-07-26 as agentId 851891.","Says reports are NOT signed or attested by any identity. ERC-1271 report attestation is live.","Leaves open whether this service registers under the same wallet as agentId 851823. It did — owner 0xc54D47211997aCA90Ef4fCfBc742a3b511B4e621."]},{"version":"1.1.0","cid":"bafkreib6viz4fqa4oqrrgxfecwcttxyda6ilm5nmzr7yplznqeahqmomla","sha256":"3eaa33c2c01c7423135ca4158539df030790b675accc7f87af2d81007831cc58","bytes":18756,"pinned":"permanently — every CID this identity has ever pointed at stays pinned, and the set only grows","superseded_by":null,"known_errata":["PAYMENT RAIL, and the prerequisite it omits. `interface.payment` says \"Paid access is x402 over EIP-3009 on Arc USDC.\" The live 402 declares `extra.name: \"GatewayWalletBatched\"` — settlement is through CIRCLE GATEWAY, not against the USDC token. Three things follow, and the frozen wording states none of them: (1) the authorization is signed against the GatewayWallet contract in `accepts[0].extra.verifyingContract`, so a plain token-domain EIP-3009 receiveWithAuthorization payer CANNOT pay this endpoint; (2) the price is pulled from a Circle Gateway balance the payer must have DEPOSITED BEFOREHAND — no deposit, no payment, and this omission alone would leave a buyer stuck even after fixing the rail; (3) the batched header requires ecrecover(sig) == from, so the payer must be an EOA that both holds the balance and signs — a smart account paying via a delegate cannot satisfy it. The human page, the OpenAPI document and the 405 body carried the same wrong rail and were corrected in code on 2026-08-27; only these bytes cannot be.","ITS OWN `_notice` IS STALE. The document opens \"DRAFT — v1.1.0, NOT YET PINNED AND NOT YET POINTED AT.\" It is pinned and it is pointed at: these bytes are the current document, and this endpoint serves their CID above. ⚠️ The notice is INSIDE the pinned bytes, so it cannot be corrected without changing the CID it warns about changing."]}],"supersession_owed":{"what":"What a v1.2.0 supersession must fold in. Recorded so that session has its input ready.","why_not_yet":"Superseding is an on-chain session with a fail-closed ordering guard: this route must report v1.2.0 as current BEFORE setAgentURI moves the pointer, or a reader gets the new document off the chain while this companion still calls it superseded. That is a deliberate session, not a passenger on a page deploy — and the corrections above are live in the meantime.","items":["FOLD IN v1.1.0 ERRATUM 1 — state the payment rail as Circle Gateway batched settlement, and state all three payer constraints (GatewayWallet verifying contract, not USDC; a Gateway balance deposited beforehand; ecrecover(sig) == from, so an EOA that holds and signs).","FOLD IN v1.1.0 ERRATUM 2 — the `_notice` must describe the document's ACTUAL state at freeze. The v1.1.0 notice shipped saying 'NOT YET PINNED' and was pinned unchanged; a notice that describes the moment before freezing is wrong from the instant it freezes.","CARRY FORWARD v1.0.0's three errata, which v1.1.0 fixed in prose but which a reader arriving at v1.0.0's CID still needs this endpoint to serve.","DECIDE, do not assume: whether DD should offer a vanilla token-domain EIP-3009 entry ALONGSIDE Gateway. Today it does not, and the corrected copy says so. If that changes, the document must not be written ahead of it — that is the defect these errata exist to record."]},"pinning_obligation":"Every CID this identity has ever pointed at stays pinned FOREVER. Unpinning is not cleanup — it retroactively destroys the verifiability of reports that were sold under that document. The set only grows, one entry per supersession.","generated_by":"netlify/functions/dd-identity.mjs — static, no chain call, no secrets"}