Skip to main content

Data Quality

Test cases, incidents, and the reporting surface all change shape in 2.0, and one documentation correction means test definitions that followed the 1.13 docs may already have been broken.

Incidents move onto the Task entity

Breaking. Affects incident automation and feed-based incident integrations. The test case resolution status time series is unchanged — it still drives incident state. What changed is the task attached to it. POST /v1/feed still accepts test-case-failure-resolution task types, so existing integrations keep working, but new work should target /v1/tasks. Two additive fields reduce round trips: incidentStatus is now inlined on TestCase (no extra lookup per test case to render current incident status), and a new autoCloseIncident boolean (default false, opt-in per test case) automatically resolves an open incident as AutoResolved when a subsequent test result succeeds. The default is unchanged behaviour unless you opt in — 2.0 makes auto-close available but doesn’t enable it retroactively.

Data Insights no longer computes data quality

Breaking. Affects DataInsightsApplication configuration and Data Insights dashboards built on the data quality module.
moduleConfiguration is additionalProperties: false, so any persisted configuration still carrying the dataQuality key makes DataInsightsApplication fail to deserialize on startup. The migration strips it from installed_apps, apps_marketplace and every application version row — but if you manage application configuration as infrastructure-as-code, strip moduleConfiguration.dataQuality yourself before replaying a 1.13 configuration into 2.0. What replaces it: test case results and resolution statuses are read straight from their live search indexes, which also drops the previous 30-day cap on incident data in Data Insights — incident history is no longer truncated.

A documentation correction may surface already-broken tests

Not a behaviour change — a corrected description, but worth checking your test definitions. The sqlExpression field’s description was wrong in 1.13: it said single-brace placeholders like {table} and {column} were supported. The renderer is actually Jinja2 and has always required double braces ({{ table_name }}, {{ column_name }}, {{ paramName }}). The renderer is identical in both releases — single-brace placeholders never worked.
Audit custom SQL test definitions for single-brace placeholders. If you followed the 1.13 documentation and wrote {table}, that test was already producing invalid SQL — convert it to {{ table_name }} and {{ column_name }}.

Multi-status test case filtering, and a stricter status parameter

Behavioural. GET /v1/dataQuality/testCases now binds testCaseStatus as a repeated parameter (?testCaseStatus=Failed&testCaseStatus=Aborted), validated against the status enum — an unknown value returns 400 listing the allowed values, where 1.13 tolerated an invalid status silently. A single-value call is unchanged. In the UI, Test Cases, Test Suites, Test Definitions, Incidents and the Data Quality Dashboard all move to a shared multi-select filter-chip pattern. Reporting and search also gain additive capabilities in 2.0. A batch endpoint replaces N sequential report calls:
Each request carries a client-supplied key used to correlate it with its result in the response. Separately, test suites and test cases are now vectorised for hybrid search, search_metadata can search them, and orphan test cases no longer break search indexing.

Profiler sampling defaults to dynamic, and cardinality distribution is opt-in

Behavioural, with an accuracy implication for AI users. The profiler workflow now samples dynamically by default (sampleConfigType: DYNAMIC, sized from the table’s row count) rather than reading 100% of rows. The sampling configuration schemas are unchanged between 1.13 and 2.0 — set a static sample explicitly if you need full-table profiling.
Cardinality distribution is no longer part of the Profiler agent defaults. This matters for Collate AI agents that reason over distinct values — add the metric back explicitly on the profiler agent if you expect to use the Analytics Agent, because it improves response accuracy.
columnProfile.cardinalityDistribution also moves from an inline object to a named schema definition — the wire shape is unchanged, but regenerate specification-derived models if you consume the raw schema.

Observability UI internals change for forks

Behavioural. Affects forks and plugin authors, not end users. ObservabilityRouterClassBase replaces the shared router utilities for data quality and observability navigation, making them overridable by downstream distributions. Test case and bundle-suite forms migrate from AntD Form to react-hook-form; EditTestCaseModal, EditTestCaseModalV1, TestCaseForm, TestCaseFormV1 and BundleSuiteForm are removed. See UI & Customization for the broader component migration these fit into.

Full detail

For the full narrative walkthrough of Data Quality in Collate 2.0 — including screenshots and step-by-step context — see Release 2.0: Data Quality.