> For the complete documentation index, see [llms.txt](https://docs.protoboard.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.protoboard.xyz/validate-and-build/fixing-drc-failures.md).

# Fixing DRC failures

Diagnose and fix the DRC failures you'll meet most often, from a missing interface pair to protocol, role, voltage and capacity mismatches

## Goal

Recognize the common DRC failures by their reasons and fix each one. Each section names the reason text you'll see in Board Review.

## The fix loop

{% stepper %}
{% step %}

### Find it

Open **Board Review**. Start with **BLOCKED**, then **PARTIAL**. Expand an issue to read its reasons.
{% endstep %}

{% step %}

### Go to it

Click the target icon. The canvas zooms to the harness or part.
{% endstep %}

{% step %}

### Fix it

Select the harness or part and change it in the Inspector, using the patterns below.
{% endstep %}

{% step %}

### Confirm

The issue disappears and the harness turns green. If it moves from BLOCKED to PARTIAL, you're one step further.
{% endstep %}
{% endstepper %}

## No interface link (grey, BLOCKED)

**Reason:** `No interface link`

The harness exists but carries nothing. Select it and choose an **Interface pair** under **Interface selection**. See [Harnesses and function links](/editor/harnesses-and-function-links.md).

## No compatible pair (red, BLOCKED)

**Reason:** `No compatible interface pairs found`

The two parts have no interfaces that can connect, for example a battery wired straight to a motor. Connect through the part that sits between them (a motor driver, regulator, level shifter or converter), or swap one part for one with the interface you need.

## Protocol mismatch (red, BLOCKED)

**Reason:** `Protocol type mismatch: i2c vs spi`

You paired two different protocols. Pick another pair: many sensors offer both I2C and SPI, so choose the same protocol on both sides.

## Role conflict (red, BLOCKED)

**Reason:** `Incompatible protocol roles: master cannot connect to master`

Both sides have the same role. The reason lists the valid pairs for that protocol. Pick an interface with the complementary role. If a library part has the wrong role, [report a problem with the part](/parts/request-or-fix-a-part.md); on your own part, [edit its template](/parts/edit-part-templates.md).

## Voltage mismatch (red, BLOCKED)

**Reason:** `Voltage ranges don't overlap: 4.5-5.5V vs 1.8-3.6V`

{% tabs %}
{% tab title="Add a regulator" %}
For power, put a regulator between the two parts: source to regulator input, regulator output to the load.
{% endtab %}

{% tab title="Add a level shifter" %}
For logic signals, put a level shifter between the 5 V side and the 3.3 V side.
{% endtab %}

{% tab title="Use another interface or part" %}
Use a supply output at the right voltage (many boards have a 3.3 V pin), or swap to a breakout with on-board regulation.
{% endtab %}
{% endtabs %}

## Domain mismatch (red, BLOCKED)

**Reason:** `Domain mismatch: electrical vs pneumatic`

You paired interfaces from different physical domains. Pick a pair in the same domain.

## Missing pins (yellow, PARTIAL)

**Reason:** `Side A function 'i2c_sda' not yet assigned to a resource (0/1)`

The function has no pin. Click **Auto Assign** in **Function Links**, or choose a pin in its resource picker. If no pin is offered, the part has run out: see [Resource allocation](/editor/resource-allocation.md).

## Unwired functions (yellow, PARTIAL)

A required function on one side has no function link. Open **Function Links** and link it, or click **Auto Assign**. For fan-out harnesses, every instance needs its own links.

## Over capacity (yellow, PARTIAL, plus a blocking part issue)

**Reason:** `Interface '...' is over capacity`

The part has more instances of an interface than its resources can back, for example three motors on a two-channel driver. Remove an instance, add a second driver or expander, or use a part with more channels.

## One-sided link (yellow, PARTIAL)

**Reason:** `One-sided link: only side A has an interface`

The other part has no interface modelled. That's fine while you plan. To finish it, add the interface to that part's template, or replace it with a library part.

## Quick reference

| You see                 | Usual fix                                          |
| ----------------------- | -------------------------------------------------- |
| Grey harness            | Choose an interface pair                           |
| Red, no compatible pair | Connect through an intermediate part               |
| Red, protocol or role   | Choose a different pair                            |
| Red, voltage            | Regulator, level shifter or a different supply pin |
| Yellow, not assigned    | Auto Assign, or pick pins                          |
| Yellow, over capacity   | Fewer instances or a bigger part                   |

{% hint style="info" %}
Ask ProtoBot: "Why is the Left motor control harness yellow, and how do I fix it?" It reads the same DRC reasons and can apply the fix. See [Prompt patterns](/protobot/prompt-patterns.md).
{% endhint %}

## Related pages

* [How DRC works](/validate-and-build/how-drc-works.md)
* [Board Review and review comments](/validate-and-build/board-review.md)
* [DRC rules and severity](/reference/rulesets-and-severity.md)
