---
id: "multi-leader-store-without-conflict-policy"
type: "rule"
severity: "warning"
url: "https://localhost:3000/catalogue/rules/multi-leader-store-without-conflict-policy"
---

# Multi-leader store without a conflict policy

A NoSQL store replicates multi-region multi-leader but declares no conflict resolution policy.

| | |
|---|---|
| Severity | warning |
| Selects | every node of kind nosql-database |
| Components in scope | 47 |

## Why

Multi-leader replication accepts concurrent writes in several regions. With no conflict resolution policy declared, divergent replicas are reconciled by accident rather than by design.

## What it checks

It looks at every node of kind nosql-database, and fires when:

- all of these hold:
  - the node's `replication` is "multi-region-multi-leader"
  - any of these hold:
    - the node's `conflictResolution` has no value
    - the node's `conflictResolution` is "none"

Message template:

```
Store '{{node.id}}' is multi-leader across regions with no conflict resolution policy. Declare last-writer-wins, vector-clock or app-merge.
```

## Applies to

- [NoSQL database](https://localhost:3000/catalogue/kinds/nosql-database.md) `nosql-database`

47 catalogue components fall under it.

## Tripped by

Reference designs whose broken twin names this rule in its header:

- [ad-click-aggregation](https://localhost:3000/d/zeema/ad-click-aggregation)
- [datadog-husky](https://localhost:3000/d/zeema/datadog-husky)
- [instagram-feed](https://localhost:3000/d/zeema/instagram-feed)
- [linkedin-kafka](https://localhost:3000/d/zeema/linkedin-kafka)
- [netflix-streaming](https://localhost:3000/d/zeema/netflix-streaming)
- [object-storage](https://localhost:3000/d/zeema/object-storage)
- [paypal-payments](https://localhost:3000/d/zeema/paypal-payments)
- [snapchat-platform](https://localhost:3000/d/zeema/snapchat-platform)
- [tiktok-recommendation](https://localhost:3000/d/zeema/tiktok-recommendation)
- [wikipedia](https://localhost:3000/d/zeema/wikipedia)

## Source (`rule` YAML, verbatim)

```yaml
# yaml-language-server: $schema=../schema/rule.schema.json
# Multi-leader replication accepts concurrent writes in several regions. Without a declared
# conflict resolution policy, divergent replicas are reconciled by accident.
# Tripped by: designs/object-storage.broken.yaml
schemaVersion: "1"
type: "rule"
id: "multi-leader-store-without-conflict-policy"
severity: "warning"
select:
  node:
    kind: "nosql-database"
when:
  all:
    - prop: "replication"
      equals: "multi-region-multi-leader"
    - any:
        - prop: "conflictResolution"
          exists: false
        - prop: "conflictResolution"
          equals: "none"
message: "Store '{{node.id}}' is multi-leader across regions with no conflict resolution policy. Declare last-writer-wins, vector-clock or app-merge."
```

Human page: https://localhost:3000/catalogue/rules/multi-leader-store-without-conflict-policy
