Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add zpower426/datapowers --skill test-driven-data-sciencegit clone --depth 1 https://github.com/zpower426/datapowersWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/zpower426/datapowers/test-driven-data-science)<a href="https://agentmods.dev/skills/zpower426/datapowers/test-driven-data-science"><img src="https://agentmods.dev/badge/skills/zpower426/datapowers/test-driven-data-science/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/zpower426/datapowers/test-driven-data-science"><img src="https://agentmods.dev/badge/skills/zpower426/datapowers/test-driven-data-science.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00041 | $0.02475 |
| Opus 5.5 | $0.00016 | $0.00990 |
| Sonnet 5.5 | $0.00008 | $0.00495 |
| Haiku 4.5 | $0.00004 | $0.00248 |
Grade A, and why
test-driven-data-science scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 260 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Test-Driven Data Science (TDDS)
Write and run three layers of data assertions before every training step. If any CRITICAL assertion fails, STOP — do not train. Fix the data, then re-run all three layers.
Why three layers: Schema checks catch type errors. Business rule checks catch impossible domain values. Statistical checks catch silent distribution shifts that break trained models. One layer is not enough.
Iron Laws
- NO TRAINING WITHOUT PASSING ALL THREE ASSERTION LAYERS
- NO SILENT FAILURES — every failed assertion must be named and reported
- NEVER skip Statistical layer because "it's the same data source"
When to Use
Data arrives / pipeline produces new features
↓
Run Layer 1: Physical (schema) ← always first
↓ pass
Run Layer 2: Logical (business) ← domain rules
↓ pass
Run Layer 3: Statistical (drift) ← distribution stability
↓ pass
Proceed to training
Trigger this skill whenever:
- New data arrives from an upstream pipeline
- A feature engineering step produces a new dataset
- You are about to call
model.fit()for the first time or after any data change
Layer 1 — Physical (Schema) Assertions
Check that the DataFrame matches the declared schema. Use Pandera.
import pandera as pa
from pandera import Column, DataFrameSchema, Check
import pandas as pd
def build_physical_schema(expected_columns: dict) -> DataFrameSchema:
"""
expected_columns: {col_name: {"dtype": pa.Float, "nullable": False, "checks": [...]}}
"""
return DataFrameSchema(
columns={
name: Column(
spec["dtype"],
nullable=spec.get("nullable", False),
checks=spec.get("checks", []),
)
for name, spec in expected_columns.items()
},
strict=True, # fail on unexpected columns
)
# Example schema
schema = build_physical_schema({
"age": {"dtype": pa.Float, "nullable": False, "checks": [Check.between(0, 120)]},
"income": {"dtype": pa.Float, "nullable": True, "checks": [Check.greater_than_or_equal_to(0)]},
"churn_label": {"dtype": pa.Int, "nullable": False, "checks": [Check.isin([0, 1])]},
})
def run_physical_layer(df: pd.DataFrame, schema: DataFrameSchema) -> dict:
try:
schema.validate(df, lazy=True)
return {"layer": "physical", "status": "PASS", "failures": []}
except pa.errors.SchemaErrors as e:
failures = e.failure_cases[["column", "check", "failure_case"]].to_dict("records")
return {"layer": "physical", "status": "FAIL", "failures": failures}
What ships with it
1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2mo ago First seen · 260 lines · 41 tokens per session scan A bc07b920e463
test-driven-data-science is a skill published in the GitHub repository zpower426/datapowers (1 stars, last pushed 7mo ago), licensed MIT. It adds 41 tokens to every session and 2,475 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
test-driven-data-science compared with skills from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| test-driven-data-sciencezpower426/datapowers | Skill | 1 | 7mo ago | MIT | A | 41 | Claude Code |
| local-llmTserenTserenov/FMT-exocortex-template | Skill | 63 | today | MIT | A | 78 | Claude Code |
| multimodal-blip-2davila7/claude-code-templates | Skill | 33k | today | MIT | A | 52 | Claude Code, Codex |
| post-training-grpo-rl-trainingdavila7/claude-code-templates | Skill | 33k | today | MIT | A | 28 | Claude Code, Codex |
| prompt-engineering-instructordavila7/claude-code-templates | Skill | 33k | today | MIT | A | 44 | Claude Code, Codex |
| emerging-techniques-long-contextdavila7/claude-code-templates | Skill | 33k | today | MIT | A | 78 | Claude Code, Codex |
| emerging-techniques-model-mergingdavila7/claude-code-templates | Skill | 33k | today | MIT | A | 77 | Claude Code, Codex |