Skip to content

Usage is observed through each provider's official telemetry into one provider-neutral record, and reported, estimated and billed amounts are never merged

Usage is observed through each provider's official telemetry into one provider-neutral record, and reported, estimated and billed amounts are never merged

majordomus://adr/adr-0213proposed providers-economicschatgpt-project

it references

referenced by

Nothing in the layer names it. Backlinks are derived, so an empty list is an answer rather than an omission.

213. Usage is observed through each provider's official telemetry into one provider-neutral record, and reported, estimated and billed amounts are never merged

Context

The owner ordered automatic token and model tracking (10-12) and then a generic fabric rather than three provider subsystems (10-13). docs/ECONOMICS.md already classes every number, and economics::usage already normalises Anthropic and OpenAI usage for benchmark runs. Telemetry events are runtime volume.

Decision

Official seams only (Claude Code OpenTelemetry, Codex app-server notifications, Gemini CLI OpenTelemetry), declared per provider in share/providers.yaml. One usage record, distinct from capability executions, and one normalisation. Events are runtime state, never .ai/repo; .ai holds policy, schema and budgets. Reported tokens, estimates and billed amounts are distinct fields; a missing value is absent, never zero; cumulative snapshots are never summed; provider metadata is observed evidence, never canonical state; no transcript or body is read or kept.

Alternatives rejected

  • Transcript parsing
  • A MITM proxy or client patch
  • Per-provider telemetry subsystems
  • One 'cost' field
  • Storing events under .ai/repo

Consequences

execution-telemetry loses its dependency on runtime-adapters; the server gains a loopback OTLP/HTTP-JSON receiver with no new dependency; subscription users see estimates labelled as such.

Sources

Promoted on 2026-10-18 from the owner's ChatGPT project (workspace chatgpt-majordomus, issue I3100). The owner has not accepted it; it is proposed for the owner's decision.

  • chatgpt-majordomus:c174#18
  • chatgpt-majordomus:c234#0
  • chatgpt-majordomus:c236#4
  • chatgpt-majordomus:c236#7
  • chatgpt-majordomus:c253#2
  • chatgpt-majordomus:c253#3
  • chatgpt-majordomus:c253#4

Where this comes from

canonical file
.ai/repo/adrs/0213-usage-is-observed-through-each-provider-s-official-telemetry-int.md
identity
adr-0213
also served as
MCP resource majordomus://adr/adr-0213 · majordomus entity show adr/adr-0213 · GET /api/v1/entity?uri=majordomus://adr/adr-0213
in the Cockpit
/cockpit/objects/adr/adr-0213

This page is generated from the file above by scripts/generate-site-data; editing the page changes nothing, editing the file changes every surface. The relations above are edges of docs/generated/graph.json, which the executable writes from the same index.

Searches the titles and descriptions of every page this site publishes.