TeireDocs
ChangesScanDashboardTry Teire
GuideEcosystems & APIsNemotron on Token FactoryBuild
ChangesScanDashboard
Try Teire
ArchitectureHow Teire updates dependency filesVerificationToken Factory SandboxesSecurity and trustContributing to the catalog

Tools

CLIMCP serverAgent Skill
Build

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.

openai.json
your-change.json

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.

catalog/providers/openai.json (the source)
{
  "kind": "deprecations",
  "url": "https://developers.openai.com/api/docs/deprecations.md",
  "adapter": "deprecation-table",
  "table": { "sectionLevel": 3 }
}
KeyWhat it says
sectionLevelThe heading level that starts each dated announcement (### is 3); 0 when the page is one table
subjectColumnThe header of what goes away (a pattern; default: a "model", "snapshot" or "system" column)
dateColumnThe header of when (default: "shutdown", "retirement" or "removal")
replacementColumnThe header of what replaces it (default: "replacement" or "substitute")
skipSectionSection 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:

provenance
{
  "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 a contrib- 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 --write rebuilds 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.

On this page

A provider Teire can readA change Teire missedWhat CI checks