@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/README.md +7 -0
- package/dist/index.cjs +1230 -168
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +62 -1
- package/dist/index.d.ts +62 -1
- package/dist/index.js +1201 -169
- 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) {
|
|
@@ -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
|
|
1972
|
-
const
|
|
1973
|
-
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(", ")}`);
|
|
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:
|
|
2019
|
-
|
|
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,
|
|
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
|
-
|
|
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:
|
|
2045
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
2151
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
2342
|
-
|
|
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,
|
|
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:
|
|
2367
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
|
2428
|
-
var
|
|
2429
|
-
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 = {
|
|
2430
3228
|
id: "workspace",
|
|
2431
3229
|
description: "Databricks workspace host",
|
|
2432
3230
|
anyOf: ["DATABRICKS_HOST"]
|
|
2433
3231
|
};
|
|
2434
|
-
var
|
|
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
|
|
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
|
|
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
|
-
|
|
2473
|
-
|
|
2474
|
-
|
|
2475
|
-
|
|
2476
|
-
|
|
2477
|
-
|
|
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
|
-
|
|
3280
|
+
requirement2(
|
|
2483
3281
|
"streaming-assertion",
|
|
2484
3282
|
"Streaming freshness SQL",
|
|
2485
3283
|
"DBX_TEST_STREAMING_ASSERTION_SQL"
|
|
2486
3284
|
),
|
|
2487
|
-
|
|
2488
|
-
|
|
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: `${
|
|
3292
|
+
docsUrl: `${DOCS3}#advanced-streaming-cdc-and-lakeflow-connect`,
|
|
2495
3293
|
certificationScopes: [
|
|
2496
|
-
`${
|
|
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
|
-
|
|
2512
|
-
|
|
2513
|
-
|
|
2514
|
-
|
|
2515
|
-
|
|
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: `${
|
|
3319
|
+
docsUrl: `${DOCS3}#aibi-dashboards-and-genie`,
|
|
2522
3320
|
certificationScopes: [
|
|
2523
|
-
`${
|
|
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
|
-
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
|
|
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
|
-
|
|
3349
|
+
requirement2("model-version", "Registered model version", "DBX_TEST_MODEL_VERSION")
|
|
2552
3350
|
],
|
|
2553
|
-
docsUrl: `${
|
|
3351
|
+
docsUrl: `${DOCS3}#mlflow-and-model-lifecycle`,
|
|
2554
3352
|
certificationScopes: [
|
|
2555
|
-
`${
|
|
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
|
-
|
|
2576
|
-
|
|
2577
|
-
|
|
2578
|
-
|
|
2579
|
-
|
|
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
|
-
|
|
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: `${
|
|
3389
|
+
docsUrl: `${DOCS3}#feature-engineering-and-serving`,
|
|
2592
3390
|
certificationScopes: [
|
|
2593
|
-
`${
|
|
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
|
-
|
|
2613
|
-
|
|
2614
|
-
|
|
2615
|
-
|
|
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
|
-
|
|
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: `${
|
|
3424
|
+
docsUrl: `${DOCS3}#model-serving-and-ai-gateway`,
|
|
2627
3425
|
certificationScopes: [
|
|
2628
|
-
`${
|
|
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
|
-
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
|
|
2653
|
-
|
|
2654
|
-
|
|
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: `${
|
|
3454
|
+
docsUrl: `${DOCS3}#vector-search-rag-and-agents`,
|
|
2657
3455
|
certificationScopes: [
|
|
2658
|
-
`${
|
|
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
|
-
|
|
2679
|
-
|
|
2680
|
-
|
|
2681
|
-
|
|
2682
|
-
|
|
2683
|
-
|
|
2684
|
-
|
|
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: `${
|
|
3488
|
+
docsUrl: `${DOCS3}#federation-delta-sharing-and-clean-rooms`,
|
|
2691
3489
|
certificationScopes: [
|
|
2692
|
-
`${
|
|
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
|
-
|
|
2713
|
-
|
|
2714
|
-
|
|
2715
|
-
|
|
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
|
-
|
|
2721
|
-
|
|
2722
|
-
|
|
2723
|
-
|
|
2724
|
-
|
|
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: `${
|
|
3752
|
+
docsUrl: `${DOCS3}#unity-catalog-agent-services-enrollment`,
|
|
2727
3753
|
certificationScopes: [
|
|
2728
|
-
`${
|
|
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
|