@fabricorg/databricks-testkit 0.7.2 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -148,7 +148,7 @@ async function runLiveSuite(spec, runtime = {}) {
148
148
  const startedAt = (/* @__PURE__ */ new Date()).toISOString();
149
149
  const ownedWarehouse = runtime.warehouse === void 0;
150
150
  const client = runtime.client ?? createClientFromEnv(env);
151
- const warehouse2 = runtime.warehouse ?? (hasWarehouseConfig(env) ? await createWorkspaceContext({ env, client }) : unavailableWarehouseContext());
151
+ const warehouse3 = runtime.warehouse ?? (hasWarehouseConfig(env) ? await createWorkspaceContext({ env, client }) : unavailableWarehouseContext());
152
152
  const results = [];
153
153
  try {
154
154
  for (const check of spec.checks) {
@@ -163,7 +163,7 @@ async function runLiveSuite(spec, runtime = {}) {
163
163
  }
164
164
  const before = performance.now();
165
165
  try {
166
- const details = await check.run({ env, warehouse: warehouse2, client });
166
+ const details = await check.run({ env, warehouse: warehouse3, client });
167
167
  results.push({
168
168
  id: check.id,
169
169
  description: check.description,
@@ -182,7 +182,7 @@ async function runLiveSuite(spec, runtime = {}) {
182
182
  }
183
183
  }
184
184
  } finally {
185
- if (ownedWarehouse) await warehouse2.close();
185
+ if (ownedWarehouse) await warehouse3.close();
186
186
  }
187
187
  const success = required3.every(
188
188
  (id) => results.find((result) => result.id === id)?.status === "pass"
@@ -296,8 +296,8 @@ function sqlRoundTripCheck() {
296
296
  id: "sql",
297
297
  description: "SQL Statement Execution round-trip",
298
298
  configured: (env) => Boolean(env.DATABRICKS_WAREHOUSE_ID || env.DATABRICKS_HTTP_PATH),
299
- async run({ warehouse: warehouse2 }) {
300
- const rows = await warehouse2.query("SELECT 1 AS dbx_test_ok");
299
+ async run({ warehouse: warehouse3 }) {
300
+ const rows = await warehouse3.query("SELECT 1 AS dbx_test_ok");
301
301
  if (Number(rows[0]?.dbx_test_ok) !== 1)
302
302
  throw new Error("SQL round-trip returned an unexpected value");
303
303
  return { rows: rows.length };
@@ -341,9 +341,9 @@ function deltaContractCheck(tableEnv = "DBX_TEST_DELTA_TABLE", columns = []) {
341
341
  id: "delta-contract",
342
342
  description: "Delta table schema contract",
343
343
  configured: (env) => Boolean(env[tableEnv]),
344
- async run({ env, warehouse: warehouse2 }) {
344
+ async run({ env, warehouse: warehouse3 }) {
345
345
  const table = env[tableEnv];
346
- const rows = await warehouse2.query(`DESCRIBE TABLE ${table}`);
346
+ const rows = await warehouse3.query(`DESCRIBE TABLE ${table}`);
347
347
  assertDeltaContract(table, rows, columns);
348
348
  return { table, columns: rows.length };
349
349
  }
@@ -354,10 +354,10 @@ function unityCatalogAccessCheck() {
354
354
  id: "uc-grants",
355
355
  description: "Unity Catalog allow/deny access assertions",
356
356
  configured: (env) => Boolean(env.DBX_TEST_UC_ALLOWED_TABLE && env.DBX_TEST_UC_DENIED_TABLE),
357
- async run({ env, warehouse: warehouse2 }) {
358
- await warehouse2.query(`SELECT * FROM ${env.DBX_TEST_UC_ALLOWED_TABLE} LIMIT 1`);
357
+ async run({ env, warehouse: warehouse3 }) {
358
+ await warehouse3.query(`SELECT * FROM ${env.DBX_TEST_UC_ALLOWED_TABLE} LIMIT 1`);
359
359
  try {
360
- await warehouse2.query(`SELECT * FROM ${env.DBX_TEST_UC_DENIED_TABLE} LIMIT 1`);
360
+ await warehouse3.query(`SELECT * FROM ${env.DBX_TEST_UC_DENIED_TABLE} LIMIT 1`);
361
361
  } catch (error) {
362
362
  if (/permission.?denied|insufficient.?priv|403|unauthoriz/i.test(String(error))) {
363
363
  return { allowed: env.DBX_TEST_UC_ALLOWED_TABLE, denied: env.DBX_TEST_UC_DENIED_TABLE };
@@ -720,9 +720,9 @@ function secretScopeCheck() {
720
720
  scope
721
721
  });
722
722
  const actual = new Set((response.secrets ?? []).map((secret) => secret.key).filter(Boolean));
723
- const missing = expected.filter((key) => !actual.has(key));
724
- if (missing.length > 0) {
725
- throw new Error(`Secret scope ${scope} is missing keys: ${missing.join(", ")}`);
723
+ const missing2 = expected.filter((key) => !actual.has(key));
724
+ if (missing2.length > 0) {
725
+ throw new Error(`Secret scope ${scope} is missing keys: ${missing2.join(", ")}`);
726
726
  }
727
727
  return { scope, expectedKeys: expected.length };
728
728
  }
@@ -743,10 +743,10 @@ function appHealthCheck(options = {}) {
743
743
  const actual = new Set(
744
744
  (app.resources ?? []).map((resource) => resource.name).filter(Boolean)
745
745
  );
746
- const missing = expected.filter((resource) => !actual.has(resource));
747
- if (missing.length > 0) {
746
+ const missing2 = expected.filter((resource) => !actual.has(resource));
747
+ if (missing2.length > 0) {
748
748
  throw new Error(
749
- `Databricks App ${name} is missing resource bindings: ${missing.join(", ")}`
749
+ `Databricks App ${name} is missing resource bindings: ${missing2.join(", ")}`
750
750
  );
751
751
  }
752
752
  const appUrl = env.DBX_TEST_APP_URL ?? app.url ?? app.app_url;
@@ -817,7 +817,7 @@ function autoLoaderIngestionCheck(options = {}) {
817
817
  configured: (env) => Boolean(
818
818
  env.DBX_TEST_AUTOLOADER_PIPELINE_ID && env.DBX_TEST_AUTOLOADER_TABLE && env.DBX_TEST_AUTOLOADER_FIXTURE && env.DBX_TEST_VOLUME
819
819
  ),
820
- async run({ env, client, warehouse: warehouse2 }) {
820
+ async run({ env, client, warehouse: warehouse3 }) {
821
821
  const pipelineId = env.DBX_TEST_AUTOLOADER_PIPELINE_ID;
822
822
  if (pipelineId === env.DBX_TEST_PIPELINE_ID) {
823
823
  throw new Error("DBX_TEST_AUTOLOADER_PIPELINE_ID must not be the production pipeline");
@@ -842,7 +842,7 @@ function autoLoaderIngestionCheck(options = {}) {
842
842
  pollIntervalMs: Number(env.DBX_TEST_POLL_INTERVAL_MS ?? 1e4)
843
843
  });
844
844
  const table = env.DBX_TEST_AUTOLOADER_TABLE;
845
- const rows = await warehouse2.query(
845
+ const rows = await warehouse3.query(
846
846
  `SELECT COUNT(*) AS n, SUM(CASE WHEN _rescued_data IS NOT NULL THEN 1 ELSE 0 END) AS rescued FROM ${table}`
847
847
  );
848
848
  const count = Number(rows[0]?.n ?? 0);
@@ -865,7 +865,7 @@ function performanceBudgetCheck() {
865
865
  id: "performance",
866
866
  description: "SQL Statement Execution p95 stays within the configured latency budget",
867
867
  configured: (env) => Boolean(env.DBX_TEST_PERFORMANCE_P95_MS),
868
- async run({ env, warehouse: warehouse2 }) {
868
+ async run({ env, warehouse: warehouse3 }) {
869
869
  const budgetMs = Number(env.DBX_TEST_PERFORMANCE_P95_MS);
870
870
  const runs = Number(env.DBX_TEST_PERFORMANCE_RUNS ?? 7);
871
871
  if (!Number.isFinite(budgetMs) || budgetMs <= 0) {
@@ -874,11 +874,11 @@ function performanceBudgetCheck() {
874
874
  if (!Number.isInteger(runs) || runs < 3 || runs > 100) {
875
875
  throw new Error("DBX_TEST_PERFORMANCE_RUNS must be an integer from 3 to 100");
876
876
  }
877
- await warehouse2.query("SELECT 1 AS warmup");
877
+ await warehouse3.query("SELECT 1 AS warmup");
878
878
  const durations = [];
879
879
  for (let index = 0; index < runs; index += 1) {
880
880
  const started = performance.now();
881
- await warehouse2.query("SELECT 1 AS performance_probe");
881
+ await warehouse3.query("SELECT 1 AS performance_probe");
882
882
  durations.push(performance.now() - started);
883
883
  }
884
884
  durations.sort((left, right) => left - right);
@@ -900,15 +900,15 @@ function failureRecoveryCheck() {
900
900
  id: "failure-recovery",
901
901
  description: "A failed statement is isolated and a subsequent statement recovers",
902
902
  configured: (env) => Boolean(env.DATABRICKS_WAREHOUSE_ID || env.DATABRICKS_HTTP_PATH),
903
- async run({ warehouse: warehouse2 }) {
903
+ async run({ warehouse: warehouse3 }) {
904
904
  let failedAsExpected = false;
905
905
  try {
906
- await warehouse2.query("SELECT * FROM __fabric_experiments_expected_missing_table__");
906
+ await warehouse3.query("SELECT * FROM __fabric_experiments_expected_missing_table__");
907
907
  } catch {
908
908
  failedAsExpected = true;
909
909
  }
910
910
  if (!failedAsExpected) throw new Error("Injected failure unexpectedly succeeded");
911
- const rows = await warehouse2.query("SELECT 1 AS recovered");
911
+ const rows = await warehouse3.query("SELECT 1 AS recovered");
912
912
  if (Number(rows[0]?.recovered) !== 1) {
913
913
  throw new Error("Statement execution did not recover after the injected failure");
914
914
  }
@@ -946,20 +946,20 @@ function backupRestoreCheck() {
946
946
  id: "backup-restore",
947
947
  description: "Delta DEEP CLONE backup restores a dropped scratch table",
948
948
  configured: (env) => Boolean(env.DATABRICKS_WAREHOUSE_ID || env.DATABRICKS_HTTP_PATH),
949
- async run({ warehouse: warehouse2 }) {
950
- const source = warehouse2.qual(safeName("backup_source"));
951
- const backup = warehouse2.qual(safeName("backup_clone"));
949
+ async run({ warehouse: warehouse3 }) {
950
+ const source = warehouse3.qual(safeName("backup_source"));
951
+ const backup = warehouse3.qual(safeName("backup_clone"));
952
952
  try {
953
- await warehouse2.exec(`CREATE TABLE ${source} USING DELTA AS SELECT 7 AS value`);
954
- await warehouse2.exec(`CREATE TABLE ${backup} DEEP CLONE ${source}`);
955
- await warehouse2.exec(`DROP TABLE ${source}`);
956
- await warehouse2.exec(`CREATE TABLE ${source} DEEP CLONE ${backup}`);
957
- const rows = await warehouse2.query(`SELECT value FROM ${source}`);
953
+ await warehouse3.exec(`CREATE TABLE ${source} USING DELTA AS SELECT 7 AS value`);
954
+ await warehouse3.exec(`CREATE TABLE ${backup} DEEP CLONE ${source}`);
955
+ await warehouse3.exec(`DROP TABLE ${source}`);
956
+ await warehouse3.exec(`CREATE TABLE ${source} DEEP CLONE ${backup}`);
957
+ const rows = await warehouse3.query(`SELECT value FROM ${source}`);
958
958
  if (Number(rows[0]?.value) !== 7) throw new Error("Restored Delta table lost its data");
959
959
  return { restoredRows: rows.length, deepClone: true };
960
960
  } finally {
961
- await warehouse2.exec(`DROP TABLE IF EXISTS ${source}`).catch(() => void 0);
962
- await warehouse2.exec(`DROP TABLE IF EXISTS ${backup}`).catch(() => void 0);
961
+ await warehouse3.exec(`DROP TABLE IF EXISTS ${source}`).catch(() => void 0);
962
+ await warehouse3.exec(`DROP TABLE IF EXISTS ${backup}`).catch(() => void 0);
963
963
  }
964
964
  }
965
965
  };
@@ -969,25 +969,25 @@ function rollbackCheck() {
969
969
  id: "rollback",
970
970
  description: "Delta time-travel rollback restores a known-good table version",
971
971
  configured: (env) => Boolean(env.DATABRICKS_WAREHOUSE_ID || env.DATABRICKS_HTTP_PATH),
972
- async run({ warehouse: warehouse2 }) {
973
- const table = warehouse2.qual(safeName("rollback_probe"));
972
+ async run({ warehouse: warehouse3 }) {
973
+ const table = warehouse3.qual(safeName("rollback_probe"));
974
974
  try {
975
- await warehouse2.exec(`CREATE TABLE ${table} (value INT) USING DELTA`);
976
- await warehouse2.exec(`INSERT INTO ${table} VALUES (1)`);
977
- const history = await warehouse2.query(`DESCRIBE HISTORY ${table} LIMIT 1`);
975
+ await warehouse3.exec(`CREATE TABLE ${table} (value INT) USING DELTA`);
976
+ await warehouse3.exec(`INSERT INTO ${table} VALUES (1)`);
977
+ const history = await warehouse3.query(`DESCRIBE HISTORY ${table} LIMIT 1`);
978
978
  const knownGoodVersion = Number(history[0]?.version);
979
979
  if (!Number.isInteger(knownGoodVersion)) {
980
980
  throw new Error("Delta history did not return a known-good version");
981
981
  }
982
- await warehouse2.exec(`INSERT INTO ${table} VALUES (999)`);
983
- await warehouse2.exec(`RESTORE TABLE ${table} TO VERSION AS OF ${knownGoodVersion}`);
984
- const rows = await warehouse2.query(`SELECT value FROM ${table} ORDER BY value`);
982
+ await warehouse3.exec(`INSERT INTO ${table} VALUES (999)`);
983
+ await warehouse3.exec(`RESTORE TABLE ${table} TO VERSION AS OF ${knownGoodVersion}`);
984
+ const rows = await warehouse3.query(`SELECT value FROM ${table} ORDER BY value`);
985
985
  if (rows.length !== 1 || Number(rows[0]?.value) !== 1) {
986
986
  throw new Error("Delta rollback did not restore the known-good contents");
987
987
  }
988
988
  return { knownGoodVersion, restoredRows: rows.length };
989
989
  } finally {
990
- await warehouse2.exec(`DROP TABLE IF EXISTS ${table}`).catch(() => void 0);
990
+ await warehouse3.exec(`DROP TABLE IF EXISTS ${table}`).catch(() => void 0);
991
991
  }
992
992
  }
993
993
  };
@@ -997,13 +997,13 @@ function serverlessComputeCheck() {
997
997
  id: "azure-serverless",
998
998
  description: "Azure Databricks serverless SQL warehouse is enabled and executes SQL",
999
999
  configured: (env) => Boolean(env.DATABRICKS_WAREHOUSE_ID),
1000
- async run({ env, client, warehouse: warehouse2 }) {
1000
+ async run({ env, client, warehouse: warehouse3 }) {
1001
1001
  const id = env.DATABRICKS_WAREHOUSE_ID;
1002
1002
  const details = await client.get(`/api/2.0/sql/warehouses/${encodeURIComponent(id)}`);
1003
1003
  if (details.enable_serverless_compute !== true) {
1004
1004
  throw new Error(`SQL warehouse ${id} is not configured for serverless compute`);
1005
1005
  }
1006
- const rows = await warehouse2.query("SELECT current_catalog() AS catalog");
1006
+ const rows = await warehouse3.query("SELECT current_catalog() AS catalog");
1007
1007
  return { warehouseId: id, name: details.name, state: details.state, rows: rows.length };
1008
1008
  }
1009
1009
  };
@@ -1123,15 +1123,15 @@ function createTargetPackRegistry(packs) {
1123
1123
  }
1124
1124
  return registry;
1125
1125
  }
1126
- function doctorTargetPack(pack, env = process.env, requiredChecks = pack.requiredChecks ?? []) {
1127
- const requirements = (pack.requirements ?? []).map((requirement2) => ({
1128
- id: requirement2.id,
1129
- description: requirement2.description,
1130
- satisfied: requirement2.anyOf.some((name) => Boolean(env[name]?.trim())),
1131
- required: requirement2.required !== false,
1132
- variables: [...requirement2.anyOf]
1126
+ function doctorTargetPack(pack, env = process.env, requiredChecks = []) {
1127
+ const requirements = (pack.requirements ?? []).map((requirement3) => ({
1128
+ id: requirement3.id,
1129
+ description: requirement3.description,
1130
+ satisfied: requirement3.anyOf.some((name) => Boolean(env[name]?.trim())),
1131
+ required: requirement3.required !== false,
1132
+ variables: [...requirement3.anyOf]
1133
1133
  }));
1134
- const required3 = new Set(requiredChecks);
1134
+ const required3 = new Set(resolveRequiredChecks(pack, requiredChecks));
1135
1135
  const checks = pack.checks().map((check) => ({
1136
1136
  id: check.id,
1137
1137
  description: check.description,
@@ -1139,7 +1139,7 @@ function doctorTargetPack(pack, env = process.env, requiredChecks = pack.require
1139
1139
  required: required3.has(check.id)
1140
1140
  }));
1141
1141
  const known = new Set(checks.map((check) => check.id));
1142
- const missingRequirements = requirements.filter((requirement2) => requirement2.required && !requirement2.satisfied).map((requirement2) => requirement2.id);
1142
+ const missingRequirements = requirements.filter((requirement3) => requirement3.required && !requirement3.satisfied).map((requirement3) => requirement3.id);
1143
1143
  const missingRequiredChecks = [
1144
1144
  ...checks.filter((check) => check.required && !check.configured).map((check) => check.id),
1145
1145
  ...[...required3].filter((id) => !known.has(id))
@@ -1160,11 +1160,11 @@ function doctorTargetPack(pack, env = process.env, requiredChecks = pack.require
1160
1160
  }
1161
1161
  function defineTargetPackRun(pack, options = {}) {
1162
1162
  const env = options.env ?? process.env;
1163
- const requiredChecks = [...options.requiredChecks ?? pack.requiredChecks ?? []];
1163
+ const requiredChecks = resolveRequiredChecks(pack, options.requiredChecks);
1164
1164
  const doctor = doctorTargetPack(pack, env, requiredChecks);
1165
1165
  if (!doctor.ready) {
1166
- const missing = [...doctor.missingRequirements, ...doctor.missingRequiredChecks].join(", ");
1167
- throw new Error(`Target pack '${pack.id}' is not configured: ${missing}`);
1166
+ const missing2 = [...doctor.missingRequirements, ...doctor.missingRequiredChecks].join(", ");
1167
+ throw new Error(`Target pack '${pack.id}' is not configured: ${missing2}`);
1168
1168
  }
1169
1169
  const targetPack = evidenceMetadata(pack, env);
1170
1170
  const suite = defineLiveSuite({
@@ -1177,6 +1177,9 @@ function defineTargetPackRun(pack, options = {}) {
1177
1177
  });
1178
1178
  return { pack, run: (runtime) => suite.run(runtime) };
1179
1179
  }
1180
+ function resolveRequiredChecks(pack, additional = []) {
1181
+ return [.../* @__PURE__ */ new Set([...pack.requiredChecks ?? [], ...additional])];
1182
+ }
1180
1183
  async function runTargetPack(pack, options = {}, runtime) {
1181
1184
  return defineTargetPackRun(pack, options).run(runtime);
1182
1185
  }
@@ -1885,6 +1888,576 @@ function createLakeflowJobsTargetPack() {
1885
1888
  });
1886
1889
  }
1887
1890
 
1891
+ // src/next-workload-checks.ts
1892
+ function missing(env, names) {
1893
+ return names.filter((name) => !env[name]?.trim());
1894
+ }
1895
+ function requireEnv(env, names) {
1896
+ const absent = missing(env, names);
1897
+ if (absent.length > 0) throw new Error(`Missing required configuration: ${absent.join(", ")}`);
1898
+ }
1899
+ async function assertBooleanSql(label, statement, query) {
1900
+ if (!statement) throw new Error(`${label} assertion SQL is not configured`);
1901
+ const rows = await query(statement);
1902
+ const value = rows[0] ? Object.values(rows[0])[0] : void 0;
1903
+ if (!(value === true || value === 1 || value === "1" || value === "true")) {
1904
+ throw new Error(`${label} assertion did not return a truthy first column`);
1905
+ }
1906
+ }
1907
+ async function certificationJob(label, jobIdValue, env, client) {
1908
+ const jobId = Number(jobIdValue);
1909
+ if (!Number.isSafeInteger(jobId) || jobId <= 0) {
1910
+ throw new Error(`${label} job id must be a positive integer`);
1911
+ }
1912
+ const submitted = await client.post("/api/2.1/jobs/run-now", {
1913
+ job_id: jobId
1914
+ });
1915
+ if (!Number.isSafeInteger(submitted.run_id)) {
1916
+ throw new Error(`${label} certification job returned no run_id`);
1917
+ }
1918
+ const run = await waitForDatabricksRun(client, submitted.run_id, {
1919
+ timeoutMs: Number(env.DBX_TEST_TIMEOUT_MS ?? 36e5),
1920
+ pollIntervalMs: Number(env.DBX_TEST_POLL_INTERVAL_MS ?? 1e4)
1921
+ });
1922
+ const result = run.state?.result_state;
1923
+ if (result !== "SUCCESS") {
1924
+ throw new Error(`${label} certification job ${jobId} ended in ${result ?? "UNKNOWN"}`);
1925
+ }
1926
+ return { jobId, runId: submitted.run_id };
1927
+ }
1928
+ function jobAndAssertionsCheck(spec) {
1929
+ const names = [spec.job, ...spec.assertions.map(({ env }) => env)];
1930
+ return {
1931
+ id: spec.id,
1932
+ description: spec.description,
1933
+ configured: (env) => missing(env, names).length === 0,
1934
+ async run({ env, client, warehouse: warehouse3 }) {
1935
+ requireEnv(env, names);
1936
+ const job = await certificationJob(spec.label, env[spec.job], env, client);
1937
+ for (const assertion of spec.assertions) {
1938
+ await assertBooleanSql(assertion.label, env[assertion.env], warehouse3.query);
1939
+ }
1940
+ return {
1941
+ ...job,
1942
+ assertions: Object.fromEntries(spec.assertions.map(({ label }) => [label, true]))
1943
+ };
1944
+ }
1945
+ };
1946
+ }
1947
+ function semanticAnalyticsCheck() {
1948
+ return jobAndAssertionsCheck({
1949
+ id: "semantic-analytics",
1950
+ description: "Metric views, materialization, SQL alerts and query-performance evidence are healthy",
1951
+ label: "Semantic analytics",
1952
+ job: "DBX_TEST_SEMANTIC_ANALYTICS_JOB_ID",
1953
+ assertions: [
1954
+ { env: "DBX_TEST_METRIC_VIEW_ASSERTION_SQL", label: "Metric view query" },
1955
+ { env: "DBX_TEST_METRIC_MATERIALIZATION_ASSERTION_SQL", label: "Metric materialization" },
1956
+ { env: "DBX_TEST_SQL_ALERT_ASSERTION_SQL", label: "SQL alert" },
1957
+ { env: "DBX_TEST_QUERY_PERFORMANCE_ASSERTION_SQL", label: "Query performance" }
1958
+ ]
1959
+ });
1960
+ }
1961
+ function aiFunctionsBatchInferenceCheck() {
1962
+ return jobAndAssertionsCheck({
1963
+ id: "ai-functions-batch-inference",
1964
+ description: "AI Functions batch and streaming inference produce governed durable output",
1965
+ label: "AI Functions batch inference",
1966
+ job: "DBX_TEST_AI_FUNCTIONS_JOB_ID",
1967
+ assertions: [
1968
+ { env: "DBX_TEST_AI_FUNCTIONS_OUTPUT_ASSERTION_SQL", label: "AI Functions output" },
1969
+ { env: "DBX_TEST_BATCH_INFERENCE_QUALITY_ASSERTION_SQL", label: "Batch inference quality" },
1970
+ { env: "DBX_TEST_BATCH_INFERENCE_LINEAGE_ASSERTION_SQL", label: "Batch inference lineage" }
1971
+ ]
1972
+ });
1973
+ }
1974
+ function agentOrchestrationResponsesCheck() {
1975
+ return jobAndAssertionsCheck({
1976
+ id: "agent-orchestration-responses",
1977
+ description: "Knowledge Assistant, multi-agent orchestration and Responses API produce grounded governed evidence",
1978
+ label: "Agent orchestration and Responses",
1979
+ job: "DBX_TEST_AGENT_ORCHESTRATION_JOB_ID",
1980
+ assertions: [
1981
+ { env: "DBX_TEST_KNOWLEDGE_ASSISTANT_ASSERTION_SQL", label: "Knowledge Assistant" },
1982
+ { env: "DBX_TEST_MULTI_AGENT_ASSERTION_SQL", label: "Multi-agent orchestration" },
1983
+ { env: "DBX_TEST_RESPONSES_API_ASSERTION_SQL", label: "Responses API" },
1984
+ { env: "DBX_TEST_AGENT_GROUNDEDNESS_ASSERTION_SQL", label: "Agent groundedness" }
1985
+ ]
1986
+ });
1987
+ }
1988
+ function aiRuntimeTrainingCheck() {
1989
+ return jobAndAssertionsCheck({
1990
+ id: "ai-runtime-training",
1991
+ description: "AI Runtime training or fine-tuning produces MLflow and Unity Catalog evidence",
1992
+ label: "AI Runtime training",
1993
+ job: "DBX_TEST_AI_RUNTIME_JOB_ID",
1994
+ assertions: [
1995
+ { env: "DBX_TEST_AI_RUNTIME_RUN_ASSERTION_SQL", label: "AI Runtime run" },
1996
+ { env: "DBX_TEST_AI_RUNTIME_EVAL_ASSERTION_SQL", label: "AI Runtime evaluation" },
1997
+ { env: "DBX_TEST_AI_RUNTIME_MODEL_ASSERTION_SQL", label: "AI Runtime registered model" }
1998
+ ]
1999
+ });
2000
+ }
2001
+ function lakebaseAutoscalingFeatureStoreCheck() {
2002
+ return jobAndAssertionsCheck({
2003
+ id: "lakebase-autoscaling-feature-store",
2004
+ description: "Lakebase Autoscaling Online Feature Store publishes fresh features and serves lookups",
2005
+ label: "Lakebase Autoscaling feature store",
2006
+ job: "DBX_TEST_ONLINE_FEATURE_STORE_JOB_ID",
2007
+ assertions: [
2008
+ { env: "DBX_TEST_ONLINE_STORE_ASSERTION_SQL", label: "Online store publication" },
2009
+ { env: "DBX_TEST_FEATURE_SERVING_ASSERTION_SQL", label: "Feature Serving lookup" },
2010
+ { env: "DBX_TEST_ONLINE_FEATURE_FRESHNESS_ASSERTION_SQL", label: "Online feature freshness" }
2011
+ ]
2012
+ });
2013
+ }
2014
+ function declarativeBundlesCheck() {
2015
+ return jobAndAssertionsCheck({
2016
+ id: "declarative-bundles",
2017
+ description: "A validated bundle deployment runs the exact candidate and records provenance",
2018
+ label: "Declarative Automation Bundle",
2019
+ job: "DBX_TEST_BUNDLE_JOB_ID",
2020
+ assertions: [
2021
+ { env: "DBX_TEST_BUNDLE_PROVENANCE_ASSERTION_SQL", label: "Bundle provenance" },
2022
+ { env: "DBX_TEST_BUNDLE_CANDIDATE_ASSERTION_SQL", label: "Bundle candidate" },
2023
+ { env: "DBX_TEST_BUNDLE_ROLLBACK_ASSERTION_SQL", label: "Bundle rollback" }
2024
+ ]
2025
+ });
2026
+ }
2027
+ function lakehouseOptimizationCheck() {
2028
+ const names = [
2029
+ "DBX_TEST_PREDICTIVE_OPTIMIZATION_ASSERTION_SQL",
2030
+ "DBX_TEST_LIQUID_CLUSTERING_ASSERTION_SQL",
2031
+ "DBX_TEST_ICEBERG_INTEROP_ASSERTION_SQL"
2032
+ ];
2033
+ return {
2034
+ id: "lakehouse-optimization",
2035
+ description: "Predictive Optimization, liquid clustering and Iceberg interoperability satisfy table contracts",
2036
+ configured: (env) => missing(env, names).length === 0,
2037
+ async run({ env, warehouse: warehouse3 }) {
2038
+ requireEnv(env, names);
2039
+ await assertBooleanSql(
2040
+ "Predictive Optimization",
2041
+ env.DBX_TEST_PREDICTIVE_OPTIMIZATION_ASSERTION_SQL,
2042
+ warehouse3.query
2043
+ );
2044
+ await assertBooleanSql(
2045
+ "Liquid clustering",
2046
+ env.DBX_TEST_LIQUID_CLUSTERING_ASSERTION_SQL,
2047
+ warehouse3.query
2048
+ );
2049
+ await assertBooleanSql(
2050
+ "Iceberg interoperability",
2051
+ env.DBX_TEST_ICEBERG_INTEROP_ASSERTION_SQL,
2052
+ warehouse3.query
2053
+ );
2054
+ return { predictiveOptimization: true, liquidClustering: true, icebergInterop: true };
2055
+ }
2056
+ };
2057
+ }
2058
+ function marketplaceOpenSharingCheck() {
2059
+ return jobAndAssertionsCheck({
2060
+ id: "marketplace-open-sharing",
2061
+ description: "Marketplace provider and consumer flows preserve OpenSharing governance and asset usability",
2062
+ label: "Marketplace and OpenSharing",
2063
+ job: "DBX_TEST_MARKETPLACE_JOB_ID",
2064
+ assertions: [
2065
+ { env: "DBX_TEST_MARKETPLACE_LISTING_ASSERTION_SQL", label: "Marketplace listing" },
2066
+ { env: "DBX_TEST_OPEN_SHARING_RECIPIENT_ASSERTION_SQL", label: "OpenSharing recipient" },
2067
+ { env: "DBX_TEST_MARKETPLACE_ASSET_ASSERTION_SQL", label: "Marketplace asset" }
2068
+ ]
2069
+ });
2070
+ }
2071
+
2072
+ // src/next-target-packs.ts
2073
+ var DOCS2 = "https://experiments.fabric.pro/docs/testing/target-packs/";
2074
+ var AZURE_M2M_SCOPE = "Azure Databricks, dedicated service principal using OAuth M2M, public network path; named managed or disposable certification fixtures";
2075
+ var workspace = {
2076
+ id: "workspace",
2077
+ description: "Databricks workspace host",
2078
+ anyOf: ["DATABRICKS_HOST"]
2079
+ };
2080
+ var auth = {
2081
+ id: "authentication",
2082
+ description: "Databricks OAuth M2M authentication",
2083
+ anyOf: ["DATABRICKS_CLIENT_ID"],
2084
+ secret: true
2085
+ };
2086
+ var warehouse = {
2087
+ id: "warehouse",
2088
+ description: "SQL warehouse for durable evidence assertions",
2089
+ anyOf: ["DATABRICKS_WAREHOUSE_ID", "DATABRICKS_HTTP_PATH"]
2090
+ };
2091
+ var requirement = (id, description, ...anyOf) => ({
2092
+ id,
2093
+ description,
2094
+ anyOf
2095
+ });
2096
+ var identityChecks = () => [restrictedPrincipalCheck()];
2097
+ function createSemanticAnalyticsTargetPack() {
2098
+ return defineTargetPack({
2099
+ id: "semantic-analytics",
2100
+ name: "Semantic analytics and SQL operations",
2101
+ description: "Unity Catalog metric views, materialization, SQL alerts and query-performance regression.",
2102
+ version: "1.0.0",
2103
+ maturity: "shipped",
2104
+ capabilities: [
2105
+ "semantics.metric-views",
2106
+ "semantics.materialization",
2107
+ "sql.alerts",
2108
+ "sql.query-performance"
2109
+ ],
2110
+ checks: () => [...identityChecks(), semanticAnalyticsCheck()],
2111
+ requiredChecks: ["restricted-principal", "semantic-analytics"],
2112
+ requirements: [
2113
+ workspace,
2114
+ auth,
2115
+ warehouse,
2116
+ requirement(
2117
+ "semantic-job",
2118
+ "Metric-view certification Job",
2119
+ "DBX_TEST_SEMANTIC_ANALYTICS_JOB_ID"
2120
+ ),
2121
+ requirement(
2122
+ "metric-view",
2123
+ "Metric-view query assertion",
2124
+ "DBX_TEST_METRIC_VIEW_ASSERTION_SQL"
2125
+ ),
2126
+ requirement(
2127
+ "metric-materialization",
2128
+ "Metric-view materialization assertion",
2129
+ "DBX_TEST_METRIC_MATERIALIZATION_ASSERTION_SQL"
2130
+ ),
2131
+ requirement("sql-alert", "SQL alert assertion", "DBX_TEST_SQL_ALERT_ASSERTION_SQL"),
2132
+ requirement(
2133
+ "query-performance",
2134
+ "Query performance assertion",
2135
+ "DBX_TEST_QUERY_PERFORMANCE_ASSERTION_SQL"
2136
+ )
2137
+ ],
2138
+ docsUrl: `${DOCS2}#semantic-analytics-and-sql-operations`,
2139
+ certificationScopes: [
2140
+ `${AZURE_M2M_SCOPE}; metric view, materialization, alert and query history`
2141
+ ]
2142
+ });
2143
+ }
2144
+ function createAiFunctionsBatchInferenceTargetPack() {
2145
+ return defineTargetPack({
2146
+ id: "ai-functions-batch-inference",
2147
+ name: "AI Functions and batch inference",
2148
+ description: "Governed batch or streaming inference through Databricks AI Functions.",
2149
+ version: "1.0.0",
2150
+ maturity: "shipped",
2151
+ capabilities: [
2152
+ "ai-functions.inference",
2153
+ "batch-inference.quality",
2154
+ "streaming-inference",
2155
+ "inference.lineage"
2156
+ ],
2157
+ checks: () => [...identityChecks(), aiFunctionsBatchInferenceCheck()],
2158
+ requiredChecks: ["restricted-principal", "ai-functions-batch-inference"],
2159
+ requirements: [
2160
+ workspace,
2161
+ auth,
2162
+ warehouse,
2163
+ requirement("ai-functions-job", "AI Functions inference Job", "DBX_TEST_AI_FUNCTIONS_JOB_ID"),
2164
+ requirement(
2165
+ "ai-functions-output",
2166
+ "Inference output assertion",
2167
+ "DBX_TEST_AI_FUNCTIONS_OUTPUT_ASSERTION_SQL"
2168
+ ),
2169
+ requirement(
2170
+ "batch-quality",
2171
+ "Inference quality assertion",
2172
+ "DBX_TEST_BATCH_INFERENCE_QUALITY_ASSERTION_SQL"
2173
+ ),
2174
+ requirement(
2175
+ "batch-lineage",
2176
+ "Inference lineage assertion",
2177
+ "DBX_TEST_BATCH_INFERENCE_LINEAGE_ASSERTION_SQL"
2178
+ )
2179
+ ],
2180
+ docsUrl: `${DOCS2}#ai-functions-and-batch-inference`,
2181
+ certificationScopes: [
2182
+ `${AZURE_M2M_SCOPE}; AI Functions Job with durable output, quality and lineage`
2183
+ ]
2184
+ });
2185
+ }
2186
+ function createAgentOrchestrationTargetPack() {
2187
+ return defineTargetPack({
2188
+ id: "agent-orchestration-responses",
2189
+ name: "Knowledge Assistant, multi-agent and Responses",
2190
+ description: "Knowledge Assistant and multi-agent application behavior through the Responses API.",
2191
+ version: "1.0.0",
2192
+ maturity: "shipped",
2193
+ capabilities: [
2194
+ "agents.knowledge-assistant",
2195
+ "agents.multi-agent",
2196
+ "agents.responses-api",
2197
+ "agents.groundedness"
2198
+ ],
2199
+ checks: () => [...identityChecks(), agentOrchestrationResponsesCheck()],
2200
+ requiredChecks: ["restricted-principal", "agent-orchestration-responses"],
2201
+ requirements: [
2202
+ workspace,
2203
+ auth,
2204
+ warehouse,
2205
+ requirement(
2206
+ "agent-orchestration-job",
2207
+ "Agent orchestration certification Job",
2208
+ "DBX_TEST_AGENT_ORCHESTRATION_JOB_ID"
2209
+ ),
2210
+ requirement(
2211
+ "knowledge-assistant",
2212
+ "Knowledge Assistant assertion",
2213
+ "DBX_TEST_KNOWLEDGE_ASSISTANT_ASSERTION_SQL"
2214
+ ),
2215
+ requirement("multi-agent", "Multi-agent assertion", "DBX_TEST_MULTI_AGENT_ASSERTION_SQL"),
2216
+ requirement(
2217
+ "responses-api",
2218
+ "Responses API assertion",
2219
+ "DBX_TEST_RESPONSES_API_ASSERTION_SQL"
2220
+ ),
2221
+ requirement(
2222
+ "agent-groundedness",
2223
+ "Groundedness assertion",
2224
+ "DBX_TEST_AGENT_GROUNDEDNESS_ASSERTION_SQL"
2225
+ )
2226
+ ],
2227
+ docsUrl: `${DOCS2}#knowledge-assistant-multi-agent-and-responses`,
2228
+ certificationScopes: [
2229
+ `${AZURE_M2M_SCOPE}; Databricks preview agent surfaces with durable groundedness evidence`
2230
+ ]
2231
+ });
2232
+ }
2233
+ function createAiRuntimeTrainingTargetPack() {
2234
+ return defineTargetPack({
2235
+ id: "ai-runtime-training",
2236
+ name: "AI Runtime training and fine-tuning",
2237
+ description: "AI Runtime training or fine-tuning with MLflow and Unity Catalog model evidence.",
2238
+ version: "1.0.0",
2239
+ maturity: "shipped",
2240
+ capabilities: [
2241
+ "ai-runtime.training",
2242
+ "ai-runtime.fine-tuning",
2243
+ "mlflow.training-evaluation",
2244
+ "models.unity-catalog"
2245
+ ],
2246
+ checks: () => [...identityChecks(), aiRuntimeTrainingCheck()],
2247
+ requiredChecks: ["restricted-principal", "ai-runtime-training"],
2248
+ requirements: [
2249
+ workspace,
2250
+ auth,
2251
+ warehouse,
2252
+ requirement("ai-runtime-job", "AI Runtime certification Job", "DBX_TEST_AI_RUNTIME_JOB_ID"),
2253
+ requirement(
2254
+ "ai-runtime-run",
2255
+ "Training-run assertion",
2256
+ "DBX_TEST_AI_RUNTIME_RUN_ASSERTION_SQL"
2257
+ ),
2258
+ requirement(
2259
+ "ai-runtime-eval",
2260
+ "Training evaluation assertion",
2261
+ "DBX_TEST_AI_RUNTIME_EVAL_ASSERTION_SQL"
2262
+ ),
2263
+ requirement(
2264
+ "ai-runtime-model",
2265
+ "Registered-model assertion",
2266
+ "DBX_TEST_AI_RUNTIME_MODEL_ASSERTION_SQL"
2267
+ )
2268
+ ],
2269
+ docsUrl: `${DOCS2}#ai-runtime-training-and-fine-tuning`,
2270
+ certificationScopes: [
2271
+ `${AZURE_M2M_SCOPE}; serverless GPU AI Runtime candidate tracked in MLflow and Unity Catalog`
2272
+ ]
2273
+ });
2274
+ }
2275
+ function createLakebaseAutoscalingFeatureStoreTargetPack() {
2276
+ return defineTargetPack({
2277
+ id: "lakebase-autoscaling-features",
2278
+ name: "Lakebase Autoscaling Online Feature Store",
2279
+ description: "Online feature publication, freshness and Feature Serving lookup behavior.",
2280
+ version: "1.0.0",
2281
+ maturity: "shipped",
2282
+ capabilities: [
2283
+ "lakebase.autoscaling",
2284
+ "features.online-store",
2285
+ "features.serving-endpoint",
2286
+ "features.online-freshness"
2287
+ ],
2288
+ checks: () => [...identityChecks(), lakebaseAutoscalingFeatureStoreCheck()],
2289
+ requiredChecks: ["restricted-principal", "lakebase-autoscaling-feature-store"],
2290
+ requirements: [
2291
+ workspace,
2292
+ auth,
2293
+ warehouse,
2294
+ requirement(
2295
+ "online-feature-job",
2296
+ "Online Feature Store publication Job",
2297
+ "DBX_TEST_ONLINE_FEATURE_STORE_JOB_ID"
2298
+ ),
2299
+ requirement(
2300
+ "online-store",
2301
+ "Online publication assertion",
2302
+ "DBX_TEST_ONLINE_STORE_ASSERTION_SQL"
2303
+ ),
2304
+ requirement(
2305
+ "feature-serving",
2306
+ "Feature Serving lookup assertion",
2307
+ "DBX_TEST_FEATURE_SERVING_ASSERTION_SQL"
2308
+ ),
2309
+ requirement(
2310
+ "feature-freshness",
2311
+ "Online freshness assertion",
2312
+ "DBX_TEST_ONLINE_FEATURE_FRESHNESS_ASSERTION_SQL"
2313
+ )
2314
+ ],
2315
+ docsUrl: `${DOCS2}#lakebase-autoscaling-online-feature-store`,
2316
+ certificationScopes: [
2317
+ `${AZURE_M2M_SCOPE}; Lakebase Autoscaling store and Feature Serving lookup`
2318
+ ]
2319
+ });
2320
+ }
2321
+ function createDeclarativeBundlesTargetPack() {
2322
+ return defineTargetPack({
2323
+ id: "declarative-bundles",
2324
+ name: "Declarative Automation Bundles",
2325
+ description: "Bundle validation, exact-candidate deployment, execution provenance and rollback.",
2326
+ version: "1.0.0",
2327
+ maturity: "shipped",
2328
+ capabilities: [
2329
+ "bundles.validation",
2330
+ "bundles.deployment",
2331
+ "bundles.provenance",
2332
+ "bundles.rollback"
2333
+ ],
2334
+ checks: () => [...identityChecks(), declarativeBundlesCheck()],
2335
+ requiredChecks: ["restricted-principal", "declarative-bundles"],
2336
+ requirements: [
2337
+ workspace,
2338
+ auth,
2339
+ warehouse,
2340
+ requirement("bundle-job", "Bundle-managed certification Job", "DBX_TEST_BUNDLE_JOB_ID"),
2341
+ requirement(
2342
+ "bundle-provenance",
2343
+ "Deployment provenance assertion",
2344
+ "DBX_TEST_BUNDLE_PROVENANCE_ASSERTION_SQL"
2345
+ ),
2346
+ requirement(
2347
+ "bundle-candidate",
2348
+ "Exact-candidate assertion",
2349
+ "DBX_TEST_BUNDLE_CANDIDATE_ASSERTION_SQL"
2350
+ ),
2351
+ requirement(
2352
+ "bundle-rollback",
2353
+ "Rollback assertion",
2354
+ "DBX_TEST_BUNDLE_ROLLBACK_ASSERTION_SQL"
2355
+ )
2356
+ ],
2357
+ docsUrl: `${DOCS2}#declarative-automation-bundles`,
2358
+ certificationScopes: [
2359
+ `${AZURE_M2M_SCOPE}; validate/deploy/run/rollback lifecycle for an immutable bundle target`
2360
+ ]
2361
+ });
2362
+ }
2363
+ function createLakehouseOptimizationTargetPack() {
2364
+ return defineTargetPack({
2365
+ id: "lakehouse-optimization",
2366
+ name: "Lakehouse optimization and Iceberg interoperability",
2367
+ description: "Predictive Optimization, liquid clustering and governed Iceberg interoperability.",
2368
+ version: "1.0.0",
2369
+ maturity: "shipped",
2370
+ capabilities: [
2371
+ "tables.predictive-optimization",
2372
+ "tables.liquid-clustering",
2373
+ "tables.iceberg",
2374
+ "tables.interoperability"
2375
+ ],
2376
+ checks: () => [...identityChecks(), lakehouseOptimizationCheck()],
2377
+ requiredChecks: ["restricted-principal", "lakehouse-optimization"],
2378
+ requirements: [
2379
+ workspace,
2380
+ auth,
2381
+ warehouse,
2382
+ requirement(
2383
+ "predictive-optimization",
2384
+ "Predictive Optimization assertion",
2385
+ "DBX_TEST_PREDICTIVE_OPTIMIZATION_ASSERTION_SQL"
2386
+ ),
2387
+ requirement(
2388
+ "liquid-clustering",
2389
+ "Liquid clustering assertion",
2390
+ "DBX_TEST_LIQUID_CLUSTERING_ASSERTION_SQL"
2391
+ ),
2392
+ requirement(
2393
+ "iceberg-interop",
2394
+ "Iceberg interoperability assertion",
2395
+ "DBX_TEST_ICEBERG_INTEROP_ASSERTION_SQL"
2396
+ )
2397
+ ],
2398
+ docsUrl: `${DOCS2}#lakehouse-optimization-and-iceberg`,
2399
+ certificationScopes: [`${AZURE_M2M_SCOPE}; Unity Catalog managed Delta and Iceberg fixtures`]
2400
+ });
2401
+ }
2402
+ function createMarketplaceOpenSharingTargetPack() {
2403
+ return defineTargetPack({
2404
+ id: "marketplace-open-sharing",
2405
+ name: "Marketplace and OpenSharing",
2406
+ description: "Provider listing, recipient access and usable governed data or AI assets.",
2407
+ version: "1.0.0",
2408
+ maturity: "shipped",
2409
+ capabilities: [
2410
+ "marketplace.provider",
2411
+ "marketplace.consumer",
2412
+ "open-sharing.recipient",
2413
+ "marketplace.ai-assets"
2414
+ ],
2415
+ checks: () => [...identityChecks(), marketplaceOpenSharingCheck()],
2416
+ requiredChecks: ["restricted-principal", "marketplace-open-sharing"],
2417
+ requirements: [
2418
+ workspace,
2419
+ auth,
2420
+ warehouse,
2421
+ requirement(
2422
+ "marketplace-job",
2423
+ "Marketplace certification Job",
2424
+ "DBX_TEST_MARKETPLACE_JOB_ID"
2425
+ ),
2426
+ requirement(
2427
+ "marketplace-listing",
2428
+ "Listing assertion",
2429
+ "DBX_TEST_MARKETPLACE_LISTING_ASSERTION_SQL"
2430
+ ),
2431
+ requirement(
2432
+ "open-sharing-recipient",
2433
+ "Recipient assertion",
2434
+ "DBX_TEST_OPEN_SHARING_RECIPIENT_ASSERTION_SQL"
2435
+ ),
2436
+ requirement(
2437
+ "marketplace-asset",
2438
+ "Shared asset usability assertion",
2439
+ "DBX_TEST_MARKETPLACE_ASSET_ASSERTION_SQL"
2440
+ )
2441
+ ],
2442
+ docsUrl: `${DOCS2}#marketplace-and-opensharing`,
2443
+ certificationScopes: [
2444
+ `${AZURE_M2M_SCOPE}; private listing provider and recipient lifecycle with governed asset access`
2445
+ ]
2446
+ });
2447
+ }
2448
+ function createNextTargetPacks() {
2449
+ return [
2450
+ createSemanticAnalyticsTargetPack(),
2451
+ createAiFunctionsBatchInferenceTargetPack(),
2452
+ createAgentOrchestrationTargetPack(),
2453
+ createAiRuntimeTrainingTargetPack(),
2454
+ createLakebaseAutoscalingFeatureStoreTargetPack(),
2455
+ createDeclarativeBundlesTargetPack(),
2456
+ createLakehouseOptimizationTargetPack(),
2457
+ createMarketplaceOpenSharingTargetPack()
2458
+ ];
2459
+ }
2460
+
1888
2461
  // src/advanced-workload-checks.ts
1889
2462
  var DatabricksAdvancedWorkloadsAdapter = class {
1890
2463
  constructor(client) {
@@ -1958,6 +2531,15 @@ var DatabricksAdvancedWorkloadsAdapter = class {
1958
2531
  warehouse(id) {
1959
2532
  return this.client.get(`/api/2.0/sql/warehouses/${segment(id)}`);
1960
2533
  }
2534
+ app(name) {
2535
+ return this.client.get(`/api/2.0/apps/${segment(name)}`);
2536
+ }
2537
+ agentService(fullName) {
2538
+ return this.client.get(`/api/2.1/unity-catalog/agent-services/${segment(fullName)}`);
2539
+ }
2540
+ agentServicePermissions(fullName) {
2541
+ return this.client.get(`/api/2.1/unity-catalog/permissions/AGENT_SERVICE/${segment(fullName)}`);
2542
+ }
1961
2543
  };
1962
2544
  function segment(value) {
1963
2545
  return encodeURIComponent(value);
@@ -1968,9 +2550,9 @@ function adapter(client) {
1968
2550
  function required2(env, names) {
1969
2551
  return names.filter((name) => !env[name]?.trim());
1970
2552
  }
1971
- function requireEnv(env, names) {
1972
- const missing = required2(env, names);
1973
- if (missing.length > 0) throw new Error(`Missing required configuration: ${missing.join(", ")}`);
2553
+ function requireEnv2(env, names) {
2554
+ const missing2 = required2(env, names);
2555
+ if (missing2.length > 0) throw new Error(`Missing required configuration: ${missing2.join(", ")}`);
1974
2556
  }
1975
2557
  function parseJson(value, name) {
1976
2558
  if (!value) return void 0;
@@ -2004,6 +2586,27 @@ async function booleanSql(label, sql, query) {
2004
2586
  throw new Error(`${label} assertion did not return a truthy first column`);
2005
2587
  }
2006
2588
  }
2589
+ async function runCertificationJob(label, jobIdValue, env, client, options = {}) {
2590
+ const jobId = Number(jobIdValue);
2591
+ if (!Number.isSafeInteger(jobId) || jobId <= 0) {
2592
+ throw new Error(`${label} job id must be a positive integer`);
2593
+ }
2594
+ const submitted = await client.post("/api/2.1/jobs/run-now", {
2595
+ job_id: jobId
2596
+ });
2597
+ if (!Number.isSafeInteger(submitted.run_id)) {
2598
+ throw new Error(`${label} certification job returned no run_id`);
2599
+ }
2600
+ const run = await waitForDatabricksRun(client, submitted.run_id, {
2601
+ timeoutMs: options.timeoutMs ?? Number(env.DBX_TEST_TIMEOUT_MS ?? 9e5),
2602
+ pollIntervalMs: Number(env.DBX_TEST_POLL_INTERVAL_MS ?? 1e4)
2603
+ });
2604
+ const result = run.state?.result_state;
2605
+ if (result !== "SUCCESS") {
2606
+ throw new Error(`${label} certification job ${jobId} ended in ${result ?? "UNKNOWN"}`);
2607
+ }
2608
+ return { jobId, runId: submitted.run_id };
2609
+ }
2007
2610
  function advancedStreamingCdcCheck() {
2008
2611
  const names = [
2009
2612
  "DBX_TEST_STREAMING_PIPELINE_ID",
@@ -2015,8 +2618,8 @@ function advancedStreamingCdcCheck() {
2015
2618
  id: "streaming-cdc",
2016
2619
  description: "Streaming pipeline, streaming table and CDC assertions are healthy",
2017
2620
  configured: (env) => required2(env, names).length === 0,
2018
- async run({ env, client, warehouse: warehouse2 }) {
2019
- requireEnv(env, names);
2621
+ async run({ env, client, warehouse: warehouse3 }) {
2622
+ requireEnv2(env, names);
2020
2623
  const api = adapter(client);
2021
2624
  const pipeline = await api.pipeline(env.DBX_TEST_STREAMING_PIPELINE_ID);
2022
2625
  assertNotFailed("Streaming pipeline", pipeline.state);
@@ -2025,11 +2628,11 @@ function advancedStreamingCdcCheck() {
2025
2628
  if (!["STREAMING_TABLE", "MATERIALIZED_VIEW", "DELTA"].includes(tableType)) {
2026
2629
  throw new Error(`Streaming target has unsupported table type ${tableType || "UNKNOWN"}`);
2027
2630
  }
2028
- await booleanSql("CDC", env.DBX_TEST_CDC_ASSERTION_SQL, warehouse2.query);
2631
+ await booleanSql("CDC", env.DBX_TEST_CDC_ASSERTION_SQL, warehouse3.query);
2029
2632
  await booleanSql(
2030
2633
  "Streaming freshness",
2031
2634
  env.DBX_TEST_STREAMING_ASSERTION_SQL,
2032
- warehouse2.query
2635
+ warehouse3.query
2033
2636
  );
2034
2637
  return { pipelineId: pipeline.pipeline_id, table: env.DBX_TEST_STREAMING_TABLE, tableType };
2035
2638
  }
@@ -2041,8 +2644,8 @@ function lakeflowConnectCheck() {
2041
2644
  id: "lakeflow-connect",
2042
2645
  description: "Lakeflow Connect ingestion pipeline exists and is not failed",
2043
2646
  configured: (env) => required2(env, names).length === 0,
2044
- async run({ env, client, warehouse: warehouse2 }) {
2045
- requireEnv(env, names);
2647
+ async run({ env, client, warehouse: warehouse3 }) {
2648
+ requireEnv2(env, names);
2046
2649
  const id = env.DBX_TEST_CONNECT_PIPELINE_ID;
2047
2650
  const pipeline = await adapter(client).pipeline(id);
2048
2651
  assertNotFailed("Lakeflow Connect pipeline", pipeline.state);
@@ -2053,7 +2656,7 @@ function lakeflowConnectCheck() {
2053
2656
  await booleanSql(
2054
2657
  "Lakeflow Connect replication",
2055
2658
  env.DBX_TEST_CONNECT_ASSERTION_SQL,
2056
- warehouse2.query
2659
+ warehouse3.query
2057
2660
  );
2058
2661
  return {
2059
2662
  pipelineId: pipeline.pipeline_id ?? id,
@@ -2093,7 +2696,7 @@ function genieCheck() {
2093
2696
  description: "Genie space is accessible and can optionally start a grounded conversation",
2094
2697
  configured: (env) => required2(env, names).length === 0,
2095
2698
  async run({ env, client }) {
2096
- requireEnv(env, names);
2699
+ requireEnv2(env, names);
2097
2700
  const api = adapter(client);
2098
2701
  const id = env.DBX_TEST_GENIE_SPACE_ID;
2099
2702
  const space = await api.genieSpace(id);
@@ -2123,7 +2726,7 @@ function mlflowLifecycleCheck() {
2123
2726
  description: "MLflow experiment and Unity Catalog model version are accessible",
2124
2727
  configured: (env) => required2(env, names).length === 0,
2125
2728
  async run({ env, client }) {
2126
- requireEnv(env, names);
2729
+ requireEnv2(env, names);
2127
2730
  const api = adapter(client);
2128
2731
  const experiment = await api.experiment(env.DBX_TEST_MLFLOW_EXPERIMENT_ID);
2129
2732
  const model = await api.registeredModel(env.DBX_TEST_REGISTERED_MODEL);
@@ -2147,8 +2750,8 @@ function featureEngineeringServingCheck() {
2147
2750
  configured: (env) => Boolean(
2148
2751
  env.DBX_TEST_FEATURE_TABLE && env.DBX_TEST_FEATURE_ASSERTION_SQL && (env.DBX_TEST_ONLINE_TABLE || env.DBX_TEST_FEATURE_SERVING_PIPELINE_ID)
2149
2752
  ),
2150
- async run({ env, client, warehouse: warehouse2 }) {
2151
- requireEnv(env, ["DBX_TEST_FEATURE_TABLE"]);
2753
+ async run({ env, client, warehouse: warehouse3 }) {
2754
+ requireEnv2(env, ["DBX_TEST_FEATURE_TABLE"]);
2152
2755
  if (!env.DBX_TEST_ONLINE_TABLE && !env.DBX_TEST_FEATURE_SERVING_PIPELINE_ID) {
2153
2756
  throw new Error(
2154
2757
  "Feature serving requires DBX_TEST_ONLINE_TABLE or DBX_TEST_FEATURE_SERVING_PIPELINE_ID"
@@ -2171,7 +2774,7 @@ function featureEngineeringServingCheck() {
2171
2774
  assertNotFailed("Synced Table pipeline", state);
2172
2775
  servingResource = pipeline.pipeline_id ?? pipelineId;
2173
2776
  }
2174
- await booleanSql("Feature freshness", env.DBX_TEST_FEATURE_ASSERTION_SQL, warehouse2.query);
2777
+ await booleanSql("Feature freshness", env.DBX_TEST_FEATURE_ASSERTION_SQL, warehouse3.query);
2175
2778
  return {
2176
2779
  featureTable: source.full_name ?? env.DBX_TEST_FEATURE_TABLE,
2177
2780
  servingResource,
@@ -2191,7 +2794,7 @@ function modelServingCheck() {
2191
2794
  description: "Model Serving endpoint is ready and can optionally serve an inference request",
2192
2795
  configured: (env) => required2(env, names).length === 0,
2193
2796
  async run({ env, client }) {
2194
- requireEnv(env, names);
2797
+ requireEnv2(env, names);
2195
2798
  if (env.DBX_TEST_AI_GATEWAY_REQUIRED !== "1") {
2196
2799
  throw new Error("DBX_TEST_AI_GATEWAY_REQUIRED must be 1 for the Model Serving target pack");
2197
2800
  }
@@ -2227,7 +2830,7 @@ function evalJudgeModelServingCheck() {
2227
2830
  description: "Databricks Model Serving satisfies the deterministic evaluator chat contract",
2228
2831
  configured: (env) => required2(env, names).length === 0,
2229
2832
  async run({ env, client }) {
2230
- requireEnv(env, names);
2833
+ requireEnv2(env, names);
2231
2834
  const api = adapter(client);
2232
2835
  const name = env.DBX_TEST_EVAL_SERVING_ENDPOINT;
2233
2836
  const endpoint = await api.servingEndpoint(name);
@@ -2267,7 +2870,7 @@ function vectorSearchCheck() {
2267
2870
  description: "Vector Search endpoint and index are online",
2268
2871
  configured: (env) => required2(env, names).length === 0,
2269
2872
  async run({ env, client }) {
2270
- requireEnv(env, names);
2873
+ requireEnv2(env, names);
2271
2874
  const api = adapter(client);
2272
2875
  const endpoint = await api.vectorSearchEndpoint(env.DBX_TEST_VECTOR_ENDPOINT);
2273
2876
  assertReady("Vector Search endpoint", endpoint.endpoint_status?.state, ["ONLINE", "READY"]);
@@ -2294,7 +2897,7 @@ function ragAgentCheck() {
2294
2897
  description: "RAG retrieval and agent serving endpoint return non-empty responses",
2295
2898
  configured: (env) => required2(env, names).length === 0,
2296
2899
  async run({ env, client }) {
2297
- requireEnv(env, names);
2900
+ requireEnv2(env, names);
2298
2901
  const api = adapter(client);
2299
2902
  let retrieval;
2300
2903
  if (env.DBX_TEST_VECTOR_QUERY_JSON) {
@@ -2338,13 +2941,13 @@ function federationSharingCleanRoomsCheck() {
2338
2941
  id: "federation-sharing-cleanrooms",
2339
2942
  description: "Lakehouse Federation connection, Delta Share and Clean Room are accessible",
2340
2943
  configured: (env) => required2(env, names).length === 0,
2341
- async run({ env, client, warehouse: warehouse2 }) {
2342
- requireEnv(env, names);
2944
+ async run({ env, client, warehouse: warehouse3 }) {
2945
+ requireEnv2(env, names);
2343
2946
  const api = adapter(client);
2344
2947
  const connection = await api.connection(env.DBX_TEST_CONNECTION);
2345
2948
  const share = await api.share(env.DBX_TEST_SHARE);
2346
2949
  const room = await api.cleanRoom(env.DBX_TEST_CLEAN_ROOM);
2347
- await booleanSql("Federated query", env.DBX_TEST_FEDERATION_ASSERTION_SQL, warehouse2.query);
2950
+ await booleanSql("Federated query", env.DBX_TEST_FEDERATION_ASSERTION_SQL, warehouse3.query);
2348
2951
  return {
2349
2952
  connection: connection.name ?? env.DBX_TEST_CONNECTION,
2350
2953
  share: share.name ?? env.DBX_TEST_SHARE,
@@ -2363,8 +2966,8 @@ function securityPostureCostCheck() {
2363
2966
  id: "security-cost",
2364
2967
  description: "Network access controls, compute policy and cost guardrail are enforced",
2365
2968
  configured: (env) => required2(env, names).length === 0,
2366
- async run({ env, client, warehouse: warehouse2 }) {
2367
- requireEnv(env, names);
2969
+ async run({ env, client, warehouse: warehouse3 }) {
2970
+ requireEnv2(env, names);
2368
2971
  const api = adapter(client);
2369
2972
  const access = await api.ipAccessList(env.DBX_TEST_IP_ACCESS_LIST_ID);
2370
2973
  if (access.enabled === false) throw new Error("Configured IP access list is disabled");
@@ -2374,7 +2977,7 @@ function securityPostureCostCheck() {
2374
2977
  if (env.DBX_TEST_EXPECT_HOST_SUFFIX && !env.DATABRICKS_HOST?.endsWith(env.DBX_TEST_EXPECT_HOST_SUFFIX)) {
2375
2978
  throw new Error(`Workspace host does not end with ${env.DBX_TEST_EXPECT_HOST_SUFFIX}`);
2376
2979
  }
2377
- await booleanSql("Cost guardrail", env.DBX_TEST_COST_ASSERTION_SQL, warehouse2.query);
2980
+ await booleanSql("Cost guardrail", env.DBX_TEST_COST_ASSERTION_SQL, warehouse3.query);
2378
2981
  return {
2379
2982
  ipAccessList: access.list_id ?? env.DBX_TEST_IP_ACCESS_LIST_ID,
2380
2983
  policy: policy.policy_id ?? policy.name,
@@ -2383,6 +2986,201 @@ function securityPostureCostCheck() {
2383
2986
  }
2384
2987
  };
2385
2988
  }
2989
+ function mlflow3GenAiQualityCheck() {
2990
+ const names = [
2991
+ "DBX_TEST_MLFLOW3_JOB_ID",
2992
+ "DBX_TEST_MLFLOW3_TRACE_ASSERTION_SQL",
2993
+ "DBX_TEST_MLFLOW3_EVAL_ASSERTION_SQL",
2994
+ "DBX_TEST_MLFLOW3_SCORER_ASSERTION_SQL",
2995
+ "DBX_TEST_MLFLOW3_MONITOR_ASSERTION_SQL",
2996
+ "DBX_TEST_AI_SEARCH_EVAL_ASSERTION_SQL"
2997
+ ];
2998
+ return {
2999
+ id: "mlflow3-genai-quality",
3000
+ description: "MLflow 3 tracing, offline agent evaluation and production scorer monitoring produce durable evidence",
3001
+ configured: (env) => required2(env, names).length === 0,
3002
+ async run({ env, client, warehouse: warehouse3 }) {
3003
+ requireEnv2(env, names);
3004
+ const job = await runCertificationJob(
3005
+ "MLflow 3 GenAI",
3006
+ env.DBX_TEST_MLFLOW3_JOB_ID,
3007
+ env,
3008
+ client,
3009
+ { timeoutMs: Number(env.DBX_TEST_MLFLOW3_TIMEOUT_MS ?? 72e5) }
3010
+ );
3011
+ await booleanSql("MLflow 3 trace", env.DBX_TEST_MLFLOW3_TRACE_ASSERTION_SQL, warehouse3.query);
3012
+ await booleanSql(
3013
+ "MLflow 3 offline evaluation",
3014
+ env.DBX_TEST_MLFLOW3_EVAL_ASSERTION_SQL,
3015
+ warehouse3.query
3016
+ );
3017
+ await booleanSql(
3018
+ "MLflow 3 production scorer lifecycle",
3019
+ env.DBX_TEST_MLFLOW3_SCORER_ASSERTION_SQL,
3020
+ warehouse3.query
3021
+ );
3022
+ await booleanSql(
3023
+ "MLflow 3 production monitoring",
3024
+ env.DBX_TEST_MLFLOW3_MONITOR_ASSERTION_SQL,
3025
+ warehouse3.query
3026
+ );
3027
+ await booleanSql(
3028
+ "AI Search retrieval quality",
3029
+ env.DBX_TEST_AI_SEARCH_EVAL_ASSERTION_SQL,
3030
+ warehouse3.query
3031
+ );
3032
+ return {
3033
+ ...job,
3034
+ traces: true,
3035
+ offlineEvaluation: true,
3036
+ scorerLifecycle: true,
3037
+ monitor: true,
3038
+ aiSearchEvaluation: true
3039
+ };
3040
+ }
3041
+ };
3042
+ }
3043
+ function agentEvaluationPipelineCheck() {
3044
+ const names = ["DBX_TEST_AGENT_EVAL_E2E_JOB_ID", "DBX_TEST_AGENT_EVAL_ASSERTION_SQL"];
3045
+ return {
3046
+ id: "agent-evaluation-pipeline",
3047
+ description: "Experiments API, outbox, Temporal worker, Model Serving judge, SQL score sink and Quality completion execute end to end",
3048
+ configured: (env) => required2(env, names).length === 0,
3049
+ async run({ env, client, warehouse: warehouse3 }) {
3050
+ requireEnv2(env, names);
3051
+ const job = await runCertificationJob(
3052
+ "Agent evaluation end-to-end",
3053
+ env.DBX_TEST_AGENT_EVAL_E2E_JOB_ID,
3054
+ env,
3055
+ client
3056
+ );
3057
+ await booleanSql(
3058
+ "Agent evaluation terminal Quality evidence",
3059
+ env.DBX_TEST_AGENT_EVAL_ASSERTION_SQL,
3060
+ warehouse3.query
3061
+ );
3062
+ return { ...job, api: true, outbox: true, temporal: true, judged: true, persisted: true };
3063
+ }
3064
+ };
3065
+ }
3066
+ function managedMcpAgentsCheck() {
3067
+ const names = [
3068
+ "DBX_TEST_MCP_JOB_ID",
3069
+ "DBX_TEST_MCP_MANAGED_ASSERTION_SQL",
3070
+ "DBX_TEST_MCP_SERVICE_ASSERTION_SQL",
3071
+ "DBX_TEST_MCP_DENY_ASSERTION_SQL"
3072
+ ];
3073
+ return {
3074
+ id: "managed-mcp-agents",
3075
+ description: "Managed MCP and Unity Catalog MCP Services support list, call and deny behavior",
3076
+ configured: (env) => required2(env, names).length === 0,
3077
+ async run({ env, client, warehouse: warehouse3 }) {
3078
+ requireEnv2(env, names);
3079
+ const job = await runCertificationJob("Databricks MCP", env.DBX_TEST_MCP_JOB_ID, env, client);
3080
+ await booleanSql(
3081
+ "Managed MCP list/call",
3082
+ env.DBX_TEST_MCP_MANAGED_ASSERTION_SQL,
3083
+ warehouse3.query
3084
+ );
3085
+ await booleanSql(
3086
+ "Unity Catalog MCP Service list/call",
3087
+ env.DBX_TEST_MCP_SERVICE_ASSERTION_SQL,
3088
+ warehouse3.query
3089
+ );
3090
+ await booleanSql(
3091
+ "MCP excluded-tool denial",
3092
+ env.DBX_TEST_MCP_DENY_ASSERTION_SQL,
3093
+ warehouse3.query
3094
+ );
3095
+ return { ...job, managedServer: true, mcpService: true, denyControl: true };
3096
+ }
3097
+ };
3098
+ }
3099
+ function dataQualityAppTelemetryCheck() {
3100
+ const names = [
3101
+ "DBX_TEST_TELEMETRY_APP_NAME",
3102
+ "DBX_TEST_DQM_ASSERTION_SQL",
3103
+ "DBX_TEST_APP_LOGS_ASSERTION_SQL",
3104
+ "DBX_TEST_APP_SPANS_ASSERTION_SQL",
3105
+ "DBX_TEST_APP_METRICS_ASSERTION_SQL"
3106
+ ];
3107
+ return {
3108
+ id: "data-quality-app-telemetry",
3109
+ description: "Unity Catalog data quality monitoring and Databricks Apps logs, spans and metrics are current",
3110
+ configured: (env) => required2(env, names).length === 0,
3111
+ async run({ env, client, warehouse: warehouse3 }) {
3112
+ requireEnv2(env, names);
3113
+ const appName = env.DBX_TEST_TELEMETRY_APP_NAME;
3114
+ const app = await adapter(client).app(appName);
3115
+ const destinations = Array.isArray(app.telemetry_export_destinations) ? app.telemetry_export_destinations : [];
3116
+ const unityCatalog = destinations.find(
3117
+ (destination) => isObject(destination) && isObject(destination.unity_catalog)
3118
+ );
3119
+ if (!isObject(unityCatalog) || !isObject(unityCatalog.unity_catalog)) {
3120
+ throw new Error(`Databricks App ${appName} has no Unity Catalog telemetry destination`);
3121
+ }
3122
+ const tables = unityCatalog.unity_catalog;
3123
+ for (const field of ["logs_table", "traces_table", "metrics_table"]) {
3124
+ if (typeof tables[field] !== "string" || !tables[field]) {
3125
+ throw new Error(`Databricks App ${appName} telemetry destination has no ${field}`);
3126
+ }
3127
+ }
3128
+ await booleanSql("Data Quality Monitoring", env.DBX_TEST_DQM_ASSERTION_SQL, warehouse3.query);
3129
+ await booleanSql("App logs", env.DBX_TEST_APP_LOGS_ASSERTION_SQL, warehouse3.query);
3130
+ await booleanSql("App spans", env.DBX_TEST_APP_SPANS_ASSERTION_SQL, warehouse3.query);
3131
+ await booleanSql("App metrics", env.DBX_TEST_APP_METRICS_ASSERTION_SQL, warehouse3.query);
3132
+ return { app: appName, unityCatalogTelemetry: true, dataQualityMonitoring: true };
3133
+ }
3134
+ };
3135
+ }
3136
+ function agentServicesEnrollmentCheck() {
3137
+ const names = [
3138
+ "DBX_TEST_AGENT_SERVICE_FULL_NAME",
3139
+ "DBX_TEST_AGENT_SERVICE_CONNECTION",
3140
+ "DBX_TEST_AGENT_SERVICE_EXECUTE_PRINCIPAL"
3141
+ ];
3142
+ return {
3143
+ id: "agent-services-enrollment",
3144
+ description: "A customer-owned Harness agent is registered as an external Unity Catalog Agent Service with governed access",
3145
+ configured: (env) => required2(env, names).length === 0,
3146
+ async run({ env, client }) {
3147
+ requireEnv2(env, names);
3148
+ const fullName = env.DBX_TEST_AGENT_SERVICE_FULL_NAME;
3149
+ const api = adapter(client);
3150
+ const service = await api.agentService(fullName);
3151
+ if (service.agent_service_type !== "AGENT_SERVICE_TYPE_EXTERNAL") {
3152
+ throw new Error(`${fullName} is not an external Agent Service`);
3153
+ }
3154
+ const expectedConnection = env.DBX_TEST_AGENT_SERVICE_CONNECTION;
3155
+ const actualConnection = service.config?.connection?.name ?? "";
3156
+ if (actualConnection !== expectedConnection && actualConnection.split("/").at(-1) !== expectedConnection) {
3157
+ throw new Error(`${fullName} uses unexpected connection ${actualConnection || "UNKNOWN"}`);
3158
+ }
3159
+ if (!service.config?.base_path?.startsWith("/")) {
3160
+ throw new Error(`${fullName} has no absolute external base path`);
3161
+ }
3162
+ const permissions = await api.agentServicePermissions(fullName);
3163
+ const assignments = Array.isArray(permissions.privilege_assignments) ? permissions.privilege_assignments : [];
3164
+ const expectedPrincipal = env.DBX_TEST_AGENT_SERVICE_EXECUTE_PRINCIPAL;
3165
+ const assignment = assignments.find(
3166
+ (entry) => isObject(entry) && entry.principal === expectedPrincipal
3167
+ );
3168
+ const privileges = isObject(assignment) && Array.isArray(assignment.privileges) ? assignment.privileges : [];
3169
+ const canExecute = privileges.some(
3170
+ (privilege) => isObject(privilege) && privilege.privilege === "EXECUTE"
3171
+ );
3172
+ if (!canExecute) {
3173
+ throw new Error(`${expectedPrincipal} does not have EXECUTE on ${fullName}`);
3174
+ }
3175
+ return {
3176
+ fullName: service.full_name ?? service.name ?? fullName,
3177
+ connection: actualConnection,
3178
+ executePrincipal: expectedPrincipal,
3179
+ runtimeInvocationAvailable: false
3180
+ };
3181
+ }
3182
+ };
3183
+ }
2386
3184
  function regionalDrCheck(options = {}) {
2387
3185
  const names = [
2388
3186
  "DBX_TEST_DR_HOST",
@@ -2394,7 +3192,7 @@ function regionalDrCheck(options = {}) {
2394
3192
  description: "Secondary-region workspace authentication and SQL warehouse are reachable",
2395
3193
  configured: (env) => required2(env, names).length === 0,
2396
3194
  async run({ env }) {
2397
- requireEnv(env, names);
3195
+ requireEnv2(env, names);
2398
3196
  const drEnv = {
2399
3197
  ...env,
2400
3198
  DATABRICKS_HOST: env.DBX_TEST_DR_HOST,
@@ -2424,14 +3222,14 @@ function regionalDrCheck(options = {}) {
2424
3222
  }
2425
3223
 
2426
3224
  // src/advanced-target-packs.ts
2427
- var DOCS2 = "https://experiments.fabric.pro/docs/testing/target-packs/";
2428
- var AZURE_M2M_SCOPE = "Azure Databricks, dedicated service principal using OAuth M2M, public network path; named managed or disposable certification fixtures";
2429
- var workspace = {
3225
+ var DOCS3 = "https://experiments.fabric.pro/docs/testing/target-packs/";
3226
+ var AZURE_M2M_SCOPE2 = "Azure Databricks, dedicated service principal using OAuth M2M, public network path; named managed or disposable certification fixtures";
3227
+ var workspace2 = {
2430
3228
  id: "workspace",
2431
3229
  description: "Databricks workspace host",
2432
3230
  anyOf: ["DATABRICKS_HOST"]
2433
3231
  };
2434
- var auth = {
3232
+ var auth2 = {
2435
3233
  id: "authentication",
2436
3234
  description: "Databricks OAuth, OIDC, bearer, or PAT authentication",
2437
3235
  anyOf: [
@@ -2443,12 +3241,12 @@ var auth = {
2443
3241
  ],
2444
3242
  secret: true
2445
3243
  };
2446
- var warehouse = {
3244
+ var warehouse2 = {
2447
3245
  id: "warehouse",
2448
3246
  description: "SQL warehouse for data-plane assertions",
2449
3247
  anyOf: ["DATABRICKS_WAREHOUSE_ID", "DATABRICKS_HTTP_PATH"]
2450
3248
  };
2451
- var requirement = (id, description, ...anyOf) => ({
3249
+ var requirement2 = (id, description, ...anyOf) => ({
2452
3250
  id,
2453
3251
  description,
2454
3252
  anyOf
@@ -2467,33 +3265,33 @@ function createAdvancedStreamingTargetPack() {
2467
3265
  "lakeflow-connect.replication"
2468
3266
  ],
2469
3267
  checks: () => [restrictedPrincipalCheck(), advancedStreamingCdcCheck(), lakeflowConnectCheck()],
2470
- requiredChecks: ["streaming-cdc", "lakeflow-connect"],
3268
+ requiredChecks: ["restricted-principal", "streaming-cdc", "lakeflow-connect"],
2471
3269
  requirements: [
2472
- workspace,
2473
- auth,
2474
- warehouse,
2475
- requirement("streaming-pipeline", "Streaming pipeline ID", "DBX_TEST_STREAMING_PIPELINE_ID"),
2476
- requirement("streaming-table", "Streaming target table", "DBX_TEST_STREAMING_TABLE"),
2477
- requirement(
3270
+ workspace2,
3271
+ auth2,
3272
+ warehouse2,
3273
+ requirement2("streaming-pipeline", "Streaming pipeline ID", "DBX_TEST_STREAMING_PIPELINE_ID"),
3274
+ requirement2("streaming-table", "Streaming target table", "DBX_TEST_STREAMING_TABLE"),
3275
+ requirement2(
2478
3276
  "connect-pipeline",
2479
3277
  "Lakeflow Connect ingestion pipeline",
2480
3278
  "DBX_TEST_CONNECT_PIPELINE_ID"
2481
3279
  ),
2482
- requirement(
3280
+ requirement2(
2483
3281
  "streaming-assertion",
2484
3282
  "Streaming freshness SQL",
2485
3283
  "DBX_TEST_STREAMING_ASSERTION_SQL"
2486
3284
  ),
2487
- requirement("cdc-assertion", "CDC correctness SQL", "DBX_TEST_CDC_ASSERTION_SQL"),
2488
- requirement(
3285
+ requirement2("cdc-assertion", "CDC correctness SQL", "DBX_TEST_CDC_ASSERTION_SQL"),
3286
+ requirement2(
2489
3287
  "connect-assertion",
2490
3288
  "Lakeflow Connect replication SQL",
2491
3289
  "DBX_TEST_CONNECT_ASSERTION_SQL"
2492
3290
  )
2493
3291
  ],
2494
- docsUrl: `${DOCS2}#advanced-streaming-cdc-and-lakeflow-connect`,
3292
+ docsUrl: `${DOCS3}#advanced-streaming-cdc-and-lakeflow-connect`,
2495
3293
  certificationScopes: [
2496
- `${AZURE_M2M_SCOPE}; serverless Lakeflow pipeline AUTO CDC and query-based PostgreSQL foreign-catalog ingestion`
3294
+ `${AZURE_M2M_SCOPE2}; serverless Lakeflow pipeline AUTO CDC and query-based PostgreSQL foreign-catalog ingestion`
2497
3295
  ]
2498
3296
  });
2499
3297
  }
@@ -2506,21 +3304,21 @@ function createAiBiGenieTargetPack() {
2506
3304
  maturity: "live-gated",
2507
3305
  capabilities: ["aibi.dashboard", "genie.space", "genie.conversation"],
2508
3306
  checks: () => [restrictedPrincipalCheck(), aiBiDashboardCheck(), genieCheck()],
2509
- requiredChecks: ["aibi-dashboard", "genie"],
3307
+ requiredChecks: ["restricted-principal", "aibi-dashboard", "genie"],
2510
3308
  requirements: [
2511
- workspace,
2512
- auth,
2513
- requirement("dashboard", "AI/BI dashboard ID", "DBX_TEST_DASHBOARD_ID"),
2514
- requirement("genie-space", "Genie space ID", "DBX_TEST_GENIE_SPACE_ID"),
2515
- requirement(
3309
+ workspace2,
3310
+ auth2,
3311
+ requirement2("dashboard", "AI/BI dashboard ID", "DBX_TEST_DASHBOARD_ID"),
3312
+ requirement2("genie-space", "Genie space ID", "DBX_TEST_GENIE_SPACE_ID"),
3313
+ requirement2(
2516
3314
  "genie-question",
2517
3315
  "Grounded Genie certification question",
2518
3316
  "DBX_TEST_GENIE_QUESTION"
2519
3317
  )
2520
3318
  ],
2521
- docsUrl: `${DOCS2}#aibi-dashboards-and-genie`,
3319
+ docsUrl: `${DOCS3}#aibi-dashboards-and-genie`,
2522
3320
  certificationScopes: [
2523
- `${AZURE_M2M_SCOPE}; published AI/BI dashboard revision and Genie conversation start`
3321
+ `${AZURE_M2M_SCOPE2}; published AI/BI dashboard revision and Genie conversation start`
2524
3322
  ]
2525
3323
  });
2526
3324
  }
@@ -2538,21 +3336,21 @@ function createMlflowLifecycleTargetPack() {
2538
3336
  "models.lifecycle"
2539
3337
  ],
2540
3338
  checks: () => [restrictedPrincipalCheck(), mlflowLifecycleCheck()],
2541
- requiredChecks: ["mlflow-lifecycle"],
3339
+ requiredChecks: ["restricted-principal", "mlflow-lifecycle"],
2542
3340
  requirements: [
2543
- workspace,
2544
- auth,
2545
- requirement("experiment", "MLflow experiment ID", "DBX_TEST_MLFLOW_EXPERIMENT_ID"),
2546
- requirement(
3341
+ workspace2,
3342
+ auth2,
3343
+ requirement2("experiment", "MLflow experiment ID", "DBX_TEST_MLFLOW_EXPERIMENT_ID"),
3344
+ requirement2(
2547
3345
  "registered-model",
2548
3346
  "Unity Catalog registered model",
2549
3347
  "DBX_TEST_REGISTERED_MODEL"
2550
3348
  ),
2551
- requirement("model-version", "Registered model version", "DBX_TEST_MODEL_VERSION")
3349
+ requirement2("model-version", "Registered model version", "DBX_TEST_MODEL_VERSION")
2552
3350
  ],
2553
- docsUrl: `${DOCS2}#mlflow-and-model-lifecycle`,
3351
+ docsUrl: `${DOCS3}#mlflow-and-model-lifecycle`,
2554
3352
  certificationScopes: [
2555
- `${AZURE_M2M_SCOPE}; MLflow experiment and configured Unity Catalog model version`
3353
+ `${AZURE_M2M_SCOPE2}; MLflow experiment and configured Unity Catalog model version`
2556
3354
  ]
2557
3355
  });
2558
3356
  }
@@ -2570,27 +3368,27 @@ function createFeatureEngineeringTargetPack() {
2570
3368
  "features.serving"
2571
3369
  ],
2572
3370
  checks: () => [restrictedPrincipalCheck(), featureEngineeringServingCheck()],
2573
- requiredChecks: ["feature-engineering"],
3371
+ requiredChecks: ["restricted-principal", "feature-engineering"],
2574
3372
  requirements: [
2575
- workspace,
2576
- auth,
2577
- warehouse,
2578
- requirement("feature-table", "Unity Catalog feature table", "DBX_TEST_FEATURE_TABLE"),
2579
- requirement(
3373
+ workspace2,
3374
+ auth2,
3375
+ warehouse2,
3376
+ requirement2("feature-table", "Unity Catalog feature table", "DBX_TEST_FEATURE_TABLE"),
3377
+ requirement2(
2580
3378
  "online-materialization",
2581
3379
  "Databricks Online Table or Synced Table pipeline",
2582
3380
  "DBX_TEST_ONLINE_TABLE",
2583
3381
  "DBX_TEST_FEATURE_SERVING_PIPELINE_ID"
2584
3382
  ),
2585
- requirement(
3383
+ requirement2(
2586
3384
  "feature-assertion",
2587
3385
  "Feature freshness/correctness SQL",
2588
3386
  "DBX_TEST_FEATURE_ASSERTION_SQL"
2589
3387
  )
2590
3388
  ],
2591
- docsUrl: `${DOCS2}#feature-engineering-and-serving`,
3389
+ docsUrl: `${DOCS3}#feature-engineering-and-serving`,
2592
3390
  certificationScopes: [
2593
- `${AZURE_M2M_SCOPE}; Delta feature table, PostgreSQL-backed Synced Table, and SQL freshness`
3391
+ `${AZURE_M2M_SCOPE2}; Delta feature table, PostgreSQL-backed Synced Table, and SQL freshness`
2594
3392
  ]
2595
3393
  });
2596
3394
  }
@@ -2607,25 +3405,25 @@ function createModelServingTargetPack() {
2607
3405
  "ai-gateway.configuration"
2608
3406
  ],
2609
3407
  checks: () => [restrictedPrincipalCheck(), modelServingCheck()],
2610
- requiredChecks: ["model-serving"],
3408
+ requiredChecks: ["restricted-principal", "model-serving"],
2611
3409
  requirements: [
2612
- workspace,
2613
- auth,
2614
- requirement("serving-endpoint", "Model Serving endpoint name", "DBX_TEST_SERVING_ENDPOINT"),
2615
- requirement(
3410
+ workspace2,
3411
+ auth2,
3412
+ requirement2("serving-endpoint", "Model Serving endpoint name", "DBX_TEST_SERVING_ENDPOINT"),
3413
+ requirement2(
2616
3414
  "serving-request",
2617
3415
  "Safe inference request JSON",
2618
3416
  "DBX_TEST_SERVING_REQUEST_JSON"
2619
3417
  ),
2620
- requirement(
3418
+ requirement2(
2621
3419
  "ai-gateway",
2622
3420
  "AI Gateway enforcement flag set to 1",
2623
3421
  "DBX_TEST_AI_GATEWAY_REQUIRED"
2624
3422
  )
2625
3423
  ],
2626
- docsUrl: `${DOCS2}#model-serving-and-ai-gateway`,
3424
+ docsUrl: `${DOCS3}#model-serving-and-ai-gateway`,
2627
3425
  certificationScopes: [
2628
- `${AZURE_M2M_SCOPE}; custom-model inference and AI Gateway inference-table configuration`
3426
+ `${AZURE_M2M_SCOPE2}; custom-model inference and AI Gateway inference-table configuration`
2629
3427
  ]
2630
3428
  });
2631
3429
  }
@@ -2643,19 +3441,19 @@ function createVectorRagAgentsTargetPack() {
2643
3441
  "agents.serving"
2644
3442
  ],
2645
3443
  checks: () => [restrictedPrincipalCheck(), vectorSearchCheck(), ragAgentCheck()],
2646
- requiredChecks: ["vector-search", "rag-agent"],
3444
+ requiredChecks: ["restricted-principal", "vector-search", "rag-agent"],
2647
3445
  requirements: [
2648
- workspace,
2649
- auth,
2650
- requirement("vector-endpoint", "Vector Search endpoint", "DBX_TEST_VECTOR_ENDPOINT"),
2651
- requirement("vector-index", "Vector Search index", "DBX_TEST_VECTOR_INDEX"),
2652
- requirement("vector-query", "Vector retrieval request JSON", "DBX_TEST_VECTOR_QUERY_JSON"),
2653
- requirement("agent-endpoint", "Agent serving endpoint", "DBX_TEST_AGENT_ENDPOINT"),
2654
- requirement("agent-request", "Safe agent request JSON", "DBX_TEST_AGENT_REQUEST_JSON")
3446
+ workspace2,
3447
+ auth2,
3448
+ requirement2("vector-endpoint", "Vector Search endpoint", "DBX_TEST_VECTOR_ENDPOINT"),
3449
+ requirement2("vector-index", "Vector Search index", "DBX_TEST_VECTOR_INDEX"),
3450
+ requirement2("vector-query", "Vector retrieval request JSON", "DBX_TEST_VECTOR_QUERY_JSON"),
3451
+ requirement2("agent-endpoint", "Agent serving endpoint", "DBX_TEST_AGENT_ENDPOINT"),
3452
+ requirement2("agent-request", "Safe agent request JSON", "DBX_TEST_AGENT_REQUEST_JSON")
2655
3453
  ],
2656
- docsUrl: `${DOCS2}#vector-search-rag-and-agents`,
3454
+ docsUrl: `${DOCS3}#vector-search-rag-and-agents`,
2657
3455
  certificationScopes: [
2658
- `${AZURE_M2M_SCOPE}; Delta Sync vector retrieval and custom PyFunc agent invocation`
3456
+ `${AZURE_M2M_SCOPE2}; Delta Sync vector retrieval and custom PyFunc agent invocation`
2659
3457
  ]
2660
3458
  });
2661
3459
  }
@@ -2673,23 +3471,23 @@ function createFederationSharingTargetPack() {
2673
3471
  "clean-rooms.access"
2674
3472
  ],
2675
3473
  checks: () => [restrictedPrincipalCheck(), federationSharingCleanRoomsCheck()],
2676
- requiredChecks: ["federation-sharing-cleanrooms"],
3474
+ requiredChecks: ["restricted-principal", "federation-sharing-cleanrooms"],
2677
3475
  requirements: [
2678
- workspace,
2679
- auth,
2680
- warehouse,
2681
- requirement("connection", "Lakehouse Federation connection", "DBX_TEST_CONNECTION"),
2682
- requirement("share", "Delta Sharing share", "DBX_TEST_SHARE"),
2683
- requirement("clean-room", "Clean Room name", "DBX_TEST_CLEAN_ROOM"),
2684
- requirement(
3476
+ workspace2,
3477
+ auth2,
3478
+ warehouse2,
3479
+ requirement2("connection", "Lakehouse Federation connection", "DBX_TEST_CONNECTION"),
3480
+ requirement2("share", "Delta Sharing share", "DBX_TEST_SHARE"),
3481
+ requirement2("clean-room", "Clean Room name", "DBX_TEST_CLEAN_ROOM"),
3482
+ requirement2(
2685
3483
  "federation-assertion",
2686
3484
  "Federated data-plane SQL",
2687
3485
  "DBX_TEST_FEDERATION_ASSERTION_SQL"
2688
3486
  )
2689
3487
  ],
2690
- docsUrl: `${DOCS2}#federation-delta-sharing-and-clean-rooms`,
3488
+ docsUrl: `${DOCS3}#federation-delta-sharing-and-clean-rooms`,
2691
3489
  certificationScopes: [
2692
- `${AZURE_M2M_SCOPE}; managed PostgreSQL federation, Delta Sharing table, and two-metastore Clean Room`
3490
+ `${AZURE_M2M_SCOPE2}; managed PostgreSQL federation, Delta Sharing table, and two-metastore Clean Room`
2693
3491
  ]
2694
3492
  });
2695
3493
  }
@@ -2707,25 +3505,253 @@ function createSecurityCostDrTargetPack() {
2707
3505
  "dr.secondary-region"
2708
3506
  ],
2709
3507
  checks: () => [restrictedPrincipalCheck(), securityPostureCostCheck(), regionalDrCheck()],
2710
- requiredChecks: ["security-cost", "regional-dr"],
3508
+ requiredChecks: ["restricted-principal", "security-cost", "regional-dr"],
2711
3509
  requirements: [
2712
- workspace,
2713
- auth,
2714
- warehouse,
2715
- requirement(
3510
+ workspace2,
3511
+ auth2,
3512
+ warehouse2,
3513
+ requirement2(
2716
3514
  "ip-access-list",
2717
3515
  "Enabled workspace IP access list",
2718
3516
  "DBX_TEST_IP_ACCESS_LIST_ID"
2719
3517
  ),
2720
- requirement("cluster-policy", "Compute policy ID", "DBX_TEST_CLUSTER_POLICY_ID"),
2721
- requirement("cost-assertion", "Boolean SQL cost guardrail", "DBX_TEST_COST_ASSERTION_SQL"),
2722
- requirement("dr-workspace", "Secondary workspace host", "DBX_TEST_DR_HOST"),
2723
- requirement("dr-warehouse", "Running secondary-region warehouse", "DBX_TEST_DR_WAREHOUSE_ID"),
2724
- requirement("dr-assertion", "Secondary-region workload SQL", "DBX_TEST_DR_ASSERTION_SQL")
3518
+ requirement2("cluster-policy", "Compute policy ID", "DBX_TEST_CLUSTER_POLICY_ID"),
3519
+ requirement2("cost-assertion", "Boolean SQL cost guardrail", "DBX_TEST_COST_ASSERTION_SQL"),
3520
+ requirement2("dr-workspace", "Secondary workspace host", "DBX_TEST_DR_HOST"),
3521
+ requirement2("dr-warehouse", "Running secondary-region warehouse", "DBX_TEST_DR_WAREHOUSE_ID"),
3522
+ requirement2("dr-assertion", "Secondary-region workload SQL", "DBX_TEST_DR_ASSERTION_SQL")
3523
+ ],
3524
+ docsUrl: `${DOCS3}#networking-security-cost-and-regional-dr`,
3525
+ certificationScopes: [
3526
+ `${AZURE_M2M_SCOPE2}; TEST-NET block list, bounded compute policy, billing system-table guardrail, and West US 3 serverless DR warehouse`
3527
+ ]
3528
+ });
3529
+ }
3530
+ function createMlflow3AgentQualityTargetPack() {
3531
+ return defineTargetPack({
3532
+ id: "mlflow3-agent-quality",
3533
+ name: "MLflow 3 agent quality and monitoring",
3534
+ description: "Native MLflow 3 traces, offline agent evaluation, production scorer lifecycle and online monitoring.",
3535
+ version: "1.0.0",
3536
+ maturity: "shipped",
3537
+ capabilities: [
3538
+ "mlflow3.tracing",
3539
+ "mlflow3.agent-evaluation",
3540
+ "mlflow3.production-scorers",
3541
+ "mlflow3.production-monitoring",
3542
+ "ai-search.retrieval-evaluation"
3543
+ ],
3544
+ checks: () => [restrictedPrincipalCheck(), mlflow3GenAiQualityCheck()],
3545
+ requiredChecks: ["restricted-principal", "mlflow3-genai-quality"],
3546
+ requirements: [
3547
+ workspace2,
3548
+ auth2,
3549
+ warehouse2,
3550
+ requirement2("mlflow3-job", "Native MLflow 3 certification Job", "DBX_TEST_MLFLOW3_JOB_ID"),
3551
+ requirement2(
3552
+ "mlflow3-traces",
3553
+ "Boolean SQL proving a fresh MLflow 3 trace",
3554
+ "DBX_TEST_MLFLOW3_TRACE_ASSERTION_SQL"
3555
+ ),
3556
+ requirement2(
3557
+ "mlflow3-evaluation",
3558
+ "Boolean SQL proving offline agent evaluation results",
3559
+ "DBX_TEST_MLFLOW3_EVAL_ASSERTION_SQL"
3560
+ ),
3561
+ requirement2(
3562
+ "mlflow3-scorers",
3563
+ "Boolean SQL proving production scorer lifecycle evidence",
3564
+ "DBX_TEST_MLFLOW3_SCORER_ASSERTION_SQL"
3565
+ ),
3566
+ requirement2(
3567
+ "mlflow3-monitoring",
3568
+ "Boolean SQL proving production monitoring output",
3569
+ "DBX_TEST_MLFLOW3_MONITOR_ASSERTION_SQL"
3570
+ ),
3571
+ requirement2(
3572
+ "ai-search-evaluation",
3573
+ "Boolean SQL proving AI Search retrieval-quality thresholds",
3574
+ "DBX_TEST_AI_SEARCH_EVAL_ASSERTION_SQL"
3575
+ )
3576
+ ],
3577
+ docsUrl: `${DOCS3}#mlflow-3-agent-quality-and-monitoring`,
3578
+ certificationScopes: [
3579
+ `${AZURE_M2M_SCOPE2}; Python-native MLflow 3 trace, evaluation, complete scorer lifecycle and monitor evidence`
3580
+ ]
3581
+ });
3582
+ }
3583
+ function createAgentEvaluationPipelineTargetPack() {
3584
+ return defineTargetPack({
3585
+ id: "agent-evaluation-pipeline",
3586
+ name: "Agent evaluation delivery pipeline",
3587
+ description: "Exact-candidate API submission, outbox dispatch, Temporal execution, Databricks judge inference, SQL score persistence and Quality completion.",
3588
+ version: "1.0.0",
3589
+ maturity: "live-gated",
3590
+ capabilities: [
3591
+ "agent-evals.api-submission",
3592
+ "agent-evals.temporal-dispatch",
3593
+ "agent-evals.model-serving-judge",
3594
+ "agent-evals.sql-persistence",
3595
+ "agent-evals.quality-evidence"
3596
+ ],
3597
+ checks: () => [
3598
+ restrictedPrincipalCheck(),
3599
+ evalJudgeModelServingCheck(),
3600
+ agentEvaluationPipelineCheck()
3601
+ ],
3602
+ requiredChecks: ["restricted-principal", "model-eval-judge", "agent-evaluation-pipeline"],
3603
+ requirements: [
3604
+ workspace2,
3605
+ auth2,
3606
+ warehouse2,
3607
+ requirement2(
3608
+ "eval-serving-endpoint",
3609
+ "Databricks Model Serving endpoint satisfying the evaluator chat contract",
3610
+ "DBX_TEST_EVAL_SERVING_ENDPOINT"
3611
+ ),
3612
+ requirement2(
3613
+ "agent-eval-job",
3614
+ "Exact-candidate end-to-end agent evaluation certification Job",
3615
+ "DBX_TEST_AGENT_EVAL_E2E_JOB_ID"
3616
+ ),
3617
+ requirement2(
3618
+ "agent-eval-evidence",
3619
+ "Boolean SQL proving terminal scores and Quality evidence",
3620
+ "DBX_TEST_AGENT_EVAL_ASSERTION_SQL"
3621
+ )
3622
+ ],
3623
+ docsUrl: `${DOCS3}#agent-evaluation-delivery-pipeline`,
3624
+ certificationScopes: [
3625
+ `${AZURE_M2M_SCOPE2}; Experiments API through customer worker and Databricks judge to SQL/Quality`
3626
+ ]
3627
+ });
3628
+ }
3629
+ function createManagedMcpAgentsTargetPack() {
3630
+ return defineTargetPack({
3631
+ id: "managed-mcp-agents",
3632
+ name: "Managed MCP and MCP Services",
3633
+ description: "Streamable HTTP tool discovery and calls for Databricks managed MCP servers and governed Unity Catalog MCP Services, including a deny control.",
3634
+ version: "1.0.0",
3635
+ maturity: "live-gated",
3636
+ capabilities: [
3637
+ "mcp.managed.list-call",
3638
+ "mcp.services.list-call",
3639
+ "mcp.unity-catalog-governance",
3640
+ "mcp.denial"
3641
+ ],
3642
+ checks: () => [restrictedPrincipalCheck(), managedMcpAgentsCheck()],
3643
+ requiredChecks: ["restricted-principal", "managed-mcp-agents"],
3644
+ requirements: [
3645
+ workspace2,
3646
+ auth2,
3647
+ warehouse2,
3648
+ requirement2("mcp-job", "Native Streamable HTTP MCP certification Job", "DBX_TEST_MCP_JOB_ID"),
3649
+ requirement2(
3650
+ "managed-mcp",
3651
+ "Boolean SQL proving managed MCP list/call behavior",
3652
+ "DBX_TEST_MCP_MANAGED_ASSERTION_SQL"
3653
+ ),
3654
+ requirement2(
3655
+ "mcp-service",
3656
+ "Boolean SQL proving UC MCP Service list/call behavior",
3657
+ "DBX_TEST_MCP_SERVICE_ASSERTION_SQL"
3658
+ ),
3659
+ requirement2(
3660
+ "mcp-denial",
3661
+ "Boolean SQL proving an MCP tool excluded by UC selectors was denied",
3662
+ "DBX_TEST_MCP_DENY_ASSERTION_SQL"
3663
+ )
3664
+ ],
3665
+ docsUrl: `${DOCS3}#managed-mcp-and-mcp-services`,
3666
+ certificationScopes: [
3667
+ `${AZURE_M2M_SCOPE2}; managed AI Search or SQL MCP plus a UC MCP Service over Streamable HTTP`
3668
+ ]
3669
+ });
3670
+ }
3671
+ function createDataQualityObservabilityTargetPack() {
3672
+ return defineTargetPack({
3673
+ id: "data-quality-observability",
3674
+ name: "Data quality and Databricks Apps observability",
3675
+ description: "Unity Catalog Data Quality Monitoring plus Databricks Apps OpenTelemetry logs, spans and metrics.",
3676
+ version: "1.0.0",
3677
+ maturity: "shipped",
3678
+ capabilities: [
3679
+ "data-quality.freshness-completeness",
3680
+ "apps.telemetry.logs",
3681
+ "apps.telemetry.traces",
3682
+ "apps.telemetry.metrics"
3683
+ ],
3684
+ checks: () => [restrictedPrincipalCheck(), dataQualityAppTelemetryCheck()],
3685
+ requiredChecks: ["restricted-principal", "data-quality-app-telemetry"],
3686
+ requirements: [
3687
+ workspace2,
3688
+ auth2,
3689
+ warehouse2,
3690
+ requirement2("telemetry-app", "App with UC telemetry export", "DBX_TEST_TELEMETRY_APP_NAME"),
3691
+ requirement2(
3692
+ "data-quality",
3693
+ "Boolean SQL over current Data Quality Monitoring results",
3694
+ "DBX_TEST_DQM_ASSERTION_SQL"
3695
+ ),
3696
+ requirement2(
3697
+ "app-logs",
3698
+ "Boolean SQL proving current app logs",
3699
+ "DBX_TEST_APP_LOGS_ASSERTION_SQL"
3700
+ ),
3701
+ requirement2(
3702
+ "app-spans",
3703
+ "Boolean SQL proving current app spans",
3704
+ "DBX_TEST_APP_SPANS_ASSERTION_SQL"
3705
+ ),
3706
+ requirement2(
3707
+ "app-metrics",
3708
+ "Boolean SQL proving current app metrics",
3709
+ "DBX_TEST_APP_METRICS_ASSERTION_SQL"
3710
+ )
3711
+ ],
3712
+ docsUrl: `${DOCS3}#data-quality-and-databricks-apps-observability`,
3713
+ certificationScopes: [
3714
+ `${AZURE_M2M_SCOPE2}; system.data_quality_monitoring.table_results and UC OTel tables`
3715
+ ]
3716
+ });
3717
+ }
3718
+ function createAgentServicesEnrollmentTargetPack() {
3719
+ return defineTargetPack({
3720
+ id: "agent-services-enrollment",
3721
+ name: "Unity Catalog Agent Services enrollment",
3722
+ description: "Customer-owned Fabric Harness agents registered as external Unity Catalog Agent Services with explicit EXECUTE grants.",
3723
+ version: "1.0.0",
3724
+ maturity: "shipped",
3725
+ capabilities: [
3726
+ "agent-services.external-registration",
3727
+ "agent-services.discovery",
3728
+ "agent-services.permissions",
3729
+ "harness.customer-worker-enrollment"
3730
+ ],
3731
+ checks: () => [restrictedPrincipalCheck(), agentServicesEnrollmentCheck()],
3732
+ requiredChecks: ["restricted-principal", "agent-services-enrollment"],
3733
+ requirements: [
3734
+ workspace2,
3735
+ auth2,
3736
+ requirement2(
3737
+ "agent-service",
3738
+ "External Unity Catalog Agent Service full name",
3739
+ "DBX_TEST_AGENT_SERVICE_FULL_NAME"
3740
+ ),
3741
+ requirement2(
3742
+ "agent-connection",
3743
+ "Expected Unity Catalog HTTP connection",
3744
+ "DBX_TEST_AGENT_SERVICE_CONNECTION"
3745
+ ),
3746
+ requirement2(
3747
+ "agent-execute-principal",
3748
+ "Principal expected to have EXECUTE",
3749
+ "DBX_TEST_AGENT_SERVICE_EXECUTE_PRINCIPAL"
3750
+ )
2725
3751
  ],
2726
- docsUrl: `${DOCS2}#networking-security-cost-and-regional-dr`,
3752
+ docsUrl: `${DOCS3}#unity-catalog-agent-services-enrollment`,
2727
3753
  certificationScopes: [
2728
- `${AZURE_M2M_SCOPE}; TEST-NET block list, bounded compute policy, billing system-table guardrail, and West US 3 serverless DR warehouse`
3754
+ `${AZURE_M2M_SCOPE2}; Agent Services Beta registration/discovery/ACL only; runtime invocation is not claimed`
2729
3755
  ]
2730
3756
  });
2731
3757
  }
@@ -2738,7 +3764,12 @@ function createAdvancedTargetPacks() {
2738
3764
  createModelServingTargetPack(),
2739
3765
  createVectorRagAgentsTargetPack(),
2740
3766
  createFederationSharingTargetPack(),
2741
- createSecurityCostDrTargetPack()
3767
+ createSecurityCostDrTargetPack(),
3768
+ createMlflow3AgentQualityTargetPack(),
3769
+ createManagedMcpAgentsTargetPack(),
3770
+ createDataQualityObservabilityTargetPack(),
3771
+ createAgentServicesEnrollmentTargetPack(),
3772
+ createAgentEvaluationPipelineTargetPack()
2742
3773
  ];
2743
3774
  }
2744
3775
 
@@ -2747,11 +3778,12 @@ function createBuiltinTargetPacks() {
2747
3778
  return [
2748
3779
  ...createFoundationTargetPacks(),
2749
3780
  createLakeflowJobsTargetPack(),
2750
- ...createAdvancedTargetPacks()
3781
+ ...createAdvancedTargetPacks(),
3782
+ ...createNextTargetPacks()
2751
3783
  ];
2752
3784
  }
2753
3785
  var builtinTargetPacks = createBuiltinTargetPacks();
2754
3786
 
2755
- export { DatabricksAdvancedWorkloadsAdapter, DatabricksJobsAdapter, advancedStreamingCdcCheck, aiBiDashboardCheck, appHealthCheck, assertDeltaContract, autoLoaderIngestionCheck, backupRestoreCheck, builtinTargetPacks, classicComputeCheck, createAdvancedStreamingTargetPack, createAdvancedTargetPacks, createAiBiGenieTargetPack, createAppsOperationalFoundationPack, createBuiltinTargetPacks, createEphemeralLakebaseBranch, createExecutionContext, createFeatureEngineeringTargetPack, createFederationSharingTargetPack, createFoundationTargetPacks, createJobsCodeFoundationPack, createLakebaseTestProvider, createLakeflowFoundationPack, createLakeflowJobsTargetPack, createMlflowLifecycleTargetPack, createMockDatabricksClient, createModelServingTargetPack, createSecurityCostDrTargetPack, createSqlDeltaFoundationPack, createTargetPackRegistry, createUnityStorageFoundationPack, createVectorRagAgentsTargetPack, customLiveCheck, dbtBuildCheck, defineLiveSuite, defineTargetPack, defineTargetPackRun, deleteEphemeralLakebaseBranch, deleteVolumeFile, deltaContractCheck, doctorTargetPack, ensureVolumeDirectory, evalJudgeModelServingCheck, expectQueryToMatchGolden, expectTable, failureRecoveryCheck, featureEngineeringServingCheck, federationSharingCleanRoomsCheck, foundationTargetPacks, genieCheck, jobRunCheck, jobsCertificationCheck, jobsOrchestrationCheck, lakebaseCredentialCheck, lakebaseRoundTripCheck, lakeflowConnectCheck, mlflowLifecycleCheck, modelServingCheck, normalizeJobRun, normalizeVolumeRoot, notebookSubmitCheck, parseJobOrchestrationLiveSpec, performanceBudgetCheck, pipelineRefreshCheck, ragAgentCheck, regionalDrCheck, renderJUnit, resolveLakebaseProject, resolveProfile, restrictedPrincipalCheck, rollbackCheck, runLiveSuite, runTargetPack, secretRotationCheck, secretScopeCheck, securityPostureCostCheck, serverlessComputeCheck, sqlRoundTripCheck, toLakebaseBranchId, unityCatalogAccessCheck, uploadVolumeFile, validateJobGraph, vectorSearchCheck, volumeIOCheck, waitForPipelineUpdate };
3787
+ export { DatabricksAdvancedWorkloadsAdapter, DatabricksJobsAdapter, advancedStreamingCdcCheck, agentEvaluationPipelineCheck, agentOrchestrationResponsesCheck, agentServicesEnrollmentCheck, aiBiDashboardCheck, aiFunctionsBatchInferenceCheck, aiRuntimeTrainingCheck, appHealthCheck, assertDeltaContract, autoLoaderIngestionCheck, backupRestoreCheck, builtinTargetPacks, classicComputeCheck, createAdvancedStreamingTargetPack, createAdvancedTargetPacks, createAgentEvaluationPipelineTargetPack, createAgentOrchestrationTargetPack, createAgentServicesEnrollmentTargetPack, createAiBiGenieTargetPack, createAiFunctionsBatchInferenceTargetPack, createAiRuntimeTrainingTargetPack, createAppsOperationalFoundationPack, createBuiltinTargetPacks, createDataQualityObservabilityTargetPack, createDeclarativeBundlesTargetPack, createEphemeralLakebaseBranch, createExecutionContext, createFeatureEngineeringTargetPack, createFederationSharingTargetPack, createFoundationTargetPacks, createJobsCodeFoundationPack, createLakebaseAutoscalingFeatureStoreTargetPack, createLakebaseTestProvider, createLakeflowFoundationPack, createLakeflowJobsTargetPack, createLakehouseOptimizationTargetPack, createManagedMcpAgentsTargetPack, createMarketplaceOpenSharingTargetPack, createMlflow3AgentQualityTargetPack, createMlflowLifecycleTargetPack, createMockDatabricksClient, createModelServingTargetPack, createNextTargetPacks, createSecurityCostDrTargetPack, createSemanticAnalyticsTargetPack, createSqlDeltaFoundationPack, createTargetPackRegistry, createUnityStorageFoundationPack, createVectorRagAgentsTargetPack, customLiveCheck, dataQualityAppTelemetryCheck, dbtBuildCheck, declarativeBundlesCheck, defineLiveSuite, defineTargetPack, defineTargetPackRun, deleteEphemeralLakebaseBranch, deleteVolumeFile, deltaContractCheck, doctorTargetPack, ensureVolumeDirectory, evalJudgeModelServingCheck, expectQueryToMatchGolden, expectTable, failureRecoveryCheck, featureEngineeringServingCheck, federationSharingCleanRoomsCheck, foundationTargetPacks, genieCheck, jobRunCheck, jobsCertificationCheck, jobsOrchestrationCheck, lakebaseAutoscalingFeatureStoreCheck, lakebaseCredentialCheck, lakebaseRoundTripCheck, lakeflowConnectCheck, lakehouseOptimizationCheck, managedMcpAgentsCheck, marketplaceOpenSharingCheck, mlflow3GenAiQualityCheck, mlflowLifecycleCheck, modelServingCheck, normalizeJobRun, normalizeVolumeRoot, notebookSubmitCheck, parseJobOrchestrationLiveSpec, performanceBudgetCheck, pipelineRefreshCheck, ragAgentCheck, regionalDrCheck, renderJUnit, resolveLakebaseProject, resolveProfile, resolveRequiredChecks, restrictedPrincipalCheck, rollbackCheck, runLiveSuite, runTargetPack, secretRotationCheck, secretScopeCheck, securityPostureCostCheck, semanticAnalyticsCheck, serverlessComputeCheck, sqlRoundTripCheck, toLakebaseBranchId, unityCatalogAccessCheck, uploadVolumeFile, validateJobGraph, vectorSearchCheck, volumeIOCheck, waitForPipelineUpdate };
2756
3788
  //# sourceMappingURL=index.js.map
2757
3789
  //# sourceMappingURL=index.js.map