Pipeline Run Triage
pipeline-run-triage · v1.0.0
ivyx
Use when an MLOps pipeline run (boru hattı) failed or stopped and someone asks why, which data or test is the problem, and what to do; reads the record instead of running it again.
Who is asked
Risk low: it loads without asking anyone. Each tool it then calls still meets your policy.
Tools it may call
While this skill is active, a call to any other tool is refused. These still meet every policy rule; the list narrows, it approves nothing.
mlops.metric.historymlops.pipeline.describemlops.gate.evaluatemlops.dvc.statustrace.readduckdb.queryduckdb.inspectfs.readFileWhat it tells the agent
The published SKILL.md, as written.
--- name: pipeline-run-triage description: Use when an MLOps pipeline run (boru hattı) failed or stopped and someone asks why, which data or test is the problem, and what to do; reads the record instead of running it again. allowed-tools: mlops.metric.history mlops.pipeline.describe mlops.gate.evaluate mlops.dvc.status trace.read duckdb.query duckdb.inspect fs.readFile metadata: risk: low ---
Why a pipeline run failed
The answer is already on record. Do not run the pipeline again to find out: a run is a write the project asks a person about, and it adds a second failure to the history the person is reading. You change nothing in this procedure; you find the cause and say what would fix it.
1. Find the run and the stage
mlops.metric.history: every gate's result per run. Take the newest run. A stage whosestatusisfailedis where it stopped; give itsmetric, the measuredvalueand theboundit broke, and when the run happened (atMs).mlops.pipeline.describe: the stages in order, so you can name the stages that were skipped after the one that stopped.- When no gate failed, the pipeline step itself did:
trace.readand find the newest run holding a failed DVC repro or pipeline run call; quote its error.mlops.dvc.statussays which stages are out of date and why. - If two or more recent runs failed at the same stage with the same value, say so: nothing changed between them.
2. Find what broke the gate
Always do this before you answer: the history gives a count, not a cause.
Call mlops.gate.evaluate with the failed stage's id. It runs that one
gate on its own and writes nothing, and its answer names what failed:
| Gate capability | What it names | Then |
|---|---|---|
| mlops.pandera.validate (data contract) | the column, the check and how many values failed | duckdb.query on the stage's data file, passed as file: select * from {{file}} where <the failing condition> limit 5, and the count |
| test.pytest.run (tests) | the failed tests and their assertion messages | fs.readFile the test file to say what it expects |
| mlops.evidently.report (drift) | the drifted columns and the share against the threshold | duckdb.inspect the current and reference files |
| mlops.model.evaluate (model quality) | the bar that failed, with both numbers | nothing more |
fs.readFile the contract or test file when you need the rule's exact
wording. If the gate now passes while the run recorded a failure, something
changed since the run: say both.
If you could not measure the cause, say so. Never write probably about it.
3. Report
- Why it stopped: the stage, its title, the value against the bound.
- What is wrong: the column, check, test or metric, with the counts you measured and up to five examples.
- What would fix it, as choices for the person: fix the data, or change
the rule when the new value is legitimate. Never edit the data, the
contract or
.punica/mlops.yamlyourself, and never suggest loosening a check without saying what it would then let through. - Offer to run the pipeline again once the person has made the fix.