Package-level declarations

Types

Link copied to clipboard
enum class ChangeKind : Enum<ChangeKind>

Whether a difference between two Manifests keeps the contract.

Link copied to clipboard
data class CompatibilityReport(val changes: List<ManifestChange>)

The comparison of a service's Manifest with its baseline, the committed Manifest of its contract. A breaking change fails the gate (failed); a change that breaks on purpose, for a new major version, is recorded as the new baseline instead.

Link copied to clipboard
data class ManifestChange(val kind: ChangeKind, val path: String, val description: String)

One difference between a baseline Manifest and the current one: where it is (path, keyed by names, as contexts[shop].aggregates[cart].commands[AddItem].schema.items[].quantity), whether it keeps the contract (kind), and what changed.

Link copied to clipboard

Compares two Manifests and classifies every difference of the wire contract as ChangeKind.ADDITIVE or ChangeKind.BREAKING. Entries are matched by name: a removed context, aggregate, command, event, route, lifecycle command, query model, subscription, published stream or error code is breaking, an added one additive. A command or an event renamed with its former name in its aliases keeps matching: the rename is additive, though the routes the old name gave are reported removed.

Link copied to clipboard

Reads and writes Manifests as JSON text, and finds the fragments on a classpath.

Link copied to clipboard

What the plugin's workers run: the plugin resolves these tools (victools, Jackson, the kernel) into a configuration of the build's project and loads them in an isolated class loader, so none of them reaches the build script's class path. The plugin calls these functions by name, through reflection, and passes only JDK types across that boundary.

Link copied to clipboard

Which way a schema's values flow: an INPUT is what old clients send, such as a command or a route's request, so it may only accept more; an OUTPUT is what old clients read, such as a route's response, so it may only produce less: a type widened, an enum value added, a field made optional or an alternative added breaks it, and a required field added or an optional one removed does not. A STORED schema is what the service's own records were written with, an event's or a state's, which it reads back: an input for the structure, but no stored record is checked against a constraint (a bound, a pattern, a multipleOf), so a constraint changed either way is additive there; whether it breaks is its readers' to say, an OUTPUT's.