Skip to content

Add OpenTelemetry logging backend - #141

Merged
alexander-yevsyukov merged 10 commits into
update-configfrom
otel
Jun 28, 2026
Merged

Add OpenTelemetry logging backend#141
alexander-yevsyukov merged 10 commits into
update-configfrom
otel

Conversation

@alexander-yevsyukov

Copy link
Copy Markdown
Contributor

What

Adds an OpenTelemetry logger backend for Spine Logging, mapping Spine LogData to
io.opentelemetry.kotlin log records — plus a log-based events surface and an optional
OTLP bootstrap module.

Modules

  • backends/otel-backend (kmp-module, JVM target; mapping in commonMain)
    • OtelLoggerBackend: LogDataLogger.emit(...) — body without the [CONTEXT]
      suffix, level → SeverityNumber + severity text, epoch-nanos timestamp,
      LOG_CAUSE → exception, log site → code.*, scope/log-site metadata → spine.*
      attributes (repeated keys → lists), Tagsspine.tag.*, and active-span
      correlation via the implicit context.
    • OtelBackendSettings injects the OpenTelemetry instance (no-op until set);
      OtelBackendFactory is registered through @AutoService / KSP.
    • logEvent(...) / EVENT_NAME emit log-based events (emit(eventName = …)).
  • backends/otel-backend-bootstrap (jvm-module): OtelLogging.installOtlpHttp() /
    fromEnvironment() build a native OTLP/HTTP SDK, install it through
    OtelBackendSettings, and return an AutoCloseable that uninstalls and shuts the SDK
    down.

Also adds the OpenTelemetryKotlin dependency object (pinned 0.4.0) and registers the
two modules.

Why

Routes Spine logs into an OpenTelemetry pipeline as structured, trace-correlated records,
and turns named log statements into OpenTelemetry events. Aligned with OTEP 4430 — events
go through the Logs API, never Span.AddEvent.

Verification

  • :otel-backend:jvmTest16/16; :otel-backend-bootstrap test — 2/2 (Kotest / JUnit 5).
  • ./gradlew build green (whole project — compile + detekt + kover + license); module-level
    Dokka clean (no unresolved KDoc links).
  • Reviewed by kotlin-engineer (APPROVE), spine-code-review, dependency-audit, and
    review-docs (APPROVE WITH CHANGES — all nits applied). Version gate satisfied
    (2.0.0-SNAPSHOT.418 > .417).

Notes for reviewers

  • The opentelemetry-kotlin logs API is @ExperimentalApi at 0.4.0; the backend
    depends only on its :api artifact, with the SDK confined to the bootstrap module.
  • KMP / non-JVM targets are deferred — Spine has no non-JVM backend registration yet, and
    upstream iOS/native OTLP export is not available. The mapping lives in commonMain to
    ease that future lift.
  • The domain-event → observability-event bridge is documented as a consumer-side
    recipe in the module README, not coded here — it needs spine-server / proto types.
  • The branch also carries pre-existing infra commits (a config submodule sync, the
    2.0.0-SNAPSHOT.418 version bump, and dependency-report regeneration).
  • Pre-existing (not from this change): the root dokkaGenerate aggregation hits a
    Dokka 2.2.0 kotlin-stdlib version conflict in Dokka's own generator classpath.
    Module-level dokkaGenerate for the two new modules passes cleanly; ./gradlew build
    does not run Dokka.

Implementation plan: .agents/tasks/otel-backend-implementation.md.

🤖 Generated with Claude Code

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 04b6db329e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread settings.gradle.kts

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new OpenTelemetry backend for Spine Logging (plus an optional OTLP/HTTP bootstrap module) and updates surrounding build/infra tooling (Gradle wrapper, build cache, dependency/version catalog, dependency report generation, CI workflows, and agent/config sync) to support the new modules and the repo’s current conventions.

Changes:

  • Introduce backends/otel-backend (Spine LogDataio.opentelemetry.kotlin log records, including log-based events via EVENT_NAME / logEvent).
  • Add backends/otel-backend-bootstrap to build/install a native Kotlin OpenTelemetry OTLP/HTTP pipeline and wire it into OtelBackendSettings.
  • Refresh build/infra: Gradle wrapper + properties, dependency/version updates, dependency-report generation improvements, and CI workflow updates.

Reviewed changes

Copilot reviewed 208 out of 221 changed files in this pull request and generated no comments.

Show a summary per file
File Description
version.gradle.kts Bump published version to 2.0.0-SNAPSHOT.418.
settings.gradle.kts Register new otel-backend and otel-backend-bootstrap modules.
gradlew.bat Gradle wrapper script update (generated file).
gradlew Gradle wrapper script update (generated file).
gradle/wrapper/gradle-wrapper.properties Gradle wrapper distribution update + retry settings.
gradle.properties Enable Gradle build cache + expand daemon JVM args.
docs/project.md Add a project template doc.
CLAUDE.md Update Claude-specific agent notes / pointers.
buildSrc/src/test/kotlin/io/spine/gradle/VersionGradleFileSpec.kt Add tests for parsing version.gradle.kts.
buildSrc/src/test/kotlin/io/spine/gradle/VersionComparatorSpec.kt Add tests for semantic-ish version comparison.
buildSrc/src/test/kotlin/io/spine/gradle/report/license/DependencyReportOutputTest.kt Add tests for dependency report output locations.
buildSrc/src/test/kotlin/io/spine/gradle/publish/MavenMetadataSpec.kt Add Jackson XML round-trip test for Maven metadata parsing.
buildSrc/src/main/kotlin/write-manifest.gradle.kts Improve task metadata; add Spine task group usage.
buildSrc/src/main/kotlin/uber-jar-module.gradle.kts Publishing/task setup tweaks; zip64 config update.
buildSrc/src/main/kotlin/Strings.kt Minor wording tweak in KDoc.
buildSrc/src/main/kotlin/LicenseSettings.kt License header formatting + minor wording tweak.
buildSrc/src/main/kotlin/kmp-module.gradle.kts Copyright year update.
buildSrc/src/main/kotlin/jvm-module.gradle.kts Copyright year update + task group/description.
buildSrc/src/main/kotlin/jacoco-kotlin-jvm.gradle.kts Mark legacy JaCoCo plugin script as deprecated + warn.
buildSrc/src/main/kotlin/jacoco-kmm-jvm.gradle.kts Mark legacy JaCoCo plugin script as deprecated + warn.
buildSrc/src/main/kotlin/io/spine/gradle/testing/Tasks.kt Use SpineTaskGroup for test tasks.
buildSrc/src/main/kotlin/io/spine/gradle/SpineTaskGroup.kt Introduce shared Gradle task group constant ("spine").
buildSrc/src/main/kotlin/io/spine/gradle/RunGradle.kt Minor KDoc wording tweaks.
buildSrc/src/main/kotlin/io/spine/gradle/report/pom/ScopedDependency.kt Refine scope ordering; add provided/system/undefined priority.
buildSrc/src/main/kotlin/io/spine/gradle/report/pom/PomGenerator.kt Write generated POM under docs/dependencies.
buildSrc/src/main/kotlin/io/spine/gradle/report/pom/DependencyWriter.kt Improve deduplication (semantic version compare + scope selection) and omit null <version>.
buildSrc/src/main/kotlin/io/spine/gradle/report/license/Paths.kt Centralize dependency report output directory utilities.
buildSrc/src/main/kotlin/io/spine/gradle/report/license/ModuleDataExtensions.kt Minor KDoc wording tweak.
buildSrc/src/main/kotlin/io/spine/gradle/report/license/LicenseReporter.kt Move output under docs/dependencies; fix caching invalidation via projectVersion input; add Spine task group.
buildSrc/src/main/kotlin/io/spine/gradle/repo/Repository.kt Minor KDoc wording tweaks + whitespace cleanup.
buildSrc/src/main/kotlin/io/spine/gradle/publish/SpinePublishing.kt Minor KDoc wording tweak.
buildSrc/src/main/kotlin/io/spine/gradle/publish/PublicationHandler.kt Add logging around artifactId adjustment; avoid overwriting unrelated artifactIds.
buildSrc/src/main/kotlin/io/spine/gradle/publish/MavenMetadata.kt Add minimal Maven metadata XML model + fetch/parse helper.
buildSrc/src/main/kotlin/io/spine/gradle/publish/JarDsl.kt Minor KDoc wording tweak.
buildSrc/src/main/kotlin/io/spine/gradle/publish/GitHubPackages.kt Refine token KDoc text.
buildSrc/src/main/kotlin/io/spine/gradle/publish/CustomPublicationHandler.kt Minor KDoc wording tweak.
buildSrc/src/main/kotlin/io/spine/gradle/javascript/task/Webpack.kt Use SpineTaskGroup for JS task grouping.
buildSrc/src/main/kotlin/io/spine/gradle/javascript/task/Publish.kt Use SpineTaskGroup for JS task grouping.
buildSrc/src/main/kotlin/io/spine/gradle/javascript/task/LicenseReport.kt Use SpineTaskGroup for JS task grouping.
buildSrc/src/main/kotlin/io/spine/gradle/javascript/task/JsTasks.kt Remove per-language group constants; update example to SpineTaskGroup.
buildSrc/src/main/kotlin/io/spine/gradle/javascript/task/IntegrationTest.kt Use SpineTaskGroup + minor KDoc wording tweaks.
buildSrc/src/main/kotlin/io/spine/gradle/javascript/task/Clean.kt Use SpineTaskGroup for JS clean tasks.
buildSrc/src/main/kotlin/io/spine/gradle/javascript/task/Check.kt Use SpineTaskGroup for JS check tasks.
buildSrc/src/main/kotlin/io/spine/gradle/javascript/task/Assemble.kt Use SpineTaskGroup for JS assemble tasks + minor KDoc wording.
buildSrc/src/main/kotlin/io/spine/gradle/javascript/JsExtension.kt Minor KDoc wording tweaks.
buildSrc/src/main/kotlin/io/spine/gradle/javascript/JsEnvironment.kt Minor KDoc wording tweaks.
buildSrc/src/main/kotlin/io/spine/gradle/javadoc/ExcludeInternalDoclet.kt Add task group/description + minor KDoc wording tweaks.
buildSrc/src/main/kotlin/io/spine/gradle/java/Tasks.kt Minor KDoc wording tweak.
buildSrc/src/main/kotlin/io/spine/gradle/java/Linters.kt Adjust Error Prone enablement property usage.
buildSrc/src/main/kotlin/io/spine/gradle/github/pages/UpdateGitHubPages.kt Add Spine task group/description; clarify branch creation behavior.
buildSrc/src/main/kotlin/io/spine/gradle/github/pages/TaskName.kt Minor KDoc wording tweak.
buildSrc/src/main/kotlin/io/spine/gradle/github/pages/SshKey.kt Fix log message wording (config vs key file).
buildSrc/src/main/kotlin/io/spine/gradle/github/pages/RepositoryExtensions.kt Seed new gh-pages branches with CNAME.
buildSrc/src/main/kotlin/io/spine/gradle/dart/task/Publish.kt Use SpineTaskGroup for Dart publish tasks.
buildSrc/src/main/kotlin/io/spine/gradle/dart/task/IntegrationTest.kt Use SpineTaskGroup + improve task description.
buildSrc/src/main/kotlin/io/spine/gradle/dart/task/DartTasks.kt Remove per-language group constants; update example to SpineTaskGroup.
buildSrc/src/main/kotlin/io/spine/gradle/dart/task/Build.kt Use SpineTaskGroup for Dart build tasks.
buildSrc/src/main/kotlin/io/spine/gradle/dart/DartExtension.kt Minor KDoc wording tweaks.
buildSrc/src/main/kotlin/io/spine/gradle/dart/DartEnvironment.kt Minor KDoc wording tweaks.
buildSrc/src/main/kotlin/io/spine/gradle/ConfigTester.kt Add Spine task group/description; rename coreJavacoreJvm.
buildSrc/src/main/kotlin/io/spine/gradle/Cli.kt Fix process output draining by joining reader threads.
buildSrc/src/main/kotlin/io/spine/dependency/test/Truth.kt Bump Truth version.
buildSrc/src/main/kotlin/io/spine/dependency/test/Testcontainers.kt Add Testcontainers dependency coordinates.
buildSrc/src/main/kotlin/io/spine/dependency/test/Kover.kt Bump Kover version.
buildSrc/src/main/kotlin/io/spine/dependency/test/KotlinCompileTesting.kt Bump Kotlin compile-testing fork version.
buildSrc/src/main/kotlin/io/spine/dependency/test/JUnit.kt Bump JUnit BOM + legacy JUnit 4 version.
buildSrc/src/main/kotlin/io/spine/dependency/test/Jacoco.kt Bump JaCoCo version.
buildSrc/src/main/kotlin/io/spine/dependency/local/Validation.kt Update Validation version + rename gradle plugin coordinate pieces.
buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt Bump ToolBase versions.
buildSrc/src/main/kotlin/io/spine/dependency/local/Time.kt Bump Time version + add validation/gradle plugin coordinates.
buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt Rename comment + bump ProtoTap version.
buildSrc/src/main/kotlin/io/spine/dependency/local/McJava.kt Remove McJava dependency object.
buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt Bump Logging version reference.
buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt Bump CoreJvmCompiler versions.
buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvm.kt Bump CoreJvm version.
buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt Bump fallback compiler versions.
buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt Bump Base versions.
buildSrc/src/main/kotlin/io/spine/dependency/lib/Slf4J.kt Bump SLF4J version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/Roaster.kt Bump Roaster version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/Protobuf.kt Bump Protobuf + protobuf-gradle-plugin versions.
buildSrc/src/main/kotlin/io/spine/dependency/lib/Plexus.kt Bump Plexus utils version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/PerfMark.kt Add PerfMark dependency coordinate.
buildSrc/src/main/kotlin/io/spine/dependency/lib/PalantirJavaFormat.kt Bump Palantir Java format version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/Okio.kt Bump Okio version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/Netty.kt Bump Netty version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/Log4j2.kt Bump Log4j2 version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/KotlinSemver.kt Bump kotlin-semver version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/KotlinPoet.kt Bump KotlinPoet version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/Kotlin.kt Bump Kotlin runtime/embedded + annotations version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/JetBrainsAnnotations.kt Bump JetBrains annotations version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/JavaDiffUtils.kt Bump java-diff-utils version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/Jackson.kt Bump Jackson BOM + annotations version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/J2ObjC.kt Bump J2ObjC annotations version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/IntelliJ.kt Update repo guidance in KDoc.
buildSrc/src/main/kotlin/io/spine/dependency/lib/HttpClient.kt Bump google-http-client version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/Guava.kt Bump Guava version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/Gson.kt Bump Gson version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/GrpcKotlin.kt Bump gRPC Kotlin version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/Grpc.kt Bump gRPC BOM version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/GoogleCloud.kt Bump Google Cloud library coordinates.
buildSrc/src/main/kotlin/io/spine/dependency/lib/GoogleApis.kt Bump google API libraries (api-common, common protos, gax, auth).
buildSrc/src/main/kotlin/io/spine/dependency/lib/Flogger.kt Bump Flogger version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/Firebase.kt Bump Firebase Admin version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/CommonsLogging.kt Bump commons-logging version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/CommonsCodec.kt Bump commons-codec version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/CommonsCli.kt Bump commons-cli version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/Clikt.kt Bump Clikt version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/Caffeine.kt Bump Caffeine version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/Auto.kt Bump AutoValue version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/Asm.kt Bump ASM version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/Aedile.kt Bump Aedile version.
buildSrc/src/main/kotlin/io/spine/dependency/lib/OpenTelemetryKotlin.kt Add OpenTelemetry Kotlin dependency coordinates (pinned 0.4.0).
buildSrc/src/main/kotlin/io/spine/dependency/kotlinx/Serialization.kt Copyright year update.
buildSrc/src/main/kotlin/io/spine/dependency/kotlinx/DateTime.kt Bump kotlinx-datetime version.
buildSrc/src/main/kotlin/io/spine/dependency/kotlinx/Coroutines.kt Copyright year update.
buildSrc/src/main/kotlin/io/spine/dependency/kotlinx/AtomicFu.kt Copyright year update.
buildSrc/src/main/kotlin/io/spine/dependency/Dependency.kt Minor KDoc wording tweaks + whitespace cleanup.
buildSrc/src/main/kotlin/io/spine/dependency/build/Pmd.kt Bump PMD version.
buildSrc/src/main/kotlin/io/spine/dependency/build/PluginPublishPlugin.kt Bump Gradle plugin-publish plugin version.
buildSrc/src/main/kotlin/io/spine/dependency/build/Ksp.kt Bump KSP version.
buildSrc/src/main/kotlin/io/spine/dependency/build/GradleDoctor.kt Bump Gradle Doctor plugin version.
buildSrc/src/main/kotlin/io/spine/dependency/build/ErrorProne.kt Bump Error Prone Gradle plugin version.
buildSrc/src/main/kotlin/io/spine/dependency/build/Dokka.kt Remove unused import.
buildSrc/src/main/kotlin/io/spine/dependency/build/CheckerFramework.kt Bump Checker Framework version.
buildSrc/src/main/kotlin/io/spine/dependency/build/AnimalSniffer.kt Bump Animal Sniffer version.
buildSrc/src/main/kotlin/io/spine/dependency/boms/BomsPlugin.kt Minor KDoc wording tweak.
buildSrc/src/main/kotlin/DokkaExts.kt Add Spine task group/description; minor KDoc wording.
buildSrc/src/main/kotlin/config-tester.gradle.kts Switch to coreJvm repo constant; add task group/description.
buildSrc/src/main/kotlin/BuildExtensions.kt Remove McJava shortcut; update KDoc wording.
buildSrc/quality/pmd.xml Update rule ref and copyright year.
buildSrc/build.gradle.kts Sync embedded Kotlin/Guava/ErrorProne/Protobuf/Kover/Kotest versions.
build.gradle.kts Force Kotlin/Jackson/JUnit/Dokka/DateTime constraints across configs.
backends/otel-backend/build.gradle.kts New KMP module wiring for OTel backend + tests.
backends/otel-backend/src/commonMain/kotlin/io/spine/logging/backend/otel/OtelBackendSettings.kt New global injection point for OpenTelemetry instance.
backends/otel-backend/src/commonMain/kotlin/io/spine/logging/backend/otel/OtelEvents.kt Add EVENT_NAME key + WithLogging.logEvent API.
backends/otel-backend/src/commonMain/kotlin/io/spine/logging/backend/otel/SeverityMapping.kt Map Spine Level → OTel SeverityNumber.
backends/otel-backend/src/commonMain/kotlin/io/spine/logging/backend/otel/AttributeMapping.kt Map log site + metadata + tags → OTel attributes.
backends/otel-backend/src/commonMain/kotlin/io/spine/logging/backend/otel/OtelLoggerBackend.kt New backend implementation using Logger.emit(...).
backends/otel-backend/src/jvmMain/kotlin/io/spine/logging/backend/otel/OtelBackendFactory.kt Service-loaded backend factory (AutoService/KSP).
backends/otel-backend/src/jvmTest/kotlin/io/spine/logging/backend/otel/OtelLoggerBackendSpec.kt Backend unit tests (mapping + span correlation + events).
backends/otel-backend/src/jvmTest/kotlin/io/spine/logging/backend/otel/given/StubMetadata.kt Test stub metadata container.
backends/otel-backend/src/jvmTest/kotlin/io/spine/logging/backend/otel/given/StubLogSite.kt Test stub log site.
backends/otel-backend/src/jvmTest/kotlin/io/spine/logging/backend/otel/given/StubLogData.kt Test stub log data.
backends/otel-backend/src/jvmTest/kotlin/io/spine/logging/backend/otel/given/RecordingLogRecordProcessor.kt Test log record processor capturing emitted logs.
backends/otel-backend/src/jvmTest/kotlin/io/spine/logging/backend/otel/given/NoOpSpanProcessor.kt No-op span processor for correlation tests.
backends/otel-backend/README.md Usage + mapping + events documentation.
backends/otel-backend-bootstrap/build.gradle.kts New JVM bootstrap module build config.
backends/otel-backend-bootstrap/src/main/kotlin/io/spine/logging/backend/otel/bootstrap/OtelLogging.kt OTLP/HTTP SDK wiring + install/uninstall handle.
backends/otel-backend-bootstrap/src/test/kotlin/io/spine/logging/backend/otel/bootstrap/OtelLoggingSpec.kt Bootstrap smoke tests (install/shutdown + env fallback).
.junie/guidelines.md Update pointers to agent guideline TOC path.
.idea/misc.xml IDE nullability annotations ordering/config updates.
.idea/live-templates/User.xml Fix date format pattern to calendar year (yyyy).
.idea/live-templates/README.md Fix typos/whitespace in template docs.
.idea/kotlinc.xml Remove common compiler args section; formatting fix.
.idea/inspectionProfiles/Project_Default.xml Adjust package naming regex + formatting.
.gitmodules Add .agents/shared submodule.
.gitignore Expand secret ignores + add shared config block markers.
.github/workflows/secret-scan.yml Add gitleaks-based secret scanning workflow.
.github/workflows/revalidate-versions.yml Add workflow to revalidate open PRs when base version changes.
.github/workflows/remove-obsolete-artifacts-from-packages.yaml Workflow naming + action version refresh.
.github/workflows/publish.yml Workflow naming + action version refresh + failure reporting step.
.github/workflows/gradle-wrapper-validation.yml Workflow naming + action version refresh.
.github/workflows/ensure-reports-updated.yml Improve report-check workflow scoping + naming + action version refresh.
.github/workflows/build-on-windows.yml Refresh Windows CI workflow and Gradle setup usage.
.github/copilot-instructions.md Update repo-wide Copilot instructions (context + review exclusions).
.codecov.yml Update Codecov configuration (patch/project settings and paths).
.claude/settings.local.json Restrict allowed tool permissions.
.claude/settings.json Add Claude Code settings, hooks, and permission model.
.agents/version-policy.md Remove legacy agent doc (superseded by shared agent guidance).
.agents/testing.md Remove legacy agent doc (superseded by shared agent guidance).
.agents/skills/writer/SKILL.md Remove legacy writer skill doc (superseded by shared agent guidance).
.agents/skills/writer/assets/templates/kotlin-java-example.md Remove legacy writer templates.
.agents/skills/writer/assets/templates/kdoc-example.md Remove legacy writer templates.
.agents/skills/writer/assets/templates/doc-page.md Remove legacy writer templates.
.agents/skills/writer/agents/openai.yaml Remove legacy writer agent config.
.agents/safety-rules.md Remove legacy agent doc (superseded).
.agents/running-builds.md Remove legacy agent doc (superseded).
.agents/refactoring-guidelines.md Remove legacy agent doc (superseded).
.agents/quick-reference-card.md Remove legacy agent doc (superseded).
.agents/project-structure-expectations.md Remove legacy agent doc (superseded).
.agents/documentation-tasks.md Remove legacy agent doc (superseded).
.agents/documentation-guidelines.md Remove legacy agent doc (superseded).
.agents/common-tasks.md Remove legacy agent doc (superseded).
.agents/coding-guidelines.md Remove legacy agent doc (superseded).
.agents/advanced-safety-rules.md Remove legacy agent doc (superseded).
.agents/_TOC.md Remove legacy agent TOC (superseded by shared .agents/guidelines/_TOC.md).
Files not reviewed (5)
  • .idea/inspectionProfiles/Project_Default.xml: Generated file
  • .idea/kotlinc.xml: Generated file
  • .idea/live-templates/README.md: Generated file
  • .idea/live-templates/User.xml: Generated file
  • .idea/misc.xml: Generated file

@codecov

codecov Bot commented Jun 27, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 91.17647% with 9 lines in your changes missing coverage. Please review.
✅ Project coverage is 17.28%. Comparing base (4e467c5) to head (beb0846).

Additional details and impacted files
@@               Coverage Diff                @@
##             update-config     #141   +/-   ##
================================================
  Coverage            17.28%   17.28%           
  Complexity             141      141           
================================================
  Files                  109      109           
  Lines                 2545     2545           
  Branches               402      402           
================================================
  Hits                   440      440           
  Misses                2066     2066           
  Partials                39       39           
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

alexander-yevsyukov and others added 10 commits June 28, 2026 17:57
Build on the Phase 0/1 backend with the log-based events surface, an OTLP
bootstrap module, trace correlation, documentation, and review fixes.

- Events: the `EVENT_NAME` metadata key and `WithLogging.logEvent(...)`. The
  backend forwards the name via `Logger.emit(eventName = …)` and omits it from
  the `spine.*` attributes.
- `backends/otel-backend-bootstrap` (jvm-module): `OtelLogging.installOtlpHttp()`
  and `fromEnvironment()` build a native OTLP/HTTP SDK, install it through
  `OtelBackendSettings`, and return an `AutoCloseable` that uninstalls and shuts
  the SDK down. Adds the `exporters-core` and `exporters-otlp` coordinates.
- Add a trace-correlation test (the record carries the active span's ids) and the
  module `README.md` (usage, mapping, events, and the consumer-side domain-event
  recipe).
- Review fixes: restore the no-op holder after each test, safe-cast in `close()`,
  null-message guard in `handleError`, a widening KDoc note, README line length,
  and a resolved KDoc link.

Tests: otel-backend 13, bootstrap 2. detekt and Dokka clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Address findings from spine-code-review, kotlin-engineer, dependency-audit, and
review-docs:

- Revert an unintended `rootProject.name` rename (`logging` -> `spine-logging`)
  that a formatter slipped into the Phase 0 commit.
- Add tests for `handleError`, `Tags` expansion (label-only / single / list), and
  boolean and double attribute values (otel-backend now has 16 tests).
- `OpenTelemetryKotlin`: add the project URL comment.
- Use `requireNotNull` instead of `!!` in the `StubLogData` test fixture.
- README: fix an example comment; capitalize a `@return` description.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- `OtelLoggerBackend` no longer captures the OpenTelemetry logger at creation. It
  resolves from `OtelBackendSettings.current()` on every access (a `logger`
  property), so a backend created and cached per logging class before the SDK is
  installed picks it up once `use()` runs, and follows a later replacement (for
  example, the bootstrap restoring the no-op instance on shutdown).
- Publishing: add `otel-backend-bootstrap` to the root `spinePublishing.modules`,
  and configure `otel-backend` (a KMP module) with `kmp-publish` + `customPublishing`
  so it publishes as `spine-logging-otel-backend`. Verified via `publishToMavenLocal`.
- Update the backend tests for the lazy-resolution change.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Raise patch coverage for the OpenTelemetry backend: exercise the single and
repeated attribute value-type branches (numeric widening; boolean/double/string
lists; non-primitive `toString` fallback), the unknown line-number / source-file
log site, the factory `toString()`, and the bootstrap default-endpoint install.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Drop the `spine.` prefix on metadata-derived attributes. Spine labels are dot-free
identifiers and cannot collide with OpenTelemetry's dotted semantic conventions, so
the prefix was convention, not collision-prevention — metadata keys now map to bare
attributes named after their label.

Keep a prefix for `Tags`, de-`spine`d to `tag.`: tag names and metadata labels share
the same identifier namespace, so a same-named tag and metadata key would otherwise
overwrite each other. The KDoc now states that actual rationale.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@alexander-yevsyukov
alexander-yevsyukov changed the base branch from master to update-config June 28, 2026 17:02
@alexander-yevsyukov
alexander-yevsyukov merged commit 2060bfb into update-config Jun 28, 2026
8 checks passed
@alexander-yevsyukov
alexander-yevsyukov deleted the otel branch June 28, 2026 17:02
@github-project-automation github-project-automation Bot moved this from 🏗 In progress to ✅ Done in v2.0 Jun 28, 2026
@alexander-yevsyukov
alexander-yevsyukov restored the otel branch June 28, 2026 17:05
@alexander-yevsyukov

Copy link
Copy Markdown
Contributor Author

The PR was accidentally merged during the branch split works.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

2 participants