data
Hub for data-engineering pipeline work — storage/ingest/serve choice plus shared discipline (idempotency, incremental-not-full-recompute, schema fencing…
Skill by Evan-Kim2028
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/evan-kim2028-data
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: design, backend, testing, data
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/data
What's inside
- Skill name
data- Description
- Hub for data-engineering pipeline work — storage/ingest/serve choice plus shared discipline (idempotency, incremental-not-full-recompute, schema fencing, resilience, bounded memory, layered enforcement). Routes to data-apache-lakehouse, data-api, data-duckdb, data-pipeline-operations, data-table-lifecycle, data-semantic-quality, data-identity-resolution, and data-product-eval. Use when a task spans ingest → store → serve, the specialist isn't obvious, or you need a live coverage audit. Don't use for OLTP schema design, one-off notebooks, generic SQL, ML training, or BI config. When a specialist clearly fits, skip this hub and load it directly.
- License
- MIT
- Instructions
- 147 lines in SKILL.md · view on GitHub
Files (3)
- SKILL.md
- o-history-leaks.md · references/
- resilience-and-idempotency.md · references/
SKILL.md (first lines)
# Data engineering — routing hub
The shared entry point for building and operating data pipelines. Its job is two things the individual skill descriptions can't do: **route** you to the right specialist, and state the **cross-cutting principles** every specialist assumes. When you already know the specialist, load it directly — this hub is for the choices you make *before* that, and for the discipline that spans all of them.
## Routing — which skill
| Your task | Skill |
|---|---|
| Designing/operating an **Apache Iceberg** lakehouse (bronze/silver/gold, PyIceberg, catalog choice, compaction/expire, WAP, snapshot rollback, single-host bounded-RAM writes) | **data-apache-lakehouse** |
| **Consuming** an external HTTP API for ingestion (rate limits, backoff, pagination, auth, response validation) **or serving** gold/analytical data over HTTP (FastAPI + DuckDB, pushdown, keyset pagination, cache invalidation, sidecar rebuild, serving vs lake memory, freshness SLIs) | **data-api** |
| Using **DuckDB** as the compute engine — tuning memory/threads, larger-than-memory spilling, Parquet read/write layout, connection lifecycle, EXPLAIN profiling | **data-duckdb** |
| Running **multiple pipelines** on shared single-host infrastructure — memory admission control, concurrency caps, capacity ratchets, OOM kills that only appear when individually-fine pipelines coexist, timer jobs that must fit one `TimeoutStartSec` | **data-pipeline-operations** |
| Deciding whether a **table/artifact should still exist** — consumer audits, safe drops, maintenance coverage | **data-table-lifecycle** |
| **Semantic row truth** — quality flags, outlier/anomaly rules, trust ladders, golden packs, split-brain lake vs API quality | **data-semantic-quality** |
| **Attaching** messy records to a canonical entity key — fail-closed, quarantine, unresolved debt, remap | **data-identity-resolution** |
| **Scoring published estimates** vs later realized facts — freeze, walk-forward, coverage vs error | **data-product-eval** |
| **Coverage audit** — “how much / how fresh / how resolved” from live tables, not docs | **this hub** (playbook below), then the specialist that owns the hole |
| Choosing *between* storage formats (Iceberg vs Delta vs plain Parquet vs embedded DuckDB), or the task spans ingest → store → serve | start here, then hand off |
| Generic interface/contract design unrelated to data movement | `api-and-interface-design` (not a data skill) |
| Wrapping an API as a live tool Claude calls at runtime | build an **MCP server**, not a skill |
If no specialist fits the storage layer yet, apply the principles below directly — they are format-agnostic.
## Cross-cutting principles (shared by every data sub-skill)
Load-bearing in *any* pipeline, whatever the storage engine. Each is paired with a falsifiable test — if you can't pass the test, the principle is being violated, not "applied differently." Specialists restate the engine-specific form; the canonical version lives here.
### 1. Every write is idempotent
Re-running the same step — same input window, same batch — produces identical state, never duplicates. This is what makes crashes, retries, and backfills safe. Achieve it with deterministic keys (upsert/merge on a primary key, partition-overwrite of a window, or content-addressed filenames), never by hoping a step runs exactly once.
**Test:** run the step twice on the same window. Is the output byte-identical? If row counts grow, it isn't idempotent.
### 2. Move forward by a watermark, not a full recompute
Every step persists how far it has consumed — a max timestamp, a sequence number, a pagination cursor, a snapshot id — and resumes from there. "Rebuild from history" exists only behind an explicit `--rebuild` flag. A step with no watermark gets slower in proportion to data growth, silently.
Watch for **O(history) leaks disguised as incremental** — a watermark exists somewhere in the code, but a specific operation still scales with total history. Named shapes and measured cases: [`references/o-history-leaks.md`](references/o-history-leaks.md). The ones that keep shipping:
- **Entity-keyed lifetime reload** — watermark picks *which* keys changed, then `WHERE entity_id IN (...)` with no time predicate. Timer path predicates keys *and* the partition time column. Lifetime is `--rebuild` / `--full`.
- **Chunked unique on a frozen basis** — each checkpoint `unique()`s corpus-so-far, or merges against a start-of-run snapshot that logs `no existing`. Unique *this* chunk; upsert into *current* gold.
- **Write-window / read-window split** — overwrite is partitioned; the read still walks the whole raw tree.
- **Unwindowed sidecar / snapshot unique** — a "daily" job scans a lifetime fact table into RAM. Daily path is a lookback merge; lifetime is `--full`.
**Test (entity leak):** a new fact for one entity today — does runtime grow with that entity's lifetime row count, or with the lookback window? If it grows with lifetime, the watermark is decorative.
**Test (chunked unique leak):** after chunk 2, does the merge log `existing=` / `preserved=` against current gold, or `existing=0` / `no existing` again? If the latter, the basis is frozen or PK-invalid and each chunk is O(corpus-so-far). Peak RSS after chunk N must not track unique(rows 1..N).
**Test (read vs write window):** with no new files today, does the gold step skip, or does RSS grow with the full raw tree? If it grows, the read is lifetime.
A full-rebuild trigger (schema change, resolver bump, backfill) belongs on its **own lane**, separate
from the regular incremental run, with checkpoints that survive a retry. A rebuild whose retry logic
wipes its own staging checkpoints resets to record one on every crash and, on a large enough history,
never finishes — measured: 9 attempts over 19 hours, 0 successes, each retry restarting a 602-day
rebuild from day 1.
**Test:** if the upstream grew 10× tomorrow, would this step's runtime grow 10×? If yes, it lacks a watermark. Separately: does a crash mid-rebuild resume from a checkpoint, or restart from record one? If it restarts, the rebuild lane isn't resumable and won't survive its own retries on real data volume.
### 3. Fence schema at every boundary
Validate columns, **engine types**, and null fractions at each layer/stage edge, and fail *loud at the boundary*. Column names are not enough: Iceberg `timestamptz` vs DuckDB `DATE`, `List(Utf8)` vs `Utf8`, and field order are schema. A malformed upstream payload should error at ingestion with a clear message — not surface as a cryptic cast error three stages downstream. Keep a strict mode that turns warnings into hard failures in production. Iceberg/Arrow/DuckDB form: **data-apache-lakehouse**.
This is **mechanical** validation. **Semantic** correctness (right entity, right attributes for the consumer use — quality flags, trust ladders, cohort fences) is a separate concern: use **data-semantic-quality**. Schema fences alone do not make rows trustworthy for product aggregates.
**Test:** if an upstream adds a column or flips a type (including timezone-aware vs naive, list vs scalar), which stage fails, and is its error message actionable? If the failure is far from the cause, the fence is missing.
### 4. Publish atomically; readers never see a partial write
A reader sees either the old state or the new one, never half. Use `tmp → rename` for files and a transactional commit for catalogued tables. Never mutate a live output in place while readers are pointed at it.
**Test:** kill the writer mid-publish. Can a reader observe a torn/partial result? If yes, the publish isn't atomic.
### 5. Resilience is implemented, not hoped for
Retry transient failures with exponential backoff + jitter; trip a **circuit breaker** per external dependency so one outage degrades one lane instead of hanging every loop; route un-processable records to a **dead-letter queue** with enough context to replay. A swallowed exception in an unattended loop is data loss you discover a week later. Code: [`references/resilience-and-idempotency.md`](references/resilience-and-idempotency.md).
**Test:** when an upstream dependency is down for an hour, does exactly one lane degrade and recover automatically, or does the whole host wedge? Where do failed records end up?
### 6. Peak memory is bounded by the batch, not the dataset
Tie peak RAM to batch/page/window size, not total volume — stream record batches, lazy-scan, paginate. A step whose memory scales with the table will eventually OOM on a busy day.
**Test:** does this step's peak RSS depend on total row count, or on batch size? If it scales with the data, it isn't streaming.
### 7. Freshness is observable
Every run records what it consumed and produced — a watermark, a row count, a run-log line. An unattended pipeline you can't interrogate ("when did this last update, and with how many rows?") is one you can't trust.
Job-success is not freshness. Distinguish **absent** (source never landed), **empty** (source ran, zero rows in window), **stale** (watermark older than the SLA), and **timeout** (unit SIGTERM — not a successful empty). Empty-chunk skip is not progress; empty-all and timeout are different exits (**data-pipeline-operations**). Serving SLIs consume these signals; they do not invent a second clock (**data-api**).
**Test:** without reading code, can you answer "when did table X last update and how many rows landed?" from a log or a property? If a unit is green, can you still tell empty from stale from timeout? If not, add the signal.
### 8. Enforcement is layered: runtime guard > CI gate > checklist > review convention
A principle enforced by only a checklist or a comment is a suggestion, not enforcement. Real
enforcement stacks from strongest to weakest, and the top layer is the one that actually blocks a
violation: a **runtime guard** that refuses to proceed (a constructor that raises without a required
argument, an admission gate that refuses units without a memory cap); a **CI gate** that structurally
parses the change (a unit-file parser checking caps are present and heavy units are routed through
admission, a timer-overlap lint, a live-vs-repo drift audit — not a keyword grep); a **checklist
artifact** reviewed per pipeline (a row per pipeline × falsifiable test × last-verified date); and a
**review convention** (a PR template row) as the last, weakest backstop. Use as many layers as the
risk warrants — structure beats memory, and memory is the only thing a checklist or convention relies
on.
A checker that greps source for a comment or a string literal **false-passes**: it confirms the words
exist, not that the code does what they claim. Enforcement has to parse structure — AST, unit-file
fields, config schema — not text.
**Test:** delete the checklist — does anything still block a violation? If no, you have documentation,
not enforcement, and the runtime guard or CI gate layer is missing.
## Coverage audit playbook
Use when the ask is inventory, not a code change: how much data, how fresh, how
usable. **Query the live warehouse / serving path.** Frozen onboarding docs and
agent memory are not evidence.
```From Evan-Kim2028/agent-skills, MIT.
More from Evan-Kim2028/agent-skills
- 0.552score
ebay-listing
Evan-Kim2028
List Pokémon TCG singles on the ekcope-46 eBay store via lake-of-rage ebay-sell (Trading AddFixedPriceItem).
SkillBFreshness: B★ 1Claude Code +9 - 0.548score
data-product-eval
Evan-Kim2028
Portable methodology for evaluating published estimates, marks, or forecasts against later realized outcomes — frozen snapshots, walk-forward fit vs forecast…
SkillBFreshness: B★ 1Claude Code +9 - 0.548score
data-api
Evan-Kim2028
Use when consuming HTTP APIs for ingestion (rate limits, backoff, pagination, auth, schema fencing) or serving gold over HTTP (FastAPI + DuckDB, pushdown…
SkillBFreshness: B★ 1Claude Code +9 - 0.548score
data-semantic-quality
Evan-Kim2028
Portable methodology for semantic (row-truth) data quality — write-time quality attributes, trust ladders, cohort fences, golden entity packs with dual error…
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
data-reels
Evan-Kim2028
Principles for high-retention short-form data video (Instagram Reels, TikTok, Shorts) built from measured competitor research on data-viz and stats accounts.
SkillBFreshness: B★ 1Claude Code +9 - 0.544score
data-apache-lakehouse
Evan-Kim2028
Use when designing, modifying, or debugging Apache Iceberg lakehouses (bronze/silver/gold medallion specifically on Iceberg) — PyIceberg +…
SkillBFreshness: B★ 1Claude Code +9 - 0.544score
data-identity-resolution
Evan-Kim2028
Portable workflow for attaching messy records to canonical entities — evidence ladder, fail-closed assignment, quarantine on strong-vs-weak conflict…
SkillBFreshness: B★ 1Claude Code +9 - 0.544score
data-pipeline-operations
Evan-Kim2028
Use when running multiple data pipelines on one host: memory admission, systemd MemoryMax, OOM that only appears under coexistence, capacity ratchets…
SkillBFreshness: B★ 1Claude Code +9 - 0.544score
data-pokemon-tcg-foundations
Evan-Kim2028
Use when working with a trading-card sales tape — any sale-level dataset of collectible card transactions across multiple venues (Pokémon TCG, sports cards…
SkillBFreshness: B★ 1Claude Code +9 - 0.502score
browser-verify
Evan-Kim2028
Prove UI in a real browser — Playwright e2e, visual snapshots, axe, and/or Chrome DevTools MCP (live DOM, console, network, performance).
SkillCFreshness: C★ 1Claude Code +9 - 0.502score
flutter-pro-ux-review
Evan-Kim2028
Production Flutter UX audit: ranked polish findings (dead taps, null text, a11y, keyboard, haptics, layout shift, async/offline honesty, motion, empty states…
SkillCFreshness: C★ 1Claude Code +9 - 0.502score
mobile-app-echarts-visual
Evan-Kim2028
Mobile-readable **product ECharts** (card price/volume, portfolio history, set charts) without desktop regressions — grid gutters, axisLabel floors, legend…
SkillCFreshness: C★ 1Claude Code +9
Signals
- Stars
- 1
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Aug 29, 2026 (2 months ago)
- Last release
- Jun 22, 2026 (4 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/Evan-Kim2028/agent-skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from Evan-Kim2028
- 0.552score
ebay-listing
Evan-Kim2028
List Pokémon TCG singles on the ekcope-46 eBay store via lake-of-rage ebay-sell (Trading AddFixedPriceItem).
SkillBFreshness: B★ 1Claude Code +9 - 0.548score
data-api
Evan-Kim2028
Use when consuming HTTP APIs for ingestion (rate limits, backoff, pagination, auth, schema fencing) or serving gold over HTTP (FastAPI + DuckDB, pushdown…
SkillBFreshness: B★ 1Claude Code +9 - 0.548score
data-semantic-quality
Evan-Kim2028
Portable methodology for semantic (row-truth) data quality — write-time quality attributes, trust ladders, cohort fences, golden entity packs with dual error…
SkillBFreshness: B★ 1Claude Code +9 - 0.548score
data-product-eval
Evan-Kim2028
Portable methodology for evaluating published estimates, marks, or forecasts against later realized outcomes — frozen snapshots, walk-forward fit vs forecast…
SkillBFreshness: B★ 1Claude Code +9 - 0.547score
data-reels
Evan-Kim2028
Principles for high-retention short-form data video (Instagram Reels, TikTok, Shorts) built from measured competitor research on data-viz and stats accounts.
SkillBFreshness: B★ 1Claude Code +9 - 0.544score
data-pokemon-tcg-foundations
Evan-Kim2028
Use when working with a trading-card sales tape — any sale-level dataset of collectible card transactions across multiple venues (Pokémon TCG, sports cards…
SkillBFreshness: B★ 1Claude Code +9
Cite this page
data skill. Agent Mart. https://agentmart.dev/skills/evan-kim2028-data (last updated 2026-10-24)