# Observability

## Logging

Structured JSON logs via `slog` (`internal/telemetry/logger.go`).

### Parse job logs (`internal/service/parser/orchestrator.go`)

| Event | Level | Fields |
| --- | --- | --- |
| `parse job completed` | info | `job_id`, `event_id`, `repo_id`, `snapshot_id`, `file_path`, `artifact_id`, `parse_duration_ms`, `status` |
| `parse job failed` | error | above + `error` |
| `parse job skipped` | info | `job_id`, `event_id`, `repo_id`, `snapshot_id`, `file_path`, `status`, `reason` |

### Redis consumer logs (`internal/redis/consumer.go`)

| Event | Level | Fields |
| --- | --- | --- |
| `processing files.changed` | info | `event_id`, `repo_id`, `snapshot_id`, `file_path`, `language` |
| `snapshot ready` | info | `event_id`, `repo_id`, `snapshot_id`, `file_count` |

### Redis publisher logs (`internal/redis/publisher.go`)

| Event | Level | Fields |
| --- | --- | --- |
| `published event` | info | `stream`, `event_id`, `entry_id`, `publish_duration_ms` |
| `failed to publish event` | error | `stream`, `event_id`, `error` |

## Health Endpoints

| Path | Purpose |
| --- | --- |
| `/healthz` | Liveness |
| `/readyz` | Readiness (Redis PING + writable artifact store + readable git workspace) |
| `/version` | Build/version info |

## Debug REST APIs

See [`api.md`](api.md) for `/parse-jobs`, `/artifacts`, and `/diagnostics`.

## Future Work

- Parse duration histogram metrics
- Diagnostic counts by severity
- Redis consumer lag metrics
