> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getcollate.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Breaking Changes - Data Quality | Official Documentation

> Incidents move onto the Task entity, Data Insights stops computing data quality, and the profiler samples dynamically by default in Collate 2.0.

# 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.

|           | 1.13                              | 2.0                                                       |
| --------- | --------------------------------- | --------------------------------------------------------- |
| Storage   | `thread_entity` (`type=Task`)     | `task_entity`                                             |
| Task type | thread task type                  | `TestCaseResolution` / `IncidentResolution`               |
| Category  | N/A                               | `Incident`                                                |
| Payload   | untyped `taskDetails`             | `testCaseResolutionPayload` / `incidentResolutionPayload` |
| Resolve   | `PUT /v1/feed/tasks/{id}/resolve` | `POST /v1/tasks/{id}/resolve`                             |

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.

```diff theme={null}
- "dataQualityConfig": { "enabled": true },
  "moduleConfiguration": {
-   "dataQuality": { "$ref": "#/definitions/dataQualityConfig" },
-   "required": ["dataAssets", "appAnalytics", "dataQuality", "costAnalysis"]
+   "required": ["dataAssets", "appAnalytics", "costAnalysis"]
  }
```

`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.

<Tip>
  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 }}`.
</Tip>

## 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:

```http theme={null}
POST /v1/dataQuality/testSuites/dataQualityReport/batch
```

```json theme={null}
{
  "requests": [
    { "key": "byStatus", "index": "testCase", "aggregationQuery": "…", "q": "…", "domain": "…" },
    { "key": "byDimension", "index": "testCase", "aggregationQuery": "…" }
  ]
}
```

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.

<Warning>
  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.
</Warning>

`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](/ai-2-0/release-2.0/breaking-changes/ui-and-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](/ai-2-0/release-2.0/data-quality).
