Why does the OBI Collector receiver keep its own module and version line, and why does a plain go get update not discover the receiver at an RC tag?
Two independent barriers. OBI split its Collector receiver into a nested Go module - the collector/ subdirectory carries its own go.mod, and the import path stays the same - and that nested module is released on its own v0 line, tagged collector/v0.15.2, while the core module tags v0.15.2 and v1.0.0-rc.2 without a prefix. A plain go get -u never reaches the RC for two separate reasons: Go's latest and upgrade queries prefer release versions over pre-releases, and v1.0.0-rc.2 is a pre-release; and the receiver module has no tag on the v1 line at all - collector/v1.0.0-rc.2 does not exist - so on the receiver side the highest selectable version is on the v0 line. Testing the receiver against the RC requires selecting both module versions explicitly in one update.
The split itself is the fix for the v0.15.x release saga: when a commit carried both a core tag and a Collector tag, git describe substituted the Collector version into core release artifact paths, and the module split (#3748) plus the pipeline fix (#3770) is what let v0.15.2 ship the correction.
The mechanism
-
The receiver is a nested module on its own release line. As of
v0.15.2, thecollector/subdirectory contains ago.moddeclaring the receiver modulego.opentelemetry.io/obi/collector; the receiver packages keep their existing import path, and the nested module requires the core atv0.15.2. Go's rule for modules in subdirectories: every version tag is prefixed with the module subdirectory - herecollector/v0.15.2- while a root module tags plainv0.15.2andv1.0.0-rc.2. Because Go does not require a major version suffix below v2, the receiver can keep an independent v0 line while the core walks the v1 RCs; that is the "own module and version line" from the release notes. -
Why the split happened.
v0.15.0was blocked by BPF verifier failures;v0.15.1shipped the correction, but its artifact build failed because version discovery rangit describeon a commit that carried both a core tag and a Collector tag, and substituted the Collector version into core artifact paths. The pipeline fix pins artifact paths (binary archives, generated sources, SBOMs, checksums) to the selected core tag, andv0.15.2"supersedes the unpublished v0.15.0 and v0.15.1" by carrying the correction and the module split together. -
Why
go get -ucannot discover the RC. Go's version querieslatest,upgrade, andpatchprefer release versions over pre-release versions: ifv1.2.2andv1.2.3-preare both available,latestselectsv1.2.2even though the pre-release sorts higher. Two consequences for OBI. On the core module,v1.0.0-rc.2is a pre-release, so a plain update resolves to the highest non-pre-release - for the core that isv0.15.2(a v0 release is still a "release" in query terms; it simply carries no compatibility guarantee). On the receiver module, the v1 line has no tag:collector/v0.15.2is its only tag, and there is nocollector/v1.0.0-rc.2to update toward. The RC2 release notes state this directly: "RC tags alone do not make the split receiver discoverable through a plaingo get -u." -
The supported pairing is an explicit two-module selection. One
go getnames both module versions: the receiver module atv0.15.2and the core module atv1.0.0-rc.2. Both then appear as separaterequireentries ingo.mod, and the receiver's minimum requirement on the core is satisfied by the explicitly selected RC version.
Verification and debugging path
- Read the two tag lines directly.
git ls-remote --tagson the OBI repository shows the core line (v0.15.2,v1.0.0-rc.2) and the subdirectory-prefixed receiver line (collector/v0.15.2); the absence of acollector/v1.0.0-rc.2entry is the concrete fact no update query can discover. - Confirm what the query selects.
go list -m -versionslists tagged versions including RC tags, butgo get -uresolves to the highest non-pre-release - so a plain upgrade leaves the core on the v0 line and the receiver atcollector/v0.15.2. - Pin the RC pairing explicitly. The pairing from the RC2 notes: one
go getselecting the receiver module atv0.15.2and the core module atv1.0.0-rc.2. After the update,go.modcarries bothrequireentries andgo.sumhas entries for both module lines.
The limitation
- The published telemetry schema in RC2 is still
0.15.2; the1.0.0schema cut happens at the final release, so RC2 output is not the final v1 contract. - Telemetry names and labels changed between RCs, so existing dashboards and queries need remapping on upgrade.
- The receiver's
v0.15.2line is a v0 line: no compatibility guarantee, and it can move independently of - or lag - the core. - The release preference of
go get -uis a property of Go's module queries in general, not an OBI quirk: no plain update moves any module to a pre-release tag. - This answer describes the
v1.0.0-rc.2candidate; the finalv1.0.0release may add a receiver tag on the v1 line and close the asymmetry.
References
- OBI release v1.0.0-rc.2 - release-impacting changes: the receiver as the separate module
go.opentelemetry.io/obi/collector, independent v0 release line, nocollector/v1.0.0-rc.2tag, the explicit two-versiongo getpairing, Config v2 as the proposed v1 config contract with Config v1 frozen, and the telemetry schema staying at0.15.2until the final release. - OBI release v0.15.2 - why
v0.15.2supersedes the unpublished v0.15.0 and v0.15.1: BPF verifier failures that blocked v0.15.0, thegit describeCollector-tag substitution into artifact paths (fixed by #3770), the verifier loop widening fix (#3759), and the receiver split (#3748). - Go Modules Reference - "Version queries": release versions preferred over pre-release versions for
latest,upgrade, andpatch; "Module directories within a repository": subdirectory modules use subdirectory-prefixed tags; "Mapping versions to commits": root modules use plain version tags. - OBI v1.0.0 tracking issue - the RC-to-final path and the schema cut.
Community discussion today
The monitored window for this run is a 7-day archive window across the two opt-in archive sources, returning five messages, all on one thread: the OBI v0.15.x to v1.0.0-rc.2 release sequence. The visible-browser-only sources - the eunomia-bpf and sched-ext Discord servers, the bpf mailing list, and r/eBPF - could not be reviewed this run because no visible-browser session was available, so they are marked not-covered, not quiet.
The OBI v0.15.x release saga. The thread opened with v0.15.0 blocked by BPF verifier failures, the resolution already on main and a v0.15.1 promised; a follow-up reported that v0.15.1's artifact build had failed; and finally v0.15.2 was announced as containing the separate module and the fixes needed, with v0.15.2 confirmed working. The practical step for operators on the v0 line: use collector/v0.15.2 for the receiver. The artifact-path correction is a pipeline-side change, not something users must work around.
OBI v1.0.0-rc.2 community testing. The window closes with the announcement pushing v1.0.0-rc.2 for community testing: Go Auto SDK span capture, expanded .NET instrumentation and runtime metrics, AWS Route53 name resolution, and fixes for BPF verification, trace context propagation, and metrics. Upgraders from RC1 face the Config v2 migration and the telemetry compatibility changes: telemetry names and labels changed, and the Collector receiver now has its own module and version line, which is what this page answers. Unresolved boundary: the schema is still 0.15.2, and the receiver has no v1-line tag.
A new contributor's instrumentation proposal. A new contributor requested review of a proposed sentence-transformers instrumentation in the Python GenAI instrumentation repository (public issue #910 and PR #911 in the opentelemetry-python-genai project). The request is in the review queue; there is no community answer to summarize yet.
Continue exploring
Back to index
eBPF Q&A
Daily, source-grounded answers to recurring questions about eBPF, Linux observability, profiling, runtime extension, and security.
Previous
Why can an OpenTelemetry OBI metric stay in the store up to twice as long as its TTL, and does the Prometheus exporter drop the same label set on every scrape?
The answer splits on the exporter. OBI caps per-label-set metric cardinality in both its OpenTelemetry and Prometheus exporters with one shared TTL, but the two exporters delete at two different moments. The OTEL
Next
Why does a local embeddings model with no server and no token count declare expected gaps in its GenAI span attributes, and how do the gaps stay spec-conformant?
The GenAI semantic conventions scope every span attribute to the availability of its value, not to the existence of the span.
- Last updated
- Oct 22, 2026
- First published
- Oct 22, 2026
- Contributors
- Yunwei 123
Was this page helpful?