---
id: "custom-nodes-present"
type: "rule"
severity: "warning"
url: "https://localhost:3000/catalogue/rules/custom-nodes-present"
---

# Design has custom nodes

The design places nodes the catalogue does not name; the rules are blind to that part of the architecture.

| | |
|---|---|
| Severity | warning |
| Selects | every design |
| Components in scope | 2,366 |

## Why

The design places nodes the catalogue does not name, so the rules are blind to that part of the architecture. The count belongs on the design, not only on the individual boxes.

## What it checks

It looks at every design, and fires when:

- the design contains a node of kind custom

Message template:

```
This design has custom nodes; rules are blind to them. Aim for zero.
```

## Applies to

This rule is about the whole design, not one node.

2,366 catalogue components fall under it.

## Tripped by

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

- [custom-escape-hatch](https://localhost:3000/d/zeema/custom-escape-hatch)

## Source (`rule` YAML, verbatim)

```yaml
# yaml-language-server: $schema=../schema/rule.schema.json
# The same hole, counted once for the whole design, so the number is visible on the design and
# not only on the boxes. Tripped by designs/reference/custom-escape-hatch/design.broken.yaml.
schemaVersion: "1"
type: "rule"
id: "custom-nodes-present"
severity: "warning"
select:
  design: true
when:
  hasNode:
    kind: "custom"
message: "This design has custom nodes; rules are blind to them. Aim for zero."
```

Human page: https://localhost:3000/catalogue/rules/custom-nodes-present
