diff --git a/build.gradle.kts b/build.gradle.kts
index 366eb7fcad..983b380cd4 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -80,6 +80,8 @@ plugins {
}
spinePublishing {
+ artifactPrefix = "spine-validation-"
+ toolArtifactPrefix = "validation-"
modules = setOf(
"context",
"java",
@@ -96,7 +98,6 @@ spinePublishing {
cloudArtifactRegistry
)
}
- artifactPrefix = "validation-"
}
allprojects {
diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts
index 2cd94daf1b..1a3fc8a647 100644
--- a/buildSrc/build.gradle.kts
+++ b/buildSrc/build.gradle.kts
@@ -141,6 +141,20 @@ val koverVersion = "0.9.1"
*/
val shadowVersion = "9.2.2"
+/**
+ * The version of JUnit used to test the build scripts.
+ *
+ * @see [io.spine.dependency.test.JUnit]
+ */
+val junitVersion = "6.0.3"
+
+/**
+ * The version of Kotest used to test the build scripts.
+ *
+ * @see [io.spine.dependency.test.Kotest]
+ */
+val kotestVersion = "6.1.10"
+
configurations.all {
resolutionStrategy {
force(
@@ -193,8 +207,9 @@ dependencies {
implementation(it)
}
- testImplementation(platform("org.junit:junit-bom:5.11.4"))
+ testImplementation(platform("org.junit:junit-bom:$junitVersion"))
testImplementation("org.junit.jupiter:junit-jupiter")
+ testImplementation("io.kotest:kotest-assertions-core:$kotestVersion")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
}
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 b999a75d2c..463cbf2b1f 100644
--- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt
+++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt
@@ -33,8 +33,8 @@ package io.spine.dependency.local
*/
@Suppress("ConstPropertyName", "unused")
object Base {
- const val version = "2.0.0-SNAPSHOT.386"
- const val versionForBuildScript = "2.0.0-SNAPSHOT.386"
+ const val version = "2.0.0-SNAPSHOT.387"
+ const val versionForBuildScript = "2.0.0-SNAPSHOT.387"
const val group = Spine.group
private const val prefix = "spine"
const val libModule = "$prefix-base"
diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Time.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Time.kt
index 1d0481d8e4..e78af421da 100644
--- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Time.kt
+++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Time.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2025, TeamDev. All rights reserved.
+ * Copyright 2026, TeamDev. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -26,18 +26,43 @@
package io.spine.dependency.local
+import io.spine.dependency.Dependency
+
/**
* Spine Time library.
*
* @see spine-time
*/
-@Suppress("ConstPropertyName")
-object Time {
- const val version = "2.0.0-SNAPSHOT.232"
- const val group = Spine.group
- const val artifact = "spine-time"
- const val lib = "$group:$artifact:$version"
- const val javaExtensions = "$group:$artifact-java:$version"
- const val kotlinExtensions = "$group:$artifact-kotlin:$version"
- const val testLib = "${Spine.toolsGroup}:spine-time-testlib:$version"
+@Suppress(
+ "unused" /* Some subprojects do not use all Time artifacts. */,
+ "ConstPropertyName" /* We use custom convention for artifact properties. */,
+ "MemberVisibilityCanBePrivate" /* The properties are used directly by other subprojects. */,
+)
+object Time : Dependency() {
+ override val group = Spine.group
+ override val version = "2.0.0-SNAPSHOT.235"
+ private const val infix = "spine-time"
+
+ fun lib(version: String): String = "$group:$infix:$version"
+ val lib get() = lib(version)
+ const val libArtifact: String = infix
+
+ fun javaExtensions(version: String): String = "$group:$infix-java:$version"
+ val javaExtensions get() = javaExtensions(version)
+
+ fun kotlinExtensions(version: String): String = "$group:$infix-kotlin:$version"
+ val kotlinExtensions get() = kotlinExtensions(version)
+
+ fun testLib(version: String): String = "${Spine.toolsGroup}:time-testlib:$version"
+ val testLib get() = testLib(version)
+
+ override val modules: List
+ get() = listOf(
+ lib,
+ javaExtensions,
+ kotlinExtensions,
+ testLib
+ ).map {
+ it.split(":").let { (g, artifact) -> "$g:$artifact" }
+ }
}
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 872127af22..c4b9b6dc7e 100644
--- a/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt
+++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt
@@ -34,8 +34,8 @@ package io.spine.dependency.local
@Suppress("ConstPropertyName", "unused")
object ToolBase {
const val group = Spine.toolsGroup
- const val version = "2.0.0-SNAPSHOT.375"
- const val dogfoodingVersion = "2.0.0-SNAPSHOT.375"
+ const val version = "2.0.0-SNAPSHOT.376"
+ const val dogfoodingVersion = "2.0.0-SNAPSHOT.376"
const val lib = "$group:tool-base:$version"
const val classicCodegen = "$group:classic-codegen:$version"
diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Validation.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Validation.kt
index cf429bf432..3917eeb972 100644
--- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Validation.kt
+++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Validation.kt
@@ -36,7 +36,7 @@ object Validation {
/**
* The version of the Validation library artifacts.
*/
- const val version = "2.0.0-SNAPSHOT.408"
+ const val version = "2.0.0-SNAPSHOT.409"
/**
* The last version of Validation compatible with ProtoData.
diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/test/Kotest.kt b/buildSrc/src/main/kotlin/io/spine/dependency/test/Kotest.kt
index bc5a36c120..58fb528762 100644
--- a/buildSrc/src/main/kotlin/io/spine/dependency/test/Kotest.kt
+++ b/buildSrc/src/main/kotlin/io/spine/dependency/test/Kotest.kt
@@ -35,7 +35,7 @@ package io.spine.dependency.test
*/
@Suppress("unused", "ConstPropertyName")
object Kotest {
- const val version = "6.0.4"
+ const val version = "6.1.10"
const val group = "io.kotest"
const val gradlePluginId = "io.kotest"
const val assertions = "$group:kotest-assertions-core:$version"
diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/docs/UpdatePluginVersion.kt b/buildSrc/src/main/kotlin/io/spine/gradle/docs/UpdatePluginVersion.kt
index e384aa75bf..0277bcd281 100644
--- a/buildSrc/src/main/kotlin/io/spine/gradle/docs/UpdatePluginVersion.kt
+++ b/buildSrc/src/main/kotlin/io/spine/gradle/docs/UpdatePluginVersion.kt
@@ -90,10 +90,12 @@ abstract class UpdatePluginVersion : DefaultTask() {
}
}
+ @Suppress("MemberNameEqualsClassName")
private fun updatePluginVersion(file: File, id: String, version: String) {
val content = file.readText()
- // Regex to match: id("plugin-id") version "version-number"
- val regex = """id\("$id"\)\s+version\s+"([^"]+)"""".toRegex()
+ val pluginId = Regex.escape(id)
+ // Regex to match: id("pluginId") version "version-number"
+ val regex = """id\("$pluginId"\)\s+version\s+"([^"]+)"""".toRegex()
if (regex.containsMatchIn(content)) {
val updatedContent = regex.replace(content) {
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 480175fef1..37fdf5f7db 100644
--- a/buildSrc/src/main/kotlin/io/spine/gradle/publish/SpinePublishing.kt
+++ b/buildSrc/src/main/kotlin/io/spine/gradle/publish/SpinePublishing.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2025, TeamDev. All rights reserved.
+ * Copyright 2026, TeamDev. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -29,6 +29,7 @@
package io.spine.gradle.publish
import io.spine.gradle.repo.Repository
+import java.util.Locale
import org.gradle.api.Project
import org.gradle.api.publish.maven.plugins.MavenPublishPlugin
import org.gradle.kotlin.dsl.apply
@@ -145,9 +146,10 @@ import org.gradle.kotlin.dsl.findByType
* @see [artifacts]
* @see SpinePublishing
*/
-fun Project.spinePublishing(block: SpinePublishing.() -> Unit) {
+fun Project.spinePublishing(block: SpinePublishing.() -> Unit): SpinePublishing {
apply()
val name = SpinePublishing::class.java.simpleName
+ .replaceFirstChar { it.lowercase(Locale.getDefault()) }
val extension = with(extensions) {
findByType() ?: create(name, project)
}
@@ -155,6 +157,7 @@ fun Project.spinePublishing(block: SpinePublishing.() -> Unit) {
block()
configured()
}
+ return extension
}
/**
@@ -182,6 +185,12 @@ open class SpinePublishing(private val project: Project) {
* The default prefix added before a module name when publishing artifacts.
*/
const val DEFAULT_PREFIX = "spine-"
+
+ /**
+ * The reserved value that means that no prefix should be added
+ * to a tool module's artifact ID.
+ */
+ const val NONE_PREFIX = "NONE"
}
private val testJar = TestJar()
@@ -250,10 +259,23 @@ open class SpinePublishing(private val project: Project) {
lateinit var destinations: Set
/**
- * A prefix to be added before the name of each artifact.
+ * A prefix to be added before the name of each artifact, if it does not belong
+ * to the Maven group `"io.spine.tools"`.
+ *
+ * @see toolArtifactPrefix
*/
var artifactPrefix: String = DEFAULT_PREFIX
+ /**
+ * A prefix to be added before a module name if it belongs to
+ * the Maven group `"io.spine.tools"`.
+ *
+ * Use `"NONE"` if you need no prefix before tool module names.
+ *
+ * @see artifactPrefix
+ */
+ var toolArtifactPrefix: String = ""
+
/**
* Allows enabling publishing of [testJar] artifact, containing compilation output
* of "test" source set.
@@ -389,10 +411,26 @@ open class SpinePublishing(private val project: Project) {
/**
* Obtains an artifact ID for the given project.
*
- * It consists of a project's name and [prefix][artifactPrefix]:
- * ``.
+ * @see artifactPrefix
+ * @see toolArtifactPrefix
*/
- fun artifactId(project: Project): String = "$artifactPrefix${project.name}"
+ fun artifactId(project: Project): String {
+ if (project.isTool) {
+ check(!toolArtifactPrefix.isEmpty()) {
+ "Artifact prefix cannot be empty for tool modules. " +
+ "Please set the `toolArtifactPrefix` property in `spinePublishing`. " +
+ "Use `\"NONE\"` to have an empty prefix for tool modules."
+ }
+ val prefix =
+ if (toolArtifactPrefix == NONE_PREFIX) { "" }
+ else { toolArtifactPrefix }
+ return "$prefix${project.name}"
+ }
+ return "$artifactPrefix${project.name}"
+ }
+
+ private val Project.isTool: Boolean
+ get() = group == "io.spine.tools"
/**
* Ensures that all modules, marked as included into [testJar] publishing,
diff --git a/buildSrc/src/test/kotlin/io/spine/gradle/docs/UpdatePluginVersionTest.kt b/buildSrc/src/test/kotlin/io/spine/gradle/docs/UpdatePluginVersionTest.kt
index 43bad6d93c..1674b3d34a 100644
--- a/buildSrc/src/test/kotlin/io/spine/gradle/docs/UpdatePluginVersionTest.kt
+++ b/buildSrc/src/test/kotlin/io/spine/gradle/docs/UpdatePluginVersionTest.kt
@@ -26,13 +26,15 @@
package io.spine.gradle.docs
+import io.kotest.matchers.string.shouldContain
import java.io.File
import org.gradle.testfixtures.ProjectBuilder
-import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.BeforeEach
+import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.io.TempDir
+@DisplayName("`UpdatePluginVersion` should")
class UpdatePluginVersionTest {
@TempDir
@@ -64,8 +66,8 @@ class UpdatePluginVersionTest {
task.get().update()
val updatedContent = buildFile.readText()
- assertTrue(updatedContent.contains("""id("io.spine.validation") version "2.0.0-TEST""""))
- assertTrue(updatedContent.contains("""id("other-plugin") version "0.1.0""""))
+ updatedContent shouldContain """id("io.spine.validation") version "2.0.0-TEST""""
+ updatedContent shouldContain """id("other-plugin") version "0.1.0""""
}
@Test
@@ -90,8 +92,8 @@ class UpdatePluginVersionTest {
task.get().update()
val updatedContent = buildFile.readText()
- assertTrue(updatedContent.contains("""kotlin("jvm") version "2.2.21"""))
- assertTrue(updatedContent.contains("""id("io.spine.validation") version "2.0.0-TEST"""))
+ updatedContent shouldContain """kotlin("jvm") version "2.2.21""""
+ updatedContent shouldContain """id("io.spine.validation") version "2.0.0-TEST""""
}
@Test
@@ -112,6 +114,6 @@ class UpdatePluginVersionTest {
task.get().update()
val updatedContent = buildFile.readText()
- assertTrue(updatedContent.contains("""id("io.spine.validation") version "2.0.0-TEST""""))
+ updatedContent shouldContain """id("io.spine.validation") version "2.0.0-TEST""""
}
}
diff --git a/buildSrc/src/test/kotlin/io/spine/gradle/publish/SpinePublishingTest.kt b/buildSrc/src/test/kotlin/io/spine/gradle/publish/SpinePublishingTest.kt
new file mode 100644
index 0000000000..37f58e0403
--- /dev/null
+++ b/buildSrc/src/test/kotlin/io/spine/gradle/publish/SpinePublishingTest.kt
@@ -0,0 +1,261 @@
+/*
+ * Copyright 2026, TeamDev. All rights reserved.
+ *
+ * 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
+ *
+ * Redistribution and use in source and/or binary forms, with or without
+ * modification, must retain the above copyright notice and the following
+ * disclaimer.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package io.spine.gradle.publish
+
+import io.kotest.assertions.throwables.shouldThrow
+import io.kotest.matchers.collections.shouldContain
+import io.kotest.matchers.collections.shouldHaveSize
+import io.kotest.matchers.shouldBe
+import io.kotest.matchers.string.shouldContain
+import io.spine.gradle.repo.Repository
+import org.gradle.api.Project
+import org.gradle.kotlin.dsl.create
+import org.gradle.testfixtures.ProjectBuilder
+import org.junit.jupiter.api.BeforeEach
+import org.junit.jupiter.api.DisplayName
+import org.junit.jupiter.api.Nested
+import org.junit.jupiter.api.Test
+
+@DisplayName("`SpinePublishing` should")
+class SpinePublishingTest {
+
+ private lateinit var project: Project
+ private lateinit var extension: SpinePublishing
+
+ @BeforeEach
+ fun setUp() {
+ project = ProjectBuilder.builder().build()
+ extension = project.spinePublishing { }
+ }
+
+ @Nested
+ inner class `calculate 'artifactId'` {
+
+ @Test
+ fun `with default prefix for non-tool projects`() {
+ val subproject = ProjectBuilder.builder()
+ .withParent(project)
+ .withName("base")
+ .build()
+ subproject.group = "io.spine"
+
+ extension.artifactId(subproject) shouldBe "spine-base"
+ }
+
+ @Test
+ fun `with custom prefix for non-tool projects`() {
+ extension.artifactPrefix = "custom-"
+ val subproject = ProjectBuilder.builder()
+ .withParent(project)
+ .withName("core")
+ .build()
+ subproject.group = "io.spine"
+
+ extension.artifactId(subproject) shouldBe "custom-core"
+ }
+
+ @Test
+ fun `with tool prefix for tool projects`() {
+ extension.toolArtifactPrefix = "tool-"
+ val toolProject = ProjectBuilder.builder()
+ .withParent(project)
+ .withName("model-compiler")
+ .build()
+ toolProject.group = "io.spine.tools"
+
+ extension.artifactId(toolProject) shouldBe "tool-model-compiler"
+ }
+
+ @Test
+ fun `without prefix for tool projects if 'NONE' is specified`() {
+ extension.toolArtifactPrefix = "NONE"
+ val toolProject = ProjectBuilder.builder()
+ .withParent(project)
+ .withName("proto-js")
+ .build()
+ toolProject.group = "io.spine.tools"
+
+ extension.artifactId(toolProject) shouldBe "proto-js"
+ }
+
+ @Test
+ fun `throwing IllegalStateException if tool prefix is empty for tool projects`() {
+ extension.toolArtifactPrefix = ""
+ val toolProject = ProjectBuilder.builder()
+ .withParent(project)
+ .withName("tool")
+ .build()
+ toolProject.group = "io.spine.tools"
+
+ shouldThrow {
+ extension.artifactId(toolProject)
+ }
+ }
+ }
+
+ @Nested
+ inner class `validate configuration` {
+
+ @Test
+ fun `ensuring 'testJar' inclusions are published`() {
+ extension.modules = setOf("pub-module")
+ extension.testJar {
+ inclusions = setOf("non-pub-module")
+ }
+
+ val exception = shouldThrow {
+ extension.configured()
+ }
+ exception.message!! shouldContain "non-pub-module"
+ }
+
+ @Test
+ fun `ensuring 'customPublishing' is not misused with modules`() {
+ extension.modules = setOf("some-module")
+ extension.customPublishing = true
+
+ val exception = shouldThrow {
+ extension.configured()
+ }
+ exception.message!! shouldContain "customPublishing"
+ }
+
+ @Test
+ fun `ensuring modules are not duplicated in root and subproject`() {
+ val rootProject = project
+ val subproject = ProjectBuilder.builder()
+ .withParent(rootProject)
+ .withName("sub")
+ .build()
+
+ // Root project already has the 'spinePublishing' extension created in 'setUp'.
+ // Let's use it instead of creating a second one with a different name.
+ extension.modules = setOf("sub")
+
+ // Subproject's extension must be named 'SpinePublishing'
+ // to be found by SpinePublishing::class.java.simpleName
+ val extensionName = SpinePublishing::class.java.simpleName
+ val subExtension = subproject.extensions.create(extensionName, subproject)
+
+ val exception = shouldThrow {
+ subExtension.configured()
+ }
+ exception.message!! shouldContain "already configured in a root project"
+ }
+ }
+
+ @Nested
+ inner class `identify 'projectsToPublish'` {
+
+ @Test
+ fun `as the project itself if no modules are specified`() {
+ val projects = extension.invokeProjectsToPublish()
+ projects shouldHaveSize 1
+ projects shouldContain project
+ }
+
+ @Test
+ fun `as the specified modules`() {
+ val sub1 = ProjectBuilder.builder().withParent(project).withName("sub1").build()
+ val sub2 = ProjectBuilder.builder().withParent(project).withName("sub2").build()
+
+ extension.modules = setOf("sub1", "sub2")
+
+ val projects = extension.invokeProjectsToPublish()
+ projects shouldHaveSize 2
+ projects shouldContain sub1
+ projects shouldContain sub2
+ }
+
+ @Test
+ fun `including modules with custom publishing`() {
+ val sub1 = ProjectBuilder.builder().withParent(project).withName("sub1").build()
+ val sub2 = ProjectBuilder.builder().withParent(project).withName("sub2").build()
+
+ extension.modules = setOf("sub1")
+ extension.modulesWithCustomPublishing = setOf("sub2")
+
+ val projects = extension.invokeProjectsToPublish()
+ projects shouldHaveSize 2
+ projects shouldContain sub1
+ projects shouldContain sub2
+ }
+ }
+
+ @Nested
+ inner class `resolve 'publishTo' repositories` {
+
+ @Test
+ fun `from the extension itself if destinations are initialized`() {
+ val repo = Repository(
+ "test-repo",
+ "https://example.com/release",
+ "https://example.com/snapshot"
+ )
+ extension.destinations = setOf(repo)
+
+ val repos = project.invokePublishTo(extension)
+ repos shouldHaveSize 1
+ repos shouldContain repo
+ }
+
+ @Test
+ fun `from the parent project if not specified locally`() {
+ val repo = Repository(
+ "parent-repo",
+ "https://example.com/release",
+ "https://example.com/snapshot"
+ )
+ // Root project has its extension named 'spinePublishing' from setUp.
+ extension.destinations = setOf(repo)
+
+ val subproject = ProjectBuilder.builder().withParent(project).withName("sub").build()
+ // Subproject has no local 'spinePublishing' extension.
+
+ val repos = subproject.invokePublishTo(extension)
+ repos shouldHaveSize 1
+ repos shouldContain repo
+ }
+ }
+}
+
+/**
+ * Accesses private/internal methods of [SpinePublishing] for testing purposes.
+ */
+private fun SpinePublishing.invokeProjectsToPublish(): Collection {
+ val method = SpinePublishing::class.java.getDeclaredMethod("projectsToPublish")
+ method.isAccessible = true
+ @Suppress("UNCHECKED_CAST")
+ return method.invoke(this) as Collection
+}
+
+private fun Project.invokePublishTo(extension: SpinePublishing): Set {
+ val method = SpinePublishing::class.java.getDeclaredMethod("publishTo", Project::class.java)
+ method.isAccessible = true
+ @Suppress("UNCHECKED_CAST")
+ return method.invoke(extension, this) as Set
+}
diff --git a/config b/config
index 16dc2128cb..dfc4f6db3f 160000
--- a/config
+++ b/config
@@ -1 +1 @@
-Subproject commit 16dc2128cb2e215c648e794723bf69711b0a6e08
+Subproject commit dfc4f6db3f25e0eddbf640e148c3cb2d3a3795b1
diff --git a/dependencies.md b/dependencies.md
index a8617d3405..fe0f5fafff 100644
--- a/dependencies.md
+++ b/dependencies.md
@@ -1,6 +1,6 @@
-# Dependencies of `io.spine.tools:validation-context:2.0.0-SNAPSHOT.409`
+# Dependencies of `io.spine.tools:validation-context:2.0.0-SNAPSHOT.410`
## Runtime
1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.20.0.
@@ -640,27 +640,27 @@
* **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java)
* **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-core. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-core. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-core-jvm. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-core-jvm. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-shared. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-shared. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-shared-jvm. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-shared-jvm. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-common. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-common. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-common-jvm. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-common-jvm. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
@@ -1114,14 +1114,14 @@
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
+This report was generated on **Fri Apr 03 17:45:06 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.409`
+# Dependencies of `io.spine.tools:validation-context-tests:2.0.0-SNAPSHOT.410`
## Runtime
1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.20.0.
@@ -1718,28 +1718,28 @@ This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
+This report was generated on **Fri Apr 03 17:45:02 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.409`
+# Dependencies of `io.spine.tools:validation-docs:2.0.0-SNAPSHOT.410`
## Runtime
## Compile, tests, and tooling
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Thu Mar 26 16:48:33 WET 2026** using
+This report was generated on **Fri Apr 03 17:45:01 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.409`
+# Dependencies of `io.spine.tools:validation-gradle-plugin:2.0.0-SNAPSHOT.410`
## Runtime
1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.20.0.
@@ -2317,27 +2317,27 @@ This report was generated on **Thu Mar 26 16:48:33 WET 2026** using
* **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java)
* **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-core. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-core. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-core-jvm. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-core-jvm. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-shared. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-shared. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-shared-jvm. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-shared-jvm. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-common. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-common. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-common-jvm. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-common-jvm. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
@@ -2791,14 +2791,14 @@ This report was generated on **Thu Mar 26 16:48:33 WET 2026** using
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
+This report was generated on **Fri Apr 03 17:45:04 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.409`
+# Dependencies of `io.spine.tools:validation-java:2.0.0-SNAPSHOT.410`
## Runtime
1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.20.0.
@@ -3390,27 +3390,27 @@ This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
* **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java)
* **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-core. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-core. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-core-jvm. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-core-jvm. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-shared. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-shared. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-shared-jvm. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-shared-jvm. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-common. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-common. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-common-jvm. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-common-jvm. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
@@ -3844,14 +3844,14 @@ This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
+This report was generated on **Fri Apr 03 17:45:04 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.409`
+# Dependencies of `io.spine.tools:validation-java-bundle:2.0.0-SNAPSHOT.410`
## Runtime
1. **Group** : org.jetbrains. **Name** : annotations. **Version** : 13.0.
@@ -3898,14 +3898,14 @@ This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Thu Mar 26 17:10:28 WET 2026** using
+This report was generated on **Fri Apr 03 17:45:01 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:validation-jvm-runtime:2.0.0-SNAPSHOT.409`
+# Dependencies of `io.spine:spine-validation-jvm-runtime:2.0.0-SNAPSHOT.410`
## Runtime
1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2.
@@ -4271,27 +4271,27 @@ This report was generated on **Thu Mar 26 17:10:28 WET 2026** using
* **Project URL:** [https://detekt.dev](https://detekt.dev)
* **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
-1. **Group** : io.kotest. **Name** : kotest-assertions-core. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-core. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-core-jvm. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-core-jvm. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-shared. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-shared. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-shared-jvm. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-shared-jvm. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-common. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-common. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-common-jvm. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-common-jvm. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
@@ -4705,14 +4705,14 @@ This report was generated on **Thu Mar 26 17:10:28 WET 2026** using
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
+This report was generated on **Fri Apr 03 17:45:03 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.409`
+# Dependencies of `io.spine.tools:validation-consumer:2.0.0-SNAPSHOT.410`
## Runtime
1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.20.0.
@@ -5295,14 +5295,14 @@ This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
+This report was generated on **Fri Apr 03 17:45:02 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.409`
+# Dependencies of `io.spine.tools:validation-consumer-dependency:2.0.0-SNAPSHOT.410`
## Runtime
1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2.
@@ -5780,14 +5780,14 @@ This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
+This report was generated on **Fri Apr 03 17:45:03 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.409`
+# Dependencies of `io.spine.tools:validation-extensions:2.0.0-SNAPSHOT.410`
## Runtime
1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.20.0.
@@ -6424,14 +6424,14 @@ This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
+This report was generated on **Fri Apr 03 17:45:03 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.409`
+# Dependencies of `io.spine.tools:validation-runtime:2.0.0-SNAPSHOT.410`
## Runtime
1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2.
@@ -6744,27 +6744,27 @@ This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
* **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java)
* **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-core. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-core. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-core-jvm. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-core-jvm. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-shared. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-shared. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-shared-jvm. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-shared-jvm. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-common. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-common. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-common-jvm. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-common-jvm. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
@@ -7016,14 +7016,14 @@ This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
+This report was generated on **Fri Apr 03 17:45:03 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.409`
+# Dependencies of `io.spine.tools:validation-validating:2.0.0-SNAPSHOT.410`
## Runtime
1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2.
@@ -7359,27 +7359,27 @@ This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
* **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java)
* **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-core. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-core. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-core-jvm. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-core-jvm. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-shared. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-shared. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-shared-jvm. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-shared-jvm. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-common. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-common. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-common-jvm. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-common-jvm. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
@@ -7647,14 +7647,14 @@ This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
+This report was generated on **Fri Apr 03 17:45:03 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.409`
+# Dependencies of `io.spine.tools:validation-validator:2.0.0-SNAPSHOT.410`
## Runtime
1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.20.0.
@@ -8114,27 +8114,27 @@ This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
* **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java)
* **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-core. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-core. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-core-jvm. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-core-jvm. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-shared. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-shared. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-shared-jvm. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-shared-jvm. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-common. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-common. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-common-jvm. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-common-jvm. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
@@ -8390,14 +8390,14 @@ This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
+This report was generated on **Fri Apr 03 17:45:03 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.409`
+# Dependencies of `io.spine.tools:validation-validator-dependency:2.0.0-SNAPSHOT.410`
## Runtime
1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2.
@@ -8630,14 +8630,14 @@ This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
+This report was generated on **Fri Apr 03 17:45:02 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.409`
+# Dependencies of `io.spine.tools:validation-vanilla:2.0.0-SNAPSHOT.410`
## Runtime
1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2.
@@ -8824,27 +8824,27 @@ This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
1. **Group** : io.github.java-diff-utils. **Name** : java-diff-utils. **Version** : 4.16.
* **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-1. **Group** : io.kotest. **Name** : kotest-assertions-core. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-core. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-core-jvm. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-core-jvm. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-shared. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-shared. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-shared-jvm. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-assertions-shared-jvm. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-common. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-common. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-common-jvm. **Version** : 6.0.4.
+1. **Group** : io.kotest. **Name** : kotest-common-jvm. **Version** : 6.1.10.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
@@ -8980,6 +8980,6 @@ This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Thu Mar 26 17:10:29 WET 2026** using
+This report was generated on **Fri Apr 03 17:45:02 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/_examples b/docs/_examples
index 53809c8701..4ce8b4d494 160000
--- a/docs/_examples
+++ b/docs/_examples
@@ -1 +1 @@
-Subproject commit 53809c87013a33977613a34eaa5208fd4323fff9
+Subproject commit 4ce8b4d494aae795a93887cfb6e71ccc982fec1a
diff --git a/docs/_preview/package-lock.json b/docs/_preview/package-lock.json
index f2a2bed615..248e35a432 100644
--- a/docs/_preview/package-lock.json
+++ b/docs/_preview/package-lock.json
@@ -763,10 +763,11 @@
"dev": true
},
"node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8.6"
},
@@ -1153,10 +1154,11 @@
}
},
"node_modules/tinyglobby/node_modules/picomatch": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
- "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12"
},
diff --git a/docs/content/docs/validation/01-getting-started/adding-to-build.md b/docs/content/docs/validation/01-getting-started/adding-to-build.md
index ec811fa82b..7e5ebe8778 100644
--- a/docs/content/docs/validation/01-getting-started/adding-to-build.md
+++ b/docs/content/docs/validation/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.409"
+ id("io.spine.validation") version "2.0.0-SNAPSHOT.410"
}
```
diff --git a/java-bundle/build.gradle.kts b/java-bundle/build.gradle.kts
index e21237a081..cfe5215590 100644
--- a/java-bundle/build.gradle.kts
+++ b/java-bundle/build.gradle.kts
@@ -83,7 +83,7 @@ dependencies {
Change.group to Change.artifact,
Logging.group to Logging.loggingArtifact,
Reflect.group to Reflect.artifact,
- Time.group to Time.artifact,
+ Time.group to Time.libArtifact,
CoreJvm.group to CoreJvm.serverArtifact,
).forEach { (group, artifact) ->
diff --git a/pom.xml b/pom.xml
index 2c9afc3c22..248febda6b 100644
--- a/pom.xml
+++ b/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.409
+2.0.0-SNAPSHOT.410
2015
@@ -50,19 +50,19 @@ all modules and does not describe the project structure per-subproject.
io.spine
spine-base
- 2.0.0-SNAPSHOT.386
+ 2.0.0-SNAPSHOT.387
compile
io.spine
spine-time
- 2.0.0-SNAPSHOT.232
+ 2.0.0-SNAPSHOT.235
compile
io.spine
spine-validation-jvm-runtime
- 2.0.0-SNAPSHOT.408
+ 2.0.0-SNAPSHOT.409
compile
@@ -92,7 +92,7 @@ all modules and does not describe the project structure per-subproject.
io.spine.tools
jvm-tools
- 2.0.0-SNAPSHOT.375
+ 2.0.0-SNAPSHOT.376
compile
@@ -146,7 +146,7 @@ all modules and does not describe the project structure per-subproject.
io.kotest
kotest-assertions-core
- 6.0.4
+ 6.1.10
test
@@ -289,7 +289,7 @@ all modules and does not describe the project structure per-subproject.
io.spine.tools
validation-java-bundle
- 2.0.0-SNAPSHOT.408
+ 2.0.0-SNAPSHOT.409
net.sourceforge.pmd
diff --git a/version.gradle.kts b/version.gradle.kts
index fd11e7cf40..d8860bdb28 100644
--- a/version.gradle.kts
+++ b/version.gradle.kts
@@ -29,4 +29,4 @@
*
* For Spine-based dependencies please see [io.spine.dependency.local.Spine].
*/
-val validationVersion by extra("2.0.0-SNAPSHOT.409")
+val validationVersion by extra("2.0.0-SNAPSHOT.410")