Contributing to the catalog
Add a provider Teire can read, or a change it missed, through a pull request. CI checks it against the same schema Teire uses, and a merged record is live on the next deploy.
Most of Teire's catalog is generated: diffs of package versions, advisories, and the pages of the providers your code talks to, read with their quotes checked. Two kinds of record live in the repository instead, under catalog/, so anyone can add or correct them, a provider's own team included.
A provider Teire can read
catalog/providers/<slug>.json describes a provider: its name, its official domains (quotes count only from those), its SDKs, how a repository shows it uses it, and the pages Teire reads. A deprecation page that publishes one table row per retired model or endpoint needs no code: the generic table reader takes its layout from the record.
{
"kind": "deprecations",
"url": "https://developers.openai.com/api/docs/deprecations.md",
"adapter": "deprecation-table",
"table": { "sectionLevel": 3 }
}| Key | What it says |
|---|---|
sectionLevel | The heading level that starts each dated announcement (### is 3); 0 when the page is one table |
subjectColumn | The header of what goes away (a pattern; default: a "model", "snapshot" or "system" column) |
dateColumn | The header of when (default: "shutdown", "retirement" or "removal") |
replacementColumn | The header of what replaces it (default: "replacement" or "substitute") |
skipSection | Section headings to leave out |
A change Teire missed
catalog/changes/<subject>/<id>.json is one change record in Teire's contract (catalog/schema/change-v2.schema.json): <subject> is the provider's slug or the package's name, and the id starts with contrib-, so it can never be one of Teire's generated records. A contributed record says it was contributed, who added it and in which pull request:
{
"method": "catalog",
"contributor": {
"login": "your-github-login",
"pullRequest": "https://github.com/teire-dev/teire/pull/123"
},
"confidence": { "overall": 1 }
}Every source keeps its quote and the page it came from, as Teire's own records do, and the record is public.
What CI checks
pnpm --filter @teire/engine catalog:validate runs on every pull request:
- each provider and change file against the schema;
- a provider file named after its slug;
- a contributed change marked
"method": "catalog", public, in its subject's folder, with acontrib-id no other record uses; - for each record the pull request adds or changes: the contributor is the pull request's author and names this pull request, and every source passes the gate Teire's own records pass: on the provider's own domains, fetched by CI, with its quote really on the page;
catalog/contributed.json, the bundle the worker reads, up to date (catalog:validate --writerebuilds it).
A record that fails any of these fails the pull request. Once merged, the worker merges every contributed record when it next starts, and its change page shows added by @login, linked to the pull request when the record names it.
Security and trust
Your code runs only in an isolated sandbox with the network off for checks. No secret enters it. Only Nemotron on Token Factory reads code, and nothing reaches your default branch without your merge.
CLI
teire scan runs Teire's own engine on a folder or any public GitHub repository and prints every change that reaches your code, with its lines. teire check turns that into a CI gate.