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

# Pipeline Events

> Inspect the granular event log for every Zwiron pipeline run — reads, workers, errors, and timing.

Every pipeline run generates a structured **event log** — a timestamped record of every operation that happened, from table reads to worker assignments to errors.

Events are visible on the job detail page under the **Events** tab for any run.

***

## Event types

### Pipeline-level events

| Event           | Meaning                                   |
| --------------- | ----------------------------------------- |
| `run.started`   | Pipeline run began                        |
| `run.completed` | All tables finished successfully          |
| `run.failed`    | Run ended with one or more table failures |
| `run.cancelled` | Run was manually cancelled                |

### Table-level events

| Event                     | Meaning                                  |
| ------------------------- | ---------------------------------------- |
| `table.started`           | A table began syncing                    |
| `table.partition.read`    | A partition (chunk) was read from source |
| `table.partition.written` | A partition was written to destination   |
| `table.completed`         | Table finished successfully              |
| `table.failed`            | Table failed (error details included)    |
| `table.retry`             | Table sync is being retried (attempt N)  |
| `table.schema_change`     | Schema change detected for this table    |

### Worker events

| Event                 | Meaning                                 |
| --------------------- | --------------------------------------- |
| `worker.assigned`     | A worker was assigned to a table        |
| `worker.heartbeat`    | Worker is alive and processing          |
| `worker.disconnected` | Worker lost connection to control plane |

***

## Event details

Each event contains:

```json theme={null}
{
  "event": "table.partition.written",
  "table": "orders",
  "timestamp": "2025-03-12T08:14:22Z",
  "attempt": 1,
  "rows_read": 50000,
  "rows_written": 50000,
  "duration_ms": 1420,
  "partition": 3
}
```

Error events include the full error message and stack trace for debugging.

***

## Error debugging

When a table fails:

1. Go to **Jobs** → select the job → **History** → select the failed run
2. Click the **Events** tab
3. Find the `table.failed` event for the failing table
4. Expand the event to see the error message

Common errors and their meanings:

| Error                         | Cause                                                                                                |
| ----------------------------- | ---------------------------------------------------------------------------------------------------- |
| `connection refused`          | Destination or source rejected the connection — check network rules and credentials                  |
| `column not found`            | Source schema changed — check the [Schema](/concepts/schema-evolution) tab                           |
| `permission denied`           | The database user lacks the required privilege — check the connector setup guide                     |
| `deadline exceeded`           | The operation timed out — try reducing partition size or increasing timeout                          |
| `unique constraint violation` | Upsert failed because of conflicting primary keys — check for duplicate primary key values at source |

***

## Webhooks for events

Outbound webhooks for pipeline events are **coming soon**. See [Webhooks](/platform/webhooks) for the planned design. Until then, use [Notifications](/platform/notifications) (in-app and email).
