# Dstack Pipeline Health

> Data pipeline health check. Checks data freshness, row count trends, and schema anomalies across tables. Outputs a health dashboard with OK/WARN/FAIL per table. Use for daily pipeline monitoring, SLA checks, or debugging stale data. Trigger phrases: "check pipeline health", "is my data fresh?", "data SLA", "pipeline monitoring", "are my tables up to date?", "something seems stale".

- Skill: `upsolve-labs/dstack-pipeline-health` (Agent Skill)
- Install (CLI): `npx skillmds@latest add upsolve-labs/dstack-pipeline-health`
- Raw SKILL.md: https://api.skillmd.com/api/skills/upsolve-labs/dstack-pipeline-health/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- License: MIT
- Author: Upsolve-Labs (https://skillmd.com/u/upsolve-labs)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/upsolve-labs/dstack-pipeline-health

---


## Update Check (run first)

```bash
_UPD=$(~/.claude/skills/data-stack/bin/data-stack-update-check 2>/dev/null || .claude/skills/data-stack/bin/data-stack-update-check 2>/dev/null || true)
[ -n "$_UPD" ] && echo "$_UPD" || true
```

If output shows `UPGRADE_AVAILABLE <old> <new>`: read `~/.claude/skills/data-stack/skills/dstack-upgrade/SKILL.md` and follow the "Inline upgrade flow". If `JUST_UPGRADED <from> <to>`: tell user "Running data-stack v{to} (just updated!)" and continue.

# /pipeline-health

You are running a health check across data pipelines or tables.

## Before Starting

If the user has specified tables, use those. Otherwise discover them first:

```
analyze_data("List all available tables and their most recent record timestamp.")
```

## Phase 1: Freshness Check

```
analyze_data("For these tables: <tables>. Show: (1) most recent record timestamp, (2) how many hours ago that was, (3) row count for today vs 7 days ago.", thread_id=<id>)
```

Freshness thresholds (infer expected cadence from 7-day history if not specified):
- **OK** — updated within expected window
- **WARN** — 1.5× past expected cadence
- **FAIL** — 2× past expected cadence, or no data today

## Phase 2: Row Count Anomalies

```
analyze_data("For each table, compare today's row count to the 7-day average. Flag any table where today's count is less than 50% or more than 200% of the average.", thread_id=<id>)
```

## Phase 3: Schema Drift

```
analyze_data("Are there any columns with unusual null rates today compared to last week? Any columns that appear to have stopped receiving data?", thread_id=<id>)
```

## Phase 4: Output Health Dashboard

```
PIPELINE HEALTH REPORT
As of: <timestamp>
──────────────────────────────────────────────────────────────────
Table              Freshness       Row Δ (7d avg)   Schema    Status
──────────────────────────────────────────────────────────────────
<table_1>          <X>h ago        +3%              OK        ✓ OK
<table_2>          <X>h ago        -62%             —         ⚠ WARN
<table_3>          <X>h ago        no data today    DRIFT     ✗ FAIL

ISSUES:
  FAIL  <table>: <specific issue>
  WARN  <table>: <specific issue>

RECOMMENDED ACTIONS:
  1. <most critical action>
  2. <second action>
```

## Rules

- Run all three phases even if Phase 1 already shows failures.
- If no expected cadence is known, infer it from the last 7 days of update patterns.
- Do not speculate on causes — report observations, recommend investigation.
- If a table has no timestamp column, note it as "freshness unverifiable".

