From 57b26d442db8b7d9d58eb9764ca21d1d54904d31 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Wed, 21 Oct 2026 16:36:44 +0100 Subject: [PATCH 01/17] Update shared agent tooling and config (./config/pull) --- .github/workflows/build-on-ubuntu.yml | 19 +++++++++++++++++++ .github/workflows/publish.yml | 2 +- buildSrc/build.gradle.kts | 2 +- .../kotlin/io/spine/dependency/lib/Kotlin.kt | 4 ++-- .../io/spine/dependency/lib/KotlinPoet.kt | 2 +- .../io/spine/dependency/local/BaseTypes.kt | 2 +- .../io/spine/dependency/local/Compiler.kt | 2 +- .../spine/dependency/local/CoreJvmCompiler.kt | 4 ++-- .../io/spine/dependency/local/DokkaTools.kt | 2 +- .../dependency/test/KotlinCompileTesting.kt | 2 +- config | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 12 files changed, 32 insertions(+), 13 deletions(-) diff --git a/.github/workflows/build-on-ubuntu.yml b/.github/workflows/build-on-ubuntu.yml index b07bf0fb0a..1f0540a8f6 100644 --- a/.github/workflows/build-on-ubuntu.yml +++ b/.github/workflows/build-on-ubuntu.yml @@ -92,3 +92,22 @@ jobs: token: ${{ secrets.CODECOV_TOKEN }} fail_ci_if_error: true verbose: true + + # The Codecov CLI ships a set of "file fixes" with every upload. For + # `.kt` files — never `.java` — they mark each line holding nothing + # but a brace or a parenthesis as non-code. JaCoCo, however, does + # measure one such line: it attributes a Kotlin lambda body's + # instructions to the body's closing `}`, through the synthetic + # `$lambda$N` that an `invokedynamic` lambda compiles to. The fixes + # thus discard roughly a tenth of the measured lines, which would be + # harmless if every ingestion applied them. Not every one does: when + # Codecov re-processes a stored upload, the second pass leaves them + # unapplied, so one and the same report can be ingested on either + # line basis. That switch moves the `src/main/**` project status by + # about 0.7 percentage points, fourteen times the threshold in + # `.codecov.yml`, and it has been seen on `master`, whose commits + # are the `target: auto` baselines — so it can shift a pull + # request's delta either way. Sending no fixes makes both ingestion + # paths agree, at the price of counting a lambda-closing brace as a + # coverable line. + disable_file_fixes: true diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 5d1ca00cdc..aacee780fd 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -30,7 +30,7 @@ on: jobs: publish: name: Publish to Maven repositories - uses: SpineEventEngine/config/.github/workflows/publishing.yml@3516efc5dee84e88bc541944ff743f435eec6a1d + uses: SpineEventEngine/config/.github/workflows/publishing.yml@604420cd7eab82b382c9a5c1d812be454552c27c permissions: contents: read packages: write diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index aeaa51de9f..f1666ede07 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -77,7 +77,7 @@ val grGitVersion = "5.3.3" * This version may change from the [version of Kotlin][io.spine.dependency.lib.Kotlin.version] * used by the project. */ -val kotlinEmbeddedVersion = "2.4.21" +val kotlinEmbeddedVersion = "2.4.10" /** * The version of Guava used in `buildSrc`. diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/lib/Kotlin.kt b/buildSrc/src/main/kotlin/io/spine/dependency/lib/Kotlin.kt index 4b49e3a9e9..5f63d1f84b 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/lib/Kotlin.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/lib/Kotlin.kt @@ -26,7 +26,7 @@ object Kotlin : DependencyWithBom() { * This is the version of Kotlin we use for writing code that does not depend on Gradle. */ @Suppress("MemberVisibilityCanBePrivate") // used directly from the outside. - const val runtimeVersion = "2.4.21" + const val runtimeVersion = "2.4.10" override val version = runtimeVersion override val group = "org.jetbrains.kotlin" @@ -43,7 +43,7 @@ object Kotlin : DependencyWithBom() { * [embedded into Gradle](https://docs.gradle.org/current/userguide/compatibility.html#kotlin), * which the Gradle version determines on its own. */ - const val embeddedVersion = "2.4.21" + const val embeddedVersion = "2.4.10" /** * The version of the JetBrains annotations library, which is a transitive diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/lib/KotlinPoet.kt b/buildSrc/src/main/kotlin/io/spine/dependency/lib/KotlinPoet.kt index c7fcf35acc..9cd966446d 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/lib/KotlinPoet.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/lib/KotlinPoet.kt @@ -17,7 +17,7 @@ package io.spine.dependency.lib // https://github.com/square/kotlinpoet @Suppress("unused", "ConstPropertyName") object KotlinPoet { - private const val version = "2.4.0" + private const val version = "2.3.0" const val lib = "com.squareup:kotlinpoet:$version" const val ksp = "com.squareup:kotlinpoet-ksp:$version" } diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/BaseTypes.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/BaseTypes.kt index d92259dc5a..e0a828061a 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/BaseTypes.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/BaseTypes.kt @@ -23,7 +23,7 @@ package io.spine.dependency.local "ConstPropertyName" /* We use a custom convention for artifact properties. */, ) object BaseTypes { - const val version = "2.0.0-SNAPSHOT.226" + const val version = "2.0.0-SNAPSHOT.225" const val group = Spine.group const val artifact = "spine-base-types" const val lib = "$group:$artifact:$version" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt index 8d69769c64..137e830107 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt @@ -60,7 +60,7 @@ object Compiler : Dependency() { * The version of the Compiler dependencies. */ override val version: String - private const val fallbackVersion = "2.0.0-SNAPSHOT.079" + private const val fallbackVersion = "2.0.0-SNAPSHOT.069" /** * The distinct version of the Compiler used by other build tools. diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt index 3465c08c02..1af2694bb1 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt @@ -34,12 +34,12 @@ object CoreJvmCompiler { /** * The version used in the build classpath. */ - const val dogfoodingVersion = "2.0.0-SNAPSHOT.098" + const val dogfoodingVersion = "2.0.0-SNAPSHOT.097" /** * The version to be used for integration tests. */ - const val version = "2.0.0-SNAPSHOT.098" + const val version = "2.0.0-SNAPSHOT.097" /** * The ID of the Gradle plugin. diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/DokkaTools.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/DokkaTools.kt index 37bfae4ed7..6026d49f57 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/DokkaTools.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/DokkaTools.kt @@ -25,7 +25,7 @@ package io.spine.dependency.local ) object DokkaTools { const val group = Spine.toolsGroup - const val version = "2.0.0-SNAPSHOT.11" + const val version = "2.0.0-SNAPSHOT.10" /** * The artifact dropped its `spine-` prefix in `2.0.0-SNAPSHOT.9`, to diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/test/KotlinCompileTesting.kt b/buildSrc/src/main/kotlin/io/spine/dependency/test/KotlinCompileTesting.kt index 197649377a..4d54ce0613 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/test/KotlinCompileTesting.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/test/KotlinCompileTesting.kt @@ -21,7 +21,7 @@ package io.spine.dependency.test */ @Suppress("unused", "ConstPropertyName") object KotlinCompileTesting { - private const val version = "0.14.0" + private const val version = "0.13.0" private const val group = "dev.zacsweers.kctfork" const val libCore = "$group:core:$version" const val libKsp = "$group:ksp:$version" diff --git a/config b/config index 3516efc5de..604420cd7e 160000 --- a/config +++ b/config @@ -1 +1 @@ -Subproject commit 3516efc5dee84e88bc541944ff743f435eec6a1d +Subproject commit 604420cd7eab82b382c9a5c1d812be454552c27c diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2e7bb9fd6a..91c4fc64aa 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.8.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.8.2-bin.zip networkTimeout=10000 retries=0 retryBackOffMs=500 From af376071a1504c87016e97d55c38c9337cd99a1f Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Wed, 21 Oct 2026 16:36:45 +0100 Subject: [PATCH 02/17] Update local dependency pins --- buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt | 2 +- buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt | 2 +- buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt | 2 +- buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt | 2 +- buildSrc/src/main/kotlin/io/spine/dependency/local/Reflect.kt | 2 +- buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt | 2 +- buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt index 45c1d2f023..baaf5c7053 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt @@ -24,7 +24,7 @@ package io.spine.dependency.local "unused" /* Some subprojects do not use all Base artifacts. */, ) object Base { - const val version = "2.0.0-SNAPSHOT.461" + const val version = "2.0.0-SNAPSHOT.462" const val versionForBuildScript = "2.0.0-SNAPSHOT.461" const val group = Spine.group private const val prefix = "spine" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt index 137e830107..1582193469 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt @@ -60,7 +60,7 @@ object Compiler : Dependency() { * The version of the Compiler dependencies. */ override val version: String - private const val fallbackVersion = "2.0.0-SNAPSHOT.069" + private const val fallbackVersion = "2.0.0-SNAPSHOT.080" /** * The distinct version of the Compiler used by other build tools. diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt index 6d5f5b798c..fc2cc67e8d 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt @@ -24,7 +24,7 @@ package io.spine.dependency.local "unused" /* Some subprojects do not use all Logging artifacts. */, ) object Logging { - const val version = "2.0.0-SNAPSHOT.426" + const val version = "2.0.0-SNAPSHOT.427" const val group = Spine.group const val loggingArtifact = "spine-logging" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt index 55154c6964..b9e6f18ecf 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt @@ -26,7 +26,7 @@ package io.spine.dependency.local ) object ProtoTap { const val group = Spine.toolsGroup - const val version = "0.17.3" + const val version = "0.17.4" const val gradlePluginId = "io.spine.prototap" const val api = "$group:prototap-api:$version" const val gradlePlugin = "$group:prototap-gradle-plugin:$version" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Reflect.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Reflect.kt index c07fd2f716..da3e6edc54 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Reflect.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Reflect.kt @@ -23,7 +23,7 @@ package io.spine.dependency.local "ConstPropertyName" /* We use a custom convention for artifact properties. */, ) object Reflect { - const val version = "2.0.0-SNAPSHOT.202" + const val version = "2.0.0-SNAPSHOT.203" const val group = Spine.group const val artifact = "spine-reflect" const val lib = "$group:$artifact:$version" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt index 324a493653..312ed795d8 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt @@ -23,7 +23,7 @@ package io.spine.dependency.local "ConstPropertyName" /* We use a custom convention for artifact properties. */, ) object TestLib { - const val version = "2.0.0-SNAPSHOT.215" + const val version = "2.0.0-SNAPSHOT.216" const val group = Spine.toolsGroup const val artifact = "base-testlib" const val lib = "$group:$artifact:$version" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt index 2a8a255ac6..bb675bca2d 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt @@ -32,7 +32,7 @@ package io.spine.dependency.local ) object ToolBase { const val group = Spine.toolsGroup - const val version = "2.0.0-SNAPSHOT.426" + const val version = "2.0.0-SNAPSHOT.428" const val dogfoodingVersion = "2.0.0-SNAPSHOT.426" const val archive = "$group:archive:$version" From f4e6ea6693153a3500e1d71fd9444c43d96f0947 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Wed, 21 Oct 2026 16:36:46 +0100 Subject: [PATCH 03/17] Bump version -> `2.0.0-SNAPSHOT.469` --- version.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.gradle.kts b/version.gradle.kts index bb6dea977d..02fd8c67df 100644 --- a/version.gradle.kts +++ b/version.gradle.kts @@ -15,4 +15,4 @@ /** * The version of the Validation library to publish. */ -extra.set("validationVersion", "2.0.0-SNAPSHOT.468") +extra.set("validationVersion", "2.0.0-SNAPSHOT.469") From 5c1725321ac481ff200be05d78940ff6daa32a79 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Wed, 21 Oct 2026 16:38:23 +0100 Subject: [PATCH 04/17] Restore the local pins `./config/pull` lowered The pull brought `config`'s older pins for BaseTypes (`.226` -> `.225`), CoreJvmCompiler (`.098` -> `.097`), and DokkaTools (`.11` -> `.10`). These repos are not upstreams of Validation in this wave, so `prep` does not re-pin them; keep the newer published versions. Co-Authored-By: Claude Opus 5.5 --- .../src/main/kotlin/io/spine/dependency/local/BaseTypes.kt | 2 +- .../main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt | 4 ++-- .../src/main/kotlin/io/spine/dependency/local/DokkaTools.kt | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/BaseTypes.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/BaseTypes.kt index e0a828061a..d92259dc5a 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/BaseTypes.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/BaseTypes.kt @@ -23,7 +23,7 @@ package io.spine.dependency.local "ConstPropertyName" /* We use a custom convention for artifact properties. */, ) object BaseTypes { - const val version = "2.0.0-SNAPSHOT.225" + const val version = "2.0.0-SNAPSHOT.226" const val group = Spine.group const val artifact = "spine-base-types" const val lib = "$group:$artifact:$version" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt index 1af2694bb1..3465c08c02 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt @@ -34,12 +34,12 @@ object CoreJvmCompiler { /** * The version used in the build classpath. */ - const val dogfoodingVersion = "2.0.0-SNAPSHOT.097" + const val dogfoodingVersion = "2.0.0-SNAPSHOT.098" /** * The version to be used for integration tests. */ - const val version = "2.0.0-SNAPSHOT.097" + const val version = "2.0.0-SNAPSHOT.098" /** * The ID of the Gradle plugin. diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/DokkaTools.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/DokkaTools.kt index 6026d49f57..37bfae4ed7 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/DokkaTools.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/DokkaTools.kt @@ -25,7 +25,7 @@ package io.spine.dependency.local ) object DokkaTools { const val group = Spine.toolsGroup - const val version = "2.0.0-SNAPSHOT.10" + const val version = "2.0.0-SNAPSHOT.11" /** * The artifact dropped its `spine-` prefix in `2.0.0-SNAPSHOT.9`, to From b61bc718b8d0b5e384c894e5c526ab1675bf8c4c Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Wed, 21 Oct 2026 16:38:42 +0100 Subject: [PATCH 05/17] Embed Validation `2.0.0-SNAPSHOT.469` in the docs Co-Authored-By: Claude Opus 5.5 --- docs/content/docs/validation/developer/build-and-release.md | 2 +- .../docs/validation/user/01-getting-started/adding-to-build.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/content/docs/validation/developer/build-and-release.md b/docs/content/docs/validation/developer/build-and-release.md index 606a378fa3..2c655e3a3c 100644 --- a/docs/content/docs/validation/developer/build-and-release.md +++ b/docs/content/docs/validation/developer/build-and-release.md @@ -47,7 +47,7 @@ through Gradle's `extra` properties: end="validationVersion"> ```kotlin -extra.set("validationVersion", "2.0.0-SNAPSHOT.468") +extra.set("validationVersion", "2.0.0-SNAPSHOT.469") ``` The root build script applies this file under `allprojects { … }` and assigns diff --git a/docs/content/docs/validation/user/01-getting-started/adding-to-build.md b/docs/content/docs/validation/user/01-getting-started/adding-to-build.md index a70d128686..1ec494cedd 100644 --- a/docs/content/docs/validation/user/01-getting-started/adding-to-build.md +++ b/docs/content/docs/validation/user/01-getting-started/adding-to-build.md @@ -90,7 +90,7 @@ Add the Validation plugin to the build. ```kotlin plugins { module - id("io.spine.validation") version "2.0.0-SNAPSHOT.468" + id("io.spine.validation") version "2.0.0-SNAPSHOT.469" } ``` From a49fefdbe790aeb0f8be3cb3d6657352f636167a Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Wed, 21 Oct 2026 16:39:06 +0100 Subject: [PATCH 06/17] Bump postcss-selector-parser and @fullhuman/postcss-purgecss in /docs/_preview Folded in from Dependabot's SpineEventEngine/validation#333. Co-Authored-By: Claude Opus 5.5 --- docs/_preview/package-lock.json | 480 +++++++++----------------------- docs/_preview/package.json | 2 +- 2 files changed, 129 insertions(+), 353 deletions(-) diff --git a/docs/_preview/package-lock.json b/docs/_preview/package-lock.json index 80050ad3a1..63eeabeacf 100644 --- a/docs/_preview/package-lock.json +++ b/docs/_preview/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "ISC", "devDependencies": { - "@fullhuman/postcss-purgecss": "^7.0.2", + "@fullhuman/postcss-purgecss": "^8.0.0", "autoprefixer": "^10.4.22", "postcss": "^8.5.23", "postcss-cli": "^11.0.1", @@ -17,111 +17,54 @@ } }, "node_modules/@fullhuman/postcss-purgecss": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@fullhuman/postcss-purgecss/-/postcss-purgecss-7.0.2.tgz", - "integrity": "sha512-U4zAXNaVztbDxO9EdcLp51F3UxxYsb/7DN89rFxFJhfk2Wua2pvw2Kf3HdspbPhW/wpHjSjsxWYoIlbTgRSjbQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@fullhuman/postcss-purgecss/-/postcss-purgecss-8.0.0.tgz", + "integrity": "sha512-fSRaBGf6+DYdfQMxedWfnIW8FSYE1LBpgy16jpK1L2vNb1HgeBRRZ+UX4UokNmW7YEAwPdvwkKdYtlkYpH+Aqg==", "dev": true, + "license": "MIT", "dependencies": { - "purgecss": "^7.0.2" + "purgecss": "^8.0.0" }, "peerDependencies": { "postcss": "^8.0.0" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 8" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, + "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">= 8" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">= 8" } }, "node_modules/ansi-regex": { @@ -198,16 +141,6 @@ "postcss": "^8.1.0" } }, - "node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, "node_modules/baseline-browser-mapping": { "version": "2.11.21", "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.21.tgz", @@ -233,19 +166,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/brace-expansion": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz", - "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", @@ -374,24 +294,11 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" } }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -413,12 +320,6 @@ "node": ">=4" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, "node_modules/electron-to-chromium": { "version": "1.5.420", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.420.tgz", @@ -441,32 +342,43 @@ "node": ">=6" } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, + "license": "MIT", "dependencies": { - "to-regex-range": "^5.0.1" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" }, "engines": { - "node": ">=8" + "node": ">=8.6.0" } }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "node_modules/fastq": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.3.tgz", + "integrity": "sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==", "dev": true, + "license": "ISC", "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8" } }, "node_modules/fraction.js": { @@ -519,29 +431,6 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/glob": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", - "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", - "dev": true, - "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", - "minimatch": "^10.1.1", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -611,27 +500,6 @@ "node": ">=0.12.0" } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/jsonfile": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", @@ -656,38 +524,28 @@ "url": "https://github.com/sponsors/antonk52" } }, - "node_modules/lru-cache": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", - "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { - "node": "20 || >=22" + "node": ">= 8" } }, - "node_modules/minimatch": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", - "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "dependencies": { - "brace-expansion": "^5.0.2" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=8.6" } }, "node_modules/nanoid": { @@ -737,37 +595,6 @@ "node": ">=0.10.0" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-scurry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", - "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", - "dev": true, - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -868,20 +695,6 @@ "postcss": "^8.4.32" } }, - "node_modules/postcss-discard-comments/node_modules/postcss-selector-parser": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.5.tgz", - "integrity": "sha512-KvvtD7SrlBP7dlgkBghEE3r84CABm5SmV2aNcG4oCA+qDnJ/tvKonFVvwWAyyWUEwxuNawdfEAZKP9zM3oZ2Uw==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/postcss-load-config": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-5.1.0.tgz", @@ -948,9 +761,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.4.tgz", - "integrity": "sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.6.tgz", + "integrity": "sha512-7qASPzhKF2l2KLboRZux8CCTRMdGiV08vWmyKzPz22qZ7ZjQBOeY7rNzNoCLSUiftJ7HUq0GERHmxw/t0dCdMw==", "dev": true, "license": "MIT", "dependencies": { @@ -977,20 +790,42 @@ } }, "node_modules/purgecss": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-7.0.2.tgz", - "integrity": "sha512-4Ku8KoxNhOWi9X1XJ73XY5fv+I+hhTRedKpGs/2gaBKU8ijUiIKF/uyyIyh7Wo713bELSICF5/NswjcuOqYouQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-8.0.0.tgz", + "integrity": "sha512-QFJyps9y5oHeXnNA3Ql1EaAqWBivNwQn19Pw1lt9RxfB+4e+bIyqCyuombk79D6Fxe+lPXggVfI1WtRGEBwgbQ==", "dev": true, + "license": "MIT", "dependencies": { "commander": "^12.1.0", - "glob": "^11.0.0", + "fast-glob": "^3.3.2", "postcss": "^8.4.47", - "postcss-selector-parser": "^6.1.2" + "postcss-selector-parser": "^7.0.0" }, "bin": { "purgecss": "bin/purgecss.js" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -1021,37 +856,39 @@ "node": ">=0.10.0" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" } }, "node_modules/slash": { @@ -1090,21 +927,6 @@ "node": ">=8" } }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -1117,19 +939,6 @@ "node": ">=8" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/thenby": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz", @@ -1240,21 +1049,6 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -1272,24 +1066,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/docs/_preview/package.json b/docs/_preview/package.json index f28ac0fd82..d04b8ed296 100644 --- a/docs/_preview/package.json +++ b/docs/_preview/package.json @@ -9,7 +9,7 @@ "author": "", "license": "ISC", "devDependencies": { - "@fullhuman/postcss-purgecss": "^7.0.2", + "@fullhuman/postcss-purgecss": "^8.0.0", "autoprefixer": "^10.4.22", "postcss": "^8.5.23", "postcss-cli": "^11.0.1", From 5a4e24e8c5bbe2a60f67f03633c3e63d7418a1f8 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Wed, 21 Oct 2026 16:39:08 +0100 Subject: [PATCH 07/17] Bump brace-expansion from 5.0.7 to 5.0.12 in /docs/_preview Folded in from Dependabot's SpineEventEngine/validation#334. Co-Authored-By: Claude Opus 5.5 --- docs/_preview/package-lock.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/docs/_preview/package-lock.json b/docs/_preview/package-lock.json index 63eeabeacf..e2fa751e4a 100644 --- a/docs/_preview/package-lock.json +++ b/docs/_preview/package-lock.json @@ -166,6 +166,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, +<<<<<<< ours +======= + "node_modules/brace-expansion": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz", + "integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, +>>>>>>> theirs "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", From 3ba4b0e9d6fad3919b101fa6b5e5ed9837bcc5e9 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Wed, 21 Oct 2026 16:39:35 +0100 Subject: [PATCH 08/17] Resolve the `brace-expansion` lockfile conflict The PurgeCSS bump (folded from validation#333) removed `brace-expansion` and the only package that required it, so the bump from validation#334 has nothing to update. Co-Authored-By: Claude Opus 5.5 --- docs/_preview/package-lock.json | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/docs/_preview/package-lock.json b/docs/_preview/package-lock.json index e2fa751e4a..63eeabeacf 100644 --- a/docs/_preview/package-lock.json +++ b/docs/_preview/package-lock.json @@ -166,22 +166,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, -<<<<<<< ours -======= - "node_modules/brace-expansion": { - "version": "5.0.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz", - "integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "20 || >=22" - } - }, ->>>>>>> theirs "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", From d126ad45889823e8a71eb0378eef0af441cf1f72 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Wed, 21 Oct 2026 17:10:01 +0100 Subject: [PATCH 09/17] Update dependency reports --- docs/dependencies/dependencies.md | 736 ++++++++++++++++-------------- docs/dependencies/pom.xml | 42 +- 2 files changed, 417 insertions(+), 361 deletions(-) diff --git a/docs/dependencies/dependencies.md b/docs/dependencies/dependencies.md index 64d10ee5a0..e50039dd4e 100644 --- a/docs/dependencies/dependencies.md +++ b/docs/dependencies/dependencies.md @@ -1,6 +1,6 @@ -# Dependencies of `io.spine.tools:validation-context:2.0.0-SNAPSHOT.468` +# Dependencies of `io.spine.tools:validation-context:2.0.0-SNAPSHOT.469` ## Runtime 1. **Group** : be.cyberelf.nanoxml. **Name** : nanoxml. **Version** : 2.2.3. @@ -435,15 +435,15 @@ * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -864,11 +864,11 @@ * **Project URL:** [https://github.com/korlibs/korge-next](https://github.com/korlibs/korge-next) * **License:** [MIT](https://raw.githubusercontent.com/korlibs/korge-next/master/korge/LICENSE.txt) -1. **Group** : com.squareup. **Name** : kotlinpoet. **Version** : 2.4.0. +1. **Group** : com.squareup. **Name** : kotlinpoet. **Version** : 2.3.0. * **Project URL:** [https://github.com/square/kotlinpoet](https://github.com/square/kotlinpoet) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.squareup. **Name** : kotlinpoet-jvm. **Version** : 2.4.0. +1. **Group** : com.squareup. **Name** : kotlinpoet-jvm. **Version** : 2.3.0. * **Project URL:** [https://github.com/square/kotlinpoet](https://github.com/square/kotlinpoet) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1411,23 +1411,23 @@ * **Project URL:** [https://github.com/JetBrains/intellij-deps-trove4j](https://github.com/JetBrains/intellij-deps-trove4j) * **License:** [GNU LESSER GENERAL PUBLIC LICENSE 2.1](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1435,15 +1435,15 @@ * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1451,11 +1451,11 @@ * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1467,7 +1467,7 @@ * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1475,23 +1475,23 @@ * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1503,7 +1503,7 @@ * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1511,7 +1511,7 @@ * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1519,7 +1519,7 @@ * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1527,11 +1527,11 @@ * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1785,14 +1785,14 @@ The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using +This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.tools:validation-context-tests:2.0.0-SNAPSHOT.468` +# Dependencies of `io.spine.tools:validation-context-tests:2.0.0-SNAPSHOT.469` ## Runtime 1. **Group** : be.cyberelf.nanoxml. **Name** : nanoxml. **Version** : 2.2.3. @@ -2227,15 +2227,15 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2904,7 +2904,7 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2912,11 +2912,11 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2924,7 +2924,7 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2932,7 +2932,7 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2940,7 +2940,7 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2948,7 +2948,7 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2956,7 +2956,7 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2964,11 +2964,11 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2976,7 +2976,7 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2984,23 +2984,23 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -3008,11 +3008,11 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -3217,14 +3217,14 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using +This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.tools:validation-docs:2.0.0-SNAPSHOT.468` +# Dependencies of `io.spine.tools:validation-docs:2.0.0-SNAPSHOT.469` ## Runtime ## Compile, tests, and tooling @@ -3234,14 +3234,14 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Oct 20 16:20:29 WEST 2026** using +This report was generated on **Wed Oct 21 17:09:42 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.tools:validation-gradle-plugin:2.0.0-SNAPSHOT.468` +# Dependencies of `io.spine.tools:validation-gradle-plugin:2.0.0-SNAPSHOT.469` ## Runtime 1. **Group** : be.cyberelf.nanoxml. **Name** : nanoxml. **Version** : 2.2.3. @@ -3649,15 +3649,15 @@ This report was generated on **Tue Oct 20 16:20:29 WEST 2026** using * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -4545,23 +4545,23 @@ This report was generated on **Tue Oct 20 16:20:29 WEST 2026** using * **Project URL:** [https://github.com/JetBrains/intellij-deps-trove4j](https://github.com/JetBrains/intellij-deps-trove4j) * **License:** [GNU LESSER GENERAL PUBLIC LICENSE 2.1](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -4569,15 +4569,15 @@ This report was generated on **Tue Oct 20 16:20:29 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -4585,27 +4585,27 @@ This report was generated on **Tue Oct 20 16:20:29 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-gradle-plugin-annotations. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-gradle-plugin-annotations. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-gradle-plugin-api. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-gradle-plugin-api. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-gradle-plugins-bom. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-gradle-plugins-bom. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-native-utils. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-native-utils. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -4617,7 +4617,7 @@ This report was generated on **Tue Oct 20 16:20:29 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -4625,23 +4625,23 @@ This report was generated on **Tue Oct 20 16:20:29 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -4653,7 +4653,7 @@ This report was generated on **Tue Oct 20 16:20:29 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -4661,7 +4661,7 @@ This report was generated on **Tue Oct 20 16:20:29 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -4669,7 +4669,7 @@ This report was generated on **Tue Oct 20 16:20:29 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -4677,15 +4677,15 @@ This report was generated on **Tue Oct 20 16:20:29 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-util-io. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-util-io. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -4934,14 +4934,14 @@ This report was generated on **Tue Oct 20 16:20:29 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using +This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.tools:validation-java:2.0.0-SNAPSHOT.468` +# Dependencies of `io.spine.tools:validation-java:2.0.0-SNAPSHOT.469` ## Runtime 1. **Group** : be.cyberelf.nanoxml. **Name** : nanoxml. **Version** : 2.2.3. @@ -5376,15 +5376,15 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -5805,11 +5805,11 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://github.com/korlibs/korge-next](https://github.com/korlibs/korge-next) * **License:** [MIT](https://raw.githubusercontent.com/korlibs/korge-next/master/korge/LICENSE.txt) -1. **Group** : com.squareup. **Name** : kotlinpoet. **Version** : 2.4.0. +1. **Group** : com.squareup. **Name** : kotlinpoet. **Version** : 2.3.0. * **Project URL:** [https://github.com/square/kotlinpoet](https://github.com/square/kotlinpoet) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.squareup. **Name** : kotlinpoet-jvm. **Version** : 2.4.0. +1. **Group** : com.squareup. **Name** : kotlinpoet-jvm. **Version** : 2.3.0. * **Project URL:** [https://github.com/square/kotlinpoet](https://github.com/square/kotlinpoet) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -6352,23 +6352,23 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://github.com/JetBrains/intellij-deps-trove4j](https://github.com/JetBrains/intellij-deps-trove4j) * **License:** [GNU LESSER GENERAL PUBLIC LICENSE 2.1](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -6376,15 +6376,15 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -6392,11 +6392,11 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -6408,7 +6408,7 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -6416,23 +6416,23 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -6444,7 +6444,7 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -6452,7 +6452,7 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -6460,7 +6460,7 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -6468,11 +6468,11 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -6726,25 +6726,25 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using +This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.tools:validation-java-bundle:2.0.0-SNAPSHOT.468` +# Dependencies of `io.spine.tools:validation-java-bundle:2.0.0-SNAPSHOT.469` ## Runtime 1. **Group** : org.jetbrains. **Name** : annotations. **Version** : 13.0. * **Project URL:** [http://www.jetbrains.org](http://www.jetbrains.org) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -6765,11 +6765,11 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [http://www.jetbrains.org](http://www.jetbrains.org) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -6785,14 +6785,14 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Oct 20 16:20:29 WEST 2026** using +This report was generated on **Wed Oct 21 17:09:42 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.tools:validation-java-settings:2.0.0-SNAPSHOT.468` +# Dependencies of `io.spine.tools:validation-java-settings:2.0.0-SNAPSHOT.469` ## Runtime 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -6844,15 +6844,15 @@ This report was generated on **Tue Oct 20 16:20:29 WEST 2026** using * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -7296,23 +7296,23 @@ This report was generated on **Tue Oct 20 16:20:29 WEST 2026** using * **Project URL:** [https://github.com/JetBrains/intellij-deps-trove4j](https://github.com/JetBrains/intellij-deps-trove4j) * **License:** [GNU LESSER GENERAL PUBLIC LICENSE 2.1](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -7320,15 +7320,15 @@ This report was generated on **Tue Oct 20 16:20:29 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -7336,11 +7336,11 @@ This report was generated on **Tue Oct 20 16:20:29 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -7352,7 +7352,7 @@ This report was generated on **Tue Oct 20 16:20:29 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -7360,23 +7360,23 @@ This report was generated on **Tue Oct 20 16:20:29 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -7388,7 +7388,7 @@ This report was generated on **Tue Oct 20 16:20:29 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -7396,7 +7396,7 @@ This report was generated on **Tue Oct 20 16:20:29 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -7404,7 +7404,7 @@ This report was generated on **Tue Oct 20 16:20:29 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -7412,11 +7412,11 @@ This report was generated on **Tue Oct 20 16:20:29 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -7577,14 +7577,14 @@ This report was generated on **Tue Oct 20 16:20:29 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using +This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine:spine-validation-jvm-runtime:2.0.0-SNAPSHOT.468` +# Dependencies of `io.spine:spine-validation-jvm-runtime:2.0.0-SNAPSHOT.469` ## Runtime 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -7636,15 +7636,15 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -7826,11 +7826,11 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://github.com/korlibs/korge-next](https://github.com/korlibs/korge-next) * **License:** [MIT](https://raw.githubusercontent.com/korlibs/korge-next/master/korge/LICENSE.txt) -1. **Group** : com.squareup. **Name** : kotlinpoet. **Version** : 2.4.0. +1. **Group** : com.squareup. **Name** : kotlinpoet. **Version** : 2.3.0. * **Project URL:** [https://github.com/square/kotlinpoet](https://github.com/square/kotlinpoet) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : com.squareup. **Name** : kotlinpoet-jvm. **Version** : 2.4.0. +1. **Group** : com.squareup. **Name** : kotlinpoet-jvm. **Version** : 2.3.0. * **Project URL:** [https://github.com/square/kotlinpoet](https://github.com/square/kotlinpoet) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -8108,23 +8108,23 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://github.com/JetBrains/intellij-deps-trove4j](https://github.com/JetBrains/intellij-deps-trove4j) * **License:** [GNU LESSER GENERAL PUBLIC LICENSE 2.1](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -8132,15 +8132,15 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -8148,11 +8148,11 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -8164,7 +8164,7 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -8172,23 +8172,23 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -8200,7 +8200,7 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -8208,7 +8208,7 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -8216,7 +8216,7 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -8224,11 +8224,11 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk8. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -8389,14 +8389,14 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using +This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.tools:validation-consumer:2.0.0-SNAPSHOT.468` +# Dependencies of `io.spine.tools:validation-consumer:2.0.0-SNAPSHOT.469` ## Runtime 1. **Group** : be.cyberelf.nanoxml. **Name** : nanoxml. **Version** : 2.2.3. @@ -8831,15 +8831,15 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -9492,75 +9492,79 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -9743,14 +9747,14 @@ This report was generated on **Tue Oct 20 16:20:31 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using +This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.tools:validation-consumer-dependency:2.0.0-SNAPSHOT.468` +# Dependencies of `io.spine.tools:validation-consumer-dependency:2.0.0-SNAPSHOT.469` ## Runtime 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -10401,6 +10405,10 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -10409,11 +10417,11 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -10421,7 +10429,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -10429,7 +10437,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -10437,7 +10445,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -10445,7 +10453,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -10453,7 +10461,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -10461,11 +10469,11 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -10477,6 +10485,10 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.10. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -10485,23 +10497,23 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -10513,11 +10525,15 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -10658,14 +10674,14 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using +This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.tools:validation-extensions:2.0.0-SNAPSHOT.468` +# Dependencies of `io.spine.tools:validation-extensions:2.0.0-SNAPSHOT.469` ## Runtime 1. **Group** : be.cyberelf.nanoxml. **Name** : nanoxml. **Version** : 2.2.3. @@ -11100,15 +11116,15 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -11843,7 +11859,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -11851,11 +11867,11 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -11863,7 +11879,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -11871,7 +11887,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -11879,7 +11895,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -11887,7 +11903,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -11895,7 +11911,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -11903,11 +11919,11 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -11919,7 +11935,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -11927,23 +11943,23 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -11955,11 +11971,11 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -12100,14 +12116,14 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using +This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.tools:validation-runtime:2.0.0-SNAPSHOT.468` +# Dependencies of `io.spine.tools:validation-runtime:2.0.0-SNAPSHOT.469` ## Runtime 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -12159,15 +12175,15 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [http://www.jetbrains.org](http://www.jetbrains.org) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -12824,75 +12840,75 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -13080,14 +13096,14 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using +This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.tools:validation-time:2.0.0-SNAPSHOT.468` +# Dependencies of `io.spine.tools:validation-time:2.0.0-SNAPSHOT.469` ## Runtime 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -13139,15 +13155,15 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [http://www.jetbrains.org](http://www.jetbrains.org) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -13627,75 +13643,79 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -13838,14 +13858,14 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using +This report was generated on **Wed Oct 21 17:09:42 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.tools:validation-validating:2.0.0-SNAPSHOT.468` +# Dependencies of `io.spine.tools:validation-validating:2.0.0-SNAPSHOT.469` ## Runtime 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -14648,6 +14668,10 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -14656,11 +14680,11 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -14668,7 +14692,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -14676,7 +14700,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -14684,7 +14708,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -14692,7 +14716,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -14700,7 +14724,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -14708,11 +14732,11 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -14724,6 +14748,10 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.10. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -14732,23 +14760,23 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -14760,11 +14788,15 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -14956,14 +14988,14 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using +This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.tools:validation-validator:2.0.0-SNAPSHOT.468` +# Dependencies of `io.spine.tools:validation-validator:2.0.0-SNAPSHOT.469` ## Runtime 1. **Group** : be.cyberelf.nanoxml. **Name** : nanoxml. **Version** : 2.2.3. @@ -15398,15 +15430,15 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -16098,6 +16130,10 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -16106,11 +16142,11 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -16118,7 +16154,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -16126,7 +16162,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -16134,7 +16170,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -16142,7 +16178,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -16150,7 +16186,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -16158,11 +16194,11 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -16174,6 +16210,10 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.10. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -16182,23 +16222,23 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -16214,11 +16254,15 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -16405,14 +16449,14 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using +This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.tools:validation-validator-dependency:2.0.0-SNAPSHOT.468` +# Dependencies of `io.spine.tools:validation-validator-dependency:2.0.0-SNAPSHOT.469` ## Runtime 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -16551,6 +16595,10 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [http://www.jetbrains.org](http://www.jetbrains.org) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -16559,11 +16607,11 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-compat. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -16571,7 +16619,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-cri-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -16579,7 +16627,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -16587,7 +16635,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -16595,7 +16643,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -16603,7 +16651,7 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -16611,11 +16659,11 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -16631,23 +16679,23 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -16655,11 +16703,15 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-tooling-core. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -16679,14 +16731,14 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using +This report was generated on **Wed Oct 21 17:09:42 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). -# Dependencies of `io.spine.tools:validation-vanilla:2.0.0-SNAPSHOT.468` +# Dependencies of `io.spine.tools:validation-vanilla:2.0.0-SNAPSHOT.469` ## Runtime 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -16738,15 +16790,15 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [http://www.jetbrains.org](http://www.jetbrains.org) * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -17226,15 +17278,19 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.10. + * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) + * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + 1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.4.21. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.21. +1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.4.10. * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/) * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -17377,6 +17433,6 @@ This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue Oct 20 16:20:30 WEST 2026** using +This report was generated on **Wed Oct 21 17:09:42 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). \ No newline at end of file diff --git a/docs/dependencies/pom.xml b/docs/dependencies/pom.xml index 1289d5802f..0f484a5080 100644 --- a/docs/dependencies/pom.xml +++ b/docs/dependencies/pom.xml @@ -10,7 +10,7 @@ all modules and does not describe the project structure per-subproject. --> io.spine.tools validation -2.0.0-SNAPSHOT.468 +2.0.0-SNAPSHOT.469 2015 @@ -50,13 +50,13 @@ all modules and does not describe the project structure per-subproject. io.spine spine-base - 2.0.0-SNAPSHOT.461 + 2.0.0-SNAPSHOT.462 compile io.spine spine-format - 2.0.0-SNAPSHOT.461 + 2.0.0-SNAPSHOT.462 compile @@ -80,43 +80,43 @@ all modules and does not describe the project structure per-subproject. io.spine.tools compiler-api - 2.0.0-SNAPSHOT.079 + 2.0.0-SNAPSHOT.080 compile io.spine.tools compiler-backend - 2.0.0-SNAPSHOT.079 + 2.0.0-SNAPSHOT.080 compile io.spine.tools compiler-gradle-api - 2.0.0-SNAPSHOT.079 + 2.0.0-SNAPSHOT.080 compile io.spine.tools compiler-gradle-plugin - 2.0.0-SNAPSHOT.079 + 2.0.0-SNAPSHOT.080 compile io.spine.tools compiler-jvm - 2.0.0-SNAPSHOT.079 + 2.0.0-SNAPSHOT.080 compile io.spine.tools compiler-params - 2.0.0-SNAPSHOT.079 + 2.0.0-SNAPSHOT.080 compile io.spine.tools jvm-tools - 2.0.0-SNAPSHOT.426 + 2.0.0-SNAPSHOT.428 compile @@ -188,25 +188,25 @@ all modules and does not describe the project structure per-subproject. io.spine spine-logging - 2.0.0-SNAPSHOT.426 + 2.0.0-SNAPSHOT.427 test io.spine.tools base-testlib - 2.0.0-SNAPSHOT.215 + 2.0.0-SNAPSHOT.216 test io.spine.tools compiler-testlib - 2.0.0-SNAPSHOT.079 + 2.0.0-SNAPSHOT.080 test io.spine.tools logging-testlib - 2.0.0-SNAPSHOT.426 + 2.0.0-SNAPSHOT.427 test @@ -267,12 +267,12 @@ all modules and does not describe the project structure per-subproject. io.spine.tools compiler-cli-all - 2.0.0-SNAPSHOT.079 + 2.0.0-SNAPSHOT.080 io.spine.tools compiler-protoc-plugin - 2.0.0-SNAPSHOT.079 + 2.0.0-SNAPSHOT.080 io.spine.tools @@ -292,7 +292,7 @@ all modules and does not describe the project structure per-subproject. io.spine.tools prototap-protoc-plugin - 0.17.3 + 0.17.4 io.spine.tools @@ -357,22 +357,22 @@ all modules and does not describe the project structure per-subproject. org.jetbrains.kotlin kotlin-build-tools-compat - 2.4.21 + 2.4.10 org.jetbrains.kotlin kotlin-build-tools-impl - 2.4.21 + 2.4.10 org.jetbrains.kotlin kotlin-klib-commonizer-embeddable - 2.4.21 + 2.4.10 org.jetbrains.kotlin kotlin-scripting-compiler-embeddable - 2.4.21 + 2.4.10 From 6c41df6070dca40d60ff0c6b3f29850150a7dcd1 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Wed, 21 Oct 2026 20:39:58 +0100 Subject: [PATCH 10/17] Update local dependency pins --- buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt index fc2cc67e8d..96fbbb284c 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt @@ -24,7 +24,7 @@ package io.spine.dependency.local "unused" /* Some subprojects do not use all Logging artifacts. */, ) object Logging { - const val version = "2.0.0-SNAPSHOT.427" + const val version = "2.0.0-SNAPSHOT.428" const val group = Spine.group const val loggingArtifact = "spine-logging" From 450ba7c993c1f9d75b080843653ea0db5b4409fa Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Wed, 21 Oct 2026 20:50:49 +0100 Subject: [PATCH 11/17] Update dependency reports --- docs/dependencies/dependencies.md | 34 +++++++++++++++---------------- docs/dependencies/pom.xml | 4 ++-- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/docs/dependencies/dependencies.md b/docs/dependencies/dependencies.md index e50039dd4e..ae8591a4ae 100644 --- a/docs/dependencies/dependencies.md +++ b/docs/dependencies/dependencies.md @@ -1785,7 +1785,7 @@ The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using +This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -3217,7 +3217,7 @@ This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using +This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -3234,7 +3234,7 @@ This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 17:09:42 WEST 2026** using +This report was generated on **Wed Oct 21 20:50:30 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -4934,7 +4934,7 @@ This report was generated on **Wed Oct 21 17:09:42 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using +This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -6726,7 +6726,7 @@ This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using +This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -6785,7 +6785,7 @@ This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 17:09:42 WEST 2026** using +This report was generated on **Wed Oct 21 20:50:30 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -7577,7 +7577,7 @@ This report was generated on **Wed Oct 21 17:09:42 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using +This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -8389,7 +8389,7 @@ This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using +This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -9747,7 +9747,7 @@ This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using +This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -10674,7 +10674,7 @@ This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using +This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -12116,7 +12116,7 @@ This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using +This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -13096,7 +13096,7 @@ This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using +This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -13858,7 +13858,7 @@ This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 17:09:42 WEST 2026** using +This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -14988,7 +14988,7 @@ This report was generated on **Wed Oct 21 17:09:42 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using +This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -16449,7 +16449,7 @@ This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using +This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -16731,7 +16731,7 @@ This report was generated on **Wed Oct 21 17:09:43 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 17:09:42 WEST 2026** using +This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -17433,6 +17433,6 @@ This report was generated on **Wed Oct 21 17:09:42 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 17:09:42 WEST 2026** using +This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). \ No newline at end of file diff --git a/docs/dependencies/pom.xml b/docs/dependencies/pom.xml index 0f484a5080..4dafafda96 100644 --- a/docs/dependencies/pom.xml +++ b/docs/dependencies/pom.xml @@ -188,7 +188,7 @@ all modules and does not describe the project structure per-subproject. io.spine spine-logging - 2.0.0-SNAPSHOT.427 + 2.0.0-SNAPSHOT.428 test @@ -206,7 +206,7 @@ all modules and does not describe the project structure per-subproject. io.spine.tools logging-testlib - 2.0.0-SNAPSHOT.427 + 2.0.0-SNAPSHOT.428 test From eed8ab11ba725dc95cb21ed5c9e069b264858306 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 22 Oct 2026 15:03:56 +0100 Subject: [PATCH 12/17] Update shared agent tooling and config (./config/pull) Co-Authored-By: Claude Opus 5.5 --- .github/workflows/publish.yml | 2 +- .../dependency/lib/OpenTelemetryKotlin.kt | 20 + .../kotlin/io/spine/dependency/local/Base.kt | 2 +- .../io/spine/dependency/local/BaseTypes.kt | 2 +- .../io/spine/dependency/local/Compiler.kt | 2 +- .../spine/dependency/local/CoreJvmCompiler.kt | 4 +- .../io/spine/dependency/local/DokkaTools.kt | 2 +- .../io/spine/dependency/local/Logging.kt | 2 +- .../io/spine/dependency/local/ProtoTap.kt | 2 +- .../io/spine/dependency/local/Reflect.kt | 2 +- .../io/spine/dependency/local/TestLib.kt | 2 +- .../io/spine/dependency/local/ToolBase.kt | 2 +- .../gradle/publish/CheckVersionIncrement.kt | 14 +- .../io/spine/gradle/publish/GitHubPackages.kt | 37 +- .../io/spine/gradle/publish/IncrementGuard.kt | 8 - .../io/spine/gradle/publish/MavenMetadata.kt | 19 +- .../gradle/publish/PublicationChecksums.kt | 17 +- .../spine/gradle/publish/PublicationSbom.kt | 2 +- .../spine/gradle/publish/PublicationState.kt | 672 ++++++++++++++++++ .../io/spine/gradle/publish/PublishingExts.kt | 18 + .../spine/gradle/publish/PublishingRepos.kt | 7 +- .../io/spine/gradle/publish/RemoteFile.kt | 356 ++++++++++ .../spine/gradle/publish/SpinePublishing.kt | 3 + .../kotlin/io/spine/gradle/repo/Repository.kt | 19 +- .../gradle/publish/ArtifactComponentsSpec.kt | 16 +- .../gradle/publish/IncrementGuardTest.kt | 48 +- .../gradle/publish/PublicationStateIgTest.kt | 531 ++++++++++++++ .../gradle/publish/PublicationStateSpec.kt | 350 +++++++++ .../io/spine/gradle/publish/RemoteFileSpec.kt | 405 +++++++++++ .../gradle/publish/SpinePublishingTest.kt | 16 +- .../report/coverage/FileExtensionsTest.kt | 16 +- config | 2 +- 32 files changed, 2493 insertions(+), 107 deletions(-) create mode 100644 buildSrc/src/main/kotlin/io/spine/gradle/publish/PublicationState.kt create mode 100644 buildSrc/src/main/kotlin/io/spine/gradle/publish/RemoteFile.kt create mode 100644 buildSrc/src/test/kotlin/io/spine/gradle/publish/PublicationStateIgTest.kt create mode 100644 buildSrc/src/test/kotlin/io/spine/gradle/publish/PublicationStateSpec.kt create mode 100644 buildSrc/src/test/kotlin/io/spine/gradle/publish/RemoteFileSpec.kt diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index aacee780fd..8dc7c913bb 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -30,7 +30,7 @@ on: jobs: publish: name: Publish to Maven repositories - uses: SpineEventEngine/config/.github/workflows/publishing.yml@604420cd7eab82b382c9a5c1d812be454552c27c + uses: SpineEventEngine/config/.github/workflows/publishing.yml@ad3dff0890c7716cbba3fe2ce17bf4fe5905a318 permissions: contents: read packages: write diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/lib/OpenTelemetryKotlin.kt b/buildSrc/src/main/kotlin/io/spine/dependency/lib/OpenTelemetryKotlin.kt index b473fdcfa8..63b3f44517 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/lib/OpenTelemetryKotlin.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/lib/OpenTelemetryKotlin.kt @@ -77,11 +77,31 @@ object OpenTelemetryKotlin : Dependency() { */ val compat = "$group:compat:$version" + /** + * The export machinery of the Kotlin SDK, including the `batchLogRecordProcessor` + * builder. + * + * Use it together with [implementation] and an exporter artifact, such as + * [exportersOtlp]. Like [core] and [implementation], it is for applications + * and tests. + */ + val exportersCore = "$group:exporters-core:$version" + + /** + * The OTLP exporters of the Kotlin SDK, such as `otlpHttpLogRecordExporter`, + * which send data over HTTP using Ktor. + * + * Use it together with [exportersCore]. + */ + val exportersOtlp = "$group:exporters-otlp:$version" + override val modules: List = listOf( "$group:api", "$group:noop", "$group:core", "$group:implementation", "$group:compat", + "$group:exporters-core", + "$group:exporters-otlp", ) } diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt index baaf5c7053..45c1d2f023 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt @@ -24,7 +24,7 @@ package io.spine.dependency.local "unused" /* Some subprojects do not use all Base artifacts. */, ) object Base { - const val version = "2.0.0-SNAPSHOT.462" + const val version = "2.0.0-SNAPSHOT.461" const val versionForBuildScript = "2.0.0-SNAPSHOT.461" const val group = Spine.group private const val prefix = "spine" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/BaseTypes.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/BaseTypes.kt index d92259dc5a..e0a828061a 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/BaseTypes.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/BaseTypes.kt @@ -23,7 +23,7 @@ package io.spine.dependency.local "ConstPropertyName" /* We use a custom convention for artifact properties. */, ) object BaseTypes { - const val version = "2.0.0-SNAPSHOT.226" + const val version = "2.0.0-SNAPSHOT.225" const val group = Spine.group const val artifact = "spine-base-types" const val lib = "$group:$artifact:$version" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt index 1582193469..137e830107 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt @@ -60,7 +60,7 @@ object Compiler : Dependency() { * The version of the Compiler dependencies. */ override val version: String - private const val fallbackVersion = "2.0.0-SNAPSHOT.080" + private const val fallbackVersion = "2.0.0-SNAPSHOT.069" /** * The distinct version of the Compiler used by other build tools. diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt index 3465c08c02..1af2694bb1 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt @@ -34,12 +34,12 @@ object CoreJvmCompiler { /** * The version used in the build classpath. */ - const val dogfoodingVersion = "2.0.0-SNAPSHOT.098" + const val dogfoodingVersion = "2.0.0-SNAPSHOT.097" /** * The version to be used for integration tests. */ - const val version = "2.0.0-SNAPSHOT.098" + const val version = "2.0.0-SNAPSHOT.097" /** * The ID of the Gradle plugin. diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/DokkaTools.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/DokkaTools.kt index 37bfae4ed7..6026d49f57 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/DokkaTools.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/DokkaTools.kt @@ -25,7 +25,7 @@ package io.spine.dependency.local ) object DokkaTools { const val group = Spine.toolsGroup - const val version = "2.0.0-SNAPSHOT.11" + const val version = "2.0.0-SNAPSHOT.10" /** * The artifact dropped its `spine-` prefix in `2.0.0-SNAPSHOT.9`, to diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt index 96fbbb284c..6d5f5b798c 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt @@ -24,7 +24,7 @@ package io.spine.dependency.local "unused" /* Some subprojects do not use all Logging artifacts. */, ) object Logging { - const val version = "2.0.0-SNAPSHOT.428" + const val version = "2.0.0-SNAPSHOT.426" const val group = Spine.group const val loggingArtifact = "spine-logging" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt index b9e6f18ecf..55154c6964 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt @@ -26,7 +26,7 @@ package io.spine.dependency.local ) object ProtoTap { const val group = Spine.toolsGroup - const val version = "0.17.4" + const val version = "0.17.3" const val gradlePluginId = "io.spine.prototap" const val api = "$group:prototap-api:$version" const val gradlePlugin = "$group:prototap-gradle-plugin:$version" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Reflect.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Reflect.kt index da3e6edc54..c07fd2f716 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Reflect.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Reflect.kt @@ -23,7 +23,7 @@ package io.spine.dependency.local "ConstPropertyName" /* We use a custom convention for artifact properties. */, ) object Reflect { - const val version = "2.0.0-SNAPSHOT.203" + const val version = "2.0.0-SNAPSHOT.202" const val group = Spine.group const val artifact = "spine-reflect" const val lib = "$group:$artifact:$version" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt index 312ed795d8..324a493653 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt @@ -23,7 +23,7 @@ package io.spine.dependency.local "ConstPropertyName" /* We use a custom convention for artifact properties. */, ) object TestLib { - const val version = "2.0.0-SNAPSHOT.216" + const val version = "2.0.0-SNAPSHOT.215" const val group = Spine.toolsGroup const val artifact = "base-testlib" const val lib = "$group:$artifact:$version" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt index bb675bca2d..2a8a255ac6 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt @@ -32,7 +32,7 @@ package io.spine.dependency.local ) object ToolBase { const val group = Spine.toolsGroup - const val version = "2.0.0-SNAPSHOT.428" + const val version = "2.0.0-SNAPSHOT.426" const val dogfoodingVersion = "2.0.0-SNAPSHOT.426" const val archive = "$group:archive:$version" diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/publish/CheckVersionIncrement.kt b/buildSrc/src/main/kotlin/io/spine/gradle/publish/CheckVersionIncrement.kt index f43f01927e..cfb0fa0fef 100644 --- a/buildSrc/src/main/kotlin/io/spine/gradle/publish/CheckVersionIncrement.kt +++ b/buildSrc/src/main/kotlin/io/spine/gradle/publish/CheckVersionIncrement.kt @@ -235,7 +235,7 @@ abstract class CheckVersionIncrement : DefaultTask() { */ private fun checkArtifactNotPublished(path: String) { val artifact = "$path/${MavenMetadata.FILE_NAME}" - val repositories = targetRepositories() + val repositories = repository.targets() var found = false for (repoUrl in repositories) { val metadata = fetch(repoUrl, artifact) ?: continue @@ -252,18 +252,6 @@ abstract class CheckVersionIncrement : DefaultTask() { } } - /** - * Returns the URLs of the target repositories: the `snapshots` one, and - * the `releases` one unless it is the same destination. - */ - private fun targetRepositories(): List { - val snapshots = repository.target(snapshots = true) - if (repository.hasOneTarget()) { - return listOf(snapshots) - } - return listOf(snapshots, repository.target(snapshots = false)) - } - /** * Throws if the [metadata] of the artifact at the given [path], fetched from [repoUrl], * lists the current [version]. diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/publish/GitHubPackages.kt b/buildSrc/src/main/kotlin/io/spine/gradle/publish/GitHubPackages.kt index 184c8218bb..3bf8dd0c62 100644 --- a/buildSrc/src/main/kotlin/io/spine/gradle/publish/GitHubPackages.kt +++ b/buildSrc/src/main/kotlin/io/spine/gradle/publish/GitHubPackages.kt @@ -19,6 +19,7 @@ import io.spine.gradle.repo.Repository import io.spine.gradle.buildDirectory import net.lingala.zip4j.ZipFile import org.gradle.api.Project +import org.gradle.api.artifacts.repositories.MavenArtifactRepository /** * Maven repositories of Spine Event Engine projects hosted at GitHub Packages. @@ -26,19 +27,45 @@ import org.gradle.api.Project internal object GitHubPackages { /** - * Obtains an instance of the GitHub Packages repository with the given name. + * The name of the GitHub Packages repository. + * + * The Maven repository that a project publishes to is named after it: + * `GitHub-Packages` for releases, and `GitHub-Packages-snapshots` for snapshots + * (see `Repository.name(snapshots)`). */ - fun repository(repoName: String): Repository { + const val repositoryName = "GitHub-Packages" + + /** + * Obtains an instance of the GitHub Packages repository of the given GitHub repository. + * + * @param slug The name of the GitHub repository of Spine Event Engine, without + * the organization, such as `core-jvm`. + */ + fun repository(slug: String): Repository { val githubActor: String = actor() - val url = "https://maven.pkg.github.com/SpineEventEngine/$repoName" + val url = "https://maven.pkg.github.com/SpineEventEngine/$slug" return Repository( - name = "GitHub-Packages", + name = repositoryName, releases = url, snapshots = url ) { project -> project.credentialsWithToken(githubActor) } } - private fun actor(): String { + /** + * Tells whether the given Maven repository is a GitHub Packages one, as registered + * for publishing by [repository]. + * + * The name tells it, whichever repository at GitHub Packages the [candidate] is. + */ + fun isRepository(candidate: MavenArtifactRepository): Boolean = + candidate.name in listOf(false, true).map { snapshots -> + Repository.publishingName(name = repositoryName, snapshots = snapshots) + } + + /** + * Obtains the user to authenticate with at GitHub Packages, along with a token. + */ + fun actor(): String { var githubActor: String? = System.getenv("GITHUB_ACTOR") githubActor = if (githubActor.isNullOrEmpty()) { "developers@spine.io" diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/publish/IncrementGuard.kt b/buildSrc/src/main/kotlin/io/spine/gradle/publish/IncrementGuard.kt index 121cc201a1..52415b40f7 100644 --- a/buildSrc/src/main/kotlin/io/spine/gradle/publish/IncrementGuard.kt +++ b/buildSrc/src/main/kotlin/io/spine/gradle/publish/IncrementGuard.kt @@ -21,7 +21,6 @@ import io.spine.gradle.SpineTaskGroup import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.Task -import org.gradle.api.publish.maven.MavenPublication import org.gradle.api.publish.maven.tasks.PublishToMavenLocal /** @@ -219,10 +218,3 @@ private fun Project.publishedArtifactPaths(): Set = mavenPublications() .map { it.repositoryPath } .toSet() - -/** - * The path to the artifact of this publication in a Maven repository, - * such as `io/spine/spine-base`. - */ -private val MavenPublication.repositoryPath: String - get() = "${groupId.replace('.', '/')}/$artifactId" diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/publish/MavenMetadata.kt b/buildSrc/src/main/kotlin/io/spine/gradle/publish/MavenMetadata.kt index 532ee9e5e4..2f9c779f61 100644 --- a/buildSrc/src/main/kotlin/io/spine/gradle/publish/MavenMetadata.kt +++ b/buildSrc/src/main/kotlin/io/spine/gradle/publish/MavenMetadata.kt @@ -16,7 +16,6 @@ package io.spine.gradle.publish import com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES import com.fasterxml.jackson.dataformat.xml.XmlMapper -import java.io.FileNotFoundException import java.net.URL /** @@ -50,16 +49,16 @@ internal data class MavenMetadata(var versioning: Versioning = Versioning()) { * * If the document could not be found, assumes that the module was never * released and thus has no metadata. + * + * The document is read by [RemoteFile], which bounds the read with timeouts + * and retries it after a transient failure. + * + * @param url The URL of the document. + * @param authorization The value of the `Authorization` header to send, if any. */ - fun fetchAndParse(url: URL): MavenMetadata? { - return try { - url.openStream().use { stream -> - mapper.readValue(stream, MavenMetadata::class.java) - } - } catch (_: FileNotFoundException) { - null - } - } + fun fetchAndParse(url: URL, authorization: String? = null): MavenMetadata? = + RemoteFile.readText(url, authorization) + ?.let { mapper.readValue(it, MavenMetadata::class.java) } } } diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/publish/PublicationChecksums.kt b/buildSrc/src/main/kotlin/io/spine/gradle/publish/PublicationChecksums.kt index a49f8a6bb0..7d6cf7e998 100644 --- a/buildSrc/src/main/kotlin/io/spine/gradle/publish/PublicationChecksums.kt +++ b/buildSrc/src/main/kotlin/io/spine/gradle/publish/PublicationChecksums.kt @@ -322,14 +322,19 @@ private fun Project.publishedArtifacts(): Map { mavenPublications().forEach { publication -> publication.rejectMavenSnapshot() - val base = "${publication.artifactId}-${publication.version}" publication.artifacts.forEach { artifact -> - val classifier = artifact.classifier?.takeIf { it.isNotEmpty() } - val suffix = classifier?.let { "-$it" } ?: "" - record("$base$suffix.${artifact.extension}", artifact.file) + val name = publication.publishedName( + classifier = artifact.classifier, + extension = artifact.extension + ) + record(name, artifact.file) + } + pomFileOf(publication)?.let { + record(publication.publishedName(classifier = null, extension = "pom"), it) + } + moduleFileOf(publication)?.let { + record(publication.publishedName(classifier = null, extension = "module"), it) } - pomFileOf(publication)?.let { record("$base.pom", it) } - moduleFileOf(publication)?.let { record("$base.module", it) } } return result } diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/publish/PublicationSbom.kt b/buildSrc/src/main/kotlin/io/spine/gradle/publish/PublicationSbom.kt index b6d3817ace..e32c622fdf 100644 --- a/buildSrc/src/main/kotlin/io/spine/gradle/publish/PublicationSbom.kt +++ b/buildSrc/src/main/kotlin/io/spine/gradle/publish/PublicationSbom.kt @@ -110,7 +110,7 @@ internal object PublicationSbom { /** * The extension of a published SBOM, as in `-.spdx.json`. */ - private const val sbomExtension = "spdx.json" + const val sbomExtension = "spdx.json" /** * The [platform][KotlinTarget.platform] under which a JVM module looks up the modules diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/publish/PublicationState.kt b/buildSrc/src/main/kotlin/io/spine/gradle/publish/PublicationState.kt new file mode 100644 index 0000000000..4384ea4306 --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/gradle/publish/PublicationState.kt @@ -0,0 +1,672 @@ +/* + * Copyright 2026 CodeMatters, Lda. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions + * and limitations under the License. + */ + +package io.spine.gradle.publish + +import io.spine.gradle.SpineTaskGroup +import java.net.URI +import java.net.URL +import java.util.Base64 +import java.util.concurrent.Callable +import java.util.concurrent.ExecutionException +import java.util.concurrent.Executors +import java.util.concurrent.Future +import org.gradle.api.DefaultTask +import org.gradle.api.GradleException +import org.gradle.api.Project +import org.gradle.api.artifacts.repositories.MavenArtifactRepository +import org.gradle.api.file.RegularFileProperty +import org.gradle.api.provider.MapProperty +import org.gradle.api.provider.Property +import org.gradle.api.provider.SetProperty +import org.gradle.api.publish.PublishingExtension +import org.gradle.api.publish.maven.MavenPublication +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.Optional +import org.gradle.api.tasks.OutputFile +import org.gradle.api.tasks.TaskAction +import org.gradle.api.tasks.UntrackedTask + +/** + * Tells whether the Maven publications of the build are already published. + * + * The `Publish` workflow runs this task before it builds anything. Every version is + * immutable in the registries, which reject any overwrite, so a run can upload only + * a version that nobody has uploaded before. The task looks for the files of each + * publication in each of its destinations — the remote repositories its project + * publishes to, such as Artifact Registry and GitHub Packages — and decides: + * + * - no file of any publication is there — `unpublished`, the run publishes; + * - every publication is complete in every destination, and every copy of the SBOMs + * published next to the artifacts names the [commit] — `published`: an earlier run of + * the same commit uploaded the version, e.g. a duplicate run of one push, and this + * run has nothing to do; + * - any other state fails the task, before a single upload. A gap anywhere — a file + * or a whole publication missing from a destination — is left over from a failed + * run, or from GitHub Packages pruning the version. A version published from another + * commit, in any destination, is a collision. A version with an SBOM copy naming no + * commit, or with no commit to compare, cannot be confirmed as this run's. No run can + * publish any of these. + * + * The state is written to the [stateFile] as `unpublished` or `published`. + * + * A publication is complete in a destination when the destination lists its version in + * `maven-metadata.xml`, and has each of its [files]. The Gradle module metadata + * (`.module`) is not among them, as no public API tells at configuration time whether + * a publication has it. It is required only to be in all destinations of a publication, + * or in none. + * + * Repositories not served over HTTP(S), such as a directory on disk, are not searched: + * a CI build starts with them empty, so they never hold a version published before. + * GitHub Packages is read with a token (see [gitHubPackages]); any other repository is + * read anonymously, so a repository that needs credentials to be read fails the task. + * + * An SBOM is the evidence of the commit because it records the revision it was built + * from (see [PublicationSbom]), and no other published file does. A publication without + * an SBOM, such as a Gradle plugin marker, takes no part in the decision about the commit. + */ +@UntrackedTask(because = "The state lives in remote repositories, not in local outputs.") +abstract class PublicationState : DefaultTask() { + + /** + * The versions of the publications to look up, keyed by the path to the artifact in + * a Maven repository, such as `io/spine/spine-base`. + */ + @get:Input + abstract val publications: MapProperty + + /** + * The names of the files of each publication, keyed by the path to the artifact. + * + * The names are those of the artifacts and the POM, such as + * `spine-base-2.0.0.jar` or `spine-base-2.0.0.pom`. + */ + @get:Input + abstract val files: MapProperty> + + /** + * The URLs of the destinations of each publication, keyed by the path to the artifact. + */ + @get:Input + abstract val destinations: MapProperty> + + /** + * The URLs of the [destinations] that are GitHub Packages repositories. + * + * GitHub Packages serves nothing without a token, so the task reads these with + * the one in the `GITHUB_TOKEN` environment variable, and sends it nowhere else. + */ + @get:Input + abstract val gitHubPackages: SetProperty + + /** + * The commit being published. + * + * Absent outside GitHub Actions, where `GITHUB_SHA` is not set. In that case, + * a version that is already published cannot be attributed to any commit, and + * fails the task. + */ + @get:Input + @get:Optional + abstract val commit: Property + + /** + * The file to write the state to. + * + * The task deletes the file when it starts, so a failed task leaves none. + */ + @get:OutputFile + abstract val stateFile: RegularFileProperty + + @TaskAction + fun lookUp() { + val file = stateFile.get().asFile + file.delete() + val versions = publications.get() + if (versions.isEmpty()) { + logger.warn( + "No project publishes to a remote repository," + + " so there is no publication to look up." + ) + } + val inspector = Inspector( + files = files.get(), + destinations = destinations.get(), + gitHubPackages = gitHubPackages.get(), + gitHubAuthorization = gitHubAuthorization() + ) + val findings = inspector.inspectAll(versions) + findings.forEach { logger.lifecycle(it.describe()) } + val currentCommit = commit.orNull + val decision = Verdict.of(findings = findings, commit = currentCommit) + val state = decision.state ?: throw GradleException( + explain(decision = decision, findings = findings, commit = currentCommit) + ) + file.parentFile.mkdirs() + file.writeText("$state\n") + logger.lifecycle("The publication state is `$state`.") + } + + /** + * Obtains the `Authorization` header for reading the [gitHubPackages], if there are + * any, with the token in the `GITHUB_TOKEN` environment variable. + * + * @throws GradleException if there is a GitHub Packages repository to read, but + * no token. + */ + private fun gitHubAuthorization(): String? { + val repositories = gitHubPackages.get() + if (repositories.isEmpty()) { + return null + } + val token = System.getenv("GITHUB_TOKEN") + if (token.isNullOrBlank()) { + throw GradleException( + "Reading the GitHub Packages repository " + + repositories.joinToString { "`$it`" } + + " requires a token in the `GITHUB_TOKEN` environment variable." + ) + } + val credentials = "${GitHubPackages.actor()}:$token" + return "Basic " + Base64.getEncoder().encodeToString(credentials.toByteArray()) + } + + private fun explain(decision: Verdict, findings: List, commit: String?): String { + val reason = when (decision) { + Verdict.PARTIAL -> explainPartial(findings) + Verdict.COLLISION -> { + val others = findings.flatMap { it.commits }.toSet() - commit + val from = if (others.size == 1) "another commit" else "other commits" + """ + The version is published from $from: ${others.joinToString { "`$it`" }}, + while this build publishes `$commit`. + """.trimIndent() + } + Verdict.UNCONFIRMED -> if (commit == null) { + "The version is published, but this build cannot tell which commit" + + " it publishes: `GITHUB_SHA` is not set." + } else { + "The version is published, but a published SBOM does not name the commit" + + " it was published from." + } + Verdict.UNPUBLISHED, Verdict.PUBLISHED -> + error("The verdict `$decision` needs no explanation.") + } + return reason + "\n" + + """ + The registries reject overwrites, so no run can publish this version. + Bump the version in `version.gradle.kts`: the run of that merge publishes + the new version. + """.trimIndent() + } + + private fun explainPartial(findings: List): String { + val incomplete = findings.filter { it.presence != Presence.COMPLETE } + val gaps = incomplete.flatMap { finding -> + when (finding.presence) { + Presence.ABSENT -> listOf("${finding.label}: the whole publication") + Presence.PARTIAL, Presence.COMPLETE -> + finding.gaps.map { "${finding.label}: $it" } + } + } + val gitHub = gitHubPackages.get() + val gitHubOnly = incomplete.all { finding -> + finding.presence == Presence.PARTIAL && finding.incomplete.all { it in gitHub } + } + val pruned = if (gitHubOnly) { + "\nEvery gap is in GitHub Packages, which keeps only the latest snapshot versions" + + " of a package. If the version is an old one, it was pruned from there," + + " and the failure needs no action; if it is the latest, follow the advice" + + " below." + } else { + "" + } + return "The version is partially published. Missing:\n" + + gaps.joinToString(separator = "\n") { " - $it" } + + pruned + } + + /** + * The files of a publication held by one of its destinations. + * + * @property destination The URL of the repository. + * @property listed Tells whether the repository lists the version of the publication. + * @property present The names of the files of the publication in the repository. + */ + internal data class Holding( + val destination: String, + val listed: Boolean, + val present: Set + ) + + /** + * How much of a publication is published. + */ + internal enum class Presence { + + /** + * Every destination lists the version and has every file, and the Gradle module + * metadata is in all of them or in none. + */ + COMPLETE, + + /** No destination lists the version or has any file. */ + ABSENT, + + /** + * Anything else: a file or the listing missing from some destination, or + * the module metadata in some destinations only. + */ + PARTIAL + } + + /** + * The published state of a Maven publication. + * + * @property path The path to the artifact in a Maven repository. + * @property version The version of the publication. + * @property presence How much of the publication is published. + * @property commits The commits named by the copies of the SBOM of the publication in + * its destinations, if it is [complete][Presence.COMPLETE]. Empty otherwise, or if it + * has no SBOM. + * @property gaps What is missing from each destination, if anything. + * @property incomplete The destinations missing anything of the publication. + * @property unconfirmed Tells whether the publication has an SBOM, and a copy of it in + * some destination names no commit, as one built outside GitHub Actions does. + */ + internal data class Finding( + val path: String, + val version: String, + val presence: Presence, + val commits: Set = emptySet(), + val gaps: List = emptyList(), + val incomplete: Set = emptySet(), + val unconfirmed: Boolean = false + ) { + + /** + * The coordinates of the publication for the messages of the task. + */ + val label: String + get() = "`$path:$version`" + + /** + * Describes the finding for the build log. + */ + fun describe(): String = when (presence) { + Presence.ABSENT -> "$label is not published." + Presence.PARTIAL -> "$label is partially published; missing: ${gaps.joinToString()}." + Presence.COMPLETE -> { + val from = commits.joinToString { "`$it`" } + when { + commits.isEmpty() -> "$label is published, with no SBOM naming its commit." + unconfirmed -> "$label is published from $from, but a copy of its SBOM" + + " names no commit." + else -> "$label is published from $from." + } + } + } + } + + /** + * The decision about the publications of a build. + * + * @property state The state written for the `Publish` workflow, or `null` if the + * version cannot be published, in which case the task fails. + */ + internal enum class Verdict(val state: String?) { + + /** No publication is published, or there is none to look up. */ + UNPUBLISHED("unpublished"), + + /** + * Every publication is complete in every destination, and every copy of the SBOMs + * names the commit being published. + */ + PUBLISHED("published"), + + /** + * Some publications, or some of their files, are missing from some destinations, + * and the rest is published. + */ + PARTIAL(null), + + /** Every publication is published, but a copy of an SBOM names another commit. */ + COLLISION(null), + + /** + * Every publication is published, but the commit cannot be compared: the commit + * being published is unknown, or a copy of an SBOM names no commit. + */ + UNCONFIRMED(null); + + companion object { + + /** + * Decides on the verdict for the [findings] of a build that publishes + * the given [commit]. + * + * @param findings The published states of all publications of the build. + * @param commit The commit being published, or `null` if it is unknown. + */ + fun of(findings: Collection, commit: String?): Verdict { + val commits = findings.flatMap { it.commits }.toSet() + return when { + findings.all { it.presence == Presence.ABSENT } -> UNPUBLISHED + findings.any { it.presence != Presence.COMPLETE } -> PARTIAL + commit == null || commits.isEmpty() -> UNCONFIRMED + commits != setOf(commit) -> COLLISION + findings.any { it.unconfirmed } -> UNCONFIRMED + else -> PUBLISHED + } + } + } + } + + companion object { + + /** + * The name of the task, registered in the root project. + */ + const val taskName = "publicationState" + + private const val stateFilePath = "publication/state.txt" + + /** + * Matches the revision in the source information that the SPDX Gradle Plugin + * writes for a module of this build: `git+@#[]`. + * + * The revision is a full commit hash: 40 hexadecimal digits of SHA-1, or 64 of SHA-256. + */ + private val scmRevision = Regex("""git\+[^"\s]+?@([0-9a-f]{64}|[0-9a-f]{40})#""") + + /** + * Obtains the revisions named in the source information of the given SBOM text. + * + * A revision that is not a full commit hash, such as the `unknown` written for + * a build outside GitHub Actions, is not matched. + */ + internal fun sbomRevisions(text: String): Set = + scmRevision.findAll(text).map { it.groupValues[1] }.toSet() + + /** + * Decides how much of a publication is published, from the [holdings] of its + * destinations, the [names] of its files, and the name of its [module] metadata. + */ + internal fun presenceOf( + holdings: List, + names: List, + module: String + ): Presence { + val modules = holdings.map { module in it.present }.toSet() + return when { + holdings.all { !it.listed && it.present.isEmpty() } -> Presence.ABSENT + holdings.all { it.listed && it.present.containsAll(names) } && + modules.size == 1 -> Presence.COMPLETE + else -> Presence.PARTIAL + } + } + + /** + * Describes what is missing from each of the [holdings] to complete + * the publication at the given [path]. + * + * @return the descriptions of the gaps keyed by the destination, for each + * destination missing anything. + */ + internal fun gapsOf( + holdings: List, + path: String, + names: List, + module: String + ): Map> { + val expected = if (holdings.any { module in it.present }) names + module else names + return holdings.associate { holding -> + val metadata = "${holding.destination}/$path/${MavenMetadata.FILE_NAME}" + val unlisted = if (holding.listed) { + emptyList() + } else { + listOf("the version in `$metadata`") + } + val absent = (expected - holding.present).map { + "`$it` in `${holding.destination}`" + } + holding.destination to unlisted + absent + }.filterValues { it.isNotEmpty() } + } + + /** + * Registers the task in the given [root] project, unless it is registered already. + * + * The publications are collected from every project of the build once all of + * them are evaluated, since the publishing handlers configure the coordinates and + * the artifacts in `afterEvaluate`. They are handed to the task as plain values, + * so that the task reads the state of no other project while it runs. + * + * Call it after [PublicationSbom.registerTasks]: both collect in `projectsEvaluated` + * callbacks, which run in the order of registration, and this task must see + * the SBOM artifacts that the other one adds to the publications. + */ + internal fun registerOn(root: Project) { + if (root.tasks.names.contains(taskName)) { + return + } + val task = root.tasks.register(taskName, PublicationState::class.java) { + group = SpineTaskGroup.name + description = "Tells whether the version of the Maven publications is published" + commit.set( + root.providers.environmentVariable("GITHUB_SHA").filter { it.isNotBlank() } + ) + stateFile.convention(root.layout.buildDirectory.file(stateFilePath)) + } + root.gradle.projectsEvaluated { + task.configure { + root.allprojects.forEach { collect(it) } + } + } + } + + /** + * Adds the publications of the given [project] to the inputs of this task, if + * the project publishes to a remote repository. + */ + private fun PublicationState.collect(project: Project) { + val repositories = project.remoteRepositories() + if (repositories.isEmpty()) { + return + } + project.mavenPublications().forEach { publication -> + val path = publication.repositoryPath + publications.put(path, publication.version) + files.put(path, publication.fileNames()) + destinations.put(path, repositories.map { it.location() }) + } + gitHubPackages.addAll( + repositories + .filter { GitHubPackages.isRepository(it) && it.carriesTokenSafely() } + .map { it.location() } + ) + } + } +} + +/** + * Looks up the files of publications in their destinations. + * + * Publications are looked up [in parallel][parallelism], as a build may have dozens of + * them, and each one takes a request per file per destination. + * + * @property files The names of the files of each publication. + * @property destinations The URLs of the destinations of each publication. + * @property gitHubPackages The destinations to read with the [gitHubAuthorization]. + * @property gitHubAuthorization The `Authorization` header for reading GitHub Packages. + */ +private class Inspector( + private val files: Map>, + private val destinations: Map>, + private val gitHubPackages: Set, + private val gitHubAuthorization: String? +) { + + /** + * Looks up the publications of the given versions, keyed by the paths to the artifacts. + */ + fun inspectAll(versions: Map): List { + val pool = Executors.newFixedThreadPool(parallelism) + try { + val lookups = versions.map { (path, version) -> + Callable { inspect(path = path, version = version) } + } + return pool.invokeAll(lookups).map { it.result() } + } finally { + pool.shutdownNow() + } + } + + private fun inspect(path: String, version: String): PublicationState.Finding { + val names = files[path].orEmpty() + val module = "${path.substringAfterLast('/')}-$version.module" + val holdings = destinations[path].orEmpty().map { destination -> + PublicationState.Holding( + destination = destination, + listed = lists(destination = destination, path = path, version = version), + present = (names + module) + .filter { has(destination = destination, file = "$path/$version/$it") } + .toSet() + ) + } + val presence = PublicationState.presenceOf( + holdings = holdings, + names = names, + module = module + ) + val sbomCopies = if (presence == PublicationState.Presence.COMPLETE) { + sbomCommits(holdings = holdings, path = path, version = version, names = names) + } else { + emptyList() + } + val gaps = PublicationState.gapsOf( + holdings = holdings, + path = path, + names = names, + module = module + ) + return PublicationState.Finding( + path = path, + version = version, + presence = presence, + commits = sbomCopies.flatten().toSet(), + gaps = gaps.values.flatten(), + incomplete = gaps.keys, + unconfirmed = sbomCopies.any { it.isEmpty() } + ) + } + + private fun lists(destination: String, path: String, version: String): Boolean { + val metadataUrl = url(destination, "$path/${MavenMetadata.FILE_NAME}") + val metadata = MavenMetadata.fetchAndParse(metadataUrl, authorization(destination)) + return metadata != null && version in metadata.versioning.versions + } + + private fun has(destination: String, file: String): Boolean = + RemoteFile.exists(url(destination, file), authorization(destination)) + + /** + * Obtains the commits named by each copy of the SBOM of a complete publication, one + * set for each of its [holdings]. + * + * Every copy is read, as each destination may hold a copy uploaded by another run. + * A copy naming no commit gives an empty set, and so does one that cannot be read. + * + * Returns an empty list if the publication has no SBOM. + */ + private fun sbomCommits( + holdings: List, + path: String, + version: String, + names: List + ): List> { + val sbom = names.firstOrNull { it.endsWith(".${PublicationSbom.sbomExtension}") } + ?: return emptyList() + return holdings.map { holding -> + val sbomUrl = url(holding.destination, "$path/$version/$sbom") + RemoteFile.readText(sbomUrl, authorization(holding.destination)) + ?.let(PublicationState::sbomRevisions) + ?: emptySet() + } + } + + private fun authorization(destination: String): String? = + gitHubAuthorization.takeIf { destination in gitHubPackages } + + private fun url(repository: String, path: String): URL = + URI.create("${repository.removeSuffix("/")}/$path").toURL() + + private fun Future.result(): T = + try { + get() + } catch (e: ExecutionException) { + throw e.cause ?: IllegalStateException(e) + } + + private companion object { + + /** + * The number of publications looked up at a time. + */ + const val parallelism = 4 + } +} + +/** + * The schemes of the URLs of remote repositories. + */ +private val remoteSchemes = setOf("http", "https") + +/** + * Obtains the remote Maven repositories this project publishes to. + * + * A repository with no URL is left out, as Gradle would fail to publish to it anyway. + */ +private fun Project.remoteRepositories(): List = + extensions.findByType(PublishingExtension::class.java) + ?.repositories + ?.withType(MavenArtifactRepository::class.java) + ?.filter { repository -> + // `getUrl()` returns `null` for an unset URL. + repository.url != null && repository.url.scheme in remoteSchemes + } + .orEmpty() + +/** + * Obtains the URL of this repository with no trailing slash. + */ +private fun MavenArtifactRepository.location(): String = url.toString().removeSuffix("/") + +/** + * Tells whether a token may be sent to this repository: over HTTPS, or to the loopback + * address of a test. + */ +private fun MavenArtifactRepository.carriesTokenSafely(): Boolean = + url.scheme == "https" || url.host in setOf("localhost", "127.0.0.1", "[::1]", "::1") + +/** + * Obtains the names of the files of this publication: its artifacts and the POM. + */ +private fun MavenPublication.fileNames(): List { + val artifactNames = artifacts.map { + publishedName(classifier = it.classifier, extension = it.extension) + } + return (artifactNames + publishedName(classifier = null, extension = "pom")).distinct() +} diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/publish/PublishingExts.kt b/buildSrc/src/main/kotlin/io/spine/gradle/publish/PublishingExts.kt index 5a876d213d..d7b616b9e6 100644 --- a/buildSrc/src/main/kotlin/io/spine/gradle/publish/PublishingExts.kt +++ b/buildSrc/src/main/kotlin/io/spine/gradle/publish/PublishingExts.kt @@ -69,6 +69,24 @@ internal fun Project.mavenPublications(): Collection { internal val MavenPublication.isPluginMarker: Boolean get() = name.endsWith("PluginMarkerMaven") +/** + * The path to the artifact of this publication in a Maven repository, + * such as `io/spine/spine-base`. + */ +internal val MavenPublication.repositoryPath: String + get() = "${groupId.replace('.', '/')}/$artifactId" + +/** + * Obtains the name under which a file of this publication with the given [classifier] + * and [extension] is published, such as `spine-base-2.0.0-javadoc.jar`. + * + * A `null` or empty [classifier] means the file has none, as the POM. + */ +internal fun MavenPublication.publishedName(classifier: String?, extension: String): String { + val suffix = classifier?.takeIf { it.isNotEmpty() }?.let { "-$it" } ?: "" + return "$artifactId-$version$suffix.$extension" +} + /** * Obtains an instance, if available, of [SpinePublishing] extension * applied to this project. diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/publish/PublishingRepos.kt b/buildSrc/src/main/kotlin/io/spine/gradle/publish/PublishingRepos.kt index 26c5533264..aac49f8f5f 100644 --- a/buildSrc/src/main/kotlin/io/spine/gradle/publish/PublishingRepos.kt +++ b/buildSrc/src/main/kotlin/io/spine/gradle/publish/PublishingRepos.kt @@ -24,7 +24,10 @@ object PublishingRepos { val cloudArtifactRegistry = CloudArtifactRegistry.repository /** - * Obtains a GitHub repository by the given name. + * Obtains the GitHub Packages repository of the given GitHub repository. + * + * @param slug The name of the GitHub repository of Spine Event Engine, without + * the organization, such as `core-jvm`. */ - fun gitHub(repoName: String): Repository = GitHubPackages.repository(repoName) + fun gitHub(slug: String): Repository = GitHubPackages.repository(slug) } diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/publish/RemoteFile.kt b/buildSrc/src/main/kotlin/io/spine/gradle/publish/RemoteFile.kt new file mode 100644 index 0000000000..e1e4e9adb5 --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/gradle/publish/RemoteFile.kt @@ -0,0 +1,356 @@ +/* + * Copyright 2026 CodeMatters, Lda. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions + * and limitations under the License. + */ + +package io.spine.gradle.publish + +import java.io.FileNotFoundException +import java.io.IOException +import java.net.HttpURLConnection +import java.net.MalformedURLException +import java.net.URI +import java.net.URISyntaxException +import java.net.URL +import java.net.URLConnection +import java.time.Instant +import java.time.ZonedDateTime +import java.time.format.DateTimeFormatter +import java.time.format.DateTimeParseException +import kotlin.time.Duration +import kotlin.time.Duration.Companion.seconds +import kotlin.time.toKotlinDuration + +/** + * Reads the files of a remote Maven repository, such as `maven-metadata.xml`. + * + * Each request is bounded by timeouts, so that an unresponsive registry fails the build + * instead of stalling it. A request that fails with an I/O error, a server error, + * a [transient] client error, or a rate-limit `403 Forbidden` is retried, up to three + * attempts in all, with the delay doubling from one second. A response with + * a `Retry-After` header makes the next attempt wait at least as long as it asks, + * up to a minute. A missing file is not an error, and a request the server refuses + * for good, such as one answered with `401 Unauthorized` or a plain `403 Forbidden`, + * is not retried. + * + * An `Authorization` header passed with a request is sent to the origin of the given URL + * only. A redirect to another origin, such as the storage GitHub Packages redirects + * a download to, is followed without it. A redirect is followed to an HTTP(S) URL only, + * and never from HTTPS to plain HTTP. + */ +internal object RemoteFile { + + private const val attempts = 3 + private const val maxRedirects = 5 + private val connectTimeout = 10.seconds + private val readTimeout = 30.seconds + private val initialBackoff = 1.seconds + + /** + * The longest wait before another attempt that a `Retry-After` header may impose. + */ + private val maxRetryAfter = 60.seconds + + /** + * `429 Too Many Requests`, which `HttpURLConnection` has no constant for. + */ + private const val tooManyRequests = 429 + + /** + * The HTTP statuses of successful responses, `2xx`. + */ + private val successes = HttpURLConnection.HTTP_OK.. withRetries(request: () -> T): T { + var backoff = initialBackoff + // All attempts but the last one, whose failure propagates. + repeat(attempts - 1) { + try { + return request() + } catch (e: IOException) { + val asked = (e as? RetryLaterException)?.delay ?: Duration.ZERO + Thread.sleep(maxOf(backoff, asked).inWholeMilliseconds) + backoff *= 2 + } + } + return request() + } + + private fun readOnce(url: URL, authorization: String?, redirectsLeft: Int): String? { + val connection = open(url, authorization) + return try { + if (connection is HttpURLConnection) { + connection.read(authorization = authorization, redirectsLeft = redirectsLeft) + } else { + connection.getInputStream().bufferedReader().use { it.readText() } + } + } catch (_: FileNotFoundException) { + // A `file:` URL to a missing file. + null + } finally { + (connection as? HttpURLConnection)?.errorStream?.close() + } + } + + /** + * Reads the response to this connection, following a redirect. + */ + private fun HttpURLConnection.read(authorization: String?, redirectsLeft: Int): String? = + when (status()) { + in missing -> null + in redirects -> { + check(redirectsLeft > 0) { "Too many redirects reading `${url.shown()}`." } + val next = target() + inputStream.close() + readOnce( + url = next, + authorization = authorization.takeIf { url.sameOrigin(next) }, + redirectsLeft = redirectsLeft - 1 + ) + } + else -> inputStream.bufferedReader().use { it.readText() } + } + + private fun existsOnce(url: URL, authorization: String?, redirectsLeft: Int): Boolean { + val connection = open(url, authorization) + return try { + if (connection is HttpURLConnection) { + connection.requestMethod = "HEAD" + connection.exists(authorization = authorization, redirectsLeft = redirectsLeft) + } else { + connection.getInputStream().close() + true + } + } catch (_: FileNotFoundException) { + // A `file:` URL to a missing file. + false + } finally { + (connection as? HttpURLConnection)?.errorStream?.close() + } + } + + /** + * Tells whether the response to this `HEAD` request finds a file, following + * a redirect with no `Authorization` header if it leads to another origin. + */ + private fun HttpURLConnection.exists(authorization: String?, redirectsLeft: Int): Boolean { + val status = status() + return when { + status in missing -> false + status in successes -> true + status in redirects -> { + check(redirectsLeft > 0) { "Too many redirects asking for `${url.shown()}`." } + val next = target() + existsOnce( + url = next, + authorization = authorization.takeIf { url.sameOrigin(next) }, + redirectsLeft = redirectsLeft - 1 + ) + } + else -> throw IOException("`${url.shown()}` answered with `$status`.") + } + } + + private fun open(url: URL, authorization: String?): URLConnection { + val connection = url.openConnection() + connection.connectTimeout = connectTimeout.inWholeMilliseconds.toInt() + connection.readTimeout = readTimeout.inWholeMilliseconds.toInt() + if (connection is HttpURLConnection) { + connection.instanceFollowRedirects = false + } + authorization?.let { connection.setRequestProperty("Authorization", it) } + return connection + } + + /** + * Obtains the status of the response if it is a success, a redirect, or a sign that + * there is no such file. + * + * @throws IOException for a server error, a [transient] client error, or a rate limit, + * which may go away on another attempt; a [RetryLaterException] if the response + * tells how long to wait before it. + * @throws IllegalStateException for any other client error. + */ + private fun HttpURLConnection.status(): Int { + val status = responseCode + if (status >= HttpURLConnection.HTTP_INTERNAL_ERROR || status in transient || + isRateLimited(status)) { + val message = "`${url.shown()}` answered with `$status $responseMessage`." + val delay = retryAfter(maxRetryAfter) + throw if (delay == null) IOException(message) else RetryLaterException(message, delay) + } + check(status !in clientErrors || status in missing) { + "Cannot read `${url.shown()}`: the server answered with `$status $responseMessage`." + } + return status + } + + /** + * Obtains the URL that this connection redirects to. + * + * @throws IllegalStateException if there is no such URL, or it may not be followed: + * a URL that is not HTTP(S), or a plain HTTP one redirected to from HTTPS. + */ + private fun HttpURLConnection.target(): URL { + val location = checkNotNull(getHeaderField("Location")) { + "`${url.shown()}` redirects with no `Location`." + } + // The cause is left out of the message: it would quote the location, whose query + // may carry a signature. + val target = resolve(location) + ?: error("`${url.shown()}` redirects to an invalid location.") + val allowed = target.protocol == url.protocol || + (url.protocol == "http" && target.protocol == "https") + check(allowed) { + "`${url.shown()}` redirects to `${target.shown()}`, which may not be followed." + } + return target + } +} + +/** + * Resolves the given redirect [location] against the URL of this connection. + * + * @return the resolved URL, or `null` if the location is not a valid URL. + */ +private fun HttpURLConnection.resolve(location: String): URL? = + try { + url.toURI().resolve(URI.create(location)).toURL() + } catch (_: IllegalArgumentException) { + null + } catch (_: URISyntaxException) { + null + } catch (_: MalformedURLException) { + null + } + +/** + * An I/O failure whose response asks to wait for the given [delay] before trying again. + */ +private class RetryLaterException(message: String, val delay: Duration) : IOException(message) + +/** + * Obtains how long this response asks to wait before trying again, by its `Retry-After` + * header in seconds or as an HTTP date, but no longer than the given [limit]. + * + * @return the delay, or `null` if the response has no such header, or it cannot be parsed. + */ +private fun HttpURLConnection.retryAfter(limit: Duration): Duration? { + val value = getHeaderField("Retry-After")?.trim() ?: return null + val delay = value.toLongOrNull()?.seconds ?: untilHttpDate(value) + return delay?.coerceIn(Duration.ZERO, limit) +} + +/** + * Obtains the time from now until the given HTTP date, such as + * `Wed, 21 Oct 2026 07:28:00 GMT`. + * + * @return the time until the date, or `null` if [value] is not an HTTP date. + */ +private fun untilHttpDate(value: String): Duration? = + try { + val date = ZonedDateTime.parse(value, DateTimeFormatter.RFC_1123_DATE_TIME) + java.time.Duration.between(Instant.now(), date.toInstant()).toKotlinDuration() + } catch (_: DateTimeParseException) { + null + } + +/** + * Tells whether this response with the given [status] refuses the request for exceeding + * a rate limit, as GitHub does with `403 Forbidden` and either a `Retry-After` header or + * an `X-RateLimit-Remaining: 0` header. + */ +private fun HttpURLConnection.isRateLimited(status: Int): Boolean = + status == HttpURLConnection.HTTP_FORBIDDEN && + (getHeaderField("Retry-After") != null || + getHeaderField("X-RateLimit-Remaining") == "0") + +/** + * Tells whether the given URL has the origin of this one: the protocol, the host, + * and the port. + */ +private fun URL.sameOrigin(other: URL): Boolean = + protocol == other.protocol && host.equals(other.host, ignoreCase = true) && + effectivePort() == other.effectivePort() + +private fun URL.effectivePort(): Int = if (port == -1) defaultPort else port + +/** + * Shows this URL with no query, which may carry a signature, as a redirect + * to a storage service does. + */ +private fun URL.shown(): String = "$protocol://$authority$path" diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/publish/SpinePublishing.kt b/buildSrc/src/main/kotlin/io/spine/gradle/publish/SpinePublishing.kt index 033df0c5dd..4af48a5633 100644 --- a/buildSrc/src/main/kotlin/io/spine/gradle/publish/SpinePublishing.kt +++ b/buildSrc/src/main/kotlin/io/spine/gradle/publish/SpinePublishing.kt @@ -329,6 +329,9 @@ open class SpinePublishing(private val project: Project) { } PublicationChecksums.registerTasks(project, projectsToPublish) PublicationSbom.registerTasks(project, projectsToPublish) + // After `PublicationSbom`: its `projectsEvaluated` callback adds the SBOM artifacts + // that the one of `PublicationState` collects. + PublicationState.registerOn(project.rootProject) } /** diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/repo/Repository.kt b/buildSrc/src/main/kotlin/io/spine/gradle/repo/Repository.kt index 8e747f370b..e2f80d2d63 100644 --- a/buildSrc/src/main/kotlin/io/spine/gradle/repo/Repository.kt +++ b/buildSrc/src/main/kotlin/io/spine/gradle/repo/Repository.kt @@ -49,6 +49,17 @@ data class Repository( * Serializes obtaining the credentials of all repositories (see [credentials]). */ private val credentialsLock = Any() + + /** + * Obtains the name used for publishing to a repository with the given [name]. + * + * @param snapshots If `true` the repository is used for publishing snapshots, + * and the suffix `-snapshots` is added to the given [name]. + * Otherwise, the function returns just [name]. + * @see Repository.name + */ + fun publishingName(name: String, snapshots: Boolean): String = + name + if (snapshots) "-snapshots" else "" } init { @@ -66,7 +77,7 @@ data class Repository( * and the suffix `-snapshots` will be added to the value of the [name] property. * Otherwise, the function returns just [name]. */ - fun name(snapshots: Boolean): String = name + if (snapshots) "-snapshots" else "" + fun name(snapshots: Boolean): String = publishingName(name, snapshots) /** * Obtains the target URL of the repository for publishing. @@ -79,6 +90,12 @@ data class Repository( */ fun hasOneTarget() = snapshots == releases + /** + * Obtains the URLs of the destinations of this repository: the `snapshots` one, and + * the `releases` one unless it is the same destination. + */ + fun targets(): List = listOf(snapshots, releases).distinct() + /** * Obtains the publishing password credentials to this repository. * diff --git a/buildSrc/src/test/kotlin/io/spine/gradle/publish/ArtifactComponentsSpec.kt b/buildSrc/src/test/kotlin/io/spine/gradle/publish/ArtifactComponentsSpec.kt index e4302976a7..8beb82745a 100644 --- a/buildSrc/src/test/kotlin/io/spine/gradle/publish/ArtifactComponentsSpec.kt +++ b/buildSrc/src/test/kotlin/io/spine/gradle/publish/ArtifactComponentsSpec.kt @@ -35,8 +35,8 @@ import org.junit.jupiter.api.Test @DisplayName("`ArtifactComponents` should") internal class ArtifactComponentsSpec { - @Nested - inner class `describe a bundled package` { + @Nested inner class + `describe a bundled package` { @Test fun `as contained in the artifact rather than a dependency of it`() { @@ -157,8 +157,8 @@ internal class ArtifactComponentsSpec { } } - @Nested - inner class `keep` { + @Nested inner class + keep { @Test fun `the dependencies of the artifact as they are`() { @@ -192,8 +192,8 @@ internal class ArtifactComponentsSpec { } } - @Nested - inner class `leave out` { + @Nested inner class + `leave out` { @Test fun `a package the artifact neither depends on nor bundles`() { @@ -269,8 +269,8 @@ internal class ArtifactComponentsSpec { } } - @Nested - inner class `reject a document` { + @Nested inner class + `reject a document` { @Test fun `describing no package`() { diff --git a/buildSrc/src/test/kotlin/io/spine/gradle/publish/IncrementGuardTest.kt b/buildSrc/src/test/kotlin/io/spine/gradle/publish/IncrementGuardTest.kt index 9bcbc4e4ef..d315b58394 100644 --- a/buildSrc/src/test/kotlin/io/spine/gradle/publish/IncrementGuardTest.kt +++ b/buildSrc/src/test/kotlin/io/spine/gradle/publish/IncrementGuardTest.kt @@ -43,8 +43,8 @@ import org.junit.jupiter.api.io.TempDir @DisplayName("`IncrementGuard` should") class IncrementGuardTest { - @Nested - inner class `require the version check` { + @Nested inner class + `require the version check` { @Test fun `for pull requests targeting default branches`() { @@ -59,8 +59,8 @@ class IncrementGuardTest { } } - @Nested - inner class `not require the version check` { + @Nested inner class + `not require the version check` { @Test fun `for pull requests targeting auxiliary branches`() { @@ -85,8 +85,8 @@ class IncrementGuardTest { } } - @Nested - inner class `actually run the check` { + @Nested inner class + `actually run the check` { @Test fun `on a CI pull request to a protected branch`() { @@ -99,8 +99,8 @@ class IncrementGuardTest { } } - @Nested - inner class `skip the check` { + @Nested inner class + `skip the check` { @Test fun `on a local build that does not publish`() { @@ -115,8 +115,8 @@ class IncrementGuardTest { } } - @Nested - inner class `compare against the base branch` { + @Nested inner class + `compare against the base branch` { @Test fun `inside the Version Guard workflow with a base branch`() { @@ -125,8 +125,8 @@ class IncrementGuardTest { } } - @Nested - inner class `not compare against the base branch` { + @Nested inner class + `not compare against the base branch` { @Test fun `outside the Version Guard workflow`() { @@ -142,8 +142,8 @@ class IncrementGuardTest { } } - @Nested - inner class `detect a Maven Local publish` { + @Nested inner class + `detect a Maven Local publish` { @Test fun `for the task's own project`() { @@ -180,8 +180,8 @@ class IncrementGuardTest { } } - @Nested - inner class `make 'checkVersionIncrement' a dependency of` { + @Nested inner class + `make 'checkVersionIncrement' a dependency of` { @Test fun `every Maven Local publishing task`() { @@ -195,8 +195,8 @@ class IncrementGuardTest { } } - @Nested - inner class `keep 'checkVersionIncrement' out of` { + @Nested inner class + `keep 'checkVersionIncrement' out of` { @Test fun `the 'check' lifecycle task`() { @@ -211,8 +211,8 @@ class IncrementGuardTest { } } - @Nested - inner class `configure 'checkVersionIncrement' with` { + @Nested inner class + `configure 'checkVersionIncrement' with` { @Test fun `the root directory of the build`() { @@ -321,8 +321,8 @@ class IncrementGuardTest { } } - @Nested - inner class `make 'checkVersionIncrement' fail` { + @Nested inner class + `make 'checkVersionIncrement' fail` { @TempDir lateinit var repoDir: File @@ -405,8 +405,8 @@ class IncrementGuardTest { } } - @Nested - inner class `make 'checkVersionIncrement' pass` { + @Nested inner class + `make 'checkVersionIncrement' pass` { @TempDir lateinit var repoDir: File diff --git a/buildSrc/src/test/kotlin/io/spine/gradle/publish/PublicationStateIgTest.kt b/buildSrc/src/test/kotlin/io/spine/gradle/publish/PublicationStateIgTest.kt new file mode 100644 index 0000000000..cc627509ae --- /dev/null +++ b/buildSrc/src/test/kotlin/io/spine/gradle/publish/PublicationStateIgTest.kt @@ -0,0 +1,531 @@ +/* + * Copyright 2026 CodeMatters, Lda. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions + * and limitations under the License. + */ + +package io.spine.gradle.publish + +import com.sun.net.httpserver.HttpExchange +import com.sun.net.httpserver.HttpServer +import io.kotest.matchers.shouldBe +import io.kotest.matchers.string.shouldContain +import io.kotest.matchers.string.shouldNotContain +import java.io.File +import java.net.InetAddress +import java.net.InetSocketAddress +import java.net.URI +import java.util.Base64 +import java.util.concurrent.TimeUnit +import java.util.concurrent.atomic.AtomicInteger +import org.gradle.testkit.runner.GradleRunner +import org.junit.jupiter.api.AfterAll +import org.junit.jupiter.api.BeforeAll +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.DisplayName +import org.junit.jupiter.api.Nested +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.TestInstance +import org.junit.jupiter.api.Timeout +import org.junit.jupiter.api.io.TempDir + +/** + * Runs `publicationState` in a build that really publishes to a loopback registry. + * + * `api` and `backend` are the modules of `spinePublishing`. The [registry] has two remote + * repositories: one like Artifact Registry, which serves anyone, and one like GitHub + * Packages, which serves nothing without the token and redirects the downloads of files + * to storage of its own. `api` publishes to both and to a local repository, `backend` + * to GitHub Packages only, and `docs` to a local repository only. No local repository + * may be searched. + * + * The build publishes once for the whole suite, after the check of the unpublished + * version. Each test then looks at a copy of what the build published, so that it may + * take files away from it. + */ +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +@Timeout(value = 5, unit = TimeUnit.MINUTES) +@DisplayName("`publicationState` task should") +internal class PublicationStateIgTest { + + /** + * The directory of the suite, holding the project and the repositories. + */ + private lateinit var workDir: File + + private lateinit var registry: Registry + + /** + * The repositories as the build published them. + */ + private lateinit var published: File + + /** + * The state written before anything was published, and the output of that build. + */ + private lateinit var unpublished: Pair + + private val copies = AtomicInteger() + + @BeforeAll + fun publish(@TempDir dir: File) { + workDir = dir + registry = Registry(root = workDir.resolve("registry").apply { mkdirs() }, token = token) + writeBuild() + val output = runner().build().output + unpublished = stateFile.readText().trim() to output + runner(task = "publish").build() + published = registry.root + } + + @BeforeEach + fun serveCopy() { + val copy = workDir.resolve("served-${copies.incrementAndGet()}") + published.copyRecursively(copy) + registry.root = copy + registry.leakedTokens.set(0) + } + + @AfterAll + fun stopRegistry() { + if (::registry.isInitialized) { + registry.close() + } + } + + @Test + fun `report the version unpublished before anything is published`() { + val (state, output) = unpublished + + state shouldBe "unpublished" + output shouldContain "`$api:$version` is not published." + } + + @Test + fun `report the version published when its SBOMs name the commit being published`() { + val output = runner().build().output + + stateFile.readText().trim() shouldBe "published" + output shouldContain "`$backend:$version` is published from `$commit`." + registry.leakedTokens.get() shouldBe 0 + } + + @Test + fun `not look in local repositories`() { + val local = project.resolve("local-repo") + val aside = workDir.resolve("local-repo-aside") + check(local.renameTo(aside)) + try { + val output = runner().build().output + + stateFile.readText().trim() shouldBe "published" + output shouldNotContain docs + } finally { + check(aside.renameTo(local)) + } + } + + @Nested inner class + `fail when missing from a repository` { + + @Test + fun `a classified artifact`() { + val jar = "spine-backend-$version-sources.jar" + registry.root.resolve("github/sample/$backend/$version/$jar").delete() + + val output = runner().buildAndFail().output + + output shouldContain "The version is partially published" + output shouldContain "`$jar` in `${registry.url}/github/sample`" + } + + @Test + fun `the artifact of the component`() { + val jar = "spine-api-$version.jar" + registry.root.resolve("ar/snapshots/$api/$version/$jar").delete() + + val output = runner().buildAndFail().output + + output shouldContain "`$jar` in `${registry.url}/ar/snapshots`" + } + + @Test + fun `the SBOM`() { + val sbom = "spine-api-$version.spdx.json" + registry.root.resolve("ar/snapshots/$api/$version/$sbom").delete() + + val output = runner().buildAndFail().output + + output shouldContain "`$sbom` in `${registry.url}/ar/snapshots`" + } + + @Test + fun `the module metadata`() { + val module = "spine-api-$version.module" + registry.root.resolve("ar/snapshots/$api/$version/$module").delete() + + val output = runner().buildAndFail().output + + output shouldContain "`$module` in `${registry.url}/ar/snapshots`" + output shouldNotContain "pruned" + } + + @Test + fun `a whole publication, telling that GitHub Packages may have pruned it`() { + registry.root.resolve("github/sample/$api").deleteRecursively() + + val output = runner().buildAndFail().output + + output shouldContain "The version is partially published" + output shouldContain "`$api:$version`: the version in " + + "`${registry.url}/github/sample/$api/maven-metadata.xml`" + output shouldContain "it was pruned from there" + } + } + + @Test + fun `fail when the version is published from another commit`() { + val output = runner(commit = otherCommit).buildAndFail().output + + output shouldContain "The version is published from another commit" + output shouldContain "`$commit`" + } + + @Test + fun `fail when a copy of an SBOM in one repository names another commit`() { + rewriteSbom(repository = "github/sample", path = api, revision = otherCommit) + + val output = runner().buildAndFail().output + + output shouldContain "The version is published from another commit: `$otherCommit`" + } + + @Test + fun `fail when a copy of an SBOM names no commit`() { + rewriteSbom(repository = "github/sample", path = backend, revision = "unknown") + + val output = runner().buildAndFail().output + + output shouldContain "a published SBOM does not name the commit" + } + + @Test + fun `fail when the commit being published is unknown`() { + val output = runner(commit = null).buildAndFail().output + + output shouldContain "this build cannot tell which commit it publishes" + output shouldContain "`GITHUB_SHA` is not set" + } + + @Test + fun `fail when there is no token to read GitHub Packages with`() { + val output = runner(token = null).buildAndFail().output + + output shouldContain "requires a token in the `GITHUB_TOKEN` environment variable" + } + + @Test + fun `fail when GitHub Packages refuses the token`() { + val output = runner(token = "wrong-token").buildAndFail().output + + output shouldContain "the server answered with `401" + registry.leakedTokens.get() shouldBe 0 + } + + @Test + fun `look the state up again when reusing the configuration cache`() { + val publishedCopy = registry.root + registry.root = workDir.resolve("nothing").apply { mkdirs() } + runner().withArguments(runner().arguments + "--configuration-cache").build() + stateFile.readText().trim() shouldBe "unpublished" + registry.root = publishedCopy + + val output = runner() + .withArguments(runner().arguments + "--configuration-cache") + .build() + .output + + output shouldContain "Reusing configuration cache." + stateFile.readText().trim() shouldBe "published" + } + + /** + * Rewrites the copy of the SBOM of the artifact at the given [path] in the given + * [repository] of the registry, so that it names the given [revision] instead of + * the commit the build published. + */ + private fun rewriteSbom(repository: String, path: String, revision: String) { + val artifactId = path.substringAfterLast('/') + val sbom = registry.root.resolve( + "$repository/$path/$version/$artifactId-$version.spdx.json" + ) + val text = sbom.readText() + check(commit in text) { "The SBOM `$sbom` does not name the commit `$commit`." } + sbom.writeText(text.replace(commit, revision)) + } + + private val project: File + get() = workDir.resolve("project") + + private val stateFile: File + get() = project.resolve("build/publication/state.txt") + + /** + * Creates a runner of the given [task], with the given [commit] as `GITHUB_SHA` and + * the given [token] as `GITHUB_TOKEN`. A `null` value leaves the variable unset, + * as outside GitHub Actions. + */ + private fun runner( + task: String = ":${PublicationState.taskName}", + commit: String? = Companion.commit, + token: String? = Companion.token + ): GradleRunner { + val environment = System.getenv() - ciVariables - "GITHUB_SHA" - "GITHUB_TOKEN" + + listOfNotNull( + commit?.let { "GITHUB_SHA" to it }, + token?.let { "GITHUB_TOKEN" to it } + ) + return GradleRunner.create() + .withProjectDir(project) + .withEnvironment(environment) + .withArguments(task, "--stacktrace") + } + + private fun writeBuild() { + listOf("api", "backend", "docs").forEach { module -> + project.resolve("$module/src/main/java/sample/$module/Stub.java").apply { + parentFile.mkdirs() + writeText("package sample.$module;\npublic class Stub {}\n") + } + } + project.resolve("settings.gradle.kts").writeText( + """ + rootProject.name = "state-sample" + include("api", "backend", "docs") + """.trimIndent() + ) + project.resolve("build.gradle.kts").writeText( + """ + buildscript { + dependencies { + classpath(files( + ${buildSrcClasspath()} + )) + } + } + + import io.spine.gradle.publish.spinePublishing + + allprojects { + group = "io.spine.sample" + version = "$version" + } + + subprojects { + apply(plugin = "java-library") + apply(plugin = "maven-publish") + $generatorStub + } + + spinePublishing { + modules = setOf("api", "backend") + destinations = emptySet() + } + + fun PublishingExtension.toRegistry() = repositories.maven { + name = "CloudArtifactRegistry-snapshots" + url = uri("${registry.url}/ar/snapshots") + } + + fun PublishingExtension.toGitHub() = repositories.maven { + name = "GitHub-Packages-snapshots" + url = uri("${registry.url}/github/sample") + credentials { + username = "spine" + password = "$token" + } + } + + fun PublishingExtension.toLocal() = repositories.maven { + name = "local" + url = uri("${'$'}{rootDir}/local-repo") + } + + project("api").the().apply { + toRegistry() + toGitHub() + toLocal() + } + + // GitHub Packages only, so that the SBOM is read from there, through a redirect. + project("backend").the().apply { + toGitHub() + } + + project("docs").the().apply { + publications { + create("docs") { + from(project("docs").components["java"]) + } + } + toLocal() + } + """.trimIndent() + ) + } + + /** + * Renders the classpath with the production classes of `buildSrc` as + * arguments of `files(...)`, for injection into the build script classpath + * of the generated build. + * + * The classpath comes from the `test` task in `buildSrc/build.gradle.kts`. + */ + private fun buildSrcClasspath(): String { + val classpath = requireNotNull(System.getProperty("buildSrc.classpath")) { + "The `buildSrc.classpath` system property is not set." + + " It is supplied by the `test` task in `buildSrc/build.gradle.kts`." + } + return classpath.split(File.pathSeparator).joinToString(",\n") { + " \"${File(it).invariantSeparatorsPath}\"" + } + } + + private companion object { + + const val version = "2.0.0-SNAPSHOT.575" + const val commit = "35054d78dfce2a0ead2ca79347ad57f74508977c" + const val otherCommit = "2b98e1801a0b3c4d5e6f708192a3b4c5d6e7f809" + const val token = "test-token" + + /** The artifacts of `api` and `backend`, named with the default prefix. */ + const val api = "io/spine/sample/spine-api" + const val backend = "io/spine/sample/spine-backend" + + /** The artifact of `docs`, named after the project by `maven-publish`. */ + const val docs = "io/spine/sample/docs" + + /** + * A task standing in for the Dokka one that `javadocJar` of `spinePublishing` + * depends on; the fixture does not apply Dokka. + */ + const val generatorStub = """tasks.register("dokkaGeneratePublicationJavadoc")""" + } +} + +/** + * A loopback Maven registry storing the uploaded files under its [root]. + * + * The files under `/ar` are served to anyone. Like GitHub Packages, the registry serves + * the files under `/github` only to a request carrying the [token], and redirects + * the download of any of them but `maven-metadata.xml` to storage of another origin. + * A token sent to `/ar` or to the storage counts as a [leaked one][leakedTokens]. + */ +private class Registry(@Volatile var root: File, private val token: String) : AutoCloseable { + + private val server = loopbackServer() + + /** + * The storage that the downloads from `/github` are redirected to. + */ + private val storage = loopbackServer() + + /** + * The number of requests that carried a token to where it does not belong. + */ + val leakedTokens = AtomicInteger() + + /** + * The URL of this registry. + */ + val url: String + get() = server.url() + + init { + server.createContext("/") { exchange -> exchange.use { respond(it) } } + storage.createContext("/") { exchange -> + exchange.use { + it.authorization()?.let { leakedTokens.incrementAndGet() } + serve(it, root.resolve(it.requestURI.path.removePrefix("/"))) + } + } + server.start() + storage.start() + } + + private fun respond(exchange: HttpExchange) { + val path = exchange.requestURI.path + val authorization = exchange.authorization() + val file = root.resolve(path.removePrefix("/")) + val gitHub = path.startsWith("/github/") + if (!gitHub && authorization != null) { + leakedTokens.incrementAndGet() + } + when { + gitHub && !authorization.carriesToken() -> { + exchange.requestBody.readBytes() + exchange.responseHeaders.add("WWW-Authenticate", "Basic realm=\"github\"") + exchange.sendResponseHeaders(401, -1) + } + exchange.requestMethod == "PUT" -> { + file.parentFile.mkdirs() + file.writeBytes(exchange.requestBody.readBytes()) + exchange.sendResponseHeaders(201, -1) + } + exchange.requestMethod == "HEAD" -> + exchange.sendResponseHeaders(if (file.isFile) 200 else 404, -1) + gitHub && file.isFile && file.name != MavenMetadata.FILE_NAME -> { + exchange.responseHeaders.add("Location", "${storage.url()}$path") + exchange.sendResponseHeaders(302, -1) + } + else -> serve(exchange, file) + } + } + + private fun serve(exchange: HttpExchange, file: File) { + if (!file.isFile) { + exchange.sendResponseHeaders(404, -1) + return + } + val bytes = file.readBytes() + exchange.sendResponseHeaders(200, bytes.size.toLong()) + exchange.responseBody.write(bytes) + } + + private fun String?.carriesToken(): Boolean { + val credentials = this?.takeIf { it.startsWith("Basic ") }?.removePrefix("Basic ") + ?: return false + val decoded = try { + String(Base64.getDecoder().decode(credentials)) + } catch (_: IllegalArgumentException) { + return false + } + return decoded.endsWith(":$token") + } + + override fun close() { + server.stop(0) + storage.stop(0) + } +} + +private fun loopbackServer(): HttpServer = + HttpServer.create(InetSocketAddress(InetAddress.getLoopbackAddress(), 0), 0) + +/** + * Obtains the URL of this server. + * + * The loopback address may be an IPv6 one, which [URI] encloses in square brackets. + */ +private fun HttpServer.url(): String = + URI("http", null, address.hostString, address.port, null, null, null).toString() + +private fun HttpExchange.authorization(): String? = requestHeaders.getFirst("Authorization") diff --git a/buildSrc/src/test/kotlin/io/spine/gradle/publish/PublicationStateSpec.kt b/buildSrc/src/test/kotlin/io/spine/gradle/publish/PublicationStateSpec.kt new file mode 100644 index 0000000000..844d245556 --- /dev/null +++ b/buildSrc/src/test/kotlin/io/spine/gradle/publish/PublicationStateSpec.kt @@ -0,0 +1,350 @@ +/* + * Copyright 2026 CodeMatters, Lda. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions + * and limitations under the License. + */ + +package io.spine.gradle.publish + +import io.kotest.matchers.collections.shouldBeEmpty +import io.kotest.matchers.collections.shouldContainExactly +import io.kotest.matchers.collections.shouldContainExactlyInAnyOrder +import io.kotest.matchers.shouldBe +import io.spine.gradle.publish.PublicationState.Finding +import io.spine.gradle.publish.PublicationState.Holding +import io.spine.gradle.publish.PublicationState.Presence +import io.spine.gradle.publish.PublicationState.Verdict +import org.junit.jupiter.api.DisplayName +import org.junit.jupiter.api.Nested +import org.junit.jupiter.api.Test + +@DisplayName("`PublicationState` should") +internal class PublicationStateSpec { + + @Nested inner class + `find the version unpublished` { + + @Test + fun `when there is no publication to look up`() { + Verdict.of(emptyList(), commit) shouldBe Verdict.UNPUBLISHED + } + + @Test + fun `when no publication is published anywhere`() { + Verdict.of(listOf(absent(api), absent(backend)), commit) shouldBe + Verdict.UNPUBLISHED + } + } + + @Test + fun `find the version published when every SBOM names the commit being published`() { + val findings = listOf(complete(api, commit), complete(backend, commit), marker()) + + Verdict.of(findings, commit) shouldBe Verdict.PUBLISHED + } + + @Nested inner class + `find the version partially published` { + + @Test + fun `when some publications are not published`() { + Verdict.of(listOf(complete(api, commit), absent(backend)), commit) shouldBe + Verdict.PARTIAL + } + + @Test + fun `when a publication is partially published`() { + Verdict.of(listOf(complete(api, commit), partial(backend)), commit) shouldBe + Verdict.PARTIAL + } + + @Test + fun `even when the published ones name another commit`() { + val findings = listOf(complete(api, otherCommit), absent(backend)) + + Verdict.of(findings, commit) shouldBe Verdict.PARTIAL + } + + @Test + fun `even when the commit being published is unknown`() { + val findings = listOf(complete(api, commit), partial(backend)) + + Verdict.of(findings, commit = null) shouldBe Verdict.PARTIAL + } + } + + @Nested inner class + `find a collision` { + + @Test + fun `when an SBOM names another commit`() { + Verdict.of(listOf(complete(api, otherCommit)), commit) shouldBe Verdict.COLLISION + } + + @Test + fun `when SBOMs name both the commit being published and another one`() { + val findings = listOf(complete(api, commit), complete(backend, otherCommit)) + + Verdict.of(findings, commit) shouldBe Verdict.COLLISION + } + + @Test + fun `when the copies of one SBOM in its destinations name different commits`() { + val findings = listOf( + Finding( + path = api, + version = version, + presence = Presence.COMPLETE, + commits = setOf(commit, otherCommit) + ) + ) + + Verdict.of(findings, commit) shouldBe Verdict.COLLISION + } + } + + @Nested inner class + `leave the publisher unconfirmed` { + + @Test + fun `when no published SBOM names a commit`() { + Verdict.of(listOf(marker()), commit) shouldBe Verdict.UNCONFIRMED + } + + @Test + fun `when the commit being published is unknown`() { + Verdict.of(listOf(complete(api, commit)), commit = null) shouldBe + Verdict.UNCONFIRMED + } + + @Test + fun `when a copy of an SBOM names no commit, beside a confirmed publication`() { + val unknownRevision = Finding( + path = backend, + version = version, + presence = Presence.COMPLETE, + unconfirmed = true + ) + val findings = listOf(complete(api, commit), unknownRevision) + + Verdict.of(findings, commit) shouldBe Verdict.UNCONFIRMED + } + } + + @Nested inner class + `find a publication` { + + @Test + fun `absent when no repository has anything of it`() { + val holdings = listOf(holding(registry), holding(gitHub)) + + presence(holdings) shouldBe Presence.ABSENT + } + + @Test + fun `complete when every repository lists it and has every file`() { + val holdings = listOf( + holding(registry, listed = true, present = names + module), + holding(gitHub, listed = true, present = names + module) + ) + + presence(holdings) shouldBe Presence.COMPLETE + } + + @Test + fun `complete without module metadata in any repository`() { + val holdings = listOf( + holding(registry, listed = true, present = names), + holding(gitHub, listed = true, present = names) + ) + + presence(holdings) shouldBe Presence.COMPLETE + } + + @Test + fun `partial when a repository has nothing of it`() { + val holdings = listOf(holding(registry, listed = true, present = names), holding(gitHub)) + + presence(holdings) shouldBe Presence.PARTIAL + } + + @Test + fun `partial when a repository lacks a file`() { + val holdings = listOf( + holding(registry, listed = true, present = names), + holding(gitHub, listed = true, present = names - sources) + ) + + presence(holdings) shouldBe Presence.PARTIAL + } + + @Test + fun `partial when only some repositories have the module metadata`() { + val holdings = listOf( + holding(registry, listed = true, present = names + module), + holding(gitHub, listed = true, present = names) + ) + + presence(holdings) shouldBe Presence.PARTIAL + } + + @Test + fun `partial when a repository has its files but does not list it`() { + val holdings = listOf(holding(registry, listed = false, present = names)) + + presence(holdings) shouldBe Presence.PARTIAL + } + + @Test + fun `partial when a repository lists it but has none of its files`() { + val holdings = listOf(holding(registry, listed = true)) + + presence(holdings) shouldBe Presence.PARTIAL + } + } + + @Nested inner class + `tell what is missing from` { + + @Test + fun `each repository that lacks anything`() { + val holdings = listOf( + holding(registry, listed = true, present = names + module), + holding(gitHub, listed = false, present = names - sources) + ) + + val gaps = PublicationState.gapsOf( + holdings = holdings, + path = api, + names = names, + module = module + ) + + gaps.keys shouldContainExactly setOf(gitHub) + gaps.getValue(gitHub) shouldContainExactly listOf( + "the version in `$gitHub/$api/maven-metadata.xml`", + "`$sources` in `$gitHub`", + "`$module` in `$gitHub`" + ) + } + + @Test + fun `no repository when the publication has no module metadata anywhere`() { + val holdings = listOf( + holding(registry, listed = true, present = names), + holding(gitHub, listed = true, present = names) + ) + + val gaps = PublicationState.gapsOf( + holdings = holdings, + path = api, + names = names, + module = module + ) + + gaps.keys.shouldBeEmpty() + } + } + + @Nested inner class + `read the revisions of an SBOM` { + + @Test + fun `of every module of the build`() { + val text = """ + { "packages": [ + { "sourceInfo": "git+https://github.com/o/r@$commit#core[:core]" }, + { "sourceInfo": "git+https://github.com/o/r@$commit#client[:client]" } + ] } + """.trimIndent() + + PublicationState.sbomRevisions(text) shouldContainExactlyInAnyOrder setOf(commit) + } + + @Test + fun `from a URI with a user`() { + val text = """"sourceInfo": "git+ssh://git@github.com/o/r@$otherCommit#m[:m]"""" + + PublicationState.sbomRevisions(text) shouldContainExactlyInAnyOrder + setOf(otherCommit) + } + + @Test + fun `of SHA-256 commits`() { + val sha256 = "ab".repeat(32) + val text = """"sourceInfo": "git+https://github.com/o/r@$sha256#m[:m]"""" + + PublicationState.sbomRevisions(text) shouldContainExactlyInAnyOrder setOf(sha256) + } + + @Test + fun `ignoring a revision that is not a full commit hash`() { + val text = """ + { "sourceInfo": "git+https://github.com/o/r@unknown#m[:m]" } + { "sourceInfo": "git+https://github.com/o/r@35054d78#m[:m]" } + { "sourceInfo": "git+https://github.com/o/r@${commit}0#m[:m]" } + """.trimIndent() + + PublicationState.sbomRevisions(text).shouldBeEmpty() + } + } + + private companion object { + + const val version = "2.0.0-SNAPSHOT.575" + const val api = "io/spine/sample/api" + const val backend = "io/spine/sample/backend" + const val commit = "35054d78dfce2a0ead2ca79347ad57f74508977c" + const val otherCommit = "2b98e1801a0b3c4d5e6f708192a3b4c5d6e7f809" + + const val registry = "https://europe-maven.pkg.dev/spine-event-engine/snapshots" + const val gitHub = "https://maven.pkg.github.com/SpineEventEngine/sample" + const val sources = "api-$version-sources.jar" + const val module = "api-$version.module" + val names = listOf("api-$version.jar", sources, "api-$version.pom") + + fun absent(path: String) = + Finding(path = path, version = version, presence = Presence.ABSENT) + + fun partial(path: String) = + Finding(path = path, version = version, presence = Presence.PARTIAL) + + fun complete(path: String, sbomCommit: String) = + Finding( + path = path, + version = version, + presence = Presence.COMPLETE, + commits = setOf(sbomCommit) + ) + + /** + * The marker of a Gradle plugin, which is published with no SBOM. + */ + fun marker() = Finding( + path = "io/spine/sample/io.spine.sample.gradle.plugin", + version = version, + presence = Presence.COMPLETE + ) + + fun holding( + destination: String, + listed: Boolean = false, + present: Collection = emptyList() + ) = Holding(destination = destination, listed = listed, present = present.toSet()) + + /** + * Decides how much of the publication with the [names] and the [module] metadata + * the given [holdings] have. + */ + fun presence(holdings: List) = + PublicationState.presenceOf(holdings = holdings, names = names, module = module) + } +} diff --git a/buildSrc/src/test/kotlin/io/spine/gradle/publish/RemoteFileSpec.kt b/buildSrc/src/test/kotlin/io/spine/gradle/publish/RemoteFileSpec.kt new file mode 100644 index 0000000000..ce6131c023 --- /dev/null +++ b/buildSrc/src/test/kotlin/io/spine/gradle/publish/RemoteFileSpec.kt @@ -0,0 +1,405 @@ +/* + * Copyright 2026 CodeMatters, Lda. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions + * and limitations under the License. + */ + +package io.spine.gradle.publish + +import com.sun.net.httpserver.HttpExchange +import com.sun.net.httpserver.HttpServer +import io.kotest.assertions.throwables.shouldThrow +import io.kotest.matchers.collections.shouldContainExactly +import io.kotest.matchers.comparables.shouldBeGreaterThanOrEqualTo +import io.kotest.matchers.nulls.shouldBeNull +import io.kotest.matchers.shouldBe +import io.kotest.matchers.string.shouldContain +import io.kotest.matchers.string.shouldNotContain +import java.io.File +import java.io.IOException +import java.net.InetAddress +import java.net.InetSocketAddress +import java.net.URI +import java.net.URL +import java.util.concurrent.CopyOnWriteArrayList +import kotlin.time.Duration.Companion.seconds +import kotlin.time.measureTime +import org.junit.jupiter.api.AfterEach +import org.junit.jupiter.api.DisplayName +import org.junit.jupiter.api.Nested +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.io.TempDir + +@DisplayName("`RemoteFile` should") +internal class RemoteFileSpec { + + private val server = Server() + + /** + * Another origin, such as the storage that GitHub Packages redirects a download to. + */ + private val storage = Server() + + @AfterEach + fun stopServers() { + server.close() + storage.close() + } + + @Nested inner class + `read a file` { + + @Test + fun `answered with its text`() { + server.answer(200) + + RemoteFile.readText(server.url("file.txt")) shouldBe body + } + + @Test + fun `telling at once that there is no file`() { + server.answer(404) + + RemoteFile.readText(server.url("file.txt")).shouldBeNull() + server.requests.size shouldBe 1 + } + + @Test + fun `retrying after a server error`() { + server.answer(503, 200) + + RemoteFile.readText(server.url("file.txt")) shouldBe body + server.requests.size shouldBe 2 + } + + @Test + fun `retrying after throttling`() { + server.answer(429, 200) + + RemoteFile.readText(server.url("file.txt")) shouldBe body + server.requests.size shouldBe 2 + } + + @Test + fun `retrying after a rate limit`() { + server.rateLimit(then = 200) + + RemoteFile.readText(server.url("file.txt")) shouldBe body + server.requests.size shouldBe 2 + } + + @Test + fun `waiting before a retry as long as the server asks`() { + server.throttle(retryAfter = "2", then = 200) + + val elapsed = measureTime { + RemoteFile.readText(server.url("file.txt")) shouldBe body + } + + elapsed shouldBeGreaterThanOrEqualTo 2.seconds + server.requests.size shouldBe 2 + } + + @Test + fun `failing after the last attempt`() { + server.answer(500) + + shouldThrow { RemoteFile.readText(server.url("file.txt")) } + server.requests.size shouldBe 3 + } + + @Test + fun `not retrying a request the server refuses`() { + server.answer(403) + + val error = shouldThrow { + RemoteFile.readText(server.url("file.txt")) + } + + error.message shouldContain "403" + server.requests.size shouldBe 1 + } + + @Test + fun `on disk, telling that there is no such file`(@TempDir dir: File) { + val url = dir.resolve("missing.xml").toURI().toURL() + + RemoteFile.readText(url).shouldBeNull() + } + } + + @Nested inner class + `follow a redirect` { + + @Test + fun `to another origin, without the authorization`() { + server.redirect(storage.url("blob/file.txt").toString()) + storage.answer(200) + + RemoteFile.readText(server.url("file.txt"), authorization) shouldBe body + + server.requests.map { it.authorization } shouldContainExactly listOf(authorization) + storage.requests.map { it.authorization } shouldContainExactly listOf(null) + } + + @Test + fun `within the origin, with the authorization`() { + server.redirect("/moved/file.txt", then = 200) + + RemoteFile.readText(server.url("file.txt"), authorization) shouldBe body + + server.requests.map { it.path } shouldContainExactly + listOf("/file.txt", "/moved/file.txt") + server.requests.map { it.authorization } shouldContainExactly + listOf(authorization, authorization) + } + + @Test + fun `only a few times`() { + server.redirect("/file.txt") + + val error = shouldThrow { + RemoteFile.readText(server.url("file.txt")) + } + + error.message shouldContain "Too many redirects" + } + + @Test + fun `only to a location given`() { + server.redirect(location = null) + + val error = shouldThrow { + RemoteFile.readText(server.url("file.txt")) + } + + error.message shouldContain "no `Location`" + } + + @Test + fun `only to an HTTP location`() { + server.redirect("file:///etc/hosts") + + val error = shouldThrow { + RemoteFile.readText(server.url("file.txt")) + } + + error.message shouldContain "may not be followed" + } + + @Test + fun `showing no query in a message`() { + server.redirect("${storage.url("blob/file.txt")}?signature=secret") + storage.answer(403) + + val error = shouldThrow { + RemoteFile.readText(server.url("file.txt")) + } + + error.message shouldNotContain "secret" + } + } + + @Nested inner class + `tell whether there is a file` { + + @Test + fun `answered with a success`() { + server.answer(200) + + RemoteFile.exists(server.url("file.txt")) shouldBe true + server.requests.map { it.method } shouldContainExactly listOf("HEAD") + } + + @Test + fun `answered with no such file`() { + server.answer(404) + + RemoteFile.exists(server.url("file.txt")) shouldBe false + } + + @Test + fun `answered with a gone file`() { + server.answer(410) + + RemoteFile.exists(server.url("file.txt")) shouldBe false + } + + @Test + fun `redirected to another origin, following without the authorization`() { + server.redirect(storage.url("blob/file.txt").toString()) + storage.answer(200) + + RemoteFile.exists(server.url("file.txt"), authorization) shouldBe true + storage.requests shouldContainExactly + listOf(Request(method = "HEAD", path = "/blob/file.txt", authorization = null)) + } + + @Test + fun `redirected to another origin that has no such file`() { + server.redirect(storage.url("blob/file.txt").toString()) + storage.answer(404) + + RemoteFile.exists(server.url("file.txt")) shouldBe false + } + + @Test + fun `redirected within the origin, following`() { + server.redirect("/moved/file.txt", then = 404) + + RemoteFile.exists(server.url("file.txt")) shouldBe false + server.requests.size shouldBe 2 + } + + @Test + fun `retrying after a request timeout`() { + server.answer(408, 200) + + RemoteFile.exists(server.url("file.txt")) shouldBe true + server.requests.size shouldBe 2 + } + + @Test + fun `not retrying a request the server refuses`() { + server.answer(401) + + shouldThrow { RemoteFile.exists(server.url("file.txt")) } + server.requests.size shouldBe 1 + } + + @Test + fun `on disk`(@TempDir dir: File) { + val file = dir.resolve("file.txt").apply { writeText(body) } + + RemoteFile.exists(file.toURI().toURL()) shouldBe true + RemoteFile.exists(dir.resolve("missing.txt").toURI().toURL()) shouldBe false + } + } + + private companion object { + const val body = "" + const val authorization = "Bearer test-token" + } +} + +/** + * A request received by a [Server]. + */ +private data class Request(val method: String, val path: String, val authorization: String?) + +/** + * A loopback HTTP server, which answers each request as told, and records the requests. + */ +private class Server : AutoCloseable { + + private val server: HttpServer = + HttpServer.create(InetSocketAddress(InetAddress.getLoopbackAddress(), 0), 0) + + /** + * The requests received so far. + */ + val requests = CopyOnWriteArrayList() + + @Volatile + private var respond: (HttpExchange, Int) -> Unit = { exchange, _ -> exchange.reply(404) } + + init { + server.createContext("/") { exchange -> + exchange.use { + requests.add( + Request( + method = it.requestMethod, + path = it.requestURI.path, + authorization = it.requestHeaders.getFirst("Authorization") + ) + ) + respond(it, requests.size - 1) + } + } + server.start() + } + + /** + * Obtains the URL of the given [path] at this server. + * + * The loopback address may be an IPv6 one, which [URI] encloses in square brackets. + */ + fun url(path: String): URL { + val address = server.address + return URI("http", null, address.hostString, address.port, "/$path", null, null) + .toURL() + } + + /** + * Answers each request with the next of the given [statuses], repeating the last one. + */ + fun answer(vararg statuses: Int) { + respond = { exchange, index -> exchange.reply(statuses[minOf(index, statuses.lastIndex)]) } + } + + /** + * Redirects the first request to the given [location], or with no `Location` if it is + * `null`, and answers the next ones with the given status, or with the same redirect. + */ + fun redirect(location: String?, then: Int? = null) { + respond = { exchange, index -> + if (index == 0 || then == null) { + location?.let { exchange.responseHeaders.add("Location", it) } + exchange.sendResponseHeaders(302, -1) + } else { + exchange.reply(then) + } + } + } + + /** + * Refuses the first request for exceeding a rate limit, as GitHub does with + * `403 Forbidden` and a `Retry-After` header, and answers the next ones with + * the given status. + */ + fun rateLimit(then: Int) { + respond = { exchange, index -> + if (index == 0) { + exchange.responseHeaders.add("Retry-After", "1") + exchange.sendResponseHeaders(403, -1) + } else { + exchange.reply(then) + } + } + } + + /** + * Answers the first request with `429 Too Many Requests` and the given `Retry-After` + * header, and the next ones with the given status. + */ + fun throttle(retryAfter: String, then: Int) { + respond = { exchange, index -> + if (index == 0) { + exchange.responseHeaders.add("Retry-After", retryAfter) + exchange.sendResponseHeaders(429, -1) + } else { + exchange.reply(then) + } + } + } + + override fun close() = server.stop(0) + + private fun HttpExchange.reply(status: Int) { + val bytes = if (status == 200 && requestMethod != "HEAD") { + "".toByteArray() + } else { + byteArrayOf() + } + sendResponseHeaders(status, if (bytes.isEmpty()) -1 else bytes.size.toLong()) + responseBody.write(bytes) + } +} diff --git a/buildSrc/src/test/kotlin/io/spine/gradle/publish/SpinePublishingTest.kt b/buildSrc/src/test/kotlin/io/spine/gradle/publish/SpinePublishingTest.kt index c97f30f593..3e40704d6e 100644 --- a/buildSrc/src/test/kotlin/io/spine/gradle/publish/SpinePublishingTest.kt +++ b/buildSrc/src/test/kotlin/io/spine/gradle/publish/SpinePublishingTest.kt @@ -40,8 +40,8 @@ class SpinePublishingTest { extension = project.spinePublishing { } } - @Nested - inner class `calculate 'artifactId'` { + @Nested inner class + `calculate 'artifactId'` { @Test fun `with default prefix for non-tool projects`() { @@ -105,8 +105,8 @@ class SpinePublishingTest { } } - @Nested - inner class `validate configuration` { + @Nested inner class + `validate configuration` { @Test fun `ensuring 'testJar' inclusions are published`() { @@ -155,8 +155,8 @@ class SpinePublishingTest { } } - @Nested - inner class `identify 'projectsToPublish'` { + @Nested inner class + `identify 'projectsToPublish'` { @Test fun `as the project itself if no modules are specified`() { @@ -193,8 +193,8 @@ class SpinePublishingTest { } } - @Nested - inner class `resolve 'publishTo' repositories` { + @Nested inner class + `resolve 'publishTo' repositories` { @Test fun `from the extension itself if destinations are initialized`() { diff --git a/buildSrc/src/test/kotlin/io/spine/gradle/report/coverage/FileExtensionsTest.kt b/buildSrc/src/test/kotlin/io/spine/gradle/report/coverage/FileExtensionsTest.kt index c457bfabcd..68904112bb 100644 --- a/buildSrc/src/test/kotlin/io/spine/gradle/report/coverage/FileExtensionsTest.kt +++ b/buildSrc/src/test/kotlin/io/spine/gradle/report/coverage/FileExtensionsTest.kt @@ -28,8 +28,8 @@ class FileExtensionsTest { @TempDir lateinit var sourceRoot: File - @Nested - inner class `for Java sources` { + @Nested inner class + `for Java sources` { @Test fun `return a single FQN`() { @@ -46,8 +46,8 @@ class FileExtensionsTest { } } - @Nested - inner class `for Kotlin sources` { + @Nested inner class + `for Kotlin sources` { @Test fun `return both the declared class and the synthetic file class`() { @@ -70,8 +70,8 @@ class FileExtensionsTest { } } - @Nested - inner class `for proto-file-scoped Kotlin sources` { + @Nested inner class + `for proto-file-scoped Kotlin sources` { @Test fun `strip the two-part 'proto-kt' suffix`() { @@ -84,8 +84,8 @@ class FileExtensionsTest { } } - @Nested - inner class `for unsupported inputs` { + @Nested inner class + `for unsupported inputs` { @Test fun `return an empty list for non-source files`() { diff --git a/config b/config index 604420cd7e..ad3dff0890 160000 --- a/config +++ b/config @@ -1 +1 @@ -Subproject commit 604420cd7eab82b382c9a5c1d812be454552c27c +Subproject commit ad3dff0890c7716cbba3fe2ce17bf4fe5905a318 From 8882eefac99929e990756bc151944b12fbc569a6 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 22 Oct 2026 15:05:18 +0100 Subject: [PATCH 13/17] Restore the local pins `./config/pull` lowered The pull of `config` `ad3dff08` brought its older pins back. `config`'s `dependency/local` has not changed since the wave's `604420cd`, so the pins from before the pull are the wave's. Co-Authored-By: Claude Opus 5.5 --- buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt | 2 +- .../src/main/kotlin/io/spine/dependency/local/BaseTypes.kt | 2 +- .../src/main/kotlin/io/spine/dependency/local/Compiler.kt | 2 +- .../main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt | 4 ++-- .../src/main/kotlin/io/spine/dependency/local/DokkaTools.kt | 2 +- buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt | 2 +- .../src/main/kotlin/io/spine/dependency/local/ProtoTap.kt | 2 +- buildSrc/src/main/kotlin/io/spine/dependency/local/Reflect.kt | 2 +- buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt | 2 +- .../src/main/kotlin/io/spine/dependency/local/ToolBase.kt | 2 +- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt index 45c1d2f023..baaf5c7053 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt @@ -24,7 +24,7 @@ package io.spine.dependency.local "unused" /* Some subprojects do not use all Base artifacts. */, ) object Base { - const val version = "2.0.0-SNAPSHOT.461" + const val version = "2.0.0-SNAPSHOT.462" const val versionForBuildScript = "2.0.0-SNAPSHOT.461" const val group = Spine.group private const val prefix = "spine" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/BaseTypes.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/BaseTypes.kt index e0a828061a..d92259dc5a 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/BaseTypes.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/BaseTypes.kt @@ -23,7 +23,7 @@ package io.spine.dependency.local "ConstPropertyName" /* We use a custom convention for artifact properties. */, ) object BaseTypes { - const val version = "2.0.0-SNAPSHOT.225" + const val version = "2.0.0-SNAPSHOT.226" const val group = Spine.group const val artifact = "spine-base-types" const val lib = "$group:$artifact:$version" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt index 137e830107..1582193469 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt @@ -60,7 +60,7 @@ object Compiler : Dependency() { * The version of the Compiler dependencies. */ override val version: String - private const val fallbackVersion = "2.0.0-SNAPSHOT.069" + private const val fallbackVersion = "2.0.0-SNAPSHOT.080" /** * The distinct version of the Compiler used by other build tools. diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt index 1af2694bb1..3465c08c02 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt @@ -34,12 +34,12 @@ object CoreJvmCompiler { /** * The version used in the build classpath. */ - const val dogfoodingVersion = "2.0.0-SNAPSHOT.097" + const val dogfoodingVersion = "2.0.0-SNAPSHOT.098" /** * The version to be used for integration tests. */ - const val version = "2.0.0-SNAPSHOT.097" + const val version = "2.0.0-SNAPSHOT.098" /** * The ID of the Gradle plugin. diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/DokkaTools.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/DokkaTools.kt index 6026d49f57..37bfae4ed7 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/DokkaTools.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/DokkaTools.kt @@ -25,7 +25,7 @@ package io.spine.dependency.local ) object DokkaTools { const val group = Spine.toolsGroup - const val version = "2.0.0-SNAPSHOT.10" + const val version = "2.0.0-SNAPSHOT.11" /** * The artifact dropped its `spine-` prefix in `2.0.0-SNAPSHOT.9`, to diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt index 6d5f5b798c..96fbbb284c 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt @@ -24,7 +24,7 @@ package io.spine.dependency.local "unused" /* Some subprojects do not use all Logging artifacts. */, ) object Logging { - const val version = "2.0.0-SNAPSHOT.426" + const val version = "2.0.0-SNAPSHOT.428" const val group = Spine.group const val loggingArtifact = "spine-logging" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt index 55154c6964..b9e6f18ecf 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt @@ -26,7 +26,7 @@ package io.spine.dependency.local ) object ProtoTap { const val group = Spine.toolsGroup - const val version = "0.17.3" + const val version = "0.17.4" const val gradlePluginId = "io.spine.prototap" const val api = "$group:prototap-api:$version" const val gradlePlugin = "$group:prototap-gradle-plugin:$version" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Reflect.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Reflect.kt index c07fd2f716..da3e6edc54 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Reflect.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Reflect.kt @@ -23,7 +23,7 @@ package io.spine.dependency.local "ConstPropertyName" /* We use a custom convention for artifact properties. */, ) object Reflect { - const val version = "2.0.0-SNAPSHOT.202" + const val version = "2.0.0-SNAPSHOT.203" const val group = Spine.group const val artifact = "spine-reflect" const val lib = "$group:$artifact:$version" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt index 324a493653..312ed795d8 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt @@ -23,7 +23,7 @@ package io.spine.dependency.local "ConstPropertyName" /* We use a custom convention for artifact properties. */, ) object TestLib { - const val version = "2.0.0-SNAPSHOT.215" + const val version = "2.0.0-SNAPSHOT.216" const val group = Spine.toolsGroup const val artifact = "base-testlib" const val lib = "$group:$artifact:$version" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt index 2a8a255ac6..bb675bca2d 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt @@ -32,7 +32,7 @@ package io.spine.dependency.local ) object ToolBase { const val group = Spine.toolsGroup - const val version = "2.0.0-SNAPSHOT.426" + const val version = "2.0.0-SNAPSHOT.428" const val dogfoodingVersion = "2.0.0-SNAPSHOT.426" const val archive = "$group:archive:$version" From 21e926d4dfbc62b0e23e697cb1d03db3031ceeb7 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 22 Oct 2026 15:05:34 +0100 Subject: [PATCH 14/17] Update shared agent tooling and config (./config/pull) --- buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt | 2 +- .../src/main/kotlin/io/spine/dependency/local/BaseTypes.kt | 2 +- .../src/main/kotlin/io/spine/dependency/local/Compiler.kt | 2 +- .../main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt | 4 ++-- .../src/main/kotlin/io/spine/dependency/local/DokkaTools.kt | 2 +- buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt | 2 +- .../src/main/kotlin/io/spine/dependency/local/ProtoTap.kt | 2 +- buildSrc/src/main/kotlin/io/spine/dependency/local/Reflect.kt | 2 +- buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt | 2 +- .../src/main/kotlin/io/spine/dependency/local/ToolBase.kt | 2 +- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt index baaf5c7053..45c1d2f023 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt @@ -24,7 +24,7 @@ package io.spine.dependency.local "unused" /* Some subprojects do not use all Base artifacts. */, ) object Base { - const val version = "2.0.0-SNAPSHOT.462" + const val version = "2.0.0-SNAPSHOT.461" const val versionForBuildScript = "2.0.0-SNAPSHOT.461" const val group = Spine.group private const val prefix = "spine" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/BaseTypes.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/BaseTypes.kt index d92259dc5a..e0a828061a 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/BaseTypes.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/BaseTypes.kt @@ -23,7 +23,7 @@ package io.spine.dependency.local "ConstPropertyName" /* We use a custom convention for artifact properties. */, ) object BaseTypes { - const val version = "2.0.0-SNAPSHOT.226" + const val version = "2.0.0-SNAPSHOT.225" const val group = Spine.group const val artifact = "spine-base-types" const val lib = "$group:$artifact:$version" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt index 1582193469..137e830107 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt @@ -60,7 +60,7 @@ object Compiler : Dependency() { * The version of the Compiler dependencies. */ override val version: String - private const val fallbackVersion = "2.0.0-SNAPSHOT.080" + private const val fallbackVersion = "2.0.0-SNAPSHOT.069" /** * The distinct version of the Compiler used by other build tools. diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt index 3465c08c02..1af2694bb1 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt @@ -34,12 +34,12 @@ object CoreJvmCompiler { /** * The version used in the build classpath. */ - const val dogfoodingVersion = "2.0.0-SNAPSHOT.098" + const val dogfoodingVersion = "2.0.0-SNAPSHOT.097" /** * The version to be used for integration tests. */ - const val version = "2.0.0-SNAPSHOT.098" + const val version = "2.0.0-SNAPSHOT.097" /** * The ID of the Gradle plugin. diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/DokkaTools.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/DokkaTools.kt index 37bfae4ed7..6026d49f57 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/DokkaTools.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/DokkaTools.kt @@ -25,7 +25,7 @@ package io.spine.dependency.local ) object DokkaTools { const val group = Spine.toolsGroup - const val version = "2.0.0-SNAPSHOT.11" + const val version = "2.0.0-SNAPSHOT.10" /** * The artifact dropped its `spine-` prefix in `2.0.0-SNAPSHOT.9`, to diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt index 96fbbb284c..6d5f5b798c 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt @@ -24,7 +24,7 @@ package io.spine.dependency.local "unused" /* Some subprojects do not use all Logging artifacts. */, ) object Logging { - const val version = "2.0.0-SNAPSHOT.428" + const val version = "2.0.0-SNAPSHOT.426" const val group = Spine.group const val loggingArtifact = "spine-logging" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt index b9e6f18ecf..55154c6964 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt @@ -26,7 +26,7 @@ package io.spine.dependency.local ) object ProtoTap { const val group = Spine.toolsGroup - const val version = "0.17.4" + const val version = "0.17.3" const val gradlePluginId = "io.spine.prototap" const val api = "$group:prototap-api:$version" const val gradlePlugin = "$group:prototap-gradle-plugin:$version" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Reflect.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Reflect.kt index da3e6edc54..c07fd2f716 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Reflect.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Reflect.kt @@ -23,7 +23,7 @@ package io.spine.dependency.local "ConstPropertyName" /* We use a custom convention for artifact properties. */, ) object Reflect { - const val version = "2.0.0-SNAPSHOT.203" + const val version = "2.0.0-SNAPSHOT.202" const val group = Spine.group const val artifact = "spine-reflect" const val lib = "$group:$artifact:$version" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt index 312ed795d8..324a493653 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt @@ -23,7 +23,7 @@ package io.spine.dependency.local "ConstPropertyName" /* We use a custom convention for artifact properties. */, ) object TestLib { - const val version = "2.0.0-SNAPSHOT.216" + const val version = "2.0.0-SNAPSHOT.215" const val group = Spine.toolsGroup const val artifact = "base-testlib" const val lib = "$group:$artifact:$version" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt index bb675bca2d..2a8a255ac6 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt @@ -32,7 +32,7 @@ package io.spine.dependency.local ) object ToolBase { const val group = Spine.toolsGroup - const val version = "2.0.0-SNAPSHOT.428" + const val version = "2.0.0-SNAPSHOT.426" const val dogfoodingVersion = "2.0.0-SNAPSHOT.426" const val archive = "$group:archive:$version" From 3d8b41c73b567bd8705cfe1952ad1a44ef1ebd3a Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 22 Oct 2026 15:05:35 +0100 Subject: [PATCH 15/17] Update local dependency pins --- buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt | 2 +- buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt | 2 +- buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt | 2 +- buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt | 2 +- buildSrc/src/main/kotlin/io/spine/dependency/local/Reflect.kt | 2 +- buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt | 2 +- buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt index 45c1d2f023..baaf5c7053 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt @@ -24,7 +24,7 @@ package io.spine.dependency.local "unused" /* Some subprojects do not use all Base artifacts. */, ) object Base { - const val version = "2.0.0-SNAPSHOT.461" + const val version = "2.0.0-SNAPSHOT.462" const val versionForBuildScript = "2.0.0-SNAPSHOT.461" const val group = Spine.group private const val prefix = "spine" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt index 137e830107..66a3e8c889 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt @@ -60,7 +60,7 @@ object Compiler : Dependency() { * The version of the Compiler dependencies. */ override val version: String - private const val fallbackVersion = "2.0.0-SNAPSHOT.069" + private const val fallbackVersion = "2.0.0-SNAPSHOT.081" /** * The distinct version of the Compiler used by other build tools. diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt index 6d5f5b798c..96fbbb284c 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Logging.kt @@ -24,7 +24,7 @@ package io.spine.dependency.local "unused" /* Some subprojects do not use all Logging artifacts. */, ) object Logging { - const val version = "2.0.0-SNAPSHOT.426" + const val version = "2.0.0-SNAPSHOT.428" const val group = Spine.group const val loggingArtifact = "spine-logging" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt index 55154c6964..b9e6f18ecf 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt @@ -26,7 +26,7 @@ package io.spine.dependency.local ) object ProtoTap { const val group = Spine.toolsGroup - const val version = "0.17.3" + const val version = "0.17.4" const val gradlePluginId = "io.spine.prototap" const val api = "$group:prototap-api:$version" const val gradlePlugin = "$group:prototap-gradle-plugin:$version" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Reflect.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Reflect.kt index c07fd2f716..da3e6edc54 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Reflect.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Reflect.kt @@ -23,7 +23,7 @@ package io.spine.dependency.local "ConstPropertyName" /* We use a custom convention for artifact properties. */, ) object Reflect { - const val version = "2.0.0-SNAPSHOT.202" + const val version = "2.0.0-SNAPSHOT.203" const val group = Spine.group const val artifact = "spine-reflect" const val lib = "$group:$artifact:$version" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt index 324a493653..312ed795d8 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt @@ -23,7 +23,7 @@ package io.spine.dependency.local "ConstPropertyName" /* We use a custom convention for artifact properties. */, ) object TestLib { - const val version = "2.0.0-SNAPSHOT.215" + const val version = "2.0.0-SNAPSHOT.216" const val group = Spine.toolsGroup const val artifact = "base-testlib" const val lib = "$group:$artifact:$version" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt index 2a8a255ac6..bb675bca2d 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt @@ -32,7 +32,7 @@ package io.spine.dependency.local ) object ToolBase { const val group = Spine.toolsGroup - const val version = "2.0.0-SNAPSHOT.426" + const val version = "2.0.0-SNAPSHOT.428" const val dogfoodingVersion = "2.0.0-SNAPSHOT.426" const val archive = "$group:archive:$version" From f8a00fd316369b6506d344882d171fc1118ae354 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 22 Oct 2026 15:08:47 +0100 Subject: [PATCH 16/17] Restore the floor pins the second `./config/pull` lowered `cascade prep` pulled `config` again (its check for an earlier pull commit read a SIGPIPE as "not pulled"). The pull brought back `config`'s older BaseTypes (`.225`), CoreJvmCompiler (`.097`), and DokkaTools (`.10`) pins; `prep` does not re-pin repos outside Validation's wave upstreams, so keep the newer published versions. Co-Authored-By: Claude Opus 5.5 --- .../src/main/kotlin/io/spine/dependency/local/BaseTypes.kt | 2 +- .../main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt | 4 ++-- .../src/main/kotlin/io/spine/dependency/local/DokkaTools.kt | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/BaseTypes.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/BaseTypes.kt index e0a828061a..d92259dc5a 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/BaseTypes.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/BaseTypes.kt @@ -23,7 +23,7 @@ package io.spine.dependency.local "ConstPropertyName" /* We use a custom convention for artifact properties. */, ) object BaseTypes { - const val version = "2.0.0-SNAPSHOT.225" + const val version = "2.0.0-SNAPSHOT.226" const val group = Spine.group const val artifact = "spine-base-types" const val lib = "$group:$artifact:$version" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt index 1af2694bb1..3465c08c02 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt @@ -34,12 +34,12 @@ object CoreJvmCompiler { /** * The version used in the build classpath. */ - const val dogfoodingVersion = "2.0.0-SNAPSHOT.097" + const val dogfoodingVersion = "2.0.0-SNAPSHOT.098" /** * The version to be used for integration tests. */ - const val version = "2.0.0-SNAPSHOT.097" + const val version = "2.0.0-SNAPSHOT.098" /** * The ID of the Gradle plugin. diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/DokkaTools.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/DokkaTools.kt index 6026d49f57..37bfae4ed7 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/DokkaTools.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/DokkaTools.kt @@ -25,7 +25,7 @@ package io.spine.dependency.local ) object DokkaTools { const val group = Spine.toolsGroup - const val version = "2.0.0-SNAPSHOT.10" + const val version = "2.0.0-SNAPSHOT.11" /** * The artifact dropped its `spine-` prefix in `2.0.0-SNAPSHOT.9`, to From c9855b75bf1f382c1c27f91afe9facdcb8803a48 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 22 Oct 2026 15:18:38 +0100 Subject: [PATCH 17/17] Update dependency reports --- docs/dependencies/dependencies.md | 34 +++++++++++++++---------------- docs/dependencies/pom.xml | 18 ++++++++-------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/docs/dependencies/dependencies.md b/docs/dependencies/dependencies.md index ae8591a4ae..6628a2bc41 100644 --- a/docs/dependencies/dependencies.md +++ b/docs/dependencies/dependencies.md @@ -1785,7 +1785,7 @@ The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using +This report was generated on **Thu Oct 22 15:18:20 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -3217,7 +3217,7 @@ This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using +This report was generated on **Thu Oct 22 15:18:19 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -3234,7 +3234,7 @@ This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 20:50:30 WEST 2026** using +This report was generated on **Thu Oct 22 15:18:18 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -4934,7 +4934,7 @@ This report was generated on **Wed Oct 21 20:50:30 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using +This report was generated on **Thu Oct 22 15:18:20 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -6726,7 +6726,7 @@ This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using +This report was generated on **Thu Oct 22 15:18:20 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -6785,7 +6785,7 @@ This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 20:50:30 WEST 2026** using +This report was generated on **Thu Oct 22 15:18:18 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -7577,7 +7577,7 @@ This report was generated on **Wed Oct 21 20:50:30 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using +This report was generated on **Thu Oct 22 15:18:19 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -8389,7 +8389,7 @@ This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using +This report was generated on **Thu Oct 22 15:18:19 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -9747,7 +9747,7 @@ This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using +This report was generated on **Thu Oct 22 15:18:19 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -10674,7 +10674,7 @@ This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using +This report was generated on **Thu Oct 22 15:18:19 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -12116,7 +12116,7 @@ This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using +This report was generated on **Thu Oct 22 15:18:19 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -13096,7 +13096,7 @@ This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using +This report was generated on **Thu Oct 22 15:18:19 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -13858,7 +13858,7 @@ This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using +This report was generated on **Thu Oct 22 15:18:19 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -14988,7 +14988,7 @@ This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using +This report was generated on **Thu Oct 22 15:18:19 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -16449,7 +16449,7 @@ This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using +This report was generated on **Thu Oct 22 15:18:19 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -16731,7 +16731,7 @@ This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using +This report was generated on **Thu Oct 22 15:18:19 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). @@ -17433,6 +17433,6 @@ This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Wed Oct 21 20:50:31 WEST 2026** using +This report was generated on **Thu Oct 22 15:18:19 WEST 2026** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE). \ No newline at end of file diff --git a/docs/dependencies/pom.xml b/docs/dependencies/pom.xml index 4dafafda96..69168c1a9f 100644 --- a/docs/dependencies/pom.xml +++ b/docs/dependencies/pom.xml @@ -80,37 +80,37 @@ all modules and does not describe the project structure per-subproject. io.spine.tools compiler-api - 2.0.0-SNAPSHOT.080 + 2.0.0-SNAPSHOT.081 compile io.spine.tools compiler-backend - 2.0.0-SNAPSHOT.080 + 2.0.0-SNAPSHOT.081 compile io.spine.tools compiler-gradle-api - 2.0.0-SNAPSHOT.080 + 2.0.0-SNAPSHOT.081 compile io.spine.tools compiler-gradle-plugin - 2.0.0-SNAPSHOT.080 + 2.0.0-SNAPSHOT.081 compile io.spine.tools compiler-jvm - 2.0.0-SNAPSHOT.080 + 2.0.0-SNAPSHOT.081 compile io.spine.tools compiler-params - 2.0.0-SNAPSHOT.080 + 2.0.0-SNAPSHOT.081 compile @@ -200,7 +200,7 @@ all modules and does not describe the project structure per-subproject. io.spine.tools compiler-testlib - 2.0.0-SNAPSHOT.080 + 2.0.0-SNAPSHOT.081 test @@ -267,12 +267,12 @@ all modules and does not describe the project structure per-subproject. io.spine.tools compiler-cli-all - 2.0.0-SNAPSHOT.080 + 2.0.0-SNAPSHOT.081 io.spine.tools compiler-protoc-plugin - 2.0.0-SNAPSHOT.080 + 2.0.0-SNAPSHOT.081 io.spine.tools