Changelog
What shipped, dated. Each entry corresponds to a public, verifiable artifact — that's the house style.
Tanilo was named AgentOracle until September 2026. Entries before that date refer to the same service under its previous name.
-
Anchoring: proof a receipt's payload existed by a given time
2026-10-06: receipts are now anchored on GOAT Network. Queued receipt hashes are combined into Merkle roots published on-chain, currently run once a day. An anchor shows a receipt's canonical payload existed by the block's timestamp; it doesn't show when the receipt was signed, or that its claim is true, and not every receipt is guaranteed a proof. Details: Anchoring: proof a receipt's payload existed by a given time.
-
Contract price check live
2026-10-05: contract price check live.
POST /v1/verify-factshas a seventh check type,contract_price_match: does an offer match the terms you supplied (caller-supplied, not verified as genuine)? Results are verified, contradicted or indeterminate. The rule and its tests are public. -
Paid research routes retired
2026-10-04: the paid research routes were retired;
/evaluateand/v1/verify-factsremain free in beta. -
Tanilo's own signing key is live; the previous key is retired
New
/evaluateand/v1/verify-factsreceipts are signed undertanilo-2026-10-ed25519-7d885da9, a new key with no signing history before Tanilo, and name issuertanilo.io.ao-composed-2026-06-ed25519-c3abfce3stops signing new receipts today (its last signature is on the key-continuity statement) and stays published as retired so existing signatures under it can still be checked; rotation alone does not invalidate them, and receipt validity, freshness and relying-party acceptance remain separate checks. Nothing already issued is re-signed. The key set is now published at tanilo.io/.well-known/jwks.json, with the same set atapi.tanilo.ioandagentoracle.co, and each key carries its status. A key-continuity statement signed by both the retiring and the new key is at /.well-known/key-continuity.json. First step of the issuance-path assertion: the new key's JWKS entry declaresrole: evaluatedand its receipts carry the samerolein the protected header (design: Pote, AgentTrust); receipts under the retired key carry none, so under the issuance-path role rule, signatures under it resolve to roleunknown. That is separate from signature validity, and a relying party that requires an established issuance path treatsunknownas its own fail. The API also answers atapi.tanilo.io;agentoracle.cocontinues to serve the same deployment. Details on the trust page. -
Gateway /v1/compose withdrawn; its signing key retired
Our own audit found that the API gateway's
/v1/composesigned verdicts supplied by the caller underao-composed-2026-07-ed25519-3d44ba27from 27 July to 24 September, without evaluating the claim. The route was withdrawn on 24 September 2026, when we deleted its private key and signing ended. It returns410since 28 September 2026, when we also removed its signing code. How many envelopes it signed cannot be established from the records. The key stays in the JWKS so existing signatures verify, but its signatures don't show we evaluated anything. This is a different route from theagentoracle.co/v1/composestub closed on 28 August. The homepage and trust page now show a receipt issued by/evaluateinstead of the one signed through this route. Full account: incident record, 2026-09-30 note. -
tanilo-receipt-verify 0.1.1 — malformed input no longer raises
stillmarcus24 found that 0.1.0 raised an exception on 22 of 30 malformed envelopes, so the 0.1.0 entry's claim that malformed input returns a result was broader than true. 0.1.1 checks the envelope's structure before anything reads it and returns invalid for malformed input; anything unexpected is reported as indeterminate with an
instrument_failurereason. An exception is not a verification state. PyPI ↗ -
tanilo-receipt-verify 0.1.0 published
Supersedes
agentoracle-receipt-verify0.1.0. A partial key set is now reported as not evaluated, so the envelope comes back indeterminate rather than invalid (case AC-11 in stillmarcus24's assurance-run suite) — unless the caller declares the supplied key set complete, in which case an unresolvable key is a policy refusal. ES256 is supported, and malformed input returns a result instead of raising. PyPI ↗ · Source ↗ -
/trust rebuilt — honest content only, replacing the fabricated live-numbers page
The prior
/trustpage presented invented per-source "Verified Claims" counts, live endpoints for an API that wasn't live, and prices that contradicted/pricing. Rebuilt from scratch: keys and rotation policy, a link to the incident record, the second-implementation standing claim with its conformance vectors, offline verify commands matching the homepage, an explicit list of what's still open, and the IETF draft link. No numbers, no live endpoints, no network-effect claims. -
Homepage example corrected — it no longer shows unchecked claims as checked
The example box showed “act · confidence 0.89 · 2 sources checked” and a signature line for any claim typed into it — including false ones — though nothing was checked or signed. It now shows three fixed examples, each with its own verdict, and says plainly that the live checker isn't open yet. The animated receipt at the top of the page is now labelled as an example.
-
Article 12 considerations tool corrected
The tool applied Article 12(3) to every Annex III category. Article 12(3) applies only to remote biometric identification systems (Annex III point 1(a)); those rows now appear only when that category is selected. The 12(3)(d) row no longer suggests a receipt's signing key identifies a natural person — a key identifies a service, not a person. The auditor letter template was removed: it asserted that every event of a system produces a signed record, which receipts don't do. Retention now cites Articles 19(1) and 26(6). Article 12 checker ↗
-
draft-krausz-verification-state-02postedFour verification states — verified, contradicted, indeterminate, not_evaluated — with reason codes that separate a verifier's own instrument failure from a finding; evidence pinning; the subject clause generalized to any state with an open attribution question; and admissibility as a gate before any state is assigned. Open questions are listed in its Section 10. Datatracker ↗
-
Settlements relabelled as test payments
The “8 settlements verified” in the Bazaar entry and the first SKALE settlement were our own test payments, confirming the payment path end to end. Both entries now say so.
-
Site audit corrections — quorum description, per-claim evidence disclosure, incident-record dating
"Four independent sources" was replaced across the site with an accurate description: multiple quorum members plus an adversarial re-check pass, with sources retrieved per claim. Three of the four members share a backend; the prior phrasing implied independence that didn't exist.
Correction 2026-10-02. The description this entry called accurate (quorum members plus an adversarial re-check, with sources retrieved per claim) still implied retrieval-grounded, independent checks. The checks are model judgment; sources are listed for reference and don't feed the verdict. See the 2026-10-02 copy update.
-
Incident record (2026-08-25) corrected — dating and self-consistency
The record claimed to be "not edited after publication" while carrying an undated 2026-09-22 addition; that addition is now dated and moved into the Corrections section. "Nothing below is edited for the rename" was replaced with an accurate statement: service names were updated to Tanilo, dates/hashes/key IDs/quoted findings were not. The lede's "five days undetected" was corrected to match the four-day window (21-25 August) stated elsewhere on the same page. Full record: /incidents/2026-08-25-canned-verdicts ↗.
-
Benchmarks page — backend-replacement disclosure added to the AVeriTeC headline
The 57.6% AVeriTeC figure is measured on the pipeline as it existed on 2026-05-28. The backend was replaced in September 2026; the page now discloses that the number has not been re-run since, rather than presenting it as current.
-
Benchmarks page — /v1/sign, /v1/sign/batch, and /v1/compose latency withdrawn from live presentation
All three were presented with runnable curl commands against a live host. /v1/sign and /v1/sign/batch are the forgery-oracle endpoints closed in
a8ce2a18d(see the incident record) and now require auth; /v1/compose was already marked withdrawn. All three are now labeled historical, dated to their original 2026-06-25 measurement against agentoracle.co, since tanilo.io did not exist at that date and carries no live API today. -
Incident record published — canned verdicts, 21-25 August 2026
Four-day window in which
/evaluatesigned and returned receipts for evaluations it never performed. The signed layer halted every affected request; the presentation body did not disclose that. Fixes shipped4a8b37177,98b3b7e78,c28c5dd6f,49261a37b,a8ce2a18d. External review by @giskard09 found and closed a same-class defect in the conformance sample and an unauthenticated signing path; kid separation remains open with no date. Full record: /incidents/2026-08-25-canned-verdicts ↗. -
Verifier v0.1.0 published to PyPI — three-outcome status semantics live on the released artifact
pip install agentoracle-receipt-verify==0.1.0· MIT · offline verification against the published JWKS. Public API exposesSTATUS_VALID,STATUS_INVALID,STATUS_INDETERMINATE. Post-publish gate ran against the installed package in a fresh venv — the no-key path returns indeterminate rather than valid. pypi ↗ -
Experiment A pre-registered — design frozen, three model families, results Sep 2
Two deep-research agents, one gated through
/evaluate(fail-closed, replans on failing verdict), 200 questions across four domains. Measured quantity: which citations survive independent verification. Ground-truth stack deterministic. The pre-registration document was public before any data was collected; the harness and the frozen question set land before the first run, on the schedule published in the repository README. pre-registration ↗Corrected 2026-08-17. This entry originally read “Pre-registration document, harness, and questions all public before any data was collected.” That overstated what was public: at the time of writing the harness was a disclosed stub and the question set was an empty array, both scheduled in the repository README for 2026-08-17, ahead of the 2026-08-19 run start. The pre-registration document itself was complete and public as described. No data had been collected at any point, and none has been collected as of this correction.
Update 2026-09-02. Headline withdrawn — the collection window overlapped the 21–25 Aug outage. See the append-only amendment
2351e29and the incident record: /incidents/2026-08-25-canned-verdicts ↗. -
Virtuals showcase merged — a live production receipt now sits in Virtual-Protocol/acp-cli-demos
10 files, +670/-0, merge commit
c08af80e7a12. Receipt blobd13a275e1c4dis byte-identical to the production receipt. Anyone can clone the showcase folder, install the verifier, and runpython3 verify.py receipt.jsonagainst the live JWKS. showcase ↗ -
Deterministic mode —
POST /v1/verify-facts: six check types, no LLM in the trust chain,check_moderecorded inside the signed payload -
v0.4 draft rev-2 — per-layer provenance design (layer_trace, mode ∈ {recomputable, signed}, three-state absence semantics) folded in from public design collaboration
-
Routine credential rotation completed — all previously issued receipts verify unchanged against the published JWKS
-
/pricing page + MCP homepage block live
-
Self-serve open — card → API key → signed receipts, live
Update 2026-09-24. Self-serve ran on
agentoracle.co; Tanilo's self-serve is launching. -
v0.4 conformance suite complete — 1 accept, 3 reject, 3 status vectors; two independent implementations; every envelope and wrapper hash recomputed byte-identical on both sides
-
First v0.4 conformance vector shipped — v04-accept-001, two-party signed (AgentOracle + AgentTrust legs), byte-identical across three independent canonicalizations
-
Sequence-integrity example merged into the community pre-action governance conformance suite — N artifacts over time, Merkle inclusion + tamper demos
-
Canonical verdict→gate mapping published, content-addressed — sha256-addressed immutable doc
-
Third cross-citing draft filed in the receipt family — draft-msebenzi-evidence-action-00 cites draft-krausz-verification-state
-
Composed multi-issuer envelope example merged into the community conformance suite — N signers, one artifact
-
Independent byte-identical second implementation merged — AgentTrust rebuilt the format from spec text alone
-
First candidate profile entry in the receipt-format registry — verification.v0.3 entered as a candidate profile in the ERC-8210 Receipt Profile Registry
-
IETF Internet-Draft FILED — draft-krausz-verification-state-01
Corrected 2026-09-24.
-00was filed on 6 June;-01followed on 12 June. -
Open-source receipt verifier published — offline JWS verification, MIT licensed
-
Cross-operator benchmark live — open methodology, open submissions
-
Receipt spec v0.3 — binary-halt gate + canonical/derived/version-bound mapping
-
AVeriTeC 2024 dev published — 57.6% overall, held-out 57.7%, MIT licensed
-
Pinned in x402trace v0.3.3 — first operator-contributed fixture in the harness
-
Live on SKALE Base — first test settlement, gasless on SKALE
-
Tutorial #4 — claim verification in AI content approval workflows
Published under the pre-rename name; unlinked here. (dev.to/agentoracle/how-to-add-claim-verification-to-your-ai-content-approval-workflow-3797)
-
Indexed in Coinbase Bazaar — 8 test settlements verified, our own payments, confirming the payment path end to end