> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fjall.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Deployment error codes

> Every failed Fjall deployment carries a stable error code. Find the code on the deployment detail page or in CLI output, then look it up here.

Fjall classifies every failed deployment into a stable dotted code, such as `cfn.permissions` or `ecs.circuit_breaker`. The code appears on the deployment's detail page on fjall.io, in the CLI's deploy output, and in the deployments list row title.

Each code pairs with a stable title, a per-occurrence detail sentence, the provider's verbatim reason, and remediation steps. Every code also states fault attribution: whether the failure came from your AWS account's configuration, from your application's code, from Fjall's platform, or could not be attributed automatically.

## CloudFormation failures

| Code                                                               | What it means                              |
| ------------------------------------------------------------------ | ------------------------------------------ |
| [`cfn.permissions`](/errors/cfn.permissions)                       | AWS permissions blocked a resource change  |
| [`cfn.validation`](/errors/cfn.validation)                         | AWS rejected a resource configuration      |
| [`cfn.dependency`](/errors/cfn.dependency)                         | A resource dependency was missing          |
| [`cfn.limit`](/errors/cfn.limit)                                   | An AWS service quota was exceeded          |
| [`cfn.timeout`](/errors/cfn.timeout)                               | A resource operation timed out             |
| [`cfn.resource_create_failed`](/errors/cfn.resource_create_failed) | A CloudFormation resource operation failed |

## ECS failures

| Code                                                         | What it means                                       |
| ------------------------------------------------------------ | --------------------------------------------------- |
| [`ecs.circuit_breaker`](/errors/ecs.circuit_breaker)         | The new version failed to start and was rolled back |
| [`ecs.health_check_failed`](/errors/ecs.health_check_failed) | The new version failed its container health checks  |
| [`ecs.task_start_failed`](/errors/ecs.task_start_failed)     | Tasks from the new version kept stopping            |
| [`ecs.stabilise_timeout`](/errors/ecs.stabilise_timeout)     | The service did not stabilise in time               |

## Unclassified failures

| Code                                   | What it means     |
| -------------------------------------- | ----------------- |
| [`unclassified`](/errors/unclassified) | Deployment failed |

## The taxonomy grows

New codes are added as recurring failure shapes earn them. The classification schema is versioned, so stored failures can be reclassified when a shape they match gains its own code.
