GenAI Conventions: How to Pin a Version With No Release
The GenAI conventions have no release you can name. So which version does your telemetry follow, and how would anyone reading it know?

IN 30 SECONDS
Pinning is locking your setup to one exact version. For the GenAI conventions, with no release, that means core v1.44.0 plus one full commit of semantic-conventions-genai, written on every signal, with pure renames handled in the Collector.
KEY TAKEAWAYS · 3
- Pin the core conventions at v1.44.0 and the GenAI repository at a full commit SHA, and write both on every resource.
- Handle pure renames in the Collector. A change to a metric’s type or dimensions, like #374, needs instrumentation work.
- Move the pin on purpose: read the breaking fragments, run old and new names side by side, then change the SHA.
On this page
Sort every field before you pin
IN SHORT Pin core at v1.44.0 and the GenAI repository at a full commit SHA, stamp both on every signal, and move the pin only on purpose.
WORDS TO KNOW
- Pin
- Locking your setup to one exact version, here a full git commit SHA: the unique id of one saved snapshot of the code.
- Resource
- In OpenTelemetry, the attributes that describe what sends the telemetry, such as service.name. They travel with every span, metric and log.
- Collector
- The OpenTelemetry Collector, a service that receives telemetry on its way to your backend and can rename or reshape it.
- Dimension
- A label you can group a metric’s numbers by, such as text, image or audio.
Pinning a spec with no releases sounds odd until you remember git. To Pin Locking your setup to one exact version, here a full git commit SHA: the unique id of one saved snapshot of the code. See the glossary to a commit SHA is to pick an exact snapshot: a release without the label.
Before pinning, sort every field you emit into one of four buckets. Never make up a gen_ai.* key for data the spec doesn’t cover.
Coming up next: So how do you pin a spec that has no release?
Six steps to pin, and to move the pin
IN SHORT Two pins written on every signal, and one Collector rule per pure rename. This is the procedure I’d put in the repo.
THE PIN, STEP BY STEP
Step 1. Pin core. Pin the core conventions at v1.44.0, the version the GenAI manifest depends on. It holds the stable error.type and server.* attributes.
- Pin core Pin the core conventions at v1.44.0, the version the GenAI manifest depends on. It holds the stable error.type and server.* attributes.
- Pin the GenAI repo Pin semantic-conventions-genai to a full commit SHA. There are no tags, and the schema URL is a -dev placeholder.
- Stamp the resource Write both pins on the resource, for example com.acme.semconv.core and com.acme.semconv.genai_commit.
- Pin the library Pin the instrumentation library too, and read what its opt-in settings actually do.
- Rename in the Collector Each pure rename gets one rule, versioned with the pin. Type or dimension changes go back to the instrumentation.
- Re-pin on purpose Read the new breaking changelog.d fragments, run old and new names side by side for a while, then move the SHA.
For step 4, core v1.41.0 and its v1.41.1 patch had a transition plan. Libraries that already sent old GenAI names should keep them by default, and switch only when gen_ai_latest_experimental was among the values of OTEL_SEMCONV_STABILITY_OPT_IN.
WATCH OUT
I didn’t find that text in the new repository at the commit I read, so check what your library documents instead of assuming.
Step 5 is the one I care about most. Take a fleet the size of the 46 agents I ran at Integra: a rename in agent code means many separate changes. In the Collector The OpenTelemetry Collector, a service that receives telemetry on its way to your backend and can rename or reshape it. See the glossary, it’s one reviewed change, and dashboards keep their queries.
IN PLAIN WORDS
That only works for a true rename, like #440’s cache field. #374 swapped one histogram for counters and per-operation histograms, with a new modality Dimension A label you can group a metric’s numbers by, such as text, image or audio. See the glossary. No Collector rule can invent a dimension the instrumentation never sent.
Changes like that need new instrumentation, and a check that the totals still match. The pin on the Resource In OpenTelemetry, the attributes that describe what sends the telemetry, such as service.name. They travel with every span, metric and log. See the glossary tells you which spans came before.
“SHOULD NOT be used in production.”
That’s the maturity definition for Development status, whose configuration might break often. If you use it anyway, and most of us will, this procedure is the price of doing it with care.
ITEM GET
Pin, stamp, rename once
Sources, read on 7 October 2026: semantic-conventions-genai, manifest, core v1.41.0 README, spans, maturity levels.
FAQ
OpenTelemetry says a Development component’s configuration might break often, and that it SHOULD NOT be used in production. Teams use these names anyway. As far as I know, nothing else gives agent telemetry a shared vocabulary.
STAGE CLEAR
What you now know
- Which four kinds of fields there are, and where each one goes before you pin.
- Why a Collector rule can fix a rename but not a new dimension.
Check yourself
Tap or click a question to see the answer.
Your cost report still reads gen_ai.usage.cache_creation.input_tokens, which #440 renamed to gen_ai.usage.cache_write.input_tokens. Is a Collector rule enough?
Yes, for this pure rename: one rule, versioned with the pin, maps the new key back. #374 was different, because it changed a metric’s type and dimensions.
You finished every stage published so far in this series. Back to the series map
Web3 x AI engineer, former CTO of Integra. Named author (1 of 5) of ERC-3643, first author of ERC-6960, co-author of ERC-7410, and co-author of ERC-8203, which is still a draft.
Have a project to ship or a role to fill?
Discuss your project or roleMy work at the web3 x AI intersectionOpen-source tools I build
Follow the engineering notes
Get new articles on production AI and smart contracts by email.