## TL;DR

dbt cannot find a node named `raw_orders` that `stg_orders` references. The usual causes are a typo in `ref('raw_orders')`, a source that was never defined in a `_sources.yml` file, or an upstream model that is disabled or excluded. Match the ref name to a real file, define the source, then recompile.

## Error

```text
Compilation Error: model 'stg_orders' depends on a node named 'raw_orders' which was not found
```

## Steps

1. Search your project for the file that should define the node: look for `models/**/raw_orders.sql`. Expected: you find exactly one file, or you confirm it does not exist.
2. If `raw_orders` is a raw warehouse table rather than a dbt model, it must be declared as a source. Check that a `_sources.yml` file defines it and that the model calls `source('raw', 'raw_orders')` instead of `ref('raw_orders')`. Expected: the source appears in `dbt ls --resource-type source`.
3. If the file exists, check for typos: the ref argument must match the file name without the `.sql` extension, exactly. Expected: `ref('raw_orders')` matches `raw_orders.sql` character for character.
4. Check whether the upstream model is disabled (`enabled: false` in config) or excluded by your `--select`/`--exclude` flags. Expected: `dbt ls --select raw_orders` lists it.
5. Run `dbt compile --select stg_orders`. Expected: compilation succeeds with no dependency error.

## When to use

- `dbt compile`, `dbt run`, or `dbt test` fails with "depends on a node named X which was not found".
- You renamed a model or moved files between directories.

## When not to use

- The error happens at warehouse runtime (a Database Error), not at compile time.
- The missing node is in an installed package (check `dbt deps` and the package name in the ref).

## Tool compatibility

- dbt Core 1.0 and later, all adapters. `dbt ls` selectors work the same across versions.

## Variant phrasings

### Compilation Error: depends on a node named X which was not found or is disabled

The disabled variant: the file exists but `enabled: false` removes it from the graph.

### source not found variants

When the call is `source('a', 'b')`, the fix is in `_sources.yml`, not in model files.

## Why it happens

dbt builds a dependency graph from model files, seeds, snapshots, and declared sources before compiling any SQL. A `ref()` or `source()` pointing at something outside that graph is a hard error, because dbt cannot render the relation name.

## Edge cases

- Two packages defining the same model name need the two-argument form: `ref('package_name', 'raw_orders')`.
- Model files under a directory excluded by `model-paths` are invisible to the graph.
- Case sensitivity matters on some warehouses; keep file names lowercase.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_-otoltqjJw36_yMjpOxvag
