Verifiable Silence for AI Training Disclosure
1. Abstract
Regulators, courts and the public increasingly need to establish not what an AI provider said about its training data, but what it had not said, and for how long. Presence is easy to prove: a disclosure is published, hashed, timestamped. Absence is hard: an absence has no document, no author and no date, and the party who could produce one has every incentive not to.
Crovia runs TACET, a protocol and a live public service that turns the absence of disclosure into a verifiable object. Every hour a public randomness beacon opens an epoch. An observer fetches the public model cards of the AI systems under watch, runs a versioned, published predicate over the bytes (does this card name its training data?), signs each result, and commits all of them to one sparse Merkle map. The map root, the beacon and the Merkle root of the hour's snapshots are signed into an epoch sheet whose hash is timestamped in Bitcoin. A silence proof is the chain of non-inclusion proofs for one model across a range of anchored epochs, together with the negative snapshots that justify each hour. Anyone can verify it offline; nobody has to trust Crovia.
The claim TACET makes is narrow and defensible: "between these beacon rounds and these Bitcoin blocks, on these public surfaces, the published predicate returned false in every hour we observed, and here are the signed bytes." It never says why, and it never says what the provider knew.
2. The problem: absence has no witness
Article 53 of the EU AI Act requires providers of general-purpose models to publish a sufficiently detailed summary of training content. Similar duties are emerging in other jurisdictions and in private contracts (licences, indemnities, M&A warranties). Every such duty produces the same evidentiary question in dispute: when did the disclosure appear, and what was there before?
- The provider's own history is theirs to rewrite. A git history, a CMS, a model-hub README can be edited or force-pushed. Web archives are voluntary, sparse, and not designed to be adversarially robust.
- Third-party indices measure presence. Transparency indices score what companies choose to publish. They do not preserve, hour by hour, what was not there.
- A screenshot is not evidence of a negative. It shows one moment, from one vantage point, with no lower time bound and no proof of what was fetched.
What is missing is an independent, continuous, tamper-evident witness of absence whose output can be checked by the party it is used against. That is the specification TACET was written to.
3. TACET in one page
| Element | What it is | Why it is there |
|---|---|---|
| Epoch | One hour, numbered from genesis 2026-09-19T18:00:00Z. | Time is quantised so proofs are about intervals, not instants. |
| Beacon | A drand quicknet round fetched at epoch start; chain hash pinned in the trust root. | Unpredictable randomness that did not exist before the hour began — a lower time bound. |
| Snapshot | Signed record of one fetch: URL, HTTP status, body SHA-256, TLS certificate SHA-256, IP, timing, predicate id + code hash, verdict, beacon round. | Binds the observation to the bytes and to the hour. |
| Predicate | A pure function bytes → bool, versioned and hashed. Current: crovia.pred.hf-card-training-data 1.0.0. | Removes judgement from the observer. Anyone can re-run it on the archived bytes. |
| Map | A 256-deep sparse Merkle map, key = SHA-256 of the canonical target id, value = the latest disclosure/commitment object or empty. | Efficient non-inclusion proofs; one root commits to the state of every model at once. |
| Epoch sheet | Signed object: map root, previous sheet hash, beacon, snapshots root, size. | Chains hours together; the thing that gets anchored. |
| Anchor | OpenTimestamps attestation of the sheet hash, confirmed in a Bitcoin block. | Upper time bound. Only anchored epochs count toward silence. |
| Silence proof | Delta-encoded chain of non-inclusion paths plus negative snapshots, for one target over a range of epochs, wrapped in a Crovia Seal. | The portable object a court or regulator receives. |
4. The temporal sandwich
Every epoch is bounded on both sides by things Crovia does not control.
The beacon value is included in the signed region of the sheet and in every snapshot; the sheet hash is what the OpenTimestamps proof commits to. A verifier checks that the beacon round corresponds to the epoch's start time using drand's published genesis and period, and checks the OTS proof against the Bitcoin block header independently. Crovia cannot move an observation earlier than the beacon nor later than the block; it can only omit hours, and omitted hours contribute nothing to silence (§7).
5. The verifiable map
The map is a sparse Merkle tree of depth 256 with canonical empty-subtree hashes, domain-separated leaf and node hashing, and CSC-1 canonical JSON for all values. Slot transitions are forward-only: empty → commitment → disclosure or empty → disclosure. A disclosure is never removed. The map therefore answers, for any target and any epoch, exactly one of three states: never-committed, committed-unrevealed, revealed.
Non-inclusion across consecutive epochs is delta-encoded: the proof carries a full path for the first epoch and, for each later epoch, only the siblings that changed. For a map of a few thousand targets this keeps a month-long proof in the tens of kilobytes.
6. Surfaces and the public predicate
The primary surface for a Hugging Face model is https://huggingface.co/<org>/<model>/raw/main/README.md; the rendered model page is the fallback. The predicate examines YAML front-matter (datasets:), headings that name training data, and lead phrases in prose. It is deliberately permissive: a thin disclosure counts as present. TACET records absence; it does not grade quality.
The predicate's source is published in the countersign repository with real-card conformance vectors; its SHA-256 is recorded in every snapshot. A disagreement about a verdict is a disagreement about public code on public bytes — reproducible by either party.
7. Silence proofs and strength levels
| Level | Name | What is proven |
|---|---|---|
| 1 | map-silence | The slot was empty in every epoch of the range. Says nothing about the world; displayed only as "map silence". |
| 2 | surface-silence | Level 1, and for every counted epoch a negative snapshot exists, is included under that epoch's snapshots root, and carries the epoch's beacon. Only anchored epochs count. Minimum for any public statement. |
| 3 | witnessed-silence (k/n) | Level 2, and every sheet carries at least k countersignatures from an independent witness set of size n. |
The monotonicity rule
observed_epochs = #{ e : sheet(e).closed.status == "bitcoin" ∧ ∃ negative snapshot for target in e }
silence_seconds = Σ over observed epochs of (epoch_end − epoch_start)
silence_days = silence_seconds / 86400
Hours without a negative snapshot — observer down, surface unreachable, predicate error — contribute nothing. Unanchored hours contribute nothing. Operator downtime contributes nothing. Silence cannot grow while observation is paused, and any verifier can recompute the figure from the proof alone. Every displayed silence figure carries its observed_to.
8. Crovia Seal: the envelope
Every TACET proof and every certificate is delivered as a crovia.seal.v1 object — the tamper-evident receipt format specified in IETF Internet-Draft draft-crovia-seal: CSC-1 canonicalization, Ed25519 signature, issuer identity, hash of the payload, optional hash-chain and countersignatures. The draft is frozen; TACET uses it unmodified, as a profile. The same envelope is used by Causari for a different payload, which is the point of a standard.
# three lines, offline from crovia_seal import verify_seal seal = json.load(open("mistralai__Mistral-7B-v0.1.seal.json")) print(verify_seal(seal, trust_root)) # signature, canonical form, payload hash
9. LACUNA certificates
A LACUNA (loss-of-auditability) certificate is a TACET level-2 silence proof for a named model and a named window, wrapped in a Seal that Crovia signs as issuer, delivered with the archived surface bytes, the predicate source at the recorded hash, and a counsel-facing narrative that states exactly what is and is not asserted. Public candidates — every model with anchored negative hours — are listed live at /registry/lacuna/; the proofs themselves are free under CC-BY-4.0. The certificate service is the paid, human part: window selection, packaging, declaration, and availability to explain the method.
A LACUNA certificate is not a fraud finding, not a statement that evidence never existed, not a claim of bad faith, not a compliance certification and not a quality grade. It is a record of what an independent observer saw, when, bounded by two public clocks.
10. Commit-then-reveal for providers
TACET is symmetric. A provider that wants protection against silence claims can pre-register a training-data summary: publish a Seal over H(summary ‖ salt), have it inserted into its slot as a commitment, and reveal the summary at release. The temporal sandwich then proves timely, unchanged publication without depending on Crovia's honesty, and a silence proof for that slot becomes impossible by construction. The three states — never-committed, committed-unrevealed, revealed — are reported as such.
11. The 2026 archive
From January to June 2026 Crovia operated a first-generation stack (the "AXIOM ledger": autonomous collectors, signed envelopes, batch Merkle seals, OpenTimestamps anchors) and a set of derived products — a transparency index, provenance graph, per-model passports, compliance timelines. Observation on that ledger paused on 2026-06-01. Its data remains public and verifiable under /registry/data/substrate/ and is browsable through Explore, Verify, Compliance and Provenance. Its silence figures are observation-bounded and stop at the last observation.
The archive is why TACET exists in its current form. Three lessons from it are now normative: silence must not accrue without observation; headline numbers must be recomputable from public files; and every product name must map to exactly one object. The March 2026 whitepaper describes that stack and is kept for the record.
12. Operational status
As of 2026-09-19. This table is maintained together with the site canon; a component is "live" only if its output file on this domain is updating on schedule.
| Component | Status | Public output |
|---|---|---|
| TACET operator (hourly epochs, drand, OTS) | live | /registry/data/tacet/ — sheets, snapshots, values, changes, ots, latest.json, targets.json |
TACET predicate hf-card-training-data 1.0.0 | live | source + vectors in countersign |
| Featured silence proofs (daily rebuild) | live | /registry/data/tacet/proofs/ |
| Witness countersignatures (level 3) | planned | — |
| Crovia Seal reference implementation (Python) | live | crovia-seal on GitHub / PyPI; in-browser verifier |
| seal.croviatrust.com signing service + transparency log | live | /registry/data/seal/transparency_log.json |
| AXIOM ledger collectors | archive | paused 2026-06-01; data public and anchored |
| Substrate root anchoring (OTS) | live | /registry/data/substrate/ots_anchors.json — distinct roots only |
| Transparency index, provenance graph, passports, compliance hub | archive | derived from the ledger; read-only |
| Outreach to model maintainers | stopped | voluntarily suspended; no automated contact is made |
| Forensic dossiers, memorization probes | on request | professional; engagement letter first |
13. Threat model
- Dishonest operator (Crovia). Cannot backdate (beacon), cannot postdate (Bitcoin), cannot remove a disclosure (forward-only slots), cannot fabricate a negative without producing bytes and a predicate verdict that anyone can re-run. Can omit hours; omitted hours count as nothing. Can stop; silence stops with it.
- Surface manipulation by the provider. A provider may serve different bytes to different clients. Snapshots record TLS certificate and IP; level 3 adds independent witnesses from different vantage points. Until then, a level-2 proof is a proof about what was served to Crovia's observer.
- Predicate disagreement. The predicate is public and hashed; a challenger can show a specific byte string on which it disagrees with human reading. That is a bug report, not a dispute about facts, and it is why the predicate is permissive.
- Beacon or Bitcoin failure. drand outage → the epoch is not opened and is skipped. OTS/Bitcoin delay → the epoch stays pending and does not count until confirmed.
- Key compromise. Operator, observer and issuer are separate Ed25519 keys published in the trust root; rotation is a new trust root entry with the previous key signing the next. Historical sheets remain verifiable against the key that was valid at the time.
14. What Crovia does and does not claim
| Crovia says | Crovia does not say |
|---|---|
| "The predicate returned false on these bytes, fetched at these times, from this URL." | "The provider deliberately kept its training data secret." |
| "These hours are bounded by beacon round r and Bitcoin block h." | "The provider knew it was non-compliant." |
| "This is the sum of anchored, observed hours; here is how to recompute it." | "This model is unsafe / low quality / infringing." |
| "Here are the exact bytes; run the predicate yourself." | "No disclosure existed anywhere in the world." |
15. Public, professional, and money
- Public, free, CC-BY-4.0: every observation, sheet, snapshot, anchor and silence proof; every headline number and the file it is read from; the specifications, reference implementations and conformance vectors (Apache-2.0 / CC0).
- Professional, paid: signed LACUNA certificates for a named model and window (from €2,500); forensic dossiers and memorization probes for litigation and regulatory work; EU AI Act monitoring for a named portfolio; witness operation for organisations that want to countersign the log.
- No vendor money. Crovia does not accept payment from the providers it observes to alter targets, predicates or the log. Providers may use commit-then-reveal at no cost.
- Sustain: individual supporters fund observer and anchor costs; every contribution is receipted as a Seal.
16. Roadmap
| Item | Effect | Status |
|---|---|---|
| Independent witnesses (countersign protocol) | Level-3 proofs; removes the single-vantage-point limitation | next |
| Second predicate: EU AI Act Art. 53 summary template | Distinguishes "some disclosure" from "the required summary" without grading | planned |
| Additional surfaces (GitHub READMEs, provider documentation pages) | Same protocol, more of the world | planned |
| Provider commitments in production | Commit-then-reveal available to any provider through the Seal service | planned |
| Browser verifier for TACET proofs | Load a .seal.json by URL or paste; verifies signatures, roots, snapshots, silence and the Bitcoin anchors (SPEC §8.6) without installing anything | live |
17. How to verify this document's claims
# reference + operator (Python ≥ 3.10) git clone https://github.com/croviatrust/countersign git clone https://github.com/croviatrust/crovia-seal pip install -e countersign/tacet/reference/python -e crovia-seal/reference/python -e countersign/tacet/operator pip install opentimestamps-client # the live log curl -s https://croviatrust.com/registry/data/tacet/latest.json curl -s https://croviatrust.com/registry/data/tacet/trust_root.json # a proof, verified (recomputes roots, checks drand rounds, parses the OTS proofs and matches Bitcoin headers, signatures, silence) curl -sO https://croviatrust.com/registry/data/tacet/proofs/mistralai__Mistral-7B-v0.1.seal.json tacet-operator verify mistralai__Mistral-7B-v0.1.seal.json
The live pages at /registry/tacet/ and /registry/lacuna/ read the same files. If a number on this site cannot be recomputed from a public file, it is a bug: info@croviatrust.com.
Crovia Trust · Whitepaper v3.0 · 2026-09-19 · Text CC-BY-4.0 · Prior version: v2.0, March 2026.