Generated banner for Dataops
Generated logo for Dataops

Dataops

MicrosoftOfficialPublished by Microsoft

  • Skill
  • Guidelines
  • Software development
  • CC-BY-4.0
  • Low risk
  • Has scripts

From the author

DataOps and DS/MLOps testing reference for data tiering, Bronze-to-Silver validation placement, pipeline invariants, pytest categories, and validation-versus-drift. Use when designing, reviewing, or generating data pipelines, transformation code, data validation, or data-science test suites.
— the description by Microsoft

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

The dataops skill provides a structured reference for designing and reviewing data pipelines and machine learning workflows. It synthesizes engineering best practices regarding data quality tiers (Bronze, Silver, Gold), the strategic placement of validation logic, and the importance of maintaining faithful source copies for pipeline replayability. The skill helps teams distinguish between data validation and drift detection, ensuring that data-heavy systems are robust, testable, and maintainable.

What it does

  • Defines data tier semantics for Bronze, Silver, and Gold storage layers.
  • Provides rules for placing validation at the Bronze-to-Silver boundary.
  • Explains the rationale for maintaining immutable, faithful source copies in the Bronze tier.
  • Offers guidance on distinguishing between data validation and drift detection.
  • Provides a framework for testing data science and MLOps code.
  • Includes a contract for synthetic data operations to ensure safe preflight validation.

When to use it

  • When designing the architecture of a new data pipeline or lakehouse.
  • When reviewing data transformation code or pipeline test suites.
  • When deciding where to implement data validation checks.
  • When troubleshooting pipeline failures that require data replay or recovery.
  • When establishing testing strategies for machine learning models and data loading processes.

Advantages

  • Ensures consistent application of data quality and pipeline invariants.
  • Promotes robust recovery strategies through faithful data ingestion.
  • Clarifies the distinction between validation and drift for better observability.
  • Provides clear, attributed guidance based on established engineering playbooks.
  • Prevents common pitfalls like premature validation before data landing.

Usage examples

“Where should I place validation logic in my ETL pipeline?”
The skill advises placing validation at the Bronze-to-Silver boundary, explaining that Bronze should remain a faithful, immutable copy of the source to support replayability and recovery.
“What is the difference between data validation and drift detection?”
The skill provides a breakdown distinguishing data validation (schema and invariant checks) from drift detection (monitoring changes in data or model signals over time).

Install

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/microsoft/dataops/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip dataops.zip -d .agents/skills

Documentation by Microsoft

DataOps Reference Pack

Goal

Ground pipeline and test generation in the Microsoft CSE engineering playbook so that data tier semantics, validation placement, recovery invariants, and DS/MLOps test technique are applied consistently and attributed accurately.

Inputs

  • The pipeline, transformation, validation, or test work under discussion

  • The tier of each dataset involved, when the consuming workflow records one

  • Existing test layout, package structure, and data-access boundaries

  • A data classification produced elsewhere, when sensitivity matters

Reference index

Read only the reference that matches the active concern.

ReferenceRead this when
data-tiers-and-pipeline-invariants.mdAssigning tier meaning, placing validation, routing malformed records, or asserting replay, idempotency, testability, source-control, and configuration invariants
testing-data-science-and-mlops.mdWriting or reviewing tests for data loading, transformation, model load or predict, data validation, or model robustness
validation-drift-and-observability.mdDistinguishing data validation from drift detection, choosing remediation, or deciding which data and model signals matter
synthetic-data-operation-contract.mdValidating synthetic-data preflight authority, field lineage, conditional subgroup evidence, result linkage, or guarded local replacement
provenance.mdConfirming what is upstream guidance, what is HVE Core derivation, and where upstream is silent

Success criteria

  • Tier language distinguishes the three upstream quality tiers from the additional storage areas.

  • Validation is placed at the Bronze-to-Silver boundary, and the faithful-copy rationale with both replay purposes travels with that placement whether or not the request challenges it.

  • Test guidance names the operation category, its technique, and where mocking stops.

  • Validation and drift keep their distinct definitions and their distinct remediation paths.

  • Every claim traces to an attributed upstream source or is labelled as HVE Core guidance.

  • Synthetic-data generation stops before source access or writes unless its applicable SYNTHETIC_DATA_OPERATION_V1 preflight passes deterministic validation.

Constraints

  • This skill generates code, assertions, and review guidance. It does not execute pipelines, transformation engines, or telemetry backends.

  • Reproduce only the minimum text necessary for a specific technical point, and paraphrase everything else. Attribute every reference and describe accurately what each reference reproduces.

  • Label HVE Core derivations as such. Do not present a derived consequence or a repository convention as upstream guidance.

  • Where upstream is silent, say so rather than inventing an upstream-sounding rule.

Ownership boundaries

This skill decides which data and model signals matter. It does not own the vocabulary, the classification, or the surrounding workflow.

ConcernOwner
Metric names, instrument types, units, cardinality discipline, and the PII emission denylisttelemetry-foundations
Data sensitivity classification and DPIA thresholdsprivacy-standards
Entity semantics, relationships, and which tier a dataset is recorded asThe calling workflow
Feasibility assessment and go/no-go recommendationThe calling workflow

No repository artifact currently owns the last two rows. When the caller supplies neither, state the gap rather than deciding tier assignment or feasibility here.

This skill never decides what is sensitive. It reads a classification produced elsewhere.

For synthetic-data operations, read synthetic-data-operation-contract.md and validate records against synthetic-data-operation-v1.schema.json. The contract records qualified decisions by immutable reference; it does not store source values or replace the authority of data, privacy, Responsible AI, fairness, or domain owners.

Stop rules

  • Stop and route metric naming, units, and cardinality to telemetry-foundations, the OpenTelemetry-aligned vocabulary and instrumentation skill. Route data sensitivity to privacy-standards, the privacy classification and DPIA-threshold reference.

  • Stop and state the gap when the request depends on guidance the playbook does not provide, such as a drift threshold or an alerting policy.

  • Stop and offer the correct placement when asked to validate before Bronze landing, rather than complying or refusing without an alternative.

Attribution

This pack declares CC-BY-4.0 because both bodies of content it holds carry that license.

Source pages are Microsoft CSE Code With Engineering Playbook documentation licensed CC BY 4.0. The upstream project applies MIT through a separate LICENSE-CODE file to code samples only, which this pack does not reproduce. The references derive from those documentation pages and have been changed: upstream guidance is paraphrased, and only identifiers and structural names are carried across as facts. THIRD-PARTY-NOTICES carries the attribution CC BY 4.0 requires and states that the content has been changed. Each reference cites its own upstream URL and states what it reproduces.

Content labelled as HVE Core derivation is repository-original material under CC BY 4.0. See provenance.md for the consolidated source map and derivation labels.

Files

references/testing-data-science-and-mlops.md


title: Testing data science and MLOps code description: The five testable operation categories, their concrete pytest technique, and where mocking stops in each

Source

Microsoft CSE Code-with-Engineering-Playbook, Testing Data Science and MLOps Code, documentation licensed CC BY 4.0. Content below is derived from that page and has been changed. Category names and pytest API names are preserved as identifiers; the category descriptions, the mocking boundaries, and the unit-test scope guard are paraphrased. THIRD-PARTY-NOTICES carries the attribution CC BY 4.0 requires. Upstream code examples are described rather than copied.

Approach

Nothing about MLOps or data-science code changes the principles that govern testing anywhere else. Some situations only look harder to cover, so open with a test design session that works through inputs, outputs, exceptions, and how each data transformation is expected to behave. Deciding on the tests up front pushes the code toward a modular shape where a function does one thing and anything shared is pulled out.

Upstream enumerates five common operations:

  • Saving and loading data

  • Transforming data

  • Model load or predict

  • Data validation

  • Model testing

Category, technique, and mocking boundary

CategoryWhat is under testTechniqueWhere mocking stops
Saving and loading dataThe function's own branching and parameter passing, not the third-party libraryPatch the module-scoped references and assert call arguments and call countsMock the I/O boundary. Replace isfile and read_csv where the module under test refers to them. Only the names that module calls are replaced; the rest run for real.
Saving and loading data, shared samplesReuse of one sample across several testspytest.fixture returning the sample, passed as a test parameterNothing else is stubbed. Keep the sample inline and no bigger than the assertions need.
Transforming dataFixed input to fixed output, one verification per testSeparate tests per property; pytest.mark.parametrize for input matricesNothing is mocked. The transformation runs for real, which is precisely why it has to sit apart from data access. When a function does both, advise splitting it before any transformation test is written. Checking a reshape through a mocked read_csv tests neither category and undoes the invariant.
Model load or predictCode paths around model load and predictionMock load and predict; pytest.mark.longrunning to segregate smoke and integration testsTreat the model as a boundary and stub it as file access is stubbed. A real load sits behind the mark, off the fast loop.
Data validationPipeline robustness against bad inputTest cases for no data supplied, unexpected format, null values, and outliersNo boundary stated. Inputs are built, not stubbed.
Model testingModel robustness and subgroup behaviorAdversarial and boundary tests; verify accuracy for under-represented classesSits outside unit testing entirely, while the model is trained, debugged, and validated.

Saving and loading data

The third-party functions do not need your tests; read_csv and isfile are the responsibility of the pandas and os maintainers. Cover only what the wrapper itself decides: that it reads the file when it is present and uses the right index column, that it skips the read when the file is missing, and that it hands back what callers expect.

Leaning on real sample files is how a test passes on a laptop and fails on a build agent. Stubbing isfile and read_csv cuts that dependency, so the repository carries no fixture files and the test behaves the same wherever it runs.

Transforming data

For cleaning and reshaping work, pin a known input to a known output and let each test check one thing. Shape of the result belongs in one test and padding behavior in another. pytest.mark.parametrize then feeds the pairs of input and expected output through the same test automatically.

Model load or predict

In a unit test, stub the model load and the predictions exactly as file access is stubbed. Pulling in a real model for a smoke or integration test is legitimate but slow, so those tests have to be separable from the fast loop. Upstream separates them with the pytest.mark.longrunning mark and runs the fast loop as pytest -v -m "not longrunning".

Scope guard: ML unit tests check code quality

Unit tests around an ML model are not there to judge its accuracy or its performance. They inspect the quality of the code. Two questions do the diagnosing:

  • Does the model take inputs of the expected shape and return outputs of the expected shape?

  • Do the model weights actually change once fit has run?

For that reason these tests knowingly bend strict unit-testing practice: some external calls are left unstubbed. Upstream calls the result closer to a narrow integration test and accepts the trade. The payoff it claims is catching a badly configured model before it burns hours in training only to perform poorly. Drop the unstubbed-call clause and the guidance reads as an oversight rather than a considered choice.

Upstream gives three implementation examples for deep-learning models:

  • Construct the model, then check the input layer against the shape of example source data and the output layer against the shape the output should take.

  • Capture the weights of every layer, run one training epoch over a dummy dataset, and assert only that those values moved.

  • Train for one epoch on a dummy dataset and validate against dummy data, asserting only that the prediction comes back in the right format. Accuracy is not the point and will not be there.

Data validation

Fold data-validation cases into the unit tests: no data supplied, data not in the expected format, data containing null values, and outliers. Together they show the data-processing pipeline holds up.

Model testing

Past unit testing, a model can be exercised, debugged, and validated while it trains. Upstream names two options: adversarial and boundary tests that harden the model, and accuracy checks on under-represented classes.

Relationship to the DataOps invariants

These five categories are how a team satisfies an invariant the DataOps guidance already asserts: transformation code must be separable from data-access code so unit tests can target transformation logic. See data-tiers-and-pipeline-invariants.md.

Requirements and compatibility

Written for: GitHub Copilot, Claude Code

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Claude Code frontmatter, Needs Python

Security

What our scanner noticed· Low risk

  • Scripts that your agent may run

This skill includes scripts that your agent may run. Read them before you use it.

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Published by
Microsoft
Publisher
Microsoft (Official)
Source
microsoft/hve-core · .github/skills/data-science-engineering/dataops · commit f425e94
Licence
Creative Commons Attribution 4.0 International (redistribution allowed)
  • LICENSE (written by AutoGineer)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by Microsoft or Microsoft.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download dataops.zip