From d6b4197c4cceac1e365ffee26e39f1378366b5b5 Mon Sep 17 00:00:00 2001 From: wdeka Date: Wed, 20 May 2026 10:27:11 +0200 Subject: [PATCH 01/19] feat: add manage-mac skill and schema validation gates - Add schemas/mac-schema.json (generated from monolith-django) - Add /manage-mac skill for schema-aware MaC YAML authoring (create, edit, validate) - Add plugin symlinks in all 5 editor plugins - Inject schema validation gate into monitoring-advisor data-monitor-creation.md - Inject schema validation rules into tune-monitor SKILL.md - Update README.md and skills/README.md to list manage-mac Co-Authored-By: Claude Sonnet 4.6 --- README.md | 1 + plugins/claude-code/skills/manage-mac | 1 + plugins/codex/skills/manage-mac | 1 + plugins/copilot/skills/manage-mac | 1 + plugins/cursor/skills/manage-mac | 1 + plugins/opencode/skills/manage-mac | 1 + schemas/mac-schema.json | 8555 +++++++++++++++++ skills/README.md | 1 + skills/manage-mac/SKILL.md | 207 + .../references/data-monitor-creation.md | 14 + skills/tune-monitor/SKILL.md | 2 + 11 files changed, 8785 insertions(+) create mode 120000 plugins/claude-code/skills/manage-mac create mode 120000 plugins/codex/skills/manage-mac create mode 120000 plugins/copilot/skills/manage-mac create mode 120000 plugins/cursor/skills/manage-mac create mode 120000 plugins/opencode/skills/manage-mac create mode 100644 schemas/mac-schema.json create mode 100644 skills/manage-mac/SKILL.md diff --git a/README.md b/README.md index 9a5599a..fa85897 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ Skills are grouped by the job they help you do. Orchestrated workflows sequence |---|---|---| | **Proactive Monitoring** _(workflow)_ | Sequences coverage analysis → gap identification → monitor creation into a guided flow. | [SKILL](skills/proactive-monitoring/SKILL.md) | | **Monitoring Advisor** | Identifies coverage gaps and creates monitors for warehouse tables or AI agents — validates tables and fields against your live workspace, emits monitors-as-code YAML. | [README](skills/monitoring-advisor/README.md) | +| **Manage MaC** | Author, edit, and validate Monitors-as-Code YAML files. Reads the published schema to ensure field correctness across all 14 monitor types. | [SKILL](skills/manage-mac/SKILL.md) | | **Tune Monitor** | Recommends sensitivity, segment, and schedule changes to reduce alert noise on an existing metric monitor. | [SKILL](skills/tune-monitor/SKILL.md) | ### Prevent — catch issues before they ship diff --git a/plugins/claude-code/skills/manage-mac b/plugins/claude-code/skills/manage-mac new file mode 120000 index 0000000..2b61899 --- /dev/null +++ b/plugins/claude-code/skills/manage-mac @@ -0,0 +1 @@ +../../../skills/manage-mac \ No newline at end of file diff --git a/plugins/codex/skills/manage-mac b/plugins/codex/skills/manage-mac new file mode 120000 index 0000000..2b61899 --- /dev/null +++ b/plugins/codex/skills/manage-mac @@ -0,0 +1 @@ +../../../skills/manage-mac \ No newline at end of file diff --git a/plugins/copilot/skills/manage-mac b/plugins/copilot/skills/manage-mac new file mode 120000 index 0000000..2b61899 --- /dev/null +++ b/plugins/copilot/skills/manage-mac @@ -0,0 +1 @@ +../../../skills/manage-mac \ No newline at end of file diff --git a/plugins/cursor/skills/manage-mac b/plugins/cursor/skills/manage-mac new file mode 120000 index 0000000..2b61899 --- /dev/null +++ b/plugins/cursor/skills/manage-mac @@ -0,0 +1 @@ +../../../skills/manage-mac \ No newline at end of file diff --git a/plugins/opencode/skills/manage-mac b/plugins/opencode/skills/manage-mac new file mode 120000 index 0000000..2b61899 --- /dev/null +++ b/plugins/opencode/skills/manage-mac @@ -0,0 +1 @@ +../../../skills/manage-mac \ No newline at end of file diff --git a/schemas/mac-schema.json b/schemas/mac-schema.json new file mode 100644 index 0000000..28f4d21 --- /dev/null +++ b/schemas/mac-schema.json @@ -0,0 +1,8555 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Monte Carlo Monitors-as-Code", + "description": "Schema for montecarlo.yml / monitors.yml MaC configuration files.", + "type": "object", + "properties": { + "version": { + "type": "integer", + "default": 1 + }, + "field_health": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "warehouse": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "table": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "data_source": { + "oneOf": [ + { + "type": "object", + "properties": { + "table": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sql": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "transforms": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "alias": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "prompt": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "categories": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "description": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "examples": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "label" + ] + } + }, + { + "type": "null" + } + ] + }, + "model_connection_id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "output_type": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sql_expression": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "field_config_list": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": {}, + "count": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "type" + ] + } + }, + { + "type": "null" + } + ] + }, + "model_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "field_value_range": { + "oneOf": [ + { + "type": "object", + "properties": { + "lower_bound": {}, + "upper_bound": {} + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "function": { + "type": "string" + }, + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "function" + ] + } + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "timestamp_field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timestamp_field_expression": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "where_condition": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "lookback_days": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "aggregation_time_interval": { + "oneOf": [ + { + "type": "string", + "enum": [ + "day", + "hour", + "month", + "week" + ] + }, + { + "type": "null" + } + ] + }, + "schedule": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dynamic", + "fixed", + "loose", + "manual" + ], + "default": "fixed" + }, + "dynamic_schedule_tables": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "dynamic_schedule_jobs": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "job_type": { + "type": "string", + "enum": [ + "AdfJob", + "AirflowDag", + "DatabricksJob", + "DbtJob" + ] + }, + "job_name": { + "type": "string" + }, + "project_name": { + "type": "string" + }, + "task_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mcon": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "job_type", + "job_name", + "project_name" + ] + } + }, + { + "type": "null" + } + ] + }, + "interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "interval_crontab": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "interval_crontab_day_operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + { + "type": "null" + } + ] + }, + "start_time": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timezone": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "notes": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "oneOf": [ + { + "type": "string", + "maxLength": 512 + }, + { + "type": "null" + } + ] + }, + "labels": { + "type": "array", + "items": { + "type": "string" + } + }, + "audiences": { + "type": "array", + "items": { + "type": "string" + } + }, + "failure_audiences": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "severity": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "priority": { + "oneOf": [ + { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] + }, + { + "type": "null" + } + ] + }, + "connection_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, + { + "type": "null" + } + ] + }, + "domains": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "fields": { + "type": "array", + "items": { + "type": "string" + } + }, + "sensitivity_level": { + "oneOf": [ + { + "type": "string", + "enum": [ + "high", + "low", + "medium" + ] + }, + { + "type": "null" + } + ] + }, + "use_important_fields": { + "type": "boolean" + }, + "segmented_expressions": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "segmentation_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "custom_sql_expression", + "field" + ] + }, + { + "type": "null" + } + ] + }, + "use_partition_clause": { + "type": "boolean" + }, + "selected_metrics": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "alert_conditions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "metric": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "custom_metric": { + "oneOf": [ + { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "display_name": { + "type": "string" + }, + "sql_expression": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "display_name", + "sql_expression" + ] + }, + { + "type": "null" + } + ] + }, + "fields": { + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "type": "string", + "enum": [ + "noop", + "threshold" + ], + "default": "threshold" + }, + "operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AUTO", + "AUTO_HIGH", + "AUTO_LOW", + "EQ", + "GT", + "GTE", + "INSIDE_RANGE", + "LT", + "LTE", + "NEQ", + "NOOP", + "OUTSIDE_RANGE" + ] + }, + { + "type": "null" + } + ] + }, + "threshold_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "lower_threshold": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "upper_threshold": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "field_pattern": { + "oneOf": [ + { + "type": "object", + "properties": { + "operator": { + "type": "string", + "enum": [ + "CONTAINING", + "ENDING_WITH", + "MATCHING", + "STARTING_WITH" + ] + }, + "value": { + "type": "string" + }, + "case_sensitive": { + "type": "boolean" + }, + "field_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "BOOLEAN", + "DATE", + "NUMERIC", + "TEXT", + "TIME", + "TIME_OF_DAY" + ] + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "operator", + "value" + ] + }, + { + "type": "null" + } + ] + }, + "baseline_trailing_days": { + "oneOf": [ + { + "type": "integer", + "minimum": 1 + }, + { + "type": "null" + } + ] + }, + "baseline_start": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "baseline_end": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "num_bins": { + "oneOf": [ + { + "type": "integer", + "minimum": 2, + "maximum": 1000 + }, + { + "type": "null" + } + ] + }, + "id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + } + }, + "min_segment_size": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "high_segment_count": { + "type": "boolean" + } + }, + "additionalProperties": false + } + }, + "dimension_tracking": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "warehouse": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "table": { + "type": "string" + }, + "data_source": { + "oneOf": [ + { + "type": "object", + "properties": { + "table": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sql": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "transforms": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "alias": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "prompt": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "categories": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "description": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "examples": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "label" + ] + } + }, + { + "type": "null" + } + ] + }, + "model_connection_id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "output_type": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sql_expression": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "field_config_list": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": {}, + "count": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "type" + ] + } + }, + { + "type": "null" + } + ] + }, + "model_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "field_value_range": { + "oneOf": [ + { + "type": "object", + "properties": { + "lower_bound": {}, + "upper_bound": {} + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "function": { + "type": "string" + }, + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "function" + ] + } + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "timestamp_field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timestamp_field_expression": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "where_condition": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "lookback_days": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "aggregation_time_interval": { + "oneOf": [ + { + "type": "string", + "enum": [ + "day", + "hour", + "month", + "week" + ] + }, + { + "type": "null" + } + ] + }, + "schedule": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dynamic", + "fixed", + "loose", + "manual" + ], + "default": "fixed" + }, + "dynamic_schedule_tables": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "dynamic_schedule_jobs": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "job_type": { + "type": "string", + "enum": [ + "AdfJob", + "AirflowDag", + "DatabricksJob", + "DbtJob" + ] + }, + "job_name": { + "type": "string" + }, + "project_name": { + "type": "string" + }, + "task_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mcon": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "job_type", + "job_name", + "project_name" + ] + } + }, + { + "type": "null" + } + ] + }, + "interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "interval_crontab": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "interval_crontab_day_operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + { + "type": "null" + } + ] + }, + "start_time": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timezone": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "notes": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "oneOf": [ + { + "type": "string", + "maxLength": 512 + }, + { + "type": "null" + } + ] + }, + "labels": { + "type": "array", + "items": { + "type": "string" + } + }, + "audiences": { + "type": "array", + "items": { + "type": "string" + } + }, + "failure_audiences": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "severity": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "priority": { + "oneOf": [ + { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] + }, + { + "type": "null" + } + ] + }, + "connection_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, + { + "type": "null" + } + ] + }, + "domains": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "field": { + "type": "string" + }, + "use_partition_clause": { + "type": "boolean" + }, + "unnest_field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "table", + "field" + ] + } + }, + "json_schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "warehouse": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "table": { + "type": "string" + }, + "data_source": { + "oneOf": [ + { + "type": "object", + "properties": { + "table": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sql": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "transforms": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "alias": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "prompt": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "categories": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "description": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "examples": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "label" + ] + } + }, + { + "type": "null" + } + ] + }, + "model_connection_id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "output_type": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sql_expression": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "field_config_list": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": {}, + "count": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "type" + ] + } + }, + { + "type": "null" + } + ] + }, + "model_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "field_value_range": { + "oneOf": [ + { + "type": "object", + "properties": { + "lower_bound": {}, + "upper_bound": {} + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "function": { + "type": "string" + }, + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "function" + ] + } + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "timestamp_field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timestamp_field_expression": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "where_condition": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "lookback_days": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "aggregation_time_interval": { + "oneOf": [ + { + "type": "string", + "enum": [ + "day", + "hour", + "month", + "week" + ] + }, + { + "type": "null" + } + ] + }, + "schedule": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dynamic", + "fixed", + "loose", + "manual" + ], + "default": "fixed" + }, + "dynamic_schedule_tables": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "dynamic_schedule_jobs": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "job_type": { + "type": "string", + "enum": [ + "AdfJob", + "AirflowDag", + "DatabricksJob", + "DbtJob" + ] + }, + "job_name": { + "type": "string" + }, + "project_name": { + "type": "string" + }, + "task_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mcon": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "job_type", + "job_name", + "project_name" + ] + } + }, + { + "type": "null" + } + ] + }, + "interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "interval_crontab": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "interval_crontab_day_operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + { + "type": "null" + } + ] + }, + "start_time": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timezone": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "notes": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "oneOf": [ + { + "type": "string", + "maxLength": 512 + }, + { + "type": "null" + } + ] + }, + "labels": { + "type": "array", + "items": { + "type": "string" + } + }, + "audiences": { + "type": "array", + "items": { + "type": "string" + } + }, + "failure_audiences": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "severity": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "priority": { + "oneOf": [ + { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] + }, + { + "type": "null" + } + ] + }, + "connection_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, + { + "type": "null" + } + ] + }, + "domains": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "field": { + "type": "string" + }, + "unnest_field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "table", + "field" + ] + } + }, + "metric": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "warehouse": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "type": "string" + }, + "connection_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timeout": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "data_source": { + "type": "object", + "properties": { + "table": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sql": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "transforms": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "alias": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "prompt": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "categories": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "description": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "examples": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "label" + ] + } + }, + { + "type": "null" + } + ] + }, + "model_connection_id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "output_type": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sql_expression": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "field_config_list": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": {}, + "count": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "type" + ] + } + }, + { + "type": "null" + } + ] + }, + "model_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "field_value_range": { + "oneOf": [ + { + "type": "object", + "properties": { + "lower_bound": {}, + "upper_bound": {} + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "function": { + "type": "string" + }, + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "function" + ] + } + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + "where_condition": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "use_partition_clause": { + "type": "boolean" + }, + "aggregate_time_field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "aggregate_time_sql": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "aggregate_timezone": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "aggregate_by": { + "oneOf": [ + { + "type": "string", + "enum": [ + "day", + "hour", + "month", + "week" + ] + }, + { + "type": "null" + } + ] + }, + "collection_lag": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "high_segment_count": { + "type": "boolean" + }, + "segment_fields": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "segment_sql": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "alert_conditions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "metric": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "custom_metric": { + "oneOf": [ + { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "display_name": { + "type": "string" + }, + "sql_expression": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "display_name", + "sql_expression" + ] + }, + { + "type": "null" + } + ] + }, + "fields": { + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "type": "string", + "enum": [ + "noop", + "threshold" + ], + "default": "threshold" + }, + "operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AUTO", + "AUTO_HIGH", + "AUTO_LOW", + "EQ", + "GT", + "GTE", + "INSIDE_RANGE", + "LT", + "LTE", + "NEQ", + "NOOP", + "OUTSIDE_RANGE" + ] + }, + { + "type": "null" + } + ] + }, + "threshold_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "lower_threshold": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "upper_threshold": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "field_pattern": { + "oneOf": [ + { + "type": "object", + "properties": { + "operator": { + "type": "string", + "enum": [ + "CONTAINING", + "ENDING_WITH", + "MATCHING", + "STARTING_WITH" + ] + }, + "value": { + "type": "string" + }, + "case_sensitive": { + "type": "boolean" + }, + "field_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "BOOLEAN", + "DATE", + "NUMERIC", + "TEXT", + "TIME", + "TIME_OF_DAY" + ] + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "operator", + "value" + ] + }, + { + "type": "null" + } + ] + }, + "baseline_trailing_days": { + "oneOf": [ + { + "type": "integer", + "minimum": 1 + }, + { + "type": "null" + } + ] + }, + "baseline_start": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "baseline_end": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "num_bins": { + "oneOf": [ + { + "type": "integer", + "minimum": 2, + "maximum": 1000 + }, + { + "type": "null" + } + ] + }, + "id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + } + }, + "sensitivity": { + "oneOf": [ + { + "type": "string", + "enum": [ + "high", + "low", + "medium" + ] + }, + { + "type": "null" + } + ] + }, + "schedule": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dynamic", + "fixed", + "loose", + "manual" + ], + "default": "fixed" + }, + "dynamic_schedule_tables": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "dynamic_schedule_jobs": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "job_type": { + "type": "string", + "enum": [ + "AdfJob", + "AirflowDag", + "DatabricksJob", + "DbtJob" + ] + }, + "job_name": { + "type": "string" + }, + "project_name": { + "type": "string" + }, + "task_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mcon": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "job_type", + "job_name", + "project_name" + ] + } + }, + { + "type": "null" + } + ] + }, + "interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "interval_crontab": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "interval_crontab_day_operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + { + "type": "null" + } + ] + }, + "start_time": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timezone": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "notes": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "type": "string", + "maxLength": 512 + }, + "audiences": { + "type": "array", + "items": { + "type": "string" + } + }, + "failure_audiences": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "priority": { + "oneOf": [ + { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] + }, + { + "type": "null" + } + ] + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, + { + "type": "null" + } + ] + }, + "domains": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "sampling_config": { + "oneOf": [ + { + "type": "object", + "properties": { + "percentage": {}, + "count": {} + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name", + "data_source", + "alert_conditions", + "description" + ] + } + }, + "metric_comparison": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "warehouse": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "type": "string" + }, + "source": { + "type": "object", + "properties": { + "table": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sql": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "transforms": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "alias": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "prompt": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "categories": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "description": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "examples": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "label" + ] + } + }, + { + "type": "null" + } + ] + }, + "model_connection_id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "output_type": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sql_expression": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "field_config_list": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": {}, + "count": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "type" + ] + } + }, + { + "type": "null" + } + ] + }, + "model_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "field_value_range": { + "oneOf": [ + { + "type": "object", + "properties": { + "lower_bound": {}, + "upper_bound": {} + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "function": { + "type": "string" + }, + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "function" + ] + } + }, + { + "type": "null" + } + ] + }, + "where_condition": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "warehouse": { + "type": "string" + }, + "segment_fields": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "segment_sql": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "connection_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timeout": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "warehouse" + ] + }, + "target": { + "type": "object", + "properties": { + "table": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sql": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "transforms": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "alias": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "prompt": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "categories": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "description": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "examples": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "label" + ] + } + }, + { + "type": "null" + } + ] + }, + "model_connection_id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "output_type": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sql_expression": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "field_config_list": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": {}, + "count": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "type" + ] + } + }, + { + "type": "null" + } + ] + }, + "model_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "field_value_range": { + "oneOf": [ + { + "type": "object", + "properties": { + "lower_bound": {}, + "upper_bound": {} + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "function": { + "type": "string" + }, + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "function" + ] + } + }, + { + "type": "null" + } + ] + }, + "where_condition": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "warehouse": { + "type": "string" + }, + "segment_fields": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "segment_sql": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "connection_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timeout": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "warehouse" + ] + }, + "alert_conditions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "metric": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "custom_metric": { + "oneOf": [ + { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "display_name": { + "type": "string" + }, + "source_sql_expression": { + "type": "string" + }, + "target_sql_expression": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "display_name", + "source_sql_expression", + "target_sql_expression" + ] + }, + { + "type": "null" + } + ] + }, + "source_field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "target_field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "type": { + "type": "string", + "enum": [ + "comparison_delta", + "noop" + ], + "default": "comparison_delta" + }, + "operator": { + "type": "string", + "enum": [ + "GT", + "NOOP" + ], + "default": "GT" + }, + "threshold_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "is_threshold_relative": { + "type": "boolean" + } + }, + "additionalProperties": false + } + }, + "schedule": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dynamic", + "fixed", + "loose", + "manual" + ], + "default": "fixed" + }, + "dynamic_schedule_tables": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "dynamic_schedule_jobs": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "job_type": { + "type": "string", + "enum": [ + "AdfJob", + "AirflowDag", + "DatabricksJob", + "DbtJob" + ] + }, + "job_name": { + "type": "string" + }, + "project_name": { + "type": "string" + }, + "task_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mcon": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "job_type", + "job_name", + "project_name" + ] + } + }, + { + "type": "null" + } + ] + }, + "interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "interval_crontab": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "interval_crontab_day_operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + { + "type": "null" + } + ] + }, + "start_time": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timezone": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "notes": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "type": "string", + "maxLength": 512 + }, + "audiences": { + "type": "array", + "items": { + "type": "string" + } + }, + "failure_audiences": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "priority": { + "oneOf": [ + { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] + }, + { + "type": "null" + } + ] + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, + { + "type": "null" + } + ] + }, + "domains": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name", + "source", + "target", + "alert_conditions", + "description" + ] + } + }, + "custom_sql": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "warehouse": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "connection_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "oneOf": [ + { + "type": "string", + "maxLength": 512 + }, + { + "type": "null" + } + ] + }, + "notes": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "severity": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "priority": { + "oneOf": [ + { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] + }, + { + "type": "null" + } + ] + }, + "labels": { + "type": "array", + "items": { + "type": "string" + } + }, + "audiences": { + "type": "array", + "items": { + "type": "string" + } + }, + "failure_audiences": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "event_rollup_count": { + "oneOf": [ + { + "type": "integer", + "minimum": 2 + }, + { + "type": "null" + } + ] + }, + "event_rollup_until_changed": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, + { + "type": "null" + } + ] + }, + "domains": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "schedule": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dynamic", + "fixed", + "loose", + "manual" + ], + "default": "fixed" + }, + "dynamic_schedule_tables": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "dynamic_schedule_jobs": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "job_type": { + "type": "string", + "enum": [ + "AdfJob", + "AirflowDag", + "DatabricksJob", + "DbtJob" + ] + }, + "job_name": { + "type": "string" + }, + "project_name": { + "type": "string" + }, + "task_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mcon": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "job_type", + "job_name", + "project_name" + ] + } + }, + { + "type": "null" + } + ] + }, + "interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "interval_crontab": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "interval_crontab_day_operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + { + "type": "null" + } + ] + }, + "start_time": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timezone": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + "timeout": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "sql": { + "type": "string" + }, + "variables": {}, + "alert_conditions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "absolute_volume", + "change", + "dynamic_threshold", + "growth_volume", + "noop", + "threshold" + ], + "default": "threshold" + }, + "operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AUTO", + "AUTO_HIGH", + "AUTO_LOW", + "EQ", + "GT", + "GTE", + "INSIDE_RANGE", + "LT", + "LTE", + "NEQ", + "NOOP", + "OUTSIDE_RANGE" + ] + }, + { + "type": "null" + } + ] + }, + "threshold_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "baseline_agg_function": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AVG", + "MAX", + "MIN" + ] + }, + { + "type": "null" + } + ] + }, + "baseline_interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "is_threshold_relative": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "min_buffer_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "max_buffer_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "min_buffer_modifier_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "METRIC", + "PERCENTAGE" + ] + }, + { + "type": "null" + } + ] + }, + "max_buffer_modifier_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "METRIC", + "PERCENTAGE" + ] + }, + { + "type": "null" + } + ] + }, + "number_of_agg_periods": { + "oneOf": [ + { + "type": "integer", + "minimum": 1, + "maximum": 1000 + }, + { + "type": "null" + } + ] + }, + "threshold_lookback_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "is_percentage_threshold": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "percentage_baseline_sql": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "threshold_sensitivity": { + "oneOf": [ + { + "type": "string", + "enum": [ + "high", + "low", + "medium" + ] + }, + { + "type": "null" + } + ] + }, + "lower_threshold": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "upper_threshold": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + "maxItems": 1 + }, + "query_result_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ROW_COUNT", + "SINGLE_NUMERIC" + ] + }, + { + "type": "null" + } + ] + }, + "sampling_sql": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "exception_primary_key_column": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "schedule", + "sql", + "alert_conditions" + ] + } + }, + "validation": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "warehouse": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "connection_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "oneOf": [ + { + "type": "string", + "maxLength": 512 + }, + { + "type": "null" + } + ] + }, + "notes": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "severity": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "priority": { + "oneOf": [ + { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] + }, + { + "type": "null" + } + ] + }, + "labels": { + "type": "array", + "items": { + "type": "string" + } + }, + "audiences": { + "type": "array", + "items": { + "type": "string" + } + }, + "failure_audiences": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "event_rollup_count": { + "oneOf": [ + { + "type": "integer", + "minimum": 2 + }, + { + "type": "null" + } + ] + }, + "event_rollup_until_changed": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, + { + "type": "null" + } + ] + }, + "domains": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "schedule": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dynamic", + "fixed", + "loose", + "manual" + ], + "default": "fixed" + }, + "dynamic_schedule_tables": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "dynamic_schedule_jobs": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "job_type": { + "type": "string", + "enum": [ + "AdfJob", + "AirflowDag", + "DatabricksJob", + "DbtJob" + ] + }, + "job_name": { + "type": "string" + }, + "project_name": { + "type": "string" + }, + "task_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mcon": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "job_type", + "job_name", + "project_name" + ] + } + }, + { + "type": "null" + } + ] + }, + "interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "interval_crontab": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "interval_crontab_day_operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + { + "type": "null" + } + ] + }, + "start_time": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timezone": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + "timeout": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "data_source": { + "type": "object", + "properties": { + "table": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sql": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "transforms": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "alias": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "prompt": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "categories": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "description": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "examples": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "label" + ] + } + }, + { + "type": "null" + } + ] + }, + "model_connection_id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "output_type": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sql_expression": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "field_config_list": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": {}, + "count": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "type" + ] + } + }, + { + "type": "null" + } + ] + }, + "model_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "field_value_range": { + "oneOf": [ + { + "type": "object", + "properties": { + "lower_bound": {}, + "upper_bound": {} + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "function": { + "type": "string" + }, + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "function" + ] + } + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + "alert_condition": { + "type": "object", + "properties": { + "type": {}, + "id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "conditions": {}, + "operator": {} + }, + "additionalProperties": false + }, + "exception_primary_key_column": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "percentage_threshold": { + "oneOf": [ + { + "type": "number", + "minimum": 0 + }, + { + "type": "null" + } + ] + }, + "percentage_operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "EQ", + "GT", + "GTE", + "LT", + "LTE" + ] + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "schedule", + "data_source", + "alert_condition" + ] + } + }, + "comparison": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "warehouse": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "connection_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "oneOf": [ + { + "type": "string", + "maxLength": 512 + }, + { + "type": "null" + } + ] + }, + "notes": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "severity": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "priority": { + "oneOf": [ + { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] + }, + { + "type": "null" + } + ] + }, + "labels": { + "type": "array", + "items": { + "type": "string" + } + }, + "audiences": { + "type": "array", + "items": { + "type": "string" + } + }, + "failure_audiences": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "event_rollup_count": { + "oneOf": [ + { + "type": "integer", + "minimum": 2 + }, + { + "type": "null" + } + ] + }, + "event_rollup_until_changed": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, + { + "type": "null" + } + ] + }, + "domains": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "schedule": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dynamic", + "fixed", + "loose", + "manual" + ], + "default": "fixed" + }, + "dynamic_schedule_tables": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "dynamic_schedule_jobs": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "job_type": { + "type": "string", + "enum": [ + "AdfJob", + "AirflowDag", + "DatabricksJob", + "DbtJob" + ] + }, + "job_name": { + "type": "string" + }, + "project_name": { + "type": "string" + }, + "task_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mcon": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "job_type", + "job_name", + "project_name" + ] + } + }, + { + "type": "null" + } + ] + }, + "interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "interval_crontab": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "interval_crontab_day_operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + { + "type": "null" + } + ] + }, + "start_time": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timezone": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + "query_result_type": { + "type": "string", + "enum": [ + "LABELED_NUMERICS", + "ROW_COUNT", + "SINGLE_NUMERIC" + ] + }, + "source_resource": { + "type": "string" + }, + "target_resource": { + "type": "string" + }, + "source_sql": { + "type": "string" + }, + "target_sql": { + "type": "string" + }, + "alert_conditions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "default": "source_target_delta" + }, + "operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "EQ", + "GT", + "GTE", + "LT", + "LTE", + "NEQ" + ] + }, + { + "type": "null" + } + ] + }, + "threshold_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "baseline_agg_function": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AVG", + "MAX", + "MIN" + ] + }, + { + "type": "null" + } + ] + }, + "baseline_interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "is_threshold_relative": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "min_buffer_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "max_buffer_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "min_buffer_modifier_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "METRIC", + "PERCENTAGE" + ] + }, + { + "type": "null" + } + ] + }, + "max_buffer_modifier_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "METRIC", + "PERCENTAGE" + ] + }, + { + "type": "null" + } + ] + }, + "number_of_agg_periods": { + "oneOf": [ + { + "type": "integer", + "minimum": 1, + "maximum": 1000 + }, + { + "type": "null" + } + ] + }, + "threshold_lookback_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "is_percentage_threshold": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "percentage_baseline_sql": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + "maxItems": 1 + }, + "source_connection_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "target_connection_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "schedule", + "query_result_type", + "source_resource", + "target_resource", + "source_sql", + "target_sql", + "alert_conditions" + ] + } + }, + "query_performance": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "warehouse": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "oneOf": [ + { + "type": "string", + "maxLength": 512 + }, + { + "type": "null" + } + ] + }, + "audiences": { + "type": "array", + "items": { + "type": "string" + } + }, + "failure_audiences": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "notes": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "priority": { + "oneOf": [ + { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] + }, + { + "type": "null" + } + ] + }, + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, + { + "type": "null" + } + ] + }, + "domains": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "selection": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "field_name": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + }, + "operator": {} + }, + "additionalProperties": false, + "required": [ + "field_name" + ] + } + }, + { + "type": "null" + } + ] + }, + "alert_conditions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "threshold": {}, + "metric": {}, + "comparison_type": {}, + "operator": {}, + "baseline_agg_function": {}, + "threshold_lookback_minutes": {}, + "threshold_lookback_data_points": {} + }, + "additionalProperties": false, + "required": [ + "threshold", + "metric" + ] + } + } + }, + "additionalProperties": false, + "required": [ + "alert_conditions" + ] + } + }, + "freshness": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "warehouse": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "connection_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "oneOf": [ + { + "type": "string", + "maxLength": 512 + }, + { + "type": "null" + } + ] + }, + "notes": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "severity": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "priority": { + "oneOf": [ + { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] + }, + { + "type": "null" + } + ] + }, + "labels": { + "type": "array", + "items": { + "type": "string" + } + }, + "audiences": { + "type": "array", + "items": { + "type": "string" + } + }, + "failure_audiences": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "event_rollup_count": { + "oneOf": [ + { + "type": "integer", + "minimum": 2 + }, + { + "type": "null" + } + ] + }, + "event_rollup_until_changed": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, + { + "type": "null" + } + ] + }, + "domains": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "schedule": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dynamic", + "fixed", + "loose", + "manual" + ], + "default": "fixed" + }, + "dynamic_schedule_tables": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "dynamic_schedule_jobs": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "job_type": { + "type": "string", + "enum": [ + "AdfJob", + "AirflowDag", + "DatabricksJob", + "DbtJob" + ] + }, + "job_name": { + "type": "string" + }, + "project_name": { + "type": "string" + }, + "task_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mcon": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "job_type", + "job_name", + "project_name" + ] + } + }, + { + "type": "null" + } + ] + }, + "interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "interval_crontab": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "interval_crontab_day_operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + { + "type": "null" + } + ] + }, + "start_time": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timezone": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "table": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "tables": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "freshness_threshold": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "threshold_sensitivity": { + "oneOf": [ + { + "type": "string", + "enum": [ + "high", + "low", + "medium" + ] + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + } + }, + "volume": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "warehouse": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "connection_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "oneOf": [ + { + "type": "string", + "maxLength": 512 + }, + { + "type": "null" + } + ] + }, + "notes": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "severity": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "priority": { + "oneOf": [ + { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] + }, + { + "type": "null" + } + ] + }, + "labels": { + "type": "array", + "items": { + "type": "string" + } + }, + "audiences": { + "type": "array", + "items": { + "type": "string" + } + }, + "failure_audiences": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "event_rollup_count": { + "oneOf": [ + { + "type": "integer", + "minimum": 2 + }, + { + "type": "null" + } + ] + }, + "event_rollup_until_changed": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, + { + "type": "null" + } + ] + }, + "domains": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "schedule": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dynamic", + "fixed", + "loose", + "manual" + ], + "default": "fixed" + }, + "dynamic_schedule_tables": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "dynamic_schedule_jobs": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "job_type": { + "type": "string", + "enum": [ + "AdfJob", + "AirflowDag", + "DatabricksJob", + "DbtJob" + ] + }, + "job_name": { + "type": "string" + }, + "project_name": { + "type": "string" + }, + "task_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mcon": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "job_type", + "job_name", + "project_name" + ] + } + }, + { + "type": "null" + } + ] + }, + "interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "interval_crontab": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "interval_crontab_day_operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + { + "type": "null" + } + ] + }, + "start_time": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timezone": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "table": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "tables": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "alert_conditions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "absolute_volume", + "change", + "dynamic_threshold", + "growth_volume", + "lookback", + "threshold" + ] + }, + "operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AUTO", + "EQ", + "GT", + "GTE", + "LT", + "LTE", + "NEQ", + "OUTSIDE_RANGE" + ] + }, + { + "type": "null" + } + ] + }, + "threshold_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "baseline_agg_function": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AVG", + "MAX", + "MIN" + ] + }, + { + "type": "null" + } + ] + }, + "baseline_interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "is_threshold_relative": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "min_buffer_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "max_buffer_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "min_buffer_modifier_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "METRIC", + "PERCENTAGE" + ] + }, + { + "type": "null" + } + ] + }, + "max_buffer_modifier_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "METRIC", + "PERCENTAGE" + ] + }, + { + "type": "null" + } + ] + }, + "number_of_agg_periods": { + "oneOf": [ + { + "type": "integer", + "minimum": 1, + "maximum": 1000 + }, + { + "type": "null" + } + ] + }, + "threshold_lookback_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "is_percentage_threshold": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "percentage_baseline_sql": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "threshold_sensitivity": { + "oneOf": [ + { + "type": "string", + "enum": [ + "high", + "low", + "medium" + ] + }, + { + "type": "null" + } + ] + }, + "lower_threshold": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "upper_threshold": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "type" + ] + }, + "maxItems": 1 + }, + "volume_metric": { + "type": "string", + "enum": [ + "total_byte_count", + "total_byte_count_last_changed_on", + "total_row_count", + "total_row_count_last_changed_on" + ] + } + }, + "additionalProperties": false, + "required": [ + "alert_conditions" + ] + } + }, + "field_quality": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "warehouse": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "connection_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "oneOf": [ + { + "type": "string", + "maxLength": 512 + }, + { + "type": "null" + } + ] + }, + "notes": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "severity": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "priority": { + "oneOf": [ + { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] + }, + { + "type": "null" + } + ] + }, + "labels": { + "type": "array", + "items": { + "type": "string" + } + }, + "audiences": { + "type": "array", + "items": { + "type": "string" + } + }, + "failure_audiences": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "event_rollup_count": { + "oneOf": [ + { + "type": "integer", + "minimum": 2 + }, + { + "type": "null" + } + ] + }, + "event_rollup_until_changed": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, + { + "type": "null" + } + ] + }, + "domains": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "schedule": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dynamic", + "fixed", + "loose", + "manual" + ], + "default": "fixed" + }, + "dynamic_schedule_tables": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "dynamic_schedule_jobs": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "job_type": { + "type": "string", + "enum": [ + "AdfJob", + "AirflowDag", + "DatabricksJob", + "DbtJob" + ] + }, + "job_name": { + "type": "string" + }, + "project_name": { + "type": "string" + }, + "task_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mcon": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "job_type", + "job_name", + "project_name" + ] + } + }, + { + "type": "null" + } + ] + }, + "interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "interval_crontab": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "interval_crontab_day_operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + { + "type": "null" + } + ] + }, + "start_time": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timezone": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + "table": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "tables": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "fields": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "metric_type": { + "type": "string", + "enum": [ + "ACCURACY", + "APPROX_DISTINCTNESS", + "APPROX_DISTINCT_COUNT", + "APPROX_QUANTILES", + "APPROX_QUANTILES0", + "APPROX_QUANTILES1", + "APPROX_QUANTILES2", + "APPROX_QUANTILES3", + "APPROX_QUANTILES4", + "APPROX_QUANTILES5", + "DUPLICATE_COUNT", + "EMPTY_STRING_COUNT", + "EMPTY_STRING_RATE", + "FALSE_COUNT", + "FALSE_RATE", + "FUTURE_TIMESTAMP_COUNT", + "FUTURE_TIMESTAMP_RATE", + "JS_DIVERGENCE", + "KS_TEST", + "MAE", + "MAPE", + "MAX_LENGTH", + "MEAN_ERROR", + "MEAN_LENGTH", + "MIN_LENGTH", + "MISSING_VALUES", + "NAN_COUNT", + "NAN_RATE", + "NEGATIVE_COUNT", + "NEGATIVE_RATE", + "NEW_VALUES", + "NON_NULL_COUNT", + "NULL_COUNT", + "NULL_RATE", + "NUMERIC_MAX", + "NUMERIC_MEAN", + "NUMERIC_MEDIAN", + "NUMERIC_MIN", + "NUMERIC_QUANTILES", + "NUMERIC_STDDEV", + "PAST_TIMESTAMP_COUNT", + "PAST_TIMESTAMP_RATE", + "PERCENTILE_20", + "PERCENTILE_40", + "PERCENTILE_60", + "PERCENTILE_80", + "PERCENTILE_95", + "PERCENTILE_99", + "PSI", + "RELATIVE_ROW_COUNT", + "RMSE", + "ROW_COUNT", + "ROW_COUNT_CHANGE", + "R_SQUARED", + "SUM", + "TEXT_ALL_SPACES_COUNT", + "TEXT_ALL_SPACES_RATE", + "TEXT_ALL_SPACE_COUNT", + "TEXT_ALL_SPACE_RATE", + "TEXT_AU_ABN_RATE", + "TEXT_AU_MEDICARE_RATE", + "TEXT_AU_PHONE_RATE", + "TEXT_AU_POSTCODE_RATE", + "TEXT_AU_TFN_RATE", + "TEXT_CREDIT_CARD_RATE", + "TEXT_EMAIL_ADDRESS_RATE", + "TEXT_INT_RATE", + "TEXT_MAX_LENGTH", + "TEXT_MEAN_LENGTH", + "TEXT_MIN_LENGTH", + "TEXT_NOT_AU_ABN_COUNT", + "TEXT_NOT_AU_MEDICARE_COUNT", + "TEXT_NOT_AU_PHONE_COUNT", + "TEXT_NOT_AU_POSTCODE_COUNT", + "TEXT_NOT_AU_TFN_COUNT", + "TEXT_NOT_CREDIT_CARD_COUNT", + "TEXT_NOT_EMAIL_ADDRESS_COUNT", + "TEXT_NOT_INT_COUNT", + "TEXT_NOT_NUMBER_COUNT", + "TEXT_NOT_SSN_COUNT", + "TEXT_NOT_TIMESTAMP_COUNT", + "TEXT_NOT_US_PHONE_COUNT", + "TEXT_NOT_US_STATE_CODE_COUNT", + "TEXT_NOT_US_ZIP_CODE_COUNT", + "TEXT_NOT_UUID_COUNT", + "TEXT_NULL_KEYWORD_COUNT", + "TEXT_NULL_KEYWORD_RATE", + "TEXT_NUMBER_RATE", + "TEXT_SSN_RATE", + "TEXT_STD_LENGTH", + "TEXT_TIMESTAMP_RATE", + "TEXT_US_PHONE_RATE", + "TEXT_US_STATE_CODE_RATE", + "TEXT_US_ZIP_CODE_RATE", + "TEXT_UUID_RATE", + "TIME_SINCE_LAST_ROW_COUNT_CHANGE", + "TRUE_COUNT", + "TRUE_RATE", + "UNIQUE_COUNT", + "UNIQUE_RATE", + "UNIX_ZERO_COUNT", + "UNIX_ZERO_RATE", + "ZERO_COUNT", + "ZERO_RATE" + ] + }, + "custom_field_metric": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "alert_conditions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "threshold" + ], + "default": "threshold" + }, + "operator": { + "type": "string", + "enum": [ + "EQ", + "GT", + "GTE", + "LT", + "LTE", + "NEQ" + ] + }, + "threshold_value": { + "type": "number" + } + }, + "additionalProperties": false, + "required": [ + "operator", + "threshold_value" + ] + }, + "maxItems": 1 + }, + "filters": { + "type": "array", + "items": { + "type": "object", + "properties": { + "field": { + "type": "string" + }, + "operator": { + "type": "string", + "enum": [ + "EQ", + "GT", + "GTE", + "IS_NOT_NULL", + "IS_NULL", + "LT", + "LTE", + "NEQ" + ] + }, + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "field", + "operator" + ] + } + } + }, + "additionalProperties": false, + "required": [ + "schedule", + "metric_type", + "alert_conditions" + ] + } + }, + "table": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "warehouse": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "type": "string", + "maxLength": 512 + }, + "notes": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "priority": { + "oneOf": [ + { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] + }, + { + "type": "null" + } + ] + }, + "asset_selection": { + "type": "object", + "properties": { + "databases": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "schemas": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "tables": { + "oneOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "filters": { + "type": "array", + "items": {} + }, + "exclusions": { + "type": "array", + "items": {} + } + }, + "additionalProperties": false + }, + "audiences": { + "type": "array", + "items": { + "type": "string" + } + }, + "failure_audiences": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "domains": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "alert_conditions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "metric": {}, + "operator": {} + }, + "additionalProperties": false, + "required": [ + "metric" + ] + } + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, + { + "type": "null" + } + ] + }, + "enable_row_count_collection": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "enable_row_count_collection_limit": { + "oneOf": [ + { + "type": "integer", + "minimum": 0 + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "description", + "asset_selection" + ] + } + }, + "bulk_monitor": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "warehouse": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "type": "string", + "maxLength": 512 + }, + "notes": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "priority": { + "oneOf": [ + { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] + }, + { + "type": "null" + } + ] + }, + "monitor_type": { + "type": "string", + "enum": [ + "bulk_metric", + "bulk_pii" + ] + }, + "asset_selection": { + "type": "object", + "properties": { + "databases": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "schemas": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "tables": { + "oneOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "filters": { + "type": "array", + "items": {} + }, + "exclusions": { + "type": "array", + "items": {} + } + }, + "additionalProperties": false + }, + "alert_conditions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "metric": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "custom_metric": { + "oneOf": [ + { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "display_name": { + "type": "string" + }, + "sql_expression": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "display_name", + "sql_expression" + ] + }, + { + "type": "null" + } + ] + }, + "fields": { + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "type": "string", + "enum": [ + "noop", + "threshold" + ], + "default": "threshold" + }, + "operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AUTO", + "AUTO_HIGH", + "AUTO_LOW", + "EQ", + "GT", + "GTE", + "INSIDE_RANGE", + "LT", + "LTE", + "NEQ", + "NOOP", + "OUTSIDE_RANGE" + ] + }, + { + "type": "null" + } + ] + }, + "threshold_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "lower_threshold": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "upper_threshold": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "field_pattern": { + "oneOf": [ + { + "type": "object", + "properties": { + "operator": { + "type": "string", + "enum": [ + "CONTAINING", + "ENDING_WITH", + "MATCHING", + "STARTING_WITH" + ] + }, + "value": { + "type": "string" + }, + "case_sensitive": { + "type": "boolean" + }, + "field_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "BOOLEAN", + "DATE", + "NUMERIC", + "TEXT", + "TIME", + "TIME_OF_DAY" + ] + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "operator", + "value" + ] + }, + { + "type": "null" + } + ] + }, + "baseline_trailing_days": { + "oneOf": [ + { + "type": "integer", + "minimum": 1 + }, + { + "type": "null" + } + ] + }, + "baseline_start": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "baseline_end": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "num_bins": { + "oneOf": [ + { + "type": "integer", + "minimum": 2, + "maximum": 1000 + }, + { + "type": "null" + } + ] + }, + "id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + } + }, + "schedule": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dynamic", + "fixed", + "loose", + "manual" + ], + "default": "fixed" + }, + "dynamic_schedule_tables": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "dynamic_schedule_jobs": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "job_type": { + "type": "string", + "enum": [ + "AdfJob", + "AirflowDag", + "DatabricksJob", + "DbtJob" + ] + }, + "job_name": { + "type": "string" + }, + "project_name": { + "type": "string" + }, + "task_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mcon": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "job_type", + "job_name", + "project_name" + ] + } + }, + { + "type": "null" + } + ] + }, + "interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "interval_crontab": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "interval_crontab_day_operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + { + "type": "null" + } + ] + }, + "start_time": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timezone": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + "audiences": { + "type": "array", + "items": { + "type": "string" + } + }, + "failure_audiences": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "domains": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, + { + "type": "null" + } + ] + }, + "collection_lag_hours": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "aggregate_time_field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "aggregate_by": { + "oneOf": [ + { + "type": "string", + "enum": [ + "day", + "hour", + "month", + "week" + ] + }, + { + "type": "null" + } + ] + }, + "sampling_config": { + "oneOf": [ + { + "type": "object", + "properties": { + "percentage": {}, + "count": {} + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "auto_prune_enabled": { + "type": "boolean", + "default": false + }, + "lineage_narrowing_enabled": { + "type": "boolean", + "default": false + } + }, + "additionalProperties": false, + "required": [ + "description", + "monitor_type", + "asset_selection", + "alert_conditions", + "schedule" + ] + } + } + }, + "additionalProperties": false +} diff --git a/skills/README.md b/skills/README.md index 05bbf1c..de8e370 100644 --- a/skills/README.md +++ b/skills/README.md @@ -18,6 +18,7 @@ Skills are platform-agnostic instruction sets that tell an AI coding agent what | **[Storage Cost Analysis](storage-cost-analysis/)** | Identifies storage waste patterns (unread, zombie, dead-end tables) and recommends safe cleanup with cost estimates. | | **[Performance Diagnosis](performance-diagnosis/)** | Diagnoses slow pipelines and expensive queries across Airflow, dbt, and Databricks with tiered investigation. | | **[Remediation](remediation/)** | Investigates and remediates data quality alerts — runs TSA root cause analysis, discovers available tools, executes fixes (or escalates), and documents the resolution. | +| **[Manage MaC](manage-mac/)** | Author, edit, and validate Monitors-as-Code YAML files. Reads the published JSON Schema to ensure field correctness across all 14 monitor types. | | **[Tune Monitor](tune-monitor/)** | Analyzes a Monte Carlo metric monitor's alert history and recommends configuration changes to reduce noise — sensitivity, WHERE conditions, segment exclusions, schedule, and aggregation. | | **[Connection Auth Rules](connection-auth-rules/)** | Build a Connection Auth Rules configuration for a Monte Carlo connection type. Fetches live connector schemas and transform steps from the apollo-agent repo. | | **[Instrument Agent](instrument-agent/)** | Instruments a Python AI agent for Monte Carlo Agent Observability — detects AI libraries, installs the Monte Carlo OpenTelemetry SDK, sets up tracing, and verifies traces in Monte Carlo. Asks before editing. | diff --git a/skills/manage-mac/SKILL.md b/skills/manage-mac/SKILL.md new file mode 100644 index 0000000..d4fd4fe --- /dev/null +++ b/skills/manage-mac/SKILL.md @@ -0,0 +1,207 @@ +--- +name: manage-mac +description: Author, edit, and validate Monitors-as-Code YAML files. Reads the MaC schema to ensure correctness. Handles create, edit, and validate entry points for any of the 14 monitor types. +when_to_use: | + Invoke when the user has a MaC YAML file they want to create, edit, or validate. + Example triggers: "create a monitors YAML for this table", "add a metric monitor to my MaC file", + "validate my monitors.yaml before I apply it", "what's wrong with my MaC file". + Do NOT invoke when the user wants to discover what to monitor or generate monitors from scratch + via table exploration — use monitoring-advisor for that. The entry point here is always the file. +bucket: Monitoring +version: 1.0.0 +--- + +# Manage MaC: Monitors-as-Code YAML Authoring + +You are a Monitors-as-Code (MaC) YAML authoring agent. Your job is to help users create, edit, and +validate MaC YAML files that define Monte Carlo monitors. You work directly from the file and the +schema — not from table discovery. + +**Arguments:** $ARGUMENTS + +The MaC schema lives next to this skill file. **Use the Read tool** to access it: + +- Schema: `../../schemas/mac-schema.json` (relative to this file) + +--- + +## Entry point detection + +Determine which workflow applies based on the user's request: + +| User intent | Workflow | +|---|---| +| No existing file; wants monitors for a table or use case | **Create** | +| Has an existing file; wants to add, modify, or remove monitors | **Edit** | +| Has an existing file; wants to check it before applying | **Validate** | + +If the intent is ambiguous, ask: "Do you have an existing MaC YAML file, or should I create a new one?" + +--- + +## Prerequisites + +No MCP tools are required for file-only operations (create, edit, validate). The schema file is +the sole source of truth for field names, types, enums, and required fields. + +Monte Carlo MCP tools (`create_or_update_*_monitor` with `dry_run=True`) are available as an +optional cross-reference when the user wants to preview what the API would generate for a monitor +before deciding between file-based and live deployment. Use them only if explicitly requested. + +--- + +## Phase 0: Read the schema + +Before authoring or validating any YAML, read `../../schemas/mac-schema.json` using the Read tool. +The schema is JSON Schema Draft 7 and describes all valid monitor types, fields, types, enums, and +required fields. Never guess field names — always derive them from the schema. + +The top-level structure under `montecarlo:` contains these monitor type keys: + +- `field_health`, `dimension_tracking`, `json_schema`, `metric`, `metric_comparison` +- `custom_sql`, `validation`, `comparison`, `query_performance` +- `freshness`, `volume`, `field_quality`, `table`, `bulk_monitor` + +Each key maps to an array of monitor objects. The schema's `items` for each key defines what fields +are valid, which are required, and what enum values are accepted. + +--- + +## Create workflow + +Use this when the user has no existing file and wants monitors for a table or use case. + +### Step 1: Gather context + +Ask for any information not already provided: + +1. **Table(s):** fully qualified names (database.schema.table or equivalent) +2. **Monitor type(s):** what kind of monitoring — metric, freshness, validation, custom SQL, etc. + If the user is unsure, suggest the most common types for their use case. +3. **Namespace:** the MaC namespace to use with `montecarlo monitors apply --namespace ` +4. **Notification audiences:** optional; ask only if the user mentions alerting + +Do not ask about fields that the schema marks as optional unless the user brings them up. + +### Step 2: Author the YAML + +Generate a well-formed YAML file: + +1. Start with the yaml-language-server schema header comment: + ```yaml + # yaml-language-server: $schema=https://docs.getmontecarlo.com/mac/schema.json + ``` +2. Open with `montecarlo:` as the root key +3. Under `montecarlo:`, add each monitor type as a key mapping to a list +4. For each monitor object, include all required fields from the schema and only optional fields + that the user has specified or that materially improve the monitor +5. Use exact field names from the schema — no invented names, no camelCase variants + +### Step 3: Tell the user how to apply + +After presenting the YAML, give the apply command: + +``` +montecarlo monitors apply --namespace +``` + +If the user has not provided a namespace, prompt them for one before showing the command. + +--- + +## Edit workflow + +Use this when the user has an existing MaC file and wants to change it. + +### Step 1: Read the file + +Use the Read tool to load the user's file. If no path is provided, ask for it. + +### Step 2: Understand the requested change + +Identify what the user wants to do: + +- **Add** a monitor: determine the type, gather required fields, append to the correct type list +- **Modify** a monitor: locate the target monitor by name or table, apply the specified changes +- **Remove** a monitor: locate and delete the target monitor object + +For additions and modifications, cross-reference the schema to confirm field names and values are +valid. + +### Step 3: Apply the change and present the diff + +Show the user only what changed — either the before/after for a modified block or the new block +being added. Then write the updated file using the Edit tool. + +--- + +## Validate workflow + +Use this when the user wants to check a file before applying it. + +### Step 1: Read the file + +Use the Read tool to load the user's file. + +### Step 2: Check against the schema + +For each monitor in the file, validate: + +1. **Required fields present:** every field marked `required` in the schema items is present +2. **No unknown fields:** no field names that don't appear in the schema for that monitor type +3. **Enum values valid:** any field with an `enum` constraint uses one of the listed values +4. **Type correctness:** string fields are strings, integer fields are integers, etc. +5. **Top-level structure:** root key is `montecarlo:`, monitor type keys are one of the 14 valid types + +### Step 3: Report findings + +If the file is valid: + +> The file is valid. All monitors conform to the MaC schema. +> Apply with: `montecarlo monitors apply --namespace ` + +If the file has issues, report each one with: +- The monitor type and monitor name/index where the issue appears +- The specific problem (missing field, unknown field, invalid enum value, wrong type) +- The fix + +Example report format: + +``` +Validation issues found: + +1. metric[0] ("orders_freshness_check") + - Missing required field: `full_table_id` + - Fix: add `full_table_id: "database.schema.orders"` + +2. custom_sql[1] (unnamed) + - Unknown field: `sensivity` (did you mean `sensitivity`?) + - Fix: rename to `sensitivity` + +3. validation[0] ("null_check") + - Invalid enum value for `condition_operator`: "EQUALS" + - Valid values: [see schema for the full list] + - Fix: use one of the valid enum values +``` + +Do not stop at the first error — report all issues found in a single pass. + +--- + +## File format rules + +- Always include the `# yaml-language-server: $schema=...` comment as the first line +- Use 2-space indentation +- Quote string values that contain special characters or colons +- Do not add inline comments explaining field values + +--- + +## Graceful degradation + +If the schema file cannot be read, stop and tell the user: + +> Cannot read the MaC schema at `../../schemas/mac-schema.json`. Please verify the file exists +> and try again. + +Do not attempt to author or validate YAML without the schema. diff --git a/skills/monitoring-advisor/references/data-monitor-creation.md b/skills/monitoring-advisor/references/data-monitor-creation.md index 241261b..50550ad 100644 --- a/skills/monitoring-advisor/references/data-monitor-creation.md +++ b/skills/monitoring-advisor/references/data-monitor-creation.md @@ -204,6 +204,20 @@ If the user prefers to deploy via CLI/CI rather than the live tool call: --- +## Schema Validation + +Always add the following comment as the **first line** of any MaC YAML file you create or edit: + +```yaml +# yaml-language-server: $schema: https://docs.getmontecarlo.com/mac/schema.json +``` + +A local copy of the schema is available at `../../schemas/mac-schema.json` (relative to skill files). Use the Read tool to inspect it if you're uncertain whether a field name or value is valid for a given monitor type. + +Generated YAML must not include fields that don't appear in the schema for that monitor type. Unknown fields are silently ignored by the CLI but indicate a misconfiguration and may break future validation. + +--- + ## Available MCP Tools All tools are available via the `monte-carlo` MCP server. diff --git a/skills/tune-monitor/SKILL.md b/skills/tune-monitor/SKILL.md index 9540905..79edeb6 100644 --- a/skills/tune-monitor/SKILL.md +++ b/skills/tune-monitor/SKILL.md @@ -234,6 +234,7 @@ Phase 1.5. Each reference specifies the correct tool and constraints for that mo General rules for all types: 1. **Always preview first** — show the user what will change before applying. 2. **Get explicit confirmation** before applying any change. +3. **Validate the preview YAML against the schema** — before presenting the preview YAML to the user, check it against `../../schemas/mac-schema.json` (relative to this file). If any field in the YAML does not appear in the schema for the given monitor type, flag it and correct it. --- @@ -245,3 +246,4 @@ General rules for all types: - **Cite evidence.** Reference specific incident dates, segment values, and counts from the report. - **Degrade gracefully.** If troubleshooting runs are missing, note the limited context and reason from alert patterns alone. +- **Add `$schema` when saving YAML to a file.** If the user asks to save the MaC YAML to a file, add `# yaml-language-server: $schema: https://docs.getmontecarlo.com/mac/schema.json` as the first line of that file. From bcd0bf5a444f7bb669dcfd93794e13246a534322 Mon Sep 17 00:00:00 2001 From: wdeka Date: Wed, 20 May 2026 10:47:45 +0200 Subject: [PATCH 02/19] chore: bump version to 1.12.0 Co-Authored-By: Claude Sonnet 4.6 --- plugins/claude-code/.claude-plugin/plugin.json | 2 +- plugins/claude-code/CHANGELOG.md | 8 ++++++++ plugins/codex/.codex-plugin/plugin.json | 2 +- plugins/codex/CHANGELOG.md | 8 ++++++++ plugins/copilot/CHANGELOG.md | 8 ++++++++ plugins/copilot/plugin.json | 2 +- plugins/cursor/.cursor-plugin/plugin.json | 2 +- plugins/cursor/CHANGELOG.md | 8 ++++++++ plugins/opencode/CHANGELOG.md | 8 ++++++++ plugins/opencode/package.json | 2 +- 10 files changed, 45 insertions(+), 5 deletions(-) diff --git a/plugins/claude-code/.claude-plugin/plugin.json b/plugins/claude-code/.claude-plugin/plugin.json index dabbb42..24190ba 100644 --- a/plugins/claude-code/.claude-plugin/plugin.json +++ b/plugins/claude-code/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "mc-agent-toolkit", - "version": "1.11.1", + "version": "1.12.0", "description": "Monte Carlo Agent Toolkit — data observability for AI coding agents. Surfaces blast radius, active alerts, and monitor coverage gaps before you edit dbt SQL. Includes skills for incident response, proactive monitoring, storage cost analysis, and push ingestion. Hooks enforce data-safety checks automatically as you work.", "author": { "name": "Monte Carlo", diff --git a/plugins/claude-code/CHANGELOG.md b/plugins/claude-code/CHANGELOG.md index 4f65a5a..546e3c8 100644 --- a/plugins/claude-code/CHANGELOG.md +++ b/plugins/claude-code/CHANGELOG.md @@ -5,6 +5,14 @@ All notable changes to the Monte Carlo Agent Toolkit plugin for Claude Code will Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). This project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.12.0] - 2026-05-20 + +### Added + +- New `/manage-mac` skill: author, edit, and validate Monitors-as-Code YAML files using the published JSON Schema — ensures field correctness across all 14 monitor types +- Published MaC JSON Schema (`schemas/mac-schema.json`) bundled locally for offline agent use +- Schema validation gates injected into `monitoring-advisor` and `tune-monitor` — agents now validate generated YAML against the schema before presenting it to the user + ## [1.11.1] - 2026-05-13 ### Added diff --git a/plugins/codex/.codex-plugin/plugin.json b/plugins/codex/.codex-plugin/plugin.json index 677794e..a8bdf7e 100644 --- a/plugins/codex/.codex-plugin/plugin.json +++ b/plugins/codex/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "mc-agent-toolkit", - "version": "1.11.1", + "version": "1.12.0", "description": "Monte Carlo Agent Toolkit — data observability skills and enforcement hooks for AI coding agents.", "author": { "name": "Monte Carlo", diff --git a/plugins/codex/CHANGELOG.md b/plugins/codex/CHANGELOG.md index 482437b..ee0d429 100644 --- a/plugins/codex/CHANGELOG.md +++ b/plugins/codex/CHANGELOG.md @@ -5,6 +5,14 @@ All notable changes to the Monte Carlo Agent Toolkit plugin for Codex will be do Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). This project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.12.0] - 2026-05-20 + +### Added + +- New `/manage-mac` skill: author, edit, and validate Monitors-as-Code YAML files using the published JSON Schema — ensures field correctness across all 14 monitor types +- Published MaC JSON Schema (`schemas/mac-schema.json`) bundled locally for offline agent use +- Schema validation gates injected into `monitoring-advisor` and `tune-monitor` — agents now validate generated YAML against the schema before presenting it to the user + ## [1.11.1] - 2026-05-13 ### Added diff --git a/plugins/copilot/CHANGELOG.md b/plugins/copilot/CHANGELOG.md index 233e4fb..7b3dac1 100644 --- a/plugins/copilot/CHANGELOG.md +++ b/plugins/copilot/CHANGELOG.md @@ -5,6 +5,14 @@ All notable changes to the Monte Carlo Agent Toolkit plugin for Copilot CLI will Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). This project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.12.0] - 2026-05-20 + +### Added + +- New `/manage-mac` skill: author, edit, and validate Monitors-as-Code YAML files using the published JSON Schema — ensures field correctness across all 14 monitor types +- Published MaC JSON Schema (`schemas/mac-schema.json`) bundled locally for offline agent use +- Schema validation gates injected into `monitoring-advisor` and `tune-monitor` — agents now validate generated YAML against the schema before presenting it to the user + ## [1.11.1] - 2026-05-13 ### Added diff --git a/plugins/copilot/plugin.json b/plugins/copilot/plugin.json index d7cdeb8..f93e020 100644 --- a/plugins/copilot/plugin.json +++ b/plugins/copilot/plugin.json @@ -1,6 +1,6 @@ { "name": "mc-agent-toolkit", - "version": "1.11.1", + "version": "1.12.0", "description": "Monte Carlo Agent Toolkit — data observability for AI coding agents.", "author": { "name": "Monte Carlo", diff --git a/plugins/cursor/.cursor-plugin/plugin.json b/plugins/cursor/.cursor-plugin/plugin.json index 955554a..26ac608 100644 --- a/plugins/cursor/.cursor-plugin/plugin.json +++ b/plugins/cursor/.cursor-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "mc-agent-toolkit", - "version": "1.11.1", + "version": "1.12.0", "description": "Monte Carlo Agent Toolkit — data observability skills and enforcement hooks for AI coding agents.", "author": { "name": "Monte Carlo", diff --git a/plugins/cursor/CHANGELOG.md b/plugins/cursor/CHANGELOG.md index 5c5cc58..675f1bb 100644 --- a/plugins/cursor/CHANGELOG.md +++ b/plugins/cursor/CHANGELOG.md @@ -5,6 +5,14 @@ All notable changes to the Monte Carlo Agent Toolkit plugin for Cursor will be d Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). This project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.12.0] - 2026-05-20 + +### Added + +- New `/manage-mac` skill: author, edit, and validate Monitors-as-Code YAML files using the published JSON Schema — ensures field correctness across all 14 monitor types +- Published MaC JSON Schema (`schemas/mac-schema.json`) bundled locally for offline agent use +- Schema validation gates injected into `monitoring-advisor` and `tune-monitor` — agents now validate generated YAML against the schema before presenting it to the user + ## [1.11.1] - 2026-05-13 ### Added diff --git a/plugins/opencode/CHANGELOG.md b/plugins/opencode/CHANGELOG.md index f51a1c6..8e86751 100644 --- a/plugins/opencode/CHANGELOG.md +++ b/plugins/opencode/CHANGELOG.md @@ -5,6 +5,14 @@ All notable changes to the Monte Carlo Agent Toolkit plugin for OpenCode will be Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). This project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.12.0] - 2026-05-20 + +### Added + +- New `/manage-mac` skill: author, edit, and validate Monitors-as-Code YAML files using the published JSON Schema — ensures field correctness across all 14 monitor types +- Published MaC JSON Schema (`schemas/mac-schema.json`) bundled locally for offline agent use +- Schema validation gates injected into `monitoring-advisor` and `tune-monitor` — agents now validate generated YAML against the schema before presenting it to the user + ## [1.11.1] - 2026-05-13 ### Added diff --git a/plugins/opencode/package.json b/plugins/opencode/package.json index b5f39d6..58438cf 100644 --- a/plugins/opencode/package.json +++ b/plugins/opencode/package.json @@ -1,6 +1,6 @@ { "name": "@montecarlo/mc-agent-toolkit", - "version": "1.11.1", + "version": "1.12.0", "description": "Monte Carlo Agent Toolkit — data observability skills and enforcement hooks for AI coding agents.", "type": "module", "main": "src/index.ts", From e3f23b110c39c9bab088b6ef6d7309f68862739d Mon Sep 17 00:00:00 2001 From: wdeka Date: Wed, 20 May 2026 10:49:19 +0200 Subject: [PATCH 03/19] fix: manage-mac name prefix and yaml-language-server schema separator Co-Authored-By: Claude Sonnet 4.6 --- skills/manage-mac/SKILL.md | 2 +- skills/monitoring-advisor/references/data-monitor-creation.md | 2 +- skills/tune-monitor/SKILL.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/skills/manage-mac/SKILL.md b/skills/manage-mac/SKILL.md index d4fd4fe..17bd561 100644 --- a/skills/manage-mac/SKILL.md +++ b/skills/manage-mac/SKILL.md @@ -1,5 +1,5 @@ --- -name: manage-mac +name: monte-carlo-manage-mac description: Author, edit, and validate Monitors-as-Code YAML files. Reads the MaC schema to ensure correctness. Handles create, edit, and validate entry points for any of the 14 monitor types. when_to_use: | Invoke when the user has a MaC YAML file they want to create, edit, or validate. diff --git a/skills/monitoring-advisor/references/data-monitor-creation.md b/skills/monitoring-advisor/references/data-monitor-creation.md index 50550ad..abe9701 100644 --- a/skills/monitoring-advisor/references/data-monitor-creation.md +++ b/skills/monitoring-advisor/references/data-monitor-creation.md @@ -209,7 +209,7 @@ If the user prefers to deploy via CLI/CI rather than the live tool call: Always add the following comment as the **first line** of any MaC YAML file you create or edit: ```yaml -# yaml-language-server: $schema: https://docs.getmontecarlo.com/mac/schema.json +# yaml-language-server: $schema=https://docs.getmontecarlo.com/mac/schema.json ``` A local copy of the schema is available at `../../schemas/mac-schema.json` (relative to skill files). Use the Read tool to inspect it if you're uncertain whether a field name or value is valid for a given monitor type. diff --git a/skills/tune-monitor/SKILL.md b/skills/tune-monitor/SKILL.md index 79edeb6..4eb0893 100644 --- a/skills/tune-monitor/SKILL.md +++ b/skills/tune-monitor/SKILL.md @@ -246,4 +246,4 @@ General rules for all types: - **Cite evidence.** Reference specific incident dates, segment values, and counts from the report. - **Degrade gracefully.** If troubleshooting runs are missing, note the limited context and reason from alert patterns alone. -- **Add `$schema` when saving YAML to a file.** If the user asks to save the MaC YAML to a file, add `# yaml-language-server: $schema: https://docs.getmontecarlo.com/mac/schema.json` as the first line of that file. +- **Add `$schema` when saving YAML to a file.** If the user asks to save the MaC YAML to a file, add `# yaml-language-server: $schema=https://docs.getmontecarlo.com/mac/schema.json` as the first line of that file. From 448c451907875cd2497a3b217cb310202f709f49 Mon Sep 17 00:00:00 2001 From: wdeka Date: Wed, 20 May 2026 11:51:21 +0200 Subject: [PATCH 04/19] feat: update bundled MaC schema with deprecated aliases and schema scope disclaimer - Regenerate mac-schema.json: deprecated field aliases (resource, comparisons, notify_rule_run_failure, domain, domain_uuids) marked with deprecated: true, root additionalProperties removed for dbt YAML co-location compatibility - Add schema scope disclaimer to manage-mac, monitoring-advisor, and tune-monitor skills: schema validates structural correctness only, not cross-field semantics Co-Authored-By: Claude Sonnet 4.6 --- schemas/mac-schema.json | 15851 +++++++++------- skills/manage-mac/SKILL.md | 2 + .../references/data-monitor-creation.md | 2 + skills/tune-monitor/SKILL.md | 2 +- 4 files changed, 8914 insertions(+), 6943 deletions(-) diff --git a/schemas/mac-schema.json b/schemas/mac-schema.json index 28f4d21..67ce190 100644 --- a/schemas/mac-schema.json +++ b/schemas/mac-schema.json @@ -1,1080 +1,1074 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "title": "Monte Carlo Monitors-as-Code", - "description": "Schema for montecarlo.yml / monitors.yml MaC configuration files.", + "description": "Schema for monitors.yml MaC configuration files. Validates field names and types only \u2014 cross-field semantic constraints (e.g. required field combinations, mutually exclusive options) are NOT checked here; those are enforced at apply time by the Monte Carlo backend.", "type": "object", "properties": { - "version": { - "type": "integer", - "default": 1 + "namespace": { + "type": "string" }, - "field_health": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" + "montecarlo": { + "type": "object", + "properties": { + "field_health": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" + "warehouse": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "name": { - "oneOf": [ - { - "type": "string" + "name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "table": { - "oneOf": [ - { - "type": "string" + "table": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "data_source": { - "oneOf": [ - { - "type": "object", - "properties": { - "table": { - "oneOf": [ - { - "type": "string" + "data_source": { + "oneOf": [ + { + "type": "object", + "properties": { + "table": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "sql": { - "oneOf": [ - { - "type": "string" + "sql": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "transforms": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "alias": { - "oneOf": [ - { - "type": "string" + "transforms": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "alias": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "prompt": { - "oneOf": [ - { - "type": "string" + "prompt": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "categories": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "label": { - "type": "string" - }, - "description": { - "oneOf": [ - { + "categories": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "label": { "type": "string" }, - { - "type": "null" - } - ] - }, - "examples": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } + "description": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" + "examples": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] } + }, + "additionalProperties": false, + "required": [ + "label" ] } }, - "additionalProperties": false, - "required": [ - "label" - ] - } + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "model_connection_id": { - "oneOf": [ - { - "type": "string" + "model_connection_id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "output_type": { - "oneOf": [ - { - "type": "string" + "output_type": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "sql_expression": { - "oneOf": [ - { - "type": "string" + "sql_expression": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "field_config_list": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": {}, - "count": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "field": { - "oneOf": [ - { - "type": "string" + "field_config_list": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": {}, + "count": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] }, - { - "type": "null" + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] } + }, + "additionalProperties": false, + "required": [ + "type" ] } }, - "additionalProperties": false, - "required": [ - "type" - ] - } + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "model_name": { - "oneOf": [ - { - "type": "string" + "model_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "field_value_range": { - "oneOf": [ - { - "type": "object", - "properties": { - "lower_bound": {}, - "upper_bound": {} - }, - "additionalProperties": false + "field_value_range": { + "oneOf": [ + { + "type": "object", + "properties": { + "lower_bound": {}, + "upper_bound": {} + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "function": { - "type": "string" - }, - "field": { - "oneOf": [ - { + "function": { "type": "string" }, - { - "type": "null" - } - ] - }, - "id": { - "oneOf": [ - { - "type": "string" + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" + "id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] } + }, + "additionalProperties": false, + "required": [ + "function" ] } }, - "additionalProperties": false, - "required": [ - "function" - ] - } - }, - { - "type": "null" + { + "type": "null" + } + ] } - ] + }, + "additionalProperties": false + }, + { + "type": "null" } - }, - "additionalProperties": false + ] }, - { - "type": "null" - } - ] - }, - "timestamp_field": { - "oneOf": [ - { - "type": "string" + "timestamp_field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "timestamp_field_expression": { - "oneOf": [ - { - "type": "string" + "timestamp_field_expression": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "where_condition": { - "oneOf": [ - { - "type": "string" + "where_condition": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "lookback_days": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "aggregation_time_interval": { - "oneOf": [ - { - "type": "string", - "enum": [ - "day", - "hour", - "month", - "week" + "lookback_days": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - }, - "schedule": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { + "aggregation_time_interval": { + "oneOf": [ + { "type": "string", "enum": [ - "dynamic", - "fixed", - "loose", - "manual" - ], - "default": "fixed" - }, - "dynamic_schedule_tables": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } + "day", + "hour", + "month", + "week" ] }, - "dynamic_schedule_jobs": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "job_type": { - "type": "string", - "enum": [ - "AdfJob", - "AirflowDag", - "DatabricksJob", - "DbtJob" - ] - }, - "job_name": { - "type": "string" - }, - "project_name": { + { + "type": "null" + } + ] + }, + "schedule": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dynamic", + "fixed", + "loose", + "manual" + ], + "default": "fixed" + }, + "dynamic_schedule_tables": { + "oneOf": [ + { + "type": "array", + "items": { "type": "string" - }, - "task_name": { - "oneOf": [ - { + } + }, + { + "type": "null" + } + ] + }, + "dynamic_schedule_jobs": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "job_type": { + "type": "string", + "enum": [ + "AdfJob", + "AirflowDag", + "DatabricksJob", + "DbtJob" + ] + }, + "job_name": { "type": "string" }, - { - "type": "null" - } - ] - }, - "mcon": { - "oneOf": [ - { + "project_name": { "type": "string" }, - { - "type": "null" + "task_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mcon": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] } + }, + "additionalProperties": false, + "required": [ + "job_type", + "job_name", + "project_name" ] } }, - "additionalProperties": false, - "required": [ - "job_type", - "job_name", - "project_name" - ] - } + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "interval_minutes": { - "oneOf": [ - { - "type": "integer" + "interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "interval_crontab": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } + "interval_crontab": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "interval_crontab_day_operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AND", - "OR" + "interval_crontab_day_operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - }, - "start_time": { - "oneOf": [ - { - "type": "string" + "start_time": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "timezone": { - "oneOf": [ - { - "type": "string" + "timezone": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" + "min_interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] } - ] + }, + "additionalProperties": false + }, + { + "type": "null" } - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "notes": { - "oneOf": [ - { - "type": "string" + ] }, - { - "type": "null" - } - ] - }, - "description": { - "oneOf": [ - { - "type": "string", - "maxLength": 512 + "notes": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "labels": { - "type": "array", - "items": { - "type": "string" - } - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" + "description": { + "oneOf": [ + { + "type": "string", + "maxLength": 512 + }, + { + "type": "null" + } + ] + }, + "labels": { + "type": "array", + "items": { + "type": "string" } }, - { - "type": "null" - } - ] - }, - "severity": { - "oneOf": [ - { - "type": "string" + "audiences": { + "type": "array", + "items": { + "type": "string" + } }, - { - "type": "null" - } - ] - }, - "priority": { - "oneOf": [ - { - "type": "string", - "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" + "failure_audiences": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - }, - "connection_name": { - "oneOf": [ - { - "type": "string" + "notify_run_failure": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { + "severity": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "priority": { + "oneOf": [ + { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] + }, + { + "type": "null" + } + ] + }, + "connection_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "disable_look_back_bootstrap": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "skip_reset": { + "type": "boolean" + }, + "fail_on_reset": { + "type": "boolean" + }, + "select_expressions": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object" + } + }, + { + "type": "null" + } + ] + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { "type": "string" }, - { - "type": "null" + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] } + }, + "additionalProperties": false, + "required": [ + "name" ] } }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } + "domains": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "fields": { - "type": "array", - "items": { - "type": "string" - } - }, - "sensitivity_level": { - "oneOf": [ - { - "type": "string", - "enum": [ - "high", - "low", - "medium" + "is_draft": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - }, - "use_important_fields": { - "type": "boolean" - }, - "segmented_expressions": { - "oneOf": [ - { + "fields": { "type": "array", "items": { "type": "string" } }, - { - "type": "null" - } - ] - }, - "segmentation_type": { - "oneOf": [ - { - "type": "string", - "enum": [ - "custom_sql_expression", - "field" + "sensitivity_level": { + "oneOf": [ + { + "type": "string", + "enum": [ + "high", + "low", + "medium" + ] + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - }, - "use_partition_clause": { - "type": "boolean" - }, - "selected_metrics": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } + "use_important_fields": { + "type": "boolean" }, - { - "type": "null" - } - ] - }, - "alert_conditions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "metric": { - "oneOf": [ - { + "segmented_expressions": { + "oneOf": [ + { + "type": "array", + "items": { "type": "string" - }, - { - "type": "null" } - ] - }, - "custom_metric": { - "oneOf": [ - { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "display_name": { + }, + { + "type": "null" + } + ] + }, + "segmentation_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "custom_sql_expression", + "field" + ] + }, + { + "type": "null" + } + ] + }, + "use_partition_clause": { + "type": "boolean" + }, + "selected_metrics": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "alert_conditions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "metric": { + "oneOf": [ + { "type": "string" }, - "sql_expression": { - "type": "string" + { + "type": "null" } - }, - "additionalProperties": false, - "required": [ - "display_name", - "sql_expression" ] }, - { - "type": "null" - } - ] - }, - "fields": { - "type": "array", - "items": { - "type": "string" - } - }, - "type": { - "type": "string", - "enum": [ - "noop", - "threshold" - ], - "default": "threshold" - }, - "operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AUTO", - "AUTO_HIGH", - "AUTO_LOW", - "EQ", - "GT", - "GTE", - "INSIDE_RANGE", - "LT", - "LTE", - "NEQ", - "NOOP", - "OUTSIDE_RANGE" - ] - }, - { - "type": "null" - } - ] - }, - "threshold_value": { - "oneOf": [ - { - "type": "number" + "custom_metric": { + "oneOf": [ + { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "display_name": { + "type": "string" + }, + "sql_expression": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "display_name", + "sql_expression" + ] + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "lower_threshold": { - "oneOf": [ - { - "type": "number" + "fields": { + "type": "array", + "items": { + "type": "string" + } }, - { - "type": "null" - } - ] - }, - "upper_threshold": { - "oneOf": [ - { - "type": "number" + "type": { + "type": "string", + "enum": [ + "noop", + "threshold" + ], + "default": "threshold" }, - { - "type": "null" - } - ] - }, - "field_pattern": { - "oneOf": [ - { - "type": "object", - "properties": { - "operator": { + "operator": { + "oneOf": [ + { "type": "string", "enum": [ - "CONTAINING", - "ENDING_WITH", - "MATCHING", - "STARTING_WITH" + "AUTO", + "AUTO_HIGH", + "AUTO_LOW", + "EQ", + "GT", + "GTE", + "INSIDE_RANGE", + "LT", + "LTE", + "NEQ", + "NOOP", + "OUTSIDE_RANGE" ] }, - "value": { - "type": "string" + { + "type": "null" + } + ] + }, + "threshold_value": { + "oneOf": [ + { + "type": "number" }, - "case_sensitive": { - "type": "boolean" + { + "type": "null" + } + ] + }, + "lower_threshold": { + "oneOf": [ + { + "type": "number" }, - "field_type": { - "oneOf": [ - { + { + "type": "null" + } + ] + }, + "upper_threshold": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "field_pattern": { + "oneOf": [ + { + "type": "object", + "properties": { + "operator": { "type": "string", "enum": [ - "BOOLEAN", - "DATE", - "NUMERIC", - "TEXT", - "TIME", - "TIME_OF_DAY" + "CONTAINING", + "ENDING_WITH", + "MATCHING", + "STARTING_WITH" ] }, - { - "type": "null" + "value": { + "type": "string" + }, + "case_sensitive": { + "type": "boolean" + }, + "field_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "BOOLEAN", + "DATE", + "NUMERIC", + "TEXT", + "TIME", + "TIME_OF_DAY" + ] + }, + { + "type": "null" + } + ] } + }, + "additionalProperties": false, + "required": [ + "operator", + "value" ] + }, + { + "type": "null" } - }, - "additionalProperties": false, - "required": [ - "operator", - "value" ] }, - { - "type": "null" - } - ] - }, - "baseline_trailing_days": { - "oneOf": [ - { - "type": "integer", - "minimum": 1 - }, - { - "type": "null" - } - ] - }, - "baseline_start": { - "oneOf": [ - { - "type": "string" + "baseline_trailing_days": { + "oneOf": [ + { + "type": "integer", + "minimum": 1 + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "baseline_end": { - "oneOf": [ - { - "type": "string" + "baseline_start": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "num_bins": { - "oneOf": [ - { - "type": "integer", - "minimum": 2, - "maximum": 1000 - }, - { - "type": "null" - } - ] - }, - "id": { - "oneOf": [ - { - "type": "string" + "baseline_end": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "num_bins": { + "oneOf": [ + { + "type": "integer", + "minimum": 2, + "maximum": 1000 + }, + { + "type": "null" + } + ] }, - { - "type": "null" + "id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] } - ] + }, + "additionalProperties": false } }, - "additionalProperties": false - } - }, - "min_segment_size": { - "oneOf": [ - { - "type": "integer" + "min_segment_size": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "high_segment_count": { - "type": "boolean" - } - }, - "additionalProperties": false - } - }, - "dimension_tracking": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" + "unnest_fields": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" + "high_segment_count": { + "type": "boolean" }, - { - "type": "null" - } - ] - }, - "name": { - "oneOf": [ - { - "type": "string" + "resource": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `warehouse` instead." }, - { - "type": "null" - } - ] - }, - "table": { - "type": "string" - }, - "data_source": { - "oneOf": [ - { - "type": "object", - "properties": { - "table": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] + "notify_rule_run_failure": { + "oneOf": [ + { + "type": "boolean" }, - "sql": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `notify_run_failure` instead." + }, + "domain_uuids": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } }, - "transforms": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "alias": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "prompt": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "categories": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "label": { - "type": "string" - }, - "description": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "examples": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "label" - ] - } - }, - { - "type": "null" - } - ] - }, - "model_connection_id": { + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `domains` instead." + }, + "comparisons": { + "type": "array", + "items": { + "type": "object", + "properties": { + "metric": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "custom_metric": { + "oneOf": [ + { + "type": "object", + "properties": { + "uuid": { "oneOf": [ { "type": "string" @@ -1084,108 +1078,124 @@ } ] }, - "output_type": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] + "display_name": { + "type": "string" }, "sql_expression": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "field_config_list": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": {}, - "count": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - } - }, - { - "type": "null" - } - ] - }, - "model_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "field_value_range": { - "oneOf": [ - { - "type": "object", - "properties": { - "lower_bound": {}, - "upper_bound": {} - }, - "additionalProperties": false - }, - { - "type": "null" - } + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "display_name", + "sql_expression" + ] + }, + { + "type": "null" + } + ] + }, + "fields": { + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "type": "string", + "enum": [ + "noop", + "threshold" + ], + "default": "threshold" + }, + "operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AUTO", + "AUTO_HIGH", + "AUTO_LOW", + "EQ", + "GT", + "GTE", + "INSIDE_RANGE", + "LT", + "LTE", + "NEQ", + "NOOP", + "OUTSIDE_RANGE" + ] + }, + { + "type": "null" + } + ] + }, + "threshold_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "lower_threshold": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "upper_threshold": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "field_pattern": { + "oneOf": [ + { + "type": "object", + "properties": { + "operator": { + "type": "string", + "enum": [ + "CONTAINING", + "ENDING_WITH", + "MATCHING", + "STARTING_WITH" ] }, - "function": { + "value": { "type": "string" }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] + "case_sensitive": { + "type": "boolean" }, - "id": { + "field_type": { "oneOf": [ { - "type": "string" + "type": "string", + "enum": [ + "BOOLEAN", + "DATE", + "NUMERIC", + "TEXT", + "TIME", + "TIME_OF_DAY" + ] }, { "type": "null" @@ -1195,82 +1205,4723 @@ }, "additionalProperties": false, "required": [ - "function" + "operator", + "value" ] + }, + { + "type": "null" } - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "timestamp_field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "timestamp_field_expression": { - "oneOf": [ - { + ] + }, + "baseline_trailing_days": { + "oneOf": [ + { + "type": "integer", + "minimum": 1 + }, + { + "type": "null" + } + ] + }, + "baseline_start": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "baseline_end": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "num_bins": { + "oneOf": [ + { + "type": "integer", + "minimum": 2, + "maximum": 1000 + }, + { + "type": "null" + } + ] + }, + "id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + "deprecated": true, + "description": "Deprecated: use `alert_conditions` instead." + } + }, + "additionalProperties": false + } + }, + "dimension_tracking": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "warehouse": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "table": { "type": "string" }, - { - "type": "null" - } - ] - }, - "where_condition": { - "oneOf": [ - { - "type": "string" + "data_source": { + "oneOf": [ + { + "type": "object", + "properties": { + "table": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sql": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "transforms": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "alias": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "prompt": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "categories": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "description": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "examples": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "label" + ] + } + }, + { + "type": "null" + } + ] + }, + "model_connection_id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "output_type": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sql_expression": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "field_config_list": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": {}, + "count": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "type" + ] + } + }, + { + "type": "null" + } + ] + }, + "model_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "field_value_range": { + "oneOf": [ + { + "type": "object", + "properties": { + "lower_bound": {}, + "upper_bound": {} + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "function": { + "type": "string" + }, + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "function" + ] + } + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "timestamp_field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timestamp_field_expression": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "where_condition": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "lookback_days": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "aggregation_time_interval": { + "oneOf": [ + { + "type": "string", + "enum": [ + "day", + "hour", + "month", + "week" + ] + }, + { + "type": "null" + } + ] + }, + "schedule": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dynamic", + "fixed", + "loose", + "manual" + ], + "default": "fixed" + }, + "dynamic_schedule_tables": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "dynamic_schedule_jobs": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "job_type": { + "type": "string", + "enum": [ + "AdfJob", + "AirflowDag", + "DatabricksJob", + "DbtJob" + ] + }, + "job_name": { + "type": "string" + }, + "project_name": { + "type": "string" + }, + "task_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mcon": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "job_type", + "job_name", + "project_name" + ] + } + }, + { + "type": "null" + } + ] + }, + "interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "interval_crontab": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "interval_crontab_day_operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + { + "type": "null" + } + ] + }, + "start_time": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timezone": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "min_interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "notes": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "oneOf": [ + { + "type": "string", + "maxLength": 512 + }, + { + "type": "null" + } + ] + }, + "labels": { + "type": "array", + "items": { + "type": "string" + } + }, + "audiences": { + "type": "array", + "items": { + "type": "string" + } + }, + "failure_audiences": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "notify_run_failure": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "severity": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "priority": { + "oneOf": [ + { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] + }, + { + "type": "null" + } + ] + }, + "connection_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "disable_look_back_bootstrap": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "skip_reset": { + "type": "boolean" + }, + "fail_on_reset": { + "type": "boolean" + }, + "select_expressions": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object" + } + }, + { + "type": "null" + } + ] + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, + { + "type": "null" + } + ] + }, + "domains": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "is_draft": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "field": { + "type": "string" + }, + "use_partition_clause": { + "type": "boolean" + }, + "unnest_field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "resource": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `warehouse` instead." + }, + "notify_rule_run_failure": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `notify_run_failure` instead." + }, + "domain_uuids": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `domains` instead." + } + }, + "additionalProperties": false, + "required": [ + "table", + "field" + ] + } + }, + "json_schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "warehouse": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "table": { + "type": "string" + }, + "data_source": { + "oneOf": [ + { + "type": "object", + "properties": { + "table": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sql": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "transforms": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "alias": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "prompt": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "categories": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "description": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "examples": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "label" + ] + } + }, + { + "type": "null" + } + ] + }, + "model_connection_id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "output_type": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sql_expression": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "field_config_list": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": {}, + "count": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "type" + ] + } + }, + { + "type": "null" + } + ] + }, + "model_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "field_value_range": { + "oneOf": [ + { + "type": "object", + "properties": { + "lower_bound": {}, + "upper_bound": {} + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "function": { + "type": "string" + }, + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "function" + ] + } + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "timestamp_field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timestamp_field_expression": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "where_condition": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "lookback_days": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "aggregation_time_interval": { + "oneOf": [ + { + "type": "string", + "enum": [ + "day", + "hour", + "month", + "week" + ] + }, + { + "type": "null" + } + ] + }, + "schedule": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dynamic", + "fixed", + "loose", + "manual" + ], + "default": "fixed" + }, + "dynamic_schedule_tables": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "dynamic_schedule_jobs": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "job_type": { + "type": "string", + "enum": [ + "AdfJob", + "AirflowDag", + "DatabricksJob", + "DbtJob" + ] + }, + "job_name": { + "type": "string" + }, + "project_name": { + "type": "string" + }, + "task_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mcon": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "job_type", + "job_name", + "project_name" + ] + } + }, + { + "type": "null" + } + ] + }, + "interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "interval_crontab": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "interval_crontab_day_operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + { + "type": "null" + } + ] + }, + "start_time": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timezone": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "min_interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "notes": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "oneOf": [ + { + "type": "string", + "maxLength": 512 + }, + { + "type": "null" + } + ] + }, + "labels": { + "type": "array", + "items": { + "type": "string" + } + }, + "audiences": { + "type": "array", + "items": { + "type": "string" + } + }, + "failure_audiences": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "notify_run_failure": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "severity": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "priority": { + "oneOf": [ + { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] + }, + { + "type": "null" + } + ] + }, + "connection_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "disable_look_back_bootstrap": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "skip_reset": { + "type": "boolean" + }, + "fail_on_reset": { + "type": "boolean" + }, + "select_expressions": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object" + } + }, + { + "type": "null" + } + ] + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, + { + "type": "null" + } + ] + }, + "domains": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "is_draft": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "field": { + "type": "string" + }, + "unnest_field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "resource": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `warehouse` instead." + }, + "notify_rule_run_failure": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `notify_run_failure` instead." + }, + "domain_uuids": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `domains` instead." + } + }, + "additionalProperties": false, + "required": [ + "table", + "field" + ] + } + }, + "metric": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "warehouse": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "type": "string" + }, + "connection_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timeout": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "data_source": { + "type": "object", + "properties": { + "table": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sql": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "transforms": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "alias": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "prompt": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "categories": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "description": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "examples": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "label" + ] + } + }, + { + "type": "null" + } + ] + }, + "model_connection_id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "output_type": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sql_expression": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "field_config_list": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": {}, + "count": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "type" + ] + } + }, + { + "type": "null" + } + ] + }, + "model_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "field_value_range": { + "oneOf": [ + { + "type": "object", + "properties": { + "lower_bound": {}, + "upper_bound": {} + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "function": { + "type": "string" + }, + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "function" + ] + } + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + "where_condition": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "use_partition_clause": { + "type": "boolean" + }, + "aggregate_time_field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "aggregate_time_sql": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "aggregate_timezone": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "aggregate_by": { + "oneOf": [ + { + "type": "string", + "enum": [ + "day", + "hour", + "month", + "week" + ] + }, + { + "type": "null" + } + ] + }, + "collection_lag": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "high_segment_count": { + "type": "boolean" + }, + "segment_fields": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "segment_sql": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "alert_conditions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "metric": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "custom_metric": { + "oneOf": [ + { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "display_name": { + "type": "string" + }, + "sql_expression": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "display_name", + "sql_expression" + ] + }, + { + "type": "null" + } + ] + }, + "fields": { + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "type": "string", + "enum": [ + "noop", + "threshold" + ], + "default": "threshold" + }, + "operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AUTO", + "AUTO_HIGH", + "AUTO_LOW", + "EQ", + "GT", + "GTE", + "INSIDE_RANGE", + "LT", + "LTE", + "NEQ", + "NOOP", + "OUTSIDE_RANGE" + ] + }, + { + "type": "null" + } + ] + }, + "threshold_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "lower_threshold": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "upper_threshold": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "field_pattern": { + "oneOf": [ + { + "type": "object", + "properties": { + "operator": { + "type": "string", + "enum": [ + "CONTAINING", + "ENDING_WITH", + "MATCHING", + "STARTING_WITH" + ] + }, + "value": { + "type": "string" + }, + "case_sensitive": { + "type": "boolean" + }, + "field_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "BOOLEAN", + "DATE", + "NUMERIC", + "TEXT", + "TIME", + "TIME_OF_DAY" + ] + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "operator", + "value" + ] + }, + { + "type": "null" + } + ] + }, + "baseline_trailing_days": { + "oneOf": [ + { + "type": "integer", + "minimum": 1 + }, + { + "type": "null" + } + ] + }, + "baseline_start": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "baseline_end": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "num_bins": { + "oneOf": [ + { + "type": "integer", + "minimum": 2, + "maximum": 1000 + }, + { + "type": "null" + } + ] + }, + "id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + } + }, + "sensitivity": { + "oneOf": [ + { + "type": "string", + "enum": [ + "high", + "low", + "medium" + ] + }, + { + "type": "null" + } + ] + }, + "schedule": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dynamic", + "fixed", + "loose", + "manual" + ], + "default": "fixed" + }, + "dynamic_schedule_tables": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "dynamic_schedule_jobs": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "job_type": { + "type": "string", + "enum": [ + "AdfJob", + "AirflowDag", + "DatabricksJob", + "DbtJob" + ] + }, + "job_name": { + "type": "string" + }, + "project_name": { + "type": "string" + }, + "task_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mcon": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "job_type", + "job_name", + "project_name" + ] + } + }, + { + "type": "null" + } + ] + }, + "interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "interval_crontab": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "interval_crontab_day_operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + { + "type": "null" + } + ] + }, + "start_time": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timezone": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "min_interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "notes": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "type": "string", + "maxLength": 512 + }, + "notify_run_failure": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "audiences": { + "type": "array", + "items": { + "type": "string" + } + }, + "failure_audiences": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "priority": { + "oneOf": [ + { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] + }, + { + "type": "null" + } + ] + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, + { + "type": "null" + } + ] + }, + "domains": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "is_draft": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "sampling_config": { + "oneOf": [ + { + "type": "object", + "properties": { + "percentage": {}, + "count": {} + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "disable_look_back_bootstrap": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "skip_reset": { + "type": "boolean" + }, + "fail_on_reset": { + "type": "boolean" + }, + "resource": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `warehouse` instead." + }, + "notify_rule_run_failure": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `notify_run_failure` instead." + }, + "domain_uuids": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `domains` instead." + } + }, + "additionalProperties": false, + "required": [ + "name", + "data_source", + "alert_conditions", + "description" + ] + } + }, + "metric_comparison": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "warehouse": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "type": "string" + }, + "source": { + "type": "object", + "properties": { + "table": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sql": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "transforms": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "alias": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "prompt": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "categories": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "description": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "examples": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "label" + ] + } + }, + { + "type": "null" + } + ] + }, + "model_connection_id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "output_type": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sql_expression": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "field_config_list": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": {}, + "count": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "type" + ] + } + }, + { + "type": "null" + } + ] + }, + "model_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "field_value_range": { + "oneOf": [ + { + "type": "object", + "properties": { + "lower_bound": {}, + "upper_bound": {} + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "function": { + "type": "string" + }, + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "function" + ] + } + }, + { + "type": "null" + } + ] + }, + "where_condition": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "warehouse": { + "type": "string" + }, + "segment_fields": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "segment_sql": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "connection_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timeout": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "warehouse" + ] + }, + "target": { + "type": "object", + "properties": { + "table": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sql": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "transforms": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "alias": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "prompt": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "categories": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "description": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "examples": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "label" + ] + } + }, + { + "type": "null" + } + ] + }, + "model_connection_id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "output_type": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "sql_expression": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "field_config_list": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": {}, + "count": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "type" + ] + } + }, + { + "type": "null" + } + ] + }, + "model_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "field_value_range": { + "oneOf": [ + { + "type": "object", + "properties": { + "lower_bound": {}, + "upper_bound": {} + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "function": { + "type": "string" + }, + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "function" + ] + } + }, + { + "type": "null" + } + ] + }, + "where_condition": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "warehouse": { + "type": "string" + }, + "segment_fields": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "segment_sql": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "connection_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timeout": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "warehouse" + ] + }, + "alert_conditions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "metric": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "custom_metric": { + "oneOf": [ + { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "display_name": { + "type": "string" + }, + "source_sql_expression": { + "type": "string" + }, + "target_sql_expression": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "display_name", + "source_sql_expression", + "target_sql_expression" + ] + }, + { + "type": "null" + } + ] + }, + "source_field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "target_field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "type": { + "type": "string", + "enum": [ + "comparison_delta", + "noop" + ], + "default": "comparison_delta" + }, + "operator": { + "type": "string", + "enum": [ + "GT", + "NOOP" + ], + "default": "GT" + }, + "threshold_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "is_threshold_relative": { + "type": "boolean" + } + }, + "additionalProperties": false + } + }, + "schedule": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dynamic", + "fixed", + "loose", + "manual" + ], + "default": "fixed" + }, + "dynamic_schedule_tables": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "dynamic_schedule_jobs": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "job_type": { + "type": "string", + "enum": [ + "AdfJob", + "AirflowDag", + "DatabricksJob", + "DbtJob" + ] + }, + "job_name": { + "type": "string" + }, + "project_name": { + "type": "string" + }, + "task_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mcon": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "job_type", + "job_name", + "project_name" + ] + } + }, + { + "type": "null" + } + ] + }, + "interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "interval_crontab": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "interval_crontab_day_operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + { + "type": "null" + } + ] + }, + "start_time": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timezone": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "min_interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "notes": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "type": "string", + "maxLength": 512 + }, + "notify_run_failure": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "audiences": { + "type": "array", + "items": { + "type": "string" + } + }, + "failure_audiences": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "priority": { + "oneOf": [ + { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] + }, + { + "type": "null" + } + ] + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, + { + "type": "null" + } + ] + }, + "domains": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "is_draft": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "skip_reset": { + "type": "boolean" + }, + "fail_on_reset": { + "type": "boolean" + }, + "resource": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `warehouse` instead." + }, + "notify_rule_run_failure": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `notify_run_failure` instead." + }, + "domain_uuids": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `domains` instead." + } + }, + "additionalProperties": false, + "required": [ + "name", + "source", + "target", + "alert_conditions", + "description" + ] + } + }, + "custom_sql": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "warehouse": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "connection_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "oneOf": [ + { + "type": "string", + "maxLength": 512 + }, + { + "type": "null" + } + ] + }, + "notes": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "severity": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "priority": { + "oneOf": [ + { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] + }, + { + "type": "null" + } + ] + }, + "labels": { + "type": "array", + "items": { + "type": "string" + } + }, + "audiences": { + "type": "array", + "items": { + "type": "string" + } + }, + "failure_audiences": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "notify_run_failure": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "event_rollup_count": { + "oneOf": [ + { + "type": "integer", + "minimum": 2 + }, + { + "type": "null" + } + ] + }, + "event_rollup_until_changed": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "metadata": { + "oneOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ] + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, + { + "type": "null" + } + ] + }, + "domains": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "is_draft": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "schedule": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dynamic", + "fixed", + "loose", + "manual" + ], + "default": "fixed" + }, + "dynamic_schedule_tables": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "dynamic_schedule_jobs": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "job_type": { + "type": "string", + "enum": [ + "AdfJob", + "AirflowDag", + "DatabricksJob", + "DbtJob" + ] + }, + "job_name": { + "type": "string" + }, + "project_name": { + "type": "string" + }, + "task_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mcon": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "job_type", + "job_name", + "project_name" + ] + } + }, + { + "type": "null" + } + ] + }, + "interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "interval_crontab": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "interval_crontab_day_operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + { + "type": "null" + } + ] + }, + "start_time": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timezone": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "min_interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + "timeout": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "sql": { + "type": "string" + }, + "variables": {}, + "alert_conditions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "absolute_volume", + "change", + "dynamic_threshold", + "growth_volume", + "noop", + "threshold" + ], + "default": "threshold" + }, + "operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AUTO", + "AUTO_HIGH", + "AUTO_LOW", + "EQ", + "GT", + "GTE", + "INSIDE_RANGE", + "LT", + "LTE", + "NEQ", + "NOOP", + "OUTSIDE_RANGE" + ] + }, + { + "type": "null" + } + ] + }, + "threshold_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "baseline_agg_function": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AVG", + "MAX", + "MIN" + ] + }, + { + "type": "null" + } + ] + }, + "baseline_interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "is_threshold_relative": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "min_buffer_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "max_buffer_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "min_buffer_modifier_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "METRIC", + "PERCENTAGE" + ] + }, + { + "type": "null" + } + ] + }, + "max_buffer_modifier_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "METRIC", + "PERCENTAGE" + ] + }, + { + "type": "null" + } + ] + }, + "number_of_agg_periods": { + "oneOf": [ + { + "type": "integer", + "minimum": 1, + "maximum": 1000 + }, + { + "type": "null" + } + ] + }, + "threshold_lookback_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "is_percentage_threshold": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "percentage_baseline_sql": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "threshold_sensitivity": { + "oneOf": [ + { + "type": "string", + "enum": [ + "high", + "low", + "medium" + ] + }, + { + "type": "null" + } + ] + }, + "lower_threshold": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "upper_threshold": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + "maxItems": 1 + }, + "query_result_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ROW_COUNT", + "SINGLE_NUMERIC" + ] + }, + { + "type": "null" + } + ] + }, + "sampling_sql": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "skip_reset": { + "type": "boolean" + }, + "fail_on_reset": { + "type": "boolean" + }, + "exception_primary_key_column": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "resource": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `warehouse` instead." + }, + "notify_rule_run_failure": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `notify_run_failure` instead." + }, + "domain_uuids": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `domains` instead." + }, + "comparisons": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "absolute_volume", + "change", + "dynamic_threshold", + "growth_volume", + "noop", + "threshold" + ], + "default": "threshold" + }, + "operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AUTO", + "AUTO_HIGH", + "AUTO_LOW", + "EQ", + "GT", + "GTE", + "INSIDE_RANGE", + "LT", + "LTE", + "NEQ", + "NOOP", + "OUTSIDE_RANGE" + ] + }, + { + "type": "null" + } + ] + }, + "threshold_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "baseline_agg_function": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AVG", + "MAX", + "MIN" + ] + }, + { + "type": "null" + } + ] + }, + "baseline_interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "is_threshold_relative": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "min_buffer_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "max_buffer_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "min_buffer_modifier_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "METRIC", + "PERCENTAGE" + ] + }, + { + "type": "null" + } + ] + }, + "max_buffer_modifier_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "METRIC", + "PERCENTAGE" + ] + }, + { + "type": "null" + } + ] + }, + "number_of_agg_periods": { + "oneOf": [ + { + "type": "integer", + "minimum": 1, + "maximum": 1000 + }, + { + "type": "null" + } + ] + }, + "threshold_lookback_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "is_percentage_threshold": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "percentage_baseline_sql": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "threshold_sensitivity": { + "oneOf": [ + { + "type": "string", + "enum": [ + "high", + "low", + "medium" + ] + }, + { + "type": "null" + } + ] + }, + "lower_threshold": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "upper_threshold": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false + }, + "maxItems": 1, + "deprecated": true, + "description": "Deprecated: use `alert_conditions` instead." + } + }, + "additionalProperties": false, + "required": [ + "schedule", + "sql", + "alert_conditions" + ] + } + }, + "validation": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "warehouse": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "connection_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "oneOf": [ + { + "type": "string", + "maxLength": 512 + }, + { + "type": "null" + } + ] + }, + "notes": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "severity": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "priority": { + "oneOf": [ + { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] + }, + { + "type": "null" + } + ] + }, + "labels": { + "type": "array", + "items": { + "type": "string" + } + }, + "audiences": { + "type": "array", + "items": { + "type": "string" + } + }, + "failure_audiences": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "notify_run_failure": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "event_rollup_count": { + "oneOf": [ + { + "type": "integer", + "minimum": 2 + }, + { + "type": "null" + } + ] + }, + "event_rollup_until_changed": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "metadata": { + "oneOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ] + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, + { + "type": "null" + } + ] + }, + "domains": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "lookback_days": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "aggregation_time_interval": { - "oneOf": [ - { - "type": "string", - "enum": [ - "day", - "hour", - "month", - "week" + "is_draft": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - }, - "schedule": { - "oneOf": [ - { + "schedule": { "type": "object", "properties": { "type": { @@ -1408,219 +6059,31 @@ "type": "null" } ] + }, + "min_interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] } }, "additionalProperties": false }, - { - "type": "null" - } - ] - }, - "notes": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "description": { - "oneOf": [ - { - "type": "string", - "maxLength": 512 - }, - { - "type": "null" - } - ] - }, - "labels": { - "type": "array", - "items": { - "type": "string" - } - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "severity": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "priority": { - "oneOf": [ - { - "type": "string", - "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" - ] - }, - { - "type": "null" - } - ] - }, - "connection_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" + "timeout": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "field": { - "type": "string" - }, - "use_partition_clause": { - "type": "boolean" - }, - "unnest_field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "table", - "field" - ] - } - }, - "json_schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "table": { - "type": "string" - }, - "data_source": { - "oneOf": [ - { + "data_source": { "type": "object", "properties": { "table": { @@ -1770,196 +6233,50 @@ }, { "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - } - }, - { - "type": "null" - } - ] - }, - "model_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "field_value_range": { - "oneOf": [ - { - "type": "object", - "properties": { - "lower_bound": {}, - "upper_bound": {} - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "function": { - "type": "string" - }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "function" - ] - } - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "timestamp_field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "timestamp_field_expression": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "where_condition": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "lookback_days": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "aggregation_time_interval": { - "oneOf": [ - { - "type": "string", - "enum": [ - "day", - "hour", - "month", - "week" - ] - }, - { - "type": "null" - } - ] - }, - "schedule": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dynamic", - "fixed", - "loose", - "manual" - ], - "default": "fixed" - }, - "dynamic_schedule_tables": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "dynamic_schedule_jobs": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "job_type": { - "type": "string", - "enum": [ - "AdfJob", - "AirflowDag", - "DatabricksJob", - "DbtJob" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "type" + ] + } + }, + { + "type": "null" + } ] }, - "job_name": { - "type": "string" + "model_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - "project_name": { + "field_value_range": { + "oneOf": [ + { + "type": "object", + "properties": { + "lower_bound": {}, + "upper_bound": {} + }, + "additionalProperties": false + }, + { + "type": "null" + } + ] + }, + "function": { "type": "string" }, - "task_name": { + "field": { "oneOf": [ { "type": "string" @@ -1969,7 +6286,7 @@ } ] }, - "mcon": { + "id": { "oneOf": [ { "type": "string" @@ -1982,9 +6299,7 @@ }, "additionalProperties": false, "required": [ - "job_type", - "job_name", - "project_name" + "function" ] } }, @@ -1992,45 +6307,15 @@ "type": "null" } ] - }, - "interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "interval_crontab": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "interval_crontab_day_operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AND", - "OR" - ] - }, - { - "type": "null" - } - ] - }, - "start_time": { + } + }, + "additionalProperties": false + }, + "alert_condition": { + "type": "object", + "properties": { + "type": {}, + "id": { "oneOf": [ { "type": "string" @@ -2040,246 +6325,154 @@ } ] }, - "timezone": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } + "conditions": {}, + "operator": {} }, "additionalProperties": false }, - { - "type": "null" - } - ] - }, - "notes": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "description": { - "oneOf": [ - { - "type": "string", - "maxLength": 512 - }, - { - "type": "null" - } - ] - }, - "labels": { - "type": "array", - "items": { - "type": "string" - } - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "severity": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "priority": { - "oneOf": [ - { - "type": "string", - "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" + "exception_primary_key_column": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - }, - "connection_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } + "percentage_threshold": { + "oneOf": [ + { + "type": "number", + "minimum": 0 + }, + { + "type": "null" + } + ] }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" + "percentage_operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "EQ", + "GT", + "GTE", + "LT", + "LTE" + ] + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } + "resource": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `warehouse` instead." }, - { - "type": "null" - } - ] - }, - "field": { - "type": "string" - }, - "unnest_field": { - "oneOf": [ - { - "type": "string" + "notify_rule_run_failure": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `notify_run_failure` instead." }, - { - "type": "null" + "domain_uuids": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `domains` instead." } + }, + "additionalProperties": false, + "required": [ + "schedule", + "data_source", + "alert_condition" ] } }, - "additionalProperties": false, - "required": [ - "table", - "field" - ] - } - }, - "metric": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" + "comparison": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" + "warehouse": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "name": { - "type": "string" - }, - "connection_name": { - "oneOf": [ - { - "type": "string" + "name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "timeout": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "data_source": { - "type": "object", - "properties": { - "table": { + "connection_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { "oneOf": [ { - "type": "string" + "type": "string", + "maxLength": 512 }, { "type": "null" } ] }, - "sql": { + "notes": { "oneOf": [ { "type": "string" @@ -2289,550 +6482,166 @@ } ] }, - "transforms": { + "severity": { "oneOf": [ { - "type": "array", - "items": { - "type": "object", - "properties": { - "alias": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "prompt": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "categories": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "label": { - "type": "string" - }, - "description": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "examples": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "label" - ] - } - }, - { - "type": "null" - } - ] - }, - "model_connection_id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "output_type": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "sql_expression": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "field_config_list": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": {}, - "count": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - } - }, - { - "type": "null" - } - ] - }, - "model_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "field_value_range": { - "oneOf": [ - { - "type": "object", - "properties": { - "lower_bound": {}, - "upper_bound": {} - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "function": { - "type": "string" - }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "function" - ] - } + "type": "string" }, { "type": "null" } ] - } - }, - "additionalProperties": false - }, - "where_condition": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "use_partition_clause": { - "type": "boolean" - }, - "aggregate_time_field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "aggregate_time_sql": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "aggregate_timezone": { - "oneOf": [ - { - "type": "string" }, - { - "type": "null" - } - ] - }, - "aggregate_by": { - "oneOf": [ - { - "type": "string", - "enum": [ - "day", - "hour", - "month", - "week" + "priority": { + "oneOf": [ + { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - }, - "collection_lag": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "high_segment_count": { - "type": "boolean" - }, - "segment_fields": { - "oneOf": [ - { + "labels": { "type": "array", "items": { "type": "string" } }, - { - "type": "null" - } - ] - }, - "segment_sql": { - "oneOf": [ - { + "audiences": { "type": "array", "items": { "type": "string" } }, - { - "type": "null" - } - ] - }, - "alert_conditions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "metric": { - "oneOf": [ - { + "failure_audiences": { + "oneOf": [ + { + "type": "array", + "items": { "type": "string" - }, - { - "type": "null" - } - ] - }, - "custom_metric": { - "oneOf": [ - { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "display_name": { - "type": "string" - }, - "sql_expression": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "display_name", - "sql_expression" - ] - }, - { - "type": "null" } - ] - }, - "fields": { - "type": "array", - "items": { - "type": "string" + }, + { + "type": "null" } - }, - "type": { - "type": "string", - "enum": [ - "noop", - "threshold" - ], - "default": "threshold" - }, - "operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AUTO", - "AUTO_HIGH", - "AUTO_LOW", - "EQ", - "GT", - "GTE", - "INSIDE_RANGE", - "LT", - "LTE", - "NEQ", - "NOOP", - "OUTSIDE_RANGE" - ] - }, - { - "type": "null" - } - ] - }, - "threshold_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "lower_threshold": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "upper_threshold": { - "oneOf": [ - { - "type": "number" + ] + }, + "notify_run_failure": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "event_rollup_count": { + "oneOf": [ + { + "type": "integer", + "minimum": 2 + }, + { + "type": "null" + } + ] + }, + "event_rollup_until_changed": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "metadata": { + "oneOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ] + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" }, - { - "type": "null" - } - ] - }, - "field_pattern": { - "oneOf": [ - { - "type": "object", - "properties": { - "operator": { - "type": "string", - "enum": [ - "CONTAINING", - "ENDING_WITH", - "MATCHING", - "STARTING_WITH" - ] - }, - "value": { + "value": { + "oneOf": [ + { "type": "string" }, - "case_sensitive": { - "type": "boolean" - }, - "field_type": { - "oneOf": [ - { - "type": "string", - "enum": [ - "BOOLEAN", - "DATE", - "NUMERIC", - "TEXT", - "TIME", - "TIME_OF_DAY" - ] - }, - { - "type": "null" - } - ] + { + "type": "null" } - }, - "additionalProperties": false, - "required": [ - "operator", - "value" ] - }, - { - "type": "null" - } - ] - }, - "baseline_trailing_days": { - "oneOf": [ - { - "type": "integer", - "minimum": 1 - }, - { - "type": "null" - } - ] - }, - "baseline_start": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "baseline_end": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "num_bins": { - "oneOf": [ - { - "type": "integer", - "minimum": 2, - "maximum": 1000 - }, - { - "type": "null" } + }, + "additionalProperties": false, + "required": [ + "name" ] - }, - "id": { - "oneOf": [ - { + } + }, + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, + { + "type": "null" + } + ] + }, + "domains": { + "oneOf": [ + { + "type": "array", + "items": { "type": "string" - }, - { - "type": "null" } - ] - } + }, + { + "type": "null" + } + ] }, - "additionalProperties": false - } - }, - "sensitivity": { - "oneOf": [ - { - "type": "string", - "enum": [ - "high", - "low", - "medium" + "is_draft": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - }, - "schedule": { - "oneOf": [ - { + "schedule": { "type": "object", "properties": { "type": { @@ -2970,178 +6779,208 @@ "type": "null" } ] + }, + "min_interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] } }, "additionalProperties": false }, - { - "type": "null" - } - ] - }, - "notes": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "description": { - "type": "string", - "maxLength": 512 - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "priority": { - "oneOf": [ - { + "query_result_type": { "type": "string", "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" + "LABELED_NUMERICS", + "ROW_COUNT", + "SINGLE_NUMERIC" ] }, - { - "type": "null" - } - ] - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { - "type": "string" + "source_resource": { + "type": "string" + }, + "target_resource": { + "type": "string" + }, + "source_sql": { + "type": "string" + }, + "target_sql": { + "type": "string" + }, + "alert_conditions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "default": "source_target_delta" + }, + "operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "EQ", + "GT", + "GTE", + "LT", + "LTE", + "NEQ" + ] + }, + { + "type": "null" + } + ] + }, + "threshold_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "baseline_agg_function": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AVG", + "MAX", + "MIN" + ] + }, + { + "type": "null" + } + ] + }, + "baseline_interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "is_threshold_relative": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "min_buffer_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "max_buffer_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "min_buffer_modifier_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "METRIC", + "PERCENTAGE" + ] + }, + { + "type": "null" + } + ] + }, + "max_buffer_modifier_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "METRIC", + "PERCENTAGE" + ] + }, + { + "type": "null" + } + ] + }, + "number_of_agg_periods": { + "oneOf": [ + { + "type": "integer", + "minimum": 1, + "maximum": 1000 + }, + { + "type": "null" + } + ] + }, + "threshold_lookback_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "is_percentage_threshold": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] }, - { - "type": "null" + "percentage_baseline_sql": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] } - ] - } - }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" - ] - }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "sampling_config": { - "oneOf": [ - { - "type": "object", - "properties": { - "percentage": {}, - "count": {} + }, + "additionalProperties": false }, - "additionalProperties": false + "maxItems": 1 }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "name", - "data_source", - "alert_conditions", - "description" - ] - } - }, - "metric_comparison": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "name": { - "type": "string" - }, - "source": { - "type": "object", - "properties": { - "table": { + "source_connection_name": { "oneOf": [ { "type": "string" @@ -3151,7 +6990,7 @@ } ] }, - "sql": { + "target_connection_name": { "oneOf": [ { "type": "string" @@ -3161,209 +7000,233 @@ } ] }, - "transforms": { + "resource": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `warehouse` instead." + }, + "notify_rule_run_failure": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `notify_run_failure` instead." + }, + "domain_uuids": { "oneOf": [ { "type": "array", "items": { - "type": "object", - "properties": { - "alias": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } + "type": "string" + } + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `domains` instead." + }, + "comparisons": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "default": "source_target_delta" + }, + "operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "EQ", + "GT", + "GTE", + "LT", + "LTE", + "NEQ" ] }, - "prompt": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] + { + "type": "null" + } + ] + }, + "threshold_value": { + "oneOf": [ + { + "type": "number" }, - "categories": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "label": { - "type": "string" - }, - "description": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "examples": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "label" - ] - } - }, - { - "type": "null" - } + { + "type": "null" + } + ] + }, + "baseline_agg_function": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AVG", + "MAX", + "MIN" ] }, - "model_connection_id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] + { + "type": "null" + } + ] + }, + "baseline_interval_minutes": { + "oneOf": [ + { + "type": "integer" }, - "output_type": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] + { + "type": "null" + } + ] + }, + "is_threshold_relative": { + "oneOf": [ + { + "type": "boolean" }, - "sql_expression": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] + { + "type": "null" + } + ] + }, + "min_buffer_value": { + "oneOf": [ + { + "type": "number" }, - "field_config_list": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": {}, - "count": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - } - }, - { - "type": "null" - } - ] + { + "type": "null" + } + ] + }, + "max_buffer_value": { + "oneOf": [ + { + "type": "number" }, - "model_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } + { + "type": "null" + } + ] + }, + "min_buffer_modifier_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "METRIC", + "PERCENTAGE" ] }, - "field_value_range": { - "oneOf": [ - { - "type": "object", - "properties": { - "lower_bound": {}, - "upper_bound": {} - }, - "additionalProperties": false - }, - { - "type": "null" - } + { + "type": "null" + } + ] + }, + "max_buffer_modifier_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "METRIC", + "PERCENTAGE" ] }, - "function": { - "type": "string" + { + "type": "null" + } + ] + }, + "number_of_agg_periods": { + "oneOf": [ + { + "type": "integer", + "minimum": 1, + "maximum": 1000 + }, + { + "type": "null" + } + ] + }, + "threshold_lookback_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "is_percentage_threshold": { + "oneOf": [ + { + "type": "boolean" }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] + { + "type": "null" + } + ] + }, + "percentage_baseline_sql": { + "oneOf": [ + { + "type": "string" }, - "id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] + { + "type": "null" } - }, - "additionalProperties": false, - "required": [ - "function" ] } }, - { - "type": "null" - } - ] - }, - "where_condition": { + "additionalProperties": false + }, + "maxItems": 1, + "deprecated": true, + "description": "Deprecated: use `alert_conditions` instead." + } + }, + "additionalProperties": false, + "required": [ + "schedule", + "query_result_type", + "source_resource", + "target_resource", + "source_sql", + "target_sql", + "alert_conditions" + ] + } + }, + "query_performance": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { "oneOf": [ { "type": "string" @@ -3374,35 +7237,16 @@ ] }, "warehouse": { - "type": "string" - }, - "segment_fields": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "segment_sql": { "oneOf": [ { - "type": "array", - "items": { - "type": "string" - } + "type": "string" }, { "type": "null" } ] }, - "connection_name": { + "name": { "oneOf": [ { "type": "string" @@ -3412,36 +7256,37 @@ } ] }, - "timeout": { + "description": { "oneOf": [ { - "type": "integer" + "type": "string", + "maxLength": 512 }, { "type": "null" } ] - } - }, - "additionalProperties": false, - "required": [ - "warehouse" - ] - }, - "target": { - "type": "object", - "properties": { - "table": { + }, + "audiences": { + "type": "array", + "items": { + "type": "string" + } + }, + "failure_audiences": { "oneOf": [ { - "type": "string" + "type": "array", + "items": { + "type": "string" + } }, { "type": "null" } ] }, - "sql": { + "notes": { "oneOf": [ { "type": "string" @@ -3451,222 +7296,67 @@ } ] }, - "transforms": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "alias": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "prompt": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "categories": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "label": { - "type": "string" - }, - "description": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "examples": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "label" - ] - } - }, - { - "type": "null" - } - ] - }, - "model_connection_id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "output_type": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "sql_expression": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "field_config_list": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": {}, - "count": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - } - }, - { - "type": "null" - } - ] - }, - "model_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "field_value_range": { - "oneOf": [ - { - "type": "object", - "properties": { - "lower_bound": {}, - "upper_bound": {} - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "function": { + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "oneOf": [ + { "type": "string" }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] + { + "type": "null" } - }, - "additionalProperties": false, - "required": [ - "function" ] } }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "priority": { + "oneOf": [ + { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] + }, { "type": "null" } ] }, - "where_condition": { + "data_quality_dimension": { "oneOf": [ { - "type": "string" + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] }, { "type": "null" } ] }, - "warehouse": { - "type": "string" - }, - "segment_fields": { + "domains": { "oneOf": [ { "type": "array", @@ -3679,12 +7369,28 @@ } ] }, - "segment_sql": { + "selection": { "oneOf": [ { "type": "array", "items": { - "type": "string" + "type": "object", + "properties": { + "field_name": { + "type": "string" + }, + "values": { + "type": "array", + "items": { + "type": "string" + } + }, + "operator": {} + }, + "additionalProperties": false, + "required": [ + "field_name" + ] } }, { @@ -3692,612 +7398,283 @@ } ] }, - "connection_name": { + "alert_conditions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "threshold": {}, + "metric": {}, + "comparison_type": {}, + "operator": {}, + "baseline_agg_function": {}, + "threshold_lookback_minutes": {}, + "threshold_lookback_data_points": {} + }, + "additionalProperties": false, + "required": [ + "threshold", + "metric" + ] + } + }, + "is_draft": { "oneOf": [ { - "type": "string" + "type": "boolean" }, { "type": "null" } ] }, - "timeout": { + "notify_run_failure": { "oneOf": [ { - "type": "integer" + "type": "boolean" }, { "type": "null" } ] + }, + "resource": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `warehouse` instead." + }, + "domain_uuids": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `domains` instead." } }, "additionalProperties": false, "required": [ - "warehouse" + "alert_conditions" ] - }, - "alert_conditions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "metric": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "custom_metric": { - "oneOf": [ - { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "display_name": { - "type": "string" - }, - "source_sql_expression": { - "type": "string" - }, - "target_sql_expression": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "display_name", - "source_sql_expression", - "target_sql_expression" - ] - }, - { - "type": "null" - } - ] - }, - "source_field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "target_field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "type": { - "type": "string", - "enum": [ - "comparison_delta", - "noop" - ], - "default": "comparison_delta" - }, - "operator": { - "type": "string", - "enum": [ - "GT", - "NOOP" - ], - "default": "GT" - }, - "threshold_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "is_threshold_relative": { - "type": "boolean" - } - }, - "additionalProperties": false - } - }, - "schedule": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dynamic", - "fixed", - "loose", - "manual" - ], - "default": "fixed" - }, - "dynamic_schedule_tables": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "dynamic_schedule_jobs": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "job_type": { - "type": "string", - "enum": [ - "AdfJob", - "AirflowDag", - "DatabricksJob", - "DbtJob" - ] - }, - "job_name": { - "type": "string" - }, - "project_name": { - "type": "string" - }, - "task_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "mcon": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "job_type", - "job_name", - "project_name" - ] - } - }, - { - "type": "null" - } - ] - }, - "interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "interval_crontab": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] + } + }, + "freshness": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" }, - "interval_crontab_day_operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AND", - "OR" - ] - }, - { - "type": "null" - } - ] + { + "type": "null" + } + ] + }, + "warehouse": { + "oneOf": [ + { + "type": "string" }, - "start_time": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] + { + "type": "null" + } + ] + }, + "name": { + "oneOf": [ + { + "type": "string" }, - "timezone": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] + { + "type": "null" } - }, - "additionalProperties": false + ] }, - { - "type": "null" - } - ] - }, - "notes": { - "oneOf": [ - { - "type": "string" + "connection_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "description": { - "type": "string", - "maxLength": 512 - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } + "description": { + "oneOf": [ + { + "type": "string", + "maxLength": 512 + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "priority": { - "oneOf": [ - { - "type": "string", - "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" + "notes": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } + "severity": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" + "priority": { + "oneOf": [ + { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { + "labels": { "type": "array", "items": { "type": "string" } }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "name", - "source", - "target", - "alert_conditions", - "description" - ] - } - }, - "custom_sql": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "name": { - "oneOf": [ - { - "type": "string" + "audiences": { + "type": "array", + "items": { + "type": "string" + } }, - { - "type": "null" - } - ] - }, - "connection_name": { - "oneOf": [ - { - "type": "string" + "failure_audiences": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "description": { - "oneOf": [ - { - "type": "string", - "maxLength": 512 + "notify_run_failure": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "notes": { - "oneOf": [ - { - "type": "string" + "event_rollup_count": { + "oneOf": [ + { + "type": "integer", + "minimum": 2 + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "severity": { - "oneOf": [ - { - "type": "string" + "event_rollup_until_changed": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "priority": { - "oneOf": [ - { - "type": "string", - "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" + "metadata": { + "oneOf": [ + { + "type": "object" + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - }, - "labels": { - "type": "array", - "items": { - "type": "string" - } - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { + "tags": { "type": "array", "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "event_rollup_count": { - "oneOf": [ - { - "type": "integer", - "minimum": 2 - }, - { - "type": "null" - } - ] - }, - "event_rollup_until_changed": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { + "type": "object", + "properties": { + "name": { "type": "string" }, - { - "type": "null" + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] } + }, + "additionalProperties": false, + "required": [ + "name" ] } }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "schedule": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dynamic", - "fixed", - "loose", - "manual" - ], - "default": "fixed" - }, - "dynamic_schedule_tables": { + "domains": { "oneOf": [ { "type": "array", @@ -4310,73 +7687,186 @@ } ] }, - "dynamic_schedule_jobs": { + "is_draft": { "oneOf": [ { - "type": "array", - "items": { - "type": "object", - "properties": { - "job_type": { - "type": "string", - "enum": [ - "AdfJob", - "AirflowDag", - "DatabricksJob", - "DbtJob" - ] - }, - "job_name": { - "type": "string" - }, - "project_name": { - "type": "string" - }, - "task_name": { - "oneOf": [ - { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "schedule": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dynamic", + "fixed", + "loose", + "manual" + ], + "default": "fixed" + }, + "dynamic_schedule_tables": { + "oneOf": [ + { + "type": "array", + "items": { "type": "string" - }, - { - "type": "null" } - ] - }, - "mcon": { - "oneOf": [ - { + }, + { + "type": "null" + } + ] + }, + "dynamic_schedule_jobs": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "job_type": { + "type": "string", + "enum": [ + "AdfJob", + "AirflowDag", + "DatabricksJob", + "DbtJob" + ] + }, + "job_name": { + "type": "string" + }, + "project_name": { + "type": "string" + }, + "task_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mcon": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "job_type", + "job_name", + "project_name" + ] + } + }, + { + "type": "null" + } + ] + }, + "interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "interval_crontab": { + "oneOf": [ + { + "type": "array", + "items": { "type": "string" - }, - { - "type": "null" } - ] - } + }, + { + "type": "null" + } + ] }, - "additionalProperties": false, - "required": [ - "job_type", - "job_name", - "project_name" - ] - } + "interval_crontab_day_operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + { + "type": "null" + } + ] + }, + "start_time": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timezone": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "min_interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false }, { "type": "null" } ] }, - "interval_minutes": { + "table": { "oneOf": [ { - "type": "integer" + "type": "string" }, { "type": "null" } ] }, - "interval_crontab": { + "tables": { "oneOf": [ { "type": "array", @@ -4389,13 +7879,24 @@ } ] }, - "interval_crontab_day_operator": { + "freshness_threshold": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "threshold_sensitivity": { "oneOf": [ { "type": "string", "enum": [ - "AND", - "OR" + "high", + "low", + "medium" ] }, { @@ -4403,17 +7904,17 @@ } ] }, - "start_time": { + "is_paused": { "oneOf": [ { - "type": "string" + "type": "boolean" }, { "type": "null" } ] }, - "timezone": { + "resource": { "oneOf": [ { "type": "string" @@ -4421,493 +7922,23 @@ { "type": "null" } - ] - } - }, - "additionalProperties": false - }, - "timeout": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "sql": { - "type": "string" - }, - "variables": {}, - "alert_conditions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "absolute_volume", - "change", - "dynamic_threshold", - "growth_volume", - "noop", - "threshold" - ], - "default": "threshold" - }, - "operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AUTO", - "AUTO_HIGH", - "AUTO_LOW", - "EQ", - "GT", - "GTE", - "INSIDE_RANGE", - "LT", - "LTE", - "NEQ", - "NOOP", - "OUTSIDE_RANGE" - ] - }, - { - "type": "null" - } - ] - }, - "threshold_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "baseline_agg_function": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AVG", - "MAX", - "MIN" - ] - }, - { - "type": "null" - } - ] - }, - "baseline_interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "is_threshold_relative": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "min_buffer_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "max_buffer_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "min_buffer_modifier_type": { - "oneOf": [ - { - "type": "string", - "enum": [ - "METRIC", - "PERCENTAGE" - ] - }, - { - "type": "null" - } - ] - }, - "max_buffer_modifier_type": { - "oneOf": [ - { - "type": "string", - "enum": [ - "METRIC", - "PERCENTAGE" - ] - }, - { - "type": "null" - } - ] - }, - "number_of_agg_periods": { - "oneOf": [ - { - "type": "integer", - "minimum": 1, - "maximum": 1000 - }, - { - "type": "null" - } - ] - }, - "threshold_lookback_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "is_percentage_threshold": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "percentage_baseline_sql": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "threshold_sensitivity": { - "oneOf": [ - { - "type": "string", - "enum": [ - "high", - "low", - "medium" - ] - }, - { - "type": "null" - } - ] - }, - "lower_threshold": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "upper_threshold": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - "maxItems": 1 - }, - "query_result_type": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ROW_COUNT", - "SINGLE_NUMERIC" - ] - }, - { - "type": "null" - } - ] - }, - "sampling_sql": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "exception_primary_key_column": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "schedule", - "sql", - "alert_conditions" - ] - } - }, - "validation": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "connection_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "description": { - "oneOf": [ - { - "type": "string", - "maxLength": 512 - }, - { - "type": "null" - } - ] - }, - "notes": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "severity": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "priority": { - "oneOf": [ - { - "type": "string", - "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" - ] - }, - { - "type": "null" - } - ] - }, - "labels": { - "type": "array", - "items": { - "type": "string" - } - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "event_rollup_count": { - "oneOf": [ - { - "type": "integer", - "minimum": 2 - }, - { - "type": "null" - } - ] - }, - "event_rollup_until_changed": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" - ] - }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "schedule": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dynamic", - "fixed", - "loose", - "manual" ], - "default": "fixed" + "deprecated": true, + "description": "Deprecated: use `warehouse` instead." }, - "dynamic_schedule_tables": { + "notify_rule_run_failure": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `notify_run_failure` instead." + }, + "domain_uuids": { "oneOf": [ { "type": "array", @@ -4918,102 +7949,71 @@ { "type": "null" } + ], + "deprecated": true, + "description": "Deprecated: use `domains` instead." + } + }, + "additionalProperties": false + } + }, + "volume": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } ] }, - "dynamic_schedule_jobs": { + "warehouse": { "oneOf": [ { - "type": "array", - "items": { - "type": "object", - "properties": { - "job_type": { - "type": "string", - "enum": [ - "AdfJob", - "AirflowDag", - "DatabricksJob", - "DbtJob" - ] - }, - "job_name": { - "type": "string" - }, - "project_name": { - "type": "string" - }, - "task_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "mcon": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "job_type", - "job_name", - "project_name" - ] - } + "type": "string" }, { "type": "null" } ] }, - "interval_minutes": { + "name": { "oneOf": [ { - "type": "integer" + "type": "string" }, { "type": "null" } ] }, - "interval_crontab": { + "connection_name": { "oneOf": [ { - "type": "array", - "items": { - "type": "string" - } + "type": "string" }, { "type": "null" } ] }, - "interval_crontab_day_operator": { + "description": { "oneOf": [ { "type": "string", - "enum": [ - "AND", - "OR" - ] + "maxLength": 512 }, { "type": "null" } ] }, - "start_time": { + "notes": { "oneOf": [ { "type": "string" @@ -5023,7 +8023,7 @@ } ] }, - "timezone": { + "severity": { "oneOf": [ { "type": "string" @@ -5032,253 +8032,316 @@ "type": "null" } ] - } - }, - "additionalProperties": false - }, - "timeout": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "data_source": { - "type": "object", - "properties": { - "table": { + }, + "priority": { "oneOf": [ { - "type": "string" + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] }, { "type": "null" } ] }, - "sql": { + "labels": { + "type": "array", + "items": { + "type": "string" + } + }, + "audiences": { + "type": "array", + "items": { + "type": "string" + } + }, + "failure_audiences": { "oneOf": [ { - "type": "string" + "type": "array", + "items": { + "type": "string" + } }, { "type": "null" } ] }, - "transforms": { + "notify_run_failure": { "oneOf": [ { - "type": "array", - "items": { - "type": "object", - "properties": { - "alias": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "prompt": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "categories": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "label": { - "type": "string" - }, - "description": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "examples": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "label" - ] - } - }, - { - "type": "null" - } - ] - }, - "model_connection_id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "output_type": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "sql_expression": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "field_config_list": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": {}, - "count": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - } - }, - { - "type": "null" - } - ] + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "event_rollup_count": { + "oneOf": [ + { + "type": "integer", + "minimum": 2 + }, + { + "type": "null" + } + ] + }, + "event_rollup_until_changed": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "metadata": { + "oneOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ] + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "string" }, - "model_name": { - "oneOf": [ - { + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, + { + "type": "null" + } + ] + }, + "domains": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "is_draft": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "schedule": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dynamic", + "fixed", + "loose", + "manual" + ], + "default": "fixed" + }, + "dynamic_schedule_tables": { + "oneOf": [ + { + "type": "array", + "items": { "type": "string" - }, - { - "type": "null" } - ] - }, - "field_value_range": { - "oneOf": [ - { + }, + { + "type": "null" + } + ] + }, + "dynamic_schedule_jobs": { + "oneOf": [ + { + "type": "array", + "items": { "type": "object", "properties": { - "lower_bound": {}, - "upper_bound": {} + "job_type": { + "type": "string", + "enum": [ + "AdfJob", + "AirflowDag", + "DatabricksJob", + "DbtJob" + ] + }, + "job_name": { + "type": "string" + }, + "project_name": { + "type": "string" + }, + "task_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mcon": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "function": { - "type": "string" - }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" + "additionalProperties": false, + "required": [ + "job_type", + "job_name", + "project_name" + ] } - ] - }, - "id": { - "oneOf": [ - { + }, + { + "type": "null" + } + ] + }, + "interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "interval_crontab": { + "oneOf": [ + { + "type": "array", + "items": { "type": "string" - }, - { - "type": "null" } - ] - } + }, + { + "type": "null" + } + ] }, - "additionalProperties": false, - "required": [ - "function" - ] - } + "interval_crontab_day_operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + { + "type": "null" + } + ] + }, + "start_time": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timezone": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "min_interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false }, { "type": "null" } ] - } - }, - "additionalProperties": false - }, - "alert_condition": { - "type": "object", - "properties": { - "type": {}, - "id": { + }, + "table": { "oneOf": [ { "type": "string" @@ -5288,1413 +8351,740 @@ } ] }, - "conditions": {}, - "operator": {} - }, - "additionalProperties": false - }, - "exception_primary_key_column": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "percentage_threshold": { - "oneOf": [ - { - "type": "number", - "minimum": 0 - }, - { - "type": "null" - } - ] - }, - "percentage_operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "EQ", - "GT", - "GTE", - "LT", - "LTE" - ] - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "schedule", - "data_source", - "alert_condition" - ] - } - }, - "comparison": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "connection_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "description": { - "oneOf": [ - { - "type": "string", - "maxLength": 512 - }, - { - "type": "null" - } - ] - }, - "notes": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "severity": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "priority": { - "oneOf": [ - { - "type": "string", - "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" + "tables": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - }, - "labels": { - "type": "array", - "items": { - "type": "string" - } - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { + "alert_conditions": { "type": "array", "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "event_rollup_count": { - "oneOf": [ - { - "type": "integer", - "minimum": 2 - }, - { - "type": "null" - } - ] - }, - "event_rollup_until_changed": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { - "type": "string" + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "absolute_volume", + "change", + "dynamic_threshold", + "growth_volume", + "lookback", + "threshold" + ] + }, + "operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AUTO", + "EQ", + "GT", + "GTE", + "LT", + "LTE", + "NEQ", + "OUTSIDE_RANGE" + ] + }, + { + "type": "null" + } + ] + }, + "threshold_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "baseline_agg_function": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AVG", + "MAX", + "MIN" + ] + }, + { + "type": "null" + } + ] + }, + "baseline_interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "is_threshold_relative": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "min_buffer_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "max_buffer_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "min_buffer_modifier_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "METRIC", + "PERCENTAGE" + ] + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" - ] - }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "schedule": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dynamic", - "fixed", - "loose", - "manual" - ], - "default": "fixed" - }, - "dynamic_schedule_tables": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "dynamic_schedule_jobs": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "job_type": { + "max_buffer_modifier_type": { + "oneOf": [ + { "type": "string", "enum": [ - "AdfJob", - "AirflowDag", - "DatabricksJob", - "DbtJob" + "METRIC", + "PERCENTAGE" ] }, - "job_name": { - "type": "string" + { + "type": "null" + } + ] + }, + "number_of_agg_periods": { + "oneOf": [ + { + "type": "integer", + "minimum": 1, + "maximum": 1000 + }, + { + "type": "null" + } + ] + }, + "threshold_lookback_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "is_percentage_threshold": { + "oneOf": [ + { + "type": "boolean" }, - "project_name": { + { + "type": "null" + } + ] + }, + "percentage_baseline_sql": { + "oneOf": [ + { "type": "string" }, - "task_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } + { + "type": "null" + } + ] + }, + "threshold_sensitivity": { + "oneOf": [ + { + "type": "string", + "enum": [ + "high", + "low", + "medium" ] }, - "mcon": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] + { + "type": "null" + } + ] + }, + "lower_threshold": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "upper_threshold": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" } - }, - "additionalProperties": false, - "required": [ - "job_type", - "job_name", - "project_name" ] } }, - { - "type": "null" - } - ] + "additionalProperties": false, + "required": [ + "type" + ] + }, + "maxItems": 1 }, - "interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } + "volume_metric": { + "type": "string", + "enum": [ + "total_byte_count", + "total_byte_count_last_changed_on", + "total_row_count", + "total_row_count_last_changed_on" ] }, - "interval_crontab": { + "override": { "oneOf": [ { - "type": "array", - "items": { - "type": "string" - } + "type": "boolean" }, { "type": "null" } ] }, - "interval_crontab_day_operator": { + "resource": { "oneOf": [ { - "type": "string", - "enum": [ - "AND", - "OR" - ] + "type": "string" }, { "type": "null" } - ] + ], + "deprecated": true, + "description": "Deprecated: use `warehouse` instead." }, - "start_time": { + "notify_rule_run_failure": { "oneOf": [ { - "type": "string" + "type": "boolean" }, { "type": "null" } - ] + ], + "deprecated": true, + "description": "Deprecated: use `notify_run_failure` instead." }, - "timezone": { + "domain_uuids": { "oneOf": [ { - "type": "string" + "type": "array", + "items": { + "type": "string" + } }, { "type": "null" } - ] - } - }, - "additionalProperties": false - }, - "query_result_type": { - "type": "string", - "enum": [ - "LABELED_NUMERICS", - "ROW_COUNT", - "SINGLE_NUMERIC" - ] - }, - "source_resource": { - "type": "string" - }, - "target_resource": { - "type": "string" - }, - "source_sql": { - "type": "string" - }, - "target_sql": { - "type": "string" - }, - "alert_conditions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": { - "type": "string", - "default": "source_target_delta" - }, - "operator": { - "oneOf": [ - { + ], + "deprecated": true, + "description": "Deprecated: use `domains` instead." + }, + "comparisons": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { "type": "string", "enum": [ - "EQ", - "GT", - "GTE", - "LT", - "LTE", - "NEQ" + "absolute_volume", + "change", + "dynamic_threshold", + "growth_volume", + "lookback", + "threshold" ] }, - { - "type": "null" - } - ] - }, - "threshold_value": { - "oneOf": [ - { - "type": "number" + "operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AUTO", + "EQ", + "GT", + "GTE", + "LT", + "LTE", + "NEQ", + "OUTSIDE_RANGE" + ] + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "baseline_agg_function": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AVG", - "MAX", - "MIN" + "threshold_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - }, - "baseline_interval_minutes": { - "oneOf": [ - { - "type": "integer" + "baseline_agg_function": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AVG", + "MAX", + "MIN" + ] + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "is_threshold_relative": { - "oneOf": [ - { - "type": "boolean" + "baseline_interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "min_buffer_value": { - "oneOf": [ - { - "type": "number" + "is_threshold_relative": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "max_buffer_value": { - "oneOf": [ - { - "type": "number" + "min_buffer_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "max_buffer_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "min_buffer_modifier_type": { - "oneOf": [ - { - "type": "string", - "enum": [ - "METRIC", - "PERCENTAGE" + "min_buffer_modifier_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "METRIC", + "PERCENTAGE" + ] + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - }, - "max_buffer_modifier_type": { - "oneOf": [ - { - "type": "string", - "enum": [ - "METRIC", - "PERCENTAGE" + "max_buffer_modifier_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "METRIC", + "PERCENTAGE" + ] + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - }, - "number_of_agg_periods": { - "oneOf": [ - { - "type": "integer", - "minimum": 1, - "maximum": 1000 - }, - { - "type": "null" - } - ] - }, - "threshold_lookback_minutes": { - "oneOf": [ - { - "type": "integer" + "number_of_agg_periods": { + "oneOf": [ + { + "type": "integer", + "minimum": 1, + "maximum": 1000 + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "is_percentage_threshold": { - "oneOf": [ - { - "type": "boolean" + "threshold_lookback_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "percentage_baseline_sql": { - "oneOf": [ - { - "type": "string" + "is_percentage_threshold": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - "maxItems": 1 - }, - "source_connection_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "target_connection_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "schedule", - "query_result_type", - "source_resource", - "target_resource", - "source_sql", - "target_sql", - "alert_conditions" - ] - } - }, - "query_performance": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "description": { - "oneOf": [ - { - "type": "string", - "maxLength": 512 - }, - { - "type": "null" - } - ] - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "notes": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { - "type": "string" + "percentage_baseline_sql": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "priority": { - "oneOf": [ - { - "type": "string", - "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" - ] - }, - { - "type": "null" - } - ] - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" - ] - }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "selection": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "field_name": { - "type": "string" + "threshold_sensitivity": { + "oneOf": [ + { + "type": "string", + "enum": [ + "high", + "low", + "medium" + ] + }, + { + "type": "null" + } + ] }, - "values": { - "type": "array", - "items": { - "type": "string" - } + "lower_threshold": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] }, - "operator": {} + "upper_threshold": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } }, "additionalProperties": false, "required": [ - "field_name" + "type" ] - } - }, - { - "type": "null" + }, + "maxItems": 1, + "deprecated": true, + "description": "Deprecated: use `alert_conditions` instead." } + }, + "additionalProperties": false, + "required": [ + "alert_conditions" ] - }, - "alert_conditions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "threshold": {}, - "metric": {}, - "comparison_type": {}, - "operator": {}, - "baseline_agg_function": {}, - "threshold_lookback_minutes": {}, - "threshold_lookback_data_points": {} - }, - "additionalProperties": false, - "required": [ - "threshold", - "metric" - ] - } } }, - "additionalProperties": false, - "required": [ - "alert_conditions" - ] - } - }, - "freshness": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "connection_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "description": { - "oneOf": [ - { - "type": "string", - "maxLength": 512 - }, - { - "type": "null" - } - ] - }, - "notes": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "severity": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "priority": { - "oneOf": [ - { - "type": "string", - "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" + "field_quality": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - }, - "labels": { - "type": "array", - "items": { - "type": "string" - } - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "event_rollup_count": { - "oneOf": [ - { - "type": "integer", - "minimum": 2 - }, - { - "type": "null" - } - ] - }, - "event_rollup_until_changed": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } + "warehouse": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" + "name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } + "connection_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "schedule": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { + "description": { + "oneOf": [ + { "type": "string", - "enum": [ - "dynamic", - "fixed", - "loose", - "manual" - ], - "default": "fixed" - }, - "dynamic_schedule_tables": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "dynamic_schedule_jobs": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "job_type": { - "type": "string", - "enum": [ - "AdfJob", - "AirflowDag", - "DatabricksJob", - "DbtJob" - ] - }, - "job_name": { - "type": "string" - }, - "project_name": { - "type": "string" - }, - "task_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "mcon": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "job_type", - "job_name", - "project_name" - ] - } - }, - { - "type": "null" - } - ] + "maxLength": 512 }, - "interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "interval_crontab": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] + { + "type": "null" + } + ] + }, + "notes": { + "oneOf": [ + { + "type": "string" }, - "interval_crontab_day_operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AND", - "OR" - ] - }, - { - "type": "null" - } - ] + { + "type": "null" + } + ] + }, + "severity": { + "oneOf": [ + { + "type": "string" }, - "start_time": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } + { + "type": "null" + } + ] + }, + "priority": { + "oneOf": [ + { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" ] }, - "timezone": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] + { + "type": "null" } - }, - "additionalProperties": false + ] }, - { - "type": "null" - } - ] - }, - "table": { - "oneOf": [ - { - "type": "string" + "labels": { + "type": "array", + "items": { + "type": "string" + } }, - { - "type": "null" - } - ] - }, - "tables": { - "oneOf": [ - { + "audiences": { "type": "array", "items": { "type": "string" } }, - { - "type": "null" - } - ] - }, - "freshness_threshold": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "threshold_sensitivity": { - "oneOf": [ - { - "type": "string", - "enum": [ - "high", - "low", - "medium" + "failure_audiences": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - } - }, - "volume": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "connection_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "description": { - "oneOf": [ - { - "type": "string", - "maxLength": 512 + "notify_run_failure": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "notes": { - "oneOf": [ - { - "type": "string" + "event_rollup_count": { + "oneOf": [ + { + "type": "integer", + "minimum": 2 + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "severity": { - "oneOf": [ - { - "type": "string" + "event_rollup_until_changed": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "priority": { - "oneOf": [ - { - "type": "string", - "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" + "metadata": { + "oneOf": [ + { + "type": "object" + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - }, - "labels": { - "type": "array", - "items": { - "type": "string" - } - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { + "tags": { "type": "array", "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "event_rollup_count": { - "oneOf": [ - { - "type": "integer", - "minimum": 2 - }, - { - "type": "null" - } - ] - }, - "event_rollup_until_changed": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { + "type": "object", + "properties": { + "name": { "type": "string" }, - { - "type": "null" + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] } + }, + "additionalProperties": false, + "required": [ + "name" ] } }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } + "domains": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "schedule": { - "oneOf": [ - { + "is_draft": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "schedule": { "type": "object", "properties": { "type": { @@ -6832,525 +9222,438 @@ "type": "null" } ] + }, + "min_interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] } }, "additionalProperties": false }, - { - "type": "null" - } - ] - }, - "table": { - "oneOf": [ - { - "type": "string" + "table": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "tables": { - "oneOf": [ - { + "tables": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "field": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "fields": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "metric_type": { + "type": "string", + "enum": [ + "ACCURACY", + "APPROX_DISTINCTNESS", + "APPROX_DISTINCT_COUNT", + "APPROX_QUANTILES", + "APPROX_QUANTILES0", + "APPROX_QUANTILES1", + "APPROX_QUANTILES2", + "APPROX_QUANTILES3", + "APPROX_QUANTILES4", + "APPROX_QUANTILES5", + "DUPLICATE_COUNT", + "EMPTY_STRING_COUNT", + "EMPTY_STRING_RATE", + "FALSE_COUNT", + "FALSE_RATE", + "FUTURE_TIMESTAMP_COUNT", + "FUTURE_TIMESTAMP_RATE", + "JS_DIVERGENCE", + "KS_TEST", + "MAE", + "MAPE", + "MAX_LENGTH", + "MEAN_ERROR", + "MEAN_LENGTH", + "MIN_LENGTH", + "MISSING_VALUES", + "NAN_COUNT", + "NAN_RATE", + "NEGATIVE_COUNT", + "NEGATIVE_RATE", + "NEW_VALUES", + "NON_NULL_COUNT", + "NULL_COUNT", + "NULL_RATE", + "NUMERIC_MAX", + "NUMERIC_MEAN", + "NUMERIC_MEDIAN", + "NUMERIC_MIN", + "NUMERIC_QUANTILES", + "NUMERIC_STDDEV", + "PAST_TIMESTAMP_COUNT", + "PAST_TIMESTAMP_RATE", + "PERCENTILE_20", + "PERCENTILE_40", + "PERCENTILE_60", + "PERCENTILE_80", + "PERCENTILE_95", + "PERCENTILE_99", + "PSI", + "RELATIVE_ROW_COUNT", + "RMSE", + "ROW_COUNT", + "ROW_COUNT_CHANGE", + "R_SQUARED", + "SUM", + "TEXT_ALL_SPACES_COUNT", + "TEXT_ALL_SPACES_RATE", + "TEXT_ALL_SPACE_COUNT", + "TEXT_ALL_SPACE_RATE", + "TEXT_AU_ABN_RATE", + "TEXT_AU_MEDICARE_RATE", + "TEXT_AU_PHONE_RATE", + "TEXT_AU_POSTCODE_RATE", + "TEXT_AU_TFN_RATE", + "TEXT_CREDIT_CARD_RATE", + "TEXT_EMAIL_ADDRESS_RATE", + "TEXT_INT_RATE", + "TEXT_MAX_LENGTH", + "TEXT_MEAN_LENGTH", + "TEXT_MIN_LENGTH", + "TEXT_NOT_AU_ABN_COUNT", + "TEXT_NOT_AU_MEDICARE_COUNT", + "TEXT_NOT_AU_PHONE_COUNT", + "TEXT_NOT_AU_POSTCODE_COUNT", + "TEXT_NOT_AU_TFN_COUNT", + "TEXT_NOT_CREDIT_CARD_COUNT", + "TEXT_NOT_EMAIL_ADDRESS_COUNT", + "TEXT_NOT_INT_COUNT", + "TEXT_NOT_NUMBER_COUNT", + "TEXT_NOT_SSN_COUNT", + "TEXT_NOT_TIMESTAMP_COUNT", + "TEXT_NOT_US_PHONE_COUNT", + "TEXT_NOT_US_STATE_CODE_COUNT", + "TEXT_NOT_US_ZIP_CODE_COUNT", + "TEXT_NOT_UUID_COUNT", + "TEXT_NULL_KEYWORD_COUNT", + "TEXT_NULL_KEYWORD_RATE", + "TEXT_NUMBER_RATE", + "TEXT_SSN_RATE", + "TEXT_STD_LENGTH", + "TEXT_TIMESTAMP_RATE", + "TEXT_US_PHONE_RATE", + "TEXT_US_STATE_CODE_RATE", + "TEXT_US_ZIP_CODE_RATE", + "TEXT_UUID_RATE", + "TIME_SINCE_LAST_ROW_COUNT_CHANGE", + "TRUE_COUNT", + "TRUE_RATE", + "UNIQUE_COUNT", + "UNIQUE_RATE", + "UNIX_ZERO_COUNT", + "UNIX_ZERO_RATE", + "ZERO_COUNT", + "ZERO_RATE" + ] + }, + "custom_field_metric": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "alert_conditions": { "type": "array", "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "alert_conditions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "absolute_volume", - "change", - "dynamic_threshold", - "growth_volume", - "lookback", - "threshold" - ] - }, - "operator": { - "oneOf": [ - { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "threshold" + ], + "default": "threshold" + }, + "operator": { "type": "string", "enum": [ - "AUTO", "EQ", "GT", "GTE", "LT", "LTE", - "NEQ", - "OUTSIDE_RANGE" + "NEQ" ] }, - { - "type": "null" - } - ] - }, - "threshold_value": { - "oneOf": [ - { + "threshold_value": { "type": "number" - }, - { - "type": "null" } + }, + "additionalProperties": false, + "required": [ + "operator", + "threshold_value" ] }, - "baseline_agg_function": { - "oneOf": [ - { + "maxItems": 1 + }, + "filters": { + "type": "array", + "items": { + "type": "object", + "properties": { + "field": { + "type": "string" + }, + "operator": { "type": "string", "enum": [ - "AVG", - "MAX", - "MIN" + "EQ", + "GT", + "GTE", + "IS_NOT_NULL", + "IS_NULL", + "LT", + "LTE", + "NEQ" ] }, - { - "type": "null" - } - ] - }, - "baseline_interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "is_threshold_relative": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "min_buffer_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "max_buffer_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] } + }, + "additionalProperties": false, + "required": [ + "field", + "operator" ] - }, - "min_buffer_modifier_type": { - "oneOf": [ - { - "type": "string", - "enum": [ - "METRIC", - "PERCENTAGE" - ] - }, - { - "type": "null" + } + }, + "resource": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `warehouse` instead." + }, + "notify_rule_run_failure": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `notify_run_failure` instead." + }, + "domain_uuids": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" } - ] - }, - "max_buffer_modifier_type": { - "oneOf": [ - { + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `domains` instead." + }, + "comparisons": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { "type": "string", "enum": [ - "METRIC", - "PERCENTAGE" - ] - }, - { - "type": "null" - } - ] - }, - "number_of_agg_periods": { - "oneOf": [ - { - "type": "integer", - "minimum": 1, - "maximum": 1000 - }, - { - "type": "null" - } - ] - }, - "threshold_lookback_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "is_percentage_threshold": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "percentage_baseline_sql": { - "oneOf": [ - { - "type": "string" + "threshold" + ], + "default": "threshold" }, - { - "type": "null" - } - ] - }, - "threshold_sensitivity": { - "oneOf": [ - { + "operator": { "type": "string", "enum": [ - "high", - "low", - "medium" + "EQ", + "GT", + "GTE", + "LT", + "LTE", + "NEQ" ] }, - { - "type": "null" - } - ] - }, - "lower_threshold": { - "oneOf": [ - { + "threshold_value": { "type": "number" - }, - { - "type": "null" } + }, + "additionalProperties": false, + "required": [ + "operator", + "threshold_value" ] }, - "upper_threshold": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "type" - ] + "maxItems": 1, + "deprecated": true, + "description": "Deprecated: use `alert_conditions` instead." + } }, - "maxItems": 1 - }, - "volume_metric": { - "type": "string", - "enum": [ - "total_byte_count", - "total_byte_count_last_changed_on", - "total_row_count", - "total_row_count_last_changed_on" + "additionalProperties": false, + "required": [ + "schedule", + "metric_type", + "alert_conditions" ] } }, - "additionalProperties": false, - "required": [ - "alert_conditions" - ] - } - }, - "field_quality": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "connection_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "description": { - "oneOf": [ - { - "type": "string", - "maxLength": 512 - }, - { - "type": "null" - } - ] - }, - "notes": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "severity": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "priority": { - "oneOf": [ - { - "type": "string", - "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" + "table": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - }, - "labels": { - "type": "array", - "items": { - "type": "string" - } - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "event_rollup_count": { - "oneOf": [ - { - "type": "integer", - "minimum": 2 - }, - { - "type": "null" - } - ] - }, - "event_rollup_until_changed": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" + "warehouse": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } ] }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } + "name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "schedule": { - "type": "object", - "properties": { - "type": { + "description": { "type": "string", - "enum": [ - "dynamic", - "fixed", - "loose", - "manual" - ], - "default": "fixed" + "maxLength": 512 }, - "dynamic_schedule_tables": { + "notes": { "oneOf": [ { - "type": "array", - "items": { - "type": "string" - } + "type": "string" }, { "type": "null" } ] }, - "dynamic_schedule_jobs": { + "priority": { "oneOf": [ { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] + }, + { + "type": "null" + } + ] + }, + "asset_selection": { + "type": "object", + "properties": { + "databases": { "type": "array", "items": { "type": "object", "properties": { - "job_type": { - "type": "string", - "enum": [ - "AdfJob", - "AirflowDag", - "DatabricksJob", - "DbtJob" - ] - }, - "job_name": { - "type": "string" - }, - "project_name": { + "name": { "type": "string" }, - "task_name": { + "schemas": { "oneOf": [ { - "type": "string" + "type": "array", + "items": { + "type": "string" + } }, { "type": "null" } ] }, - "mcon": { + "tables": { "oneOf": [ { - "type": "string" + "type": "object" }, { "type": "null" @@ -7360,28 +9663,154 @@ }, "additionalProperties": false, "required": [ - "job_type", - "job_name", - "project_name" + "name" + ] + } + }, + "filters": { + "type": "array", + "items": {} + }, + "exclusions": { + "type": "array", + "items": {} + } + }, + "additionalProperties": false + }, + "audiences": { + "type": "array", + "items": { + "type": "string" + } + }, + "failure_audiences": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "domains": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "alert_conditions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "metric": {}, + "operator": {} + }, + "additionalProperties": false, + "required": [ + "metric" + ] + } + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } ] } }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, + { + "type": "null" + } + ] + }, + "is_draft": { + "oneOf": [ + { + "type": "boolean" + }, { "type": "null" } ] }, - "interval_minutes": { + "enable_row_count_collection": { "oneOf": [ { - "type": "integer" + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "enable_row_count_collection_limit": { + "oneOf": [ + { + "type": "integer", + "minimum": 0 }, { "type": "null" } ] }, - "interval_crontab": { + "resource": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `warehouse` instead." + }, + "domain": { "oneOf": [ { "type": "array", @@ -7392,23 +9821,34 @@ { "type": "null" } - ] - }, - "interval_crontab_day_operator": { + ], + "deprecated": true, + "description": "Deprecated: use `domains` instead." + } + }, + "additionalProperties": false, + "required": [ + "description", + "asset_selection" + ] + } + }, + "bulk_monitor": { + "type": "array", + "items": { + "type": "object", + "properties": { + "uuid": { "oneOf": [ { - "type": "string", - "enum": [ - "AND", - "OR" - ] + "type": "string" }, { "type": "null" } ] }, - "start_time": { + "warehouse": { "oneOf": [ { "type": "string" @@ -7418,7 +9858,7 @@ } ] }, - "timezone": { + "name": { "oneOf": [ { "type": "string" @@ -7427,595 +9867,310 @@ "type": "null" } ] - } - }, - "additionalProperties": false - }, - "table": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "tables": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "fields": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "metric_type": { - "type": "string", - "enum": [ - "ACCURACY", - "APPROX_DISTINCTNESS", - "APPROX_DISTINCT_COUNT", - "APPROX_QUANTILES", - "APPROX_QUANTILES0", - "APPROX_QUANTILES1", - "APPROX_QUANTILES2", - "APPROX_QUANTILES3", - "APPROX_QUANTILES4", - "APPROX_QUANTILES5", - "DUPLICATE_COUNT", - "EMPTY_STRING_COUNT", - "EMPTY_STRING_RATE", - "FALSE_COUNT", - "FALSE_RATE", - "FUTURE_TIMESTAMP_COUNT", - "FUTURE_TIMESTAMP_RATE", - "JS_DIVERGENCE", - "KS_TEST", - "MAE", - "MAPE", - "MAX_LENGTH", - "MEAN_ERROR", - "MEAN_LENGTH", - "MIN_LENGTH", - "MISSING_VALUES", - "NAN_COUNT", - "NAN_RATE", - "NEGATIVE_COUNT", - "NEGATIVE_RATE", - "NEW_VALUES", - "NON_NULL_COUNT", - "NULL_COUNT", - "NULL_RATE", - "NUMERIC_MAX", - "NUMERIC_MEAN", - "NUMERIC_MEDIAN", - "NUMERIC_MIN", - "NUMERIC_QUANTILES", - "NUMERIC_STDDEV", - "PAST_TIMESTAMP_COUNT", - "PAST_TIMESTAMP_RATE", - "PERCENTILE_20", - "PERCENTILE_40", - "PERCENTILE_60", - "PERCENTILE_80", - "PERCENTILE_95", - "PERCENTILE_99", - "PSI", - "RELATIVE_ROW_COUNT", - "RMSE", - "ROW_COUNT", - "ROW_COUNT_CHANGE", - "R_SQUARED", - "SUM", - "TEXT_ALL_SPACES_COUNT", - "TEXT_ALL_SPACES_RATE", - "TEXT_ALL_SPACE_COUNT", - "TEXT_ALL_SPACE_RATE", - "TEXT_AU_ABN_RATE", - "TEXT_AU_MEDICARE_RATE", - "TEXT_AU_PHONE_RATE", - "TEXT_AU_POSTCODE_RATE", - "TEXT_AU_TFN_RATE", - "TEXT_CREDIT_CARD_RATE", - "TEXT_EMAIL_ADDRESS_RATE", - "TEXT_INT_RATE", - "TEXT_MAX_LENGTH", - "TEXT_MEAN_LENGTH", - "TEXT_MIN_LENGTH", - "TEXT_NOT_AU_ABN_COUNT", - "TEXT_NOT_AU_MEDICARE_COUNT", - "TEXT_NOT_AU_PHONE_COUNT", - "TEXT_NOT_AU_POSTCODE_COUNT", - "TEXT_NOT_AU_TFN_COUNT", - "TEXT_NOT_CREDIT_CARD_COUNT", - "TEXT_NOT_EMAIL_ADDRESS_COUNT", - "TEXT_NOT_INT_COUNT", - "TEXT_NOT_NUMBER_COUNT", - "TEXT_NOT_SSN_COUNT", - "TEXT_NOT_TIMESTAMP_COUNT", - "TEXT_NOT_US_PHONE_COUNT", - "TEXT_NOT_US_STATE_CODE_COUNT", - "TEXT_NOT_US_ZIP_CODE_COUNT", - "TEXT_NOT_UUID_COUNT", - "TEXT_NULL_KEYWORD_COUNT", - "TEXT_NULL_KEYWORD_RATE", - "TEXT_NUMBER_RATE", - "TEXT_SSN_RATE", - "TEXT_STD_LENGTH", - "TEXT_TIMESTAMP_RATE", - "TEXT_US_PHONE_RATE", - "TEXT_US_STATE_CODE_RATE", - "TEXT_US_ZIP_CODE_RATE", - "TEXT_UUID_RATE", - "TIME_SINCE_LAST_ROW_COUNT_CHANGE", - "TRUE_COUNT", - "TRUE_RATE", - "UNIQUE_COUNT", - "UNIQUE_RATE", - "UNIX_ZERO_COUNT", - "UNIX_ZERO_RATE", - "ZERO_COUNT", - "ZERO_RATE" - ] - }, - "custom_field_metric": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "alert_conditions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "threshold" - ], - "default": "threshold" - }, - "operator": { - "type": "string", - "enum": [ - "EQ", - "GT", - "GTE", - "LT", - "LTE", - "NEQ" - ] - }, - "threshold_value": { - "type": "number" - } - }, - "additionalProperties": false, - "required": [ - "operator", - "threshold_value" - ] - }, - "maxItems": 1 - }, - "filters": { - "type": "array", - "items": { - "type": "object", - "properties": { - "field": { - "type": "string" - }, - "operator": { - "type": "string", - "enum": [ - "EQ", - "GT", - "GTE", - "IS_NOT_NULL", - "IS_NULL", - "LT", - "LTE", - "NEQ" - ] - }, - "value": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "field", - "operator" - ] - } - } - }, - "additionalProperties": false, - "required": [ - "schedule", - "metric_type", - "alert_conditions" - ] - } - }, - "table": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" + "description": { + "type": "string", + "maxLength": 512 }, - { - "type": "null" - } - ] - }, - "name": { - "oneOf": [ - { - "type": "string" + "notes": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "description": { - "type": "string", - "maxLength": 512 - }, - "notes": { - "oneOf": [ - { - "type": "string" + "priority": { + "oneOf": [ + { + "type": "string", + "enum": [ + "P1", + "P2", + "P3", + "P4", + "P5" + ] + }, + { + "type": "null" + } + ] }, - { - "type": "null" - } - ] - }, - "priority": { - "oneOf": [ - { + "monitor_type": { "type": "string", "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" + "bulk_metric", + "bulk_pii" ] }, - { - "type": "null" - } - ] - }, - "asset_selection": { - "type": "object", - "properties": { - "databases": { + "asset_selection": { + "type": "object", + "properties": { + "databases": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "schemas": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "tables": { + "oneOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "filters": { + "type": "array", + "items": {} + }, + "exclusions": { + "type": "array", + "items": {} + } + }, + "additionalProperties": false + }, + "alert_conditions": { "type": "array", "items": { "type": "object", "properties": { - "name": { - "type": "string" + "metric": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "custom_metric": { + "oneOf": [ + { + "type": "object", + "properties": { + "uuid": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "display_name": { + "type": "string" + }, + "sql_expression": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "display_name", + "sql_expression" + ] + }, + { + "type": "null" + } + ] + }, + "fields": { + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "type": "string", + "enum": [ + "noop", + "threshold" + ], + "default": "threshold" + }, + "operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AUTO", + "AUTO_HIGH", + "AUTO_LOW", + "EQ", + "GT", + "GTE", + "INSIDE_RANGE", + "LT", + "LTE", + "NEQ", + "NOOP", + "OUTSIDE_RANGE" + ] + }, + { + "type": "null" + } + ] + }, + "threshold_value": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "lower_threshold": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "upper_threshold": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "field_pattern": { + "oneOf": [ + { + "type": "object", + "properties": { + "operator": { + "type": "string", + "enum": [ + "CONTAINING", + "ENDING_WITH", + "MATCHING", + "STARTING_WITH" + ] + }, + "value": { + "type": "string" + }, + "case_sensitive": { + "type": "boolean" + }, + "field_type": { + "oneOf": [ + { + "type": "string", + "enum": [ + "BOOLEAN", + "DATE", + "NUMERIC", + "TEXT", + "TIME", + "TIME_OF_DAY" + ] + }, + { + "type": "null" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "operator", + "value" + ] + }, + { + "type": "null" + } + ] }, - "schemas": { + "baseline_trailing_days": { "oneOf": [ { - "type": "array", - "items": { - "type": "string" - } + "type": "integer", + "minimum": 1 }, { "type": "null" } ] }, - "tables": { + "baseline_start": { "oneOf": [ { - "type": "object" + "type": "string" }, { "type": "null" } ] - } - }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "filters": { - "type": "array", - "items": {} - }, - "exclusions": { - "type": "array", - "items": {} - } - }, - "additionalProperties": false - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "alert_conditions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "metric": {}, - "operator": {} - }, - "additionalProperties": false, - "required": [ - "metric" - ] - } - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { - "type": "string" }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" - ] - }, - { - "type": "null" - } - ] - }, - "enable_row_count_collection": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "enable_row_count_collection_limit": { - "oneOf": [ - { - "type": "integer", - "minimum": 0 - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "description", - "asset_selection" - ] - } - }, - "bulk_monitor": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "description": { - "type": "string", - "maxLength": 512 - }, - "notes": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "priority": { - "oneOf": [ - { - "type": "string", - "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" - ] - }, - { - "type": "null" - } - ] - }, - "monitor_type": { - "type": "string", - "enum": [ - "bulk_metric", - "bulk_pii" - ] - }, - "asset_selection": { - "type": "object", - "properties": { - "databases": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" + "baseline_end": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - "schemas": { + "num_bins": { "oneOf": [ { - "type": "array", - "items": { - "type": "string" - } + "type": "integer", + "minimum": 2, + "maximum": 1000 }, { "type": "null" } ] }, - "tables": { + "id": { "oneOf": [ { - "type": "object" + "type": "string" }, { "type": "null" @@ -8023,260 +10178,168 @@ ] } }, - "additionalProperties": false, - "required": [ - "name" - ] + "additionalProperties": false } }, - "filters": { - "type": "array", - "items": {} - }, - "exclusions": { - "type": "array", - "items": {} - } - }, - "additionalProperties": false - }, - "alert_conditions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "metric": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "custom_metric": { - "oneOf": [ - { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "display_name": { - "type": "string" - }, - "sql_expression": { + "schedule": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dynamic", + "fixed", + "loose", + "manual" + ], + "default": "fixed" + }, + "dynamic_schedule_tables": { + "oneOf": [ + { + "type": "array", + "items": { "type": "string" } }, - "additionalProperties": false, - "required": [ - "display_name", - "sql_expression" - ] - }, - { - "type": "null" - } - ] - }, - "fields": { - "type": "array", - "items": { - "type": "string" - } - }, - "type": { - "type": "string", - "enum": [ - "noop", - "threshold" - ], - "default": "threshold" - }, - "operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AUTO", - "AUTO_HIGH", - "AUTO_LOW", - "EQ", - "GT", - "GTE", - "INSIDE_RANGE", - "LT", - "LTE", - "NEQ", - "NOOP", - "OUTSIDE_RANGE" - ] - }, - { - "type": "null" - } - ] - }, - "threshold_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "lower_threshold": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "upper_threshold": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "field_pattern": { - "oneOf": [ - { - "type": "object", - "properties": { - "operator": { - "type": "string", - "enum": [ - "CONTAINING", - "ENDING_WITH", - "MATCHING", - "STARTING_WITH" - ] - }, - "value": { - "type": "string" - }, - "case_sensitive": { - "type": "boolean" - }, - "field_type": { - "oneOf": [ - { + { + "type": "null" + } + ] + }, + "dynamic_schedule_jobs": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "job_type": { "type": "string", "enum": [ - "BOOLEAN", - "DATE", - "NUMERIC", - "TEXT", - "TIME", - "TIME_OF_DAY" + "AdfJob", + "AirflowDag", + "DatabricksJob", + "DbtJob" + ] + }, + "job_name": { + "type": "string" + }, + "project_name": { + "type": "string" + }, + "task_name": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "mcon": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } ] - }, - { - "type": "null" } + }, + "additionalProperties": false, + "required": [ + "job_type", + "job_name", + "project_name" ] } }, - "additionalProperties": false, - "required": [ - "operator", - "value" - ] - }, - { - "type": "null" - } - ] - }, - "baseline_trailing_days": { - "oneOf": [ - { - "type": "integer", - "minimum": 1 - }, - { - "type": "null" - } - ] - }, - "baseline_start": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "baseline_end": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "num_bins": { - "oneOf": [ - { - "type": "integer", - "minimum": 2, - "maximum": 1000 - }, - { - "type": "null" - } - ] + { + "type": "null" + } + ] + }, + "interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "interval_crontab": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "interval_crontab_day_operator": { + "oneOf": [ + { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + { + "type": "null" + } + ] + }, + "start_time": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "timezone": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "min_interval_minutes": { + "oneOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + } }, - "id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } + "additionalProperties": false }, - "additionalProperties": false - } - }, - "schedule": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dynamic", - "fixed", - "loose", - "manual" - ], - "default": "fixed" + "audiences": { + "type": "array", + "items": { + "type": "string" + } }, - "dynamic_schedule_tables": { + "failure_audiences": { "oneOf": [ { "type": "array", @@ -8289,63 +10352,69 @@ } ] }, - "dynamic_schedule_jobs": { + "domains": { "oneOf": [ { "type": "array", "items": { - "type": "object", - "properties": { - "job_type": { - "type": "string", - "enum": [ - "AdfJob", - "AirflowDag", - "DatabricksJob", - "DbtJob" - ] - }, - "job_name": { - "type": "string" - }, - "project_name": { + "type": "string" + } + }, + { + "type": "null" + } + ] + }, + "domain_restrictions": { + "type": "array", + "items": { + "type": "string" + } + }, + "tags": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "value": { + "oneOf": [ + { "type": "string" }, - "task_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "mcon": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] + { + "type": "null" } - }, - "additionalProperties": false, - "required": [ - "job_type", - "job_name", - "project_name" ] } }, + "additionalProperties": false, + "required": [ + "name" + ] + } + }, + "data_quality_dimension": { + "oneOf": [ + { + "type": "string", + "enum": [ + "ACCURACY", + "COMPLETENESS", + "CONSISTENCY", + "TIMELINESS", + "UNIQUENESS", + "VALIDITY" + ] + }, { "type": "null" } ] }, - "interval_minutes": { + "collection_lag_hours": { "oneOf": [ { "type": "integer" @@ -8355,26 +10424,25 @@ } ] }, - "interval_crontab": { + "aggregate_time_field": { "oneOf": [ { - "type": "array", - "items": { - "type": "string" - } + "type": "string" }, { "type": "null" } ] }, - "interval_crontab_day_operator": { + "aggregate_by": { "oneOf": [ { "type": "string", "enum": [ - "AND", - "OR" + "day", + "hour", + "month", + "week" ] }, { @@ -8382,17 +10450,34 @@ } ] }, - "start_time": { + "is_draft": { + "type": "boolean", + "default": false + }, + "sampling_config": { "oneOf": [ { - "type": "string" + "type": "object", + "properties": { + "percentage": {}, + "count": {} + }, + "additionalProperties": false }, { "type": "null" } ] }, - "timezone": { + "auto_prune_enabled": { + "type": "boolean", + "default": false + }, + "lineage_narrowing_enabled": { + "type": "boolean", + "default": false + }, + "resource": { "oneOf": [ { "type": "string" @@ -8400,156 +10485,38 @@ { "type": "null" } - ] - } - }, - "additionalProperties": false - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } + ], + "deprecated": true, + "description": "Deprecated: use `warehouse` instead." }, - { - "type": "null" - } - ] - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { + "domain": { + "oneOf": [ + { + "type": "array", + "items": { "type": "string" - }, - { - "type": "null" } - ] - } - }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" - ] - }, - { - "type": "null" - } - ] - }, - "collection_lag_hours": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "aggregate_time_field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "aggregate_by": { - "oneOf": [ - { - "type": "string", - "enum": [ - "day", - "hour", - "month", - "week" - ] - }, - { - "type": "null" - } - ] - }, - "sampling_config": { - "oneOf": [ - { - "type": "object", - "properties": { - "percentage": {}, - "count": {} - }, - "additionalProperties": false - }, - { - "type": "null" + }, + { + "type": "null" + } + ], + "deprecated": true, + "description": "Deprecated: use `domains` instead." } + }, + "additionalProperties": false, + "required": [ + "description", + "monitor_type", + "asset_selection", + "alert_conditions", + "schedule" ] - }, - "auto_prune_enabled": { - "type": "boolean", - "default": false - }, - "lineage_narrowing_enabled": { - "type": "boolean", - "default": false } - }, - "additionalProperties": false, - "required": [ - "description", - "monitor_type", - "asset_selection", - "alert_conditions", - "schedule" - ] - } + } + }, + "additionalProperties": false } - }, - "additionalProperties": false + } } diff --git a/skills/manage-mac/SKILL.md b/skills/manage-mac/SKILL.md index 17bd561..f91ce41 100644 --- a/skills/manage-mac/SKILL.md +++ b/skills/manage-mac/SKILL.md @@ -153,6 +153,8 @@ For each monitor in the file, validate: 4. **Type correctness:** string fields are strings, integer fields are integers, etc. 5. **Top-level structure:** root key is `montecarlo:`, monitor type keys are one of the 14 valid types +**Schema scope disclaimer:** The schema validates field names, types, and enum values only. Cross-field semantic constraints (e.g. required field combinations, mutually exclusive options, fields that are only valid together with another field) are NOT checked here — they are enforced by the Monte Carlo backend at apply time. A file that passes schema validation may still be rejected by `montecarlo monitors apply`. + ### Step 3: Report findings If the file is valid: diff --git a/skills/monitoring-advisor/references/data-monitor-creation.md b/skills/monitoring-advisor/references/data-monitor-creation.md index abe9701..623813f 100644 --- a/skills/monitoring-advisor/references/data-monitor-creation.md +++ b/skills/monitoring-advisor/references/data-monitor-creation.md @@ -216,6 +216,8 @@ A local copy of the schema is available at `../../schemas/mac-schema.json` (rela Generated YAML must not include fields that don't appear in the schema for that monitor type. Unknown fields are silently ignored by the CLI but indicate a misconfiguration and may break future validation. +**Schema scope:** The schema validates field names, types, and enum values only. Cross-field semantic constraints (e.g. required field combinations, mutually exclusive options, conditional required fields) are NOT checked by the schema — they are enforced by the Monte Carlo backend at apply time. A file that passes schema validation may still fail on `montecarlo monitors apply`. + --- ## Available MCP Tools diff --git a/skills/tune-monitor/SKILL.md b/skills/tune-monitor/SKILL.md index 4eb0893..324caa6 100644 --- a/skills/tune-monitor/SKILL.md +++ b/skills/tune-monitor/SKILL.md @@ -234,7 +234,7 @@ Phase 1.5. Each reference specifies the correct tool and constraints for that mo General rules for all types: 1. **Always preview first** — show the user what will change before applying. 2. **Get explicit confirmation** before applying any change. -3. **Validate the preview YAML against the schema** — before presenting the preview YAML to the user, check it against `../../schemas/mac-schema.json` (relative to this file). If any field in the YAML does not appear in the schema for the given monitor type, flag it and correct it. +3. **Validate the preview YAML against the schema** — before presenting the preview YAML to the user, check it against `../../schemas/mac-schema.json` (relative to this file). If any field in the YAML does not appear in the schema for the given monitor type, flag it and correct it. Note: the schema validates field names, types, and enum values only — cross-field semantic constraints are enforced by the backend at apply time, not by the schema. --- From cab1ded5a8e7b58322c8b2063d87a9690d8b4504 Mon Sep 17 00:00:00 2001 From: wdeka Date: Wed, 20 May 2026 12:17:49 +0200 Subject: [PATCH 05/19] fix: update schema (no false-positive required errors) and add deprecated field migration guidance MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Rebundle mac-schema.json: fields with deprecated aliases no longer in required, canonical fields carry description pointing to old name for bidirectional agent lookup - manage-mac: add deprecated field migration workflow — agent proactively lists all deprecated fields found and offers to migrate after explicit user confirmation Co-Authored-By: Claude Sonnet 4.6 --- schemas/mac-schema.json | 146 +++++++++++++++++++++++-------------- skills/manage-mac/SKILL.md | 8 +- 2 files changed, 99 insertions(+), 55 deletions(-) diff --git a/schemas/mac-schema.json b/schemas/mac-schema.json index 67ce190..efafb54 100644 --- a/schemas/mac-schema.json +++ b/schemas/mac-schema.json @@ -33,7 +33,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `resource`." }, "name": { "oneOf": [ @@ -559,7 +560,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `notify_rule_run_failure`." }, "severity": { "oneOf": [ @@ -681,7 +683,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `domain_uuids`." }, "is_draft": { "oneOf": [ @@ -981,7 +984,8 @@ } }, "additionalProperties": false - } + }, + "description": "Use this field. Replaces the deprecated `comparisons`." }, "min_segment_size": { "oneOf": [ @@ -1300,7 +1304,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `resource`." }, "name": { "oneOf": [ @@ -1819,7 +1824,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `notify_rule_run_failure`." }, "severity": { "oneOf": [ @@ -1941,7 +1947,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `domain_uuids`." }, "is_draft": { "oneOf": [ @@ -2039,7 +2046,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `resource`." }, "name": { "oneOf": [ @@ -2558,7 +2566,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `notify_rule_run_failure`." }, "severity": { "oneOf": [ @@ -2680,7 +2689,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `domain_uuids`." }, "is_draft": { "oneOf": [ @@ -2775,7 +2785,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `resource`." }, "name": { "type": "string" @@ -3545,7 +3556,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `notify_rule_run_failure`." }, "audiences": { "type": "array", @@ -3637,7 +3649,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `domain_uuids`." }, "is_draft": { "oneOf": [ @@ -3752,7 +3765,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `resource`." }, "name": { "type": "string" @@ -4623,7 +4637,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `notify_rule_run_failure`." }, "audiences": { "type": "array", @@ -4715,7 +4730,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `domain_uuids`." }, "is_draft": { "oneOf": [ @@ -4806,7 +4822,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `resource`." }, "name": { "oneOf": [ @@ -4909,7 +4926,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `notify_rule_run_failure`." }, "event_rollup_count": { "oneOf": [ @@ -4996,7 +5014,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `domain_uuids`." }, "is_draft": { "oneOf": [ @@ -5388,7 +5407,8 @@ }, "additionalProperties": false }, - "maxItems": 1 + "maxItems": 1, + "description": "Use this field. Replaces the deprecated `comparisons`." }, "query_result_type": { "oneOf": [ @@ -5691,8 +5711,7 @@ "additionalProperties": false, "required": [ "schedule", - "sql", - "alert_conditions" + "sql" ] } }, @@ -5719,7 +5738,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `resource`." }, "name": { "oneOf": [ @@ -5822,7 +5842,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `notify_rule_run_failure`." }, "event_rollup_count": { "oneOf": [ @@ -5909,7 +5930,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `domain_uuids`." }, "is_draft": { "oneOf": [ @@ -6439,7 +6461,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `resource`." }, "name": { "oneOf": [ @@ -6542,7 +6565,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `notify_rule_run_failure`." }, "event_rollup_count": { "oneOf": [ @@ -6629,7 +6653,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `domain_uuids`." }, "is_draft": { "oneOf": [ @@ -6978,7 +7003,8 @@ }, "additionalProperties": false }, - "maxItems": 1 + "maxItems": 1, + "description": "Use this field. Replaces the deprecated `comparisons`." }, "source_connection_name": { "oneOf": [ @@ -7216,8 +7242,7 @@ "source_resource", "target_resource", "source_sql", - "target_sql", - "alert_conditions" + "target_sql" ] } }, @@ -7244,7 +7269,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `resource`." }, "name": { "oneOf": [ @@ -7367,7 +7393,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `domain_uuids`." }, "selection": { "oneOf": [ @@ -7495,7 +7522,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `resource`." }, "name": { "oneOf": [ @@ -7598,7 +7626,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `notify_rule_run_failure`." }, "event_rollup_count": { "oneOf": [ @@ -7685,7 +7714,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `domain_uuids`." }, "is_draft": { "oneOf": [ @@ -7980,7 +8010,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `resource`." }, "name": { "oneOf": [ @@ -8083,7 +8114,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `notify_rule_run_failure`." }, "event_rollup_count": { "oneOf": [ @@ -8170,7 +8202,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `domain_uuids`." }, "is_draft": { "oneOf": [ @@ -8576,7 +8609,8 @@ "type" ] }, - "maxItems": 1 + "maxItems": 1, + "description": "Use this field. Replaces the deprecated `comparisons`." }, "volume_metric": { "type": "string", @@ -8853,10 +8887,7 @@ "description": "Deprecated: use `alert_conditions` instead." } }, - "additionalProperties": false, - "required": [ - "alert_conditions" - ] + "additionalProperties": false } }, "field_quality": { @@ -8882,7 +8913,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `resource`." }, "name": { "oneOf": [ @@ -8985,7 +9017,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `notify_rule_run_failure`." }, "event_rollup_count": { "oneOf": [ @@ -9072,7 +9105,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `domain_uuids`." }, "is_draft": { "oneOf": [ @@ -9434,7 +9468,8 @@ "threshold_value" ] }, - "maxItems": 1 + "maxItems": 1, + "description": "Use this field. Replaces the deprecated `comparisons`." }, "filters": { "type": "array", @@ -9555,8 +9590,7 @@ "additionalProperties": false, "required": [ "schedule", - "metric_type", - "alert_conditions" + "metric_type" ] } }, @@ -9583,7 +9617,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `resource`." }, "name": { "oneOf": [ @@ -9708,7 +9743,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `domain`." }, "alert_conditions": { "type": "array", @@ -9856,7 +9892,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `resource`." }, "name": { "oneOf": [ @@ -10363,7 +10400,8 @@ { "type": "null" } - ] + ], + "description": "Use this field. Replaces the deprecated `domain`." }, "domain_restrictions": { "type": "array", diff --git a/skills/manage-mac/SKILL.md b/skills/manage-mac/SKILL.md index f91ce41..69a44be 100644 --- a/skills/manage-mac/SKILL.md +++ b/skills/manage-mac/SKILL.md @@ -157,7 +157,7 @@ For each monitor in the file, validate: ### Step 3: Report findings -If the file is valid: +If the file is valid with no deprecated fields: > The file is valid. All monitors conform to the MaC schema. > Apply with: `montecarlo monitors apply --namespace ` @@ -167,6 +167,12 @@ If the file has issues, report each one with: - The specific problem (missing field, unknown field, invalid enum value, wrong type) - The fix +**Deprecated field handling:** The schema marks legacy field names with `deprecated: true` and a `description` of the form `"Deprecated: use \`\` instead."` The corresponding canonical field carries `"description": "Use this field. Replaces the deprecated \`\`."` When you encounter deprecated fields during validation or editing, proactively offer to migrate them: + +> Found deprecated field(s): `comparisons` → should be `alert_conditions`. The file will still deploy successfully (the backend accepts both names), but migrating now avoids future breakage. Want me to update the file? + +Always apply the migration only after explicit user confirmation. List all deprecated fields found before asking, not one at a time. + Example report format: ``` From 772ba8e3e6bab386b982cc77048570cfc3584d91 Mon Sep 17 00:00:00 2001 From: wdeka Date: Wed, 20 May 2026 13:32:20 +0200 Subject: [PATCH 06/19] feat(manage-mac): add import workflow, dbt co-location fix, and type-specific authoring guidance - Add import workflow using get_monitors(config_format="yaml") - Fix validate check #5: allow extra top-level keys for dbt co-location - Add inline validation.alert_condition predicate tree example (schema gives no structure) - Add metric.data_source structure note (no flat table field) - Add auto threshold callout: operator AUTO/AUTO_HIGH/AUTO_LOW, alert_conditions required - Add sensitivity lowercase enum callout - Regenerate mac-schema.json with description hoisting and notifications: key - Add MaC deployment fork to monitoring-advisor data-monitor-creation.md Co-Authored-By: Claude Sonnet 4.6 --- schemas/mac-schema.json | 3 + skills/manage-mac/SKILL.md | 85 ++++++++++++++++++- .../references/data-monitor-creation.md | 11 +++ 3 files changed, 95 insertions(+), 4 deletions(-) diff --git a/schemas/mac-schema.json b/schemas/mac-schema.json index efafb54..a5c7657 100644 --- a/schemas/mac-schema.json +++ b/schemas/mac-schema.json @@ -10552,6 +10552,9 @@ "schedule" ] } + }, + "notifications": { + "description": "Notifications-as-Code (NaC) configuration block. Structure is not validated by this schema \u2014 it is handled separately by the NaC pipeline." } }, "additionalProperties": false diff --git a/skills/manage-mac/SKILL.md b/skills/manage-mac/SKILL.md index 69a44be..c9b8feb 100644 --- a/skills/manage-mac/SKILL.md +++ b/skills/manage-mac/SKILL.md @@ -34,6 +34,7 @@ Determine which workflow applies based on the user's request: | No existing file; wants monitors for a table or use case | **Create** | | Has an existing file; wants to add, modify, or remove monitors | **Edit** | | Has an existing file; wants to check it before applying | **Validate** | +| Wants to export live monitors into a MaC YAML file | **Import** | If the intent is ambiguous, ask: "Do you have an existing MaC YAML file, or should I create a new one?" @@ -62,8 +63,38 @@ The top-level structure under `montecarlo:` contains these monitor type keys: - `custom_sql`, `validation`, `comparison`, `query_performance` - `freshness`, `volume`, `field_quality`, `table`, `bulk_monitor` -Each key maps to an array of monitor objects. The schema's `items` for each key defines what fields -are valid, which are required, and what enum values are accepted. +The `notifications:` key is also valid under `montecarlo:` — it is the Notifications-as-Code (NaC) +block and is handled by a separate pipeline. Do not validate or modify its contents. + +Each monitor type key maps to an array of monitor objects. The schema's `items` for each key +defines what fields are valid, which are required, and what enum values are accepted. + +**Type-specific notes:** + +`metric` monitors use a nested `data_source` object — there is no flat `table` field at the top +level. The schema shows `data_source.table` (and optionally `data_source.schema`, +`data_source.dataset`). `alert_conditions` is always required on `metric` monitors. + +`validation` monitors have an `alert_condition` field whose internal structure is a predicate +tree not further described by the schema. The minimal valid structure is: + +```yaml +alert_condition: + type: GROUP + operator: AND + conditions: + - type: BINARY + predicate: + name: not_null + negated: false + left: + - type: FIELD + field: column_name +``` + +Common predicate names: `not_null`, `is_not_empty`, `starts_with`, `ends_with`, `contains`, +`in_set`, `regex_match`, `greater_than`, `less_than`, `greater_than_or_equal`, +`less_than_or_equal`. For the full catalog, use the `get_validation_predicates` MCP tool. --- @@ -97,6 +128,13 @@ Generate a well-formed YAML file: that the user has specified or that materially improve the monitor 5. Use exact field names from the schema — no invented names, no camelCase variants +> **Auto threshold:** To use ML-based auto thresholds, set `operator: AUTO`, `AUTO_HIGH`, or +> `AUTO_LOW` inside an `alert_conditions` item. Do not omit `alert_conditions` to imply +> auto — the field is required on `metric` monitors and must always be present. + +> **`sensitivity` enum:** The `sensitivity` field accepts lowercase values only: `high`, +> `medium`, `low`. Values like `HIGH` or `Medium` are invalid. + ### Step 3: Tell the user how to apply After presenting the YAML, give the apply command: @@ -149,9 +187,11 @@ For each monitor in the file, validate: 1. **Required fields present:** every field marked `required` in the schema items is present 2. **No unknown fields:** no field names that don't appear in the schema for that monitor type -3. **Enum values valid:** any field with an `enum` constraint uses one of the listed values +3. **Enum values valid:** any field with an `enum` constraint uses one of the listed values. + Note that string enums in MaC are case-sensitive and typically lowercase — for example, + `sensitivity` accepts `high`/`medium`/`low`, not `HIGH`/`MEDIUM`/`LOW`. 4. **Type correctness:** string fields are strings, integer fields are integers, etc. -5. **Top-level structure:** root key is `montecarlo:`, monitor type keys are one of the 14 valid types +5. **Top-level structure:** `montecarlo:` key must be present; its sub-keys must be one of the 14 valid monitor types or `notifications:`. MaC files may be co-located inside dbt `schema.yml` alongside `version:`, `models:`, etc. — extra top-level keys are allowed and must not be flagged as errors. **Schema scope disclaimer:** The schema validates field names, types, and enum values only. Cross-field semantic constraints (e.g. required field combinations, mutually exclusive options, fields that are only valid together with another field) are NOT checked here — they are enforced by the Monte Carlo backend at apply time. A file that passes schema validation may still be rejected by `montecarlo monitors apply`. @@ -196,6 +236,43 @@ Do not stop at the first error — report all issues found in a single pass. --- +## Import workflow + +Use this when the user wants to export live monitors (created via the UI or API) into a MaC YAML file. + +### Step 1: Identify the source + +Ask what to import: +- A specific table: "Which table? Provide the full name (database.schema.table)" +- A namespace or group: "Any filters? (table name pattern, monitor type, namespace)" + +### Step 2: Fetch monitors using MCP + +Call `get_monitors` with `config_format="yaml"` — this returns monitors already formatted as MaC YAML blocks: + +``` +get_monitors(full_table_id="database.schema.table", config_format="yaml") +``` + +For broader imports, call without `full_table_id` and filter by other criteria. + +### Step 3: Assemble the YAML file + +1. Group returned monitors by type under a single `montecarlo:` block +2. Add the yaml-language-server header comment as the first line +3. Prompt the user for the `namespace` to use with `montecarlo monitors apply` +4. If the same monitor appears under multiple names, deduplicate + +### Step 4: Present and save + +Show the assembled file and offer to save it. Remind the user: + +> These monitors are now defined in your repo. Once you run `montecarlo monitors apply`, +> Monte Carlo will manage them as MaC resources and they will be identified by their `name` field. +> Any future edits to these monitors should be made in this file, not in the UI. + +--- + ## File format rules - Always include the `# yaml-language-server: $schema=...` comment as the first line diff --git a/skills/monitoring-advisor/references/data-monitor-creation.md b/skills/monitoring-advisor/references/data-monitor-creation.md index 623813f..c7c6fa7 100644 --- a/skills/monitoring-advisor/references/data-monitor-creation.md +++ b/skills/monitoring-advisor/references/data-monitor-creation.md @@ -121,6 +121,17 @@ Before calling the creation tool, present the monitor configuration in plain lan Ask: "Does this look correct? I'll generate the monitor configuration." +Also ask how the user wants to deploy it: + +> **Deployment preference:** Deploy live now (via MCP), or save as a Monitors-as-Code YAML file to apply through your repo? +> +> - **Live (MCP):** I'll call the creation tool and the monitor will be active immediately. +> - **MaC YAML:** I'll generate the YAML definition so you can commit it to your repo and apply it with `montecarlo monitors apply`. Use `/monte-carlo-manage-mac` if you want to validate or edit the file first. + +If the user chooses MaC YAML: generate the preview YAML (dry_run=True) as usual, present it wrapped in the standard MaC structure (see MaC YAML Format), and stop -- do not call with `dry_run=False`. The user takes the YAML from there. + +If the user chooses live or does not express a preference, proceed with the standard two-call sequence in Step 7. + ### Step 7: Create the monitor This step is a **two-call sequence**. Do NOT skip the preview call. From 99c471861a94566d41ef13fd6657207dcf589f27 Mon Sep 17 00:00:00 2001 From: wdeka Date: Wed, 20 May 2026 13:39:03 +0200 Subject: [PATCH 07/19] fix(manage-mac): address P1 findings from skill test run MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Scope sensitivity field to metric monitors only (not valid on custom_sql) - Add audiences vs notifications: NaC distinction to Phase 0 - Add description to metric required fields list in Phase 0 - Expand validation template to include all required fields (data_source, schedule) - Note alert_condition singular vs alert_conditions plural on validation - Fix validate example: full_table_id → description (field that actually exists); move sensitivity typo example to metric type; add custom_sql sensitivity as wrong-type example - Edit workflow: Add instruction directs to Create workflow field-gathering steps; Remove instruction handles empty list by removing the type key Co-Authored-By: Claude Sonnet 4.6 --- skills/manage-mac/SKILL.md | 71 ++++++++++++++++++++++++-------------- 1 file changed, 46 insertions(+), 25 deletions(-) diff --git a/skills/manage-mac/SKILL.md b/skills/manage-mac/SKILL.md index c9b8feb..d4af4c5 100644 --- a/skills/manage-mac/SKILL.md +++ b/skills/manage-mac/SKILL.md @@ -71,25 +71,39 @@ defines what fields are valid, which are required, and what enum values are acce **Type-specific notes:** -`metric` monitors use a nested `data_source` object — there is no flat `table` field at the top -level. The schema shows `data_source.table` (and optionally `data_source.schema`, -`data_source.dataset`). `alert_conditions` is always required on `metric` monitors. +`metric` monitors use a nested `data_source` object — there is no flat `table` field at the +top level. The schema shows `data_source.table` (and optionally `data_source.schema`, +`data_source.dataset`). Required fields: `name`, `description`, `data_source`, +`alert_conditions`. -`validation` monitors have an `alert_condition` field whose internal structure is a predicate -tree not further described by the schema. The minimal valid structure is: +`sensitivity` is a field only on `metric` monitors. It is not a valid field on `custom_sql`, +`field_health`, or any other monitor type. + +Per-monitor audience wiring uses the `audiences` field (array of strings) directly on the +monitor object. This is distinct from the top-level `notifications:` NaC block — do not +confuse them. + +`validation` monitors have an `alert_condition` field (singular — not `alert_conditions`) +whose internal structure is a predicate tree not described further by the schema. The minimal +valid structure including all required fields is: ```yaml -alert_condition: - type: GROUP - operator: AND - conditions: - - type: BINARY - predicate: - name: not_null - negated: false - left: - - type: FIELD - field: column_name +- name: email_not_null + data_source: + table: db.schema.table + schedule: + type: fixed + alert_condition: + type: GROUP + operator: AND + conditions: + - type: BINARY + predicate: + name: not_null + negated: false + left: + - type: FIELD + field: email ``` Common predicate names: `not_null`, `is_not_empty`, `starts_with`, `ends_with`, `contains`, @@ -159,12 +173,15 @@ Use the Read tool to load the user's file. If no path is provided, ask for it. Identify what the user wants to do: -- **Add** a monitor: determine the type, gather required fields, append to the correct type list +- **Add** a monitor: determine the type, then follow the same field-gathering and authoring + steps as the Create workflow (Step 1 and Step 2) — ask for required fields not already + provided, derive them from the schema, then append the new block to the correct type list - **Modify** a monitor: locate the target monitor by name or table, apply the specified changes -- **Remove** a monitor: locate and delete the target monitor object +- **Remove** a monitor: locate and delete the target monitor object. If it is the only item in + its type list, remove the entire type key as well — do not leave an empty list -For additions and modifications, cross-reference the schema to confirm field names and values are -valid. +For additions and modifications, cross-reference the schema to confirm field names and values +are valid. ### Step 3: Apply the change and present the diff @@ -218,15 +235,19 @@ Example report format: ``` Validation issues found: -1. metric[0] ("orders_freshness_check") - - Missing required field: `full_table_id` - - Fix: add `full_table_id: "database.schema.orders"` +1. metric[0] ("orders_row_count") + - Missing required field: `description` + - Fix: add `description: "Row count for orders table"` -2. custom_sql[1] (unnamed) +2. metric[1] ("null_rate_check") - Unknown field: `sensivity` (did you mean `sensitivity`?) - Fix: rename to `sensitivity` -3. validation[0] ("null_check") +3. custom_sql[0] ("status_check") + - Unknown field: `sensitivity` + - Fix: remove this field — `sensitivity` is only valid on `metric` monitors + +4. validation[0] ("null_check") - Invalid enum value for `condition_operator`: "EQUALS" - Valid values: [see schema for the full list] - Fix: use one of the valid enum values From 8addbee40df6b6e1357f39ddae1c7917baed831b Mon Sep 17 00:00:00 2001 From: wdeka Date: Wed, 20 May 2026 13:46:25 +0200 Subject: [PATCH 08/19] fix(manage-mac): address P0/P1 findings from final test run - P0: Add explicit notes that query_performance and table monitor type do not have a flat table: field (use selection/asset_selection instead) - P1: Scope AUTO/AUTO_HIGH/AUTO_LOW operator callout to metric monitors only; note custom_sql and field_quality use GT/LT/GTE/LTE/EQ/NEQ - P1: Wire deprecated field detection into Edit workflow Step 2 - P2: Update ambiguous-intent fallback question to surface Import workflow - P2: Make Import Step 3 namespace prompt conditional (mirrors Create Step 3) Co-Authored-By: Claude Sonnet 4.6 --- skills/manage-mac/SKILL.md | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/skills/manage-mac/SKILL.md b/skills/manage-mac/SKILL.md index d4af4c5..3d4d8e1 100644 --- a/skills/manage-mac/SKILL.md +++ b/skills/manage-mac/SKILL.md @@ -36,7 +36,8 @@ Determine which workflow applies based on the user's request: | Has an existing file; wants to check it before applying | **Validate** | | Wants to export live monitors into a MaC YAML file | **Import** | -If the intent is ambiguous, ask: "Do you have an existing MaC YAML file, or should I create a new one?" +If the intent is ambiguous, ask: +> "Do you have an existing MaC YAML file, or should I create a new one? Or do you want to export your live monitors into a MaC file?" --- @@ -79,6 +80,14 @@ top level. The schema shows `data_source.table` (and optionally `data_source.sch `sensitivity` is a field only on `metric` monitors. It is not a valid field on `custom_sql`, `field_health`, or any other monitor type. +`query_performance` monitors do NOT have a `table` field. Asset targeting uses a `selection` +array of filter objects, not a direct table reference. Do not add `table:` to a +`query_performance` monitor. + +The `table` monitor type (key: `table`) does NOT have a flat `table` field either — assets are +targeted via the `asset_selection` object (`databases`, `filters`, `exclusions`). The name +coincidence is a common confusion point. + Per-monitor audience wiring uses the `audiences` field (array of strings) directly on the monitor object. This is distinct from the top-level `notifications:` NaC block — do not confuse them. @@ -142,9 +151,11 @@ Generate a well-formed YAML file: that the user has specified or that materially improve the monitor 5. Use exact field names from the schema — no invented names, no camelCase variants -> **Auto threshold:** To use ML-based auto thresholds, set `operator: AUTO`, `AUTO_HIGH`, or -> `AUTO_LOW` inside an `alert_conditions` item. Do not omit `alert_conditions` to imply -> auto — the field is required on `metric` monitors and must always be present. +> **Auto threshold (`metric` only):** To use ML-based auto thresholds on `metric` monitors, +> set `operator: AUTO`, `AUTO_HIGH`, or `AUTO_LOW` inside an `alert_conditions` item. Do not +> omit `alert_conditions` to imply auto — the field is required and must always be present. +> `custom_sql`, `field_quality`, and other monitor types do NOT support `AUTO` operators — +> use `GT`, `LT`, `GTE`, `LTE`, `EQ`, or `NEQ` for those types. > **`sensitivity` enum:** The `sensitivity` field accepts lowercase values only: `high`, > `medium`, `low`. Values like `HIGH` or `Medium` are invalid. @@ -183,6 +194,10 @@ Identify what the user wants to do: For additions and modifications, cross-reference the schema to confirm field names and values are valid. +While reading the file, also check for deprecated field names (marked `deprecated: true` in +the schema). If found, follow the deprecated field handling procedure in the Validate section +before applying changes. + ### Step 3: Apply the change and present the diff Show the user only what changed — either the before/after for a modified block or the new block @@ -281,7 +296,7 @@ For broader imports, call without `full_table_id` and filter by other criteria. 1. Group returned monitors by type under a single `montecarlo:` block 2. Add the yaml-language-server header comment as the first line -3. Prompt the user for the `namespace` to use with `montecarlo monitors apply` +3. If the user has not provided a namespace, prompt them for one to use with `montecarlo monitors apply` 4. If the same monitor appears under multiple names, deduplicate ### Step 4: Present and save From 68c5e1768411160d2d5b9617cbf689f44972c994 Mon Sep 17 00:00:00 2001 From: wdeka Date: Wed, 20 May 2026 13:54:30 +0200 Subject: [PATCH 09/19] fix(manage-mac): fix disambiguation question, add binary predicate docs, add import triggers - Expand ambiguous-intent fallback to list all 4 workflows explicitly (Create / Edit / Validate / Import) - Document binary predicate right-side value node requirement for starts_with, regex_match, etc. - Add Import example triggers to when_to_use frontmatter Co-Authored-By: Claude Sonnet 4.6 --- skills/manage-mac/SKILL.md | 40 +++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/skills/manage-mac/SKILL.md b/skills/manage-mac/SKILL.md index 3d4d8e1..507f306 100644 --- a/skills/manage-mac/SKILL.md +++ b/skills/manage-mac/SKILL.md @@ -2,11 +2,13 @@ name: monte-carlo-manage-mac description: Author, edit, and validate Monitors-as-Code YAML files. Reads the MaC schema to ensure correctness. Handles create, edit, and validate entry points for any of the 14 monitor types. when_to_use: | - Invoke when the user has a MaC YAML file they want to create, edit, or validate. + Invoke when the user has a MaC YAML file they want to create, edit, or validate, or when they + want to export live monitors into a MaC YAML file. Example triggers: "create a monitors YAML for this table", "add a metric monitor to my MaC file", - "validate my monitors.yaml before I apply it", "what's wrong with my MaC file". + "validate my monitors.yaml before I apply it", "what's wrong with my MaC file", + "export my existing monitors to YAML", "get my monitors into a file so I can commit them". Do NOT invoke when the user wants to discover what to monitor or generate monitors from scratch - via table exploration — use monitoring-advisor for that. The entry point here is always the file. + via table exploration — use monitoring-advisor for that. bucket: Monitoring version: 1.0.0 --- @@ -37,7 +39,11 @@ Determine which workflow applies based on the user's request: | Wants to export live monitors into a MaC YAML file | **Import** | If the intent is ambiguous, ask: -> "Do you have an existing MaC YAML file, or should I create a new one? Or do you want to export your live monitors into a MaC file?" +> "Which workflow do you need? +> 1. **Create** — no existing file; generate a new monitors YAML from scratch +> 2. **Edit** — you have a file and want to add, modify, or remove monitors +> 3. **Validate** — you have a file and want to check it before applying +> 4. **Import** — export live monitors from Monte Carlo into a new YAML file" --- @@ -119,6 +125,20 @@ Common predicate names: `not_null`, `is_not_empty`, `starts_with`, `ends_with`, `in_set`, `regex_match`, `greater_than`, `less_than`, `greater_than_or_equal`, `less_than_or_equal`. For the full catalog, use the `get_validation_predicates` MCP tool. +**Binary predicates require a `right` value node.** Predicates that compare a field against a +literal (`starts_with`, `ends_with`, `contains`, `in_set`, `regex_match`, `greater_than`, etc.) +need both a `left` (the field) and a `right` (the comparison value). Unary predicates +(`not_null`, `is_not_empty`) take only `left`. Example with `starts_with`: + +```yaml + left: + - type: FIELD + field: email + right: + - type: VALUE + value: "user@" +``` + --- ## Create workflow @@ -151,11 +171,13 @@ Generate a well-formed YAML file: that the user has specified or that materially improve the monitor 5. Use exact field names from the schema — no invented names, no camelCase variants -> **Auto threshold (`metric` only):** To use ML-based auto thresholds on `metric` monitors, -> set `operator: AUTO`, `AUTO_HIGH`, or `AUTO_LOW` inside an `alert_conditions` item. Do not -> omit `alert_conditions` to imply auto — the field is required and must always be present. -> `custom_sql`, `field_quality`, and other monitor types do NOT support `AUTO` operators — -> use `GT`, `LT`, `GTE`, `LTE`, `EQ`, or `NEQ` for those types. +> **Auto threshold:** To use ML-based auto thresholds, set `operator: AUTO`, `AUTO_HIGH`, or +> `AUTO_LOW` inside an `alert_conditions` item. This is valid on `metric`, `custom_sql`, +> `volume`, and other types that include `AUTO` in their operator enum — always verify in the +> schema for the specific monitor type. Do not omit `alert_conditions` to imply auto — on +> `metric` monitors the field is required and must always be present. +> `field_quality` does NOT support `AUTO` operators — use `GT`, `LT`, `GTE`, `LTE`, `EQ`, +> or `NEQ` for that type. > **`sensitivity` enum:** The `sensitivity` field accepts lowercase values only: `high`, > `medium`, `low`. Values like `HIGH` or `Medium` are invalid. From ab1514fd630e71876edebf29a4681e5102417170 Mon Sep 17 00:00:00 2001 From: wdeka Date: Wed, 20 May 2026 14:01:27 +0200 Subject: [PATCH 10/19] fix(manage-mac): add import/export example triggers to when_to_use frontmatter Co-Authored-By: Claude Sonnet 4.6 --- skills/manage-mac/SKILL.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/skills/manage-mac/SKILL.md b/skills/manage-mac/SKILL.md index 507f306..b480622 100644 --- a/skills/manage-mac/SKILL.md +++ b/skills/manage-mac/SKILL.md @@ -6,7 +6,8 @@ when_to_use: | want to export live monitors into a MaC YAML file. Example triggers: "create a monitors YAML for this table", "add a metric monitor to my MaC file", "validate my monitors.yaml before I apply it", "what's wrong with my MaC file", - "export my existing monitors to YAML", "get my monitors into a file so I can commit them". + "export my existing monitors to YAML", "get my monitors into a file so I can commit them", + "import my live monitors to YAML", "get a MaC file from my existing monitors". Do NOT invoke when the user wants to discover what to monitor or generate monitors from scratch via table exploration — use monitoring-advisor for that. bucket: Monitoring From ae68a33e9324a5653aba1acd9a81069e51208132 Mon Sep 17 00:00:00 2001 From: wdeka Date: Wed, 20 May 2026 14:14:40 +0200 Subject: [PATCH 11/19] refactor(manage-mac): use published schema URL, align CHANGELOG descriptions, add tune-monitor awareness MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove bundled schemas/mac-schema.json; all skills now fetch from https://docs.getmontecarlo.com/mac/schema.json via WebFetch — no manual sync required - Update manage-mac SKILL.md: Phase 0 uses WebFetch, frontmatter description reflects all 4 workflows (create/edit/validate/import), graceful degradation updated - Update tune-monitor Phase 5: schema validation uses published URL; new step warns that API changes to MaC-managed monitors will be overwritten on next apply and offers /manage-mac edit workflow as the correct path - Update data-monitor-creation.md schema reference to published URL - Update all 5 plugin CHANGELOGs: consistent /manage-mac description (create/edit/validate/import), remove stale "bundled locally" line Co-Authored-By: Claude Sonnet 4.6 --- plugins/claude-code/CHANGELOG.md | 5 +- plugins/codex/CHANGELOG.md | 5 +- plugins/copilot/CHANGELOG.md | 5 +- plugins/cursor/CHANGELOG.md | 5 +- plugins/opencode/CHANGELOG.md | 5 +- schemas/mac-schema.json | 10563 ---------------- skills/manage-mac/SKILL.md | 26 +- .../references/data-monitor-creation.md | 2 +- skills/tune-monitor/SKILL.md | 3 +- 9 files changed, 29 insertions(+), 10590 deletions(-) delete mode 100644 schemas/mac-schema.json diff --git a/plugins/claude-code/CHANGELOG.md b/plugins/claude-code/CHANGELOG.md index 546e3c8..e049830 100644 --- a/plugins/claude-code/CHANGELOG.md +++ b/plugins/claude-code/CHANGELOG.md @@ -9,9 +9,8 @@ This project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Added -- New `/manage-mac` skill: author, edit, and validate Monitors-as-Code YAML files using the published JSON Schema — ensures field correctness across all 14 monitor types -- Published MaC JSON Schema (`schemas/mac-schema.json`) bundled locally for offline agent use -- Schema validation gates injected into `monitoring-advisor` and `tune-monitor` — agents now validate generated YAML against the schema before presenting it to the user +- New `/manage-mac` skill: create, edit, validate, and import Monitors-as-Code YAML files — authors new monitors from scratch, modifies existing files, validates against the published JSON Schema, and exports live monitors to YAML +- Schema validation gates injected into `monitoring-advisor` and `tune-monitor` — agents now validate generated YAML against the published schema before presenting it to the user ## [1.11.1] - 2026-05-13 diff --git a/plugins/codex/CHANGELOG.md b/plugins/codex/CHANGELOG.md index ee0d429..14b9872 100644 --- a/plugins/codex/CHANGELOG.md +++ b/plugins/codex/CHANGELOG.md @@ -9,9 +9,8 @@ This project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Added -- New `/manage-mac` skill: author, edit, and validate Monitors-as-Code YAML files using the published JSON Schema — ensures field correctness across all 14 monitor types -- Published MaC JSON Schema (`schemas/mac-schema.json`) bundled locally for offline agent use -- Schema validation gates injected into `monitoring-advisor` and `tune-monitor` — agents now validate generated YAML against the schema before presenting it to the user +- New `/manage-mac` skill: create, edit, validate, and import Monitors-as-Code YAML files — authors new monitors from scratch, modifies existing files, validates against the published JSON Schema, and exports live monitors to YAML +- Schema validation gates injected into `monitoring-advisor` and `tune-monitor` — agents now validate generated YAML against the published schema before presenting it to the user ## [1.11.1] - 2026-05-13 diff --git a/plugins/copilot/CHANGELOG.md b/plugins/copilot/CHANGELOG.md index 7b3dac1..045c7c1 100644 --- a/plugins/copilot/CHANGELOG.md +++ b/plugins/copilot/CHANGELOG.md @@ -9,9 +9,8 @@ This project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Added -- New `/manage-mac` skill: author, edit, and validate Monitors-as-Code YAML files using the published JSON Schema — ensures field correctness across all 14 monitor types -- Published MaC JSON Schema (`schemas/mac-schema.json`) bundled locally for offline agent use -- Schema validation gates injected into `monitoring-advisor` and `tune-monitor` — agents now validate generated YAML against the schema before presenting it to the user +- New `/manage-mac` skill: create, edit, validate, and import Monitors-as-Code YAML files — authors new monitors from scratch, modifies existing files, validates against the published JSON Schema, and exports live monitors to YAML +- Schema validation gates injected into `monitoring-advisor` and `tune-monitor` — agents now validate generated YAML against the published schema before presenting it to the user ## [1.11.1] - 2026-05-13 diff --git a/plugins/cursor/CHANGELOG.md b/plugins/cursor/CHANGELOG.md index 675f1bb..71114f0 100644 --- a/plugins/cursor/CHANGELOG.md +++ b/plugins/cursor/CHANGELOG.md @@ -9,9 +9,8 @@ This project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Added -- New `/manage-mac` skill: author, edit, and validate Monitors-as-Code YAML files using the published JSON Schema — ensures field correctness across all 14 monitor types -- Published MaC JSON Schema (`schemas/mac-schema.json`) bundled locally for offline agent use -- Schema validation gates injected into `monitoring-advisor` and `tune-monitor` — agents now validate generated YAML against the schema before presenting it to the user +- New `/manage-mac` skill: create, edit, validate, and import Monitors-as-Code YAML files — authors new monitors from scratch, modifies existing files, validates against the published JSON Schema, and exports live monitors to YAML +- Schema validation gates injected into `monitoring-advisor` and `tune-monitor` — agents now validate generated YAML against the published schema before presenting it to the user ## [1.11.1] - 2026-05-13 diff --git a/plugins/opencode/CHANGELOG.md b/plugins/opencode/CHANGELOG.md index 8e86751..2312cce 100644 --- a/plugins/opencode/CHANGELOG.md +++ b/plugins/opencode/CHANGELOG.md @@ -9,9 +9,8 @@ This project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Added -- New `/manage-mac` skill: author, edit, and validate Monitors-as-Code YAML files using the published JSON Schema — ensures field correctness across all 14 monitor types -- Published MaC JSON Schema (`schemas/mac-schema.json`) bundled locally for offline agent use -- Schema validation gates injected into `monitoring-advisor` and `tune-monitor` — agents now validate generated YAML against the schema before presenting it to the user +- New `/manage-mac` skill: create, edit, validate, and import Monitors-as-Code YAML files — authors new monitors from scratch, modifies existing files, validates against the published JSON Schema, and exports live monitors to YAML +- Schema validation gates injected into `monitoring-advisor` and `tune-monitor` — agents now validate generated YAML against the published schema before presenting it to the user ## [1.11.1] - 2026-05-13 diff --git a/schemas/mac-schema.json b/schemas/mac-schema.json deleted file mode 100644 index a5c7657..0000000 --- a/schemas/mac-schema.json +++ /dev/null @@ -1,10563 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Monte Carlo Monitors-as-Code", - "description": "Schema for monitors.yml MaC configuration files. Validates field names and types only \u2014 cross-field semantic constraints (e.g. required field combinations, mutually exclusive options) are NOT checked here; those are enforced at apply time by the Monte Carlo backend.", - "type": "object", - "properties": { - "namespace": { - "type": "string" - }, - "montecarlo": { - "type": "object", - "properties": { - "field_health": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `resource`." - }, - "name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "table": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "data_source": { - "oneOf": [ - { - "type": "object", - "properties": { - "table": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "sql": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "transforms": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "alias": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "prompt": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "categories": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "label": { - "type": "string" - }, - "description": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "examples": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "label" - ] - } - }, - { - "type": "null" - } - ] - }, - "model_connection_id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "output_type": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "sql_expression": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "field_config_list": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": {}, - "count": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - } - }, - { - "type": "null" - } - ] - }, - "model_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "field_value_range": { - "oneOf": [ - { - "type": "object", - "properties": { - "lower_bound": {}, - "upper_bound": {} - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "function": { - "type": "string" - }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "function" - ] - } - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "timestamp_field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "timestamp_field_expression": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "where_condition": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "lookback_days": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "aggregation_time_interval": { - "oneOf": [ - { - "type": "string", - "enum": [ - "day", - "hour", - "month", - "week" - ] - }, - { - "type": "null" - } - ] - }, - "schedule": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dynamic", - "fixed", - "loose", - "manual" - ], - "default": "fixed" - }, - "dynamic_schedule_tables": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "dynamic_schedule_jobs": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "job_type": { - "type": "string", - "enum": [ - "AdfJob", - "AirflowDag", - "DatabricksJob", - "DbtJob" - ] - }, - "job_name": { - "type": "string" - }, - "project_name": { - "type": "string" - }, - "task_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "mcon": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "job_type", - "job_name", - "project_name" - ] - } - }, - { - "type": "null" - } - ] - }, - "interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "interval_crontab": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "interval_crontab_day_operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AND", - "OR" - ] - }, - { - "type": "null" - } - ] - }, - "start_time": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "timezone": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "min_interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "notes": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "description": { - "oneOf": [ - { - "type": "string", - "maxLength": 512 - }, - { - "type": "null" - } - ] - }, - "labels": { - "type": "array", - "items": { - "type": "string" - } - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "notify_run_failure": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `notify_rule_run_failure`." - }, - "severity": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "priority": { - "oneOf": [ - { - "type": "string", - "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" - ] - }, - { - "type": "null" - } - ] - }, - "connection_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "disable_look_back_bootstrap": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "skip_reset": { - "type": "boolean" - }, - "fail_on_reset": { - "type": "boolean" - }, - "select_expressions": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object" - } - }, - { - "type": "null" - } - ] - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" - ] - }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `domain_uuids`." - }, - "is_draft": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "fields": { - "type": "array", - "items": { - "type": "string" - } - }, - "sensitivity_level": { - "oneOf": [ - { - "type": "string", - "enum": [ - "high", - "low", - "medium" - ] - }, - { - "type": "null" - } - ] - }, - "use_important_fields": { - "type": "boolean" - }, - "segmented_expressions": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "segmentation_type": { - "oneOf": [ - { - "type": "string", - "enum": [ - "custom_sql_expression", - "field" - ] - }, - { - "type": "null" - } - ] - }, - "use_partition_clause": { - "type": "boolean" - }, - "selected_metrics": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "alert_conditions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "metric": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "custom_metric": { - "oneOf": [ - { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "display_name": { - "type": "string" - }, - "sql_expression": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "display_name", - "sql_expression" - ] - }, - { - "type": "null" - } - ] - }, - "fields": { - "type": "array", - "items": { - "type": "string" - } - }, - "type": { - "type": "string", - "enum": [ - "noop", - "threshold" - ], - "default": "threshold" - }, - "operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AUTO", - "AUTO_HIGH", - "AUTO_LOW", - "EQ", - "GT", - "GTE", - "INSIDE_RANGE", - "LT", - "LTE", - "NEQ", - "NOOP", - "OUTSIDE_RANGE" - ] - }, - { - "type": "null" - } - ] - }, - "threshold_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "lower_threshold": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "upper_threshold": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "field_pattern": { - "oneOf": [ - { - "type": "object", - "properties": { - "operator": { - "type": "string", - "enum": [ - "CONTAINING", - "ENDING_WITH", - "MATCHING", - "STARTING_WITH" - ] - }, - "value": { - "type": "string" - }, - "case_sensitive": { - "type": "boolean" - }, - "field_type": { - "oneOf": [ - { - "type": "string", - "enum": [ - "BOOLEAN", - "DATE", - "NUMERIC", - "TEXT", - "TIME", - "TIME_OF_DAY" - ] - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "operator", - "value" - ] - }, - { - "type": "null" - } - ] - }, - "baseline_trailing_days": { - "oneOf": [ - { - "type": "integer", - "minimum": 1 - }, - { - "type": "null" - } - ] - }, - "baseline_start": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "baseline_end": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "num_bins": { - "oneOf": [ - { - "type": "integer", - "minimum": 2, - "maximum": 1000 - }, - { - "type": "null" - } - ] - }, - "id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - "description": "Use this field. Replaces the deprecated `comparisons`." - }, - "min_segment_size": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "unnest_fields": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "high_segment_count": { - "type": "boolean" - }, - "resource": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `warehouse` instead." - }, - "notify_rule_run_failure": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `notify_run_failure` instead." - }, - "domain_uuids": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `domains` instead." - }, - "comparisons": { - "type": "array", - "items": { - "type": "object", - "properties": { - "metric": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "custom_metric": { - "oneOf": [ - { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "display_name": { - "type": "string" - }, - "sql_expression": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "display_name", - "sql_expression" - ] - }, - { - "type": "null" - } - ] - }, - "fields": { - "type": "array", - "items": { - "type": "string" - } - }, - "type": { - "type": "string", - "enum": [ - "noop", - "threshold" - ], - "default": "threshold" - }, - "operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AUTO", - "AUTO_HIGH", - "AUTO_LOW", - "EQ", - "GT", - "GTE", - "INSIDE_RANGE", - "LT", - "LTE", - "NEQ", - "NOOP", - "OUTSIDE_RANGE" - ] - }, - { - "type": "null" - } - ] - }, - "threshold_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "lower_threshold": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "upper_threshold": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "field_pattern": { - "oneOf": [ - { - "type": "object", - "properties": { - "operator": { - "type": "string", - "enum": [ - "CONTAINING", - "ENDING_WITH", - "MATCHING", - "STARTING_WITH" - ] - }, - "value": { - "type": "string" - }, - "case_sensitive": { - "type": "boolean" - }, - "field_type": { - "oneOf": [ - { - "type": "string", - "enum": [ - "BOOLEAN", - "DATE", - "NUMERIC", - "TEXT", - "TIME", - "TIME_OF_DAY" - ] - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "operator", - "value" - ] - }, - { - "type": "null" - } - ] - }, - "baseline_trailing_days": { - "oneOf": [ - { - "type": "integer", - "minimum": 1 - }, - { - "type": "null" - } - ] - }, - "baseline_start": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "baseline_end": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "num_bins": { - "oneOf": [ - { - "type": "integer", - "minimum": 2, - "maximum": 1000 - }, - { - "type": "null" - } - ] - }, - "id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - "deprecated": true, - "description": "Deprecated: use `alert_conditions` instead." - } - }, - "additionalProperties": false - } - }, - "dimension_tracking": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `resource`." - }, - "name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "table": { - "type": "string" - }, - "data_source": { - "oneOf": [ - { - "type": "object", - "properties": { - "table": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "sql": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "transforms": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "alias": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "prompt": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "categories": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "label": { - "type": "string" - }, - "description": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "examples": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "label" - ] - } - }, - { - "type": "null" - } - ] - }, - "model_connection_id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "output_type": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "sql_expression": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "field_config_list": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": {}, - "count": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - } - }, - { - "type": "null" - } - ] - }, - "model_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "field_value_range": { - "oneOf": [ - { - "type": "object", - "properties": { - "lower_bound": {}, - "upper_bound": {} - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "function": { - "type": "string" - }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "function" - ] - } - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "timestamp_field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "timestamp_field_expression": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "where_condition": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "lookback_days": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "aggregation_time_interval": { - "oneOf": [ - { - "type": "string", - "enum": [ - "day", - "hour", - "month", - "week" - ] - }, - { - "type": "null" - } - ] - }, - "schedule": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dynamic", - "fixed", - "loose", - "manual" - ], - "default": "fixed" - }, - "dynamic_schedule_tables": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "dynamic_schedule_jobs": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "job_type": { - "type": "string", - "enum": [ - "AdfJob", - "AirflowDag", - "DatabricksJob", - "DbtJob" - ] - }, - "job_name": { - "type": "string" - }, - "project_name": { - "type": "string" - }, - "task_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "mcon": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "job_type", - "job_name", - "project_name" - ] - } - }, - { - "type": "null" - } - ] - }, - "interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "interval_crontab": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "interval_crontab_day_operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AND", - "OR" - ] - }, - { - "type": "null" - } - ] - }, - "start_time": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "timezone": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "min_interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "notes": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "description": { - "oneOf": [ - { - "type": "string", - "maxLength": 512 - }, - { - "type": "null" - } - ] - }, - "labels": { - "type": "array", - "items": { - "type": "string" - } - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "notify_run_failure": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `notify_rule_run_failure`." - }, - "severity": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "priority": { - "oneOf": [ - { - "type": "string", - "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" - ] - }, - { - "type": "null" - } - ] - }, - "connection_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "disable_look_back_bootstrap": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "skip_reset": { - "type": "boolean" - }, - "fail_on_reset": { - "type": "boolean" - }, - "select_expressions": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object" - } - }, - { - "type": "null" - } - ] - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" - ] - }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `domain_uuids`." - }, - "is_draft": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "field": { - "type": "string" - }, - "use_partition_clause": { - "type": "boolean" - }, - "unnest_field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "resource": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `warehouse` instead." - }, - "notify_rule_run_failure": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `notify_run_failure` instead." - }, - "domain_uuids": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `domains` instead." - } - }, - "additionalProperties": false, - "required": [ - "table", - "field" - ] - } - }, - "json_schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `resource`." - }, - "name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "table": { - "type": "string" - }, - "data_source": { - "oneOf": [ - { - "type": "object", - "properties": { - "table": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "sql": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "transforms": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "alias": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "prompt": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "categories": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "label": { - "type": "string" - }, - "description": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "examples": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "label" - ] - } - }, - { - "type": "null" - } - ] - }, - "model_connection_id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "output_type": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "sql_expression": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "field_config_list": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": {}, - "count": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - } - }, - { - "type": "null" - } - ] - }, - "model_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "field_value_range": { - "oneOf": [ - { - "type": "object", - "properties": { - "lower_bound": {}, - "upper_bound": {} - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "function": { - "type": "string" - }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "function" - ] - } - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "timestamp_field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "timestamp_field_expression": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "where_condition": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "lookback_days": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "aggregation_time_interval": { - "oneOf": [ - { - "type": "string", - "enum": [ - "day", - "hour", - "month", - "week" - ] - }, - { - "type": "null" - } - ] - }, - "schedule": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dynamic", - "fixed", - "loose", - "manual" - ], - "default": "fixed" - }, - "dynamic_schedule_tables": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "dynamic_schedule_jobs": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "job_type": { - "type": "string", - "enum": [ - "AdfJob", - "AirflowDag", - "DatabricksJob", - "DbtJob" - ] - }, - "job_name": { - "type": "string" - }, - "project_name": { - "type": "string" - }, - "task_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "mcon": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "job_type", - "job_name", - "project_name" - ] - } - }, - { - "type": "null" - } - ] - }, - "interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "interval_crontab": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "interval_crontab_day_operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AND", - "OR" - ] - }, - { - "type": "null" - } - ] - }, - "start_time": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "timezone": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "min_interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "notes": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "description": { - "oneOf": [ - { - "type": "string", - "maxLength": 512 - }, - { - "type": "null" - } - ] - }, - "labels": { - "type": "array", - "items": { - "type": "string" - } - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "notify_run_failure": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `notify_rule_run_failure`." - }, - "severity": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "priority": { - "oneOf": [ - { - "type": "string", - "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" - ] - }, - { - "type": "null" - } - ] - }, - "connection_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "disable_look_back_bootstrap": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "skip_reset": { - "type": "boolean" - }, - "fail_on_reset": { - "type": "boolean" - }, - "select_expressions": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object" - } - }, - { - "type": "null" - } - ] - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" - ] - }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `domain_uuids`." - }, - "is_draft": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "field": { - "type": "string" - }, - "unnest_field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "resource": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `warehouse` instead." - }, - "notify_rule_run_failure": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `notify_run_failure` instead." - }, - "domain_uuids": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `domains` instead." - } - }, - "additionalProperties": false, - "required": [ - "table", - "field" - ] - } - }, - "metric": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `resource`." - }, - "name": { - "type": "string" - }, - "connection_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "timeout": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "data_source": { - "type": "object", - "properties": { - "table": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "sql": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "transforms": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "alias": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "prompt": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "categories": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "label": { - "type": "string" - }, - "description": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "examples": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "label" - ] - } - }, - { - "type": "null" - } - ] - }, - "model_connection_id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "output_type": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "sql_expression": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "field_config_list": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": {}, - "count": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - } - }, - { - "type": "null" - } - ] - }, - "model_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "field_value_range": { - "oneOf": [ - { - "type": "object", - "properties": { - "lower_bound": {}, - "upper_bound": {} - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "function": { - "type": "string" - }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "function" - ] - } - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - "where_condition": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "use_partition_clause": { - "type": "boolean" - }, - "aggregate_time_field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "aggregate_time_sql": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "aggregate_timezone": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "aggregate_by": { - "oneOf": [ - { - "type": "string", - "enum": [ - "day", - "hour", - "month", - "week" - ] - }, - { - "type": "null" - } - ] - }, - "collection_lag": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "high_segment_count": { - "type": "boolean" - }, - "segment_fields": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "segment_sql": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "alert_conditions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "metric": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "custom_metric": { - "oneOf": [ - { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "display_name": { - "type": "string" - }, - "sql_expression": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "display_name", - "sql_expression" - ] - }, - { - "type": "null" - } - ] - }, - "fields": { - "type": "array", - "items": { - "type": "string" - } - }, - "type": { - "type": "string", - "enum": [ - "noop", - "threshold" - ], - "default": "threshold" - }, - "operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AUTO", - "AUTO_HIGH", - "AUTO_LOW", - "EQ", - "GT", - "GTE", - "INSIDE_RANGE", - "LT", - "LTE", - "NEQ", - "NOOP", - "OUTSIDE_RANGE" - ] - }, - { - "type": "null" - } - ] - }, - "threshold_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "lower_threshold": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "upper_threshold": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "field_pattern": { - "oneOf": [ - { - "type": "object", - "properties": { - "operator": { - "type": "string", - "enum": [ - "CONTAINING", - "ENDING_WITH", - "MATCHING", - "STARTING_WITH" - ] - }, - "value": { - "type": "string" - }, - "case_sensitive": { - "type": "boolean" - }, - "field_type": { - "oneOf": [ - { - "type": "string", - "enum": [ - "BOOLEAN", - "DATE", - "NUMERIC", - "TEXT", - "TIME", - "TIME_OF_DAY" - ] - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "operator", - "value" - ] - }, - { - "type": "null" - } - ] - }, - "baseline_trailing_days": { - "oneOf": [ - { - "type": "integer", - "minimum": 1 - }, - { - "type": "null" - } - ] - }, - "baseline_start": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "baseline_end": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "num_bins": { - "oneOf": [ - { - "type": "integer", - "minimum": 2, - "maximum": 1000 - }, - { - "type": "null" - } - ] - }, - "id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - } - }, - "sensitivity": { - "oneOf": [ - { - "type": "string", - "enum": [ - "high", - "low", - "medium" - ] - }, - { - "type": "null" - } - ] - }, - "schedule": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dynamic", - "fixed", - "loose", - "manual" - ], - "default": "fixed" - }, - "dynamic_schedule_tables": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "dynamic_schedule_jobs": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "job_type": { - "type": "string", - "enum": [ - "AdfJob", - "AirflowDag", - "DatabricksJob", - "DbtJob" - ] - }, - "job_name": { - "type": "string" - }, - "project_name": { - "type": "string" - }, - "task_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "mcon": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "job_type", - "job_name", - "project_name" - ] - } - }, - { - "type": "null" - } - ] - }, - "interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "interval_crontab": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "interval_crontab_day_operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AND", - "OR" - ] - }, - { - "type": "null" - } - ] - }, - "start_time": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "timezone": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "min_interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "notes": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "description": { - "type": "string", - "maxLength": 512 - }, - "notify_run_failure": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `notify_rule_run_failure`." - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "priority": { - "oneOf": [ - { - "type": "string", - "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" - ] - }, - { - "type": "null" - } - ] - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" - ] - }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `domain_uuids`." - }, - "is_draft": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "sampling_config": { - "oneOf": [ - { - "type": "object", - "properties": { - "percentage": {}, - "count": {} - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "disable_look_back_bootstrap": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "skip_reset": { - "type": "boolean" - }, - "fail_on_reset": { - "type": "boolean" - }, - "resource": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `warehouse` instead." - }, - "notify_rule_run_failure": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `notify_run_failure` instead." - }, - "domain_uuids": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `domains` instead." - } - }, - "additionalProperties": false, - "required": [ - "name", - "data_source", - "alert_conditions", - "description" - ] - } - }, - "metric_comparison": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `resource`." - }, - "name": { - "type": "string" - }, - "source": { - "type": "object", - "properties": { - "table": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "sql": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "transforms": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "alias": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "prompt": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "categories": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "label": { - "type": "string" - }, - "description": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "examples": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "label" - ] - } - }, - { - "type": "null" - } - ] - }, - "model_connection_id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "output_type": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "sql_expression": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "field_config_list": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": {}, - "count": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - } - }, - { - "type": "null" - } - ] - }, - "model_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "field_value_range": { - "oneOf": [ - { - "type": "object", - "properties": { - "lower_bound": {}, - "upper_bound": {} - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "function": { - "type": "string" - }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "function" - ] - } - }, - { - "type": "null" - } - ] - }, - "where_condition": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "warehouse": { - "type": "string" - }, - "segment_fields": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "segment_sql": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "connection_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "timeout": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "warehouse" - ] - }, - "target": { - "type": "object", - "properties": { - "table": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "sql": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "transforms": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "alias": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "prompt": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "categories": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "label": { - "type": "string" - }, - "description": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "examples": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "label" - ] - } - }, - { - "type": "null" - } - ] - }, - "model_connection_id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "output_type": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "sql_expression": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "field_config_list": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": {}, - "count": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - } - }, - { - "type": "null" - } - ] - }, - "model_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "field_value_range": { - "oneOf": [ - { - "type": "object", - "properties": { - "lower_bound": {}, - "upper_bound": {} - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "function": { - "type": "string" - }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "function" - ] - } - }, - { - "type": "null" - } - ] - }, - "where_condition": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "warehouse": { - "type": "string" - }, - "segment_fields": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "segment_sql": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "connection_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "timeout": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "warehouse" - ] - }, - "alert_conditions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "metric": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "custom_metric": { - "oneOf": [ - { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "display_name": { - "type": "string" - }, - "source_sql_expression": { - "type": "string" - }, - "target_sql_expression": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "display_name", - "source_sql_expression", - "target_sql_expression" - ] - }, - { - "type": "null" - } - ] - }, - "source_field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "target_field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "type": { - "type": "string", - "enum": [ - "comparison_delta", - "noop" - ], - "default": "comparison_delta" - }, - "operator": { - "type": "string", - "enum": [ - "GT", - "NOOP" - ], - "default": "GT" - }, - "threshold_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "is_threshold_relative": { - "type": "boolean" - } - }, - "additionalProperties": false - } - }, - "schedule": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dynamic", - "fixed", - "loose", - "manual" - ], - "default": "fixed" - }, - "dynamic_schedule_tables": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "dynamic_schedule_jobs": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "job_type": { - "type": "string", - "enum": [ - "AdfJob", - "AirflowDag", - "DatabricksJob", - "DbtJob" - ] - }, - "job_name": { - "type": "string" - }, - "project_name": { - "type": "string" - }, - "task_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "mcon": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "job_type", - "job_name", - "project_name" - ] - } - }, - { - "type": "null" - } - ] - }, - "interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "interval_crontab": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "interval_crontab_day_operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AND", - "OR" - ] - }, - { - "type": "null" - } - ] - }, - "start_time": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "timezone": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "min_interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "notes": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "description": { - "type": "string", - "maxLength": 512 - }, - "notify_run_failure": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `notify_rule_run_failure`." - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "priority": { - "oneOf": [ - { - "type": "string", - "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" - ] - }, - { - "type": "null" - } - ] - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" - ] - }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `domain_uuids`." - }, - "is_draft": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "skip_reset": { - "type": "boolean" - }, - "fail_on_reset": { - "type": "boolean" - }, - "resource": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `warehouse` instead." - }, - "notify_rule_run_failure": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `notify_run_failure` instead." - }, - "domain_uuids": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `domains` instead." - } - }, - "additionalProperties": false, - "required": [ - "name", - "source", - "target", - "alert_conditions", - "description" - ] - } - }, - "custom_sql": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `resource`." - }, - "name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "connection_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "description": { - "oneOf": [ - { - "type": "string", - "maxLength": 512 - }, - { - "type": "null" - } - ] - }, - "notes": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "severity": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "priority": { - "oneOf": [ - { - "type": "string", - "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" - ] - }, - { - "type": "null" - } - ] - }, - "labels": { - "type": "array", - "items": { - "type": "string" - } - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "notify_run_failure": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `notify_rule_run_failure`." - }, - "event_rollup_count": { - "oneOf": [ - { - "type": "integer", - "minimum": 2 - }, - { - "type": "null" - } - ] - }, - "event_rollup_until_changed": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "metadata": { - "oneOf": [ - { - "type": "object" - }, - { - "type": "null" - } - ] - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" - ] - }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `domain_uuids`." - }, - "is_draft": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "schedule": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dynamic", - "fixed", - "loose", - "manual" - ], - "default": "fixed" - }, - "dynamic_schedule_tables": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "dynamic_schedule_jobs": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "job_type": { - "type": "string", - "enum": [ - "AdfJob", - "AirflowDag", - "DatabricksJob", - "DbtJob" - ] - }, - "job_name": { - "type": "string" - }, - "project_name": { - "type": "string" - }, - "task_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "mcon": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "job_type", - "job_name", - "project_name" - ] - } - }, - { - "type": "null" - } - ] - }, - "interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "interval_crontab": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "interval_crontab_day_operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AND", - "OR" - ] - }, - { - "type": "null" - } - ] - }, - "start_time": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "timezone": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "min_interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - "timeout": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "sql": { - "type": "string" - }, - "variables": {}, - "alert_conditions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "absolute_volume", - "change", - "dynamic_threshold", - "growth_volume", - "noop", - "threshold" - ], - "default": "threshold" - }, - "operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AUTO", - "AUTO_HIGH", - "AUTO_LOW", - "EQ", - "GT", - "GTE", - "INSIDE_RANGE", - "LT", - "LTE", - "NEQ", - "NOOP", - "OUTSIDE_RANGE" - ] - }, - { - "type": "null" - } - ] - }, - "threshold_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "baseline_agg_function": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AVG", - "MAX", - "MIN" - ] - }, - { - "type": "null" - } - ] - }, - "baseline_interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "is_threshold_relative": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "min_buffer_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "max_buffer_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "min_buffer_modifier_type": { - "oneOf": [ - { - "type": "string", - "enum": [ - "METRIC", - "PERCENTAGE" - ] - }, - { - "type": "null" - } - ] - }, - "max_buffer_modifier_type": { - "oneOf": [ - { - "type": "string", - "enum": [ - "METRIC", - "PERCENTAGE" - ] - }, - { - "type": "null" - } - ] - }, - "number_of_agg_periods": { - "oneOf": [ - { - "type": "integer", - "minimum": 1, - "maximum": 1000 - }, - { - "type": "null" - } - ] - }, - "threshold_lookback_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "is_percentage_threshold": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "percentage_baseline_sql": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "threshold_sensitivity": { - "oneOf": [ - { - "type": "string", - "enum": [ - "high", - "low", - "medium" - ] - }, - { - "type": "null" - } - ] - }, - "lower_threshold": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "upper_threshold": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - "maxItems": 1, - "description": "Use this field. Replaces the deprecated `comparisons`." - }, - "query_result_type": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ROW_COUNT", - "SINGLE_NUMERIC" - ] - }, - { - "type": "null" - } - ] - }, - "sampling_sql": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "skip_reset": { - "type": "boolean" - }, - "fail_on_reset": { - "type": "boolean" - }, - "exception_primary_key_column": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "resource": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `warehouse` instead." - }, - "notify_rule_run_failure": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `notify_run_failure` instead." - }, - "domain_uuids": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `domains` instead." - }, - "comparisons": { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "absolute_volume", - "change", - "dynamic_threshold", - "growth_volume", - "noop", - "threshold" - ], - "default": "threshold" - }, - "operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AUTO", - "AUTO_HIGH", - "AUTO_LOW", - "EQ", - "GT", - "GTE", - "INSIDE_RANGE", - "LT", - "LTE", - "NEQ", - "NOOP", - "OUTSIDE_RANGE" - ] - }, - { - "type": "null" - } - ] - }, - "threshold_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "baseline_agg_function": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AVG", - "MAX", - "MIN" - ] - }, - { - "type": "null" - } - ] - }, - "baseline_interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "is_threshold_relative": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "min_buffer_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "max_buffer_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "min_buffer_modifier_type": { - "oneOf": [ - { - "type": "string", - "enum": [ - "METRIC", - "PERCENTAGE" - ] - }, - { - "type": "null" - } - ] - }, - "max_buffer_modifier_type": { - "oneOf": [ - { - "type": "string", - "enum": [ - "METRIC", - "PERCENTAGE" - ] - }, - { - "type": "null" - } - ] - }, - "number_of_agg_periods": { - "oneOf": [ - { - "type": "integer", - "minimum": 1, - "maximum": 1000 - }, - { - "type": "null" - } - ] - }, - "threshold_lookback_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "is_percentage_threshold": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "percentage_baseline_sql": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "threshold_sensitivity": { - "oneOf": [ - { - "type": "string", - "enum": [ - "high", - "low", - "medium" - ] - }, - { - "type": "null" - } - ] - }, - "lower_threshold": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "upper_threshold": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - "maxItems": 1, - "deprecated": true, - "description": "Deprecated: use `alert_conditions` instead." - } - }, - "additionalProperties": false, - "required": [ - "schedule", - "sql" - ] - } - }, - "validation": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `resource`." - }, - "name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "connection_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "description": { - "oneOf": [ - { - "type": "string", - "maxLength": 512 - }, - { - "type": "null" - } - ] - }, - "notes": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "severity": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "priority": { - "oneOf": [ - { - "type": "string", - "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" - ] - }, - { - "type": "null" - } - ] - }, - "labels": { - "type": "array", - "items": { - "type": "string" - } - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "notify_run_failure": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `notify_rule_run_failure`." - }, - "event_rollup_count": { - "oneOf": [ - { - "type": "integer", - "minimum": 2 - }, - { - "type": "null" - } - ] - }, - "event_rollup_until_changed": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "metadata": { - "oneOf": [ - { - "type": "object" - }, - { - "type": "null" - } - ] - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" - ] - }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `domain_uuids`." - }, - "is_draft": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "schedule": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dynamic", - "fixed", - "loose", - "manual" - ], - "default": "fixed" - }, - "dynamic_schedule_tables": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "dynamic_schedule_jobs": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "job_type": { - "type": "string", - "enum": [ - "AdfJob", - "AirflowDag", - "DatabricksJob", - "DbtJob" - ] - }, - "job_name": { - "type": "string" - }, - "project_name": { - "type": "string" - }, - "task_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "mcon": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "job_type", - "job_name", - "project_name" - ] - } - }, - { - "type": "null" - } - ] - }, - "interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "interval_crontab": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "interval_crontab_day_operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AND", - "OR" - ] - }, - { - "type": "null" - } - ] - }, - "start_time": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "timezone": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "min_interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - "timeout": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "data_source": { - "type": "object", - "properties": { - "table": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "sql": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "transforms": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "alias": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "prompt": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "categories": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "label": { - "type": "string" - }, - "description": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "examples": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "label" - ] - } - }, - { - "type": "null" - } - ] - }, - "model_connection_id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "output_type": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "sql_expression": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "field_config_list": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": {}, - "count": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - } - }, - { - "type": "null" - } - ] - }, - "model_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "field_value_range": { - "oneOf": [ - { - "type": "object", - "properties": { - "lower_bound": {}, - "upper_bound": {} - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "function": { - "type": "string" - }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "function" - ] - } - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - "alert_condition": { - "type": "object", - "properties": { - "type": {}, - "id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "conditions": {}, - "operator": {} - }, - "additionalProperties": false - }, - "exception_primary_key_column": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "percentage_threshold": { - "oneOf": [ - { - "type": "number", - "minimum": 0 - }, - { - "type": "null" - } - ] - }, - "percentage_operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "EQ", - "GT", - "GTE", - "LT", - "LTE" - ] - }, - { - "type": "null" - } - ] - }, - "resource": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `warehouse` instead." - }, - "notify_rule_run_failure": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `notify_run_failure` instead." - }, - "domain_uuids": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `domains` instead." - } - }, - "additionalProperties": false, - "required": [ - "schedule", - "data_source", - "alert_condition" - ] - } - }, - "comparison": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `resource`." - }, - "name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "connection_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "description": { - "oneOf": [ - { - "type": "string", - "maxLength": 512 - }, - { - "type": "null" - } - ] - }, - "notes": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "severity": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "priority": { - "oneOf": [ - { - "type": "string", - "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" - ] - }, - { - "type": "null" - } - ] - }, - "labels": { - "type": "array", - "items": { - "type": "string" - } - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "notify_run_failure": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `notify_rule_run_failure`." - }, - "event_rollup_count": { - "oneOf": [ - { - "type": "integer", - "minimum": 2 - }, - { - "type": "null" - } - ] - }, - "event_rollup_until_changed": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "metadata": { - "oneOf": [ - { - "type": "object" - }, - { - "type": "null" - } - ] - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" - ] - }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `domain_uuids`." - }, - "is_draft": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "schedule": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dynamic", - "fixed", - "loose", - "manual" - ], - "default": "fixed" - }, - "dynamic_schedule_tables": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "dynamic_schedule_jobs": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "job_type": { - "type": "string", - "enum": [ - "AdfJob", - "AirflowDag", - "DatabricksJob", - "DbtJob" - ] - }, - "job_name": { - "type": "string" - }, - "project_name": { - "type": "string" - }, - "task_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "mcon": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "job_type", - "job_name", - "project_name" - ] - } - }, - { - "type": "null" - } - ] - }, - "interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "interval_crontab": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "interval_crontab_day_operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AND", - "OR" - ] - }, - { - "type": "null" - } - ] - }, - "start_time": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "timezone": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "min_interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - "query_result_type": { - "type": "string", - "enum": [ - "LABELED_NUMERICS", - "ROW_COUNT", - "SINGLE_NUMERIC" - ] - }, - "source_resource": { - "type": "string" - }, - "target_resource": { - "type": "string" - }, - "source_sql": { - "type": "string" - }, - "target_sql": { - "type": "string" - }, - "alert_conditions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": { - "type": "string", - "default": "source_target_delta" - }, - "operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "EQ", - "GT", - "GTE", - "LT", - "LTE", - "NEQ" - ] - }, - { - "type": "null" - } - ] - }, - "threshold_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "baseline_agg_function": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AVG", - "MAX", - "MIN" - ] - }, - { - "type": "null" - } - ] - }, - "baseline_interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "is_threshold_relative": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "min_buffer_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "max_buffer_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "min_buffer_modifier_type": { - "oneOf": [ - { - "type": "string", - "enum": [ - "METRIC", - "PERCENTAGE" - ] - }, - { - "type": "null" - } - ] - }, - "max_buffer_modifier_type": { - "oneOf": [ - { - "type": "string", - "enum": [ - "METRIC", - "PERCENTAGE" - ] - }, - { - "type": "null" - } - ] - }, - "number_of_agg_periods": { - "oneOf": [ - { - "type": "integer", - "minimum": 1, - "maximum": 1000 - }, - { - "type": "null" - } - ] - }, - "threshold_lookback_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "is_percentage_threshold": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "percentage_baseline_sql": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - "maxItems": 1, - "description": "Use this field. Replaces the deprecated `comparisons`." - }, - "source_connection_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "target_connection_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "resource": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `warehouse` instead." - }, - "notify_rule_run_failure": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `notify_run_failure` instead." - }, - "domain_uuids": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `domains` instead." - }, - "comparisons": { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": { - "type": "string", - "default": "source_target_delta" - }, - "operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "EQ", - "GT", - "GTE", - "LT", - "LTE", - "NEQ" - ] - }, - { - "type": "null" - } - ] - }, - "threshold_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "baseline_agg_function": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AVG", - "MAX", - "MIN" - ] - }, - { - "type": "null" - } - ] - }, - "baseline_interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "is_threshold_relative": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "min_buffer_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "max_buffer_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "min_buffer_modifier_type": { - "oneOf": [ - { - "type": "string", - "enum": [ - "METRIC", - "PERCENTAGE" - ] - }, - { - "type": "null" - } - ] - }, - "max_buffer_modifier_type": { - "oneOf": [ - { - "type": "string", - "enum": [ - "METRIC", - "PERCENTAGE" - ] - }, - { - "type": "null" - } - ] - }, - "number_of_agg_periods": { - "oneOf": [ - { - "type": "integer", - "minimum": 1, - "maximum": 1000 - }, - { - "type": "null" - } - ] - }, - "threshold_lookback_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "is_percentage_threshold": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "percentage_baseline_sql": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - "maxItems": 1, - "deprecated": true, - "description": "Deprecated: use `alert_conditions` instead." - } - }, - "additionalProperties": false, - "required": [ - "schedule", - "query_result_type", - "source_resource", - "target_resource", - "source_sql", - "target_sql" - ] - } - }, - "query_performance": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `resource`." - }, - "name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "description": { - "oneOf": [ - { - "type": "string", - "maxLength": 512 - }, - { - "type": "null" - } - ] - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "notes": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "priority": { - "oneOf": [ - { - "type": "string", - "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" - ] - }, - { - "type": "null" - } - ] - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" - ] - }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `domain_uuids`." - }, - "selection": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "field_name": { - "type": "string" - }, - "values": { - "type": "array", - "items": { - "type": "string" - } - }, - "operator": {} - }, - "additionalProperties": false, - "required": [ - "field_name" - ] - } - }, - { - "type": "null" - } - ] - }, - "alert_conditions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "threshold": {}, - "metric": {}, - "comparison_type": {}, - "operator": {}, - "baseline_agg_function": {}, - "threshold_lookback_minutes": {}, - "threshold_lookback_data_points": {} - }, - "additionalProperties": false, - "required": [ - "threshold", - "metric" - ] - } - }, - "is_draft": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "notify_run_failure": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "resource": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `warehouse` instead." - }, - "domain_uuids": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `domains` instead." - } - }, - "additionalProperties": false, - "required": [ - "alert_conditions" - ] - } - }, - "freshness": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `resource`." - }, - "name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "connection_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "description": { - "oneOf": [ - { - "type": "string", - "maxLength": 512 - }, - { - "type": "null" - } - ] - }, - "notes": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "severity": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "priority": { - "oneOf": [ - { - "type": "string", - "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" - ] - }, - { - "type": "null" - } - ] - }, - "labels": { - "type": "array", - "items": { - "type": "string" - } - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "notify_run_failure": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `notify_rule_run_failure`." - }, - "event_rollup_count": { - "oneOf": [ - { - "type": "integer", - "minimum": 2 - }, - { - "type": "null" - } - ] - }, - "event_rollup_until_changed": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "metadata": { - "oneOf": [ - { - "type": "object" - }, - { - "type": "null" - } - ] - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" - ] - }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `domain_uuids`." - }, - "is_draft": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "schedule": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dynamic", - "fixed", - "loose", - "manual" - ], - "default": "fixed" - }, - "dynamic_schedule_tables": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "dynamic_schedule_jobs": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "job_type": { - "type": "string", - "enum": [ - "AdfJob", - "AirflowDag", - "DatabricksJob", - "DbtJob" - ] - }, - "job_name": { - "type": "string" - }, - "project_name": { - "type": "string" - }, - "task_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "mcon": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "job_type", - "job_name", - "project_name" - ] - } - }, - { - "type": "null" - } - ] - }, - "interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "interval_crontab": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "interval_crontab_day_operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AND", - "OR" - ] - }, - { - "type": "null" - } - ] - }, - "start_time": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "timezone": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "min_interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "table": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "tables": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "freshness_threshold": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "threshold_sensitivity": { - "oneOf": [ - { - "type": "string", - "enum": [ - "high", - "low", - "medium" - ] - }, - { - "type": "null" - } - ] - }, - "is_paused": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "resource": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `warehouse` instead." - }, - "notify_rule_run_failure": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `notify_run_failure` instead." - }, - "domain_uuids": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `domains` instead." - } - }, - "additionalProperties": false - } - }, - "volume": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `resource`." - }, - "name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "connection_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "description": { - "oneOf": [ - { - "type": "string", - "maxLength": 512 - }, - { - "type": "null" - } - ] - }, - "notes": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "severity": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "priority": { - "oneOf": [ - { - "type": "string", - "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" - ] - }, - { - "type": "null" - } - ] - }, - "labels": { - "type": "array", - "items": { - "type": "string" - } - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "notify_run_failure": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `notify_rule_run_failure`." - }, - "event_rollup_count": { - "oneOf": [ - { - "type": "integer", - "minimum": 2 - }, - { - "type": "null" - } - ] - }, - "event_rollup_until_changed": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "metadata": { - "oneOf": [ - { - "type": "object" - }, - { - "type": "null" - } - ] - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" - ] - }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `domain_uuids`." - }, - "is_draft": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "schedule": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dynamic", - "fixed", - "loose", - "manual" - ], - "default": "fixed" - }, - "dynamic_schedule_tables": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "dynamic_schedule_jobs": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "job_type": { - "type": "string", - "enum": [ - "AdfJob", - "AirflowDag", - "DatabricksJob", - "DbtJob" - ] - }, - "job_name": { - "type": "string" - }, - "project_name": { - "type": "string" - }, - "task_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "mcon": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "job_type", - "job_name", - "project_name" - ] - } - }, - { - "type": "null" - } - ] - }, - "interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "interval_crontab": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "interval_crontab_day_operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AND", - "OR" - ] - }, - { - "type": "null" - } - ] - }, - "start_time": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "timezone": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "min_interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "table": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "tables": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "alert_conditions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "absolute_volume", - "change", - "dynamic_threshold", - "growth_volume", - "lookback", - "threshold" - ] - }, - "operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AUTO", - "EQ", - "GT", - "GTE", - "LT", - "LTE", - "NEQ", - "OUTSIDE_RANGE" - ] - }, - { - "type": "null" - } - ] - }, - "threshold_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "baseline_agg_function": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AVG", - "MAX", - "MIN" - ] - }, - { - "type": "null" - } - ] - }, - "baseline_interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "is_threshold_relative": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "min_buffer_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "max_buffer_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "min_buffer_modifier_type": { - "oneOf": [ - { - "type": "string", - "enum": [ - "METRIC", - "PERCENTAGE" - ] - }, - { - "type": "null" - } - ] - }, - "max_buffer_modifier_type": { - "oneOf": [ - { - "type": "string", - "enum": [ - "METRIC", - "PERCENTAGE" - ] - }, - { - "type": "null" - } - ] - }, - "number_of_agg_periods": { - "oneOf": [ - { - "type": "integer", - "minimum": 1, - "maximum": 1000 - }, - { - "type": "null" - } - ] - }, - "threshold_lookback_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "is_percentage_threshold": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "percentage_baseline_sql": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "threshold_sensitivity": { - "oneOf": [ - { - "type": "string", - "enum": [ - "high", - "low", - "medium" - ] - }, - { - "type": "null" - } - ] - }, - "lower_threshold": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "upper_threshold": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - }, - "maxItems": 1, - "description": "Use this field. Replaces the deprecated `comparisons`." - }, - "volume_metric": { - "type": "string", - "enum": [ - "total_byte_count", - "total_byte_count_last_changed_on", - "total_row_count", - "total_row_count_last_changed_on" - ] - }, - "override": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "resource": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `warehouse` instead." - }, - "notify_rule_run_failure": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `notify_run_failure` instead." - }, - "domain_uuids": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `domains` instead." - }, - "comparisons": { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "absolute_volume", - "change", - "dynamic_threshold", - "growth_volume", - "lookback", - "threshold" - ] - }, - "operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AUTO", - "EQ", - "GT", - "GTE", - "LT", - "LTE", - "NEQ", - "OUTSIDE_RANGE" - ] - }, - { - "type": "null" - } - ] - }, - "threshold_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "baseline_agg_function": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AVG", - "MAX", - "MIN" - ] - }, - { - "type": "null" - } - ] - }, - "baseline_interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "is_threshold_relative": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "min_buffer_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "max_buffer_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "min_buffer_modifier_type": { - "oneOf": [ - { - "type": "string", - "enum": [ - "METRIC", - "PERCENTAGE" - ] - }, - { - "type": "null" - } - ] - }, - "max_buffer_modifier_type": { - "oneOf": [ - { - "type": "string", - "enum": [ - "METRIC", - "PERCENTAGE" - ] - }, - { - "type": "null" - } - ] - }, - "number_of_agg_periods": { - "oneOf": [ - { - "type": "integer", - "minimum": 1, - "maximum": 1000 - }, - { - "type": "null" - } - ] - }, - "threshold_lookback_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "is_percentage_threshold": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "percentage_baseline_sql": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "threshold_sensitivity": { - "oneOf": [ - { - "type": "string", - "enum": [ - "high", - "low", - "medium" - ] - }, - { - "type": "null" - } - ] - }, - "lower_threshold": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "upper_threshold": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - }, - "maxItems": 1, - "deprecated": true, - "description": "Deprecated: use `alert_conditions` instead." - } - }, - "additionalProperties": false - } - }, - "field_quality": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `resource`." - }, - "name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "connection_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "description": { - "oneOf": [ - { - "type": "string", - "maxLength": 512 - }, - { - "type": "null" - } - ] - }, - "notes": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "severity": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "priority": { - "oneOf": [ - { - "type": "string", - "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" - ] - }, - { - "type": "null" - } - ] - }, - "labels": { - "type": "array", - "items": { - "type": "string" - } - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "notify_run_failure": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `notify_rule_run_failure`." - }, - "event_rollup_count": { - "oneOf": [ - { - "type": "integer", - "minimum": 2 - }, - { - "type": "null" - } - ] - }, - "event_rollup_until_changed": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "metadata": { - "oneOf": [ - { - "type": "object" - }, - { - "type": "null" - } - ] - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" - ] - }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `domain_uuids`." - }, - "is_draft": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "schedule": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dynamic", - "fixed", - "loose", - "manual" - ], - "default": "fixed" - }, - "dynamic_schedule_tables": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "dynamic_schedule_jobs": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "job_type": { - "type": "string", - "enum": [ - "AdfJob", - "AirflowDag", - "DatabricksJob", - "DbtJob" - ] - }, - "job_name": { - "type": "string" - }, - "project_name": { - "type": "string" - }, - "task_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "mcon": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "job_type", - "job_name", - "project_name" - ] - } - }, - { - "type": "null" - } - ] - }, - "interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "interval_crontab": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "interval_crontab_day_operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AND", - "OR" - ] - }, - { - "type": "null" - } - ] - }, - "start_time": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "timezone": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "min_interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - "table": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "tables": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "fields": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "metric_type": { - "type": "string", - "enum": [ - "ACCURACY", - "APPROX_DISTINCTNESS", - "APPROX_DISTINCT_COUNT", - "APPROX_QUANTILES", - "APPROX_QUANTILES0", - "APPROX_QUANTILES1", - "APPROX_QUANTILES2", - "APPROX_QUANTILES3", - "APPROX_QUANTILES4", - "APPROX_QUANTILES5", - "DUPLICATE_COUNT", - "EMPTY_STRING_COUNT", - "EMPTY_STRING_RATE", - "FALSE_COUNT", - "FALSE_RATE", - "FUTURE_TIMESTAMP_COUNT", - "FUTURE_TIMESTAMP_RATE", - "JS_DIVERGENCE", - "KS_TEST", - "MAE", - "MAPE", - "MAX_LENGTH", - "MEAN_ERROR", - "MEAN_LENGTH", - "MIN_LENGTH", - "MISSING_VALUES", - "NAN_COUNT", - "NAN_RATE", - "NEGATIVE_COUNT", - "NEGATIVE_RATE", - "NEW_VALUES", - "NON_NULL_COUNT", - "NULL_COUNT", - "NULL_RATE", - "NUMERIC_MAX", - "NUMERIC_MEAN", - "NUMERIC_MEDIAN", - "NUMERIC_MIN", - "NUMERIC_QUANTILES", - "NUMERIC_STDDEV", - "PAST_TIMESTAMP_COUNT", - "PAST_TIMESTAMP_RATE", - "PERCENTILE_20", - "PERCENTILE_40", - "PERCENTILE_60", - "PERCENTILE_80", - "PERCENTILE_95", - "PERCENTILE_99", - "PSI", - "RELATIVE_ROW_COUNT", - "RMSE", - "ROW_COUNT", - "ROW_COUNT_CHANGE", - "R_SQUARED", - "SUM", - "TEXT_ALL_SPACES_COUNT", - "TEXT_ALL_SPACES_RATE", - "TEXT_ALL_SPACE_COUNT", - "TEXT_ALL_SPACE_RATE", - "TEXT_AU_ABN_RATE", - "TEXT_AU_MEDICARE_RATE", - "TEXT_AU_PHONE_RATE", - "TEXT_AU_POSTCODE_RATE", - "TEXT_AU_TFN_RATE", - "TEXT_CREDIT_CARD_RATE", - "TEXT_EMAIL_ADDRESS_RATE", - "TEXT_INT_RATE", - "TEXT_MAX_LENGTH", - "TEXT_MEAN_LENGTH", - "TEXT_MIN_LENGTH", - "TEXT_NOT_AU_ABN_COUNT", - "TEXT_NOT_AU_MEDICARE_COUNT", - "TEXT_NOT_AU_PHONE_COUNT", - "TEXT_NOT_AU_POSTCODE_COUNT", - "TEXT_NOT_AU_TFN_COUNT", - "TEXT_NOT_CREDIT_CARD_COUNT", - "TEXT_NOT_EMAIL_ADDRESS_COUNT", - "TEXT_NOT_INT_COUNT", - "TEXT_NOT_NUMBER_COUNT", - "TEXT_NOT_SSN_COUNT", - "TEXT_NOT_TIMESTAMP_COUNT", - "TEXT_NOT_US_PHONE_COUNT", - "TEXT_NOT_US_STATE_CODE_COUNT", - "TEXT_NOT_US_ZIP_CODE_COUNT", - "TEXT_NOT_UUID_COUNT", - "TEXT_NULL_KEYWORD_COUNT", - "TEXT_NULL_KEYWORD_RATE", - "TEXT_NUMBER_RATE", - "TEXT_SSN_RATE", - "TEXT_STD_LENGTH", - "TEXT_TIMESTAMP_RATE", - "TEXT_US_PHONE_RATE", - "TEXT_US_STATE_CODE_RATE", - "TEXT_US_ZIP_CODE_RATE", - "TEXT_UUID_RATE", - "TIME_SINCE_LAST_ROW_COUNT_CHANGE", - "TRUE_COUNT", - "TRUE_RATE", - "UNIQUE_COUNT", - "UNIQUE_RATE", - "UNIX_ZERO_COUNT", - "UNIX_ZERO_RATE", - "ZERO_COUNT", - "ZERO_RATE" - ] - }, - "custom_field_metric": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "alert_conditions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "threshold" - ], - "default": "threshold" - }, - "operator": { - "type": "string", - "enum": [ - "EQ", - "GT", - "GTE", - "LT", - "LTE", - "NEQ" - ] - }, - "threshold_value": { - "type": "number" - } - }, - "additionalProperties": false, - "required": [ - "operator", - "threshold_value" - ] - }, - "maxItems": 1, - "description": "Use this field. Replaces the deprecated `comparisons`." - }, - "filters": { - "type": "array", - "items": { - "type": "object", - "properties": { - "field": { - "type": "string" - }, - "operator": { - "type": "string", - "enum": [ - "EQ", - "GT", - "GTE", - "IS_NOT_NULL", - "IS_NULL", - "LT", - "LTE", - "NEQ" - ] - }, - "value": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "field", - "operator" - ] - } - }, - "resource": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `warehouse` instead." - }, - "notify_rule_run_failure": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `notify_run_failure` instead." - }, - "domain_uuids": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `domains` instead." - }, - "comparisons": { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "threshold" - ], - "default": "threshold" - }, - "operator": { - "type": "string", - "enum": [ - "EQ", - "GT", - "GTE", - "LT", - "LTE", - "NEQ" - ] - }, - "threshold_value": { - "type": "number" - } - }, - "additionalProperties": false, - "required": [ - "operator", - "threshold_value" - ] - }, - "maxItems": 1, - "deprecated": true, - "description": "Deprecated: use `alert_conditions` instead." - } - }, - "additionalProperties": false, - "required": [ - "schedule", - "metric_type" - ] - } - }, - "table": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `resource`." - }, - "name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "description": { - "type": "string", - "maxLength": 512 - }, - "notes": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "priority": { - "oneOf": [ - { - "type": "string", - "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" - ] - }, - { - "type": "null" - } - ] - }, - "asset_selection": { - "type": "object", - "properties": { - "databases": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "schemas": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "tables": { - "oneOf": [ - { - "type": "object" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "filters": { - "type": "array", - "items": {} - }, - "exclusions": { - "type": "array", - "items": {} - } - }, - "additionalProperties": false - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `domain`." - }, - "alert_conditions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "metric": {}, - "operator": {} - }, - "additionalProperties": false, - "required": [ - "metric" - ] - } - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" - ] - }, - { - "type": "null" - } - ] - }, - "is_draft": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "enable_row_count_collection": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ] - }, - "enable_row_count_collection_limit": { - "oneOf": [ - { - "type": "integer", - "minimum": 0 - }, - { - "type": "null" - } - ] - }, - "resource": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `warehouse` instead." - }, - "domain": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `domains` instead." - } - }, - "additionalProperties": false, - "required": [ - "description", - "asset_selection" - ] - } - }, - "bulk_monitor": { - "type": "array", - "items": { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "warehouse": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `resource`." - }, - "name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "description": { - "type": "string", - "maxLength": 512 - }, - "notes": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "priority": { - "oneOf": [ - { - "type": "string", - "enum": [ - "P1", - "P2", - "P3", - "P4", - "P5" - ] - }, - { - "type": "null" - } - ] - }, - "monitor_type": { - "type": "string", - "enum": [ - "bulk_metric", - "bulk_pii" - ] - }, - "asset_selection": { - "type": "object", - "properties": { - "databases": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "schemas": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "tables": { - "oneOf": [ - { - "type": "object" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "filters": { - "type": "array", - "items": {} - }, - "exclusions": { - "type": "array", - "items": {} - } - }, - "additionalProperties": false - }, - "alert_conditions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "metric": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "custom_metric": { - "oneOf": [ - { - "type": "object", - "properties": { - "uuid": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "display_name": { - "type": "string" - }, - "sql_expression": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "display_name", - "sql_expression" - ] - }, - { - "type": "null" - } - ] - }, - "fields": { - "type": "array", - "items": { - "type": "string" - } - }, - "type": { - "type": "string", - "enum": [ - "noop", - "threshold" - ], - "default": "threshold" - }, - "operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AUTO", - "AUTO_HIGH", - "AUTO_LOW", - "EQ", - "GT", - "GTE", - "INSIDE_RANGE", - "LT", - "LTE", - "NEQ", - "NOOP", - "OUTSIDE_RANGE" - ] - }, - { - "type": "null" - } - ] - }, - "threshold_value": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "lower_threshold": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "upper_threshold": { - "oneOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "field_pattern": { - "oneOf": [ - { - "type": "object", - "properties": { - "operator": { - "type": "string", - "enum": [ - "CONTAINING", - "ENDING_WITH", - "MATCHING", - "STARTING_WITH" - ] - }, - "value": { - "type": "string" - }, - "case_sensitive": { - "type": "boolean" - }, - "field_type": { - "oneOf": [ - { - "type": "string", - "enum": [ - "BOOLEAN", - "DATE", - "NUMERIC", - "TEXT", - "TIME", - "TIME_OF_DAY" - ] - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "operator", - "value" - ] - }, - { - "type": "null" - } - ] - }, - "baseline_trailing_days": { - "oneOf": [ - { - "type": "integer", - "minimum": 1 - }, - { - "type": "null" - } - ] - }, - "baseline_start": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "baseline_end": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "num_bins": { - "oneOf": [ - { - "type": "integer", - "minimum": 2, - "maximum": 1000 - }, - { - "type": "null" - } - ] - }, - "id": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - } - }, - "schedule": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dynamic", - "fixed", - "loose", - "manual" - ], - "default": "fixed" - }, - "dynamic_schedule_tables": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "dynamic_schedule_jobs": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "job_type": { - "type": "string", - "enum": [ - "AdfJob", - "AirflowDag", - "DatabricksJob", - "DbtJob" - ] - }, - "job_name": { - "type": "string" - }, - "project_name": { - "type": "string" - }, - "task_name": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "mcon": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "job_type", - "job_name", - "project_name" - ] - } - }, - { - "type": "null" - } - ] - }, - "interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "interval_crontab": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "interval_crontab_day_operator": { - "oneOf": [ - { - "type": "string", - "enum": [ - "AND", - "OR" - ] - }, - { - "type": "null" - } - ] - }, - "start_time": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "timezone": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "min_interval_minutes": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false - }, - "audiences": { - "type": "array", - "items": { - "type": "string" - } - }, - "failure_audiences": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ] - }, - "domains": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "description": "Use this field. Replaces the deprecated `domain`." - }, - "domain_restrictions": { - "type": "array", - "items": { - "type": "string" - } - }, - "tags": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": false, - "required": [ - "name" - ] - } - }, - "data_quality_dimension": { - "oneOf": [ - { - "type": "string", - "enum": [ - "ACCURACY", - "COMPLETENESS", - "CONSISTENCY", - "TIMELINESS", - "UNIQUENESS", - "VALIDITY" - ] - }, - { - "type": "null" - } - ] - }, - "collection_lag_hours": { - "oneOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "aggregate_time_field": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "aggregate_by": { - "oneOf": [ - { - "type": "string", - "enum": [ - "day", - "hour", - "month", - "week" - ] - }, - { - "type": "null" - } - ] - }, - "is_draft": { - "type": "boolean", - "default": false - }, - "sampling_config": { - "oneOf": [ - { - "type": "object", - "properties": { - "percentage": {}, - "count": {} - }, - "additionalProperties": false - }, - { - "type": "null" - } - ] - }, - "auto_prune_enabled": { - "type": "boolean", - "default": false - }, - "lineage_narrowing_enabled": { - "type": "boolean", - "default": false - }, - "resource": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `warehouse` instead." - }, - "domain": { - "oneOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } - ], - "deprecated": true, - "description": "Deprecated: use `domains` instead." - } - }, - "additionalProperties": false, - "required": [ - "description", - "monitor_type", - "asset_selection", - "alert_conditions", - "schedule" - ] - } - }, - "notifications": { - "description": "Notifications-as-Code (NaC) configuration block. Structure is not validated by this schema \u2014 it is handled separately by the NaC pipeline." - } - }, - "additionalProperties": false - } - } -} diff --git a/skills/manage-mac/SKILL.md b/skills/manage-mac/SKILL.md index b480622..9b4628d 100644 --- a/skills/manage-mac/SKILL.md +++ b/skills/manage-mac/SKILL.md @@ -1,6 +1,6 @@ --- name: monte-carlo-manage-mac -description: Author, edit, and validate Monitors-as-Code YAML files. Reads the MaC schema to ensure correctness. Handles create, edit, and validate entry points for any of the 14 monitor types. +description: Create, edit, validate, and import Monitors-as-Code YAML files. Fetches the published MaC JSON Schema to ensure correctness across all 14 monitor types. when_to_use: | Invoke when the user has a MaC YAML file they want to create, edit, or validate, or when they want to export live monitors into a MaC YAML file. @@ -22,9 +22,8 @@ schema — not from table discovery. **Arguments:** $ARGUMENTS -The MaC schema lives next to this skill file. **Use the Read tool** to access it: - -- Schema: `../../schemas/mac-schema.json` (relative to this file) +The MaC schema is published at `https://docs.getmontecarlo.com/mac/schema.json`. **Use WebFetch** +to retrieve it in Phase 0. --- @@ -50,8 +49,9 @@ If the intent is ambiguous, ask: ## Prerequisites -No MCP tools are required for file-only operations (create, edit, validate). The schema file is -the sole source of truth for field names, types, enums, and required fields. +No MCP tools are required for file-only operations (create, edit, validate). The published JSON +Schema (fetched via WebFetch in Phase 0) is the sole source of truth for field names, types, +enums, and required fields. Monte Carlo MCP tools (`create_or_update_*_monitor` with `dry_run=True`) are available as an optional cross-reference when the user wants to preview what the API would generate for a monitor @@ -61,7 +61,12 @@ before deciding between file-based and live deployment. Use them only if explici ## Phase 0: Read the schema -Before authoring or validating any YAML, read `../../schemas/mac-schema.json` using the Read tool. +Before authoring or validating any YAML, fetch the published MaC JSON Schema using the WebFetch tool: + +``` +https://docs.getmontecarlo.com/mac/schema.json +``` + The schema is JSON Schema Draft 7 and describes all valid monitor types, fields, types, enums, and required fields. Never guess field names — always derive them from the schema. @@ -343,9 +348,10 @@ Show the assembled file and offer to save it. Remind the user: ## Graceful degradation -If the schema file cannot be read, stop and tell the user: +If the schema cannot be fetched from `https://docs.getmontecarlo.com/mac/schema.json`, stop and +tell the user: -> Cannot read the MaC schema at `../../schemas/mac-schema.json`. Please verify the file exists -> and try again. +> Cannot fetch the MaC schema from `https://docs.getmontecarlo.com/mac/schema.json`. Please check +> your network connection and try again. Do not attempt to author or validate YAML without the schema. diff --git a/skills/monitoring-advisor/references/data-monitor-creation.md b/skills/monitoring-advisor/references/data-monitor-creation.md index c7c6fa7..f7e0a34 100644 --- a/skills/monitoring-advisor/references/data-monitor-creation.md +++ b/skills/monitoring-advisor/references/data-monitor-creation.md @@ -223,7 +223,7 @@ Always add the following comment as the **first line** of any MaC YAML file you # yaml-language-server: $schema=https://docs.getmontecarlo.com/mac/schema.json ``` -A local copy of the schema is available at `../../schemas/mac-schema.json` (relative to skill files). Use the Read tool to inspect it if you're uncertain whether a field name or value is valid for a given monitor type. +The published schema is available at `https://docs.getmontecarlo.com/mac/schema.json`. Use WebFetch to inspect it if you're uncertain whether a field name or value is valid for a given monitor type. Generated YAML must not include fields that don't appear in the schema for that monitor type. Unknown fields are silently ignored by the CLI but indicate a misconfiguration and may break future validation. diff --git a/skills/tune-monitor/SKILL.md b/skills/tune-monitor/SKILL.md index 324caa6..02fafbc 100644 --- a/skills/tune-monitor/SKILL.md +++ b/skills/tune-monitor/SKILL.md @@ -234,7 +234,8 @@ Phase 1.5. Each reference specifies the correct tool and constraints for that mo General rules for all types: 1. **Always preview first** — show the user what will change before applying. 2. **Get explicit confirmation** before applying any change. -3. **Validate the preview YAML against the schema** — before presenting the preview YAML to the user, check it against `../../schemas/mac-schema.json` (relative to this file). If any field in the YAML does not appear in the schema for the given monitor type, flag it and correct it. Note: the schema validates field names, types, and enum values only — cross-field semantic constraints are enforced by the backend at apply time, not by the schema. +3. **Validate the preview YAML against the schema** — before presenting the preview YAML to the user, fetch the published MaC JSON Schema from `https://docs.getmontecarlo.com/mac/schema.json` (WebFetch) and check the preview YAML against it. If any field in the YAML does not appear in the schema for the given monitor type, flag it and correct it. Note: the schema validates field names, types, and enum values only — cross-field semantic constraints are enforced by the backend at apply time, not by the schema. +4. **MaC-managed monitors** — if `get_monitors` returns a `mac_name` or the user mentions the monitor is managed via a MaC YAML file, note this before applying: changes made via the API will be overwritten the next time `montecarlo monitors apply` runs. Offer to hand off to `/manage-mac` (edit workflow) instead so the YAML file stays the source of truth. --- From 1096e2cc8ff7a607e94558c4ec0fc8b36bac4f2a Mon Sep 17 00:00:00 2001 From: wdeka Date: Wed, 20 May 2026 14:19:14 +0200 Subject: [PATCH 12/19] docs: update manage-mac descriptions in READMEs to reflect create/edit/validate/import Co-Authored-By: Claude Sonnet 4.6 --- README.md | 2 +- skills/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fa85897..c81a943 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ Skills are grouped by the job they help you do. Orchestrated workflows sequence |---|---|---| | **Proactive Monitoring** _(workflow)_ | Sequences coverage analysis → gap identification → monitor creation into a guided flow. | [SKILL](skills/proactive-monitoring/SKILL.md) | | **Monitoring Advisor** | Identifies coverage gaps and creates monitors for warehouse tables or AI agents — validates tables and fields against your live workspace, emits monitors-as-code YAML. | [README](skills/monitoring-advisor/README.md) | -| **Manage MaC** | Author, edit, and validate Monitors-as-Code YAML files. Reads the published schema to ensure field correctness across all 14 monitor types. | [SKILL](skills/manage-mac/SKILL.md) | +| **Manage MaC** | Create, edit, validate, and import Monitors-as-Code YAML files — authors new monitors from scratch, modifies existing files, validates against the published JSON Schema, and exports live monitors to YAML. | [SKILL](skills/manage-mac/SKILL.md) | | **Tune Monitor** | Recommends sensitivity, segment, and schedule changes to reduce alert noise on an existing metric monitor. | [SKILL](skills/tune-monitor/SKILL.md) | ### Prevent — catch issues before they ship diff --git a/skills/README.md b/skills/README.md index de8e370..fe27ed3 100644 --- a/skills/README.md +++ b/skills/README.md @@ -18,7 +18,7 @@ Skills are platform-agnostic instruction sets that tell an AI coding agent what | **[Storage Cost Analysis](storage-cost-analysis/)** | Identifies storage waste patterns (unread, zombie, dead-end tables) and recommends safe cleanup with cost estimates. | | **[Performance Diagnosis](performance-diagnosis/)** | Diagnoses slow pipelines and expensive queries across Airflow, dbt, and Databricks with tiered investigation. | | **[Remediation](remediation/)** | Investigates and remediates data quality alerts — runs TSA root cause analysis, discovers available tools, executes fixes (or escalates), and documents the resolution. | -| **[Manage MaC](manage-mac/)** | Author, edit, and validate Monitors-as-Code YAML files. Reads the published JSON Schema to ensure field correctness across all 14 monitor types. | +| **[Manage MaC](manage-mac/)** | Create, edit, validate, and import Monitors-as-Code YAML files — authors new monitors from scratch, modifies existing files, validates against the published JSON Schema, and exports live monitors to YAML. | | **[Tune Monitor](tune-monitor/)** | Analyzes a Monte Carlo metric monitor's alert history and recommends configuration changes to reduce noise — sensitivity, WHERE conditions, segment exclusions, schedule, and aggregation. | | **[Connection Auth Rules](connection-auth-rules/)** | Build a Connection Auth Rules configuration for a Monte Carlo connection type. Fetches live connector schemas and transform steps from the apollo-agent repo. | | **[Instrument Agent](instrument-agent/)** | Instruments a Python AI agent for Monte Carlo Agent Observability — detects AI libraries, installs the Monte Carlo OpenTelemetry SDK, sets up tracing, and verifies traces in Monte Carlo. Asks before editing. | From 2d212046d07a6a1ecadc0b687df113be9a9a5d62 Mon Sep 17 00:00:00 2001 From: wdeka Date: Wed, 20 May 2026 16:13:36 +0200 Subject: [PATCH 13/19] fix(manage-mac): address PR review feedback from Santiago MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove deprecated/discouraged monitor types from supported type list: field_health, dimension_tracking, field_quality, comparison, freshness, volume - Keep single "do not author" note; removed all scattered mentions - Strengthen get_validation_predicates usage: always call the tool, list is reference only - Remove field_quality and volume from AUTO operator callout — verify via schema instead - Create Step 1: reference data-monitor-creation.md for table/field/domain/warehouse validation instead of duplicating that knowledge Co-Authored-By: Claude Sonnet 4.6 --- skills/manage-mac/SKILL.md | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/skills/manage-mac/SKILL.md b/skills/manage-mac/SKILL.md index 9b4628d..79ff637 100644 --- a/skills/manage-mac/SKILL.md +++ b/skills/manage-mac/SKILL.md @@ -72,9 +72,12 @@ required fields. Never guess field names — always derive them from the schema. The top-level structure under `montecarlo:` contains these monitor type keys: -- `field_health`, `dimension_tracking`, `json_schema`, `metric`, `metric_comparison` -- `custom_sql`, `validation`, `comparison`, `query_performance` -- `freshness`, `volume`, `field_quality`, `table`, `bulk_monitor` +- `metric`, `metric_comparison`, `custom_sql`, `validation` +- `json_schema`, `query_performance`, `table`, `bulk_monitor` + +Do not author new monitors of types `field_health`, `dimension_tracking`, `field_quality`, +`comparison`, `freshness`, or `volume` — these are deprecated or discouraged. If a user +asks to edit or validate a file that contains them, handle it but do not add new ones. The `notifications:` key is also valid under `montecarlo:` — it is the Notifications-as-Code (NaC) block and is handled by a separate pipeline. Do not validate or modify its contents. @@ -89,8 +92,7 @@ top level. The schema shows `data_source.table` (and optionally `data_source.sch `data_source.dataset`). Required fields: `name`, `description`, `data_source`, `alert_conditions`. -`sensitivity` is a field only on `metric` monitors. It is not a valid field on `custom_sql`, -`field_health`, or any other monitor type. +`sensitivity` is a field only on `metric` monitors. It is not valid on any other monitor type. `query_performance` monitors do NOT have a `table` field. Asset targeting uses a `selection` array of filter objects, not a direct table reference. Do not add `table:` to a @@ -127,9 +129,10 @@ valid structure including all required fields is: field: email ``` -Common predicate names: `not_null`, `is_not_empty`, `starts_with`, `ends_with`, `contains`, -`in_set`, `regex_match`, `greater_than`, `less_than`, `greater_than_or_equal`, -`less_than_or_equal`. For the full catalog, use the `get_validation_predicates` MCP tool. +**Always call `get_validation_predicates` for the full predicate catalog** — do not rely on +a hardcoded list. The list below is a quick reference only; the tool is authoritative: +`not_null`, `is_not_empty`, `starts_with`, `ends_with`, `contains`, `in_set`, `regex_match`, +`greater_than`, `less_than`, `greater_than_or_equal`, `less_than_or_equal`. **Binary predicates require a `right` value node.** Predicates that compare a field against a literal (`starts_with`, `ends_with`, `contains`, `in_set`, `regex_match`, `greater_than`, etc.) @@ -156,13 +159,20 @@ Use this when the user has no existing file and wants monitors for a table or us Ask for any information not already provided: 1. **Table(s):** fully qualified names (database.schema.table or equivalent) -2. **Monitor type(s):** what kind of monitoring — metric, freshness, validation, custom SQL, etc. +2. **Monitor type(s):** what kind of monitoring — metric, validation, custom SQL, etc. If the user is unsure, suggest the most common types for their use case. + Do not suggest deprecated types (`field_health`, `dimension_tracking`, `field_quality`, + `comparison`, `freshness`, `volume`). 3. **Namespace:** the MaC namespace to use with `montecarlo monitors apply --namespace ` 4. **Notification audiences:** optional; ask only if the user mentions alerting Do not ask about fields that the schema marks as optional unless the user brings them up. +**Table and field validation:** If the user provides a table name, follow steps 1–3 from +`../monitoring-advisor/references/data-monitor-creation.md` (relative to this file) to resolve +the MCON, verify column names, and resolve domain and warehouse UUIDs before authoring the YAML. +Never guess or hallucinate column names, warehouse UUIDs, or domain UUIDs. + ### Step 2: Author the YAML Generate a well-formed YAML file: @@ -178,12 +188,9 @@ Generate a well-formed YAML file: 5. Use exact field names from the schema — no invented names, no camelCase variants > **Auto threshold:** To use ML-based auto thresholds, set `operator: AUTO`, `AUTO_HIGH`, or -> `AUTO_LOW` inside an `alert_conditions` item. This is valid on `metric`, `custom_sql`, -> `volume`, and other types that include `AUTO` in their operator enum — always verify in the -> schema for the specific monitor type. Do not omit `alert_conditions` to imply auto — on -> `metric` monitors the field is required and must always be present. -> `field_quality` does NOT support `AUTO` operators — use `GT`, `LT`, `GTE`, `LTE`, `EQ`, -> or `NEQ` for that type. +> `AUTO_LOW` inside an `alert_conditions` item. Always verify the operator enum in the schema +> for the specific monitor type — not all types support `AUTO`. Do not omit `alert_conditions` +> to imply auto — on `metric` monitors the field is required and must always be present. > **`sensitivity` enum:** The `sensitivity` field accepts lowercase values only: `high`, > `medium`, `low`. Values like `HIGH` or `Medium` are invalid. From 6ddd23557adc65069ba7c254ab2577a1408b422b Mon Sep 17 00:00:00 2001 From: wdeka Date: Wed, 20 May 2026 16:48:07 +0200 Subject: [PATCH 14/19] feat(manage-mac): rewrite skill to tool-first authoring via dry_run=True MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Create and Edit workflows now call create_or_update_*_monitor(dry_run=True) to get canonical YAML from the backend rather than hand-authoring from the JSON schema. The schema (WebFetch) is now only used in the Validate workflow for local validation without a server round-trip. Key changes: - Remove mandatory Phase 0 schema fetch; schema is now Validate-only - Add MCP tools table to Prerequisites; MCP server required for Create/Edit/Import - Create: tool-first via dry_run=True, with table/column validation from data-monitor-creation.md steps 1-3 - Edit: dry_run=True for both deployed (UUID via get_monitors) and undeployed monitors - Validate: unchanged — WebFetch schema, graceful degradation, type-specific reminders - Import: unchanged — get_monitors with config_format=yaml - Fallback to schema-based authoring for types without a dedicated MCP tool (json_schema, query_performance, bulk_monitor) - Version bump 1.0.0 → 2.0.0 Co-Authored-By: Claude Sonnet 4.6 --- skills/manage-mac/SKILL.md | 352 +++++++++++++++---------------------- 1 file changed, 137 insertions(+), 215 deletions(-) diff --git a/skills/manage-mac/SKILL.md b/skills/manage-mac/SKILL.md index 79ff637..847ac2e 100644 --- a/skills/manage-mac/SKILL.md +++ b/skills/manage-mac/SKILL.md @@ -1,6 +1,6 @@ --- name: monte-carlo-manage-mac -description: Create, edit, validate, and import Monitors-as-Code YAML files. Fetches the published MaC JSON Schema to ensure correctness across all 14 monitor types. +description: Create, edit, validate, and import Monitors-as-Code YAML files. Uses Monte Carlo MCP dry_run calls for authoring and the published JSON Schema for local validation. when_to_use: | Invoke when the user has a MaC YAML file they want to create, edit, or validate, or when they want to export live monitors into a MaC YAML file. @@ -11,20 +11,16 @@ when_to_use: | Do NOT invoke when the user wants to discover what to monitor or generate monitors from scratch via table exploration — use monitoring-advisor for that. bucket: Monitoring -version: 1.0.0 +version: 2.0.0 --- # Manage MaC: Monitors-as-Code YAML Authoring -You are a Monitors-as-Code (MaC) YAML authoring agent. Your job is to help users create, edit, and -validate MaC YAML files that define Monte Carlo monitors. You work directly from the file and the -schema — not from table discovery. +You are a Monitors-as-Code (MaC) YAML authoring agent. Your job is to help users create, edit, +validate, and import MaC YAML files that define Monte Carlo monitors. **Arguments:** $ARGUMENTS -The MaC schema is published at `https://docs.getmontecarlo.com/mac/schema.json`. **Use WebFetch** -to retrieve it in Phase 0. - --- ## Entry point detection @@ -38,249 +34,191 @@ Determine which workflow applies based on the user's request: | Has an existing file; wants to check it before applying | **Validate** | | Wants to export live monitors into a MaC YAML file | **Import** | -If the intent is ambiguous, ask: -> "Which workflow do you need? -> 1. **Create** — no existing file; generate a new monitors YAML from scratch -> 2. **Edit** — you have a file and want to add, modify, or remove monitors -> 3. **Validate** — you have a file and want to check it before applying -> 4. **Import** — export live monitors from Monte Carlo into a new YAML file" +If ambiguous, ask which workflow is needed. --- ## Prerequisites -No MCP tools are required for file-only operations (create, edit, validate). The published JSON -Schema (fetched via WebFetch in Phase 0) is the sole source of truth for field names, types, -enums, and required fields. - -Monte Carlo MCP tools (`create_or_update_*_monitor` with `dry_run=True`) are available as an -optional cross-reference when the user wants to preview what the API would generate for a monitor -before deciding between file-based and live deployment. Use them only if explicitly requested. - ---- - -## Phase 0: Read the schema - -Before authoring or validating any YAML, fetch the published MaC JSON Schema using the WebFetch tool: - -``` -https://docs.getmontecarlo.com/mac/schema.json -``` - -The schema is JSON Schema Draft 7 and describes all valid monitor types, fields, types, enums, and -required fields. Never guess field names — always derive them from the schema. - -The top-level structure under `montecarlo:` contains these monitor type keys: +The Monte Carlo MCP server is required for **Create**, **Edit**, and **Import** workflows. No MCP +tools are needed for **Validate** (file + schema only). -- `metric`, `metric_comparison`, `custom_sql`, `validation` -- `json_schema`, `query_performance`, `table`, `bulk_monitor` +### Available MCP tools -Do not author new monitors of types `field_health`, `dimension_tracking`, `field_quality`, -`comparison`, `freshness`, or `volume` — these are deprecated or discouraged. If a user -asks to edit or validate a file that contains them, handle it but do not add new ones. - -The `notifications:` key is also valid under `montecarlo:` — it is the Notifications-as-Code (NaC) -block and is handled by a separate pipeline. Do not validate or modify its contents. - -Each monitor type key maps to an array of monitor objects. The schema's `items` for each key -defines what fields are valid, which are required, and what enum values are accepted. - -**Type-specific notes:** - -`metric` monitors use a nested `data_source` object — there is no flat `table` field at the -top level. The schema shows `data_source.table` (and optionally `data_source.schema`, -`data_source.dataset`). Required fields: `name`, `description`, `data_source`, -`alert_conditions`. - -`sensitivity` is a field only on `metric` monitors. It is not valid on any other monitor type. - -`query_performance` monitors do NOT have a `table` field. Asset targeting uses a `selection` -array of filter objects, not a direct table reference. Do not add `table:` to a -`query_performance` monitor. - -The `table` monitor type (key: `table`) does NOT have a flat `table` field either — assets are -targeted via the `asset_selection` object (`databases`, `filters`, `exclusions`). The name -coincidence is a common confusion point. - -Per-monitor audience wiring uses the `audiences` field (array of strings) directly on the -monitor object. This is distinct from the top-level `notifications:` NaC block — do not -confuse them. - -`validation` monitors have an `alert_condition` field (singular — not `alert_conditions`) -whose internal structure is a predicate tree not described further by the schema. The minimal -valid structure including all required fields is: - -```yaml -- name: email_not_null - data_source: - table: db.schema.table - schedule: - type: fixed - alert_condition: - type: GROUP - operator: AND - conditions: - - type: BINARY - predicate: - name: not_null - negated: false - left: - - type: FIELD - field: email -``` - -**Always call `get_validation_predicates` for the full predicate catalog** — do not rely on -a hardcoded list. The list below is a quick reference only; the tool is authoritative: -`not_null`, `is_not_empty`, `starts_with`, `ends_with`, `contains`, `in_set`, `regex_match`, -`greater_than`, `less_than`, `greater_than_or_equal`, `less_than_or_equal`. - -**Binary predicates require a `right` value node.** Predicates that compare a field against a -literal (`starts_with`, `ends_with`, `contains`, `in_set`, `regex_match`, `greater_than`, etc.) -need both a `left` (the field) and a `right` (the comparison value). Unary predicates -(`not_null`, `is_not_empty`) take only `left`. Example with `starts_with`: - -```yaml - left: - - type: FIELD - field: email - right: - - type: VALUE - value: "user@" -``` +| Tool | Used for | +|---|---| +| `search` | Resolve a table name to its MCON and `full_table_id` | +| `get_table` | Verify column names and retrieve table schema | +| `get_warehouses` | Resolve warehouse UUID | +| `create_or_update_metric_monitor` | Author `metric` monitors (`dry_run=True`) | +| `create_or_update_sql_monitor` | Author `custom_sql` monitors (`dry_run=True`) | +| `create_or_update_validation_monitor` | Author `validation` monitors (`dry_run=True`) | +| `create_or_update_table_monitor` | Author `table` monitors (`dry_run=True`) | +| `create_or_update_comparison_monitor` | Author `metric_comparison` monitors (`dry_run=True`) | +| `get_validation_predicates` | List valid predicates for `validation` monitors | +| `get_monitors` | Fetch live monitors in YAML format (Import workflow) | + +For monitor types without a dedicated MCP tool (`json_schema`, `query_performance`, +`bulk_monitor`), fall back to schema-based authoring: fetch +`https://docs.getmontecarlo.com/mac/schema.json` via WebFetch and derive all fields from the +schema. Never guess field names. --- ## Create workflow -Use this when the user has no existing file and wants monitors for a table or use case. - ### Step 1: Gather context Ask for any information not already provided: -1. **Table(s):** fully qualified names (database.schema.table or equivalent) +1. **Table(s):** fully qualified name (database.schema.table or equivalent) 2. **Monitor type(s):** what kind of monitoring — metric, validation, custom SQL, etc. - If the user is unsure, suggest the most common types for their use case. - Do not suggest deprecated types (`field_health`, `dimension_tracking`, `field_quality`, - `comparison`, `freshness`, `volume`). -3. **Namespace:** the MaC namespace to use with `montecarlo monitors apply --namespace ` -4. **Notification audiences:** optional; ask only if the user mentions alerting + Do not suggest deprecated types: `field_health`, `dimension_tracking`, `field_quality`, + `comparison`, `freshness`, or `volume`. +3. **Namespace:** used with `montecarlo monitors apply --namespace ` +4. **Notification audiences:** optional — ask only if the user mentions alerting -Do not ask about fields that the schema marks as optional unless the user brings them up. +### Step 2: Resolve table and field metadata -**Table and field validation:** If the user provides a table name, follow steps 1–3 from -`../monitoring-advisor/references/data-monitor-creation.md` (relative to this file) to resolve -the MCON, verify column names, and resolve domain and warehouse UUIDs before authoring the YAML. -Never guess or hallucinate column names, warehouse UUIDs, or domain UUIDs. +Follow steps 1–3 from `../monitoring-advisor/references/data-monitor-creation.md` to: +- Resolve the MCON and `full_table_id` via `search` +- Verify column names via `get_table` +- Resolve domain UUID and warehouse UUID -### Step 2: Author the YAML +Never guess column names, warehouse UUIDs, or domain UUIDs. -Generate a well-formed YAML file: +For `validation` monitors, call `get_validation_predicates` to confirm the predicate names +available in the user's workspace before proceeding. -1. Start with the yaml-language-server schema header comment: +### Step 3: Call the MCP tool with dry_run=True + +For each monitor, call the appropriate `create_or_update_*_monitor` with `dry_run=True` and the +parameters the user specified. The backend returns a canonical YAML block — use that output as +the YAML for the file rather than authoring it by hand. + +Call the tool once per monitor. If the user wants multiple monitors, make a separate call for +each one. + +### Step 4: Assemble the YAML file + +1. Add the yaml-language-server header as the first line: ```yaml # yaml-language-server: $schema=https://docs.getmontecarlo.com/mac/schema.json ``` 2. Open with `montecarlo:` as the root key -3. Under `montecarlo:`, add each monitor type as a key mapping to a list -4. For each monitor object, include all required fields from the schema and only optional fields - that the user has specified or that materially improve the monitor -5. Use exact field names from the schema — no invented names, no camelCase variants - -> **Auto threshold:** To use ML-based auto thresholds, set `operator: AUTO`, `AUTO_HIGH`, or -> `AUTO_LOW` inside an `alert_conditions` item. Always verify the operator enum in the schema -> for the specific monitor type — not all types support `AUTO`. Do not omit `alert_conditions` -> to imply auto — on `metric` monitors the field is required and must always be present. +3. Group the dry_run output blocks by monitor type under their respective keys +4. If the user specified notification audiences, add the `audiences` field (array of strings) + directly on each monitor object -> **`sensitivity` enum:** The `sensitivity` field accepts lowercase values only: `high`, -> `medium`, `low`. Values like `HIGH` or `Medium` are invalid. +### Step 5: Tell the user how to apply -### Step 3: Tell the user how to apply - -After presenting the YAML, give the apply command: +Present the assembled YAML and give the apply command: ``` montecarlo monitors apply --namespace ``` -If the user has not provided a namespace, prompt them for one before showing the command. +Prompt for namespace if not provided. --- ## Edit workflow -Use this when the user has an existing MaC file and wants to change it. - ### Step 1: Read the file -Use the Read tool to load the user's file. If no path is provided, ask for it. +Use the Read tool to load the user's file. Ask for the path if not provided. ### Step 2: Understand the requested change -Identify what the user wants to do: +**Adding a monitor:** Follow the Create workflow (Steps 1–4) to generate the new monitor block +via `dry_run=True`, then append it to the correct type list in the file. -- **Add** a monitor: determine the type, then follow the same field-gathering and authoring - steps as the Create workflow (Step 1 and Step 2) — ask for required fields not already - provided, derive them from the schema, then append the new block to the correct type list -- **Modify** a monitor: locate the target monitor by name or table, apply the specified changes -- **Remove** a monitor: locate and delete the target monitor object. If it is the only item in - its type list, remove the entire type key as well — do not leave an empty list +**Modifying a monitor:** +- If the monitor has been deployed and has a UUID: resolve its UUID via + `get_monitors(full_table_id=..., config_format="yaml")`, then call + `create_or_update_*_monitor(dry_run=True, monitor_uuid=, ...)` with the updated + parameters. Use the returned YAML block to replace the existing monitor entry. +- If the monitor has not yet been deployed (no UUID): call + `create_or_update_*_monitor(dry_run=True, ...)` without a UUID, using the current parameters + plus the requested changes. Replace the existing block with the returned YAML. -For additions and modifications, cross-reference the schema to confirm field names and values -are valid. +**Removing a monitor:** Delete the monitor object. If it is the only item under its type key, +remove the entire type key — do not leave an empty list. -While reading the file, also check for deprecated field names (marked `deprecated: true` in -the schema). If found, follow the deprecated field handling procedure in the Validate section -before applying changes. +While reading the file, check for deprecated field names (marked `deprecated: true` in the +schema). If found, list all occurrences and offer to migrate them before applying other changes. +Apply the migration only after explicit user confirmation. -### Step 3: Apply the change and present the diff +### Step 3: Apply and show the diff -Show the user only what changed — either the before/after for a modified block or the new block -being added. Then write the updated file using the Edit tool. +Show only what changed — before/after for modified blocks, or the new block for additions. Then +write the updated file using the Edit tool. --- ## Validate workflow -Use this when the user wants to check a file before applying it. +### Step 1: Fetch the schema -### Step 1: Read the file +Fetch the published MaC JSON Schema via WebFetch: -Use the Read tool to load the user's file. +``` +https://docs.getmontecarlo.com/mac/schema.json +``` -### Step 2: Check against the schema +If the schema cannot be fetched, stop and report: +> Cannot fetch the MaC schema from `https://docs.getmontecarlo.com/mac/schema.json`. Please +> check your network connection and try again. -For each monitor in the file, validate: +Do not proceed with validation without the schema. + +### Step 2: Read the file + +Use the Read tool to load the user's file. Ask for the path if not provided. + +### Step 3: Validate against the schema + +For each monitor in the file, check: 1. **Required fields present:** every field marked `required` in the schema items is present 2. **No unknown fields:** no field names that don't appear in the schema for that monitor type -3. **Enum values valid:** any field with an `enum` constraint uses one of the listed values. - Note that string enums in MaC are case-sensitive and typically lowercase — for example, - `sensitivity` accepts `high`/`medium`/`low`, not `HIGH`/`MEDIUM`/`LOW`. +3. **Enum values valid:** enum-constrained fields use one of the listed values. String enums are + case-sensitive and typically lowercase (e.g. `sensitivity` accepts `high`/`medium`/`low`). 4. **Type correctness:** string fields are strings, integer fields are integers, etc. -5. **Top-level structure:** `montecarlo:` key must be present; its sub-keys must be one of the 14 valid monitor types or `notifications:`. MaC files may be co-located inside dbt `schema.yml` alongside `version:`, `models:`, etc. — extra top-level keys are allowed and must not be flagged as errors. +5. **Top-level structure:** `montecarlo:` must be present; its sub-keys must be valid monitor + type keys or `notifications:`. MaC files may be co-located in dbt `schema.yml` alongside + `version:`, `models:`, etc. — extra top-level keys are allowed and must not be flagged. + +**Schema scope disclaimer:** The schema validates field names, types, and enum values only. +Cross-field semantic constraints are enforced by the backend at apply time — a file that passes +schema validation may still be rejected by `montecarlo monitors apply`. + +**Type-specific reminders:** +- `metric` monitors use a nested `data_source` object (`data_source.table`), not a flat `table` + field. `alert_conditions` is required. `sensitivity` is only valid on `metric`. +- `validation` monitors have a singular `alert_condition` field whose value is a predicate tree. + The minimal valid structure requires `type: GROUP`, `operator`, and `conditions` with at least + one `BINARY` or `UNARY` node. Binary predicates require both `left` (field) and `right` + (value) nodes; unary predicates (`not_null`, `is_not_empty`) require only `left`. +- `query_performance` monitors have no `table` field — asset targeting uses a `selection` array. +- `table` monitors have no flat `table` field — asset targeting uses `asset_selection`. +- `notifications:` is the NaC block — do not validate or modify its contents. -**Schema scope disclaimer:** The schema validates field names, types, and enum values only. Cross-field semantic constraints (e.g. required field combinations, mutually exclusive options, fields that are only valid together with another field) are NOT checked here — they are enforced by the Monte Carlo backend at apply time. A file that passes schema validation may still be rejected by `montecarlo monitors apply`. +Do not author new monitors of types `field_health`, `dimension_tracking`, `field_quality`, +`comparison`, `freshness`, or `volume` — these are deprecated. If the file contains them, +validate what is present but do not add new instances. -### Step 3: Report findings +### Step 4: Report findings If the file is valid with no deprecated fields: > The file is valid. All monitors conform to the MaC schema. > Apply with: `montecarlo monitors apply --namespace ` -If the file has issues, report each one with: -- The monitor type and monitor name/index where the issue appears -- The specific problem (missing field, unknown field, invalid enum value, wrong type) -- The fix +If issues exist, report each one with the monitor type, name/index, specific problem, and fix. +Do not stop at the first error — report all issues in a single pass. -**Deprecated field handling:** The schema marks legacy field names with `deprecated: true` and a `description` of the form `"Deprecated: use \`\` instead."` The corresponding canonical field carries `"description": "Use this field. Replaces the deprecated \`\`."` When you encounter deprecated fields during validation or editing, proactively offer to migrate them: - -> Found deprecated field(s): `comparisons` → should be `alert_conditions`. The file will still deploy successfully (the backend accepts both names), but migrating now avoids future breakage. Want me to update the file? - -Always apply the migration only after explicit user confirmation. List all deprecated fields found before asking, not one at a time. - -Example report format: +Example format: ``` Validation issues found: @@ -289,28 +227,23 @@ Validation issues found: - Missing required field: `description` - Fix: add `description: "Row count for orders table"` -2. metric[1] ("null_rate_check") - - Unknown field: `sensivity` (did you mean `sensitivity`?) - - Fix: rename to `sensitivity` - -3. custom_sql[0] ("status_check") +2. custom_sql[0] ("status_check") - Unknown field: `sensitivity` - - Fix: remove this field — `sensitivity` is only valid on `metric` monitors + - Fix: remove — `sensitivity` is only valid on `metric` monitors -4. validation[0] ("null_check") - - Invalid enum value for `condition_operator`: "EQUALS" - - Valid values: [see schema for the full list] - - Fix: use one of the valid enum values +3. validation[0] ("email_check") + - Invalid enum value for `schedule.type`: "cron" + - Valid values: [see schema] + - Fix: use a valid schedule type ``` -Do not stop at the first error — report all issues found in a single pass. +**Deprecated field migration:** List all deprecated fields found and offer to migrate them to +their canonical equivalents. Apply only after explicit user confirmation. --- ## Import workflow -Use this when the user wants to export live monitors (created via the UI or API) into a MaC YAML file. - ### Step 1: Identify the source Ask what to import: @@ -319,46 +252,35 @@ Ask what to import: ### Step 2: Fetch monitors using MCP -Call `get_monitors` with `config_format="yaml"` — this returns monitors already formatted as MaC YAML blocks: +Call `get_monitors` with `config_format="yaml"`: ``` get_monitors(full_table_id="database.schema.table", config_format="yaml") ``` -For broader imports, call without `full_table_id` and filter by other criteria. +For broader imports, omit `full_table_id` and filter by other criteria. ### Step 3: Assemble the YAML file -1. Group returned monitors by type under a single `montecarlo:` block -2. Add the yaml-language-server header comment as the first line -3. If the user has not provided a namespace, prompt them for one to use with `montecarlo monitors apply` -4. If the same monitor appears under multiple names, deduplicate +1. Add the yaml-language-server header as the first line +2. Group returned monitors by type under a single `montecarlo:` block +3. Deduplicate if the same monitor appears under multiple names +4. Prompt for a namespace if not provided ### Step 4: Present and save Show the assembled file and offer to save it. Remind the user: > These monitors are now defined in your repo. Once you run `montecarlo monitors apply`, -> Monte Carlo will manage them as MaC resources and they will be identified by their `name` field. -> Any future edits to these monitors should be made in this file, not in the UI. +> Monte Carlo will manage them as MaC resources identified by their `name` field. Future edits +> to these monitors should be made in this file, not in the UI. --- ## File format rules -- Always include the `# yaml-language-server: $schema=...` comment as the first line +- Always include `# yaml-language-server: $schema=https://docs.getmontecarlo.com/mac/schema.json` + as the first line - Use 2-space indentation - Quote string values that contain special characters or colons - Do not add inline comments explaining field values - ---- - -## Graceful degradation - -If the schema cannot be fetched from `https://docs.getmontecarlo.com/mac/schema.json`, stop and -tell the user: - -> Cannot fetch the MaC schema from `https://docs.getmontecarlo.com/mac/schema.json`. Please check -> your network connection and try again. - -Do not attempt to author or validate YAML without the schema. From 959231f6720cf202c6c363ff8244d6f79e0be6fe Mon Sep 17 00:00:00 2001 From: wdeka Date: Thu, 21 May 2026 19:22:43 +0200 Subject: [PATCH 15/19] fix(manage-mac): fix S49/S97/S98 gaps from skill evaluation - Create Step 1: prompt for metric type/expression on `metric` monitors - Validate: document `query_performance` alert_conditions structure (require `threshold` + `metric`; additionalProperties: false) - Validate: document `bulk_monitor.monitor_type` enum values (`bulk_metric`, `bulk_pii`); `metric` is not valid Co-Authored-By: Claude Sonnet 4.6 --- skills/manage-mac/SKILL.md | 132 ++++++++++++++++++++++++++++++------- 1 file changed, 109 insertions(+), 23 deletions(-) diff --git a/skills/manage-mac/SKILL.md b/skills/manage-mac/SKILL.md index 847ac2e..65079b7 100644 --- a/skills/manage-mac/SKILL.md +++ b/skills/manage-mac/SKILL.md @@ -11,7 +11,7 @@ when_to_use: | Do NOT invoke when the user wants to discover what to monitor or generate monitors from scratch via table exploration — use monitoring-advisor for that. bucket: Monitoring -version: 2.0.0 +version: 1.0.0 --- # Manage MaC: Monitors-as-Code YAML Authoring @@ -59,9 +59,12 @@ tools are needed for **Validate** (file + schema only). | `get_monitors` | Fetch live monitors in YAML format (Import workflow) | For monitor types without a dedicated MCP tool (`json_schema`, `query_performance`, -`bulk_monitor`), fall back to schema-based authoring: fetch -`https://docs.getmontecarlo.com/mac/schema.json` via WebFetch and derive all fields from the -schema. Never guess field names. +`bulk_monitor`), fall back to schema-based authoring: fetch the schema via Bash and derive all +fields from it. Never guess field names. + +```bash +curl -s https://clidocs.getmontecarlo.com/mac/schema.json +``` --- @@ -74,9 +77,18 @@ Ask for any information not already provided: 1. **Table(s):** fully qualified name (database.schema.table or equivalent) 2. **Monitor type(s):** what kind of monitoring — metric, validation, custom SQL, etc. Do not suggest deprecated types: `field_health`, `dimension_tracking`, `field_quality`, - `comparison`, `freshness`, or `volume`. + `comparison`, `freshness`, or `volume`. If the user explicitly requests one of these, + decline: inform them it is no longer supported, and suggest the closest valid alternative + (e.g. `freshness` or `volume` → `metric` monitor tracking recency or row count; + `field_health` → `validation` monitor; `comparison` → `metric_comparison`). + Note: `comparison` (deprecated) and `metric_comparison` (current) are distinct — never + decline a request for a `metric_comparison` monitor. 3. **Namespace:** used with `montecarlo monitors apply --namespace ` 4. **Notification audiences:** optional — ask only if the user mentions alerting +5. **Type-specific required inputs:** + - `metric`: ask for the metric to track if not provided (e.g. row count, null rate, freshness, custom metric expression) + - `custom_sql`: ask for the SQL query if not provided + - `json_schema`: ask for the field name to check if not provided ### Step 2: Resolve table and field metadata @@ -88,7 +100,8 @@ Follow steps 1–3 from `../monitoring-advisor/references/data-monitor-creation. Never guess column names, warehouse UUIDs, or domain UUIDs. For `validation` monitors, call `get_validation_predicates` to confirm the predicate names -available in the user's workspace before proceeding. +available in the user's workspace before proceeding. If the result is empty, inform the user +that no validation predicates are configured in their workspace and stop. ### Step 3: Call the MCP tool with dry_run=True @@ -99,11 +112,18 @@ the YAML for the file rather than authoring it by hand. Call the tool once per monitor. If the user wants multiple monitors, make a separate call for each one. +If an MCP tool returns an error, stop and surface the error message to the user. Do not proceed +to assemble the file with a partial result. + +After receiving the dry_run output, check it for deprecated field names (e.g. `resource`, +`notify_rule_run_failure`, `domain_uuids`, `comparisons`). If any are present, replace them with +their canonical equivalents before assembling the file. + ### Step 4: Assemble the YAML file 1. Add the yaml-language-server header as the first line: ```yaml - # yaml-language-server: $schema=https://docs.getmontecarlo.com/mac/schema.json + # yaml-language-server: $schema=https://clidocs.getmontecarlo.com/mac/schema.json ``` 2. Open with `montecarlo:` as the root key 3. Group the dry_run output blocks by monitor type under their respective keys @@ -126,7 +146,15 @@ Prompt for namespace if not provided. ### Step 1: Read the file -Use the Read tool to load the user's file. Ask for the path if not provided. +Use the Read tool to load the user's file. Ask for the path if not provided. If the Read tool +returns an error (file not found), report it and ask for the correct path — do not create a new +file silently. + +Fetch the schema so you can identify deprecated fields and validate any new fields being added: + +```bash +curl -s https://clidocs.getmontecarlo.com/mac/schema.json +``` ### Step 2: Understand the requested change @@ -134,8 +162,9 @@ Use the Read tool to load the user's file. Ask for the path if not provided. via `dry_run=True`, then append it to the correct type list in the file. **Modifying a monitor:** -- If the monitor has been deployed and has a UUID: resolve its UUID via - `get_monitors(full_table_id=..., config_format="yaml")`, then call +- If the monitor has been deployed and has a UUID: if the UUID is already known (e.g. present + in the file or supplied by the user), use it directly. Otherwise resolve it via + `get_monitors(full_table_id=..., config_format="yaml")`. Then call `create_or_update_*_monitor(dry_run=True, monitor_uuid=, ...)` with the updated parameters. Use the returned YAML block to replace the existing monitor entry. - If the monitor has not yet been deployed (no UUID): call @@ -146,28 +175,57 @@ via `dry_run=True`, then append it to the correct type list in the file. remove the entire type key — do not leave an empty list. While reading the file, check for deprecated field names (marked `deprecated: true` in the -schema). If found, list all occurrences and offer to migrate them before applying other changes. -Apply the migration only after explicit user confirmation. +schema). Scope this scan to keys inside the `montecarlo:` block only — do not flag dbt or other +co-located keys. If found, list all occurrences and offer to migrate them all in a single +operation before applying other changes. Apply the migration only after explicit user +confirmation. If the user declines, proceed with the requested edit without migrating. + +The schema encodes the canonical replacement in the field's `description` (e.g. "Deprecated. +Use `warehouse` instead."). Use that to determine the correct replacement name — never guess. + +If both the deprecated field and its canonical replacement are present with different values, +flag the conflict and ask the user which value to keep before proceeding. + +Also check for deprecated monitor type keys (`field_health`, `dimension_tracking`, +`field_quality`, `comparison`, `freshness`, `volume`). These cannot be mechanically migrated — +they require re-authoring with a supported type. Offer to create a replacement monitor via the +Create workflow, then delete the deprecated type block. + +Some fields are YAML-level only and do not require a `dry_run` MCP call: `audiences`, +`is_paused`, `labels`, `tags`, `priority`, `data_quality_dimension`, `domains`. For these, +add or modify the field directly in the YAML without calling the MCP tool. Note: `is_paused` +is accepted by the backend at apply time but is not present in the JSON Schema — if a schema +scan flags it as unknown, ignore that warning. ### Step 3: Apply and show the diff Show only what changed — before/after for modified blocks, or the new block for additions. Then write the updated file using the Edit tool. +Ensure the `# yaml-language-server: $schema=https://clidocs.getmontecarlo.com/mac/schema.json` +header is the first line. Add it if the existing file lacks it. + +If removing the last monitor of the last type, the file should contain only the +yaml-language-server header and `montecarlo: {}`. + --- ## Validate workflow ### Step 1: Fetch the schema -Fetch the published MaC JSON Schema via WebFetch: +Fetch the published MaC JSON Schema via Bash. The schema is ~50KB and WebFetch truncates it, +leaving `validation`, `table`, `query_performance`, and `bulk_monitor` types invisible: -``` -https://docs.getmontecarlo.com/mac/schema.json +```bash +curl -s https://clidocs.getmontecarlo.com/mac/schema.json ``` +If the Bash tool is unavailable, fall back to WebFetch — but note that coverage of +`validation`, `table`, `query_performance`, and `bulk_monitor` types may be incomplete. + If the schema cannot be fetched, stop and report: -> Cannot fetch the MaC schema from `https://docs.getmontecarlo.com/mac/schema.json`. Please +> Cannot fetch the MaC schema from `https://clidocs.getmontecarlo.com/mac/schema.json`. Please > check your network connection and try again. Do not proceed with validation without the schema. @@ -182,8 +240,13 @@ For each monitor in the file, check: 1. **Required fields present:** every field marked `required` in the schema items is present 2. **No unknown fields:** no field names that don't appear in the schema for that monitor type -3. **Enum values valid:** enum-constrained fields use one of the listed values. String enums are - case-sensitive and typically lowercase (e.g. `sensitivity` accepts `high`/`medium`/`low`). +3. **Enum values valid:** enum-constrained fields use one of the listed values exactly as the + schema defines them — always validate against the schema, not memory. Enums are + case-sensitive and vary by field: `sensitivity` is lowercase (`high`/`medium`/`low`), + `priority` is uppercase (`P1`–`P5`), `data_quality_dimension` is uppercase (`ACCURACY`, + `COMPLETENESS`, `CONSISTENCY`, `TIMELINESS`, `UNIQUENESS`, `VALIDITY`), + `alert_conditions[].operator` is uppercase (`GT`, `GTE`, `LT`, `LTE`, `EQ`, `NEQ`, + `AUTO`, `AUTO_HIGH`, `AUTO_LOW`, `INSIDE_RANGE`, `OUTSIDE_RANGE`, `NOOP`). 4. **Type correctness:** string fields are strings, integer fields are integers, etc. 5. **Top-level structure:** `montecarlo:` must be present; its sub-keys must be valid monitor type keys or `notifications:`. MaC files may be co-located in dbt `schema.yml` alongside @@ -196,13 +259,22 @@ schema validation may still be rejected by `montecarlo monitors apply`. **Type-specific reminders:** - `metric` monitors use a nested `data_source` object (`data_source.table`), not a flat `table` field. `alert_conditions` is required. `sensitivity` is only valid on `metric`. +- `custom_sql` monitors require both `sql` (the query string) and `schedule`. A file without + an explicit `schedule` block will fail validation even if the monitor would run on a default + schedule when applied. - `validation` monitors have a singular `alert_condition` field whose value is a predicate tree. The minimal valid structure requires `type: GROUP`, `operator`, and `conditions` with at least one `BINARY` or `UNARY` node. Binary predicates require both `left` (field) and `right` (value) nodes; unary predicates (`not_null`, `is_not_empty`) require only `left`. - `query_performance` monitors have no `table` field — asset targeting uses a `selection` array. + `alert_conditions` items require `threshold` and `metric` fields; `additionalProperties: false` + applies — unknown fields like `threshold_value` or `type` will be flagged. - `table` monitors have no flat `table` field — asset targeting uses `asset_selection`. - `notifications:` is the NaC block — do not validate or modify its contents. +- `bulk_monitor` monitors use `asset_selection` for targeting, not a `tables` field. + Required fields: `description`, `asset_selection`, `monitor_type`, `alert_conditions`, + `schedule`. `monitor_type` is an enum: valid values are `bulk_metric` and `bulk_pii` — `metric` + is not valid. Do not author new monitors of types `field_health`, `dimension_tracking`, `field_quality`, `comparison`, `freshness`, or `volume` — these are deprecated. If the file contains them, @@ -258,28 +330,42 @@ Call `get_monitors` with `config_format="yaml"`: get_monitors(full_table_id="database.schema.table", config_format="yaml") ``` -For broader imports, omit `full_table_id` and filter by other criteria. +For broader imports, omit `full_table_id` and filter by other criteria (e.g. `namespace`). + +If `get_monitors` returns no monitors, inform the user and stop — do not create an empty file. ### Step 3: Assemble the YAML file 1. Add the yaml-language-server header as the first line 2. Group returned monitors by type under a single `montecarlo:` block -3. Deduplicate if the same monitor appears under multiple names -4. Prompt for a namespace if not provided +3. Deduplicate: two monitors are duplicates if they share the same `name` field. Keep the one + that has a `uuid` (the deployed version). If neither or both have UUIDs, keep the first + occurrence and note the conflict to the user. +4. Scan the assembled YAML for deprecated field names (marked `deprecated: true` in the + schema). If any are found, list them and offer to migrate before saving. +5. Prompt for a namespace if not provided ### Step 4: Present and save -Show the assembled file and offer to save it. Remind the user: +Show the assembled YAML and ask for a file path if not already provided. If the user specifies +an existing file, read it first, merge the imported monitors into the appropriate type lists +(deduplicating by `name`), and write the result. For a new file, use the Write tool. + +Remind the user: > These monitors are now defined in your repo. Once you run `montecarlo monitors apply`, > Monte Carlo will manage them as MaC resources identified by their `name` field. Future edits > to these monitors should be made in this file, not in the UI. +If the user wants to validate before saving, run the Validate workflow against the assembled +YAML first. If the user wants to add more monitors immediately after importing, transition to +the Edit workflow retaining the file path and namespace. + --- ## File format rules -- Always include `# yaml-language-server: $schema=https://docs.getmontecarlo.com/mac/schema.json` +- Always include `# yaml-language-server: $schema=https://clidocs.getmontecarlo.com/mac/schema.json` as the first line - Use 2-space indentation - Quote string values that contain special characters or colons From 48d8bbc0a713be53331403ae032638df661b6dc7 Mon Sep 17 00:00:00 2001 From: wdeka Date: Fri, 22 May 2026 08:50:43 +0200 Subject: [PATCH 16/19] Address the skill feedback. --- skills/manage-mac/SKILL.md | 28 ++++++------------- .../references/data-monitor-creation.md | 4 +-- skills/tune-monitor/SKILL.md | 4 +-- 3 files changed, 13 insertions(+), 23 deletions(-) diff --git a/skills/manage-mac/SKILL.md b/skills/manage-mac/SKILL.md index 65079b7..8a998a6 100644 --- a/skills/manage-mac/SKILL.md +++ b/skills/manage-mac/SKILL.md @@ -80,7 +80,7 @@ Ask for any information not already provided: `comparison`, `freshness`, or `volume`. If the user explicitly requests one of these, decline: inform them it is no longer supported, and suggest the closest valid alternative (e.g. `freshness` or `volume` → `metric` monitor tracking recency or row count; - `field_health` → `validation` monitor; `comparison` → `metric_comparison`). + `field_quality` → `validation` monitor; `comparison` → `metric_comparison`; `field_health` → `metric`). Note: `comparison` (deprecated) and `metric_comparison` (current) are distinct — never decline a request for a `metric_comparison` monitor. 3. **Namespace:** used with `montecarlo monitors apply --namespace ` @@ -115,10 +115,6 @@ each one. If an MCP tool returns an error, stop and surface the error message to the user. Do not proceed to assemble the file with a partial result. -After receiving the dry_run output, check it for deprecated field names (e.g. `resource`, -`notify_rule_run_failure`, `domain_uuids`, `comparisons`). If any are present, replace them with -their canonical equivalents before assembling the file. - ### Step 4: Assemble the YAML file 1. Add the yaml-language-server header as the first line: @@ -161,15 +157,10 @@ curl -s https://clidocs.getmontecarlo.com/mac/schema.json **Adding a monitor:** Follow the Create workflow (Steps 1–4) to generate the new monitor block via `dry_run=True`, then append it to the correct type list in the file. -**Modifying a monitor:** -- If the monitor has been deployed and has a UUID: if the UUID is already known (e.g. present - in the file or supplied by the user), use it directly. Otherwise resolve it via - `get_monitors(full_table_id=..., config_format="yaml")`. Then call - `create_or_update_*_monitor(dry_run=True, monitor_uuid=, ...)` with the updated - parameters. Use the returned YAML block to replace the existing monitor entry. -- If the monitor has not yet been deployed (no UUID): call - `create_or_update_*_monitor(dry_run=True, ...)` without a UUID, using the current parameters - plus the requested changes. Replace the existing block with the returned YAML. +**Modifying a monitor:** Call `create_or_update_*_monitor(dry_run=True, name=, ...)` +with the updated parameters, preserving the existing `name` value. Use the returned YAML block +to replace the existing monitor entry. Do not look up or pass a UUID — in the MaC realm, +identity is the `name` field plus namespace. **Removing a monitor:** Delete the monitor object. If it is the only item under its type key, remove the entire type key — do not leave an empty list. @@ -191,11 +182,10 @@ Also check for deprecated monitor type keys (`field_health`, `dimension_tracking they require re-authoring with a supported type. Offer to create a replacement monitor via the Create workflow, then delete the deprecated type block. -Some fields are YAML-level only and do not require a `dry_run` MCP call: `audiences`, -`is_paused`, `labels`, `tags`, `priority`, `data_quality_dimension`, `domains`. For these, -add or modify the field directly in the YAML without calling the MCP tool. Note: `is_paused` -is accepted by the backend at apply time but is not present in the JSON Schema — if a schema -scan flags it as unknown, ignore that warning. +Some fields are YAML-level only and do not require a `dry_run` MCP call. These fields are +not part of the monitor definition sent to the backend — add or modify them directly in the +YAML without calling the MCP tool. Refer to the schema to identify which fields fall into +this category. ### Step 3: Apply and show the diff diff --git a/skills/monitoring-advisor/references/data-monitor-creation.md b/skills/monitoring-advisor/references/data-monitor-creation.md index f7e0a34..9a8df00 100644 --- a/skills/monitoring-advisor/references/data-monitor-creation.md +++ b/skills/monitoring-advisor/references/data-monitor-creation.md @@ -220,10 +220,10 @@ If the user prefers to deploy via CLI/CI rather than the live tool call: Always add the following comment as the **first line** of any MaC YAML file you create or edit: ```yaml -# yaml-language-server: $schema=https://docs.getmontecarlo.com/mac/schema.json +# yaml-language-server: $schema=https://clidocs.getmontecarlo.com/mac/schema.json ``` -The published schema is available at `https://docs.getmontecarlo.com/mac/schema.json`. Use WebFetch to inspect it if you're uncertain whether a field name or value is valid for a given monitor type. +The published schema is available at `https://clidocs.getmontecarlo.com/mac/schema.json`. Use WebFetch to inspect it if you're uncertain whether a field name or value is valid for a given monitor type. Generated YAML must not include fields that don't appear in the schema for that monitor type. Unknown fields are silently ignored by the CLI but indicate a misconfiguration and may break future validation. diff --git a/skills/tune-monitor/SKILL.md b/skills/tune-monitor/SKILL.md index 02fafbc..62af8f1 100644 --- a/skills/tune-monitor/SKILL.md +++ b/skills/tune-monitor/SKILL.md @@ -234,7 +234,7 @@ Phase 1.5. Each reference specifies the correct tool and constraints for that mo General rules for all types: 1. **Always preview first** — show the user what will change before applying. 2. **Get explicit confirmation** before applying any change. -3. **Validate the preview YAML against the schema** — before presenting the preview YAML to the user, fetch the published MaC JSON Schema from `https://docs.getmontecarlo.com/mac/schema.json` (WebFetch) and check the preview YAML against it. If any field in the YAML does not appear in the schema for the given monitor type, flag it and correct it. Note: the schema validates field names, types, and enum values only — cross-field semantic constraints are enforced by the backend at apply time, not by the schema. +3. **Validate the preview YAML against the schema** — before presenting the preview YAML to the user, fetch the published MaC JSON Schema from `https://clidocs.getmontecarlo.com/mac/schema.json` (WebFetch) and check the preview YAML against it. If any field in the YAML does not appear in the schema for the given monitor type, flag it and correct it. Note: the schema validates field names, types, and enum values only — cross-field semantic constraints are enforced by the backend at apply time, not by the schema. 4. **MaC-managed monitors** — if `get_monitors` returns a `mac_name` or the user mentions the monitor is managed via a MaC YAML file, note this before applying: changes made via the API will be overwritten the next time `montecarlo monitors apply` runs. Offer to hand off to `/manage-mac` (edit workflow) instead so the YAML file stays the source of truth. --- @@ -247,4 +247,4 @@ General rules for all types: - **Cite evidence.** Reference specific incident dates, segment values, and counts from the report. - **Degrade gracefully.** If troubleshooting runs are missing, note the limited context and reason from alert patterns alone. -- **Add `$schema` when saving YAML to a file.** If the user asks to save the MaC YAML to a file, add `# yaml-language-server: $schema=https://docs.getmontecarlo.com/mac/schema.json` as the first line of that file. +- **Add `$schema` when saving YAML to a file.** If the user asks to save the MaC YAML to a file, add `# yaml-language-server: $schema=https://clidocs.getmontecarlo.com/mac/schema.json` as the first line of that file. From 889a07f3cecbbc0c7751c1c0d7311b28e65b72d6 Mon Sep 17 00:00:00 2001 From: wdeka Date: Fri, 22 May 2026 09:01:50 +0200 Subject: [PATCH 17/19] fix(manage-mac): address Santi review comments + CLI-first approach MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix deprecated type alternatives mapping (field_health → metric, field_quality → validation per Santi's suggestion) - Remove post-dry_run deprecated field check (backend returns modern names) - Edit workflow: use name-based identity, drop UUID resolution - YAML-level fields: replace specific list with general statement - Add CLI-first tooling tier system (Tier 1: CLI, Tier 2: MCP, Tier 3: Manual) - CLI check at workflow start with install/configure instructions - Add Prerequisites section with docs links for CLI and MCP server - Validate workflow: montecarlo monitors compile as primary path - Edit workflow: compile + apply commands in Step 3 - Import workflow: convert-to-mac / export as CLI-first path - Rename tier 3 from "Schema" to "Manual" (customer-facing language) Co-Authored-By: Claude Sonnet 4.6 --- skills/manage-mac/SKILL.md | 253 ++++++++++++++++++++----------------- 1 file changed, 138 insertions(+), 115 deletions(-) diff --git a/skills/manage-mac/SKILL.md b/skills/manage-mac/SKILL.md index 8a998a6..4eec7eb 100644 --- a/skills/manage-mac/SKILL.md +++ b/skills/manage-mac/SKILL.md @@ -1,6 +1,6 @@ --- name: monte-carlo-manage-mac -description: Create, edit, validate, and import Monitors-as-Code YAML files. Uses Monte Carlo MCP dry_run calls for authoring and the published JSON Schema for local validation. +description: Create, edit, validate, and import Monitors-as-Code YAML files. CLI-first; falls back to MC MCP tools, then manual validation. when_to_use: | Invoke when the user has a MaC YAML file they want to create, edit, or validate, or when they want to export live monitors into a MaC YAML file. @@ -23,9 +23,53 @@ validate, and import MaC YAML files that define Monte Carlo monitors. --- -## Entry point detection +## Prerequisites + +Two external tools power this skill. Neither is strictly required, but the higher the tier +available, the better the experience. + +**MC CLI (Tier 1)** +- Docs: https://docs.getmontecarlo.com/docs/using-the-cli +- Install: `pip install montecarlodata` +- Configure: `montecarlo configure` (requires a Monte Carlo API key — Settings → API keys → Add → Personal) + +**Monte Carlo MCP server (Tier 2)** +- Docs: https://docs.getmontecarlo.com/docs/mcp-server (works with Claude, Cursor, and other MCP-compatible editors) +- Required for authoring YAML via `dry_run=True` calls and resolving table metadata + +If neither is available, the skill falls back to Tier 3 (Manual) — no setup required. + +--- + +## Tooling tiers + +Use the highest available tier: + +| Tier | Tool | Used for | +|---|---|---| +| 1 — CLI | `montecarlo` binary | Validate (`compile`), apply, import (`convert-to-mac`, `export`) | +| 2 — MCP | Monte Carlo MCP server | Author YAML shapes via `dry_run=True`, resolve table metadata | +| 3 — Manual | No external tools | Validate field names/enums/types when CLI unavailable | -Determine which workflow applies based on the user's request: +### CLI check + +Before starting any workflow, run: + +```bash +montecarlo --version +``` + +If the command fails or is not found, inform the user: +> "MC CLI is not installed. It enables local validation and streamlined apply/import. +> Install: `pip install montecarlodata` +> Configure: `montecarlo configure` (requires a Monte Carlo API key — Settings → API keys → Add → Personal) +> Would you like to set it up, or continue without it?" + +If the user declines, proceed using Tier 2 (MCP) and Tier 3 (Manual) only. + +--- + +## Entry point detection | User intent | Workflow | |---|---| @@ -38,12 +82,7 @@ If ambiguous, ask which workflow is needed. --- -## Prerequisites - -The Monte Carlo MCP server is required for **Create**, **Edit**, and **Import** workflows. No MCP -tools are needed for **Validate** (file + schema only). - -### Available MCP tools +## MCP tools reference | Tool | Used for | |---|---| @@ -56,11 +95,10 @@ tools are needed for **Validate** (file + schema only). | `create_or_update_table_monitor` | Author `table` monitors (`dry_run=True`) | | `create_or_update_comparison_monitor` | Author `metric_comparison` monitors (`dry_run=True`) | | `get_validation_predicates` | List valid predicates for `validation` monitors | -| `get_monitors` | Fetch live monitors in YAML format (Import workflow) | +| `get_monitors` | Fetch live monitors in YAML format (Import fallback) | -For monitor types without a dedicated MCP tool (`json_schema`, `query_performance`, -`bulk_monitor`), fall back to schema-based authoring: fetch the schema via Bash and derive all -fields from it. Never guess field names. +For monitor types without a dedicated MCP tool (`json_schema`, `query_performance`, `bulk_monitor`), +fall back to schema-based authoring. Never guess field names — derive them from the schema: ```bash curl -s https://clidocs.getmontecarlo.com/mac/schema.json @@ -90,7 +128,7 @@ Ask for any information not already provided: - `custom_sql`: ask for the SQL query if not provided - `json_schema`: ask for the field name to check if not provided -### Step 2: Resolve table and field metadata +### Step 2: Resolve table and field metadata (Tier 2 — MCP) Follow steps 1–3 from `../monitoring-advisor/references/data-monitor-creation.md` to: - Resolve the MCON and `full_table_id` via `search` @@ -103,17 +141,14 @@ For `validation` monitors, call `get_validation_predicates` to confirm the predi available in the user's workspace before proceeding. If the result is empty, inform the user that no validation predicates are configured in their workspace and stop. -### Step 3: Call the MCP tool with dry_run=True +### Step 3: Author YAML blocks (Tier 2 — MCP) For each monitor, call the appropriate `create_or_update_*_monitor` with `dry_run=True` and the parameters the user specified. The backend returns a canonical YAML block — use that output as the YAML for the file rather than authoring it by hand. -Call the tool once per monitor. If the user wants multiple monitors, make a separate call for -each one. - -If an MCP tool returns an error, stop and surface the error message to the user. Do not proceed -to assemble the file with a partial result. +Call the tool once per monitor. If an MCP tool returns an error, stop and surface the error +message to the user. Do not proceed with a partial result. ### Step 4: Assemble the YAML file @@ -126,15 +161,16 @@ to assemble the file with a partial result. 4. If the user specified notification audiences, add the `audiences` field (array of strings) directly on each monitor object -### Step 5: Tell the user how to apply - -Present the assembled YAML and give the apply command: +### Step 5: Validate and apply -``` -montecarlo monitors apply --namespace +**Tier 1 — CLI (preferred):** +```bash +montecarlo monitors compile --namespace # validate +montecarlo monitors apply --namespace # deploy ``` -Prompt for namespace if not provided. +**Tier 3 fallback (CLI unavailable):** Run the Validate workflow against the assembled YAML, +then present the apply command for the user to run manually when CLI is available. --- @@ -146,12 +182,6 @@ Use the Read tool to load the user's file. Ask for the path if not provided. If returns an error (file not found), report it and ask for the correct path — do not create a new file silently. -Fetch the schema so you can identify deprecated fields and validate any new fields being added: - -```bash -curl -s https://clidocs.getmontecarlo.com/mac/schema.json -``` - ### Step 2: Understand the requested change **Adding a monitor:** Follow the Create workflow (Steps 1–4) to generate the new monitor block @@ -165,93 +195,97 @@ identity is the `name` field plus namespace. **Removing a monitor:** Delete the monitor object. If it is the only item under its type key, remove the entire type key — do not leave an empty list. -While reading the file, check for deprecated field names (marked `deprecated: true` in the -schema). Scope this scan to keys inside the `montecarlo:` block only — do not flag dbt or other -co-located keys. If found, list all occurrences and offer to migrate them all in a single -operation before applying other changes. Apply the migration only after explicit user -confirmation. If the user declines, proceed with the requested edit without migrating. - -The schema encodes the canonical replacement in the field's `description` (e.g. "Deprecated. -Use `warehouse` instead."). Use that to determine the correct replacement name — never guess. +**Deprecated field names:** While reading the file, check for fields marked `deprecated: true` +in the schema. Scope this scan to the `montecarlo:` block only. If found, list all occurrences +and offer to migrate them in a single operation before applying other changes. Apply only after +explicit user confirmation. The schema's `description` encodes the canonical replacement name +(e.g. "Deprecated. Use `warehouse` instead.") — never guess. If both the deprecated field and +its replacement are present with different values, flag the conflict and ask the user which to keep. -If both the deprecated field and its canonical replacement are present with different values, -flag the conflict and ask the user which value to keep before proceeding. +**Deprecated monitor types** (`field_health`, `dimension_tracking`, `field_quality`, `comparison`, +`freshness`, `volume`): cannot be mechanically migrated — offer to re-author with a supported type +via the Create workflow, then delete the deprecated block. -Also check for deprecated monitor type keys (`field_health`, `dimension_tracking`, -`field_quality`, `comparison`, `freshness`, `volume`). These cannot be mechanically migrated — -they require re-authoring with a supported type. Offer to create a replacement monitor via the -Create workflow, then delete the deprecated type block. +**YAML-level fields** (not part of the monitor definition sent to the backend): add or modify +these directly in the YAML without calling the MCP tool. Refer to the schema to identify them. -Some fields are YAML-level only and do not require a `dry_run` MCP call. These fields are -not part of the monitor definition sent to the backend — add or modify them directly in the -YAML without calling the MCP tool. Refer to the schema to identify which fields fall into -this category. +### Step 3: Write and validate -### Step 3: Apply and show the diff - -Show only what changed — before/after for modified blocks, or the new block for additions. Then -write the updated file using the Edit tool. +Show only what changed (before/after for modifications, new block for additions). Write the +updated file using the Edit tool. Ensure the `# yaml-language-server: $schema=https://clidocs.getmontecarlo.com/mac/schema.json` -header is the first line. Add it if the existing file lacks it. +header is the first line. Add it if missing. If removing the last monitor of the last type, the file should contain only the yaml-language-server header and `montecarlo: {}`. +**Tier 1 — CLI (preferred):** +```bash +montecarlo monitors compile --namespace # validate +montecarlo monitors apply --namespace # deploy +``` + +**Tier 3 fallback (CLI unavailable):** Run the Validate workflow against the updated file. + --- ## Validate workflow -### Step 1: Fetch the schema +### Step 1: Try CLI first (Tier 1) + +```bash +montecarlo monitors compile --namespace +``` + +If this succeeds, report the output to the user and stop — no further LLM validation needed. + +### Step 2: Manual validation fallback (Tier 3) -Fetch the published MaC JSON Schema via Bash. The schema is ~50KB and WebFetch truncates it, -leaving `validation`, `table`, `query_performance`, and `bulk_monitor` types invisible: +Use this path only if CLI is unavailable. + +Fetch the schema — it is ~50KB and WebFetch truncates it, so use Bash: ```bash curl -s https://clidocs.getmontecarlo.com/mac/schema.json ``` -If the Bash tool is unavailable, fall back to WebFetch — but note that coverage of -`validation`, `table`, `query_performance`, and `bulk_monitor` types may be incomplete. +If Bash is unavailable, fall back to WebFetch — but coverage of `validation`, `table`, +`query_performance`, and `bulk_monitor` types may be incomplete. If the schema cannot be fetched, stop and report: > Cannot fetch the MaC schema from `https://clidocs.getmontecarlo.com/mac/schema.json`. Please > check your network connection and try again. -Do not proceed with validation without the schema. - -### Step 2: Read the file +### Step 3: Read the file Use the Read tool to load the user's file. Ask for the path if not provided. -### Step 3: Validate against the schema +### Step 4: Validate against the schema For each monitor in the file, check: 1. **Required fields present:** every field marked `required` in the schema items is present 2. **No unknown fields:** no field names that don't appear in the schema for that monitor type -3. **Enum values valid:** enum-constrained fields use one of the listed values exactly as the - schema defines them — always validate against the schema, not memory. Enums are - case-sensitive and vary by field: `sensitivity` is lowercase (`high`/`medium`/`low`), - `priority` is uppercase (`P1`–`P5`), `data_quality_dimension` is uppercase (`ACCURACY`, - `COMPLETENESS`, `CONSISTENCY`, `TIMELINESS`, `UNIQUENESS`, `VALIDITY`), - `alert_conditions[].operator` is uppercase (`GT`, `GTE`, `LT`, `LTE`, `EQ`, `NEQ`, - `AUTO`, `AUTO_HIGH`, `AUTO_LOW`, `INSIDE_RANGE`, `OUTSIDE_RANGE`, `NOOP`). +3. **Enum values valid:** validate against the schema, not memory. Enums are case-sensitive and + vary by field: `sensitivity` is lowercase (`high`/`medium`/`low`), `priority` is uppercase + (`P1`–`P5`), `data_quality_dimension` is uppercase (`ACCURACY`, `COMPLETENESS`, `CONSISTENCY`, + `TIMELINESS`, `UNIQUENESS`, `VALIDITY`), `alert_conditions[].operator` is uppercase (`GT`, + `GTE`, `LT`, `LTE`, `EQ`, `NEQ`, `AUTO`, `AUTO_HIGH`, `AUTO_LOW`, `INSIDE_RANGE`, + `OUTSIDE_RANGE`, `NOOP`). 4. **Type correctness:** string fields are strings, integer fields are integers, etc. 5. **Top-level structure:** `montecarlo:` must be present; its sub-keys must be valid monitor - type keys or `notifications:`. MaC files may be co-located in dbt `schema.yml` alongside - `version:`, `models:`, etc. — extra top-level keys are allowed and must not be flagged. + type keys or `notifications:`. Extra top-level keys (e.g. dbt `version:`, `models:`) are + allowed and must not be flagged. **Schema scope disclaimer:** The schema validates field names, types, and enum values only. -Cross-field semantic constraints are enforced by the backend at apply time — a file that passes -schema validation may still be rejected by `montecarlo monitors apply`. +Cross-field semantic constraints are enforced by the backend — a file that passes schema +validation may still be rejected by `montecarlo monitors apply`. **Type-specific reminders:** - `metric` monitors use a nested `data_source` object (`data_source.table`), not a flat `table` field. `alert_conditions` is required. `sensitivity` is only valid on `metric`. -- `custom_sql` monitors require both `sql` (the query string) and `schedule`. A file without - an explicit `schedule` block will fail validation even if the monitor would run on a default - schedule when applied. +- `custom_sql` monitors require both `sql` (the query string) and `schedule`. - `validation` monitors have a singular `alert_condition` field whose value is a predicate tree. The minimal valid structure requires `type: GROUP`, `operator`, and `conditions` with at least one `BINARY` or `UNARY` node. Binary predicates require both `left` (field) and `right` @@ -263,24 +297,17 @@ schema validation may still be rejected by `montecarlo monitors apply`. - `notifications:` is the NaC block — do not validate or modify its contents. - `bulk_monitor` monitors use `asset_selection` for targeting, not a `tables` field. Required fields: `description`, `asset_selection`, `monitor_type`, `alert_conditions`, - `schedule`. `monitor_type` is an enum: valid values are `bulk_metric` and `bulk_pii` — `metric` - is not valid. - -Do not author new monitors of types `field_health`, `dimension_tracking`, `field_quality`, -`comparison`, `freshness`, or `volume` — these are deprecated. If the file contains them, -validate what is present but do not add new instances. + `schedule`. `monitor_type` enum: `bulk_metric` or `bulk_pii` — `metric` is not valid. -### Step 4: Report findings +Do not author new monitors of deprecated types. If the file contains them, validate what is +present but do not add new instances. -If the file is valid with no deprecated fields: +### Step 5: Report findings -> The file is valid. All monitors conform to the MaC schema. -> Apply with: `montecarlo monitors apply --namespace ` +If the file is valid: +> The file is valid. Apply with: `montecarlo monitors apply --namespace ` -If issues exist, report each one with the monitor type, name/index, specific problem, and fix. -Do not stop at the first error — report all issues in a single pass. - -Example format: +If issues exist, report all in a single pass: ``` Validation issues found: @@ -292,15 +319,10 @@ Validation issues found: 2. custom_sql[0] ("status_check") - Unknown field: `sensitivity` - Fix: remove — `sensitivity` is only valid on `metric` monitors - -3. validation[0] ("email_check") - - Invalid enum value for `schedule.type`: "cron" - - Valid values: [see schema] - - Fix: use a valid schedule type ``` -**Deprecated field migration:** List all deprecated fields found and offer to migrate them to -their canonical equivalents. Apply only after explicit user confirmation. +**Deprecated field migration:** List all deprecated fields found and offer to migrate them. +Apply only after explicit user confirmation. --- @@ -312,44 +334,45 @@ Ask what to import: - A specific table: "Which table? Provide the full name (database.schema.table)" - A namespace or group: "Any filters? (table name pattern, monitor type, namespace)" -### Step 2: Fetch monitors using MCP +### Step 2: Fetch monitors -Call `get_monitors` with `config_format="yaml"`: +**Tier 1 — CLI (preferred):** +```bash +montecarlo monitors export # export all +montecarlo monitors convert-to-mac # convert UI monitors to MaC YAML +``` +**Tier 2 — MCP fallback:** ``` get_monitors(full_table_id="database.schema.table", config_format="yaml") ``` - For broader imports, omit `full_table_id` and filter by other criteria (e.g. `namespace`). -If `get_monitors` returns no monitors, inform the user and stop — do not create an empty file. +If no monitors are returned, inform the user and stop — do not create an empty file. ### Step 3: Assemble the YAML file 1. Add the yaml-language-server header as the first line 2. Group returned monitors by type under a single `montecarlo:` block 3. Deduplicate: two monitors are duplicates if they share the same `name` field. Keep the one - that has a `uuid` (the deployed version). If neither or both have UUIDs, keep the first - occurrence and note the conflict to the user. -4. Scan the assembled YAML for deprecated field names (marked `deprecated: true` in the - schema). If any are found, list them and offer to migrate before saving. + with a `uuid` (deployed version). If neither or both have UUIDs, keep the first and flag + the conflict. +4. Scan for deprecated field names; offer to migrate before saving 5. Prompt for a namespace if not provided ### Step 4: Present and save -Show the assembled YAML and ask for a file path if not already provided. If the user specifies -an existing file, read it first, merge the imported monitors into the appropriate type lists -(deduplicating by `name`), and write the result. For a new file, use the Write tool. +Show the assembled YAML and ask for a file path if not provided. If the user specifies an +existing file, read it first, merge by type list (deduplicating by `name`), and write the result. +For a new file, use the Write tool. Remind the user: - > These monitors are now defined in your repo. Once you run `montecarlo monitors apply`, > Monte Carlo will manage them as MaC resources identified by their `name` field. Future edits -> to these monitors should be made in this file, not in the UI. +> should be made in this file, not in the UI. -If the user wants to validate before saving, run the Validate workflow against the assembled -YAML first. If the user wants to add more monitors immediately after importing, transition to -the Edit workflow retaining the file path and namespace. +If the user wants to validate before saving, run the Validate workflow first. To add monitors +immediately after importing, transition to the Edit workflow retaining the file path and namespace. --- From f57fc7a3be295677a5a02ef2c4af6267da2bb2e6 Mon Sep 17 00:00:00 2001 From: wdeka Date: Fri, 22 May 2026 09:17:27 +0200 Subject: [PATCH 18/19] fix(manage-mac): address gaps from 100-scenario evaluation - Namespace enforcement: prompt before showing apply command (S33) - Type routing: map common phrases to monitor types (S39) - Deprecated migration decline path: proceed with edit without migrating (S53) - Multi-monitor: complete all dry_run calls before assembling file (S35) - CLI setup: resume workflow after install/configure (S4) - Monitor removal: explicitly preserve siblings in type list (S48) - YAML-level fields: add common examples (is_paused, labels, priority, etc.) (S56-58) - Validate Tier 3 label: explicit in step heading (S63) - Validate deprecated listing: all occurrences not just unique names (S79) - Entry point: in-body redirect to monitoring-advisor for discovery requests (S93) Co-Authored-By: Claude Sonnet 4.6 --- skills/manage-mac/SKILL.md | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/skills/manage-mac/SKILL.md b/skills/manage-mac/SKILL.md index 4eec7eb..5527b80 100644 --- a/skills/manage-mac/SKILL.md +++ b/skills/manage-mac/SKILL.md @@ -65,6 +65,7 @@ If the command fails or is not found, inform the user: > Configure: `montecarlo configure` (requires a Monte Carlo API key — Settings → API keys → Add → Personal) > Would you like to set it up, or continue without it?" +If the user accepts, give the full install and configure steps, then resume the workflow once setup is complete. If the user declines, proceed using Tier 2 (MCP) and Tier 3 (Manual) only. --- @@ -77,6 +78,7 @@ If the user declines, proceed using Tier 2 (MCP) and Tier 3 (Manual) only. | Has an existing file; wants to add, modify, or remove monitors | **Edit** | | Has an existing file; wants to check it before applying | **Validate** | | Wants to export live monitors into a MaC YAML file | **Import** | +| Wants to discover what to monitor or explore a table | Redirect to `monitoring-advisor` — do not proceed | If ambiguous, ask which workflow is needed. @@ -121,6 +123,9 @@ Ask for any information not already provided: `field_quality` → `validation` monitor; `comparison` → `metric_comparison`; `field_health` → `metric`). Note: `comparison` (deprecated) and `metric_comparison` (current) are distinct — never decline a request for a `metric_comparison` monitor. + Common phrases → monitor type: "null rate / percent null / zero rate / column distribution" → `metric`; + "validate email format / check values in set / regex match" → `validation`; + "query taking too long / slow queries" → `query_performance`. 3. **Namespace:** used with `montecarlo monitors apply --namespace ` 4. **Notification audiences:** optional — ask only if the user mentions alerting 5. **Type-specific required inputs:** @@ -147,8 +152,9 @@ For each monitor, call the appropriate `create_or_update_*_monitor` with `dry_ru parameters the user specified. The backend returns a canonical YAML block — use that output as the YAML for the file rather than authoring it by hand. -Call the tool once per monitor. If an MCP tool returns an error, stop and surface the error -message to the user. Do not proceed with a partial result. +Call the tool once per monitor. Complete all dry_run calls before assembling the file. If an +MCP tool returns an error, stop and surface the error message to the user. Do not proceed with +a partial result. ### Step 4: Assemble the YAML file @@ -163,6 +169,8 @@ message to the user. Do not proceed with a partial result. ### Step 5: Validate and apply +Prompt for namespace if not already provided. + **Tier 1 — CLI (preferred):** ```bash montecarlo monitors compile --namespace # validate @@ -192,13 +200,15 @@ with the updated parameters, preserving the existing `name` value. Use the retur to replace the existing monitor entry. Do not look up or pass a UUID — in the MaC realm, identity is the `name` field plus namespace. -**Removing a monitor:** Delete the monitor object. If it is the only item under its type key, -remove the entire type key — do not leave an empty list. +**Removing a monitor:** Delete the monitor object and preserve all other monitors in the type +list. If it is the only item under its type key, remove the entire type key — do not leave +an empty list. **Deprecated field names:** While reading the file, check for fields marked `deprecated: true` in the schema. Scope this scan to the `montecarlo:` block only. If found, list all occurrences and offer to migrate them in a single operation before applying other changes. Apply only after -explicit user confirmation. The schema's `description` encodes the canonical replacement name +explicit user confirmation. If the user declines, proceed with the requested edit without +migrating. The schema's `description` encodes the canonical replacement name (e.g. "Deprecated. Use `warehouse` instead.") — never guess. If both the deprecated field and its replacement are present with different values, flag the conflict and ask the user which to keep. @@ -207,7 +217,9 @@ its replacement are present with different values, flag the conflict and ask the via the Create workflow, then delete the deprecated block. **YAML-level fields** (not part of the monitor definition sent to the backend): add or modify -these directly in the YAML without calling the MCP tool. Refer to the schema to identify them. +these directly in the YAML without calling the MCP tool. Common examples: `is_paused`, `labels`, +`tags`, `priority`, `audiences`, `data_quality_dimension`, `domains`. Refer to the schema to +confirm others. ### Step 3: Write and validate @@ -240,7 +252,7 @@ montecarlo monitors compile --namespace If this succeeds, report the output to the user and stop — no further LLM validation needed. -### Step 2: Manual validation fallback (Tier 3) +### Step 2: Manual validation fallback (Tier 3 — no external tools) Use this path only if CLI is unavailable. @@ -321,8 +333,8 @@ Validation issues found: - Fix: remove — `sensitivity` is only valid on `metric` monitors ``` -**Deprecated field migration:** List all deprecated fields found and offer to migrate them. -Apply only after explicit user confirmation. +**Deprecated field migration:** List all occurrences of deprecated fields found (every instance, +not just unique field names) and offer to migrate them. Apply only after explicit user confirmation. --- From 9d8d2571cacbca97e7c05f8b40a83b7ebcfbdad4 Mon Sep 17 00:00:00 2001 From: wdeka Date: Fri, 22 May 2026 09:21:22 +0200 Subject: [PATCH 19/19] docs: update CHANGELOG to reflect CLI-first approach for manage-mac Co-Authored-By: Claude Sonnet 4.6 --- plugins/claude-code/CHANGELOG.md | 2 +- plugins/codex/CHANGELOG.md | 2 +- plugins/copilot/CHANGELOG.md | 2 +- plugins/cursor/CHANGELOG.md | 2 +- plugins/opencode/CHANGELOG.md | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/claude-code/CHANGELOG.md b/plugins/claude-code/CHANGELOG.md index e049830..6fca5c0 100644 --- a/plugins/claude-code/CHANGELOG.md +++ b/plugins/claude-code/CHANGELOG.md @@ -9,7 +9,7 @@ This project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Added -- New `/manage-mac` skill: create, edit, validate, and import Monitors-as-Code YAML files — authors new monitors from scratch, modifies existing files, validates against the published JSON Schema, and exports live monitors to YAML +- New `/manage-mac` skill: create, edit, validate, and import Monitors-as-Code YAML files — CLI-first: uses `montecarlo monitors compile` to validate and `apply` to deploy; falls back to MC MCP tools then manual validation - Schema validation gates injected into `monitoring-advisor` and `tune-monitor` — agents now validate generated YAML against the published schema before presenting it to the user ## [1.11.1] - 2026-05-13 diff --git a/plugins/codex/CHANGELOG.md b/plugins/codex/CHANGELOG.md index 14b9872..ab13994 100644 --- a/plugins/codex/CHANGELOG.md +++ b/plugins/codex/CHANGELOG.md @@ -9,7 +9,7 @@ This project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Added -- New `/manage-mac` skill: create, edit, validate, and import Monitors-as-Code YAML files — authors new monitors from scratch, modifies existing files, validates against the published JSON Schema, and exports live monitors to YAML +- New `/manage-mac` skill: create, edit, validate, and import Monitors-as-Code YAML files — CLI-first: uses `montecarlo monitors compile` to validate and `apply` to deploy; falls back to MC MCP tools then manual validation - Schema validation gates injected into `monitoring-advisor` and `tune-monitor` — agents now validate generated YAML against the published schema before presenting it to the user ## [1.11.1] - 2026-05-13 diff --git a/plugins/copilot/CHANGELOG.md b/plugins/copilot/CHANGELOG.md index 045c7c1..1ee2373 100644 --- a/plugins/copilot/CHANGELOG.md +++ b/plugins/copilot/CHANGELOG.md @@ -9,7 +9,7 @@ This project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Added -- New `/manage-mac` skill: create, edit, validate, and import Monitors-as-Code YAML files — authors new monitors from scratch, modifies existing files, validates against the published JSON Schema, and exports live monitors to YAML +- New `/manage-mac` skill: create, edit, validate, and import Monitors-as-Code YAML files — CLI-first: uses `montecarlo monitors compile` to validate and `apply` to deploy; falls back to MC MCP tools then manual validation - Schema validation gates injected into `monitoring-advisor` and `tune-monitor` — agents now validate generated YAML against the published schema before presenting it to the user ## [1.11.1] - 2026-05-13 diff --git a/plugins/cursor/CHANGELOG.md b/plugins/cursor/CHANGELOG.md index 71114f0..ceb7497 100644 --- a/plugins/cursor/CHANGELOG.md +++ b/plugins/cursor/CHANGELOG.md @@ -9,7 +9,7 @@ This project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Added -- New `/manage-mac` skill: create, edit, validate, and import Monitors-as-Code YAML files — authors new monitors from scratch, modifies existing files, validates against the published JSON Schema, and exports live monitors to YAML +- New `/manage-mac` skill: create, edit, validate, and import Monitors-as-Code YAML files — CLI-first: uses `montecarlo monitors compile` to validate and `apply` to deploy; falls back to MC MCP tools then manual validation - Schema validation gates injected into `monitoring-advisor` and `tune-monitor` — agents now validate generated YAML against the published schema before presenting it to the user ## [1.11.1] - 2026-05-13 diff --git a/plugins/opencode/CHANGELOG.md b/plugins/opencode/CHANGELOG.md index 2312cce..5aa082b 100644 --- a/plugins/opencode/CHANGELOG.md +++ b/plugins/opencode/CHANGELOG.md @@ -9,7 +9,7 @@ This project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Added -- New `/manage-mac` skill: create, edit, validate, and import Monitors-as-Code YAML files — authors new monitors from scratch, modifies existing files, validates against the published JSON Schema, and exports live monitors to YAML +- New `/manage-mac` skill: create, edit, validate, and import Monitors-as-Code YAML files — CLI-first: uses `montecarlo monitors compile` to validate and `apply` to deploy; falls back to MC MCP tools then manual validation - Schema validation gates injected into `monitoring-advisor` and `tune-monitor` — agents now validate generated YAML against the published schema before presenting it to the user ## [1.11.1] - 2026-05-13