Ask an agent to "track this event" and it ships an ad-hoc payload — no naming grammar, no schema, no test, a warehouse table nobody trusts and nobody can safely change. data builds the analytical and governed data plane — event contracts and tracking plans, ingestion and movement, transformation and modeling, the metrics/semantic layer and BI, data quality and testing, lineage and observability, governance/PII/retention, experiment measurement, and platform/cost — re-verifying every volatile tool, price, and license fact against the live source, and treating trust as a gate a dataset must pass, not a dashboard it decorates. Make product and business data trustworthy, governed, discoverable, usable.
runs onClaude CodeCodexCursorAntigravityopencodeGrok BuildHermes
quality-and-testing.mdsurface-warehouse-platform.mdsurface-regulated.md
3 of 16 loaded · read fully
Route before acting. Pick one job and at most one base surface, read only those references — never the whole library. When GDPR/CCPA/HIPAA/SOC2 applies, surface-regulated stacks additively on top; it does not replace the base surface.
The router is the skill. There is no fixed pipeline to run start-to-finish — each job stands alone and enters where your request is. The animation traces one path; the sections below map the whole surface it routes across.
data treats data as a product — distinct from backend (data as application state) and ai (data as model context). It owns the event contract and tracking plan, data contracts and schema evolution, ingestion and movement, transformation and modeling, the metrics/semantic layer and BI, data quality and testing, lineage and observability, governance/PII/retention, experiment measurement validity, and platform/cost choices — the analytical and governed data plane, peer of frontend and backend. It references the substrates and outcomes that plane serves rather than re-deriving or overriding them: backend serves the OLTP store, ai decides retrieval behavior, product names the outcomes, growth designs the experiment.
the analytical/governed plane & the decision record behind it
consume or recommend; own none
Implement inside the decision. When compatible upstream artifacts are supplied — a solution-architecture doc, an NFR budget, a threat model, a handoff.yaml — data builds against them. When they don't exist (a standalone run), it says so explicitly rather than inventing a data-classification decision or threat model to fill the gap.
SKILL.md is a router, not a script. Every request selects the smallest sufficient route: one primary job — the ten below — combined with at most one base surface that reshapes how the job applies to the data-plane shape, plus the additive regulated overlay when GDPR/CCPA/HIPAA/SOC2 applies. Read the selected references completely; load two or three at most, never the whole pack. Ten jobs and five surfaces compose across data-plane shapes without ever reading all sixteen references at once.
| facet | options | rule |
|---|---|---|
| ① Primary job | event-tracking · data-contracts · ingestion/movement · transformation/modeling · metrics/BI · quality-testing ⭐ · lineage/observability · governance/PII · experiment-measurement · platform/cost | Exactly one. Pick the single job the request needs; the default entry is the surface's spine (e.g. the tracking plan for product analytics). |
| ② Base surface | product-analytics (default / start-simplest) · warehouse-platform · operational-activation · ai-data-plane | At most one. The data-plane shape reshapes how every job applies — it points to the job references, it doesn't redefine them. |
| ③ Regulated overlay ⭐ | surface-regulated — GDPR/CCPA/HIPAA/SOC2 on top of any base surface | Additive. Stacks on top of the base surface, never replaces it. A regulated warehouse platform is warehouse-platform + regulated. |
npm view/PyPI, the tool's own changelog — and read the
actual LICENSE file, never a repo's API license field (this stack is a minefield
of stale-root-LICENSE traps and open-core splits, e.g. soda-core's ELv2).Each job is one reference, read fully only when its route is selected — grounded in named canon, producing a running pipeline/contract plus the decision record behind it. This is the whole surface, not a headline slice.
| I need to… | Read | Produces |
|---|---|---|
| Design/repair event tracking — naming grammar, tracking plan, instrumentation QA, consent-aware collection | event-taxonomy-and-tracking.md |
One enforced naming grammar, entity-first modeling, validate-at-ingestion/quarantine, consent gates collection ("denied" is tested) |
| Write/enforce a data contract; evolve a schema safely across producers and consumers | data-contracts-and-schema-evolution.md |
ODCS contract shape, the 7 compatibility modes + who-upgrades-first, contract-as-executable-test, write-audit-publish under the brand |
| Move data — ELT/ETL, sync strategy, CDC, streaming decision, reverse-ETL, failed-sync diagnosis | ingestion-and-movement.md |
Sync-type decision table (by table shape), at-least-once/resumability semantics, CDC + outbox, symptom→cause→fix with destructive-action gating |
| Transform and model — staging→marts layering, materialization, SQL style, modeling choice | transformation-and-modeling.md |
Narrow-the-DAG/widen-the-tables, lint-rule thresholds (1:1 staging, ≤7 joins, chained views), materialization ladder, Kimball/OBT/Vault trade-offs |
| Define metrics once — semantic layer, BI serving, dashboards-as-code vs GUI, NL-to-data | metrics-semantics-and-bi.md |
Metric-type taxonomy, one-authoritative-definition anti-drift, code-first vs GUI-first BI line, 4-tier NL fallback, decision-first serving |
| Prove the data is right — checks, anomaly detection, PR-time diff, test placement ⭐ | quality-and-testing.md |
The convergent DQ taxonomy (9 core buckets + PR-diff + PII), known- vs unknown-unknowns layering, where-to-run-checks, PK test floor, blast-radius diff before merge |
| Trace lineage and observe pipelines — impact analysis, incident response for data | lineage-and-observability.md |
OpenLineage model + facet gotchas, five pillars/data downtime, blast-radius workflow, catalog choice |
| Govern the data — PII classification/masking, retention/erasure, catalogs, mesh-vs-central | governance-pii-and-retention.md |
Platform-layer masking (app-layer is bypassed), Art.17-with-exceptions erasure, tombstone + scheduled hard-delete, federated-governance caveat |
| Make experiment measurement trustworthy — assignment, SRM, variance reduction, peeking | experiment-measurement-foundations.md |
SRM-before-trust, deterministic salted assignment + namespaces, CUPED + non-applicability, peek-safe sequential testing |
| Pick the platform — warehouse/lakehouse/engine choice, table formats, orchestrator, cost, licenses | platform-and-cost.md |
Small-data-first (COST rule), workload-shape-before-pricing, Iceberg-REST interop, task-vs-asset-vs-flow orchestrators, the licensing map |
Full router table & invariants: SKILL.md.
One base surface, at most, reshapes every job for the data-plane shape — the same quality job is bounded differently on a single product's event stream than on a central platform serving many teams. The regulated overlay is additive — it stacks on top of whichever base you picked, never replaces it — and carries a distinct teal identity throughout this page.
Most of the field treats data quality as a dashboard someone checks after the fact; here trust is a gate. Five independent tools (Great Expectations, Soda, Elementary, Deequ, OpenMetadata) plus two lineage/catalog systems converged on nearly the same check buckets without coordinating — that convergence is the evidence the taxonomy below is complete enough to build a check plan from, not one vendor's opinion.
schema: structural drift # col add/remove/type freshness: staleness lag # cheapest at source/staging volume: row-count anomaly completeness: null-rate uniqueness: duplicates # PK floor: unique + not_null validity: domain / set statistical: distributional drift # unknown unknowns referential: cross-table / pair custom: business-rule SQL + PR-diff: blast-radius review # before merge, never after + PII: recognizer → anonymizer # governance-pii-and-retention.md
Two stances set data apart from the tool-comparison guides and single-topic write-ups: it subtracts the buzzword where the field only renames the same primitive, and it treats the churning warehouse/tool/license layer as a first-class, date-stamped concern rather than frozen trivia.
The field debates abstractions more than it implements them. Name the durable primitive under each brand and recommend that, not the label.
The warehouse/tool/price layer churns quarterly — read the LICENSE
file, never a repo's API license field. Every volatile fact is date-stamped and
re-verified; volatile_facts travels in the handoff so a frozen value can't leak
downstream.
npm view/PyPI · the tool's own changelogThese rules govern every route, whichever references it loads — the behavioral spine, condensed.
unique+not_null. Validate at ingestion and quarantine violations — never silently drop or accept. Rule tests catch known unknowns; only anomaly baselines catch unknown unknowns — you need both.volatile_facts into the handoff.data's deliverable is a working data asset plus the decision record behind it, closed on a trust
gate that was run, not asserted. A full pass emits up to four kinds of artifact — the working
asset, its contract + tests, its lineage/telemetry, and the fillable checklists in
assets/ — plus the
machine-readable handoff.yaml companion when downstream work is expected. Each records
the decision and options, the trade-off accepted (including what was removed), and — for any
version/price/license fact — the date it was verified and how to re-verify it.
The pipeline, contract, or plan itself — the implementation, not a plan — wired to the chosen surface.
The ODCS contract and the DQ suite — PK floor + known/unknown-unknowns layered, run, not asserted.
The lineage graph and the freshness/cost telemetry hooks — instrumented, ready for operate to monitor.
Fillable checklists for the tracking plan, schema compatibility, platform cost, and PII audit — the record behind the call.
The routing index into the asset, its contract, and its telemetry — carrying volatile_facts so frozen tool/price/license numbers can't leak.
data consumes architecture's artifacts upstream — data-classification decisions, NFR
budgets, build-vs-buy on ingestion/warehouse — and, when downstream work is expected, emits a
compact handoff.yaml beside the working asset: a routing index into it, never a
copy. The clearest seam to name explicitly is the three-way retrieval seam shared with ai and
backend around a RAG system.
Retrieval behavior (chunking, fusion, rerank, retrieval eval) is ai's. The vector store as served infrastructure (deployment, connection pooling, backup, uptime) is backend/operate's. The vector store and LLM traces as governed datasets — the ingestion pipeline, source-of-truth lineage, PII classification, access control on what gets indexed, and the trace/token warehouse — is data's.
Chunking, fusion, rerank, decomposition, retrieval eval. Consumes data's vector-store schema and freshness assumptions rather than re-deriving them.
Deployment, connection pooling, backup, uptime of the vector store. The infrastructure data's pipeline writes into.
Ingestion as governed ETL, source-of-truth lineage, PII classification, access control on what's indexed, the trace/token warehouse.
skill: data status: complete objective: "" # only required field artifacts_created: [tracking-plan, data-contract, pipeline-config, dq-suite] decisions: · assumptions: · constraints: volatile_facts: [tool, price, license + date + re-verify pointer] recommended_next: frontend · backend · ai · quality · operate · growth
The tracking plan / event contract to emit against, and the operational-store read contract (CDC schema, freshness SLA) their own schema changes must not silently break.
The vector-store/dataset schema and freshness cadence a retrieval design can assume is current — and how it's kept that way.
The DQ suite as a starting point for independent verification, the freshness/cost telemetry hooks to monitor, and the SRM/assignment guarantees an experiment can trust.
Six distinct consumers, not one. Each is a consumer, not a co-author — data ships the contract, pipeline, and DQ suite; it does not write UI instrumentation, own the operational store, design retrieval behavior, run the independent compliance audit, own the monitoring dashboard, or design the experiment. Only objective is required; every other field may be empty. Never silently invoke a sibling skill; name it in recommended_next.
Install once. It's a plain SKILL.md router — no flags, no config, no scripts — so it
activates on natural-language phrasing ("write a data contract," "add DQ tests with a PK floor,"
"pick a sync strategy," "govern this PII field," "check SRM before trusting this experiment") rather
than a fixed command.
The same install runs on any Agent Skills
host. Codex installs to ${CODEX_HOME:-$HOME/.codex}/skills and triggers with
$data; agents remains a separate cross-agent installation target.
| host | install target | command |
|---|---|---|
| Claude Code | ~/.claude/skills | ./install.sh claude |
| Codex | ${CODEX_HOME:-$HOME/.codex}/skills | ./install.sh codex |
| Cross-agent path | ~/.agents/skills | ./install.sh agents |
| Cursor CLI | ~/.cursor/skills | ./install.sh cursor |
| Antigravity (IDE + agy) | ~/.gemini/…/skills | ./install.sh antigravity |
| opencode | ~/.config/opencode/skills | ./install.sh opencode |
| Grok Build | ~/.grok/skills | ./install.sh grok |
| Hermes | ~/.hermes/skills | ./install.sh hermes |
Prefer npx skills add gabros20/data-skill -g -y when you have Node — it maps supported clients itself.
More docs: docs/installation.md · docs/usage.md · docs/recipes.md.