Dataops
MicrosoftOfficialPublished by Microsoft
- Skill
- Guidelines
- Software development
- CC-BY-4.0
- Low risk
- Has scripts
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
Download the skill as a ZIP:
https://autogineer.com/agent-skills/microsoft/dataops/downloadUnzip 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.
| Reference | Read this when |
|---|---|
| data-tiers-and-pipeline-invariants.md | Assigning tier meaning, placing validation, routing malformed records, or asserting replay, idempotency, testability, source-control, and configuration invariants |
| testing-data-science-and-mlops.md | Writing or reviewing tests for data loading, transformation, model load or predict, data validation, or model robustness |
| validation-drift-and-observability.md | Distinguishing data validation from drift detection, choosing remediation, or deciding which data and model signals matter |
| synthetic-data-operation-contract.md | Validating synthetic-data preflight authority, field lineage, conditional subgroup evidence, result linkage, or guarded local replacement |
| provenance.md | Confirming 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_V1preflight 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.
| Concern | Owner |
|---|---|
| Metric names, instrument types, units, cardinality discipline, and the PII emission denylist | telemetry-foundations |
| Data sensitivity classification and DPIA thresholds | privacy-standards |
| Entity semantics, relationships, and which tier a dataset is recorded as | The calling workflow |
| Feasibility assessment and go/no-go recommendation | The 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 toprivacy-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
- ATTRIBUTION.mdAdded by AutoGineer965 B
- LICENSEAdded by AutoGineer16.6 KiB
- SKILL.md7.6 KiB
- assets/synthetic-data-operation-v1.schema.json9.2 KiB
- pyproject.toml681 B
- references/data-tiers-and-pipeline-invariants.md10.2 KiB
- references/provenance.md10.8 KiB
- references/synthetic-data-operation-contract.md6.4 KiB
- references/testing-data-science-and-mlops.md8.8 KiB
- references/validation-drift-and-observability.md7.2 KiB
- scripts/synthetic_data_operation.pyScript21.2 KiB
- tests/corpus/0_empty0 B
- tests/corpus/1_empty_object2 B
- tests/corpus/2_non_object_json2 B
- tests/corpus/3_minimal_preflight27 B
- tests/fuzz_harness.pyScript1.2 KiB
- tests/test_synthetic_data_operation.pyScript23.9 KiB
- uv.lock101.9 KiB
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
| Category | What is under test | Technique | Where mocking stops |
|---|---|---|---|
| Saving and loading data | The function's own branching and parameter passing, not the third-party library | Patch the module-scoped references and assert call arguments and call counts | Mock 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 samples | Reuse of one sample across several tests | pytest.fixture returning the sample, passed as a test parameter | Nothing else is stubbed. Keep the sample inline and no bigger than the assertions need. |
| Transforming data | Fixed input to fixed output, one verification per test | Separate tests per property; pytest.mark.parametrize for input matrices | Nothing 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 predict | Code paths around model load and prediction | Mock load and predict; pytest.mark.longrunning to segregate smoke and integration tests | Treat 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 validation | Pipeline robustness against bad input | Test cases for no data supplied, unexpected format, null values, and outliers | No boundary stated. Inputs are built, not stubbed. |
| Model testing | Model robustness and subgroup behavior | Adversarial and boundary tests; verify accuracy for under-represented classes | Sits 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
fithas 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