# Record Sources

A record source is one entry of the calendar's source registry, with the endpoint it reads, its parser, its schedule and the branch it writes. The record started with the sources of branches 1 to 6. Branches 7 to 29 come in eight families, each switched on by a registry step of its own. This page lists every family with the credit line its publishers ask for, what we keep from them and how a reader checks the result without trusting us.

The [Record Sources](https://etchd.app/records/sources) page of the explorer shows the same list with the state of each source on the calendar, and `/v1/sources` serves the sources in force with their attribution. Layouts and rules are under [Branches 7 to 29](https://github.com/classix-dev/etchd/blob/main/SPEC.md#branches-7-to-29) in SPEC.md.

## Trust Classes

Every branch has a trust class. S means the source signs what we record, so a reader checks the signature with the key the registry snapshot pins. C means content-addressed, such as a git commit, an LFS hash or a Bitcoin transaction. P is a hash the publisher itself serves, which a reader rechecks for as long as the publisher keeps the object. O means the record is the operator's account of what a source said, which the source never signed.

An O record proves that calendar `a` committed those bytes by the anchor time, and nothing about the source. Calendar `a` is run by Classix, and it is the only operator today. Contracts that read records take a list of operators and a quorum, so a second operator plugs in the same way.

No record stores a raw response. Where a record carries a file hash, it is either the publisher's own hash (a Wikipedia revision sha1, a Wayback CDX digest, a Common Crawl ETag, a Zenodo MD5, OFAC's `Digest`, a git or LFS id) or our sha256 of a published file that others keep copies of, such as the EU, UK and UN sanctions lists.

## Prices, Chains and Feeds

These are the six branches the record starts with. [Records](https://etchd.app/docs/records) gives their layouts.

| Credit | Sources | Branch | Step |
| --- | --- | --- | --- |
| Kraken, Coinbase Exchange, Swissquote, gold-api.com | kraken, coinbase, swissquote, goldapi | 1 | D |
| Chainlink on Ethereum | chainlink-ethereum | 1 | D |
| ECB Reference Rates | ecb | 1 | D |
| The beacon's RPC quorum | the chain registry | 2 | D |
| Certificate Transparency logs of Google and Cloudflare | ct-heads | 3 | D |
| NIST Randomness Beacon | nist-beacon | 4 | D |
| About 80 news outlets and Hacker News | hn-front and one id per feed | 5, 6 | D |

Prices are O, with Chainlink answers rechecked on Ethereum by `etchd records verify --rpc`. Chain heads are C where the day's bundle holds the block header and O otherwise. CT heads and NIST pulses are S. Headlines and front pages are O.

The price sources are public, keyless market APIs, and we keep one number per pair per slot. Headlines keep capped metadata only, the title, link, date and guid of each item, and never a description, body, image or author. A publisher's takedown request stops the API serving that record's decoded fields ([Takedown](https://etchd.app/docs/sources#takedown)).

## Randomness

drand rounds of the quicknet and evmnet chains each minute and of the default chain every 5 minutes go into branch 7. The New York State lottery draws go into branch 27, read once a day from the state's open data.

| Credit | Sources | Branch | Step |
| --- | --- | --- | --- |
| drand, League of Entropy | drand, drand-default | 7 | R1 |
| New York State Gaming Commission, data.ny.gov | nylottery | 27 | R2 |

drand is S. `etchd records verify --signatures` checks the BLS12-381 signatures of quicknet and the default chain, and lists evmnet rounds, signed on BN254, as unchecked. Lottery draws are O.

drand is public infrastructure run by the League of Entropy, and its output is published for anyone to use. Draw results are facts, and data.ny.gov publishes them as open data for reuse.

## Supply Chain and Internet Roots

Signed checkpoints of the Sigstore transparency logs and the Go checksum database go into branch 8, the heads of PyPI, npm, the crates.io index and the CVE list into branch 13, CVE and KEV events into branch 14, the IANA root zone into branch 15 and Tor consensuses into branch 16.

| Credit | Sources | Branch | Step |
| --- | --- | --- | --- |
| Sigstore Rekor | rekor-v1, rekor-v2-log2025-1 | 8 | R1 |
| Go checksum database | go-sumdb | 8 | R1 |
| PyPI, npm, the crates.io index | index-heads | 13 | R1 |
| CVE Program, cvelistV5 | cve-org-delta | 13, 14 | R1 |
| CISA Known Exploited Vulnerabilities | cisa-kev | 14 | R1 |
| IANA root zone | iana-root-zone | 15 | R1 |
| The Tor Project, CollecTor | tor-collector, tor-certs | 16 | R1 |

Checkpoints are S, checked as Ed25519 or P-256 signed notes under the log keys the CLI build pins. The root zone is S through its DNSSEC signatures up to the pinned key-signing keys, and a Tor consensus is S when more than half of the nine directory authorities signed it. Index heads are C for git heads and O for serial numbers, and CVE events are C through the cvelistV5 commit in branch 13.

Log checkpoints, the root zone and Tor consensuses are published so that third parties copy and witness them. The CVE Program's terms grant a licence to copy and redistribute CVE records, and KEV is a US government work. We keep ids, counts, digests and timestamps. A Tor record holds no relay address.

## Science

New and updated papers from arXiv, bioRxiv, medRxiv, Crossref and Zenodo go into branch 12, one record per work, version and event, with its title and checksums.

| Credit | Sources | Branch | Step |
| --- | --- | --- | --- |
| arXiv metadata, CC0 | arxiv | 12 | R3 |
| openRxiv | biorxiv, medrxiv | 12 | R3 |
| Crossref metadata | crossref-updates, crossref-preprints | 12 | R3 |
| Crossref metadata | crossref-new | 12 | R4 |
| Zenodo metadata, CC0 | zenodo | 12 | R3 |

Scholarly records are O, and P for the file MD5 sums Zenodo serves.

We keep titles and identifiers and never an abstract or a paper. arXiv and Zenodo publish their metadata under CC0, and Crossref treats bibliographic metadata as facts. Some titles name people, CVs and theses on Zenodo among them, and those go through the takedown route. `crossref-new` is the largest source of all, about 7 MB a day, and it waits for step R4.

## Wikipedia

The state of 21 Wikipedia main pages goes into branch 17 every hour, and revisions, hidden revisions and protection changes of extended-confirmed English articles and of 40 contested topics tracked through Wikidata go into branch 18.

| Credit | Sources | Branch | Step |
| --- | --- | --- | --- |
| Wikipedia, the free encyclopedia (CC BY-SA 4.0); ids, hashes and titles only | wiki-main-<db> for 21 editions, wiki-rc-enwiki, wiki-ecp-sweep, wikidata-list-b | 17, 18 | R2 |

Both branches are P through the revision sha1 that Wikipedia serves.

We store no Wikipedia text, only ids, hashes, sizes, page titles and log parameters. The client sends a contact User-Agent, honours `maxlag` and stays serial per wiki, as the Wikimedia API etiquette asks. A hidden revision is recorded by its id, size and the sha1 it had before it was hidden, never its content. Some of the 40 titles are politically sensitive where they apply, and publishing them carries the same risk as Wikipedia's own pages.

## Archives

The tips of the four public OpenTimestamps calendars go into branch 19, Wayback captures of 22 URLs into branch 20, Common Crawl listings into branch 21 and Software Heritage visits of 15 origins into branch 22. Arweave joins the beacon as one more chain of branch 2.

| Credit | Sources | Branch | Step |
| --- | --- | --- | --- |
| The four public OpenTimestamps calendars | ots-tip-<cal>, ots-status-<cal> | 19 | R1 |
| Arweave gateways | arweave:7wIU in the beacon | 2 | R1 |
| Internet Archive Wayback Machine | wayback-<slug> for 22 URLs | 20 | R2 |
| Common Crawl | cc-collinfo, cc-listings, cc-news-current, cc-news-previous | 21 | R2 |
| Software Heritage | swh-<slug> for 15 origins | 22 | R2 |

OpenTimestamps tips are C, rechecked against their Bitcoin transaction by `etchd records verify --evidence`. Wayback captures are P through the CDX SHA-1, Common Crawl listings P through the S3 MD5 ETag, and Software Heritage visits C through the SWHID.

CDX rows, crawl listings and archive identifiers are factual metadata, and no page body or source file is read. Common Crawl's terms permit this use, and Software Heritage covers light API polling in its terms. No Arweave content is read, only gateway heads.

## Markets and Physical

Daily index closes go into branch 1 as kind 5 official closes in points. Interest rates and yields go into branch 9 as figures, since they print negative and a price is above 0. Earthquakes from USGS and EMSC go into branch 10 and WHO disease outbreak news into branch 11.

| Credit | Sources | Branch | Step |
| --- | --- | --- | --- |
| Cboe Global Markets, delayed quotes | cboe | 1 | R4 |
| Nasdaq | nasdaq | 1 | R4 |
| STOXX Ltd. | stoxx | 1 | R4 |
| U.S. Department of the Treasury | ustreasury | 9 | R2 |
| European Central Bank | ecb-hourly | 9 | R2 |
| Federal Reserve Bank of New York | nyfed | 9 | R2 |
| Bank of England | boe | 9 | R2 |
| Ministry of Finance, Japan | mof | 9 | R2 |
| U.S. Geological Survey | usgs, usgs-sig | 10 | R2 |
| European-Mediterranean Seismological Centre (EMSC) | emsc | 10 | R2 |
| World Health Organization | who-don, who-don-list | 11 | R2 |

Every branch of this family is O. No source signs anything.

Index levels are facts, but each index owner claims rights in its data, and Cboe's delayed-quote terms forbid redistribution without an agreement. Nasdaq answers only a browser User-Agent. We store one close per index per day as a number, never the provider's file, and the closes wait for step R4 and the owner's sign-off. Treasury and USGS data are US government works in the public domain, the ECB, the New York Fed, the Bank of England and Japan's MOF allow reuse with the source named, and SOFR's terms ask us to cite the New York Fed. We found no licence page for EMSC and credit it by name. WHO pages are CC BY-NC-SA 3.0 IGO, and we keep titles, ids, links and dates only.

### The Figure Fixing

A figure is one published number for one series and period, such as SOFR for one day. Publishers revise numbers, so a series can have several records for one period. The calendar keeps the first value it committed for each series and period, for the period plus a year, and sets flag bit 2 on every later record whose value differs from it. `etchd records verify` refuses a day with two records of one series and period that both have bit 2 clear and different values.

Every record with bit 2 clear for a period therefore carries one value. The fixing of a series for a period is its earliest captured record with bit 2 clear, and a settlement contract refuses any record with bit 2 set, as the gold escrow refuses kind 5 and flag bit 3 of a price. The choice of record then cannot steer the contract.

The SOFR fixing of yesterday

```bash
curl -s "https://etchd.app/v1/figures/fixing?series=nyfed:SOFR&date=$(date -u -d yesterday +%F)"
etchd records proof --car a.car --series nyfed:SOFR --date "$(date -u -d yesterday +%F)"
```

## Official Publications

The press feeds of four central banks go into branches 5 and 6. Official statistics go into branch 9 under the same fixing rule as the rates, release calendars into branch 23, sanctions lists and the Federal Register's signed PDF into branch 24, gazette and journal notices into branch 11, court decisions into branch 25 and Swiss federal votes into branch 26.

| Credit | Sources | Branch | Step |
| --- | --- | --- | --- |
| Federal Reserve, ECB, Bank of England, Bank of Japan | fed-press, ecb-press, boe-news, boj-whatsnew | 5, 6 | R3 |
| U.S. Bureau of Labor Statistics | bls-latest, bls-labstat-cpi, bls-ics | 9, 23 | R2 |
| Office for National Statistics, Open Government Licence v3.0 | ons-timeseries, ons-releases | 9, 23 | R2 |
| Eurostat | estat-figures, estat-updates | 9, 23 | R2 |
| European Central Bank | ecb-policy | 9 | R2 |
| Statistics Canada, Statistics Canada Open Licence | statcan-cubes | 23 | R2 |
| U.S. Department of the Treasury, Office of Foreign Assets Control | ofac-sdn, ofac-delta | 24 | R2 |
| United Nations Security Council | un-consolidated | 24 | R2 |
| European Commission, Financial Sanctions Database | eu-fsf | 24 | R2 |
| Foreign, Commonwealth and Development Office, Open Government Licence v3.0 | uk-fcdo | 24 | R2 |
| U.S. Government Publishing Office, govinfo | us-fr-pdf | 24 | R2 |
| The Gazette, Open Government Licence v3.0 | uk-gazette, uk-gazette-day | 11 | R2 |
| Publications Office of the European Union | eu-oj | 11 | R2 |
| Office of the Federal Register | us-fr | 11 | R2 |
| Free Law Project, CourtListener | courtlistener | 25 | R2 |
| European Court of Human Rights, HUDOC | echr-hudoc | 25 | R2 |
| The National Archives, Open Justice Licence | tna-fcl, built and switched off | 25 | off |
| Swiss Federal Statistical Office (BFS), opendata.swiss | ch-bfs | 26, 24 | R2 |

The Federal Register PDF is S through its CMS signature up to a pinned root, OFAC's lists are P through the `Digest` header, and the other files of branch 24 are O with a file hash anyone rechecks against the published file. Court decisions are P for TNA's `uk:hash` and O otherwise. Statistics, release events, notices and votes are O.

US federal works are in the public domain. ONS, the FCDO and The Gazette publish under the Open Government Licence v3.0, EU publications under the Commission's reuse decision (CC BY 4.0), and the others allow reuse with the source named. Gazette personal notices are kept out by an allow-list, and the parser never reads their names. ECHR case titles name applicants, as the court itself publishes them. Sanctions records carry hashes, dates and counts, and no names. TNA Find Case Law needs a free transactional licence for computational use, so `tna-fcl` is built and tested and stays switched off at every step until TNA grants it.

## AI Provenance

Hugging Face org listings and the revisions of 40 tracked model repos go into branch 28. Model pages, deprecation tables, changelogs and SDK model lists of OpenAI, Anthropic, Google, Mistral and Meta, plus OpenRouter and models.dev, go into branch 29.

| Credit | Sources | Branch | Step |
| --- | --- | --- | --- |
| Hugging Face Hub API; repo ids, commits, sizes and hashes only | hf-org-<org> for 13 orgs, hf-repo | 28 | R2 |
| OpenAI API docs | openai-models, openai-deprecations, openai-changelog | 29 | R3 |
| Claude Platform docs | anthropic-models, anthropic-deprecations, anthropic-release-notes | 29 | R3 |
| Gemini API docs | gemini-models, gemini-deprecations, gemini-changelog | 29 | R3 |
| Mistral AI docs | mistral-models, mistral-changelog | 29 | R3 |
| Meta developer docs | llama-com-models | 29 | R3 |
| The SDK repositories on GitHub | openai-sdk, anthropic-sdk, meta-llama-models | 29 | R3 |
| OpenRouter | openrouter | 29 | R3 |
| models.dev (MIT) | models-dev | 29 | R3 |
| Google Cloud release notes | vertex-release-notes | 29 | R3 |

Model weights are C through the git commit and the LFS hashes of each file, which `etchd records verify --evidence` rechecks for ungated repos. Catalog records are O, and C for SDK files read at a commit.

Repo ids, commits, file sizes and hashes are facts the public API serves without a key. We fetch no weights and no model cards, and a gated repo is read through its public revision endpoint only, so no licence is accepted or bypassed. Provider docs are copyrighted pages. We keep model ids, dates, statuses and context sizes, changelog titles capped at 200 code points, and no prose at all from Anthropic and Mistral. The OpenAI and Anthropic SDKs are Apache-2.0, and models.dev is MIT.

## Activation

The parsers of every family ship in the release the record starts with, and each family enters later through a registry step written to KV with `deploy.ts --kv-only --record-sources Rn --reseed-registry Rn`. The calendar commits the new registry snapshot before its first capture, so every record names the snapshot it was captured under. A source whose entry carries a `disabled` reason is never scheduled at any step.

| Step | Adds |
| --- | --- |
| D | the start of the record, branches 1 to 6 |
| R1 | drand, signed checkpoints, index heads, CVE and KEV, the root zone, Tor, the OpenTimestamps calendars, and Arweave in the beacon |
| R2 | figures, quakes, notices, Wikipedia, Wayback, Common Crawl, Software Heritage, release calendars, official files, court decisions, Swiss votes, the New York lottery and Hugging Face |
| R3 | arXiv, openRxiv, the Crossref updates and preprints, Zenodo, the four central bank feeds and the model catalog |
| R4 | crossref-new and the index closes of Cboe, Nasdaq and STOXX |

## Takedown

A committed record cannot leave a pack without breaking its root. When a publisher asks, the operator calls `POST /v1/admin/records/takedown`, and the API then answers 410 for that record's decoded fields and the explorer hides it. The bytes, the packs, the proofs and the published bundles stay, since mirrors rebuild roots from them. Branches 5, 6, 11, 12, 17, 18, 25 and 29 carry publisher text or names of people, and the route works on every branch.
