diff --git a/.agents/tasks/validation-documentation-plan.md b/.agents/tasks/validation-documentation-plan.md new file mode 100644 index 0000000000..fb45460d54 --- /dev/null +++ b/.agents/tasks/validation-documentation-plan.md @@ -0,0 +1,76 @@ +# Spine Validation documentation plan (repo-local) + +This repository contains the **staging** content for Spine Validation docs. +The goal of this plan is to turn the existing drafts + references into a coherent, +buildable documentation set, without expanding scope unnecessarily. + +## Key locations (source of truth) + +- Docs content (Hugo): `/Users/sanders/Projects/Spine/validation/docs/content/docs/validation/` +- Protobuf options reference (for built-ins): + - `/Users/sanders/Projects/Spine/validation/docs/_options/options.proto` + - `/Users/sanders/Projects/Spine/validation/docs/_options/time_options.proto` +- Example projects for embedded snippets: `/Users/sanders/Projects/Spine/validation/docs/_examples/` +- Docs build notes: `/Users/sanders/Projects/Spine/validation/docs/GRADLE.md` + +## Definition of done (for a “first complete docs cut”) + +- Navigation is consistent (no dead links between pages). +- Embedded code snippets are up-to-date (`checkSamples` passes). +- Preview site builds locally (`buildSite` succeeds). +- “Getting started” can be followed end-to-end without guessing. + +## Minimal task list (in order) + +1) Information architecture (IA): make Hugo navigation coherent +- Status: DONE (2026-02-23). +- Added/updated section landing pages: + - `/Users/sanders/Projects/Spine/validation/docs/content/docs/validation/_index.md` + - `/Users/sanders/Projects/Spine/validation/docs/content/docs/validation/09-developers-guide/_index.md` +- Replaced broken `.../index.md` links with directory links where appropriate: + - `/Users/sanders/Projects/Spine/validation/docs/content/docs/validation/00-intro/_index.md` + - `/Users/sanders/Projects/Spine/validation/docs/content/docs/validation/01-getting-started/_index.md` +- Added “What’s next” navigation to keep a clear reading path: + - `/Users/sanders/Projects/Spine/validation/docs/content/docs/validation/00-intro/target-audience.md` + - `/Users/sanders/Projects/Spine/validation/docs/content/docs/validation/00-intro/philosophy.md` + - `/Users/sanders/Projects/Spine/validation/docs/content/docs/validation/09-developers-guide/architecture.md` + - `/Users/sanders/Projects/Spine/validation/docs/content/docs/validation/09-developers-guide/key-modules.md` + - `/Users/sanders/Projects/Spine/validation/docs/content/docs/validation/01-getting-started/first-model.md` +- Fixed an obvious broken image reference: + `/Users/sanders/Projects/Spine/validation/docs/content/docs/validation/08-custom-validation/_index.md` + +2) Complete “Getting started” flow +- Status: DONE (2026-02-24). +- Validate that the "Getting started" section covers: + importing options, build-time validation, `build()` vs `buildPartial()`, and `validate()`. + +3) Concepts: explain how Validation works (one layer deeper than “getting started”) +- Add a Concepts landing page and an “options overview” page that explains: + where options come from, how they’re applied, and what code gets generated. +- Keep this conceptual (no option-by-option details yet). + +4) Built-in options: publish a minimal reference set +- From `/Users/sanders/Projects/Spine/validation/docs/_options/options.proto` and + `/Users/sanders/Projects/Spine/validation/docs/_options/time_options.proto`, + enumerate the built-in options and group them (fields, strings, numbers, collections, message-level, time). +- For each documented option: purpose, supported field types, common pitfalls, and a short `.proto` example. +- Start with the options already used in docs/examples: `(required)`, `(pattern)`, `(min)/(max)`, + `(distinct)`, `(validate)`, `(when)`. + +5) Runtime API usage (Java + Kotlin) +- Document the two primary usage patterns: + - fail-fast on `build()` (throws `ValidationException`); + - non-throwing `validate()` (returns `Optional`). +- Link to the runtime entry points used by generated code: + `/Users/sanders/Projects/Spine/validation/jvm-runtime/src/main/java/io/spine/validation/ValidatableMessage.java`, + `/Users/sanders/Projects/Spine/validation/jvm-runtime/src/main/java/io/spine/validation/ValidatingBuilder.java`, + `/Users/sanders/Projects/Spine/validation/jvm-runtime/src/main/java/io/spine/validation/Validate.java`, + `/Users/sanders/Projects/Spine/validation/jvm-runtime/src/main/java/io/spine/validation/ValidationException.java`, + `/Users/sanders/Projects/Spine/validation/jvm-runtime/src/main/kotlin/io/spine/validation/MessageExtensions.kt`. + +6) Verification pass (keep it tight; fix only doc-related issues) +- From `/Users/sanders/Projects/Spine/validation/docs/`, run: + - `./gradlew embedCode` + - `./gradlew checkSamples` + - `./gradlew buildSite` +- If something fails, fix the docs, embedded snippet markers, or example sources until green. diff --git a/.github/readme/typical_custom_option.jpg b/.github/readme/typical_custom_option.jpg deleted file mode 100644 index a5d2faf550..0000000000 Binary files a/.github/readme/typical_custom_option.jpg and /dev/null differ diff --git a/dependencies.md b/dependencies.md index 44f3957cd6..bf23d06224 100644 --- a/dependencies.md +++ b/dependencies.md @@ -1,6 +1,6 @@ -# Dependencies of `io.spine.tools:validation-context:2.0.0-SNAPSHOT.396` +# Dependencies of `io.spine.tools:validation-context:2.0.0-SNAPSHOT.398` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.20.0. @@ -1139,14 +1139,14 @@ The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Feb 23 18:35:35 WET 2026** using +This report was generated on **Tue Feb 24 20:44:06 WET 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.396` +# Dependencies of `io.spine.tools:validation-context-tests:2.0.0-SNAPSHOT.398` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.20.0. @@ -1731,7 +1731,7 @@ This report was generated on **Mon Feb 23 18:35:35 WET 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Feb 23 18:35:34 WET 2026** using +This report was generated on **Tue Feb 24 20:44:05 WET 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). @@ -1752,7 +1752,7 @@ This report was generated on **Mon Feb 23 18:35:33 WET 2026** using -# Dependencies of `io.spine.tools:validation-gradle-plugin:2.0.0-SNAPSHOT.396` +# Dependencies of `io.spine.tools:validation-gradle-plugin:2.0.0-SNAPSHOT.398` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.20.0. @@ -2841,14 +2841,14 @@ This report was generated on **Mon Feb 23 18:35:33 WET 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Feb 23 18:35:34 WET 2026** using +This report was generated on **Tue Feb 24 20:44:06 WET 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.396` +# Dependencies of `io.spine.tools:validation-java:2.0.0-SNAPSHOT.398` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.20.0. @@ -3935,14 +3935,14 @@ This report was generated on **Mon Feb 23 18:35:34 WET 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Feb 23 18:35:34 WET 2026** using +This report was generated on **Tue Feb 24 20:44:06 WET 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.396` +# Dependencies of `io.spine.tools:validation-java-bundle:2.0.0-SNAPSHOT.398` ## Runtime 1. **Group** : com.google.auto.service. **Name** : auto-service-annotations. **Version** : 1.1.1. @@ -4005,14 +4005,14 @@ This report was generated on **Mon Feb 23 18:35:34 WET 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Feb 23 18:35:34 WET 2026** using +This report was generated on **Tue Feb 24 20:44:05 WET 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.396` +# Dependencies of `io.spine:validation-jvm-runtime:2.0.0-SNAPSHOT.398` ## Runtime 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -4845,14 +4845,14 @@ This report was generated on **Mon Feb 23 18:35:34 WET 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Feb 23 18:35:34 WET 2026** using +This report was generated on **Tue Feb 24 20:44:06 WET 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-ksp:2.0.0-SNAPSHOT.396` +# Dependencies of `io.spine.tools:validation-ksp:2.0.0-SNAPSHOT.398` ## Runtime 1. **Group** : com.google.auto.service. **Name** : auto-service-annotations. **Version** : 1.1.1. @@ -5781,14 +5781,14 @@ This report was generated on **Mon Feb 23 18:35:34 WET 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Feb 23 18:35:34 WET 2026** using +This report was generated on **Tue Feb 24 20:44:06 WET 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.396` +# Dependencies of `io.spine.tools:validation-consumer:2.0.0-SNAPSHOT.398` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.20.0. @@ -6379,14 +6379,14 @@ This report was generated on **Mon Feb 23 18:35:34 WET 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Feb 23 18:35:34 WET 2026** using +This report was generated on **Tue Feb 24 20:44:05 WET 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.396` +# Dependencies of `io.spine.tools:validation-consumer-dependency:2.0.0-SNAPSHOT.398` ## Runtime 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -6897,14 +6897,14 @@ This report was generated on **Mon Feb 23 18:35:34 WET 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Feb 23 18:35:34 WET 2026** using +This report was generated on **Tue Feb 24 20:44:05 WET 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.396` +# Dependencies of `io.spine.tools:validation-extensions:2.0.0-SNAPSHOT.398` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.20.0. @@ -7588,14 +7588,14 @@ This report was generated on **Mon Feb 23 18:35:34 WET 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Feb 23 18:35:35 WET 2026** using +This report was generated on **Tue Feb 24 20:44:05 WET 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.396` +# Dependencies of `io.spine.tools:validation-runtime:2.0.0-SNAPSHOT.398` ## Runtime 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -8217,14 +8217,14 @@ This report was generated on **Mon Feb 23 18:35:35 WET 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Feb 23 18:35:35 WET 2026** using +This report was generated on **Tue Feb 24 20:44:05 WET 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.396` +# Dependencies of `io.spine.tools:validation-validating:2.0.0-SNAPSHOT.398` ## Runtime 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -8889,14 +8889,14 @@ This report was generated on **Mon Feb 23 18:35:35 WET 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Feb 23 18:35:35 WET 2026** using +This report was generated on **Tue Feb 24 20:44:06 WET 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.396` +# Dependencies of `io.spine.tools:validation-validator:2.0.0-SNAPSHOT.398` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.20.0. @@ -9647,14 +9647,14 @@ This report was generated on **Mon Feb 23 18:35:35 WET 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Feb 23 18:35:34 WET 2026** using +This report was generated on **Tue Feb 24 20:44:05 WET 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.396` +# Dependencies of `io.spine.tools:validation-validator-dependency:2.0.0-SNAPSHOT.398` ## Runtime 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -9924,14 +9924,14 @@ This report was generated on **Mon Feb 23 18:35:34 WET 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Feb 23 18:35:34 WET 2026** using +This report was generated on **Tue Feb 24 20:44:05 WET 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.396` +# Dependencies of `io.spine.tools:validation-vanilla:2.0.0-SNAPSHOT.398` ## Runtime 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -10282,6 +10282,6 @@ This report was generated on **Mon Feb 23 18:35:34 WET 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Feb 23 18:35:34 WET 2026** using +This report was generated on **Tue Feb 24 20:44:05 WET 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 12c323626a..c15b15240a 160000 --- a/docs/_examples +++ b/docs/_examples @@ -1 +1 @@ -Subproject commit 12c323626a43c1d72662928d38aeb9e7f38cd791 +Subproject commit c15b15240a2d784dae161f84d316f9cf435843fc diff --git a/docs/_preview/go.mod b/docs/_preview/go.mod index c5586b141a..ced82e07df 100644 --- a/docs/_preview/go.mod +++ b/docs/_preview/go.mod @@ -3,7 +3,7 @@ module spine.io/validation/docs/preview go 1.25.6 require ( - github.com/SpineEventEngine/site-commons v0.0.0-20260212124406-a312b6eab34c // indirect + github.com/SpineEventEngine/site-commons v0.0.0-20260225164144-d5e941ada2ae // indirect github.com/gohugoio/hugo-mod-bootstrap-scss/v5 v5.20300.20400 // indirect github.com/gohugoio/hugo-mod-jslibs-dist/popperjs/v2 v2.21100.20000 // indirect github.com/twbs/bootstrap v5.3.8+incompatible // indirect diff --git a/docs/_preview/go.sum b/docs/_preview/go.sum index a2b8c5046a..69c70e17db 100644 --- a/docs/_preview/go.sum +++ b/docs/_preview/go.sum @@ -1,5 +1,5 @@ -github.com/SpineEventEngine/site-commons v0.0.0-20260212124406-a312b6eab34c h1:NtLNdAfuL3uQB+8cU5sBzx+2tlRXlxd1+76okBWj0Ek= -github.com/SpineEventEngine/site-commons v0.0.0-20260212124406-a312b6eab34c/go.mod h1:tkAl4StIREKmz9r5PiJtuDhvwMMkFXKWcaTyxhIikho= +github.com/SpineEventEngine/site-commons v0.0.0-20260225164144-d5e941ada2ae h1:pNjNP8lCXbbzArqX42kc2Rbj2LpqU18ltF+skxZ/xO4= +github.com/SpineEventEngine/site-commons v0.0.0-20260225164144-d5e941ada2ae/go.mod h1:tkAl4StIREKmz9r5PiJtuDhvwMMkFXKWcaTyxhIikho= github.com/gohugoio/hugo-mod-bootstrap-scss/v5 v5.20300.20400 h1:L6+F22i76xmeWWwrtijAhUbf3BiRLmpO5j34bgl1ggU= github.com/gohugoio/hugo-mod-bootstrap-scss/v5 v5.20300.20400/go.mod h1:uekq1D4ebeXgduLj8VIZy8TgfTjrLdSl6nPtVczso78= github.com/gohugoio/hugo-mod-jslibs-dist/popperjs/v2 v2.21100.20000 h1:GZxx4Hc+yb0/t3/rau1j8XlAxLE4CyXns2fqQbyqWfs= diff --git a/docs/content/ToC.md b/docs/content/ToC.md deleted file mode 100644 index bca994db07..0000000000 --- a/docs/content/ToC.md +++ /dev/null @@ -1,76 +0,0 @@ -# Spine Validation — Table of contents - -## Introduction -- [Overview](00-intro/index.md) -- [Target audience](00-intro/target-audience.md) -- [Philosophy](00-intro/philosophy.md) - -## 1. Getting started -- [Getting started](01-getting-started/index.md) -- [Adding Validation to a Gradle build](01-getting-started/adding-to-build.md) -- [Your first validated model](01-getting-started/first-model.md) -- [Validation workflow](01-getting-started/workflow.md) - -## 2. Concepts -- [Concepts overview](02-concepts/index.md) -- [Validation options overview](02-concepts/options-overview.md) -- [The validation engine](02-concepts/validation-engine.md) -- [Integration with Protobuf & Spine Compiler](02-concepts/protobuf-integration.md) - -## 3. Built-in validation options -- [Built-in options overview](03-built-in-options/index.md) - -### 3.1. Field constraints -- [Overview](03-built-in-options/fields/index.md) -- [required](03-built-in-options/fields/required.md) -- [pattern](03-built-in-options/fields/pattern.md) -- [min/max](03-built-in-options/fields/min-max.md) -- [range](03-built-in-options/fields/range.md) -- [length/size](03-built-in-options/fields/length-size.md) -- [unique](03-built-in-options/fields/unique.md) - -### 3.2. String constraints -- [Overview](03-built-in-options/strings/index.md) -- [Advanced patterns](03-built-in-options/strings/pattern-advanced.md) - -### 3.3. Numeric constraints -- [Overview](03-built-in-options/numbers/index.md) -- [Numeric bounds](03-built-in-options/numbers/numeric-bounds.md) - -### 3.4. Collection constraints -- [Overview](03-built-in-options/collections/index.md) -- [`(required)`](03-built-in-options/collections/required.md) -- [`(distinct)`](03-built-in-options/collections/distinct.md) -- [Collection size](03-built-in-options/collections/collection-size.md) - -### 3.5. Message-level constraints -- [Overview](03-built-in-options/message/index.md) -- [required_for](03-built-in-options/message/required-for.md) -- [Nested validation](03-built-in-options/message/nested-validation.md) -- [Cross-field validation](03-built-in-options/message/cross-field.md) - -## 4. Using validation in code -- [Overview](04-using-validation/index.md) -- [Validating messages](04-using-validation/validating-messages.md) -- [Handling errors](04-using-validation/handling-errors.md) -- [Kotlin usage](04-using-validation/kotlin-usage.md) -- [Framework integration](04-using-validation/framework-integration.md) - -## 5. Extending validation -- [Overview](06-extending/index.md) -- [Architecture](06-extending/architecture.md) -- [Custom validation options](06-extending/custom-options.md) -- [Custom runtime validators](06-extending/custom-runtime-validators.md) - -## 6. Recipes (cookbook) -- [Overview](07-recipes/index.md) -- [Domain IDs](07-recipes/domain-ids.md) -- [Common cases](07-recipes/common-cases.md) -- [Cross-field logic](07-recipes/cross-field-logic.md) -- [API validation](07-recipes/api-validation.md) - -## 7. Reference -- [Reference overview](08-reference/index.md) -- [List of validation options](08-reference/options.md) -- [Java/Kotlin API index](08-reference/api.md) -- [Glossary](08-reference/glossary.md) diff --git a/docs/content/docs/validation/00-intro/_index.md b/docs/content/docs/validation/00-intro/_index.md index 87bb6990dc..4b75f2792b 100644 --- a/docs/content/docs/validation/00-intro/_index.md +++ b/docs/content/docs/validation/00-intro/_index.md @@ -1,3 +1,9 @@ +--- +title: Introduction +description: Learn about Spine Validation components and key capabilities. +headline: Documentation +--- + # Overview Spine Validation is a Protobuf-centric validation framework that generates @@ -115,4 +121,4 @@ Spine stack. - [Target audience](target-audience.md) - [Philosophy](philosophy.md) -- [Getting Started](../01-getting-started/index.md) +- [Getting started](../01-getting-started/) diff --git a/docs/content/docs/validation/00-intro/philosophy.md b/docs/content/docs/validation/00-intro/philosophy.md index ea6528686e..d2827f2104 100644 --- a/docs/content/docs/validation/00-intro/philosophy.md +++ b/docs/content/docs/validation/00-intro/philosophy.md @@ -1,3 +1,9 @@ +--- +title: Philosophy +description: Core principles behind Spine Validation design. +headline: Documentation +--- + # Philosophy Spine Validation is built on a small set of principles that shape how developers @@ -136,3 +142,8 @@ Spine Validation is principled around: This makes it suitable for teams that need reliable, maintainable, and evolvable validation for complex systems built on top of Protobuf. + +## What’s next + +- Who this is for: [Target audience](target-audience.md). +- Try it end-to-end: [Getting started](../01-getting-started/). diff --git a/docs/content/docs/validation/00-intro/target-audience.md b/docs/content/docs/validation/00-intro/target-audience.md index caa8e06261..82746754d6 100644 --- a/docs/content/docs/validation/00-intro/target-audience.md +++ b/docs/content/docs/validation/00-intro/target-audience.md @@ -1,3 +1,9 @@ +--- +title: Target audience +description: Who should use Spine Validation and for what purposes. +headline: Documentation +--- + # Target audience Spine Validation is designed for developers who model data and APIs using @@ -96,3 +102,8 @@ If you: - and want to enforce clear, versionable, and strongly typed validation rules, then Spine Validation is designed for you. + +## What’s next + +- Learn the design principles: [Philosophy](philosophy.md). +- Try it end-to-end: [Getting started](../01-getting-started/). diff --git a/docs/content/docs/validation/01-getting-started/_index.md b/docs/content/docs/validation/01-getting-started/_index.md index 4d817a75d8..cbe6b143a8 100644 --- a/docs/content/docs/validation/01-getting-started/_index.md +++ b/docs/content/docs/validation/01-getting-started/_index.md @@ -1,50 +1,46 @@ +--- +title: Getting started +description: Step-by-step guide to setting up Spine Validation in your project. +headline: Documentation +--- + # Getting started This section helps you set up Spine Validation, define your first validated Protobuf model, and see validation in action in Java and Kotlin. If you are new to the library, read the short overview first: -- Introduction → [Overview](../00-intro/index.md) +- Introduction → [Overview](../00-intro/) - Who this is for → [Target audience](../00-intro/target-audience.md) - Design principles → [Philosophy](../00-intro/philosophy.md) ## What you’ll learn -- How to add Spine Validation to a JVM project using Protobuf models. +- How to add Spine Validation to a JVM project using Gradle plugins. - How to declare validation rules in `.proto` files. -- How validation is enforced at build time and at runtime. +- How validation is enforced at runtime. ## Prerequisites - Java 17+ - Gradle (Kotlin DSL or Groovy) -- Protobuf compiler (`protoc`) - Optional: Kotlin 2.2.21+ for the Kotlin Protobuf DSL If your project already generates Java/Kotlin sources from `.proto` files, you’re 90% there. Spine Validation integrates into the build to generate and inject validation logic into the code produced by `protoc`. +Code samples in this tutorial use [Google Truth](https://truth.dev/) and +[Kotest Assertions](https://kotest.io/docs/assertions/assertions.html). ## Quick path -1) Add Spine Validation to your Gradle build -- Follow the [instructions](adding-to-build.md). - -2) Define constraints in your `.proto` files -- Import `spine/options.proto`. -- Add declarative options like `(required)`, `(min)`, `(pattern)`. - -3) Build your project -- The Validation plugin to Spine Compiler scans your model and generates validation code. - -4) Use the generated API -- Validate on builder `build()` or call `validate()` explicitly. - See [Your first validated model](first-model.md). - + 1) [Add Validation to your build](adding-to-build.md) + 2) [Define constraints in `.proto` files](first-model.md) + 3) [Build your project](build-project.md) + 4) [Use the generated validation API](generated-code.md) ## What’s next - [Adding Validation to your build](adding-to-build.md) -- [Your first validated model](first-model.md) 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 a1570dd62d..74495d484a 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 @@ -1,3 +1,9 @@ +--- +title: Adding to build +description: How to add Spine Validation to your Gradle project. +headline: Documentation +--- + # Adding Validation to a Gradle build ## Adding Spine-specific Gradle plugin repositories @@ -76,18 +82,21 @@ Add the Validation plugin to the build. ```kotlin plugins { module - id("io.spine.validation") version "2.0.0-SNAPSHOT.396" + id("io.spine.validation") version "2.0.0-SNAPSHOT.398" } ``` -> ##### What is the `module` plugin? -> The plugin `module` in the snippet above refers to the name of the script plugin -> `buildSrc/src/kotlin/module.gradle.kts` which provides common configuration for -> the subprojects of the multi-module examples project. -> For more details on this, clone the [Validation examples repository][validation-examples]. +{{% note-block class="note" %}} +#### What is the `module` plugin? + +The plugin `module` in the snippet above refers to the name of the script plugin +`buildSrc/src/kotlin/module.gradle.kts` which provides common configuration for +the subprojects of the multi-module examples project. +For more details on this, clone the [Validation examples repository][validation-examples]. +{{% /note-block %}} -The plugin wires Validation into the Spine Compiler, adds the Validation Java codegen bundle, -and brings in the JVM runtime dependency automatically. +The plugin wires Validation into the Spine Compiler and brings in +the JVM runtime dependency automatically. ### Mode 2: Spine-based project via CoreJvm Gradle plugin @@ -105,6 +114,6 @@ plugins { ## Next step -Continue with [Your first validated model](first-model.md). +Continue with [Define constraints in `.proto` files](first-model.md). [validation-examples]: https://github.com/spine-examples/hello-validation diff --git a/docs/content/docs/validation/01-getting-started/build-project.md b/docs/content/docs/validation/01-getting-started/build-project.md new file mode 100644 index 0000000000..8f92e544c5 --- /dev/null +++ b/docs/content/docs/validation/01-getting-started/build-project.md @@ -0,0 +1,31 @@ +--- +title: Building project +description: Running the build to generate validation code. +headline: Documentation +--- + +# Build your project + +After you added Validation to the build and declared constraints in your Protobuf model, +run your Gradle build as usual. + +For macOS and Linux: +```bash +./gradlew clean build +``` + +For Windows: +```powershell +gradlew.bat clean build +``` + +The Validation Gradle plugin integrates with Spine Compiler, scans your model, and injects +validation checks into the generated JVM code. + +The generated sources will appear in the `generated` directory next to the `src` directory. + +The `clean` task is optional and is relevant when Protobuf code changes. + +## Next step + +Continue with [Using the generated validation API](generated-code.md). diff --git a/docs/content/docs/validation/01-getting-started/first-model.md b/docs/content/docs/validation/01-getting-started/first-model.md index 4a502c5229..467d9c4b49 100644 --- a/docs/content/docs/validation/01-getting-started/first-model.md +++ b/docs/content/docs/validation/01-getting-started/first-model.md @@ -1,19 +1,20 @@ -# Your first validated model +--- +title: Defining constraints +description: How to declare validation rules in Protobuf files. +headline: Documentation +--- -This guide shows how to define a Protobuf model with validation rules and how those -rules are enforced in the generated JVM code. +# Define constraints in `.proto` files + +This guide shows how to import Spine Validation options and declare constraints +in your Protobuf model. The validation options come from `spine/options.proto` and include constraints like `(required)`, `(min)`, `(max)`, `(pattern)`, `(distinct)`, and `(validate)`. -## 1) Configure the project - -First, make sure your project is configured to use the Validation library. -See [Adding Validation to a Gradle build](adding-to-build.md) for detailed instructions. +## Import options and declare constraints -## 2) Define a validated message - -Create a `.proto` file and import the validation options you need: +Create a `.proto` file and import `spine/options.proto`: ```protobuf @@ -66,84 +67,6 @@ Notes on the options used: - `(pattern).regex` validates string contents with a regular expression. - `(distinct)` enforces uniqueness in `repeated` and `map` fields. +## Next step -## 3) Build the project - -Run your Gradle build as usual. - -For macOS and Linux: -``` -./gradlew clean build -``` - -For Windows: -``` -gradlew.bat clean build -``` - -The Validation Gradle plugin integrates with Spine Compiler -and injects validation checks into the generated Java code. - -The code will be generated under the `generated` directory of your project. - -## 4) Use the generated validation - -Validation runs on `build()` and can be triggered manually with `validate()`. - - -```java -assertThrows(ValidationException.class, () -> - BankCard.newBuilder() - .setDigits("invalid") - .setOwner("ALEX SMITH") - .build() -); -``` - - -```kotlin -shouldThrow { - bankCard { - digits = "invalid" - owner = "ALEX SMITH" - } -} -``` - -To validate without throwing, use `validate()` on a built message: - - -```java -var card = BankCard.newBuilder() - .setOwner("ALEX SMITH") - .setDigits("wrong number") - .buildPartial(); -var error = card.validate(); -assertThat(error).isPresent(); - -var violation = error.get().getConstraintViolation(0); -var formatted = TemplateStrings.format(violation.getMessage()); - -assertThat(formatted).contains("digits"); -assertThat(formatted).contains("wrong number"); -``` - - -```kotlin -val card = BankCard.newBuilder() - .setOwner("ALEX SMITH") - .setDigits("wrong number") - .buildPartial() // There is no Kotlin DSL for this. -val error = card.validate() -error.shouldBePresent() - -val violation = error.get().constraintViolationList[0] -val formatted = violation.message.format() - -formatted shouldContain "digits" -formatted shouldContain "wrong number" -``` - -## What’s next - -Continue with [Validation Workflow](workflow.md). +Continue with [Build your project](build-project.md). diff --git a/docs/content/docs/validation/01-getting-started/generated-code.md b/docs/content/docs/validation/01-getting-started/generated-code.md new file mode 100644 index 0000000000..de12426c25 --- /dev/null +++ b/docs/content/docs/validation/01-getting-started/generated-code.md @@ -0,0 +1,101 @@ +--- +title: Using the generated code +description: How to use the generated validation code in Java and Kotlin. +headline: Documentation +--- + +# Using the generated code + +This guide shows how the generated JVM API enforces constraints at runtime. + +Validation runs automatically when a message is created. +It is also possible to validate an existing instance. + +## Validation on creation + +When a message violates declared constraints, `build()` throws `ValidationException`. + +{{< code-tabs langs="Kotlin, Java">}} + +{{< code-tab lang="Kotlin" >}} + +```kotlin +shouldThrow { + // Kotlin proto DSL delegates to a Java builder. + bankCard { + digits = "invalid" + owner = "ALEX SMITH" + } +} +``` +{{< /code-tab >}} + +{{< code-tab lang="Java" >}} + +```java +assertThrows(ValidationException.class, () -> + BankCard.newBuilder() + .setDigits("invalid") + .setOwner("ALEX SMITH") + .build() +); +``` +{{< /code-tab >}} +{{< /code-tabs >}} + +## Validating existing messages + +To get a `ValidationError` instead of an exception, build the message using the `buildPartial()` +and call `validate()`: + +{{< code-tabs langs="Kotlin, Java">}} + +{{< code-tab lang="Kotlin" >}} + +```kotlin +// There is no Kotlin DSL which allows building a non-valid message. +// So we use a builder from Java. +val card = BankCard.newBuilder() + .setOwner("ALEX SMITH") + .setDigits("wrong number") + .buildPartial() +val error = card.validate() +error.shouldBePresent() + +val violation = error.get().constraintViolationList[0] +val formatted = violation.message.format() + +formatted shouldContain "digits" +formatted shouldContain "wrong number" +``` +{{< /code-tab >}} + +{{< code-tab lang="Java" >}} + +```java +var card = BankCard.newBuilder() + .setOwner("ALEX SMITH") + .setDigits("wrong number") + .buildPartial(); +var error = card.validate(); +assertThat(error).isPresent(); + +var violation = error.get().getConstraintViolation(0); +var formatted = TemplateStrings.format(violation.getMessage()); + +assertThat(formatted).contains("digits"); +assertThat(formatted).contains("wrong number"); +``` +{{< /code-tab >}} +{{< /code-tabs >}} + +You are not likely to use `buildPartial()` for building invalid messages in production code. +But you may want to use `validate()` for checking messages received from external sources, +such as API requests or deserialized data, for example, when building an anticorruption layer. + +## What’s next + +- Learn the core concepts: + [Concepts](../02-concepts/). +- If you need organization-specific rules: + [Custom validation](../08-custom-validation/). diff --git a/docs/content/docs/validation/02-concepts/_index.md b/docs/content/docs/validation/02-concepts/_index.md new file mode 100644 index 0000000000..86bc83dcb5 --- /dev/null +++ b/docs/content/docs/validation/02-concepts/_index.md @@ -0,0 +1,9 @@ +--- +title: Concepts +description: Describes Spine Validation concepts. +headline: Documentation +--- + +# Concepts + +_Draft. We will add content later._ diff --git a/docs/content/docs/validation/adding-custom-validation.md b/docs/content/docs/validation/08-custom-validation/_index.md similarity index 74% rename from docs/content/docs/validation/adding-custom-validation.md rename to docs/content/docs/validation/08-custom-validation/_index.md index f66e4d18b8..91409e9a93 100644 --- a/docs/content/docs/validation/adding-custom-validation.md +++ b/docs/content/docs/validation/08-custom-validation/_index.md @@ -1,4 +1,10 @@ -# Adding custom validation +--- +title: Custom Validation +description: Extending the library with custom options and code generation. +headline: Documentation +--- + +# Custom validation Users can extend the library by providing custom Protobuf options and code generation logic. @@ -8,16 +14,20 @@ Follow these steps to create a custom option: in your `.proto` file. 2. Register it via `io.spine.option.OptionsProvider`. 3. Implement the following entities: - - Policy (`MyOptionPolicy`) – discovers and validates the option. + - Reaction (`MyOptionReaction`) – discovers and validates the option. - View (`MyOptionView`) – accumulates valid option applications. - Generator (`MyOptionGenerator`) – generates Java code for the option. 4. Register them via `io.spine.tools.validation.java.ValidationOption`. Below is a workflow diagram for a typical option: -![Typical custom option](.github/readme/typical_custom_option.png) +![Typical custom option](typical_custom_option.jpg) + +## What’s next + +- Learn where this plugs in: [Architecture](../09-developers-guide/architecture.md). -Take a look at the `:java-tests:extensions` module that contains a full example of +Take a look at the `:tests:extensions` module that contains a full example of implementation of the custom `(currency)` option. Note that a custom option can provide several policies and views, but only one generator. @@ -25,23 +35,23 @@ This allows building more complex models, using more entities and events. Let's take a closer look at each entity. -### Policy +### Reaction Usually, this is an entry point to the option handling. -The policy subscribes to one of `*OptionDiscovered` events: +The reaction subscribes to one of `*OptionDiscovered` events: - `FileOptionDiscovered`. - `MessageOptionDiscovered`. - `FieldOptionDiscovered`. - `OneofOptionDiscovered`. -It filters incoming events, taking only those who contain the option of the interest. The policy +It filters incoming events, taking only those who contain the option of the interest. The reaction may validate the option application, query `TypeSystem`, extract and transform data arrived with the option, if any. Once ready, it emits an event signaling that the discovered option is valid and ready for the code generation. -The policy may report a compilation warning or an error, failing the whole compilation if it +The reaction may report a compilation warning or an error, failing the whole compilation if it finds an illegal application of the option. For example: @@ -49,7 +59,7 @@ For example: 1. An unsupported field type. 2. Illegal option content (invalid regex, parameter, signature). -The policy may just ignore the discovered option and emit `NoReaction`. A typical example +The reaction may just ignore the discovered option and emit `NoReaction`. A typical example of this is a boolean option, such as `(required)`, which does nothing when it is set to `false`. The desired behavior depends on the option itself. diff --git a/docs/content/docs/validation/08-custom-validation/typical_custom_option.jpg b/docs/content/docs/validation/08-custom-validation/typical_custom_option.jpg new file mode 100644 index 0000000000..5880f4e216 Binary files /dev/null and b/docs/content/docs/validation/08-custom-validation/typical_custom_option.jpg differ diff --git a/docs/content/docs/validation/09-developers-guide/_index.md b/docs/content/docs/validation/09-developers-guide/_index.md new file mode 100644 index 0000000000..f4b7650ced --- /dev/null +++ b/docs/content/docs/validation/09-developers-guide/_index.md @@ -0,0 +1,15 @@ +--- +title: Developer's Guide +description: Deep dive into Spine Validation architecture and internals. +headline: Documentation +--- + +# Developer’s guide + +This section explains how Spine Validation is structured internally and where to look when +you need to extend it. + +## Topics + +- [Architecture](architecture.md) +- [Key modules](key-modules.md) diff --git a/docs/content/docs/validation/developers-guide/architecture.md b/docs/content/docs/validation/09-developers-guide/architecture.md similarity index 58% rename from docs/content/docs/validation/developers-guide/architecture.md rename to docs/content/docs/validation/09-developers-guide/architecture.md index ce48d529ba..1ba2c01559 100644 --- a/docs/content/docs/validation/developers-guide/architecture.md +++ b/docs/content/docs/validation/09-developers-guide/architecture.md @@ -1,4 +1,10 @@ -## Architecture +--- +title: Architecture +description: Internal design of the Spine Validation framework. +headline: Documentation +--- + +# Architecture The library is a set of plugins for [Spine Compiler](https://github.com/SpineEventEngine/compiler). @@ -6,7 +12,7 @@ Each target language is a separate Compiler plugin. Take a look at the following diagram to grasp a high-level library structure: -![High-level library structure overview](.github/readme/high_level_overview.png) +![High-level library structure overview](high_level_overview.png) The workflow is the following: @@ -14,3 +20,8 @@ The workflow is the following: - (3) – Protobuf compiler generates Java classes. - (4), (5) – policies and views build the validation model. - (6), (7) – Java plugin generates and injects validation code. + +## What’s next + +- See the project layout: [Key modules](key-modules.md). +- If you need organization-specific rules: [Custom validation](../08-custom-validation/). diff --git a/.github/readme/high_level_overview.png b/docs/content/docs/validation/09-developers-guide/high_level_overview.png similarity index 100% rename from .github/readme/high_level_overview.png rename to docs/content/docs/validation/09-developers-guide/high_level_overview.png diff --git a/docs/content/docs/validation/09-developers-guide/key-modules.md b/docs/content/docs/validation/09-developers-guide/key-modules.md new file mode 100644 index 0000000000..6b13444c51 --- /dev/null +++ b/docs/content/docs/validation/09-developers-guide/key-modules.md @@ -0,0 +1,41 @@ +--- +title: Key Modules +description: Overview of the main modules in the Spine Validation project. +headline: Documentation +--- + +# Key modules + +This repository is a Gradle multi-project build. Module names below are shown as Gradle +project paths (e.g. `:java`, `:tests:vanilla`). + +## Core modules + +| **Module** | **Description** | +|------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `:context` | Language-agnostic validation model and built-in option handling (views/reactions) shared by language plugins. | +| `:java` | Spine Compiler plugin for Java: generates/injects validation code; loads custom options via `ValidationOption` SPI and custom validators discovered by `:ksp`. | +| `:ksp` | KSP processor that discovers classes annotated with `@io.spine.validation.Validator` and writes a message→validator mapping resource consumed by `:java`. | +| `:jvm-runtime` | Runtime library used by generated code: `ValidationException`, validation/constraint APIs, `MessageValidator`, and error Protobuf types. | +| `:java-bundle` | Fat JAR bundling `:java` for distribution (the artifact typically used as the compiler plugin dependency). | +| `:gradle-plugin` | Gradle plugin (`io.spine.validation`) that configures Spine Compiler to run the Validation compiler for consumer projects. | +| `:docs` | Documentation site (Hugo) sources, scripts, and example projects used in docs. | + +## Test modules + +| **Module** | **Description** | +|-------------------------------|----------------------------------------------------------------------------------------------------------------------------| +| `:context-tests` | Compilation tests for `:context` (Prototap-based), focusing on invalid option usage and error reporting. | +| `:tests` | Parent project for integration tests that run the compiler plugins and exercise generated code. | +| `:tests:vanilla` | “Vanilla” integration tests: validation without any custom extensions. | +| `:tests:extensions` | Example custom option (`(currency)`) implementation used by test suites (custom reactions/views/generator). | +| `:tests:consumer` | Integration tests for a consuming project that uses validation plus custom extensions. | +| `:tests:consumer-dependency` | A dependency module with `.proto` sources used by `:tests:consumer` to verify “protos in dependencies” scenarios. | +| `:tests:validator` | Integration tests for custom `MessageValidator`s annotated with `@Validator` (covers `:ksp` discovery and `:java` wiring). | +| `:tests:validator-dependency` | A dependency module used by `:tests:validator` for validator-related dependency scenarios. | +| `:tests:runtime` | Tests focused on runtime behavior of validation APIs and error messages. | +| `:tests:validating` | Shared fixtures and tests for validation behavior across multiple scenarios (includes `testFixtures`). | + +## What’s next + +- Build custom validation rules: [Custom validation](../08-custom-validation/). diff --git a/docs/content/docs/validation/_index.md b/docs/content/docs/validation/_index.md index 0b156267ec..6ac06fcda9 100644 --- a/docs/content/docs/validation/_index.md +++ b/docs/content/docs/validation/_index.md @@ -1,4 +1,20 @@ --- -build: - render: never +title: Spine Validation +description: Overview of the Spine Validation library. +headline: Documentation --- + +# Spine Validation + +Spine Validation generates type-safe validation code from constraints declared in Protobuf +options, and runs those checks automatically when you build messages. + +## Start here + +- New to the library: [Overview](00-intro/) +- Ready to try it: [Getting started](01-getting-started/) + +## Deeper topics + +- How it works: [Architecture](09-developers-guide/architecture.md) +- Extension points: [Custom validation](08-custom-validation/) diff --git a/docs/content/docs/validation/developers-guide/_index.md b/docs/content/docs/validation/developers-guide/_index.md deleted file mode 100644 index 0b156267ec..0000000000 --- a/docs/content/docs/validation/developers-guide/_index.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -build: - render: never ---- diff --git a/docs/content/docs/validation/developers-guide/key-modules.md b/docs/content/docs/validation/developers-guide/key-modules.md deleted file mode 100644 index f0d6b9bfc1..0000000000 --- a/docs/content/docs/validation/developers-guide/key-modules.md +++ /dev/null @@ -1,8 +0,0 @@ - -### Key modules - -| Module | Description | -|-----------|----------------------------------------------------------------------| -| :model | The language-agnostic model for the built-in options. | -| :java | Generates and injects Java validation code based on applied options. | -| :java-api | Extension API for custom options in Java. | diff --git a/docs/data/docs/validation/2-0-0-snapshot/sidenav.yml b/docs/data/docs/validation/2-0-0-snapshot/sidenav.yml index 9f96fdd714..c1058569cb 100644 --- a/docs/data/docs/validation/2-0-0-snapshot/sidenav.yml +++ b/docs/data/docs/validation/2-0-0-snapshot/sidenav.yml @@ -1,11 +1,44 @@ # The `file_path` should be relative to the `docs/validation`. # Thanks to this, links to the version will be generated automatically. -# Also, the `file_path` must not end with a trailing slash. +# The `file_path` must not end with a trailing slash. +# The `key` should match the current docs section. +# See: https://github.com/SpineEventEngine/site-commons/blob/master/COMPONENTS.md#sidenav - page: Validation key: validation children: - page: Overview file_path: 00-intro + - page: Target audience + file_path: 00-intro/target-audience - page: Philosophy file_path: 00-intro/philosophy + - page: Getting started + key: 01-getting-started + children: + - page: Getting started + file_path: 01-getting-started + - page: Adding Validation to your build + file_path: 01-getting-started/adding-to-build + - page: 'Define constraints in `.proto` files' + file_path: 01-getting-started/first-model + - page: Build your project + file_path: 01-getting-started/build-project + - page: Using the generated validation API + file_path: 01-getting-started/generated-code + - page: Concepts + key: 02-concepts + children: + - page: Concepts + file_path: 02-concepts + - page: Custom validation + file_path: 08-custom-validation + - page: Developer’s guide + key: 09-developers-guide + children: + - page: Developer’s guide + file_path: 09-developers-guide + - page: Architecture + file_path: 09-developers-guide/architecture + - page: Key modules + file_path: 09-developers-guide/key-modules diff --git a/pom.xml b/pom.xml index e9fa29fdd0..b36592557f 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.396 +2.0.0-SNAPSHOT.398 2015 diff --git a/version.gradle.kts b/version.gradle.kts index 4b668a79c8..69fe447967 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.396") +val validationVersion by extra("2.0.0-SNAPSHOT.398")