Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions .agents/skills/upgrade-maintenance/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,53 @@ Two categories of service are present, with different upgrade patterns:
minor/patch bumps expected. A major bump could change `mcp.AddTool`
signatures, annotation fields, or content types.

### Step 1.2.1 — Update the OTel semconv import version

`go.opentelemetry.io/otel/semconv` is **not** a separate Go module. The version
in the import path (e.g. `semconv/v1.40.0`) is an OTel semantic-convention spec
version that is a subdirectory **inside** the `go.opentelemetry.io/otel` module.

**Why this matters**: instrumentation packages (e.g. `otelhttp`) always import
the semconv sub-package they were written against. When that version differs from
the one imported in our own code, the OTel SDK emits a startup error:

```
conflicting Schema URL: https://opentelemetry.io/schemas/1.41.0 and
https://opentelemetry.io/schemas/1.40.0
```

**Rule**: after upgrading `go.opentelemetry.io/otel`, always update our semconv
import paths to the **highest-numbered sub-package present** inside the new otel
version. That is deterministically the latest spec version shipped with the
module, and it is the version the upgraded instrumentation packages will register.

Find it with:

```bash
OTEL_VER=$(grep 'go.opentelemetry.io/otel v' go.mod | grep -v '//' | awk '{print $2}' | head -1)
ls $(go env GOMODCACHE)/go.opentelemetry.io/otel@${OTEL_VER}/semconv/ \
| grep '^v[0-9]' | sort -V | tail -1
# e.g. "v1.41.0"
```

Then update every `semconv/v*` import in the codebase to use that version:

```bash
# Find all semconv imports.
grep -rn 'semconv/v' internal/ cmd/ --include='*.go'
```

Update each import path in-place (e.g. `semconv/v1.40.0` → `semconv/v1.41.0`).
The attributes and helper functions are additive across minor spec versions, so
the rename is always safe for a minor/patch upgrade.

After updating, verify the build and confirm the schema-URL conflict is gone:

```bash
make build && ./scripts/test_server.sh 2>&1 | grep -i 'conflicting\|schema'
# Should produce no output.
```

### Step 1.3 — Verify the build compiles

```bash
Expand Down
2 changes: 1 addition & 1 deletion cmd/lfx-mcp-server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ import (
slogotel "github.com/remychantenay/slog-otel"
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
"go.opentelemetry.io/otel"
semconv "go.opentelemetry.io/otel/semconv/v1.40.0"
semconv "go.opentelemetry.io/otel/semconv/v1.41.0"
"go.opentelemetry.io/otel/trace"
)

Expand Down
62 changes: 31 additions & 31 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -2,43 +2,43 @@
// SPDX-License-Identifier: MIT
module github.com/linuxfoundation/lfx-mcp

go 1.26.3
go 1.26.4

require (
github.com/knadh/koanf/providers/basicflag v1.1.0
github.com/knadh/koanf/providers/env/v2 v2.0.0
github.com/knadh/koanf/v2 v2.3.4
github.com/knadh/koanf/v2 v2.3.5
github.com/lestrrat-go/jwx/v2 v2.1.6
github.com/linuxfoundation/lfx-v2-committee-service v0.2.35
github.com/linuxfoundation/lfx-v2-mailing-list-service v0.4.13
github.com/linuxfoundation/lfx-v2-member-service v0.8.0
github.com/linuxfoundation/lfx-v2-project-service v0.6.11
github.com/linuxfoundation/lfx-v2-query-service v0.4.21
github.com/linuxfoundation/lfx-v2-committee-service v0.4.0
github.com/linuxfoundation/lfx-v2-mailing-list-service v0.5.0
github.com/linuxfoundation/lfx-v2-member-service v0.9.0
github.com/linuxfoundation/lfx-v2-project-service v0.8.0
github.com/linuxfoundation/lfx-v2-query-service v0.4.22
github.com/modelcontextprotocol/go-sdk v1.6.1
github.com/patrickmn/go-cache v2.1.0+incompatible
github.com/remychantenay/slog-otel v1.3.5
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0
go.opentelemetry.io/contrib/propagators/jaeger v1.43.0
go.opentelemetry.io/otel v1.43.0
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.19.0
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.19.0
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.43.0
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.43.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0
go.opentelemetry.io/otel/log v0.19.0
go.opentelemetry.io/otel/sdk v1.43.0
go.opentelemetry.io/otel/sdk/log v0.19.0
go.opentelemetry.io/otel/sdk/metric v1.43.0
go.opentelemetry.io/otel/trace v1.43.0
goa.design/goa/v3 v3.27.0
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0
go.opentelemetry.io/contrib/propagators/jaeger v1.44.0
go.opentelemetry.io/otel v1.44.0
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.20.0
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.20.0
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.44.0
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.44.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.44.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.44.0
go.opentelemetry.io/otel/log v0.20.0
go.opentelemetry.io/otel/sdk v1.44.0
go.opentelemetry.io/otel/sdk/log v0.20.0
go.opentelemetry.io/otel/sdk/metric v1.44.0
go.opentelemetry.io/otel/trace v1.44.0
goa.design/goa/v3 v3.28.0
)

require (
github.com/cenkalti/backoff/v5 v5.0.3 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/felixge/httpsnoop v1.1.0 // indirect
github.com/go-chi/chi/v5 v5.3.0 // indirect
github.com/go-logr/logr v1.4.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
Expand All @@ -60,16 +60,16 @@ require (
github.com/segmentio/encoding v0.5.4 // indirect
github.com/yosida95/uritemplate/v3 v3.0.2 // indirect
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 // indirect
go.opentelemetry.io/otel/metric v1.43.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.44.0 // indirect
go.opentelemetry.io/otel/metric v1.44.0 // indirect
go.opentelemetry.io/proto/otlp v1.10.0 // indirect
golang.org/x/crypto v0.52.0 // indirect
golang.org/x/net v0.55.0 // indirect
golang.org/x/crypto v0.53.0 // indirect
golang.org/x/net v0.56.0 // indirect
golang.org/x/oauth2 v0.36.0 // indirect
golang.org/x/sys v0.45.0 // indirect
golang.org/x/text v0.37.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa // indirect
golang.org/x/sys v0.46.0 // indirect
golang.org/x/text v0.38.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20260610212136-7ab31c22f7ad // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20260610212136-7ab31c22f7ad // indirect
google.golang.org/grpc v1.81.1 // indirect
google.golang.org/protobuf v1.36.11 // indirect
)
Loading
Loading