Fix dead Compiler and Validation artifact coordinates - #741
Merged
alexander-yevsyukov merged 2 commits intoAug 7, 2026
Conversation
Four coordinates declared under `io.spine.dependency.local` do not resolve against the Spine Artifact Registry, in either `releases` or `snapshots`. `Compiler.kt` descends from `ProtoData.kt`: when ProtoData was superseded by the Spine Compiler, the object was copied and the `protodata-` prefix was swapped for `compiler-`. Two module renames that had happened inside the `compiler` repository were never carried over: * `cli-api` was renamed to `params`, so `compiler-cli-api` was never published. `Compiler.params` already declares the artifact, which makes `cliApi` a duplicate. Removed. * The fat CLI distribution is published as `compiler-cli-all` by the `cliFatJar` publication of the `:cli` module, so `compiler-fat-cli` was never published either. The `Artifacts.fatCli()` function of `compiler-gradle-api` already returns the correct name; `fatCli` now agrees with it. In the `validation` repository: * The `model` module was consolidated into `context` and its remainder renamed to the unpublished `context-tests`. `Validation.context` already declares the surviving artifact. Removed. * The `configuration` module was dropped with no successor. Removed. The last two were published up to `2.0.0-SNAPSHOT.375` and have been dead since. Nothing in the SDK references any of the four declarations. These went unnoticed because `Compiler.modules` feeds `ResolutionStrategy.force(...)` through `Dependency.artifacts`, and forcing a coordinate that never appears in a dependency graph is silently inert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
armiol
approved these changes
Aug 7, 2026
alexander-yevsyukov
deleted the
fix-dead-compiler-validation-coordinates
branch
August 7, 2026 10:04
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Four Maven coordinates declared under
buildSrc/src/main/kotlin/io/spine/dependency/local/do not resolve against the Spine Artifact Registry — verified againstmaven-metadata.xmlin bothreleasesandsnapshots:io.spine.tools:compiler-cli-apiCompiler.cliApiio.spine.tools:compiler-fat-cliCompiler.fatCliio.spine.tools:validation-modelValidation.model2.0.0-SNAPSHOT.375io.spine.tools:validation-configurationValidation.configModule2.0.0-SNAPSHOT.375Root cause
Compiler.ktdescends fromProtoData.kt— the two are line-for-line identical around both dead entries. When ProtoData was superseded by the Spine Compiler, the object was copied and theprotodata-prefix mechanically swapped forcompiler-, but two module renames that had happened inside thecompilerrepository were never carried over:cli-api→params, inSpineEventEngine/compiler@7f3592533d"Rename thecli-apimodule toparams".Compiler.paramsalready declares the surviving artifact, which makescliApia duplicate.fat-cli→cli-all.cli/build.gradle.ktspublishesartifactId = "compiler-cli-all"via thecliFatJarpublication. The Compiler's own public API —Artifacts.fatCli()incompiler-gradle-api— already returnscompiler-cli-all, so the Compiler disagreed with its own build tooling about the same artifact.In
SpineEventEngine/validation:modelwas consolidated intocontext, and its remainder renamed tocontext-tests(4af8c8cc64), which is test-only and absent from the publishedmodulesset.Validation.contextalready declares the surviving artifact.configurationwas dropped with no successor (e48782ac88"Remove outdated configuration proto code",c665d06dac"Remove:proto:configurationmodule"). The newerjava-settingsmodule is unrelated, introduced separately inede1d77f52.Why this went unnoticed
Compiler.modulesfeedsResolutionStrategy.force(...)viaDependency.artifacts. Forcing a coordinate that never appears in a dependency graph is a silent no-op — Gradle emits neither a warning nor a failure.Changes
Compiler.cliApiremoved, along with its entry inCompiler.modules.Compiler.fatClicorrected tocompiler-cli-all, with a KDoc note pinning it to the upstreamArtifacts.fatCli()— which carries the mirror-image instruction on its own side.Validation.modelandValidation.configModuleremoved.Coordinates only —
Compiler.fallbackVersion,fallbackDfVersion, andValidation.versionare deliberately untouched.No
migrateentry is needed:migratedistributesbuildSrcwithcp -R buildSrc .., which overwrites these files wholesale. Itsrm -fcleanups exist only for dependency objects removed as entire files (ProtoData.kt,ModelCompiler.kt,McJava.kt); no whole file is removed here.Open question for review: removal vs.
@DeprecatedThe two reviewers that examined this disagreed, so it is worth a maintainer's call.
dependency-auditargued for@Deprecatedmarkers, citingValidation.oldRuntimeas in-file precedent and the possibility of unseen external consumers.kotlin-engineerargued for straight removal, and I find its reasoning stronger:oldRuntimeis the opposite case — it points at a real, published artifact and has a real replacement, soReplaceWith("runtime")is meaningful.configModulehas no successor at all, so there is no expression to put inReplaceWith.Unresolved reference: cliApi, which names the exact call site, into a laterCould not find io.spine.tools:validation-model:…that reads like an infrastructure outage.buildSrcis compiled from source in every consumer, andconfigis a pinned submodule pulled explicitly — nobody is upgraded silently.A grep across every locally checked-out SDK repository found zero references to any of the four declarations. Happy to switch to deprecation markers if you prefer.
Verification
./gradlew detekt— BUILD SUCCESSFUL;:buildSrc:compileKotlinclean. (This repo registers nobuild,check, ordokkaGeneratetask — its root project applies nobase/java/Dokka plugin — sodetekt+compileKotlinis the applicable surface.)compiler-cli-all:2.0.0-SNAPSHOT.064.spine-code-reviewAPPROVE,kotlin-engineerAPPROVE,review-docsAPPROVE,dependency-auditAPPROVE WITH CHANGES (the deprecation question above). No Must-fix findings.Follow-ups, not addressed here
kotlin-engineersuggests extractingfatCliModuleso the artifact id is named once, matching thejvm/jvmModuleconvention.@Suppress("unused")on both objects is what let these dead members survive; narrowing it would surface the next one.Validationdeclares nojava-settings, thoughio.spine.tools:validation-java-settingsis published.🤖 Generated with Claude Code