# Linter: Error detection and quality checks

Linter is a built-in tool on the Canvas that identifies potential configuration issues and displays alerts to help you detect and fix them faster. Most alerts don’t require immediate correction and don’t block the creation of your flows.

## **How alerts work**

While building a pipeline or capsule, Linter provides recommendations based on best practices to help you improve the flow and identify potential issues in your integration.

These issues can range from critical problems that prevent the integration from running or being deployed to minor alerts that guide you toward a more robust configuration.

## **Where alerts appear**

Alerts are displayed in two locations:

* Directly on the connector with an issue (hover over the connector for details), or
* In the **Problems** tab of the Execution Panel.

Each alert includes a short description of the issue and a link to the documentation. When viewing alerts in the **Problems** tab, you can click **Configure step** to navigate directly to the connector and open its configuration form, regardless of the flow level.

<figure><img src="/files/J7nGVKJzLbrruDfctk6L" alt=""><figcaption></figcaption></figure>

## **Types of alerts**

Alerts are divided into **Errors** and **Warnings**.

### **Errors**

**Error** alerts indicate serious failures in pipeline or capsule creation. They must be corrected before you save the project.

Errors are categorized as follows:

* **Structure:** Structural issues that prevent the integration flow from being processed.

### **Warnings**

**Warning** alerts indicate improvement opportunities in pipeline or capsule creation.

Warnings are categorized as follows:

* **Best practices:** Building habits that improve pipeline or capsule performance and make future maintenance easier.

## **List of alerts**

### **Trigger**

<details>

<summary><strong>Trigger not configured. To deploy the pipeline, configure the trigger (Best practices).</strong></summary>

The trigger defines how the pipeline execution starts. To configure it, select one of the available options and connect it to the beginning of the flow. This configuration is required for deployment. For more details, see the [Triggers overview](/documentation/connectors-and-triggers/triggers/overview.md) documentation.

{% hint style="info" %}
You can save the pipeline without configuring the trigger, but you can’t deploy it.
{% endhint %}

</details>

### **Choice**

<details>

<summary><strong>The Choice connector must have at least one "when" configured (Structure).</strong></summary>

Choice enables conditional branching within a pipeline or capsule. To use it correctly, configure at least one **when** condition. Each condition defines a specific path for the flow. [Learn more](/documentation/connectors-and-triggers/connectors/logic/choice.md).

</details>

<details>

<summary><strong>The Choice connector must have an "otherwise" configured (Structure).</strong></summary>

The **otherwise** condition is executed when none of the **when** conditions apply. Configure at least one **otherwise** condition to ensure uninterrupted flow execution. [Learn more](/documentation/connectors-and-triggers/connectors/logic/choice.md).

</details>

### **Subflow connectors**

The following alerts apply to connectors that structure subflows:

* [Block Execution](/documentation/connectors-and-triggers/connectors/logic/block-execution.md)
* [Do While](/documentation/connectors-and-triggers/connectors/logic/do-while.md)
* [For Each](/documentation/connectors-and-triggers/connectors/logic/for-each.md)
* [Retry](/documentation/connectors-and-triggers/connectors/logic/retry.md)
* [Stream Excel](/documentation/connectors-and-triggers/connectors/files/stream-excel.md)
* [Stream File Reader](/documentation/connectors-and-triggers/connectors/files/stream-file-reader.md)
* [Stream File Reader Pattern](/documentation/connectors-and-triggers/connectors/files/stream-file-reader-pattern.md)
* [Stream JSON File Reader](/documentation/connectors-and-triggers/connectors/files/stream-json-file-reader.md)
* [Stream XML File Reader](/documentation/connectors-and-triggers/connectors/files/stream-xml-file-reader.md)
* [Stream DB V3](/documentation/connectors-and-triggers/connectors/structured-data/stream-db-v3.md)

<details>

<summary><strong>The OnProcess must have at least one connector (Structure).</strong></summary>

OnProcess defines one of the subflows in a pipeline or capsule. Add and connect at least one connector so the flow is not interrupted.

</details>

<details>

<summary><strong>The OnException must have at least one connector (Best practices).</strong></summary>

OnException handles exceptions that occur during OnProcess execution. Add and connect at least one connector to ensure proper error handling.

{% hint style="info" %}
This rule doesn’t apply to the **Block Execution** connector.
{% endhint %}

</details>

<details>

<summary><strong>There is at least one issue inside OnProcess (Structure).</strong></summary>

Review and resolve issues within the OnProcess subflow to continue building your pipeline or capsule.

</details>

<details>

<summary><strong>There is at least one issue inside OnException (Structure).</strong></summary>

Review and resolve issues within the OnException subflow to continue building your pipeline or capsule.

</details>

### **Parallel Execution**

<details>

<summary><strong>Parallel connector must have at least one execution configured (Structure).</strong></summary>

**Parallel Execution** allows configuring multiple executions simultaneously. Connect it to at least one other connector to prevent flow interruption. [Learn more](/documentation/connectors-and-triggers/connectors/logic/parallel-execution.md).

{% hint style="info" %}
**Parallel Execution** must always be followed by another connector for the flow to run.
{% endhint %}

</details>

<details>

<summary><strong>Parallel connector should have at least two executions configured (Best practices).</strong></summary>

As a best practice, configure **Parallel Execution** only when two or more executions must run at the same time. [Learn more](/documentation/connectors-and-triggers/connectors/logic/parallel-execution.md).

</details>

### **Session Management**

<details>

<summary><strong>The field wasn’t declared previously (Best practices).</strong></summary>

A field cannot be used (**GET**) if it was not previously declared (**PUT**). [Learn more](/documentation/connectors-and-triggers/connectors/structured-data/session-management.md).

</details>

<details>

<summary><strong>The field was declared but is not being used (Best practices).</strong></summary>

A field previously declared (**PUT**) is not being used. Configure a new **Session Management** connector to use (**GET**) or delete (**DELETE**) the field. [Learn more](/documentation/connectors-and-triggers/connectors/structured-data/session-management.md).

</details>

### **Deprecated versions**

<details>

<summary><strong>Deprecated connector version. A newer version is available (Best practices).</strong></summary>

You are using a deprecated version of a connector. A newer, improved version is available.

{% hint style="info" %}
Deprecated versions can still be used, but only the latest version receives updates and improvements.
{% endhint %}

</details>

### **Capsules**

<details>

<summary><strong>This capsule can’t be used here because it doesn’t exist in this realm (Structure).</strong></summary>

The capsule you are trying to use does not exist in the current realm. Delete it or replace it with another connector or capsule available in your realm.

</details>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.digibee.com/documentation/developer-guide/development-cycle/build-overview/canvas/canvas-building-validation.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
