verify-outputs
Skill0 starsChanged 5 months agoMITView on GitHub
Review every figure, table and reported number for accuracy, sanity and readability BEFORE handing it to the user — producing an output is not finishing it. Use when a task has generated charts, maps, CSV/summary tables, a report, or numbers quoted in prose; when about to say "here are the figures/tables"; when asked whether outputs were reviewed; or when many artifacts were generated by shared plotting/formatting code. Ships verify_outputs.py, which screens rendered PNG pixels (not the plotting code) for blank output, single-colour dominance, invisible signal, inverted colormaps and low ink, and screens tables for empty/all-null/unnamed-index defects.
In this repository57 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- ask-mattSkill
- cast-memberSkill
- check-feedbackSkill
- codebase-designSkill
- content-pipeline-initSkill
- content-pipelineSkill
- data-analystSkill
- decision-mappingSkill
- diagnosing-bugsSkill
- domain-modelingSkill
- draft-asset-promptsSkill
- edit-articleSkill
- fableSkill
- game-concept-interviewSkill
- git-guardrails-claude-codeSkill
- global-guidelinesSkill
- grillingSkill
- grill-meSkill
- grill-with-docsSkill
- handoffSkill
- implementSkill
- improve-codebase-architectureSkill
- karpathy-guidelinesSkill
- launch-sessionSkill
- lesson-reviewSkill
- link-claude-skillsSkill
- loop-meSkill
- migrate-to-shoehornSkill
- obsidian-vaultSkill
- opusSkill
- prototypeSkill
- publish-metadataSkill
- resolving-merge-conflictsSkill
- retrieve-lessonsSkill
- reviewSkill
- rotate-sessionSkill
- run-buildSkill
- run-clipsSkill
- scaffold-exercisesSkill
- session-sandboxSkill
- setup-matt-pocock-skillsSkill
- setup-pre-commitSkill
- setup-status-lineSkill
- showrunner-shortSkill
- sonnetSkill
- tddSkill
- teachSkill
- to-issuesSkill
- to-prdSkill
- triageSkill
- wrap-allSkill
- wrapSkill
- writing-beatsSkill
- writing-fragmentsSkill
- writing-great-skillsSkill
- writing-shapeSkill
The file
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 3 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 13
Every defect that motivated it was invisible in the source and obvious in the image.
- Distinctive: line 18
Verify a table by recomputing it from the source, not by looking at it.
- Distinctive: line 110
A checker you have never seen fail is an untested checker: Run new validations against known-bad input deliberately and confirm they fail.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Verify Outputs
A figure that renders is not a figure that is right, and neither is a figure that can be read. This skill exists because those are three separate properties and only the first one is self-evident.
Every defect that motivated it was invisible in the source and obvious in the image.
The three checks — all required, in this order
1. Accuracy — recompute, do not read. Verify a table by recomputing it from the source, not by looking at it. Every count in a caption, every N in a table, every percentage in a sentence is a claim, and each one is checkable. If you wrote the number and the note describing it, the note is a hypothesis you wrote down, not evidence.
2. Sanity — predict, then look. Say what the output should show before you open it. Does the geography match known geography, the sign match theory, the magnitude match the units? An output that renders cleanly and says something impossible is the most dangerous kind, because nothing complains.
3. Readability — open it and look at it. Can the thing it exists to show actually be seen? Labels legible and non-overlapping, colour scale the right way round, axis range letting the signal show — and does the caption match what the image actually draws? A caption that asserts what the figure cannot show is a defect of the same severity as a wrong number, because the reader believes the caption.
Run the screen
python -X utf8 verify_outputs.py --figures FIGDIR [FIGDIR ...] --tables TABLEDIR [...]Exit code 1 on findings, so it can gate a commit. It reads rendered pixels, because that is where the defects live. Then review by eye everything it flags, plus a sample.
Sample across mechanisms, not at random
Defects live in shared policy code — a colormap rule, a norm rule, a scale rule — so each one hits every artifact that policy touches, 4–30 at a time. Pick one artifact per colour policy, per normalisation type, per data family. Reviewing 14 figures chosen this way found six distinct defects; random sampling of 14 would likely have found one or two.
Say what you eyeballed versus what you screened
"I reviewed them" when you screened them is a false claim about your own work. State both numbers.
The recurring failure modes
Nine mechanisms, each observed in production:
- The conditional that never fires.
if "flag" not in matplotlib.colormaps: register(...)—flagis a builtin, so the branch never ran and 30 maps silently drew with the wrong colormap, inverted. No error; the code reads correctly. If you writeif X: do_important_thing, prove X is ever true. (Taken matplotlib names includeflag,spring,winter,ocean,terrain,gray.) - "This run's list" treated as "everything that exists." A stale-artifact sweep deleted 317 good files, and a notes table was truncated 321 rows → 5, both because a partial run wrote or deleted as if it were a full one. Anything that deletes or overwrites from a computed set must know whether the set is complete or partial. Write the partial-run case first; it is the one that loses data.
- Masked values rendering as missing.
LogNormmasks non-positive values and a colormap's bad-colour is transparent by default, so zeros drew blank — identical to no-data — across 16 maps and 39,829 values, under titles reading "0 no data". Setcmap.set_bad(...)explicitly whenever a norm can mask. - A guard written from a guess about the failure. A completeness check rejected any file
containing the substring
"404"; the files were pipe-delimited counts, so|4046|matched and 15 of 77 provinces were thrown away. Produce the failure mode and look at it before writing the guard against it. - Comparing against the wrong baseline. Two measurements came from different rasters on different grids; the 5.7% difference was the baseline, not the treatment. Caught only by a null case — the subpopulation where the treatment does nothing must measure nothing. Build that control every time.
- Invariants from intuition instead of the domain. "No place is closer to a port than to the coast" failed for 3,091 units — Bangkok Port is 18 km up a river, as are Hamburg and Antwerp. When an invariant fails at scale, suspect the invariant first. Prefer invariants on the small curated set (8 ports) over the large derived one (7,586 units).
- A convention applied outside its domain. A fixed 0–1 colour scale is right for variables spanning that range and wrong for ones topping out at 0.45 — where it wasted half the palette and hid the study's main gradient. A convention needs a stated domain.
- A headline statistic that is a count of threshold crossings. "9 of 18 changed sign" was accurate and knife-edge: one case sat at +0.0017. Report magnitude of movement alongside the count, and how many cases sit near the threshold.
- Fixing a symptom before understanding the mechanism. A first fix moved the metric the wrong way; the cause was a 3×3 kernel, not the thing being adjusted. When a fix worsens the metric, that is information — enumerate candidate mechanisms and measure to discriminate before changing anything.
Two asymmetries
Loud failure is cheap; silent success is expensive. The bad guard failed loudly and cost twenty minutes. The unregistered colormap succeeded silently and shipped thirty wrong figures. Be most suspicious of the code that never complains.
A checker you have never seen fail is an untested checker. Run new validations against known-bad input deliberately and confirm they fail. A check that only ever passes is worthless.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

