check label naming the rule that fired. This page catalogs every check type GoldenCheck can raise, grouped by category, so you know exactly what a check string on a finding means.
Findings come from three surfaces that all share the same check vocabulary:
- Profilers and the schema validator run zero-config statistical checks and (when a
goldencheck.ymlis present) declared column rules. - Drift detection compares the current dataset against a saved baseline and raises
*_driftand related checks (these findings carrysource="baseline_drift"). - The LLM layer re-labels and augments findings; its findings reuse the same
checknames (or a relationtype) and carrysource="llm".
Check reference
That is 42 check types across 10 categories. The zero-config profilers cover most of them without any
goldencheck.yml; declared column rules (type, required, nullable, unique, range, enum, format) map onto the schema, nullability, keys, ranges, and format checks above.
Severity and gating
Every finding has one of three severity levels, defined ingoldencheck/models/finding.py as an ordered IntEnum:
Two settings gate findings, and they do different jobs:
severity_threshold(defaultwarning) is a reporting floor. Findings below this level are suppressed from the report. Set it toinfoto see everything, orerrorto see only hard violations.fail_on(defaulterror) is the CI exit gate. Duringvalidate, GoldenCheck returns exit code1as soon as any finding at or above this severity is present, and0otherwise. The comparison isfinding.severity >= SEVERITY_MAP[fail_on], sofail_on: warningalso fails on errors.
severity_threshold controls what you see; fail_on controls whether the build breaks. They are independent, so you can report warnings while only failing CI on errors (the default pairing).
Denial-constraint operators
The denial-constraint miner discovers rules of the form¬(p1 ∧ ... ∧ pm): a conjunction of predicates that should (almost) never hold together. When it does hold, the offending rows or row pairs surface as a denial_constraint finding. Each predicate compares a column against a literal or another column using one of six operators, defined in goldencheck/denial/models.py as Op:
Predicates come in three scopes:
const (t.A op literal), single (t.A op t.B within one row), and cross (ta.A op tb.B across a pair of rows). A mined constraint records its violation fraction g1 and its support, so near-constant business rules surface even when a handful of rows break them.
Example goldencheck.yml
A minimal config that sets the gates and declares a couple of column rules. Everything not declared still gets the zero-config profiler checks above.
goldencheck validate data.csv -c goldencheck.yml. The exit code follows fail_on; the printed and JSON reports follow severity_threshold.
See also
- Config matrix for the full
goldencheck.ymlreference: every setting, column-rule field, and relation type. - GoldenCheck overview for how profilers, drift, and the LLM layer fit together.