@fabricorg/databricks-testkit 0.8.0 → 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/README.md +7 -0
- package/dist/index.cjs +819 -226
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +26 -1
- package/dist/index.d.ts +26 -1
- package/dist/index.js +801 -227
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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
|
|
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:
|
|
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
|
|
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:
|
|
300
|
-
const rows = await
|
|
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:
|
|
344
|
+
async run({ env, warehouse: warehouse3 }) {
|
|
345
345
|
const table = env[tableEnv];
|
|
346
|
-
const rows = await
|
|
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:
|
|
358
|
-
await
|
|
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
|
|
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
|
|
724
|
-
if (
|
|
725
|
-
throw new Error(`Secret scope ${scope} is missing keys: ${
|
|
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
|
|
747
|
-
if (
|
|
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: ${
|
|
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:
|
|
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
|
|
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:
|
|
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
|
|
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
|
|
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:
|
|
903
|
+
async run({ warehouse: warehouse3 }) {
|
|
904
904
|
let failedAsExpected = false;
|
|
905
905
|
try {
|
|
906
|
-
await
|
|
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
|
|
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:
|
|
950
|
-
const source =
|
|
951
|
-
const backup =
|
|
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
|
|
954
|
-
await
|
|
955
|
-
await
|
|
956
|
-
await
|
|
957
|
-
const rows = await
|
|
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
|
|
962
|
-
await
|
|
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:
|
|
973
|
-
const table =
|
|
972
|
+
async run({ warehouse: warehouse3 }) {
|
|
973
|
+
const table = warehouse3.qual(safeName("rollback_probe"));
|
|
974
974
|
try {
|
|
975
|
-
await
|
|
976
|
-
await
|
|
977
|
-
const history = await
|
|
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
|
|
983
|
-
await
|
|
984
|
-
const rows = await
|
|
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
|
|
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:
|
|
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
|
|
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 =
|
|
1127
|
-
const requirements = (pack.requirements ?? []).map((
|
|
1128
|
-
id:
|
|
1129
|
-
description:
|
|
1130
|
-
satisfied:
|
|
1131
|
-
required:
|
|
1132
|
-
variables: [...
|
|
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((
|
|
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 =
|
|
1163
|
+
const requiredChecks = resolveRequiredChecks(pack, options.requiredChecks);
|
|
1164
1164
|
const doctor = doctorTargetPack(pack, env, requiredChecks);
|
|
1165
1165
|
if (!doctor.ready) {
|
|
1166
|
-
const
|
|
1167
|
-
throw new Error(`Target pack '${pack.id}' is not configured: ${
|
|
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) {
|
|
@@ -1977,9 +2550,9 @@ function adapter(client) {
|
|
|
1977
2550
|
function required2(env, names) {
|
|
1978
2551
|
return names.filter((name) => !env[name]?.trim());
|
|
1979
2552
|
}
|
|
1980
|
-
function
|
|
1981
|
-
const
|
|
1982
|
-
if (
|
|
2553
|
+
function requireEnv2(env, names) {
|
|
2554
|
+
const missing2 = required2(env, names);
|
|
2555
|
+
if (missing2.length > 0) throw new Error(`Missing required configuration: ${missing2.join(", ")}`);
|
|
1983
2556
|
}
|
|
1984
2557
|
function parseJson(value, name) {
|
|
1985
2558
|
if (!value) return void 0;
|
|
@@ -2045,8 +2618,8 @@ function advancedStreamingCdcCheck() {
|
|
|
2045
2618
|
id: "streaming-cdc",
|
|
2046
2619
|
description: "Streaming pipeline, streaming table and CDC assertions are healthy",
|
|
2047
2620
|
configured: (env) => required2(env, names).length === 0,
|
|
2048
|
-
async run({ env, client, warehouse:
|
|
2049
|
-
|
|
2621
|
+
async run({ env, client, warehouse: warehouse3 }) {
|
|
2622
|
+
requireEnv2(env, names);
|
|
2050
2623
|
const api = adapter(client);
|
|
2051
2624
|
const pipeline = await api.pipeline(env.DBX_TEST_STREAMING_PIPELINE_ID);
|
|
2052
2625
|
assertNotFailed("Streaming pipeline", pipeline.state);
|
|
@@ -2055,11 +2628,11 @@ function advancedStreamingCdcCheck() {
|
|
|
2055
2628
|
if (!["STREAMING_TABLE", "MATERIALIZED_VIEW", "DELTA"].includes(tableType)) {
|
|
2056
2629
|
throw new Error(`Streaming target has unsupported table type ${tableType || "UNKNOWN"}`);
|
|
2057
2630
|
}
|
|
2058
|
-
await booleanSql("CDC", env.DBX_TEST_CDC_ASSERTION_SQL,
|
|
2631
|
+
await booleanSql("CDC", env.DBX_TEST_CDC_ASSERTION_SQL, warehouse3.query);
|
|
2059
2632
|
await booleanSql(
|
|
2060
2633
|
"Streaming freshness",
|
|
2061
2634
|
env.DBX_TEST_STREAMING_ASSERTION_SQL,
|
|
2062
|
-
|
|
2635
|
+
warehouse3.query
|
|
2063
2636
|
);
|
|
2064
2637
|
return { pipelineId: pipeline.pipeline_id, table: env.DBX_TEST_STREAMING_TABLE, tableType };
|
|
2065
2638
|
}
|
|
@@ -2071,8 +2644,8 @@ function lakeflowConnectCheck() {
|
|
|
2071
2644
|
id: "lakeflow-connect",
|
|
2072
2645
|
description: "Lakeflow Connect ingestion pipeline exists and is not failed",
|
|
2073
2646
|
configured: (env) => required2(env, names).length === 0,
|
|
2074
|
-
async run({ env, client, warehouse:
|
|
2075
|
-
|
|
2647
|
+
async run({ env, client, warehouse: warehouse3 }) {
|
|
2648
|
+
requireEnv2(env, names);
|
|
2076
2649
|
const id = env.DBX_TEST_CONNECT_PIPELINE_ID;
|
|
2077
2650
|
const pipeline = await adapter(client).pipeline(id);
|
|
2078
2651
|
assertNotFailed("Lakeflow Connect pipeline", pipeline.state);
|
|
@@ -2083,7 +2656,7 @@ function lakeflowConnectCheck() {
|
|
|
2083
2656
|
await booleanSql(
|
|
2084
2657
|
"Lakeflow Connect replication",
|
|
2085
2658
|
env.DBX_TEST_CONNECT_ASSERTION_SQL,
|
|
2086
|
-
|
|
2659
|
+
warehouse3.query
|
|
2087
2660
|
);
|
|
2088
2661
|
return {
|
|
2089
2662
|
pipelineId: pipeline.pipeline_id ?? id,
|
|
@@ -2123,7 +2696,7 @@ function genieCheck() {
|
|
|
2123
2696
|
description: "Genie space is accessible and can optionally start a grounded conversation",
|
|
2124
2697
|
configured: (env) => required2(env, names).length === 0,
|
|
2125
2698
|
async run({ env, client }) {
|
|
2126
|
-
|
|
2699
|
+
requireEnv2(env, names);
|
|
2127
2700
|
const api = adapter(client);
|
|
2128
2701
|
const id = env.DBX_TEST_GENIE_SPACE_ID;
|
|
2129
2702
|
const space = await api.genieSpace(id);
|
|
@@ -2153,7 +2726,7 @@ function mlflowLifecycleCheck() {
|
|
|
2153
2726
|
description: "MLflow experiment and Unity Catalog model version are accessible",
|
|
2154
2727
|
configured: (env) => required2(env, names).length === 0,
|
|
2155
2728
|
async run({ env, client }) {
|
|
2156
|
-
|
|
2729
|
+
requireEnv2(env, names);
|
|
2157
2730
|
const api = adapter(client);
|
|
2158
2731
|
const experiment = await api.experiment(env.DBX_TEST_MLFLOW_EXPERIMENT_ID);
|
|
2159
2732
|
const model = await api.registeredModel(env.DBX_TEST_REGISTERED_MODEL);
|
|
@@ -2177,8 +2750,8 @@ function featureEngineeringServingCheck() {
|
|
|
2177
2750
|
configured: (env) => Boolean(
|
|
2178
2751
|
env.DBX_TEST_FEATURE_TABLE && env.DBX_TEST_FEATURE_ASSERTION_SQL && (env.DBX_TEST_ONLINE_TABLE || env.DBX_TEST_FEATURE_SERVING_PIPELINE_ID)
|
|
2179
2752
|
),
|
|
2180
|
-
async run({ env, client, warehouse:
|
|
2181
|
-
|
|
2753
|
+
async run({ env, client, warehouse: warehouse3 }) {
|
|
2754
|
+
requireEnv2(env, ["DBX_TEST_FEATURE_TABLE"]);
|
|
2182
2755
|
if (!env.DBX_TEST_ONLINE_TABLE && !env.DBX_TEST_FEATURE_SERVING_PIPELINE_ID) {
|
|
2183
2756
|
throw new Error(
|
|
2184
2757
|
"Feature serving requires DBX_TEST_ONLINE_TABLE or DBX_TEST_FEATURE_SERVING_PIPELINE_ID"
|
|
@@ -2201,7 +2774,7 @@ function featureEngineeringServingCheck() {
|
|
|
2201
2774
|
assertNotFailed("Synced Table pipeline", state);
|
|
2202
2775
|
servingResource = pipeline.pipeline_id ?? pipelineId;
|
|
2203
2776
|
}
|
|
2204
|
-
await booleanSql("Feature freshness", env.DBX_TEST_FEATURE_ASSERTION_SQL,
|
|
2777
|
+
await booleanSql("Feature freshness", env.DBX_TEST_FEATURE_ASSERTION_SQL, warehouse3.query);
|
|
2205
2778
|
return {
|
|
2206
2779
|
featureTable: source.full_name ?? env.DBX_TEST_FEATURE_TABLE,
|
|
2207
2780
|
servingResource,
|
|
@@ -2221,7 +2794,7 @@ function modelServingCheck() {
|
|
|
2221
2794
|
description: "Model Serving endpoint is ready and can optionally serve an inference request",
|
|
2222
2795
|
configured: (env) => required2(env, names).length === 0,
|
|
2223
2796
|
async run({ env, client }) {
|
|
2224
|
-
|
|
2797
|
+
requireEnv2(env, names);
|
|
2225
2798
|
if (env.DBX_TEST_AI_GATEWAY_REQUIRED !== "1") {
|
|
2226
2799
|
throw new Error("DBX_TEST_AI_GATEWAY_REQUIRED must be 1 for the Model Serving target pack");
|
|
2227
2800
|
}
|
|
@@ -2257,7 +2830,7 @@ function evalJudgeModelServingCheck() {
|
|
|
2257
2830
|
description: "Databricks Model Serving satisfies the deterministic evaluator chat contract",
|
|
2258
2831
|
configured: (env) => required2(env, names).length === 0,
|
|
2259
2832
|
async run({ env, client }) {
|
|
2260
|
-
|
|
2833
|
+
requireEnv2(env, names);
|
|
2261
2834
|
const api = adapter(client);
|
|
2262
2835
|
const name = env.DBX_TEST_EVAL_SERVING_ENDPOINT;
|
|
2263
2836
|
const endpoint = await api.servingEndpoint(name);
|
|
@@ -2297,7 +2870,7 @@ function vectorSearchCheck() {
|
|
|
2297
2870
|
description: "Vector Search endpoint and index are online",
|
|
2298
2871
|
configured: (env) => required2(env, names).length === 0,
|
|
2299
2872
|
async run({ env, client }) {
|
|
2300
|
-
|
|
2873
|
+
requireEnv2(env, names);
|
|
2301
2874
|
const api = adapter(client);
|
|
2302
2875
|
const endpoint = await api.vectorSearchEndpoint(env.DBX_TEST_VECTOR_ENDPOINT);
|
|
2303
2876
|
assertReady("Vector Search endpoint", endpoint.endpoint_status?.state, ["ONLINE", "READY"]);
|
|
@@ -2324,7 +2897,7 @@ function ragAgentCheck() {
|
|
|
2324
2897
|
description: "RAG retrieval and agent serving endpoint return non-empty responses",
|
|
2325
2898
|
configured: (env) => required2(env, names).length === 0,
|
|
2326
2899
|
async run({ env, client }) {
|
|
2327
|
-
|
|
2900
|
+
requireEnv2(env, names);
|
|
2328
2901
|
const api = adapter(client);
|
|
2329
2902
|
let retrieval;
|
|
2330
2903
|
if (env.DBX_TEST_VECTOR_QUERY_JSON) {
|
|
@@ -2368,13 +2941,13 @@ function federationSharingCleanRoomsCheck() {
|
|
|
2368
2941
|
id: "federation-sharing-cleanrooms",
|
|
2369
2942
|
description: "Lakehouse Federation connection, Delta Share and Clean Room are accessible",
|
|
2370
2943
|
configured: (env) => required2(env, names).length === 0,
|
|
2371
|
-
async run({ env, client, warehouse:
|
|
2372
|
-
|
|
2944
|
+
async run({ env, client, warehouse: warehouse3 }) {
|
|
2945
|
+
requireEnv2(env, names);
|
|
2373
2946
|
const api = adapter(client);
|
|
2374
2947
|
const connection = await api.connection(env.DBX_TEST_CONNECTION);
|
|
2375
2948
|
const share = await api.share(env.DBX_TEST_SHARE);
|
|
2376
2949
|
const room = await api.cleanRoom(env.DBX_TEST_CLEAN_ROOM);
|
|
2377
|
-
await booleanSql("Federated query", env.DBX_TEST_FEDERATION_ASSERTION_SQL,
|
|
2950
|
+
await booleanSql("Federated query", env.DBX_TEST_FEDERATION_ASSERTION_SQL, warehouse3.query);
|
|
2378
2951
|
return {
|
|
2379
2952
|
connection: connection.name ?? env.DBX_TEST_CONNECTION,
|
|
2380
2953
|
share: share.name ?? env.DBX_TEST_SHARE,
|
|
@@ -2393,8 +2966,8 @@ function securityPostureCostCheck() {
|
|
|
2393
2966
|
id: "security-cost",
|
|
2394
2967
|
description: "Network access controls, compute policy and cost guardrail are enforced",
|
|
2395
2968
|
configured: (env) => required2(env, names).length === 0,
|
|
2396
|
-
async run({ env, client, warehouse:
|
|
2397
|
-
|
|
2969
|
+
async run({ env, client, warehouse: warehouse3 }) {
|
|
2970
|
+
requireEnv2(env, names);
|
|
2398
2971
|
const api = adapter(client);
|
|
2399
2972
|
const access = await api.ipAccessList(env.DBX_TEST_IP_ACCESS_LIST_ID);
|
|
2400
2973
|
if (access.enabled === false) throw new Error("Configured IP access list is disabled");
|
|
@@ -2404,7 +2977,7 @@ function securityPostureCostCheck() {
|
|
|
2404
2977
|
if (env.DBX_TEST_EXPECT_HOST_SUFFIX && !env.DATABRICKS_HOST?.endsWith(env.DBX_TEST_EXPECT_HOST_SUFFIX)) {
|
|
2405
2978
|
throw new Error(`Workspace host does not end with ${env.DBX_TEST_EXPECT_HOST_SUFFIX}`);
|
|
2406
2979
|
}
|
|
2407
|
-
await booleanSql("Cost guardrail", env.DBX_TEST_COST_ASSERTION_SQL,
|
|
2980
|
+
await booleanSql("Cost guardrail", env.DBX_TEST_COST_ASSERTION_SQL, warehouse3.query);
|
|
2408
2981
|
return {
|
|
2409
2982
|
ipAccessList: access.list_id ?? env.DBX_TEST_IP_ACCESS_LIST_ID,
|
|
2410
2983
|
policy: policy.policy_id ?? policy.name,
|
|
@@ -2426,8 +2999,8 @@ function mlflow3GenAiQualityCheck() {
|
|
|
2426
2999
|
id: "mlflow3-genai-quality",
|
|
2427
3000
|
description: "MLflow 3 tracing, offline agent evaluation and production scorer monitoring produce durable evidence",
|
|
2428
3001
|
configured: (env) => required2(env, names).length === 0,
|
|
2429
|
-
async run({ env, client, warehouse:
|
|
2430
|
-
|
|
3002
|
+
async run({ env, client, warehouse: warehouse3 }) {
|
|
3003
|
+
requireEnv2(env, names);
|
|
2431
3004
|
const job = await runCertificationJob(
|
|
2432
3005
|
"MLflow 3 GenAI",
|
|
2433
3006
|
env.DBX_TEST_MLFLOW3_JOB_ID,
|
|
@@ -2435,26 +3008,26 @@ function mlflow3GenAiQualityCheck() {
|
|
|
2435
3008
|
client,
|
|
2436
3009
|
{ timeoutMs: Number(env.DBX_TEST_MLFLOW3_TIMEOUT_MS ?? 72e5) }
|
|
2437
3010
|
);
|
|
2438
|
-
await booleanSql("MLflow 3 trace", env.DBX_TEST_MLFLOW3_TRACE_ASSERTION_SQL,
|
|
3011
|
+
await booleanSql("MLflow 3 trace", env.DBX_TEST_MLFLOW3_TRACE_ASSERTION_SQL, warehouse3.query);
|
|
2439
3012
|
await booleanSql(
|
|
2440
3013
|
"MLflow 3 offline evaluation",
|
|
2441
3014
|
env.DBX_TEST_MLFLOW3_EVAL_ASSERTION_SQL,
|
|
2442
|
-
|
|
3015
|
+
warehouse3.query
|
|
2443
3016
|
);
|
|
2444
3017
|
await booleanSql(
|
|
2445
3018
|
"MLflow 3 production scorer lifecycle",
|
|
2446
3019
|
env.DBX_TEST_MLFLOW3_SCORER_ASSERTION_SQL,
|
|
2447
|
-
|
|
3020
|
+
warehouse3.query
|
|
2448
3021
|
);
|
|
2449
3022
|
await booleanSql(
|
|
2450
3023
|
"MLflow 3 production monitoring",
|
|
2451
3024
|
env.DBX_TEST_MLFLOW3_MONITOR_ASSERTION_SQL,
|
|
2452
|
-
|
|
3025
|
+
warehouse3.query
|
|
2453
3026
|
);
|
|
2454
3027
|
await booleanSql(
|
|
2455
3028
|
"AI Search retrieval quality",
|
|
2456
3029
|
env.DBX_TEST_AI_SEARCH_EVAL_ASSERTION_SQL,
|
|
2457
|
-
|
|
3030
|
+
warehouse3.query
|
|
2458
3031
|
);
|
|
2459
3032
|
return {
|
|
2460
3033
|
...job,
|
|
@@ -2473,8 +3046,8 @@ function agentEvaluationPipelineCheck() {
|
|
|
2473
3046
|
id: "agent-evaluation-pipeline",
|
|
2474
3047
|
description: "Experiments API, outbox, Temporal worker, Model Serving judge, SQL score sink and Quality completion execute end to end",
|
|
2475
3048
|
configured: (env) => required2(env, names).length === 0,
|
|
2476
|
-
async run({ env, client, warehouse:
|
|
2477
|
-
|
|
3049
|
+
async run({ env, client, warehouse: warehouse3 }) {
|
|
3050
|
+
requireEnv2(env, names);
|
|
2478
3051
|
const job = await runCertificationJob(
|
|
2479
3052
|
"Agent evaluation end-to-end",
|
|
2480
3053
|
env.DBX_TEST_AGENT_EVAL_E2E_JOB_ID,
|
|
@@ -2484,7 +3057,7 @@ function agentEvaluationPipelineCheck() {
|
|
|
2484
3057
|
await booleanSql(
|
|
2485
3058
|
"Agent evaluation terminal Quality evidence",
|
|
2486
3059
|
env.DBX_TEST_AGENT_EVAL_ASSERTION_SQL,
|
|
2487
|
-
|
|
3060
|
+
warehouse3.query
|
|
2488
3061
|
);
|
|
2489
3062
|
return { ...job, api: true, outbox: true, temporal: true, judged: true, persisted: true };
|
|
2490
3063
|
}
|
|
@@ -2501,23 +3074,23 @@ function managedMcpAgentsCheck() {
|
|
|
2501
3074
|
id: "managed-mcp-agents",
|
|
2502
3075
|
description: "Managed MCP and Unity Catalog MCP Services support list, call and deny behavior",
|
|
2503
3076
|
configured: (env) => required2(env, names).length === 0,
|
|
2504
|
-
async run({ env, client, warehouse:
|
|
2505
|
-
|
|
3077
|
+
async run({ env, client, warehouse: warehouse3 }) {
|
|
3078
|
+
requireEnv2(env, names);
|
|
2506
3079
|
const job = await runCertificationJob("Databricks MCP", env.DBX_TEST_MCP_JOB_ID, env, client);
|
|
2507
3080
|
await booleanSql(
|
|
2508
3081
|
"Managed MCP list/call",
|
|
2509
3082
|
env.DBX_TEST_MCP_MANAGED_ASSERTION_SQL,
|
|
2510
|
-
|
|
3083
|
+
warehouse3.query
|
|
2511
3084
|
);
|
|
2512
3085
|
await booleanSql(
|
|
2513
3086
|
"Unity Catalog MCP Service list/call",
|
|
2514
3087
|
env.DBX_TEST_MCP_SERVICE_ASSERTION_SQL,
|
|
2515
|
-
|
|
3088
|
+
warehouse3.query
|
|
2516
3089
|
);
|
|
2517
3090
|
await booleanSql(
|
|
2518
3091
|
"MCP excluded-tool denial",
|
|
2519
3092
|
env.DBX_TEST_MCP_DENY_ASSERTION_SQL,
|
|
2520
|
-
|
|
3093
|
+
warehouse3.query
|
|
2521
3094
|
);
|
|
2522
3095
|
return { ...job, managedServer: true, mcpService: true, denyControl: true };
|
|
2523
3096
|
}
|
|
@@ -2535,8 +3108,8 @@ function dataQualityAppTelemetryCheck() {
|
|
|
2535
3108
|
id: "data-quality-app-telemetry",
|
|
2536
3109
|
description: "Unity Catalog data quality monitoring and Databricks Apps logs, spans and metrics are current",
|
|
2537
3110
|
configured: (env) => required2(env, names).length === 0,
|
|
2538
|
-
async run({ env, client, warehouse:
|
|
2539
|
-
|
|
3111
|
+
async run({ env, client, warehouse: warehouse3 }) {
|
|
3112
|
+
requireEnv2(env, names);
|
|
2540
3113
|
const appName = env.DBX_TEST_TELEMETRY_APP_NAME;
|
|
2541
3114
|
const app = await adapter(client).app(appName);
|
|
2542
3115
|
const destinations = Array.isArray(app.telemetry_export_destinations) ? app.telemetry_export_destinations : [];
|
|
@@ -2552,10 +3125,10 @@ function dataQualityAppTelemetryCheck() {
|
|
|
2552
3125
|
throw new Error(`Databricks App ${appName} telemetry destination has no ${field}`);
|
|
2553
3126
|
}
|
|
2554
3127
|
}
|
|
2555
|
-
await booleanSql("Data Quality Monitoring", env.DBX_TEST_DQM_ASSERTION_SQL,
|
|
2556
|
-
await booleanSql("App logs", env.DBX_TEST_APP_LOGS_ASSERTION_SQL,
|
|
2557
|
-
await booleanSql("App spans", env.DBX_TEST_APP_SPANS_ASSERTION_SQL,
|
|
2558
|
-
await booleanSql("App metrics", env.DBX_TEST_APP_METRICS_ASSERTION_SQL,
|
|
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);
|
|
2559
3132
|
return { app: appName, unityCatalogTelemetry: true, dataQualityMonitoring: true };
|
|
2560
3133
|
}
|
|
2561
3134
|
};
|
|
@@ -2571,7 +3144,7 @@ function agentServicesEnrollmentCheck() {
|
|
|
2571
3144
|
description: "A customer-owned Harness agent is registered as an external Unity Catalog Agent Service with governed access",
|
|
2572
3145
|
configured: (env) => required2(env, names).length === 0,
|
|
2573
3146
|
async run({ env, client }) {
|
|
2574
|
-
|
|
3147
|
+
requireEnv2(env, names);
|
|
2575
3148
|
const fullName = env.DBX_TEST_AGENT_SERVICE_FULL_NAME;
|
|
2576
3149
|
const api = adapter(client);
|
|
2577
3150
|
const service = await api.agentService(fullName);
|
|
@@ -2619,7 +3192,7 @@ function regionalDrCheck(options = {}) {
|
|
|
2619
3192
|
description: "Secondary-region workspace authentication and SQL warehouse are reachable",
|
|
2620
3193
|
configured: (env) => required2(env, names).length === 0,
|
|
2621
3194
|
async run({ env }) {
|
|
2622
|
-
|
|
3195
|
+
requireEnv2(env, names);
|
|
2623
3196
|
const drEnv = {
|
|
2624
3197
|
...env,
|
|
2625
3198
|
DATABRICKS_HOST: env.DBX_TEST_DR_HOST,
|
|
@@ -2649,14 +3222,14 @@ function regionalDrCheck(options = {}) {
|
|
|
2649
3222
|
}
|
|
2650
3223
|
|
|
2651
3224
|
// src/advanced-target-packs.ts
|
|
2652
|
-
var
|
|
2653
|
-
var
|
|
2654
|
-
var
|
|
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 = {
|
|
2655
3228
|
id: "workspace",
|
|
2656
3229
|
description: "Databricks workspace host",
|
|
2657
3230
|
anyOf: ["DATABRICKS_HOST"]
|
|
2658
3231
|
};
|
|
2659
|
-
var
|
|
3232
|
+
var auth2 = {
|
|
2660
3233
|
id: "authentication",
|
|
2661
3234
|
description: "Databricks OAuth, OIDC, bearer, or PAT authentication",
|
|
2662
3235
|
anyOf: [
|
|
@@ -2668,12 +3241,12 @@ var auth = {
|
|
|
2668
3241
|
],
|
|
2669
3242
|
secret: true
|
|
2670
3243
|
};
|
|
2671
|
-
var
|
|
3244
|
+
var warehouse2 = {
|
|
2672
3245
|
id: "warehouse",
|
|
2673
3246
|
description: "SQL warehouse for data-plane assertions",
|
|
2674
3247
|
anyOf: ["DATABRICKS_WAREHOUSE_ID", "DATABRICKS_HTTP_PATH"]
|
|
2675
3248
|
};
|
|
2676
|
-
var
|
|
3249
|
+
var requirement2 = (id, description, ...anyOf) => ({
|
|
2677
3250
|
id,
|
|
2678
3251
|
description,
|
|
2679
3252
|
anyOf
|
|
@@ -2694,31 +3267,31 @@ function createAdvancedStreamingTargetPack() {
|
|
|
2694
3267
|
checks: () => [restrictedPrincipalCheck(), advancedStreamingCdcCheck(), lakeflowConnectCheck()],
|
|
2695
3268
|
requiredChecks: ["restricted-principal", "streaming-cdc", "lakeflow-connect"],
|
|
2696
3269
|
requirements: [
|
|
2697
|
-
|
|
2698
|
-
|
|
2699
|
-
|
|
2700
|
-
|
|
2701
|
-
|
|
2702
|
-
|
|
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(
|
|
2703
3276
|
"connect-pipeline",
|
|
2704
3277
|
"Lakeflow Connect ingestion pipeline",
|
|
2705
3278
|
"DBX_TEST_CONNECT_PIPELINE_ID"
|
|
2706
3279
|
),
|
|
2707
|
-
|
|
3280
|
+
requirement2(
|
|
2708
3281
|
"streaming-assertion",
|
|
2709
3282
|
"Streaming freshness SQL",
|
|
2710
3283
|
"DBX_TEST_STREAMING_ASSERTION_SQL"
|
|
2711
3284
|
),
|
|
2712
|
-
|
|
2713
|
-
|
|
3285
|
+
requirement2("cdc-assertion", "CDC correctness SQL", "DBX_TEST_CDC_ASSERTION_SQL"),
|
|
3286
|
+
requirement2(
|
|
2714
3287
|
"connect-assertion",
|
|
2715
3288
|
"Lakeflow Connect replication SQL",
|
|
2716
3289
|
"DBX_TEST_CONNECT_ASSERTION_SQL"
|
|
2717
3290
|
)
|
|
2718
3291
|
],
|
|
2719
|
-
docsUrl: `${
|
|
3292
|
+
docsUrl: `${DOCS3}#advanced-streaming-cdc-and-lakeflow-connect`,
|
|
2720
3293
|
certificationScopes: [
|
|
2721
|
-
`${
|
|
3294
|
+
`${AZURE_M2M_SCOPE2}; serverless Lakeflow pipeline AUTO CDC and query-based PostgreSQL foreign-catalog ingestion`
|
|
2722
3295
|
]
|
|
2723
3296
|
});
|
|
2724
3297
|
}
|
|
@@ -2733,19 +3306,19 @@ function createAiBiGenieTargetPack() {
|
|
|
2733
3306
|
checks: () => [restrictedPrincipalCheck(), aiBiDashboardCheck(), genieCheck()],
|
|
2734
3307
|
requiredChecks: ["restricted-principal", "aibi-dashboard", "genie"],
|
|
2735
3308
|
requirements: [
|
|
2736
|
-
|
|
2737
|
-
|
|
2738
|
-
|
|
2739
|
-
|
|
2740
|
-
|
|
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(
|
|
2741
3314
|
"genie-question",
|
|
2742
3315
|
"Grounded Genie certification question",
|
|
2743
3316
|
"DBX_TEST_GENIE_QUESTION"
|
|
2744
3317
|
)
|
|
2745
3318
|
],
|
|
2746
|
-
docsUrl: `${
|
|
3319
|
+
docsUrl: `${DOCS3}#aibi-dashboards-and-genie`,
|
|
2747
3320
|
certificationScopes: [
|
|
2748
|
-
`${
|
|
3321
|
+
`${AZURE_M2M_SCOPE2}; published AI/BI dashboard revision and Genie conversation start`
|
|
2749
3322
|
]
|
|
2750
3323
|
});
|
|
2751
3324
|
}
|
|
@@ -2765,19 +3338,19 @@ function createMlflowLifecycleTargetPack() {
|
|
|
2765
3338
|
checks: () => [restrictedPrincipalCheck(), mlflowLifecycleCheck()],
|
|
2766
3339
|
requiredChecks: ["restricted-principal", "mlflow-lifecycle"],
|
|
2767
3340
|
requirements: [
|
|
2768
|
-
|
|
2769
|
-
|
|
2770
|
-
|
|
2771
|
-
|
|
3341
|
+
workspace2,
|
|
3342
|
+
auth2,
|
|
3343
|
+
requirement2("experiment", "MLflow experiment ID", "DBX_TEST_MLFLOW_EXPERIMENT_ID"),
|
|
3344
|
+
requirement2(
|
|
2772
3345
|
"registered-model",
|
|
2773
3346
|
"Unity Catalog registered model",
|
|
2774
3347
|
"DBX_TEST_REGISTERED_MODEL"
|
|
2775
3348
|
),
|
|
2776
|
-
|
|
3349
|
+
requirement2("model-version", "Registered model version", "DBX_TEST_MODEL_VERSION")
|
|
2777
3350
|
],
|
|
2778
|
-
docsUrl: `${
|
|
3351
|
+
docsUrl: `${DOCS3}#mlflow-and-model-lifecycle`,
|
|
2779
3352
|
certificationScopes: [
|
|
2780
|
-
`${
|
|
3353
|
+
`${AZURE_M2M_SCOPE2}; MLflow experiment and configured Unity Catalog model version`
|
|
2781
3354
|
]
|
|
2782
3355
|
});
|
|
2783
3356
|
}
|
|
@@ -2797,25 +3370,25 @@ function createFeatureEngineeringTargetPack() {
|
|
|
2797
3370
|
checks: () => [restrictedPrincipalCheck(), featureEngineeringServingCheck()],
|
|
2798
3371
|
requiredChecks: ["restricted-principal", "feature-engineering"],
|
|
2799
3372
|
requirements: [
|
|
2800
|
-
|
|
2801
|
-
|
|
2802
|
-
|
|
2803
|
-
|
|
2804
|
-
|
|
3373
|
+
workspace2,
|
|
3374
|
+
auth2,
|
|
3375
|
+
warehouse2,
|
|
3376
|
+
requirement2("feature-table", "Unity Catalog feature table", "DBX_TEST_FEATURE_TABLE"),
|
|
3377
|
+
requirement2(
|
|
2805
3378
|
"online-materialization",
|
|
2806
3379
|
"Databricks Online Table or Synced Table pipeline",
|
|
2807
3380
|
"DBX_TEST_ONLINE_TABLE",
|
|
2808
3381
|
"DBX_TEST_FEATURE_SERVING_PIPELINE_ID"
|
|
2809
3382
|
),
|
|
2810
|
-
|
|
3383
|
+
requirement2(
|
|
2811
3384
|
"feature-assertion",
|
|
2812
3385
|
"Feature freshness/correctness SQL",
|
|
2813
3386
|
"DBX_TEST_FEATURE_ASSERTION_SQL"
|
|
2814
3387
|
)
|
|
2815
3388
|
],
|
|
2816
|
-
docsUrl: `${
|
|
3389
|
+
docsUrl: `${DOCS3}#feature-engineering-and-serving`,
|
|
2817
3390
|
certificationScopes: [
|
|
2818
|
-
`${
|
|
3391
|
+
`${AZURE_M2M_SCOPE2}; Delta feature table, PostgreSQL-backed Synced Table, and SQL freshness`
|
|
2819
3392
|
]
|
|
2820
3393
|
});
|
|
2821
3394
|
}
|
|
@@ -2834,23 +3407,23 @@ function createModelServingTargetPack() {
|
|
|
2834
3407
|
checks: () => [restrictedPrincipalCheck(), modelServingCheck()],
|
|
2835
3408
|
requiredChecks: ["restricted-principal", "model-serving"],
|
|
2836
3409
|
requirements: [
|
|
2837
|
-
|
|
2838
|
-
|
|
2839
|
-
|
|
2840
|
-
|
|
3410
|
+
workspace2,
|
|
3411
|
+
auth2,
|
|
3412
|
+
requirement2("serving-endpoint", "Model Serving endpoint name", "DBX_TEST_SERVING_ENDPOINT"),
|
|
3413
|
+
requirement2(
|
|
2841
3414
|
"serving-request",
|
|
2842
3415
|
"Safe inference request JSON",
|
|
2843
3416
|
"DBX_TEST_SERVING_REQUEST_JSON"
|
|
2844
3417
|
),
|
|
2845
|
-
|
|
3418
|
+
requirement2(
|
|
2846
3419
|
"ai-gateway",
|
|
2847
3420
|
"AI Gateway enforcement flag set to 1",
|
|
2848
3421
|
"DBX_TEST_AI_GATEWAY_REQUIRED"
|
|
2849
3422
|
)
|
|
2850
3423
|
],
|
|
2851
|
-
docsUrl: `${
|
|
3424
|
+
docsUrl: `${DOCS3}#model-serving-and-ai-gateway`,
|
|
2852
3425
|
certificationScopes: [
|
|
2853
|
-
`${
|
|
3426
|
+
`${AZURE_M2M_SCOPE2}; custom-model inference and AI Gateway inference-table configuration`
|
|
2854
3427
|
]
|
|
2855
3428
|
});
|
|
2856
3429
|
}
|
|
@@ -2870,17 +3443,17 @@ function createVectorRagAgentsTargetPack() {
|
|
|
2870
3443
|
checks: () => [restrictedPrincipalCheck(), vectorSearchCheck(), ragAgentCheck()],
|
|
2871
3444
|
requiredChecks: ["restricted-principal", "vector-search", "rag-agent"],
|
|
2872
3445
|
requirements: [
|
|
2873
|
-
|
|
2874
|
-
|
|
2875
|
-
|
|
2876
|
-
|
|
2877
|
-
|
|
2878
|
-
|
|
2879
|
-
|
|
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")
|
|
2880
3453
|
],
|
|
2881
|
-
docsUrl: `${
|
|
3454
|
+
docsUrl: `${DOCS3}#vector-search-rag-and-agents`,
|
|
2882
3455
|
certificationScopes: [
|
|
2883
|
-
`${
|
|
3456
|
+
`${AZURE_M2M_SCOPE2}; Delta Sync vector retrieval and custom PyFunc agent invocation`
|
|
2884
3457
|
]
|
|
2885
3458
|
});
|
|
2886
3459
|
}
|
|
@@ -2900,21 +3473,21 @@ function createFederationSharingTargetPack() {
|
|
|
2900
3473
|
checks: () => [restrictedPrincipalCheck(), federationSharingCleanRoomsCheck()],
|
|
2901
3474
|
requiredChecks: ["restricted-principal", "federation-sharing-cleanrooms"],
|
|
2902
3475
|
requirements: [
|
|
2903
|
-
|
|
2904
|
-
|
|
2905
|
-
|
|
2906
|
-
|
|
2907
|
-
|
|
2908
|
-
|
|
2909
|
-
|
|
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(
|
|
2910
3483
|
"federation-assertion",
|
|
2911
3484
|
"Federated data-plane SQL",
|
|
2912
3485
|
"DBX_TEST_FEDERATION_ASSERTION_SQL"
|
|
2913
3486
|
)
|
|
2914
3487
|
],
|
|
2915
|
-
docsUrl: `${
|
|
3488
|
+
docsUrl: `${DOCS3}#federation-delta-sharing-and-clean-rooms`,
|
|
2916
3489
|
certificationScopes: [
|
|
2917
|
-
`${
|
|
3490
|
+
`${AZURE_M2M_SCOPE2}; managed PostgreSQL federation, Delta Sharing table, and two-metastore Clean Room`
|
|
2918
3491
|
]
|
|
2919
3492
|
});
|
|
2920
3493
|
}
|
|
@@ -2934,23 +3507,23 @@ function createSecurityCostDrTargetPack() {
|
|
|
2934
3507
|
checks: () => [restrictedPrincipalCheck(), securityPostureCostCheck(), regionalDrCheck()],
|
|
2935
3508
|
requiredChecks: ["restricted-principal", "security-cost", "regional-dr"],
|
|
2936
3509
|
requirements: [
|
|
2937
|
-
|
|
2938
|
-
|
|
2939
|
-
|
|
2940
|
-
|
|
3510
|
+
workspace2,
|
|
3511
|
+
auth2,
|
|
3512
|
+
warehouse2,
|
|
3513
|
+
requirement2(
|
|
2941
3514
|
"ip-access-list",
|
|
2942
3515
|
"Enabled workspace IP access list",
|
|
2943
3516
|
"DBX_TEST_IP_ACCESS_LIST_ID"
|
|
2944
3517
|
),
|
|
2945
|
-
|
|
2946
|
-
|
|
2947
|
-
|
|
2948
|
-
|
|
2949
|
-
|
|
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")
|
|
2950
3523
|
],
|
|
2951
|
-
docsUrl: `${
|
|
3524
|
+
docsUrl: `${DOCS3}#networking-security-cost-and-regional-dr`,
|
|
2952
3525
|
certificationScopes: [
|
|
2953
|
-
`${
|
|
3526
|
+
`${AZURE_M2M_SCOPE2}; TEST-NET block list, bounded compute policy, billing system-table guardrail, and West US 3 serverless DR warehouse`
|
|
2954
3527
|
]
|
|
2955
3528
|
});
|
|
2956
3529
|
}
|
|
@@ -2971,39 +3544,39 @@ function createMlflow3AgentQualityTargetPack() {
|
|
|
2971
3544
|
checks: () => [restrictedPrincipalCheck(), mlflow3GenAiQualityCheck()],
|
|
2972
3545
|
requiredChecks: ["restricted-principal", "mlflow3-genai-quality"],
|
|
2973
3546
|
requirements: [
|
|
2974
|
-
|
|
2975
|
-
|
|
2976
|
-
|
|
2977
|
-
|
|
2978
|
-
|
|
3547
|
+
workspace2,
|
|
3548
|
+
auth2,
|
|
3549
|
+
warehouse2,
|
|
3550
|
+
requirement2("mlflow3-job", "Native MLflow 3 certification Job", "DBX_TEST_MLFLOW3_JOB_ID"),
|
|
3551
|
+
requirement2(
|
|
2979
3552
|
"mlflow3-traces",
|
|
2980
3553
|
"Boolean SQL proving a fresh MLflow 3 trace",
|
|
2981
3554
|
"DBX_TEST_MLFLOW3_TRACE_ASSERTION_SQL"
|
|
2982
3555
|
),
|
|
2983
|
-
|
|
3556
|
+
requirement2(
|
|
2984
3557
|
"mlflow3-evaluation",
|
|
2985
3558
|
"Boolean SQL proving offline agent evaluation results",
|
|
2986
3559
|
"DBX_TEST_MLFLOW3_EVAL_ASSERTION_SQL"
|
|
2987
3560
|
),
|
|
2988
|
-
|
|
3561
|
+
requirement2(
|
|
2989
3562
|
"mlflow3-scorers",
|
|
2990
3563
|
"Boolean SQL proving production scorer lifecycle evidence",
|
|
2991
3564
|
"DBX_TEST_MLFLOW3_SCORER_ASSERTION_SQL"
|
|
2992
3565
|
),
|
|
2993
|
-
|
|
3566
|
+
requirement2(
|
|
2994
3567
|
"mlflow3-monitoring",
|
|
2995
3568
|
"Boolean SQL proving production monitoring output",
|
|
2996
3569
|
"DBX_TEST_MLFLOW3_MONITOR_ASSERTION_SQL"
|
|
2997
3570
|
),
|
|
2998
|
-
|
|
3571
|
+
requirement2(
|
|
2999
3572
|
"ai-search-evaluation",
|
|
3000
3573
|
"Boolean SQL proving AI Search retrieval-quality thresholds",
|
|
3001
3574
|
"DBX_TEST_AI_SEARCH_EVAL_ASSERTION_SQL"
|
|
3002
3575
|
)
|
|
3003
3576
|
],
|
|
3004
|
-
docsUrl: `${
|
|
3577
|
+
docsUrl: `${DOCS3}#mlflow-3-agent-quality-and-monitoring`,
|
|
3005
3578
|
certificationScopes: [
|
|
3006
|
-
`${
|
|
3579
|
+
`${AZURE_M2M_SCOPE2}; Python-native MLflow 3 trace, evaluation, complete scorer lifecycle and monitor evidence`
|
|
3007
3580
|
]
|
|
3008
3581
|
});
|
|
3009
3582
|
}
|
|
@@ -3028,28 +3601,28 @@ function createAgentEvaluationPipelineTargetPack() {
|
|
|
3028
3601
|
],
|
|
3029
3602
|
requiredChecks: ["restricted-principal", "model-eval-judge", "agent-evaluation-pipeline"],
|
|
3030
3603
|
requirements: [
|
|
3031
|
-
|
|
3032
|
-
|
|
3033
|
-
|
|
3034
|
-
|
|
3604
|
+
workspace2,
|
|
3605
|
+
auth2,
|
|
3606
|
+
warehouse2,
|
|
3607
|
+
requirement2(
|
|
3035
3608
|
"eval-serving-endpoint",
|
|
3036
3609
|
"Databricks Model Serving endpoint satisfying the evaluator chat contract",
|
|
3037
3610
|
"DBX_TEST_EVAL_SERVING_ENDPOINT"
|
|
3038
3611
|
),
|
|
3039
|
-
|
|
3612
|
+
requirement2(
|
|
3040
3613
|
"agent-eval-job",
|
|
3041
3614
|
"Exact-candidate end-to-end agent evaluation certification Job",
|
|
3042
3615
|
"DBX_TEST_AGENT_EVAL_E2E_JOB_ID"
|
|
3043
3616
|
),
|
|
3044
|
-
|
|
3617
|
+
requirement2(
|
|
3045
3618
|
"agent-eval-evidence",
|
|
3046
3619
|
"Boolean SQL proving terminal scores and Quality evidence",
|
|
3047
3620
|
"DBX_TEST_AGENT_EVAL_ASSERTION_SQL"
|
|
3048
3621
|
)
|
|
3049
3622
|
],
|
|
3050
|
-
docsUrl: `${
|
|
3623
|
+
docsUrl: `${DOCS3}#agent-evaluation-delivery-pipeline`,
|
|
3051
3624
|
certificationScopes: [
|
|
3052
|
-
`${
|
|
3625
|
+
`${AZURE_M2M_SCOPE2}; Experiments API through customer worker and Databricks judge to SQL/Quality`
|
|
3053
3626
|
]
|
|
3054
3627
|
});
|
|
3055
3628
|
}
|
|
@@ -3069,29 +3642,29 @@ function createManagedMcpAgentsTargetPack() {
|
|
|
3069
3642
|
checks: () => [restrictedPrincipalCheck(), managedMcpAgentsCheck()],
|
|
3070
3643
|
requiredChecks: ["restricted-principal", "managed-mcp-agents"],
|
|
3071
3644
|
requirements: [
|
|
3072
|
-
|
|
3073
|
-
|
|
3074
|
-
|
|
3075
|
-
|
|
3076
|
-
|
|
3645
|
+
workspace2,
|
|
3646
|
+
auth2,
|
|
3647
|
+
warehouse2,
|
|
3648
|
+
requirement2("mcp-job", "Native Streamable HTTP MCP certification Job", "DBX_TEST_MCP_JOB_ID"),
|
|
3649
|
+
requirement2(
|
|
3077
3650
|
"managed-mcp",
|
|
3078
3651
|
"Boolean SQL proving managed MCP list/call behavior",
|
|
3079
3652
|
"DBX_TEST_MCP_MANAGED_ASSERTION_SQL"
|
|
3080
3653
|
),
|
|
3081
|
-
|
|
3654
|
+
requirement2(
|
|
3082
3655
|
"mcp-service",
|
|
3083
3656
|
"Boolean SQL proving UC MCP Service list/call behavior",
|
|
3084
3657
|
"DBX_TEST_MCP_SERVICE_ASSERTION_SQL"
|
|
3085
3658
|
),
|
|
3086
|
-
|
|
3659
|
+
requirement2(
|
|
3087
3660
|
"mcp-denial",
|
|
3088
3661
|
"Boolean SQL proving an MCP tool excluded by UC selectors was denied",
|
|
3089
3662
|
"DBX_TEST_MCP_DENY_ASSERTION_SQL"
|
|
3090
3663
|
)
|
|
3091
3664
|
],
|
|
3092
|
-
docsUrl: `${
|
|
3665
|
+
docsUrl: `${DOCS3}#managed-mcp-and-mcp-services`,
|
|
3093
3666
|
certificationScopes: [
|
|
3094
|
-
`${
|
|
3667
|
+
`${AZURE_M2M_SCOPE2}; managed AI Search or SQL MCP plus a UC MCP Service over Streamable HTTP`
|
|
3095
3668
|
]
|
|
3096
3669
|
});
|
|
3097
3670
|
}
|
|
@@ -3111,34 +3684,34 @@ function createDataQualityObservabilityTargetPack() {
|
|
|
3111
3684
|
checks: () => [restrictedPrincipalCheck(), dataQualityAppTelemetryCheck()],
|
|
3112
3685
|
requiredChecks: ["restricted-principal", "data-quality-app-telemetry"],
|
|
3113
3686
|
requirements: [
|
|
3114
|
-
|
|
3115
|
-
|
|
3116
|
-
|
|
3117
|
-
|
|
3118
|
-
|
|
3687
|
+
workspace2,
|
|
3688
|
+
auth2,
|
|
3689
|
+
warehouse2,
|
|
3690
|
+
requirement2("telemetry-app", "App with UC telemetry export", "DBX_TEST_TELEMETRY_APP_NAME"),
|
|
3691
|
+
requirement2(
|
|
3119
3692
|
"data-quality",
|
|
3120
3693
|
"Boolean SQL over current Data Quality Monitoring results",
|
|
3121
3694
|
"DBX_TEST_DQM_ASSERTION_SQL"
|
|
3122
3695
|
),
|
|
3123
|
-
|
|
3696
|
+
requirement2(
|
|
3124
3697
|
"app-logs",
|
|
3125
3698
|
"Boolean SQL proving current app logs",
|
|
3126
3699
|
"DBX_TEST_APP_LOGS_ASSERTION_SQL"
|
|
3127
3700
|
),
|
|
3128
|
-
|
|
3701
|
+
requirement2(
|
|
3129
3702
|
"app-spans",
|
|
3130
3703
|
"Boolean SQL proving current app spans",
|
|
3131
3704
|
"DBX_TEST_APP_SPANS_ASSERTION_SQL"
|
|
3132
3705
|
),
|
|
3133
|
-
|
|
3706
|
+
requirement2(
|
|
3134
3707
|
"app-metrics",
|
|
3135
3708
|
"Boolean SQL proving current app metrics",
|
|
3136
3709
|
"DBX_TEST_APP_METRICS_ASSERTION_SQL"
|
|
3137
3710
|
)
|
|
3138
3711
|
],
|
|
3139
|
-
docsUrl: `${
|
|
3712
|
+
docsUrl: `${DOCS3}#data-quality-and-databricks-apps-observability`,
|
|
3140
3713
|
certificationScopes: [
|
|
3141
|
-
`${
|
|
3714
|
+
`${AZURE_M2M_SCOPE2}; system.data_quality_monitoring.table_results and UC OTel tables`
|
|
3142
3715
|
]
|
|
3143
3716
|
});
|
|
3144
3717
|
}
|
|
@@ -3158,27 +3731,27 @@ function createAgentServicesEnrollmentTargetPack() {
|
|
|
3158
3731
|
checks: () => [restrictedPrincipalCheck(), agentServicesEnrollmentCheck()],
|
|
3159
3732
|
requiredChecks: ["restricted-principal", "agent-services-enrollment"],
|
|
3160
3733
|
requirements: [
|
|
3161
|
-
|
|
3162
|
-
|
|
3163
|
-
|
|
3734
|
+
workspace2,
|
|
3735
|
+
auth2,
|
|
3736
|
+
requirement2(
|
|
3164
3737
|
"agent-service",
|
|
3165
3738
|
"External Unity Catalog Agent Service full name",
|
|
3166
3739
|
"DBX_TEST_AGENT_SERVICE_FULL_NAME"
|
|
3167
3740
|
),
|
|
3168
|
-
|
|
3741
|
+
requirement2(
|
|
3169
3742
|
"agent-connection",
|
|
3170
3743
|
"Expected Unity Catalog HTTP connection",
|
|
3171
3744
|
"DBX_TEST_AGENT_SERVICE_CONNECTION"
|
|
3172
3745
|
),
|
|
3173
|
-
|
|
3746
|
+
requirement2(
|
|
3174
3747
|
"agent-execute-principal",
|
|
3175
3748
|
"Principal expected to have EXECUTE",
|
|
3176
3749
|
"DBX_TEST_AGENT_SERVICE_EXECUTE_PRINCIPAL"
|
|
3177
3750
|
)
|
|
3178
3751
|
],
|
|
3179
|
-
docsUrl: `${
|
|
3752
|
+
docsUrl: `${DOCS3}#unity-catalog-agent-services-enrollment`,
|
|
3180
3753
|
certificationScopes: [
|
|
3181
|
-
`${
|
|
3754
|
+
`${AZURE_M2M_SCOPE2}; Agent Services Beta registration/discovery/ACL only; runtime invocation is not claimed`
|
|
3182
3755
|
]
|
|
3183
3756
|
});
|
|
3184
3757
|
}
|
|
@@ -3205,11 +3778,12 @@ function createBuiltinTargetPacks() {
|
|
|
3205
3778
|
return [
|
|
3206
3779
|
...createFoundationTargetPacks(),
|
|
3207
3780
|
createLakeflowJobsTargetPack(),
|
|
3208
|
-
...createAdvancedTargetPacks()
|
|
3781
|
+
...createAdvancedTargetPacks(),
|
|
3782
|
+
...createNextTargetPacks()
|
|
3209
3783
|
];
|
|
3210
3784
|
}
|
|
3211
3785
|
var builtinTargetPacks = createBuiltinTargetPacks();
|
|
3212
3786
|
|
|
3213
|
-
export { DatabricksAdvancedWorkloadsAdapter, DatabricksJobsAdapter, advancedStreamingCdcCheck, agentEvaluationPipelineCheck, agentServicesEnrollmentCheck, aiBiDashboardCheck, appHealthCheck, assertDeltaContract, autoLoaderIngestionCheck, backupRestoreCheck, builtinTargetPacks, classicComputeCheck, createAdvancedStreamingTargetPack, createAdvancedTargetPacks, createAgentEvaluationPipelineTargetPack, createAgentServicesEnrollmentTargetPack, createAiBiGenieTargetPack, createAppsOperationalFoundationPack, createBuiltinTargetPacks, createDataQualityObservabilityTargetPack, createEphemeralLakebaseBranch, createExecutionContext, createFeatureEngineeringTargetPack, createFederationSharingTargetPack, createFoundationTargetPacks, createJobsCodeFoundationPack, createLakebaseTestProvider, createLakeflowFoundationPack, createLakeflowJobsTargetPack, createManagedMcpAgentsTargetPack, createMlflow3AgentQualityTargetPack, createMlflowLifecycleTargetPack, createMockDatabricksClient, createModelServingTargetPack, createSecurityCostDrTargetPack, createSqlDeltaFoundationPack, createTargetPackRegistry, createUnityStorageFoundationPack, createVectorRagAgentsTargetPack, customLiveCheck, dataQualityAppTelemetryCheck, dbtBuildCheck, defineLiveSuite, defineTargetPack, defineTargetPackRun, deleteEphemeralLakebaseBranch, deleteVolumeFile, deltaContractCheck, doctorTargetPack, ensureVolumeDirectory, evalJudgeModelServingCheck, expectQueryToMatchGolden, expectTable, failureRecoveryCheck, featureEngineeringServingCheck, federationSharingCleanRoomsCheck, foundationTargetPacks, genieCheck, jobRunCheck, jobsCertificationCheck, jobsOrchestrationCheck, lakebaseCredentialCheck, lakebaseRoundTripCheck, lakeflowConnectCheck, managedMcpAgentsCheck, mlflow3GenAiQualityCheck, 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 };
|
|
3214
3788
|
//# sourceMappingURL=index.js.map
|
|
3215
3789
|
//# sourceMappingURL=index.js.map
|