// Metadata created by nebel

[id="registry-rules"]

= Rules for registry content
To govern the evolution of registry content, you can configure optional rules for artifacts added to the registry. Any rules configured for an artifact must pass before a new artifact version can be uploaded to the registry. The goal of these rules is to prevent invalid content from being added to the registry. For example, content can be invalid for the following reasons:

* Invalid syntax for a given artifact type (for example, `AVRO` or `PROTOBUF`)
* Valid syntax, but semantics violate company standards
* New content includes breaking changes to the current artifact version

= When rules are applied
Rules are applied only when content is added to the registry. This includes the following REST operations:

* Creating an artifact
* Updating an artifact
* Creating an artifact version

If a rule is violated, {registry} returns an HTTP error. The response body includes the violated rule and a message showing what went wrong.

NOTE: If no rules are configured for an artifact, the set of currently configured global rules are applied, if any.

= How rules work
Each rule has a name and optional configuration information. The registry storage maintains the list of rules for each artifact and the list of global rules. Each rule in the list consists of a name and a set of configuration properties, which are specific to the rule implementation. For example, a validation rule implementation might use  a `Map<String,String>`, or a compatibility rule might use a single property of `BACKWARD` for compatibility with existing versions.

A rule is provided with the content of the current version of the artifact (if one exists) and the new version of the artifact being added. The rule implementation returns true or false depending on whether the artifact passes the rule. If not, the registry reports the reason why in an HTTP error response. Some rules might not use the previous version of the content. For example, compatibility rules use previous versions, but syntax or semantic validity rules do not.
