@fabricorg/databricks-testkit 0.6.2 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/context.ts","../src/assert.ts","../src/mock-client.ts","../src/live-suite.ts","../src/pollers.ts","../src/live-checks.ts","../src/lakebase-checks.ts","../src/lakebase-branch.ts","../src/databricks-http.ts","../src/platform-checks.ts","../src/volume-checks.ts","../src/autoloader-checks.ts","../src/resilience-checks.ts","../src/target-packs.ts","../src/foundation-packs.ts","../src/jobs-orchestration.ts","../src/jobs-certification-check.ts","../src/jobs-target-pack.ts","../src/advanced-workload-checks.ts","../src/advanced-target-packs.ts","../src/builtin-packs.ts"],"names":["createDuckDbContext","createWorkspaceContext","required","warehouse","resolve","randomUUID","waitForDatabricksRun","requirement","delay","adapter","DOCS"],"mappings":"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","file":"index.js","sourcesContent":["import type { TableFixture } from './fixtures.js';\n\nexport type TestProfile = 'local' | 'live';\n\n/**\n * One SQL surface, two engines (ADR-0006). `local` executes on DuckDB\n * in-process; `live` executes on a Databricks SQL warehouse via the SQL\n * Statement Execution API. Params are positional `?` in both profiles — the\n * workspace context transparently rewrites them to the named markers the\n * Statement Execution API requires.\n */\nexport interface ExecutionContext {\n readonly profile: TestProfile;\n /** Execute a statement, discarding any result. */\n exec(sql: string, params?: readonly unknown[]): Promise<void>;\n /** Execute a query and return normalized row objects (bigint→number, timestamps→ISO). */\n query(sql: string, params?: readonly unknown[]): Promise<Record<string, unknown>[]>;\n /** Create + seed a table from a declarative fixture. */\n loadFixture(fixture: TableFixture): Promise<void>;\n /** Qualify a bare table name for this context (schema/catalog scoping). */\n qual(table: string): string;\n close(): Promise<void>;\n}\n\nexport function resolveProfile(env: Record<string, string | undefined> = process.env): TestProfile {\n const profile = env.DBX_TEST_PROFILE ?? 'local';\n if (profile !== 'local' && profile !== 'live') {\n throw new Error(`DBX_TEST_PROFILE must be 'local' or 'live', got '${profile}'`);\n }\n if (profile === 'live' && env.DBX_TEST_LIVE !== '1') {\n throw new Error(\n 'DBX_TEST_PROFILE=live requires DBX_TEST_LIVE=1 (live suites are always gated)',\n );\n }\n return profile;\n}\n\nexport interface CreateContextOptions {\n profile?: TestProfile;\n env?: Record<string, string | undefined>;\n /** local profile: schema to create + qualify tables with. live profile: schema within the catalog. */\n schema?: string;\n /** Live profile only: observe each submitted SQL statement. */\n onStatement?: (statement: { sql: string; statementId?: string }) => void;\n}\n\n/** Profile-dispatched factory. Lazy-imports each engine so the unused one stays out of the bundle. */\nexport async function createExecutionContext(\n options: CreateContextOptions = {},\n): Promise<ExecutionContext> {\n const env = options.env ?? process.env;\n const profile = options.profile ?? resolveProfile(env);\n if (profile === 'local') {\n const { createDuckDbContext } = await import('./duckdb-context.js');\n return createDuckDbContext({ schema: options.schema });\n }\n const { createWorkspaceContext } = await import('./workspace-context.js');\n return createWorkspaceContext({\n env,\n schema: options.schema,\n ...(options.onStatement ? { onStatement: options.onStatement } : {}),\n });\n}\n","import type { ExecutionContext } from './context.js';\nimport { compareToGolden } from './golden.js';\n\n/**\n * Framework-free table assertions — they throw plain Errors so they work\n * under vitest, cucumber-js steps, or the live check runner alike.\n */\nexport function expectTable(ctx: ExecutionContext, table: string) {\n const target = ctx.qual(table);\n return {\n async toHaveRowCount(expected: number): Promise<void> {\n const rows = await ctx.query(`SELECT COUNT(*) AS n FROM ${target}`);\n const actual = Number(rows[0]?.n ?? Number.NaN);\n if (actual !== expected) {\n throw new Error(`Expected ${target} to have ${expected} rows, found ${actual}`);\n }\n },\n\n /** Every partial row must match at least one table row on its own keys. */\n async toContainRows(partials: readonly Record<string, unknown>[]): Promise<void> {\n const rows = await ctx.query(`SELECT * FROM ${target}`);\n for (const partial of partials) {\n const hit = rows.some((row) =>\n Object.entries(partial).every(([key, value]) => looselyEqual(row[key], value)),\n );\n if (!hit) {\n throw new Error(\n `Expected ${target} to contain a row matching ${JSON.stringify(partial)}; ` +\n `have ${rows.length} rows: ${JSON.stringify(rows.slice(0, 5))}${rows.length > 5 ? ' …' : ''}`,\n );\n }\n }\n },\n\n /**\n * Compare `SELECT * ORDER BY <orderBy>` against a committed golden JSON\n * file. Set DBX_TEST_UPDATE_GOLDEN=1 to (re)write the golden instead —\n * a reviewable, versioned event.\n */\n async toMatchGolden(goldenPath: string, options: { orderBy?: string } = {}): Promise<void> {\n const orderBy = options.orderBy ? ` ORDER BY ${options.orderBy}` : '';\n const rows = await ctx.query(`SELECT * FROM ${target}${orderBy}`);\n await compareToGolden(goldenPath, rows, `table ${target}`);\n },\n };\n}\n\n/** Compare query results (not a whole table) against a golden file. */\nexport async function expectQueryToMatchGolden(\n ctx: ExecutionContext,\n sql: string,\n params: readonly unknown[],\n goldenPath: string,\n): Promise<void> {\n const rows = await ctx.query(sql, params);\n await compareToGolden(goldenPath, rows, 'query');\n}\n\nfunction looselyEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (typeof a === 'number' && typeof b === 'number') return Math.abs(a - b) < 1e-9;\n // Timestamps normalize to 'YYYY-MM-DD HH:MM:SS'; allow ISO-style expectations.\n if (typeof a === 'string' && typeof b === 'string') {\n return (\n a.replace('T', ' ').replace(/(\\.\\d+)?Z?$/, '') ===\n b.replace('T', ' ').replace(/(\\.\\d+)?Z?$/, '')\n );\n }\n return false;\n}\n","/**\n * Framework-free fake of the Databricks REST client surface, for unit tests\n * of orchestration logic (submit → poll → terminal). Queue responses per\n * (method, path-prefix); every call is recorded for assertions. Works under\n * vitest without vi.fn so it is equally usable from cucumber-js worlds.\n */\nexport interface RecordedCall {\n method: 'GET' | 'POST' | 'DELETE';\n path: string;\n body?: unknown;\n query?: Record<string, string | number | boolean | undefined>;\n}\n\nexport interface MockDatabricksClient {\n get<T>(path: string, query?: Record<string, string | number | boolean | undefined>): Promise<T>;\n post<T>(\n path: string,\n body?: unknown,\n query?: Record<string, string | number | boolean | undefined>,\n options?: unknown,\n ): Promise<T>;\n request<T>(\n method: 'GET' | 'POST' | 'DELETE',\n path: string,\n body?: unknown,\n query?: Record<string, string | number | boolean | undefined>,\n options?: unknown,\n ): Promise<T>;\n /** Queue the next response for calls whose path starts with `pathPrefix`. FIFO per prefix. */\n queue(\n method: 'GET' | 'POST' | 'DELETE',\n pathPrefix: string,\n response: unknown,\n ): MockDatabricksClient;\n /** Queue an error for the next matching call. */\n queueError(\n method: 'GET' | 'POST' | 'DELETE',\n pathPrefix: string,\n error: Error,\n ): MockDatabricksClient;\n readonly calls: readonly RecordedCall[];\n callsTo(method: 'GET' | 'POST' | 'DELETE', pathPrefix: string): RecordedCall[];\n}\n\ntype Queued = { pathPrefix: string; response?: unknown; error?: Error };\n\nexport function createMockDatabricksClient(): MockDatabricksClient {\n const queues: Record<'GET' | 'POST' | 'DELETE', Queued[]> = { GET: [], POST: [], DELETE: [] };\n const calls: RecordedCall[] = [];\n\n function take(method: 'GET' | 'POST' | 'DELETE', path: string): Queued {\n const index = queues[method].findIndex((q) => path.startsWith(q.pathPrefix));\n if (index === -1) {\n throw new Error(\n `MockDatabricksClient: no queued ${method} response for ${path}. ` +\n `Queued prefixes: ${queues[method].map((q) => q.pathPrefix).join(', ') || '(none)'}`,\n );\n }\n return queues[method].splice(index, 1)[0] as Queued;\n }\n\n const client: MockDatabricksClient = {\n async get<T>(path: string, query?: Record<string, string | number | boolean | undefined>) {\n calls.push({ method: 'GET', path, query });\n const queued = take('GET', path);\n if (queued.error) throw queued.error;\n return queued.response as T;\n },\n async post<T>(\n path: string,\n body?: unknown,\n query?: Record<string, string | number | boolean | undefined>,\n ) {\n calls.push({ method: 'POST', path, body, query });\n const queued = take('POST', path);\n if (queued.error) throw queued.error;\n return queued.response as T;\n },\n async request<T>(\n method: 'GET' | 'POST' | 'DELETE',\n path: string,\n body?: unknown,\n query?: Record<string, string | number | boolean | undefined>,\n ) {\n calls.push({ method, path, body, query });\n const queued = take(method, path);\n if (queued.error) throw queued.error;\n return queued.response as T;\n },\n queue(method, pathPrefix, response) {\n queues[method].push({ pathPrefix, response });\n return client;\n },\n queueError(method, pathPrefix, error) {\n queues[method].push({ pathPrefix, error });\n return client;\n },\n calls,\n callsTo(method, pathPrefix) {\n return calls.filter((c) => c.method === method && c.path.startsWith(pathPrefix));\n },\n };\n return client;\n}\n","import { mkdir, writeFile } from 'node:fs/promises';\nimport { dirname } from 'node:path';\nimport type { ExecutionContext } from './context.js';\nimport {\n type WorkspaceClientLike,\n createClientFromEnv,\n createWorkspaceContext,\n} from './workspace-context.js';\n\nexport type LiveCheckStatus = 'pass' | 'fail' | 'not-configured';\n\nexport interface LiveCheckContext {\n env: Record<string, string | undefined>;\n warehouse: ExecutionContext;\n client: WorkspaceClientLike;\n}\n\nexport interface LiveCheck {\n id: string;\n description: string;\n configured?: (env: Record<string, string | undefined>) => boolean;\n run(context: LiveCheckContext): Promise<unknown>;\n}\n\nexport interface LiveCheckResult {\n id: string;\n description: string;\n status: LiveCheckStatus;\n durationMs: number;\n details?: unknown;\n error?: string;\n}\n\nexport type TargetPackMaturity =\n | 'proposed'\n | 'building'\n | 'shipped'\n | 'live-gated'\n | 'certifying'\n | 'certified';\n\nexport interface TargetPackEvidenceMetadata {\n id: string;\n name: string;\n version: string;\n maturity: TargetPackMaturity;\n capabilities: string[];\n docsUrl?: string;\n certificationScopes: string[];\n target: {\n cloud?: string;\n region?: string;\n workspace?: string;\n runtime?: string;\n compute?: string;\n };\n}\n\nexport interface LiveEvidence {\n schemaVersion: 1;\n kind: 'databricks-live-suite';\n startedAt: string;\n finishedAt: string;\n success: boolean;\n required: string[];\n results: LiveCheckResult[];\n targetPack?: TargetPackEvidenceMetadata;\n}\n\nexport interface LiveSuiteSpec {\n checks: readonly LiveCheck[];\n required?: readonly string[];\n evidencePath?: string;\n junitPath?: string;\n env?: Record<string, string | undefined>;\n targetPack?: TargetPackEvidenceMetadata;\n}\n\nexport interface LiveSuiteRuntime {\n warehouse?: ExecutionContext;\n client?: WorkspaceClientLike;\n}\n\nexport interface DefinedLiveSuite {\n run(runtime?: LiveSuiteRuntime): Promise<LiveEvidence | undefined>;\n}\n\n/**\n * Define an explicitly gated live suite. Without DBX_TEST_LIVE=1, run() is a\n * silent no-op so the same command is safe in ordinary CI matrices.\n */\nexport function defineLiveSuite(spec: LiveSuiteSpec): DefinedLiveSuite {\n return { run: (runtime) => runLiveSuite(spec, runtime) };\n}\n\nexport async function runLiveSuite(\n spec: LiveSuiteSpec,\n runtime: LiveSuiteRuntime = {},\n): Promise<LiveEvidence | undefined> {\n const env = spec.env ?? process.env;\n if (env.DBX_TEST_LIVE !== '1') return undefined;\n\n const required = [...(spec.required ?? [])];\n const known = new Set(spec.checks.map((check) => check.id));\n for (const id of required) {\n if (!known.has(id)) throw new Error(`Required live check '${id}' is not defined`);\n }\n\n const startedAt = new Date().toISOString();\n const ownedWarehouse = runtime.warehouse === undefined;\n const client = runtime.client ?? createClientFromEnv(env);\n const warehouse =\n runtime.warehouse ??\n (hasWarehouseConfig(env)\n ? await createWorkspaceContext({ env, client })\n : unavailableWarehouseContext());\n const results: LiveCheckResult[] = [];\n\n try {\n for (const check of spec.checks) {\n if (check.configured && !check.configured(env)) {\n results.push({\n id: check.id,\n description: check.description,\n status: 'not-configured',\n durationMs: 0,\n });\n continue;\n }\n const before = performance.now();\n try {\n const details = await check.run({ env, warehouse, client });\n results.push({\n id: check.id,\n description: check.description,\n status: 'pass',\n durationMs: Math.round(performance.now() - before),\n ...(details === undefined ? {} : { details: redactValue(details, env) }),\n });\n } catch (error) {\n results.push({\n id: check.id,\n description: check.description,\n status: 'fail',\n durationMs: Math.round(performance.now() - before),\n error: redactText(error instanceof Error ? error.message : String(error), env),\n });\n }\n }\n } finally {\n if (ownedWarehouse) await warehouse.close();\n }\n\n const success = required.every(\n (id) => results.find((result) => result.id === id)?.status === 'pass',\n );\n const evidence: LiveEvidence = {\n schemaVersion: 1,\n kind: 'databricks-live-suite',\n startedAt,\n finishedAt: new Date().toISOString(),\n success,\n required,\n results,\n ...(spec.targetPack ? { targetPack: spec.targetPack } : {}),\n };\n\n if (spec.evidencePath)\n await writeReport(spec.evidencePath, `${JSON.stringify(evidence, null, 2)}\\n`);\n if (spec.junitPath) await writeReport(spec.junitPath, renderJUnit(evidence));\n return evidence;\n}\n\nfunction hasWarehouseConfig(env: Record<string, string | undefined>): boolean {\n return Boolean(env.DATABRICKS_WAREHOUSE_ID || env.DATABRICKS_HTTP_PATH);\n}\n\nfunction unavailableWarehouseContext(): ExecutionContext {\n const unavailable = async (): Promise<never> => {\n throw new Error(\n 'This live check requires DATABRICKS_WAREHOUSE_ID or DATABRICKS_HTTP_PATH; REST-only checks can run without SQL warehouse configuration',\n );\n };\n return {\n profile: 'live',\n qual: (table) => table,\n exec: unavailable,\n query: unavailable,\n loadFixture: unavailable,\n close: async () => undefined,\n };\n}\n\nasync function writeReport(path: string, contents: string): Promise<void> {\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, contents, 'utf8');\n}\n\nfunction redactText(text: string, env: Record<string, string | undefined>): string {\n let output = text;\n for (const [name, value] of Object.entries(env)) {\n if (!value || value.length < 6 || !/(TOKEN|SECRET|PASSWORD|BEARER|KEY)/i.test(name)) continue;\n output = output.split(value).join('[REDACTED]');\n }\n return output;\n}\n\nfunction redactValue(value: unknown, env: Record<string, string | undefined>): unknown {\n return JSON.parse(redactText(JSON.stringify(value), env)) as unknown;\n}\n\nfunction xml(value: string): string {\n return value\n .replaceAll('&', '&amp;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;')\n .replaceAll('\"', '&quot;')\n .replaceAll(\"'\", '&apos;');\n}\n\nexport function renderJUnit(evidence: LiveEvidence): string {\n const failures = evidence.results.filter((result) => result.status === 'fail').length;\n const skipped = evidence.results.filter((result) => result.status === 'not-configured').length;\n const seconds = evidence.results.reduce((sum, result) => sum + result.durationMs, 0) / 1000;\n const cases = evidence.results\n .map((result) => {\n const body =\n result.status === 'fail'\n ? `<failure message=\"${xml(result.error ?? 'check failed')}\"/>`\n : result.status === 'not-configured'\n ? '<skipped message=\"not configured\"/>'\n : '';\n return ` <testcase classname=\"databricks-live\" name=\"${xml(result.id)}\" time=\"${result.durationMs / 1000}\">${body}</testcase>`;\n })\n .join('\\n');\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n<testsuite name=\"databricks-live\" tests=\"${evidence.results.length}\" failures=\"${failures}\" skipped=\"${skipped}\" time=\"${seconds}\">\\n${cases}\\n</testsuite>\\n`;\n}\n","import type { WorkspaceClientLike } from './workspace-context.js';\n\nexport interface PollOptions {\n pollIntervalMs?: number;\n timeoutMs?: number;\n signal?: AbortSignal;\n}\n\nconst TERMINAL_PIPELINE_STATES = new Set(['COMPLETED', 'FAILED', 'CANCELED']);\n\nexport async function waitForPipelineUpdate(\n client: WorkspaceClientLike,\n pipelineId: string,\n updateId: string,\n options: PollOptions = {},\n): Promise<Record<string, unknown>> {\n const deadline = Date.now() + (options.timeoutMs ?? 900_000);\n const interval = options.pollIntervalMs ?? 10_000;\n const path = `/api/2.0/pipelines/${encodeURIComponent(pipelineId)}/updates/${encodeURIComponent(updateId)}`;\n let update: { update?: { state?: string } } = await client.get(path);\n while (!TERMINAL_PIPELINE_STATES.has(update.update?.state ?? '') && Date.now() < deadline) {\n if (options.signal?.aborted) throw new Error(`Pipeline update ${updateId} was aborted`);\n await abortableDelay(interval, options.signal);\n update = await client.get(path);\n }\n const state = update.update?.state ?? 'UNKNOWN';\n if (state !== 'COMPLETED') {\n throw new Error(`Pipeline update ${updateId} ended in ${state} (wanted COMPLETED)`);\n }\n return update as Record<string, unknown>;\n}\n\nfunction abortableDelay(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(new Error('Polling aborted'));\n return;\n }\n const timer = setTimeout(resolve, ms);\n signal?.addEventListener(\n 'abort',\n () => {\n clearTimeout(timer);\n reject(new Error('Polling aborted'));\n },\n { once: true },\n );\n });\n}\n","import { waitForDatabricksRun } from '@fabric-harness/databricks';\nimport type { LiveCheck } from './live-suite.js';\nimport { waitForPipelineUpdate } from './pollers.js';\n\nexport function sqlRoundTripCheck(): LiveCheck {\n return {\n id: 'sql',\n description: 'SQL Statement Execution round-trip',\n configured: (env) => Boolean(env.DATABRICKS_WAREHOUSE_ID || env.DATABRICKS_HTTP_PATH),\n async run({ warehouse }) {\n const rows = await warehouse.query('SELECT 1 AS dbx_test_ok');\n if (Number(rows[0]?.dbx_test_ok) !== 1)\n throw new Error('SQL round-trip returned an unexpected value');\n return { rows: rows.length };\n },\n };\n}\n\n/** Fail closed if governance checks accidentally run with bootstrap or administrator credentials. */\nexport function restrictedPrincipalCheck(): LiveCheck {\n return {\n id: 'restricted-principal',\n description: 'Live checks use the designated least-privilege service principal',\n configured: (env) => Boolean(env.DBX_TEST_RESTRICTED_PRINCIPAL_ID),\n async run({ env }) {\n const expected = env.DBX_TEST_RESTRICTED_PRINCIPAL_ID?.toLowerCase();\n const actual = env.DATABRICKS_CLIENT_ID?.toLowerCase();\n if (!expected || !actual) {\n throw new Error(\n 'Restricted-principal check requires DBX_TEST_RESTRICTED_PRINCIPAL_ID and DATABRICKS_CLIENT_ID',\n );\n }\n if (actual !== expected) {\n throw new Error(`Live suite is using principal '${actual}', expected '${expected}'`);\n }\n return { principalId: actual };\n },\n };\n}\n\nexport interface DeltaColumnContract {\n name: string;\n type?: string;\n}\n\nexport function assertDeltaContract(\n table: string,\n rows: readonly Record<string, unknown>[],\n columns: readonly DeltaColumnContract[],\n): void {\n for (const expected of columns) {\n const actual = rows.find((row) => String(row.col_name ?? row.column_name) === expected.name);\n if (!actual) throw new Error(`Delta contract missing column '${expected.name}' in ${table}`);\n const actualType = String(actual.data_type ?? actual.column_type ?? '').toLowerCase();\n if (expected.type && actualType !== expected.type.toLowerCase()) {\n throw new Error(\n `Delta column ${expected.name} has type ${actualType}, expected ${expected.type}`,\n );\n }\n }\n}\n\nexport function deltaContractCheck(\n tableEnv = 'DBX_TEST_DELTA_TABLE',\n columns: readonly DeltaColumnContract[] = [],\n): LiveCheck {\n return {\n id: 'delta-contract',\n description: 'Delta table schema contract',\n configured: (env) => Boolean(env[tableEnv]),\n async run({ env, warehouse }) {\n const table = env[tableEnv] as string;\n const rows = await warehouse.query(`DESCRIBE TABLE ${table}`);\n assertDeltaContract(table, rows, columns);\n return { table, columns: rows.length };\n },\n };\n}\n\nexport function unityCatalogAccessCheck(): LiveCheck {\n return {\n id: 'uc-grants',\n description: 'Unity Catalog allow/deny access assertions',\n configured: (env) => Boolean(env.DBX_TEST_UC_ALLOWED_TABLE && env.DBX_TEST_UC_DENIED_TABLE),\n async run({ env, warehouse }) {\n await warehouse.query(`SELECT * FROM ${env.DBX_TEST_UC_ALLOWED_TABLE} LIMIT 1`);\n try {\n await warehouse.query(`SELECT * FROM ${env.DBX_TEST_UC_DENIED_TABLE} LIMIT 1`);\n } catch (error) {\n if (/permission.?denied|insufficient.?priv|403|unauthoriz/i.test(String(error))) {\n return { allowed: env.DBX_TEST_UC_ALLOWED_TABLE, denied: env.DBX_TEST_UC_DENIED_TABLE };\n }\n throw error;\n }\n throw new Error(`Expected access to ${env.DBX_TEST_UC_DENIED_TABLE} to be denied`);\n },\n };\n}\n\nexport function jobRunCheck(): LiveCheck {\n return {\n id: 'jobs',\n description: 'Databricks Job run-now reaches SUCCESS',\n configured: (env) => Boolean(env.DBX_TEST_JOB_ID),\n async run({ env, client }) {\n const jobId = Number(env.DBX_TEST_JOB_ID);\n if (!Number.isFinite(jobId)) throw new Error('DBX_TEST_JOB_ID must be numeric');\n const submitted = await client.post<{ run_id: number }>('/api/2.1/jobs/run-now', {\n job_id: jobId,\n });\n const run = await waitForDatabricksRun(client as never, submitted.run_id, {\n timeoutMs: Number(env.DBX_TEST_TIMEOUT_MS ?? 900_000),\n pollIntervalMs: Number(env.DBX_TEST_POLL_INTERVAL_MS ?? 10_000),\n });\n const result = (run as { state?: { result_state?: string } }).state?.result_state;\n if (result !== 'SUCCESS') throw new Error(`Job ${jobId} ended in ${result ?? 'UNKNOWN'}`);\n return { jobId, runId: submitted.run_id };\n },\n };\n}\n\n/** Trigger the deployed Lakeflow pipeline and require a completed update. */\nexport function pipelineRefreshCheck(): LiveCheck {\n return {\n id: 'pipeline',\n description: 'Lakeflow telemetry pipeline refresh reaches COMPLETED',\n configured: (env) => Boolean(env.DBX_TEST_PIPELINE_ID),\n async run({ env, client }) {\n const pipelineId = env.DBX_TEST_PIPELINE_ID as string;\n const submitted = await client.post<{ update_id?: string }>(\n `/api/2.0/pipelines/${encodeURIComponent(pipelineId)}/updates`,\n { full_refresh: false },\n );\n if (!submitted.update_id) {\n throw new Error(`Pipeline ${pipelineId} did not return an update_id`);\n }\n await waitForPipelineUpdate(client, pipelineId, submitted.update_id, {\n timeoutMs: Number(env.DBX_TEST_TIMEOUT_MS ?? 900_000),\n pollIntervalMs: Number(env.DBX_TEST_POLL_INTERVAL_MS ?? 10_000),\n });\n return { pipelineId, updateId: submitted.update_id };\n },\n };\n}\n\nexport function notebookSubmitCheck(): LiveCheck {\n return {\n id: 'notebook',\n description: 'Databricks notebook submit run reaches SUCCESS',\n configured: (env) =>\n Boolean(\n env.DBX_TEST_NOTEBOOK_PATH &&\n (env.DBX_TEST_CLUSTER_ID || env.DBX_TEST_NOTEBOOK_SERVERLESS === '1'),\n ),\n async run({ env, client }) {\n if (\n !env.DBX_TEST_NOTEBOOK_PATH ||\n (!env.DBX_TEST_CLUSTER_ID && env.DBX_TEST_NOTEBOOK_SERVERLESS !== '1')\n ) {\n throw new Error(\n 'Notebook submit requires DBX_TEST_NOTEBOOK_PATH and either DBX_TEST_CLUSTER_ID or DBX_TEST_NOTEBOOK_SERVERLESS=1',\n );\n }\n const submitted = await client.post<{ run_id?: number }>('/api/2.1/jobs/runs/submit', {\n run_name: `fabric-experiments-notebook-${Date.now()}`,\n tasks: [\n {\n task_key: 'notebook',\n ...(env.DBX_TEST_CLUSTER_ID ? { existing_cluster_id: env.DBX_TEST_CLUSTER_ID } : {}),\n notebook_task: { notebook_path: env.DBX_TEST_NOTEBOOK_PATH },\n },\n ],\n });\n if (!submitted.run_id) throw new Error('Notebook submit returned no run_id');\n const run = await waitForDatabricksRun(client as never, submitted.run_id, {\n timeoutMs: Number(env.DBX_TEST_TIMEOUT_MS ?? 900_000),\n pollIntervalMs: Number(env.DBX_TEST_POLL_INTERVAL_MS ?? 10_000),\n });\n const result = (run as { state?: { result_state?: string } }).state?.result_state;\n if (result !== 'SUCCESS') throw new Error(`Notebook run ended in ${result ?? 'UNKNOWN'}`);\n return { runId: submitted.run_id, notebookPath: env.DBX_TEST_NOTEBOOK_PATH };\n },\n };\n}\n\nexport function dbtBuildCheck(): LiveCheck {\n return {\n id: 'dbt',\n description: 'Databricks dbt task reaches SUCCESS',\n configured: (env) =>\n Boolean(\n (env.DBX_TEST_DBT_GIT_URL || env.DBX_TEST_DBT_PROJECT_DIR) && env.DATABRICKS_WAREHOUSE_ID,\n ),\n async run({ env, client }) {\n if (\n (!env.DBX_TEST_DBT_GIT_URL && !env.DBX_TEST_DBT_PROJECT_DIR) ||\n !env.DATABRICKS_WAREHOUSE_ID\n ) {\n throw new Error(\n 'dbt build requires DBX_TEST_DBT_GIT_URL or DBX_TEST_DBT_PROJECT_DIR, plus DATABRICKS_WAREHOUSE_ID',\n );\n }\n const sourceVars = JSON.stringify({\n source_catalog: env.DBX_TEST_DBT_SOURCE_CATALOG ?? env.DBX_TEST_CATALOG,\n source_schema: env.DBX_TEST_DBT_SOURCE_SCHEMA,\n });\n const serverless = env.DBX_TEST_DBT_SERVERLESS === '1';\n const request = {\n run_name: `fabric-experiments-dbt-${Date.now()}`,\n ...(env.DBX_TEST_DBT_GIT_URL\n ? {\n git_source: {\n git_url: env.DBX_TEST_DBT_GIT_URL,\n git_provider: env.DBX_TEST_DBT_GIT_PROVIDER ?? 'gitHub',\n git_branch: env.DBX_TEST_DBT_GIT_BRANCH ?? 'main',\n },\n }\n : {}),\n tasks: [\n {\n task_key: 'dbt_build',\n ...(serverless ? { environment_key: 'dbt' } : {}),\n dbt_task: {\n commands: ['dbt deps', `dbt build --vars '${sourceVars}'`],\n warehouse_id: env.DATABRICKS_WAREHOUSE_ID,\n ...(env.DBX_TEST_CATALOG ? { catalog: env.DBX_TEST_CATALOG } : {}),\n ...(env.DBX_TEST_SCHEMA ? { schema: env.DBX_TEST_SCHEMA } : {}),\n ...(env.DBX_TEST_DBT_GIT_URL ? {} : { source: 'WORKSPACE' }),\n ...(env.DBX_TEST_DBT_PROJECT_DIR\n ? { project_directory: env.DBX_TEST_DBT_PROJECT_DIR }\n : {}),\n },\n },\n ],\n ...(serverless\n ? {\n environments: [\n {\n environment_key: 'dbt',\n spec: {\n environment_version: '2',\n dependencies: ['dbt-databricks>=1.8,<2'],\n },\n },\n ],\n }\n : {}),\n };\n const submitted = await client.post<{ run_id?: number }>(\n '/api/2.1/jobs/runs/submit',\n request,\n );\n if (!submitted.run_id) throw new Error('dbt submit returned no run_id');\n const run = await waitForDatabricksRun(client as never, submitted.run_id, {\n timeoutMs: Number(env.DBX_TEST_TIMEOUT_MS ?? 900_000),\n pollIntervalMs: Number(env.DBX_TEST_POLL_INTERVAL_MS ?? 10_000),\n });\n const result = (run as { state?: { result_state?: string } }).state?.result_state;\n if (result !== 'SUCCESS') throw new Error(`dbt run ended in ${result ?? 'UNKNOWN'}`);\n return {\n runId: submitted.run_id,\n source: env.DBX_TEST_DBT_GIT_URL ?? env.DBX_TEST_DBT_PROJECT_DIR,\n };\n },\n };\n}\n\n/** Wrap product-specific checks such as Auto Loader, Lakebase, notebooks, or dbt. */\nexport function customLiveCheck(\n id: string,\n description: string,\n run: LiveCheck['run'],\n configured?: LiveCheck['configured'],\n): LiveCheck {\n return { id, description, run, ...(configured ? { configured } : {}) };\n}\n","import {\n LakebaseDatabaseProvider,\n type LakebasePoolFactory,\n exchangeLakebaseCredential,\n} from '@fabricorg/experiments-db-pool';\nimport type { LiveCheck } from './live-suite.js';\nimport { resolveTokenProvider } from './workspace-context.js';\n\nexport interface LakebaseCheckOptions {\n fetchImpl?: typeof fetch;\n poolFactory?: LakebasePoolFactory;\n}\n\nfunction required(env: Record<string, string | undefined>, name: string): string {\n const value = env[name]?.trim();\n if (!value) throw new Error(`${name} is required`);\n return value;\n}\n\nexport function createLakebaseTestProvider(\n env: Record<string, string | undefined>,\n options: LakebaseCheckOptions = {},\n): LakebaseDatabaseProvider {\n return new LakebaseDatabaseProvider({\n host: required(env, 'DBX_TEST_LAKEBASE_HOST'),\n database: required(env, 'DBX_TEST_LAKEBASE_DATABASE'),\n user: required(env, 'DBX_TEST_LAKEBASE_USER'),\n workspaceHost: required(env, 'DATABRICKS_HOST'),\n endpoint: required(env, 'DBX_TEST_LAKEBASE_ENDPOINT'),\n token: resolveTokenProvider(required(env, 'DATABRICKS_HOST'), env, options.fetchImpl),\n fetchImpl: options.fetchImpl,\n poolFactory: options.poolFactory,\n max: 1,\n });\n}\n\nasync function workspaceToken(\n env: Record<string, string | undefined>,\n fetchImpl?: typeof fetch,\n): Promise<string> {\n const host = required(env, 'DATABRICKS_HOST');\n const provider = resolveTokenProvider(host, env, fetchImpl);\n return typeof provider === 'string' ? provider : provider();\n}\n\n/** Verify the workspace identity can exchange a short-lived Lakebase credential. */\nexport function lakebaseCredentialCheck(options: LakebaseCheckOptions = {}): LiveCheck {\n return {\n id: 'lakebase-credential',\n description: 'Lakebase OAuth credential exchange',\n configured: (env) => Boolean(env.DBX_TEST_LAKEBASE_ENDPOINT),\n async run({ env }) {\n const credential = await exchangeLakebaseCredential({\n workspaceHost: required(env, 'DATABRICKS_HOST'),\n endpoint: required(env, 'DBX_TEST_LAKEBASE_ENDPOINT'),\n workspaceToken: await workspaceToken(env, options.fetchImpl),\n fetchImpl: options.fetchImpl,\n });\n if (credential.expiresAt <= Date.now()) {\n throw new Error('Lakebase credential is already expired');\n }\n return { expiresAt: new Date(credential.expiresAt).toISOString() };\n },\n };\n}\n\n/** Exercise the production provider before and after an explicit credential/pool refresh. */\nexport function lakebaseRoundTripCheck(options: LakebaseCheckOptions = {}): LiveCheck {\n return {\n id: 'lakebase',\n description: 'Lakebase provider query and credential refresh round-trip',\n configured: (env) =>\n Boolean(\n env.DBX_TEST_LAKEBASE_ENDPOINT &&\n env.DBX_TEST_LAKEBASE_HOST &&\n env.DBX_TEST_LAKEBASE_DATABASE &&\n env.DBX_TEST_LAKEBASE_USER,\n ),\n async run({ env }) {\n const provider = createLakebaseTestProvider(env, options);\n try {\n const first = await provider\n .getPool()\n .query<{ dbx_test_ok: number }>('SELECT 1 AS dbx_test_ok');\n if (Number(first.rows[0]?.dbx_test_ok) !== 1) {\n throw new Error('Lakebase round-trip returned an unexpected value');\n }\n await provider.refreshCredentials();\n const second = await provider\n .getPool()\n .query<{ dbx_test_ok: number }>('SELECT 1 AS dbx_test_ok');\n if (Number(second.rows[0]?.dbx_test_ok) !== 1) {\n throw new Error('Lakebase post-refresh round-trip returned an unexpected value');\n }\n return { queries: 2, refreshed: true };\n } finally {\n await provider.close();\n }\n },\n };\n}\n","import { createClientFromEnv } from './workspace-context.js';\n\nexport interface LakebaseControlClient {\n get<T>(path: string, query?: Record<string, string | number | boolean | undefined>): Promise<T>;\n post<T>(\n path: string,\n body?: unknown,\n query?: Record<string, string | number | boolean | undefined>,\n ): Promise<T>;\n request<T>(\n method: 'DELETE',\n path: string,\n body?: unknown,\n query?: Record<string, string | number | boolean | undefined>,\n ): Promise<T>;\n}\n\nexport interface EphemeralLakebaseBranch {\n project: string;\n branch: string;\n branchId: string;\n endpoint: string;\n host: string;\n databaseResource: string;\n database: string;\n createdAt: string;\n expiresAt: string;\n}\n\nexport interface LakebaseBranchOptions {\n env?: Record<string, string | undefined>;\n client?: LakebaseControlClient;\n project?: string;\n branchId: string;\n ttlMs: number;\n pollIntervalMs?: number;\n timeoutMs?: number;\n now?: () => Date;\n}\n\ninterface Operation<T = unknown> {\n name?: string;\n done?: boolean;\n error?: { code?: number; message?: string };\n response?: T;\n}\n\ninterface Branch {\n name: string;\n branch_id?: string;\n create_time?: string;\n status?: { current_state?: string };\n}\n\ninterface Endpoint {\n name: string;\n endpoint_id?: string;\n status?: { hosts?: { host?: string }; current_state?: string };\n}\n\ninterface Database {\n name: string;\n status?: { postgres_database?: string };\n}\n\nconst DEFAULT_POLL_INTERVAL_MS = 2_000;\nconst DEFAULT_TIMEOUT_MS = 5 * 60_000;\n\nexport function resolveLakebaseProject(\n env: Record<string, string | undefined>,\n explicit?: string,\n): string {\n const project = explicit ?? env.DBX_TEST_LAKEBASE_PROJECT;\n if (!project || !/^projects\\/[a-z0-9][a-z0-9-]{0,62}$/.test(project)) {\n throw new Error(\n `Lakebase project must look like projects/fabric-experiments; got '${project ?? ''}'`,\n );\n }\n return project;\n}\n\nexport function toLakebaseBranchId(environmentName: string): string {\n const normalized = environmentName\n .toLowerCase()\n .replace(/[^a-z0-9-]+/g, '-')\n .replace(/^-+|-+$/g, '');\n const prefixed = normalized.startsWith('fx-') ? normalized : `fx-${normalized}`;\n const trimmed = prefixed.slice(0, 63).replace(/-+$/g, '');\n if (!/^fx-[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/.test(trimmed)) {\n throw new Error(`Cannot derive a safe Lakebase branch ID from '${environmentName}'`);\n }\n return trimmed;\n}\n\nexport async function createEphemeralLakebaseBranch(\n options: LakebaseBranchOptions,\n): Promise<EphemeralLakebaseBranch> {\n const env = options.env ?? process.env;\n const client = options.client ?? (createClientFromEnv(env) as LakebaseControlClient);\n const project = resolveLakebaseProject(env, options.project);\n const branchId = toLakebaseBranchId(options.branchId);\n const ttlSeconds = Math.max(60, Math.ceil(options.ttlMs / 1_000));\n const operation = await client.post<Operation<Branch>>(\n `/api/2.0/postgres/${project}/branches`,\n { spec: { ttl: `${ttlSeconds}s` } },\n { branch_id: branchId, replace_existing: false },\n );\n const branch = await waitForOperation(client, operation, options);\n const branchName = branch?.name ?? `${project}/branches/${branchId}`;\n const [endpointResult, databaseResult] = await Promise.all([\n client.get<{ endpoints?: Endpoint[] }>(`/api/2.0/postgres/${branchName}/endpoints`),\n client.get<{ databases?: Database[] }>(`/api/2.0/postgres/${branchName}/databases`),\n ]);\n const endpoint =\n endpointResult.endpoints?.find((item) => item.endpoint_id === 'primary') ??\n endpointResult.endpoints?.[0];\n const database = databaseResult.databases?.[0];\n const host = endpoint?.status?.hosts?.host;\n const postgresDatabase = database?.status?.postgres_database;\n if (!endpoint?.name || !host || !database?.name || !postgresDatabase) {\n throw new Error(`Lakebase branch '${branchName}' did not expose an endpoint and database`);\n }\n const createdAt = branch?.create_time ?? (options.now?.() ?? new Date()).toISOString();\n return {\n project,\n branch: branchName,\n branchId,\n endpoint: endpoint.name,\n host,\n databaseResource: database.name,\n database: postgresDatabase,\n createdAt,\n expiresAt: new Date(Date.parse(createdAt) + ttlSeconds * 1_000).toISOString(),\n };\n}\n\nexport async function deleteEphemeralLakebaseBranch(\n branch: Pick<EphemeralLakebaseBranch, 'branch'>,\n options: Omit<LakebaseBranchOptions, 'branchId' | 'ttlMs' | 'project'> = {},\n): Promise<void> {\n if (!/^projects\\/[a-z0-9-]+\\/branches\\/fx-[a-z0-9-]+$/.test(branch.branch)) {\n throw new Error(`Refusing to delete non-ephemeral Lakebase branch '${branch.branch}'`);\n }\n const env = options.env ?? process.env;\n const client = options.client ?? (createClientFromEnv(env) as LakebaseControlClient);\n const operation = await client.request<Operation>(\n 'DELETE',\n `/api/2.0/postgres/${branch.branch}`,\n undefined,\n { purge: true },\n );\n await waitForOperation(client, operation, options);\n}\n\nasync function waitForOperation<T>(\n client: LakebaseControlClient,\n initial: Operation<T>,\n options: Pick<LakebaseBranchOptions, 'pollIntervalMs' | 'timeoutMs'>,\n): Promise<T | undefined> {\n let operation = initial;\n const deadline = Date.now() + (options.timeoutMs ?? DEFAULT_TIMEOUT_MS);\n while (!operation.done) {\n if (!operation.name) throw new Error('Lakebase operation did not return an operation name');\n if (Date.now() >= deadline) throw new Error(`Lakebase operation '${operation.name}' timed out`);\n await delay(options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS);\n operation = await client.get<Operation<T>>(`/api/2.0/postgres/${operation.name}`);\n }\n if (operation.error) {\n throw new Error(\n `Lakebase operation failed${operation.error.code ? ` (${operation.error.code})` : ''}: ${\n operation.error.message ?? 'unknown error'\n }`,\n );\n }\n return operation.response;\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import { resolveTokenProvider } from './workspace-context.js';\n\nexport async function databricksFetch(\n env: Record<string, string | undefined>,\n pathOrUrl: string,\n init: RequestInit = {},\n fetchImpl: typeof fetch = fetch,\n): Promise<Response> {\n const host = env.DATABRICKS_HOST?.replace(/\\/$/, '');\n if (!host) throw new Error('DATABRICKS_HOST is required');\n const provider = resolveTokenProvider(host, env, fetchImpl);\n const token = typeof provider === 'string' ? provider : await provider();\n const headers = new Headers(init.headers);\n headers.set('authorization', `Bearer ${token}`);\n const response = await fetchImpl(\n /^https?:\\/\\//.test(pathOrUrl) ? pathOrUrl : `${host}${pathOrUrl}`,\n {\n ...init,\n headers,\n },\n );\n if (!response.ok) {\n const body = await response.text();\n throw new Error(\n `Databricks request failed: ${response.status} ${response.statusText}: ${body.slice(0, 500)}`,\n );\n }\n return response;\n}\n","import { databricksFetch } from './databricks-http.js';\nimport type { LiveCheck } from './live-suite.js';\n\nfunction csv(value: string | undefined): string[] {\n return (value ?? '')\n .split(',')\n .map((item) => item.trim())\n .filter(Boolean);\n}\n\n/** Assert secret key metadata only; values are never requested. */\nexport function secretScopeCheck(): LiveCheck {\n return {\n id: 'secrets',\n description: 'Databricks secret scope contains expected keys',\n configured: (env) => Boolean(env.DBX_TEST_SECRET_SCOPE && env.DBX_TEST_SECRET_KEYS),\n async run({ env, client }) {\n const scope = env.DBX_TEST_SECRET_SCOPE as string;\n const expected = csv(env.DBX_TEST_SECRET_KEYS);\n const response = await client.get<{ secrets?: { key?: string }[] }>('/api/2.0/secrets/list', {\n scope,\n });\n const actual = new Set((response.secrets ?? []).map((secret) => secret.key).filter(Boolean));\n const missing = expected.filter((key) => !actual.has(key));\n if (missing.length > 0) {\n throw new Error(`Secret scope ${scope} is missing keys: ${missing.join(', ')}`);\n }\n return { scope, expectedKeys: expected.length };\n },\n };\n}\n\nexport interface AppHealthCheckOptions {\n fetchImpl?: typeof fetch;\n}\n\n/** Verify app state, resource bindings, and the gateway-authenticated application health route. */\nexport function appHealthCheck(options: AppHealthCheckOptions = {}): LiveCheck {\n return {\n id: 'app',\n description: 'Databricks App is running, bound, and healthy',\n configured: (env) => Boolean(env.DBX_TEST_APP_NAME),\n async run({ env, client }) {\n const name = env.DBX_TEST_APP_NAME as string;\n const app = await client.get<{\n app_status?: { state?: string };\n resources?: { name?: string }[];\n url?: string;\n app_url?: string;\n }>(`/api/2.0/apps/${encodeURIComponent(name)}`);\n if (app.app_status?.state !== 'RUNNING') {\n throw new Error(`Databricks App ${name} is ${app.app_status?.state ?? 'UNKNOWN'}`);\n }\n const expected = csv(env.DBX_TEST_APP_RESOURCES);\n const actual = new Set(\n (app.resources ?? []).map((resource) => resource.name).filter(Boolean),\n );\n const missing = expected.filter((resource) => !actual.has(resource));\n if (missing.length > 0) {\n throw new Error(\n `Databricks App ${name} is missing resource bindings: ${missing.join(', ')}`,\n );\n }\n const appUrl = env.DBX_TEST_APP_URL ?? app.url ?? app.app_url;\n if (!appUrl) throw new Error(`Databricks App ${name} returned no URL`);\n const healthUrl = new URL('/api/healthz', appUrl).toString();\n const response = await databricksFetch(env, healthUrl, {}, options.fetchImpl);\n const health = (await response.json()) as { ok?: boolean; status?: string };\n if (health.ok !== true && health.status !== 'ok') {\n throw new Error(`Databricks App ${name} health probe did not report ok`);\n }\n return { name, bindings: actual.size, health: 'ok' };\n },\n };\n}\n","import { randomUUID } from 'node:crypto';\nimport { databricksFetch } from './databricks-http.js';\nimport type { LiveCheck } from './live-suite.js';\n\nexport interface VolumeIOCheckOptions {\n fetchImpl?: typeof fetch;\n randomId?: () => string;\n}\n\nexport function normalizeVolumeRoot(value: string): string {\n const normalized = value.replace(/\\/$/, '');\n if (!/^\\/Volumes\\/[^/]+\\/[^/]+\\/[^/]+$/.test(normalized)) {\n throw new Error('DBX_TEST_VOLUME must be /Volumes/<catalog>/<schema>/<volume>');\n }\n return normalized;\n}\n\nexport async function ensureVolumeDirectory(\n env: Record<string, string | undefined>,\n directory: string,\n fetchImpl?: typeof fetch,\n): Promise<void> {\n await databricksFetch(env, `/api/2.0/fs/directories${directory}`, { method: 'PUT' }, fetchImpl);\n}\n\nexport async function uploadVolumeFile(\n env: Record<string, string | undefined>,\n path: string,\n body: BodyInit | Uint8Array,\n fetchImpl?: typeof fetch,\n): Promise<void> {\n await databricksFetch(\n env,\n `/api/2.0/fs/files${path}`,\n { method: 'PUT', body: body as BodyInit },\n fetchImpl,\n );\n}\n\nexport async function deleteVolumeFile(\n env: Record<string, string | undefined>,\n path: string,\n fetchImpl?: typeof fetch,\n): Promise<void> {\n await databricksFetch(env, `/api/2.0/fs/files${path}`, { method: 'DELETE' }, fetchImpl);\n}\n\n/** Upload, download, and delete a small probe through the Databricks Files API. */\nexport function volumeIOCheck(options: VolumeIOCheckOptions = {}): LiveCheck {\n return {\n id: 'volume-io',\n description: 'Unity Catalog volume Files API round-trip',\n configured: (env) => Boolean(env.DBX_TEST_VOLUME),\n async run({ env }) {\n const root = normalizeVolumeRoot(env.DBX_TEST_VOLUME as string);\n const prefix = (env.DBX_TEST_ENV_NAME ?? 'fx-live').replace(/[^A-Za-z0-9_.-]/g, '_');\n const id = (options.randomId ?? randomUUID)();\n const directory = `${root}/${prefix}`;\n const file = `${directory}/probe-${id}.txt`;\n const filePath = `/api/2.0/fs/files${file}`;\n const body = new TextEncoder().encode(`fabric-experiments-volume-probe:${id}`);\n await ensureVolumeDirectory(env, directory, options.fetchImpl);\n try {\n await uploadVolumeFile(env, file, body, options.fetchImpl);\n const downloaded = await databricksFetch(env, filePath, {}, options.fetchImpl);\n const actual = new Uint8Array(await downloaded.arrayBuffer());\n if (actual.length !== body.length || actual.some((value, index) => value !== body[index])) {\n throw new Error('Volume round-trip returned different bytes');\n }\n return { volume: root, bytes: body.length };\n } finally {\n await deleteVolumeFile(env, file, options.fetchImpl).catch(() => undefined);\n }\n },\n };\n}\n","import { randomUUID } from 'node:crypto';\nimport { readFile } from 'node:fs/promises';\nimport { basename, resolve } from 'node:path';\nimport type { LiveCheck } from './live-suite.js';\nimport { waitForPipelineUpdate } from './pollers.js';\nimport {\n deleteVolumeFile,\n ensureVolumeDirectory,\n normalizeVolumeRoot,\n uploadVolumeFile,\n} from './volume-checks.js';\n\nexport interface AutoLoaderCheckOptions {\n fetchImpl?: typeof fetch;\n fixtureBody?: Uint8Array;\n randomId?: () => string;\n}\n\n/** Exercise Files API -> isolated Lakeflow pipeline -> Delta output. */\nexport function autoLoaderIngestionCheck(options: AutoLoaderCheckOptions = {}): LiveCheck {\n return {\n id: 'autoloader',\n description: 'Isolated Auto Loader fixture ingestion reaches Delta without rescued rows',\n configured: (env) =>\n Boolean(\n env.DBX_TEST_AUTOLOADER_PIPELINE_ID &&\n env.DBX_TEST_AUTOLOADER_TABLE &&\n env.DBX_TEST_AUTOLOADER_FIXTURE &&\n env.DBX_TEST_VOLUME,\n ),\n async run({ env, client, warehouse }) {\n const pipelineId = env.DBX_TEST_AUTOLOADER_PIPELINE_ID as string;\n if (pipelineId === env.DBX_TEST_PIPELINE_ID) {\n throw new Error('DBX_TEST_AUTOLOADER_PIPELINE_ID must not be the production pipeline');\n }\n const root = normalizeVolumeRoot(env.DBX_TEST_VOLUME as string);\n const fixturePath = env.DBX_TEST_AUTOLOADER_FIXTURE as string;\n const body = options.fixtureBody ?? new Uint8Array(await readFile(resolve(fixturePath)));\n const id = (options.randomId ?? randomUUID)();\n const runName = (env.DBX_TEST_ENV_NAME ?? 'autoloader').replace(/[^A-Za-z0-9_.-]/g, '_');\n const directory = `${root}/exposures/${runName}/${id}`;\n const destination = `${directory}/${basename(fixturePath)}`;\n await ensureVolumeDirectory(env, directory, options.fetchImpl);\n try {\n await uploadVolumeFile(env, destination, body, options.fetchImpl);\n const submitted = await client.post<{ update_id?: string }>(\n `/api/2.0/pipelines/${encodeURIComponent(pipelineId)}/updates`,\n { full_refresh: true },\n );\n if (!submitted.update_id) throw new Error('Auto Loader pipeline returned no update_id');\n await waitForPipelineUpdate(client, pipelineId, submitted.update_id, {\n timeoutMs: Number(env.DBX_TEST_TIMEOUT_MS ?? 900_000),\n pollIntervalMs: Number(env.DBX_TEST_POLL_INTERVAL_MS ?? 10_000),\n });\n const table = env.DBX_TEST_AUTOLOADER_TABLE as string;\n const rows = await warehouse.query(\n `SELECT COUNT(*) AS n, SUM(CASE WHEN _rescued_data IS NOT NULL THEN 1 ELSE 0 END) AS rescued FROM ${table}`,\n );\n const count = Number(rows[0]?.n ?? 0);\n const rescued = Number(rows[0]?.rescued ?? 0);\n if (count < 1) throw new Error(`Auto Loader produced no rows in ${table}`);\n if (rescued !== 0)\n throw new Error(`Auto Loader produced ${rescued} rescued rows in ${table}`);\n return { pipelineId, table, rows: count, rescued };\n } finally {\n await deleteVolumeFile(env, destination, options.fetchImpl).catch(() => undefined);\n }\n },\n };\n}\n","import { randomBytes, randomUUID } from 'node:crypto';\nimport { waitForDatabricksRun } from '@fabric-harness/databricks';\nimport type { LiveCheck } from './live-suite.js';\n\nfunction safeName(prefix: string): string {\n return `${prefix}_${randomUUID().replaceAll('-', '_')}`;\n}\n\n/** Measure the real Statement Execution path and fail when its p95 exceeds the declared budget. */\nexport function performanceBudgetCheck(): LiveCheck {\n return {\n id: 'performance',\n description: 'SQL Statement Execution p95 stays within the configured latency budget',\n configured: (env) => Boolean(env.DBX_TEST_PERFORMANCE_P95_MS),\n async run({ env, warehouse }) {\n const budgetMs = Number(env.DBX_TEST_PERFORMANCE_P95_MS);\n const runs = Number(env.DBX_TEST_PERFORMANCE_RUNS ?? 7);\n if (!Number.isFinite(budgetMs) || budgetMs <= 0) {\n throw new Error('DBX_TEST_PERFORMANCE_P95_MS must be a positive number');\n }\n if (!Number.isInteger(runs) || runs < 3 || runs > 100) {\n throw new Error('DBX_TEST_PERFORMANCE_RUNS must be an integer from 3 to 100');\n }\n await warehouse.query('SELECT 1 AS warmup');\n const durations: number[] = [];\n for (let index = 0; index < runs; index += 1) {\n const started = performance.now();\n await warehouse.query('SELECT 1 AS performance_probe');\n durations.push(performance.now() - started);\n }\n durations.sort((left, right) => left - right);\n const p95 = durations[Math.ceil(durations.length * 0.95) - 1] ?? 0;\n if (p95 > budgetMs) {\n throw new Error(`SQL p95 ${Math.round(p95)}ms exceeded ${budgetMs}ms budget`);\n }\n return {\n runs,\n p50Ms: Math.round(durations[Math.floor(durations.length * 0.5)] ?? 0),\n p95Ms: Math.round(p95),\n budgetMs,\n };\n },\n };\n}\n\n/** Prove a failed statement does not poison the session or the next workload. */\nexport function failureRecoveryCheck(): LiveCheck {\n return {\n id: 'failure-recovery',\n description: 'A failed statement is isolated and a subsequent statement recovers',\n configured: (env) => Boolean(env.DATABRICKS_WAREHOUSE_ID || env.DATABRICKS_HTTP_PATH),\n async run({ warehouse }) {\n let failedAsExpected = false;\n try {\n await warehouse.query('SELECT * FROM __fabric_experiments_expected_missing_table__');\n } catch {\n failedAsExpected = true;\n }\n if (!failedAsExpected) throw new Error('Injected failure unexpectedly succeeded');\n const rows = await warehouse.query('SELECT 1 AS recovered');\n if (Number(rows[0]?.recovered) !== 1) {\n throw new Error('Statement execution did not recover after the injected failure');\n }\n return { injectedFailure: true, recovered: true };\n },\n };\n}\n\n/** Rotate a disposable secret key and remove it. Values are never returned or written to evidence. */\nexport interface SecretRotationCheckOptions {\n randomId?: () => string;\n}\n\nexport function secretRotationCheck(options: SecretRotationCheckOptions = {}): LiveCheck {\n return {\n id: 'secret-rotation',\n description: 'Databricks secret put, overwrite, metadata verification, and cleanup',\n configured: (env) => Boolean(env.DBX_TEST_ROTATION_SECRET_SCOPE),\n async run({ env, client }) {\n const scope = env.DBX_TEST_ROTATION_SECRET_SCOPE as string;\n const key = options.randomId?.() ?? safeName('fx_rotation_probe');\n const put = async (value: string) =>\n client.post('/api/2.0/secrets/put', { scope, key, string_value: value });\n try {\n await put(randomBytes(32).toString('base64url'));\n await put(randomBytes(32).toString('base64url'));\n const listed = await client.get<{ secrets?: { key?: string }[] }>('/api/2.0/secrets/list', {\n scope,\n });\n if (!(listed.secrets ?? []).some((secret) => secret.key === key)) {\n throw new Error(`Rotated secret metadata was not visible in scope ${scope}`);\n }\n return { scope, rotated: true, cleanedUp: true };\n } finally {\n await client.post('/api/2.0/secrets/delete', { scope, key }).catch(() => undefined);\n }\n },\n };\n}\n\n/** Exercise a complete Delta backup, destructive loss, and restore cycle in the scratch schema. */\nexport function backupRestoreCheck(): LiveCheck {\n return {\n id: 'backup-restore',\n description: 'Delta DEEP CLONE backup restores a dropped scratch table',\n configured: (env) => Boolean(env.DATABRICKS_WAREHOUSE_ID || env.DATABRICKS_HTTP_PATH),\n async run({ warehouse }) {\n const source = warehouse.qual(safeName('backup_source'));\n const backup = warehouse.qual(safeName('backup_clone'));\n try {\n await warehouse.exec(`CREATE TABLE ${source} USING DELTA AS SELECT 7 AS value`);\n await warehouse.exec(`CREATE TABLE ${backup} DEEP CLONE ${source}`);\n await warehouse.exec(`DROP TABLE ${source}`);\n await warehouse.exec(`CREATE TABLE ${source} DEEP CLONE ${backup}`);\n const rows = await warehouse.query(`SELECT value FROM ${source}`);\n if (Number(rows[0]?.value) !== 7) throw new Error('Restored Delta table lost its data');\n return { restoredRows: rows.length, deepClone: true };\n } finally {\n await warehouse.exec(`DROP TABLE IF EXISTS ${source}`).catch(() => undefined);\n await warehouse.exec(`DROP TABLE IF EXISTS ${backup}`).catch(() => undefined);\n }\n },\n };\n}\n\n/** Prove Delta time-travel rollback returns a corrupted scratch table to its known-good version. */\nexport function rollbackCheck(): LiveCheck {\n return {\n id: 'rollback',\n description: 'Delta time-travel rollback restores a known-good table version',\n configured: (env) => Boolean(env.DATABRICKS_WAREHOUSE_ID || env.DATABRICKS_HTTP_PATH),\n async run({ warehouse }) {\n const table = warehouse.qual(safeName('rollback_probe'));\n try {\n await warehouse.exec(`CREATE TABLE ${table} (value INT) USING DELTA`);\n await warehouse.exec(`INSERT INTO ${table} VALUES (1)`);\n const history = await warehouse.query(`DESCRIBE HISTORY ${table} LIMIT 1`);\n const knownGoodVersion = Number(history[0]?.version);\n if (!Number.isInteger(knownGoodVersion)) {\n throw new Error('Delta history did not return a known-good version');\n }\n await warehouse.exec(`INSERT INTO ${table} VALUES (999)`);\n await warehouse.exec(`RESTORE TABLE ${table} TO VERSION AS OF ${knownGoodVersion}`);\n const rows = await warehouse.query(`SELECT value FROM ${table} ORDER BY value`);\n if (rows.length !== 1 || Number(rows[0]?.value) !== 1) {\n throw new Error('Delta rollback did not restore the known-good contents');\n }\n return { knownGoodVersion, restoredRows: rows.length };\n } finally {\n await warehouse.exec(`DROP TABLE IF EXISTS ${table}`).catch(() => undefined);\n }\n },\n };\n}\n\n/** Certify that the configured SQL warehouse is serverless and usable by the test identity. */\nexport function serverlessComputeCheck(): LiveCheck {\n return {\n id: 'azure-serverless',\n description: 'Azure Databricks serverless SQL warehouse is enabled and executes SQL',\n configured: (env) => Boolean(env.DATABRICKS_WAREHOUSE_ID),\n async run({ env, client, warehouse }) {\n const id = env.DATABRICKS_WAREHOUSE_ID as string;\n const details = await client.get<{\n enable_serverless_compute?: boolean;\n state?: string;\n name?: string;\n }>(`/api/2.0/sql/warehouses/${encodeURIComponent(id)}`);\n if (details.enable_serverless_compute !== true) {\n throw new Error(`SQL warehouse ${id} is not configured for serverless compute`);\n }\n const rows = await warehouse.query('SELECT current_catalog() AS catalog');\n return { warehouseId: id, name: details.name, state: details.state, rows: rows.length };\n },\n };\n}\n\n/** Launch a disposable classic job cluster and require the shared notebook probe to succeed. */\nexport function classicComputeCheck(): LiveCheck {\n return {\n id: 'azure-classic',\n description: 'Azure Databricks classic job cluster starts and completes a notebook workload',\n configured: (env) =>\n Boolean(\n env.DBX_TEST_CLASSIC_SPARK_VERSION &&\n env.DBX_TEST_CLASSIC_NODE_TYPE &&\n env.DBX_TEST_NOTEBOOK_PATH,\n ),\n async run({ env, client }) {\n const numWorkers = Number(env.DBX_TEST_CLASSIC_WORKERS ?? 1);\n const alternateNodeTypes = (env.DBX_TEST_CLASSIC_ALTERNATE_NODE_TYPES ?? '')\n .split(',')\n .map((value) => value.trim())\n .filter(Boolean);\n const singleNode = numWorkers === 0;\n const submitted = await client.post<{ run_id?: number }>('/api/2.1/jobs/runs/submit', {\n run_name: `fabric-experiments-classic-certification-${Date.now()}`,\n tasks: [\n {\n task_key: 'classic_notebook',\n new_cluster: {\n spark_version: env.DBX_TEST_CLASSIC_SPARK_VERSION,\n node_type_id: env.DBX_TEST_CLASSIC_NODE_TYPE,\n num_workers: numWorkers,\n data_security_mode: env.DBX_TEST_CLASSIC_SECURITY_MODE ?? 'SINGLE_USER',\n ...(env.DBX_TEST_CLASSIC_SINGLE_USER_NAME\n ? { single_user_name: env.DBX_TEST_CLASSIC_SINGLE_USER_NAME }\n : {}),\n ...(singleNode\n ? {\n spark_conf: {\n 'spark.databricks.cluster.profile': 'singleNode',\n 'spark.master': 'local[*]',\n },\n custom_tags: { ResourceClass: 'SingleNode' },\n }\n : {}),\n ...(alternateNodeTypes.length\n ? {\n worker_node_type_flexibility: {\n alternate_node_type_ids: alternateNodeTypes,\n },\n driver_node_type_flexibility: {\n alternate_node_type_ids: alternateNodeTypes,\n },\n }\n : {}),\n },\n notebook_task: { notebook_path: env.DBX_TEST_NOTEBOOK_PATH },\n },\n ],\n });\n if (!submitted.run_id) throw new Error('Classic compute submit returned no run_id');\n const run = await waitForDatabricksRun(client as never, submitted.run_id, {\n timeoutMs: Number(env.DBX_TEST_CLASSIC_TIMEOUT_MS ?? 1_800_000),\n pollIntervalMs: Number(env.DBX_TEST_POLL_INTERVAL_MS ?? 15_000),\n });\n const result = (run as { state?: { result_state?: string } }).state?.result_state;\n if (result !== 'SUCCESS') {\n const message = (run as { state?: { state_message?: string } }).state?.state_message;\n throw new Error(\n `Classic compute run ${submitted.run_id} ended in ${result ?? 'UNKNOWN'}${message ? `: ${message}` : ''}`,\n );\n }\n return {\n runId: submitted.run_id,\n sparkVersion: env.DBX_TEST_CLASSIC_SPARK_VERSION,\n nodeType: env.DBX_TEST_CLASSIC_NODE_TYPE,\n };\n },\n };\n}\n","import type {\n DefinedLiveSuite,\n LiveCheck,\n LiveEvidence,\n LiveSuiteRuntime,\n TargetPackEvidenceMetadata,\n TargetPackMaturity,\n} from './live-suite.js';\nimport { defineLiveSuite } from './live-suite.js';\n\nexport interface TargetPackRequirement {\n id: string;\n description: string;\n /** At least one named environment variable must be present. */\n anyOf: readonly string[];\n required?: boolean;\n secret?: boolean;\n}\n\nexport interface TargetPackSpec {\n id: string;\n name: string;\n description: string;\n version: string;\n maturity: TargetPackMaturity;\n capabilities: readonly string[];\n checks: readonly LiveCheck[] | (() => readonly LiveCheck[]);\n requiredChecks?: readonly string[];\n requirements?: readonly TargetPackRequirement[];\n docsUrl?: string;\n certificationScopes?: readonly string[];\n}\n\nexport interface TargetPack extends Omit<TargetPackSpec, 'checks'> {\n checks(): readonly LiveCheck[];\n}\n\nexport interface TargetPackDoctorRequirement {\n id: string;\n description: string;\n satisfied: boolean;\n required: boolean;\n variables: string[];\n}\n\nexport interface TargetPackDoctorCheck {\n id: string;\n description: string;\n configured: boolean;\n required: boolean;\n}\n\nexport interface TargetPackDoctorResult {\n pack: Pick<TargetPack, 'id' | 'name' | 'version' | 'maturity'>;\n ready: boolean;\n requirements: TargetPackDoctorRequirement[];\n checks: TargetPackDoctorCheck[];\n missingRequirements: string[];\n missingRequiredChecks: string[];\n}\n\nexport interface RunTargetPackOptions {\n env?: Record<string, string | undefined>;\n requiredChecks?: readonly string[];\n evidencePath?: string;\n junitPath?: string;\n}\n\nexport interface DefinedTargetPackRun {\n pack: TargetPack;\n run(runtime?: LiveSuiteRuntime): Promise<LiveEvidence | undefined>;\n}\n\nconst TARGET_PACK_ID = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\n\nexport function defineTargetPack(spec: TargetPackSpec): TargetPack {\n if (!TARGET_PACK_ID.test(spec.id)) {\n throw new Error(`Target pack id '${spec.id}' must be lowercase kebab-case`);\n }\n if (!spec.name.trim()) throw new Error(`Target pack '${spec.id}' requires a name`);\n if (!/^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?$/.test(spec.version)) {\n throw new Error(\n `Target pack '${spec.id}' version '${spec.version}' is not semantic versioning`,\n );\n }\n if (spec.capabilities.length === 0) {\n throw new Error(`Target pack '${spec.id}' must declare at least one capability`);\n }\n\n const createChecks: () => readonly LiveCheck[] =\n typeof spec.checks === 'function' ? spec.checks : () => spec.checks as readonly LiveCheck[];\n const validateChecks = (): readonly LiveCheck[] => {\n const checks = [...createChecks()];\n const ids = new Set<string>();\n for (const check of checks) {\n if (!check.id.trim())\n throw new Error(`Target pack '${spec.id}' contains a check without an id`);\n if (ids.has(check.id)) {\n throw new Error(`Target pack '${spec.id}' contains duplicate check '${check.id}'`);\n }\n ids.add(check.id);\n }\n for (const required of spec.requiredChecks ?? []) {\n if (!ids.has(required)) {\n throw new Error(`Target pack '${spec.id}' requires unknown check '${required}'`);\n }\n }\n return checks;\n };\n validateChecks();\n\n return Object.freeze({\n ...spec,\n capabilities: Object.freeze([...spec.capabilities]),\n requiredChecks: Object.freeze([...(spec.requiredChecks ?? [])]),\n requirements: Object.freeze([...(spec.requirements ?? [])]),\n certificationScopes: Object.freeze([...(spec.certificationScopes ?? [])]),\n checks: validateChecks,\n });\n}\n\nexport function createTargetPackRegistry(\n packs: readonly TargetPack[],\n): ReadonlyMap<string, TargetPack> {\n const registry = new Map<string, TargetPack>();\n for (const pack of packs) {\n if (registry.has(pack.id)) throw new Error(`Duplicate target pack '${pack.id}'`);\n registry.set(pack.id, pack);\n }\n return registry;\n}\n\nexport function doctorTargetPack(\n pack: TargetPack,\n env: Record<string, string | undefined> = process.env,\n requiredChecks: readonly string[] = pack.requiredChecks ?? [],\n): TargetPackDoctorResult {\n const requirements = (pack.requirements ?? []).map((requirement) => ({\n id: requirement.id,\n description: requirement.description,\n satisfied: requirement.anyOf.some((name) => Boolean(env[name]?.trim())),\n required: requirement.required !== false,\n variables: [...requirement.anyOf],\n }));\n const required = new Set(requiredChecks);\n const checks = pack.checks().map((check) => ({\n id: check.id,\n description: check.description,\n configured: check.configured ? check.configured(env) : true,\n required: required.has(check.id),\n }));\n const known = new Set(checks.map((check) => check.id));\n const missingRequirements = requirements\n .filter((requirement) => requirement.required && !requirement.satisfied)\n .map((requirement) => requirement.id);\n const missingRequiredChecks = [\n ...checks.filter((check) => check.required && !check.configured).map((check) => check.id),\n ...[...required].filter((id) => !known.has(id)),\n ];\n return {\n pack: {\n id: pack.id,\n name: pack.name,\n version: pack.version,\n maturity: pack.maturity,\n },\n ready: missingRequirements.length === 0 && missingRequiredChecks.length === 0,\n requirements,\n checks,\n missingRequirements,\n missingRequiredChecks,\n };\n}\n\nexport function defineTargetPackRun(\n pack: TargetPack,\n options: RunTargetPackOptions = {},\n): DefinedTargetPackRun {\n const env = options.env ?? process.env;\n const requiredChecks = [...(options.requiredChecks ?? pack.requiredChecks ?? [])];\n const doctor = doctorTargetPack(pack, env, requiredChecks);\n if (!doctor.ready) {\n const missing = [...doctor.missingRequirements, ...doctor.missingRequiredChecks].join(', ');\n throw new Error(`Target pack '${pack.id}' is not configured: ${missing}`);\n }\n const targetPack = evidenceMetadata(pack, env);\n const suite: DefinedLiveSuite = defineLiveSuite({\n checks: pack.checks(),\n required: requiredChecks,\n env,\n evidencePath: options.evidencePath,\n junitPath: options.junitPath,\n targetPack,\n });\n return { pack, run: (runtime) => suite.run(runtime) };\n}\n\nexport async function runTargetPack(\n pack: TargetPack,\n options: RunTargetPackOptions = {},\n runtime?: LiveSuiteRuntime,\n): Promise<LiveEvidence | undefined> {\n return defineTargetPackRun(pack, options).run(runtime);\n}\n\nfunction evidenceMetadata(\n pack: TargetPack,\n env: Record<string, string | undefined>,\n): TargetPackEvidenceMetadata {\n return {\n id: pack.id,\n name: pack.name,\n version: pack.version,\n maturity: pack.maturity,\n capabilities: [...pack.capabilities],\n ...(pack.docsUrl ? { docsUrl: pack.docsUrl } : {}),\n certificationScopes: [...(pack.certificationScopes ?? [])],\n target: compact({\n cloud: env.DBX_TEST_CLOUD,\n region: env.DBX_TEST_REGION,\n workspace: env.DATABRICKS_HOST,\n runtime: env.DBX_TEST_RUNTIME_VERSION,\n compute: env.DBX_TEST_COMPUTE,\n }),\n };\n}\n\nfunction compact<T extends Record<string, string | undefined>>(\n value: T,\n): {\n [K in keyof T]?: string;\n} {\n return Object.fromEntries(\n Object.entries(value).filter((entry): entry is [string, string] => Boolean(entry[1])),\n ) as { [K in keyof T]?: string };\n}\n","import { autoLoaderIngestionCheck } from './autoloader-checks.js';\nimport { lakebaseCredentialCheck, lakebaseRoundTripCheck } from './lakebase-checks.js';\nimport {\n dbtBuildCheck,\n deltaContractCheck,\n jobRunCheck,\n notebookSubmitCheck,\n pipelineRefreshCheck,\n restrictedPrincipalCheck,\n sqlRoundTripCheck,\n unityCatalogAccessCheck,\n} from './live-checks.js';\nimport { appHealthCheck, secretScopeCheck } from './platform-checks.js';\nimport {\n backupRestoreCheck,\n classicComputeCheck,\n failureRecoveryCheck,\n performanceBudgetCheck,\n rollbackCheck,\n secretRotationCheck,\n serverlessComputeCheck,\n} from './resilience-checks.js';\nimport { type TargetPack, defineTargetPack } from './target-packs.js';\nimport { volumeIOCheck } from './volume-checks.js';\n\nconst DOCS = 'https://experiments.fabric.pro/docs/testing/target-packs/';\nconst AZURE_SCOPE = 'Azure Databricks live-gated; see certification evidence for exact runtime';\n\nconst workspaceRequirement = {\n id: 'workspace',\n description: 'Databricks workspace host',\n anyOf: ['DATABRICKS_HOST'],\n} as const;\n\nconst authRequirement = {\n id: 'authentication',\n description: 'Databricks OAuth, OIDC, bearer, or PAT authentication',\n anyOf: [\n 'DATABRICKS_BEARER',\n 'DATABRICKS_TOKEN',\n 'DATABRICKS_CLIENT_ID',\n 'DATABRICKS_OIDC_TOKEN',\n 'DATABRICKS_OIDC_TOKEN_FILEPATH',\n ],\n secret: true,\n} as const;\n\nconst warehouseRequirement = {\n id: 'warehouse',\n description: 'SQL warehouse ID or HTTP path',\n anyOf: ['DATABRICKS_WAREHOUSE_ID', 'DATABRICKS_HTTP_PATH'],\n} as const;\n\nexport function createSqlDeltaFoundationPack(): TargetPack {\n return defineTargetPack({\n id: 'sql-delta',\n name: 'SQL and Delta foundation',\n description:\n 'SQL Statement Execution, Delta contracts, performance, recovery, backup and rollback.',\n version: '1.0.0',\n maturity: 'live-gated',\n capabilities: [\n 'sql.statement-execution',\n 'delta.contract',\n 'delta.time-travel',\n 'performance.sql',\n 'recovery.sql',\n 'backup-restore.delta',\n 'rollback.delta',\n ],\n checks: () => [\n restrictedPrincipalCheck(),\n sqlRoundTripCheck(),\n deltaContractCheck(),\n serverlessComputeCheck(),\n performanceBudgetCheck(),\n failureRecoveryCheck(),\n backupRestoreCheck(),\n rollbackCheck(),\n ],\n requiredChecks: ['sql'],\n requirements: [workspaceRequirement, authRequirement, warehouseRequirement],\n docsUrl: `${DOCS}#sql-and-delta-foundation`,\n certificationScopes: [AZURE_SCOPE],\n });\n}\n\nexport function createLakeflowFoundationPack(): TargetPack {\n return defineTargetPack({\n id: 'lakeflow-ingestion',\n name: 'Lakeflow ingestion foundation',\n description: 'Lakeflow refresh, Volumes, Auto Loader ingestion and rescued-row evidence.',\n version: '1.0.0',\n maturity: 'live-gated',\n capabilities: [\n 'lakeflow.refresh',\n 'autoloader.ingestion',\n 'volumes.files',\n 'delta.rescued-data',\n ],\n checks: () => [\n restrictedPrincipalCheck(),\n pipelineRefreshCheck(),\n volumeIOCheck(),\n autoLoaderIngestionCheck(),\n ],\n requiredChecks: ['pipeline'],\n requirements: [workspaceRequirement, authRequirement],\n docsUrl: `${DOCS}#lakeflow-ingestion-foundation`,\n certificationScopes: [AZURE_SCOPE],\n });\n}\n\nexport function createJobsCodeFoundationPack(): TargetPack {\n return defineTargetPack({\n id: 'jobs-code',\n name: 'Jobs and code foundation',\n description: 'Jobs, notebooks, dbt, serverless compute and classic compute probes.',\n version: '1.0.0',\n maturity: 'live-gated',\n capabilities: [\n 'jobs.run-now',\n 'jobs.submit.notebook',\n 'jobs.submit.dbt',\n 'compute.serverless',\n 'compute.classic',\n ],\n checks: () => [\n restrictedPrincipalCheck(),\n jobRunCheck(),\n notebookSubmitCheck(),\n dbtBuildCheck(),\n serverlessComputeCheck(),\n classicComputeCheck(),\n ],\n requiredChecks: ['jobs'],\n requirements: [workspaceRequirement, authRequirement],\n docsUrl: `${DOCS}#jobs-and-code-foundation`,\n certificationScopes: [AZURE_SCOPE],\n });\n}\n\nexport function createUnityStorageFoundationPack(): TargetPack {\n return defineTargetPack({\n id: 'unity-storage',\n name: 'Unity Catalog and storage foundation',\n description: 'Unity Catalog allow/deny, Volumes, secret metadata and secret rotation.',\n version: '1.0.0',\n maturity: 'live-gated',\n capabilities: [\n 'unity-catalog.permissions',\n 'volumes.files',\n 'secrets.metadata',\n 'secrets.rotation',\n ],\n checks: () => [\n restrictedPrincipalCheck(),\n unityCatalogAccessCheck(),\n volumeIOCheck(),\n secretScopeCheck(),\n secretRotationCheck(),\n ],\n requiredChecks: ['uc-grants'],\n requirements: [workspaceRequirement, authRequirement, warehouseRequirement],\n docsUrl: `${DOCS}#unity-catalog-and-storage-foundation`,\n certificationScopes: [AZURE_SCOPE],\n });\n}\n\nexport function createAppsOperationalFoundationPack(): TargetPack {\n return defineTargetPack({\n id: 'apps-operational',\n name: 'Apps and operational data foundation',\n description: 'Databricks Apps resources and health plus Lakebase OAuth and pool refresh.',\n version: '1.0.0',\n maturity: 'live-gated',\n capabilities: [\n 'apps.health',\n 'apps.resources',\n 'lakebase.credentials',\n 'lakebase.round-trip',\n 'lakebase.pool-refresh',\n ],\n checks: () => [\n restrictedPrincipalCheck(),\n appHealthCheck(),\n lakebaseCredentialCheck(),\n lakebaseRoundTripCheck(),\n ],\n requiredChecks: ['app'],\n requirements: [workspaceRequirement, authRequirement],\n docsUrl: `${DOCS}#apps-and-operational-data-foundation`,\n certificationScopes: [AZURE_SCOPE],\n });\n}\n\nexport function createFoundationTargetPacks(): readonly TargetPack[] {\n return [\n createSqlDeltaFoundationPack(),\n createLakeflowFoundationPack(),\n createJobsCodeFoundationPack(),\n createUnityStorageFoundationPack(),\n createAppsOperationalFoundationPack(),\n ];\n}\n\nexport const foundationTargetPacks = createFoundationTargetPacks();\n","import { waitForDatabricksRun } from '@fabric-harness/databricks';\nimport type { LiveCheck } from './live-suite.js';\nimport type { WorkspaceClientLike } from './workspace-context.js';\n\nexport interface JobTaskDependency {\n task_key: string;\n outcome?: string;\n}\n\nexport interface JobTaskBase {\n task_key: string;\n depends_on?: JobTaskDependency[];\n run_if?:\n | 'ALL_SUCCESS'\n | 'AT_LEAST_ONE_SUCCESS'\n | 'NONE_FAILED'\n | 'ALL_DONE'\n | 'AT_LEAST_ONE_FAILED'\n | 'ALL_FAILED';\n timeout_seconds?: number;\n max_retries?: number;\n min_retry_interval_millis?: number;\n retry_on_timeout?: boolean;\n existing_cluster_id?: string;\n job_cluster_key?: string;\n environment_key?: string;\n}\n\nexport interface NotebookJobTask extends JobTaskBase {\n notebook_task: {\n notebook_path: string;\n base_parameters?: Record<string, string>;\n source?: 'WORKSPACE' | 'GIT';\n };\n}\n\nexport interface PythonWheelJobTask extends JobTaskBase {\n python_wheel_task: {\n package_name: string;\n entry_point: string;\n parameters?: string[];\n named_parameters?: Record<string, string>;\n };\n}\n\nexport interface SparkJarJobTask extends JobTaskBase {\n spark_jar_task: { main_class_name: string; parameters?: string[] };\n}\n\nexport interface SparkPythonJobTask extends JobTaskBase {\n spark_python_task: { python_file: string; parameters?: string[]; source?: 'WORKSPACE' | 'GIT' };\n}\n\nexport interface SparkSubmitJobTask extends JobTaskBase {\n spark_submit_task: { parameters: string[] };\n}\n\nexport interface PipelineJobTask extends JobTaskBase {\n pipeline_task: { pipeline_id: string; full_refresh?: boolean };\n}\n\nexport interface SqlJobTask extends JobTaskBase {\n sql_task: Record<string, unknown> & { warehouse_id: string };\n}\n\nexport interface DbtJobTask extends JobTaskBase {\n dbt_task: Record<string, unknown> & { commands: string[] };\n}\n\nexport interface RunJobTask extends JobTaskBase {\n run_job_task: { job_id: number; job_parameters?: Record<string, string> };\n}\n\nexport interface ConditionJobTask extends JobTaskBase {\n condition_task: {\n left: string;\n op:\n | 'EQUAL_TO'\n | 'NOT_EQUAL'\n | 'GREATER_THAN'\n | 'GREATER_THAN_OR_EQUAL'\n | 'LESS_THAN'\n | 'LESS_THAN_OR_EQUAL';\n right: string;\n };\n}\n\nexport interface ForEachJobTask extends JobTaskBase {\n for_each_task: {\n inputs: string;\n concurrency?: number;\n task: Exclude<DatabricksJobTask, ForEachJobTask>;\n };\n}\n\nexport type DatabricksJobTask =\n | NotebookJobTask\n | PythonWheelJobTask\n | SparkJarJobTask\n | SparkPythonJobTask\n | SparkSubmitJobTask\n | PipelineJobTask\n | SqlJobTask\n | DbtJobTask\n | RunJobTask\n | ConditionJobTask\n | ForEachJobTask;\n\nexport interface JobsSubmitRequest {\n run_name: string;\n tasks: DatabricksJobTask[];\n parameters?: Array<{ name: string; default: string }>;\n job_clusters?: Array<Record<string, unknown> & { job_cluster_key: string }>;\n environments?: Array<Record<string, unknown> & { environment_key: string }>;\n git_source?: Record<string, unknown>;\n timeout_seconds?: number;\n idempotency_token?: string;\n}\n\nexport interface JobTaskRunState {\n taskKey: string;\n runId?: number;\n lifeCycleState: string;\n resultState: string;\n stateMessage?: string;\n attemptNumber?: number;\n}\n\nexport interface JobOrchestrationRun {\n runId: number;\n lifeCycleState: string;\n resultState: string;\n tasks: JobTaskRunState[];\n repairs: JobRepairRunState[];\n raw: Record<string, unknown>;\n}\n\nexport interface JobRepairRunState {\n repairId: number;\n type: string;\n lifeCycleState: string;\n resultState: string;\n taskRunIds: number[];\n}\n\nexport interface JobWaitOptions {\n timeoutMs?: number;\n pollIntervalMs?: number;\n}\n\nexport interface JobRepairOptions {\n rerunTasks?: string[];\n latestRepairId?: number;\n rerunDependentTasks?: boolean;\n}\n\nexport interface JobOrchestrationLiveSpec {\n request: JobsSubmitRequest;\n expectedResult?: string;\n expectedTasks?: Record<string, string>;\n repairFailedTasks?: boolean;\n cancellation?: {\n request: JobsSubmitRequest;\n expectedResult?: string;\n };\n}\n\nexport class DatabricksJobsAdapter {\n constructor(private readonly client: WorkspaceClientLike) {}\n\n async submit(request: JobsSubmitRequest): Promise<number> {\n validateJobGraph(request.tasks);\n const response = await this.client.post<{ run_id?: number }>(\n '/api/2.1/jobs/runs/submit',\n request,\n );\n if (!response.run_id) throw new Error('Databricks Jobs submit returned no run_id');\n return response.run_id;\n }\n\n async get(runId: number): Promise<JobOrchestrationRun> {\n const raw = await this.client.get<Record<string, unknown>>('/api/2.1/jobs/runs/get', {\n run_id: runId,\n include_history: true,\n include_resolved_values: true,\n });\n return normalizeJobRun(runId, raw);\n }\n\n async wait(runId: number, options: JobWaitOptions = {}): Promise<JobOrchestrationRun> {\n const raw = (await waitForDatabricksRun(this.client as never, runId, {\n timeoutMs: options.timeoutMs,\n pollIntervalMs: options.pollIntervalMs,\n })) as Record<string, unknown>;\n return normalizeJobRun(runId, raw);\n }\n\n async cancel(runId: number): Promise<void> {\n await this.client.post('/api/2.1/jobs/runs/cancel', { run_id: runId });\n }\n\n async waitUntilActive(runId: number, options: JobWaitOptions = {}): Promise<JobOrchestrationRun> {\n const timeoutMs = options.timeoutMs ?? 300_000;\n const pollIntervalMs = options.pollIntervalMs ?? 2_000;\n const deadline = Date.now() + timeoutMs;\n while (Date.now() < deadline) {\n const run = await this.get(runId);\n if (run.lifeCycleState === 'RUNNING') return run;\n if (isTerminal(run.lifeCycleState)) {\n throw new Error(\n `Databricks run ${runId} reached ${run.lifeCycleState}/${run.resultState} before it could be canceled`,\n );\n }\n await delay(pollIntervalMs);\n }\n throw new Error(`Databricks run ${runId} did not become active within ${timeoutMs}ms`);\n }\n\n async repair(runId: number, options: JobRepairOptions = {}): Promise<number> {\n const response = await this.client.post<{ repair_id?: number }>('/api/2.1/jobs/runs/repair', {\n run_id: runId,\n ...(options.latestRepairId ? { latest_repair_id: options.latestRepairId } : {}),\n ...(options.rerunDependentTasks ? { rerun_dependent_tasks: true } : {}),\n ...(options.rerunTasks?.length\n ? { rerun_tasks: options.rerunTasks }\n : { rerun_all_failed_tasks: true }),\n });\n if (!response.repair_id) throw new Error('Databricks Jobs repair returned no repair_id');\n return response.repair_id;\n }\n\n async waitForRepair(\n runId: number,\n repairId: number,\n options: JobWaitOptions = {},\n ): Promise<JobOrchestrationRun> {\n const timeoutMs = options.timeoutMs ?? 900_000;\n const pollIntervalMs = options.pollIntervalMs ?? 5_000;\n const deadline = Date.now() + timeoutMs;\n while (Date.now() < deadline) {\n const run = await this.get(runId);\n const repair = run.repairs.find((candidate) => candidate.repairId === repairId);\n if (repair && isTerminal(repair.lifeCycleState)) return run;\n await delay(pollIntervalMs);\n }\n throw new Error(\n `Databricks repair ${repairId} for run ${runId} timed out after ${timeoutMs}ms`,\n );\n }\n}\n\nexport function validateJobGraph(tasks: readonly DatabricksJobTask[]): void {\n if (tasks.length === 0) throw new Error('Jobs orchestration requires at least one task');\n const keys = new Set<string>();\n for (const task of tasks) {\n if (!/^[A-Za-z0-9_-]{1,100}$/.test(task.task_key)) {\n throw new Error(`Invalid task key '${task.task_key}'`);\n }\n if (keys.has(task.task_key)) throw new Error(`Duplicate task key '${task.task_key}'`);\n keys.add(task.task_key);\n }\n const edges = new Map<string, string[]>();\n for (const task of tasks) {\n const dependencies = (task.depends_on ?? []).map((dependency) => dependency.task_key);\n for (const dependency of dependencies) {\n if (!keys.has(dependency)) {\n throw new Error(`Task '${task.task_key}' depends on unknown task '${dependency}'`);\n }\n if (dependency === task.task_key) {\n throw new Error(`Task '${task.task_key}' cannot depend on itself`);\n }\n }\n edges.set(task.task_key, dependencies);\n }\n const visiting = new Set<string>();\n const visited = new Set<string>();\n const visit = (key: string): void => {\n if (visiting.has(key)) throw new Error(`Jobs task graph contains a cycle at '${key}'`);\n if (visited.has(key)) return;\n visiting.add(key);\n for (const dependency of edges.get(key) ?? []) visit(dependency);\n visiting.delete(key);\n visited.add(key);\n };\n for (const key of keys) visit(key);\n}\n\nexport function jobsOrchestrationCheck(): LiveCheck {\n return {\n id: 'jobs-orchestration',\n description: 'Lakeflow Jobs multi-task orchestration reaches expected task outcomes',\n configured: (env) => Boolean(env.DBX_TEST_JOBS_ORCHESTRATION_JSON),\n async run({ env, client }) {\n const configured = env.DBX_TEST_JOBS_ORCHESTRATION_JSON;\n if (!configured) throw new Error('DBX_TEST_JOBS_ORCHESTRATION_JSON is required');\n const spec = parseJobOrchestrationLiveSpec(configured);\n const adapter = new DatabricksJobsAdapter(client);\n const runId = await adapter.submit(spec.request);\n let run = await adapter.wait(runId, {\n timeoutMs: Number(env.DBX_TEST_TIMEOUT_MS ?? 900_000),\n pollIntervalMs: Number(env.DBX_TEST_POLL_INTERVAL_MS ?? 10_000),\n });\n let repairId: number | undefined;\n if (spec.repairFailedTasks && run.resultState !== 'SUCCESS') {\n const failed = run.tasks\n .filter((task) => task.resultState === 'FAILED')\n .map((task) => task.taskKey);\n repairId = await adapter.repair(runId, {\n rerunTasks: failed.length > 0 ? failed : undefined,\n rerunDependentTasks: true,\n });\n run = await adapter.waitForRepair(runId, repairId, {\n timeoutMs: Number(env.DBX_TEST_TIMEOUT_MS ?? 900_000),\n pollIntervalMs: Number(env.DBX_TEST_POLL_INTERVAL_MS ?? 10_000),\n });\n }\n const expectedResult = spec.expectedResult ?? 'SUCCESS';\n if (run.resultState !== expectedResult) {\n throw new Error(\n `Job orchestration run ${runId} ended in ${run.resultState}, expected ${expectedResult}`,\n );\n }\n for (const [taskKey, expected] of Object.entries(spec.expectedTasks ?? {})) {\n const task = run.tasks.find((candidate) => candidate.taskKey === taskKey);\n if (!task) throw new Error(`Job orchestration result did not include task '${taskKey}'`);\n if (task.resultState !== expected) {\n throw new Error(`Task '${taskKey}' ended in ${task.resultState}, expected ${expected}`);\n }\n }\n let cancellation: { runId: number; resultState: string } | undefined;\n if (spec.cancellation) {\n const cancellationRunId = await adapter.submit(spec.cancellation.request);\n await adapter.waitUntilActive(cancellationRunId, {\n timeoutMs: Number(env.DBX_TEST_TIMEOUT_MS ?? 900_000),\n pollIntervalMs: Number(env.DBX_TEST_POLL_INTERVAL_MS ?? 10_000),\n });\n await adapter.cancel(cancellationRunId);\n const canceled = await adapter.wait(cancellationRunId, {\n timeoutMs: Number(env.DBX_TEST_TIMEOUT_MS ?? 900_000),\n pollIntervalMs: Number(env.DBX_TEST_POLL_INTERVAL_MS ?? 10_000),\n });\n const expectedCancellation = spec.cancellation.expectedResult ?? 'CANCELED';\n if (canceled.resultState !== expectedCancellation) {\n throw new Error(\n `Cancellation run ${cancellationRunId} ended in ${canceled.resultState}, expected ${expectedCancellation}`,\n );\n }\n cancellation = { runId: cancellationRunId, resultState: canceled.resultState };\n }\n return {\n runId,\n ...(repairId ? { repairId } : {}),\n resultState: run.resultState,\n tasks: run.tasks,\n ...(cancellation ? { cancellation } : {}),\n };\n },\n };\n}\n\nexport function parseJobOrchestrationLiveSpec(value: string): JobOrchestrationLiveSpec {\n let parsed: unknown;\n try {\n parsed = JSON.parse(value);\n } catch (error) {\n throw new Error(`DBX_TEST_JOBS_ORCHESTRATION_JSON is invalid JSON: ${String(error)}`);\n }\n if (!parsed || typeof parsed !== 'object') {\n throw new Error('Jobs orchestration spec must be an object');\n }\n const spec = parsed as Partial<JobOrchestrationLiveSpec>;\n if (!spec.request || typeof spec.request !== 'object' || !Array.isArray(spec.request.tasks)) {\n throw new Error('Jobs orchestration spec requires request.tasks');\n }\n validateJobGraph(spec.request.tasks);\n if (spec.cancellation) {\n if (\n typeof spec.cancellation !== 'object' ||\n !spec.cancellation.request ||\n !Array.isArray(spec.cancellation.request.tasks)\n ) {\n throw new Error('Jobs orchestration cancellation requires request.tasks');\n }\n validateJobGraph(spec.cancellation.request.tasks);\n }\n return spec as JobOrchestrationLiveSpec;\n}\n\nexport function normalizeJobRun(\n fallbackRunId: number,\n raw: Record<string, unknown>,\n): JobOrchestrationRun {\n const state = objectOf(raw.state);\n const repairEntries = Array.isArray(raw.repair_history)\n ? raw.repair_history.filter((repair): repair is Record<string, unknown> =>\n Boolean(repair && typeof repair === 'object'),\n )\n : [];\n const taskRunRanks = new Map<number, number>();\n for (const [rank, repair] of repairEntries.entries()) {\n for (const runId of numberArray(repair.task_run_ids)) taskRunRanks.set(runId, rank);\n }\n const taskAttempts = Array.isArray(raw.tasks)\n ? raw.tasks\n .filter((task): task is Record<string, unknown> =>\n Boolean(task && typeof task === 'object'),\n )\n .map((task) => {\n const taskState = objectOf(task.state);\n return {\n taskKey: String(task.task_key ?? 'unknown'),\n ...(Number.isFinite(Number(task.run_id)) ? { runId: Number(task.run_id) } : {}),\n lifeCycleState: String(taskState.life_cycle_state ?? 'UNKNOWN'),\n resultState: String(taskState.result_state ?? 'UNKNOWN'),\n ...(typeof taskState.state_message === 'string'\n ? { stateMessage: taskState.state_message }\n : {}),\n ...(Number.isFinite(Number(task.attempt_number))\n ? { attemptNumber: Number(task.attempt_number) }\n : {}),\n };\n })\n : [];\n const latestTasks = new Map<string, JobTaskRunState>();\n for (const task of taskAttempts) {\n const current = latestTasks.get(task.taskKey);\n const currentAttempt = current?.attemptNumber ?? -1;\n const candidateAttempt = task.attemptNumber ?? -1;\n const currentRank = current?.runId ? (taskRunRanks.get(current.runId) ?? -1) : -1;\n const candidateRank = task.runId ? (taskRunRanks.get(task.runId) ?? -1) : -1;\n if (\n !current ||\n candidateAttempt > currentAttempt ||\n (candidateAttempt === currentAttempt && candidateRank >= currentRank)\n ) {\n latestTasks.set(task.taskKey, task);\n }\n }\n const tasks = [...latestTasks.values()];\n const repairs = repairEntries.map((repair) => {\n const repairState = objectOf(repair.state);\n return {\n repairId: Number(repair.id ?? repair.repair_id ?? 0),\n type: String(repair.type ?? 'UNKNOWN'),\n lifeCycleState: String(repairState.life_cycle_state ?? 'UNKNOWN'),\n resultState: String(repairState.result_state ?? 'UNKNOWN'),\n taskRunIds: numberArray(repair.task_run_ids),\n };\n });\n return {\n runId: Number(raw.run_id ?? fallbackRunId),\n lifeCycleState: String(state.life_cycle_state ?? 'UNKNOWN'),\n resultState: String(state.result_state ?? 'UNKNOWN'),\n tasks,\n repairs,\n raw,\n };\n}\n\nfunction isTerminal(state: string): boolean {\n return ['TERMINATED', 'SKIPPED', 'INTERNAL_ERROR', 'BLOCKED'].includes(state);\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction objectOf(value: unknown): Record<string, unknown> {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction numberArray(value: unknown): number[] {\n return Array.isArray(value)\n ? value.map(Number).filter((candidate) => Number.isFinite(candidate))\n : [];\n}\n","import { randomUUID } from 'node:crypto';\nimport { DatabricksJobsAdapter, type JobsSubmitRequest } from './jobs-orchestration.js';\nimport type { LiveCheck } from './live-suite.js';\nimport type { WorkspaceClientLike } from './workspace-context.js';\n\nconst NOTEBOOKS = {\n seed: `# Databricks notebook source\ndbutils.jobs.taskValues.set(key=\"branch\", value=\"run\")\ndbutils.jobs.taskValues.set(key=\"items\", value=[\"alpha\", \"beta\"])\ndbutils.notebook.exit(\"seeded\")\n`,\n process: `# Databricks notebook source\ndbutils.widgets.text(\"item\", \"\")\nitem = dbutils.widgets.get(\"item\")\nassert item, \"item parameter is required\"\ndbutils.notebook.exit(item)\n`,\n retry: `# Databricks notebook source\ndbutils.widgets.text(\"execution_count\", \"0\")\nexecution_count = int(dbutils.widgets.get(\"execution_count\"))\nif execution_count <= 1:\n raise RuntimeError(\"intentional retryable failure\")\ndbutils.notebook.exit(\"retried\")\n`,\n repair: `# Databricks notebook source\ndbutils.widgets.text(\"repair_count\", \"0\")\nrepair_count = int(dbutils.widgets.get(\"repair_count\"))\nif repair_count == 0:\n raise RuntimeError(\"intentional first-run failure\")\ndbutils.notebook.exit(\"repaired\")\n`,\n sleep: `# Databricks notebook source\nimport time\ntime.sleep(300)\n`,\n} as const;\n\nexport function jobsCertificationCheck(): LiveCheck {\n return {\n id: 'jobs-certification',\n description:\n 'Disposable Lakeflow Jobs branch, loop, failure, repair, cancellation, and cleanup certification',\n configured: (env) => env.DBX_TEST_JOBS_CERTIFY === '1',\n async run({ env, client }) {\n const root = `${env.DBX_TEST_JOBS_FIXTURE_ROOT ?? '/Workspace/Shared/fabric-experiments-target-pack'}/${randomUUID()}`;\n const paths = Object.fromEntries(\n Object.keys(NOTEBOOKS).map((name) => [name, `${root}/${name}`]),\n ) as Record<keyof typeof NOTEBOOKS, string>;\n try {\n await importNotebooks(client, paths);\n const adapter = new DatabricksJobsAdapter(client);\n const runId = await adapter.submit(certificationRequest(paths));\n const initial = await adapter.wait(runId, waitOptions(env));\n if (initial.resultState !== 'FAILED') {\n throw new Error(\n `Certification run ${runId} expected FAILED before repair, got ${initial.resultState}`,\n );\n }\n const retried = assertTask(initial.tasks, 'retry', 'SUCCESS');\n if ((retried.attemptNumber ?? 0) < 1) {\n throw new Error('Certification retry task did not record a second attempt');\n }\n assertTask(initial.tasks, 'seed', 'SUCCESS');\n assertTask(initial.tasks, 'branch', 'SUCCESS');\n assertTask(initial.tasks, 'foreach', 'SUCCESS');\n assertTask(initial.tasks, 'repair', 'FAILED');\n\n const repairId = await adapter.repair(runId, {\n rerunTasks: ['repair'],\n rerunDependentTasks: true,\n });\n const repaired = await adapter.waitForRepair(runId, repairId, waitOptions(env));\n if (repaired.resultState !== 'SUCCESS') {\n throw new Error(`Certification repair ${repairId} ended in ${repaired.resultState}`);\n }\n assertTask(repaired.tasks, 'repair', 'SUCCESS');\n\n const cancellationRunId = await adapter.submit(cancellationRequest(paths));\n await adapter.waitUntilActive(cancellationRunId, waitOptions(env));\n await adapter.cancel(cancellationRunId);\n const canceled = await adapter.wait(cancellationRunId, waitOptions(env));\n if (canceled.resultState !== 'CANCELED') {\n throw new Error(`Certification cancellation ended in ${canceled.resultState}`);\n }\n\n return {\n runId,\n repairId,\n cancellationRunId,\n taskValues: true,\n retry: true,\n condition: true,\n forEach: true,\n repair: true,\n cancellation: true,\n fixtureRoot: root,\n };\n } finally {\n await client.post('/api/2.0/workspace/delete', { path: root, recursive: true });\n }\n },\n };\n}\n\nasync function importNotebooks(\n client: WorkspaceClientLike,\n paths: Record<keyof typeof NOTEBOOKS, string>,\n): Promise<void> {\n await client.post('/api/2.0/workspace/mkdirs', {\n path: paths.seed.slice(0, paths.seed.lastIndexOf('/')),\n });\n for (const [name, source] of Object.entries(NOTEBOOKS) as Array<\n [keyof typeof NOTEBOOKS, string]\n >) {\n await client.post('/api/2.0/workspace/import', {\n path: paths[name],\n format: 'SOURCE',\n language: 'PYTHON',\n overwrite: true,\n content: Buffer.from(source).toString('base64'),\n });\n }\n}\n\nfunction certificationRequest(paths: Record<keyof typeof NOTEBOOKS, string>): JobsSubmitRequest {\n return {\n run_name: 'fabric-experiments-jobs-certification',\n tasks: [\n {\n task_key: 'retry',\n notebook_task: {\n notebook_path: paths.retry,\n base_parameters: { execution_count: '{{task.execution_count}}' },\n },\n max_retries: 1,\n },\n {\n task_key: 'seed',\n depends_on: [{ task_key: 'retry' }],\n notebook_task: { notebook_path: paths.seed },\n },\n {\n task_key: 'branch',\n depends_on: [{ task_key: 'seed' }],\n condition_task: {\n left: '{{tasks.seed.values.branch}}',\n op: 'EQUAL_TO',\n right: 'run',\n },\n },\n {\n task_key: 'foreach',\n depends_on: [{ task_key: 'branch', outcome: 'true' }],\n for_each_task: {\n inputs: '{{tasks.seed.values.items}}',\n concurrency: 2,\n task: {\n task_key: 'process_item',\n notebook_task: {\n notebook_path: paths.process,\n base_parameters: { item: '{{input}}' },\n },\n },\n },\n },\n {\n task_key: 'repair',\n depends_on: [{ task_key: 'foreach' }],\n notebook_task: {\n notebook_path: paths.repair,\n base_parameters: { repair_count: '{{job.repair_count}}' },\n },\n },\n ],\n };\n}\n\nfunction cancellationRequest(paths: Record<keyof typeof NOTEBOOKS, string>): JobsSubmitRequest {\n return {\n run_name: 'fabric-experiments-jobs-cancellation-certification',\n tasks: [{ task_key: 'sleep', notebook_task: { notebook_path: paths.sleep } }],\n };\n}\n\nfunction waitOptions(env: Record<string, string | undefined>) {\n return {\n timeoutMs: Number(env.DBX_TEST_TIMEOUT_MS ?? 900_000),\n pollIntervalMs: Number(env.DBX_TEST_POLL_INTERVAL_MS ?? 5_000),\n };\n}\n\nfunction assertTask(\n tasks: Array<{ taskKey: string; resultState: string; attemptNumber?: number }>,\n taskKey: string,\n resultState: string,\n): { taskKey: string; resultState: string; attemptNumber?: number } {\n const task = tasks.find((candidate) => candidate.taskKey === taskKey);\n if (!task) throw new Error(`Certification result did not contain task '${taskKey}'`);\n if (task.resultState !== resultState) {\n throw new Error(\n `Certification task '${taskKey}' ended in ${task.resultState}, expected ${resultState}`,\n );\n }\n return task;\n}\n","import { jobsCertificationCheck } from './jobs-certification-check.js';\nimport { jobsOrchestrationCheck } from './jobs-orchestration.js';\nimport { jobRunCheck, restrictedPrincipalCheck } from './live-checks.js';\nimport { type TargetPack, defineTargetPack } from './target-packs.js';\n\nexport function createLakeflowJobsTargetPack(): TargetPack {\n return defineTargetPack({\n id: 'lakeflow-jobs',\n name: 'Lakeflow Jobs orchestration',\n description:\n 'Typed multi-task DAG, branch/loop, retry, cancellation, repair and task-outcome validation.',\n version: '0.2.0',\n maturity: 'live-gated',\n capabilities: [\n 'jobs.multi-task-dag',\n 'jobs.dependencies',\n 'jobs.condition-task',\n 'jobs.for-each-task',\n 'jobs.retry',\n 'jobs.cancel',\n 'jobs.repair',\n 'jobs.task-outcomes',\n ],\n checks: () => [\n restrictedPrincipalCheck(),\n jobRunCheck(),\n jobsOrchestrationCheck(),\n jobsCertificationCheck(),\n ],\n requiredChecks: ['jobs-orchestration'],\n requirements: [\n {\n id: 'workspace',\n description: 'Databricks workspace host',\n anyOf: ['DATABRICKS_HOST'],\n },\n {\n id: 'authentication',\n description: 'Databricks OAuth, OIDC, bearer, or PAT authentication',\n anyOf: [\n 'DATABRICKS_BEARER',\n 'DATABRICKS_TOKEN',\n 'DATABRICKS_CLIENT_ID',\n 'DATABRICKS_OIDC_TOKEN',\n 'DATABRICKS_OIDC_TOKEN_FILEPATH',\n ],\n secret: true,\n },\n {\n id: 'orchestration-spec',\n description: 'JSON multi-task orchestration scenario',\n anyOf: ['DBX_TEST_JOBS_ORCHESTRATION_JSON'],\n required: false,\n },\n ],\n docsUrl:\n 'https://experiments.fabric.pro/docs/testing/target-packs/#lakeflow-jobs-orchestration',\n certificationScopes: [\n 'Azure Databricks serverless Jobs, West US, workspace OAuth, public network path',\n ],\n });\n}\n","import type { LiveCheck } from './live-suite.js';\nimport {\n type WorkspaceClientLike,\n createClientFromEnv,\n createWorkspaceContext,\n} from './workspace-context.js';\n\ntype JsonObject = Record<string, unknown>;\n\nexport interface PipelineResource extends JsonObject {\n pipeline_id?: string;\n name?: string;\n state?: string;\n spec?: JsonObject;\n}\n\nexport interface DashboardResource extends JsonObject {\n dashboard_id?: string;\n display_name?: string;\n lifecycle_state?: string;\n}\n\nexport interface PublishedDashboardResource extends JsonObject {\n display_name?: string;\n revision_create_time?: string;\n warehouse_id?: string;\n}\n\nexport interface GenieSpaceResource extends JsonObject {\n space_id?: string;\n title?: string;\n}\n\nexport interface RegisteredModelResource extends JsonObject {\n full_name?: string;\n name?: string;\n}\n\nexport interface ServingEndpointResource extends JsonObject {\n name?: string;\n state?: { ready?: string; config_update?: string };\n config?: JsonObject;\n ai_gateway?: JsonObject;\n}\n\nexport interface VectorSearchEndpointResource extends JsonObject {\n name?: string;\n endpoint_status?: { state?: string; message?: string };\n}\n\nexport interface VectorSearchIndexResource extends JsonObject {\n name?: string;\n status?: { ready?: boolean; message?: string; indexed_row_count?: number };\n}\n\n/**\n * Typed, injectable adapter for Databricks workload surfaces that are not part\n * of SQL Statement Execution. It deliberately mirrors the public REST APIs so\n * target packs can be unit tested without a workspace.\n */\nexport class DatabricksAdvancedWorkloadsAdapter {\n constructor(private readonly client: WorkspaceClientLike) {}\n\n pipeline(id: string): Promise<PipelineResource> {\n return this.client.get(`/api/2.0/pipelines/${segment(id)}`);\n }\n\n table(fullName: string): Promise<JsonObject> {\n return this.client.get(`/api/2.1/unity-catalog/tables/${segment(fullName)}`);\n }\n\n dashboard(id: string): Promise<DashboardResource> {\n return this.client.get(`/api/2.0/lakeview/dashboards/${segment(id)}`);\n }\n\n publishedDashboard(id: string): Promise<PublishedDashboardResource> {\n return this.client.get(`/api/2.0/lakeview/dashboards/${segment(id)}/published`);\n }\n\n genieSpace(id: string): Promise<GenieSpaceResource> {\n return this.client.get(`/api/2.0/genie/spaces/${segment(id)}`);\n }\n\n startGenieConversation(spaceId: string, question: string): Promise<JsonObject> {\n return this.client.post(`/api/2.0/genie/spaces/${segment(spaceId)}/start-conversation`, {\n content: question,\n });\n }\n\n experiment(id: string): Promise<JsonObject> {\n return this.client.get('/api/2.0/mlflow/experiments/get', { experiment_id: id });\n }\n\n registeredModel(fullName: string): Promise<RegisteredModelResource> {\n return this.client.get(`/api/2.1/unity-catalog/models/${segment(fullName)}`);\n }\n\n modelVersion(fullName: string, version: string): Promise<JsonObject> {\n return this.client.get(\n `/api/2.1/unity-catalog/models/${segment(fullName)}/versions/${segment(version)}`,\n );\n }\n\n onlineTable(fullName: string): Promise<JsonObject> {\n return this.client.get(`/api/2.0/online-tables/${segment(fullName)}`);\n }\n\n servingEndpoint(name: string): Promise<ServingEndpointResource> {\n return this.client.get(`/api/2.0/serving-endpoints/${segment(name)}`);\n }\n\n invokeServingEndpoint(name: string, request: unknown): Promise<JsonObject> {\n return this.client.post(`/serving-endpoints/${segment(name)}/invocations`, request);\n }\n\n vectorSearchEndpoint(name: string): Promise<VectorSearchEndpointResource> {\n return this.client.get(`/api/2.0/vector-search/endpoints/${segment(name)}`);\n }\n\n vectorSearchIndex(name: string): Promise<VectorSearchIndexResource> {\n return this.client.get(`/api/2.0/vector-search/indexes/${segment(name)}`);\n }\n\n queryVectorSearchIndex(name: string, request: unknown): Promise<JsonObject> {\n return this.client.post(`/api/2.0/vector-search/indexes/${segment(name)}/query`, request);\n }\n\n connection(name: string): Promise<JsonObject> {\n return this.client.get(`/api/2.1/unity-catalog/connections/${segment(name)}`);\n }\n\n share(name: string): Promise<JsonObject> {\n return this.client.get(`/api/2.1/unity-catalog/shares/${segment(name)}`);\n }\n\n cleanRoom(name: string): Promise<JsonObject> {\n return this.client.get(`/api/2.0/clean-rooms/${segment(name)}`);\n }\n\n ipAccessList(id: string): Promise<JsonObject> {\n return this.client.get(`/api/2.0/ip-access-lists/${segment(id)}`);\n }\n\n clusterPolicy(id: string): Promise<JsonObject> {\n return this.client.get('/api/2.0/policies/clusters/get', { policy_id: id });\n }\n\n warehouse(id: string): Promise<JsonObject> {\n return this.client.get(`/api/2.0/sql/warehouses/${segment(id)}`);\n }\n}\n\nfunction segment(value: string): string {\n return encodeURIComponent(value);\n}\n\nfunction adapter(client: WorkspaceClientLike): DatabricksAdvancedWorkloadsAdapter {\n return new DatabricksAdvancedWorkloadsAdapter(client);\n}\n\nfunction required(env: Record<string, string | undefined>, names: readonly string[]): string[] {\n return names.filter((name) => !env[name]?.trim());\n}\n\nfunction requireEnv(env: Record<string, string | undefined>, names: readonly string[]): void {\n const missing = required(env, names);\n if (missing.length > 0) throw new Error(`Missing required configuration: ${missing.join(', ')}`);\n}\n\nfunction parseJson(value: string | undefined, name: string): unknown {\n if (!value) return undefined;\n try {\n return JSON.parse(value) as unknown;\n } catch {\n throw new Error(`${name} must contain valid JSON`);\n }\n}\n\nfunction assertNotFailed(label: string, state: unknown): void {\n if (typeof state === 'string' && /FAIL|ERROR|DELET/i.test(state)) {\n throw new Error(`${label} is ${state}`);\n }\n}\n\nfunction assertReady(label: string, state: unknown, accepted: readonly string[]): void {\n if (typeof state !== 'string' || !accepted.includes(state.toUpperCase())) {\n throw new Error(`${label} is ${String(state ?? 'UNKNOWN')}; expected ${accepted.join(' or ')}`);\n }\n}\n\nasync function booleanSql(\n label: string,\n sql: string | undefined,\n query: (statement: string) => Promise<Record<string, unknown>[]>,\n): Promise<void> {\n if (!sql) return;\n const rows = await query(sql);\n const first = rows[0] ? Object.values(rows[0])[0] : undefined;\n if (!(first === true || first === 1 || first === '1' || first === 'true')) {\n throw new Error(`${label} assertion did not return a truthy first column`);\n }\n}\n\nexport function advancedStreamingCdcCheck(): LiveCheck {\n const names = [\n 'DBX_TEST_STREAMING_PIPELINE_ID',\n 'DBX_TEST_STREAMING_TABLE',\n 'DBX_TEST_CDC_ASSERTION_SQL',\n 'DBX_TEST_STREAMING_ASSERTION_SQL',\n ] as const;\n return {\n id: 'streaming-cdc',\n description: 'Streaming pipeline, streaming table and CDC assertions are healthy',\n configured: (env) => required(env, names).length === 0,\n async run({ env, client, warehouse }) {\n requireEnv(env, names);\n const api = adapter(client);\n const pipeline = await api.pipeline(env.DBX_TEST_STREAMING_PIPELINE_ID as string);\n assertNotFailed('Streaming pipeline', pipeline.state);\n const table = await api.table(env.DBX_TEST_STREAMING_TABLE as string);\n const tableType = String(table.table_type ?? table.data_source_format ?? '').toUpperCase();\n if (!['STREAMING_TABLE', 'MATERIALIZED_VIEW', 'DELTA'].includes(tableType)) {\n throw new Error(`Streaming target has unsupported table type ${tableType || 'UNKNOWN'}`);\n }\n await booleanSql('CDC', env.DBX_TEST_CDC_ASSERTION_SQL, warehouse.query);\n await booleanSql(\n 'Streaming freshness',\n env.DBX_TEST_STREAMING_ASSERTION_SQL,\n warehouse.query,\n );\n return { pipelineId: pipeline.pipeline_id, table: env.DBX_TEST_STREAMING_TABLE, tableType };\n },\n };\n}\n\nexport function lakeflowConnectCheck(): LiveCheck {\n const names = ['DBX_TEST_CONNECT_PIPELINE_ID', 'DBX_TEST_CONNECT_ASSERTION_SQL'] as const;\n return {\n id: 'lakeflow-connect',\n description: 'Lakeflow Connect ingestion pipeline exists and is not failed',\n configured: (env) => required(env, names).length === 0,\n async run({ env, client, warehouse }) {\n requireEnv(env, names);\n const id = env.DBX_TEST_CONNECT_PIPELINE_ID as string;\n const pipeline = await adapter(client).pipeline(id);\n assertNotFailed('Lakeflow Connect pipeline', pipeline.state);\n const ingestion = pipeline.spec?.ingestion_definition as JsonObject | undefined;\n if (!ingestion || !Array.isArray(ingestion.objects) || ingestion.objects.length === 0) {\n throw new Error('Lakeflow Connect pipeline has no managed ingestion definition');\n }\n await booleanSql(\n 'Lakeflow Connect replication',\n env.DBX_TEST_CONNECT_ASSERTION_SQL,\n warehouse.query,\n );\n return {\n pipelineId: pipeline.pipeline_id ?? id,\n state: pipeline.state ?? 'IDLE',\n sourceType: ingestion.source_type ?? 'MANAGED_INGESTION',\n objects: ingestion.objects.length,\n };\n },\n };\n}\n\nexport function aiBiDashboardCheck(): LiveCheck {\n return {\n id: 'aibi-dashboard',\n description: 'Published AI/BI dashboard is accessible',\n configured: (env) => Boolean(env.DBX_TEST_DASHBOARD_ID),\n async run({ env, client }) {\n const api = adapter(client);\n const id = env.DBX_TEST_DASHBOARD_ID as string;\n const dashboard = await api.dashboard(id);\n assertNotFailed('AI/BI dashboard', dashboard.lifecycle_state);\n const published = await api.publishedDashboard(id);\n if (!published.revision_create_time) {\n throw new Error(`AI/BI dashboard ${id} has no published revision`);\n }\n return {\n dashboardId: dashboard.dashboard_id ?? id,\n name: published.display_name ?? dashboard.display_name,\n publishedAt: published.revision_create_time,\n };\n },\n };\n}\n\nexport function genieCheck(): LiveCheck {\n const names = ['DBX_TEST_GENIE_SPACE_ID', 'DBX_TEST_GENIE_QUESTION'] as const;\n return {\n id: 'genie',\n description: 'Genie space is accessible and can optionally start a grounded conversation',\n configured: (env) => required(env, names).length === 0,\n async run({ env, client }) {\n requireEnv(env, names);\n const api = adapter(client);\n const id = env.DBX_TEST_GENIE_SPACE_ID as string;\n const space = await api.genieSpace(id);\n let conversation: JsonObject | undefined;\n if (env.DBX_TEST_GENIE_QUESTION) {\n conversation = await api.startGenieConversation(id, env.DBX_TEST_GENIE_QUESTION);\n if (!conversation.conversation_id && !conversation.message_id) {\n throw new Error('Genie did not return a conversation or message identifier');\n }\n }\n return {\n spaceId: space.space_id ?? id,\n title: space.title,\n conversationStarted: Boolean(conversation),\n };\n },\n };\n}\n\nexport function mlflowLifecycleCheck(): LiveCheck {\n const names = [\n 'DBX_TEST_MLFLOW_EXPERIMENT_ID',\n 'DBX_TEST_REGISTERED_MODEL',\n 'DBX_TEST_MODEL_VERSION',\n ] as const;\n return {\n id: 'mlflow-lifecycle',\n description: 'MLflow experiment and Unity Catalog model version are accessible',\n configured: (env) => required(env, names).length === 0,\n async run({ env, client }) {\n requireEnv(env, names);\n const api = adapter(client);\n const experiment = await api.experiment(env.DBX_TEST_MLFLOW_EXPERIMENT_ID as string);\n const model = await api.registeredModel(env.DBX_TEST_REGISTERED_MODEL as string);\n const version = await api.modelVersion(\n env.DBX_TEST_REGISTERED_MODEL as string,\n env.DBX_TEST_MODEL_VERSION as string,\n );\n assertNotFailed('Model version', version.status);\n return {\n experimentId:\n (experiment.experiment as JsonObject | undefined)?.experiment_id ??\n env.DBX_TEST_MLFLOW_EXPERIMENT_ID,\n model: model.full_name ?? model.name ?? env.DBX_TEST_REGISTERED_MODEL,\n version: version.version ?? env.DBX_TEST_MODEL_VERSION,\n };\n },\n };\n}\n\nexport function featureEngineeringServingCheck(): LiveCheck {\n return {\n id: 'feature-engineering',\n description: 'Feature table and online materialization are healthy',\n configured: (env) =>\n Boolean(\n env.DBX_TEST_FEATURE_TABLE &&\n env.DBX_TEST_FEATURE_ASSERTION_SQL &&\n (env.DBX_TEST_ONLINE_TABLE || env.DBX_TEST_FEATURE_SERVING_PIPELINE_ID),\n ),\n async run({ env, client, warehouse }) {\n requireEnv(env, ['DBX_TEST_FEATURE_TABLE']);\n if (!env.DBX_TEST_ONLINE_TABLE && !env.DBX_TEST_FEATURE_SERVING_PIPELINE_ID) {\n throw new Error(\n 'Feature serving requires DBX_TEST_ONLINE_TABLE or DBX_TEST_FEATURE_SERVING_PIPELINE_ID',\n );\n }\n const api = adapter(client);\n const source = await api.table(env.DBX_TEST_FEATURE_TABLE as string);\n let state: unknown;\n let servingResource: string;\n if (env.DBX_TEST_ONLINE_TABLE) {\n const online = await api.onlineTable(env.DBX_TEST_ONLINE_TABLE);\n const status = online.status as JsonObject | undefined;\n state = status?.state ?? status?.detailed_state ?? online.state;\n assertReady('Online table', state, ['ONLINE', 'ACTIVE', 'READY', 'PROVISIONED']);\n servingResource = env.DBX_TEST_ONLINE_TABLE;\n } else {\n const pipelineId = env.DBX_TEST_FEATURE_SERVING_PIPELINE_ID as string;\n const pipeline = await api.pipeline(pipelineId);\n state = pipeline.state ?? 'IDLE';\n assertNotFailed('Synced Table pipeline', state);\n servingResource = pipeline.pipeline_id ?? pipelineId;\n }\n await booleanSql('Feature freshness', env.DBX_TEST_FEATURE_ASSERTION_SQL, warehouse.query);\n return {\n featureTable: source.full_name ?? env.DBX_TEST_FEATURE_TABLE,\n servingResource,\n state,\n };\n },\n };\n}\n\nexport function modelServingCheck(): LiveCheck {\n const names = [\n 'DBX_TEST_SERVING_ENDPOINT',\n 'DBX_TEST_SERVING_REQUEST_JSON',\n 'DBX_TEST_AI_GATEWAY_REQUIRED',\n ] as const;\n return {\n id: 'model-serving',\n description: 'Model Serving endpoint is ready and can optionally serve an inference request',\n configured: (env) => required(env, names).length === 0,\n async run({ env, client }) {\n requireEnv(env, names);\n if (env.DBX_TEST_AI_GATEWAY_REQUIRED !== '1') {\n throw new Error('DBX_TEST_AI_GATEWAY_REQUIRED must be 1 for the Model Serving target pack');\n }\n const api = adapter(client);\n const name = env.DBX_TEST_SERVING_ENDPOINT as string;\n const endpoint = await api.servingEndpoint(name);\n assertReady('Serving endpoint', endpoint.state?.ready, ['READY']);\n if (env.DBX_TEST_AI_GATEWAY_REQUIRED === '1' && !endpoint.ai_gateway) {\n throw new Error(`Serving endpoint ${name} has no AI Gateway configuration`);\n }\n let response: JsonObject | undefined;\n if (env.DBX_TEST_SERVING_REQUEST_JSON) {\n response = await api.invokeServingEndpoint(\n name,\n parseJson(env.DBX_TEST_SERVING_REQUEST_JSON, 'DBX_TEST_SERVING_REQUEST_JSON'),\n );\n if (Object.keys(response).length === 0)\n throw new Error('Serving invocation returned an empty response');\n }\n return {\n endpoint: endpoint.name ?? name,\n ready: endpoint.state?.ready,\n aiGateway: Boolean(endpoint.ai_gateway),\n invoked: Boolean(response),\n };\n },\n };\n}\n\nexport function vectorSearchCheck(): LiveCheck {\n const names = ['DBX_TEST_VECTOR_ENDPOINT', 'DBX_TEST_VECTOR_INDEX'] as const;\n return {\n id: 'vector-search',\n description: 'Vector Search endpoint and index are online',\n configured: (env) => required(env, names).length === 0,\n async run({ env, client }) {\n requireEnv(env, names);\n const api = adapter(client);\n const endpoint = await api.vectorSearchEndpoint(env.DBX_TEST_VECTOR_ENDPOINT as string);\n assertReady('Vector Search endpoint', endpoint.endpoint_status?.state, ['ONLINE', 'READY']);\n const index = await api.vectorSearchIndex(env.DBX_TEST_VECTOR_INDEX as string);\n if (index.status?.ready !== true)\n throw new Error(`Vector Search index is not ready: ${index.status?.message ?? 'UNKNOWN'}`);\n return {\n endpoint: endpoint.name ?? env.DBX_TEST_VECTOR_ENDPOINT,\n index: index.name ?? env.DBX_TEST_VECTOR_INDEX,\n indexedRows: index.status.indexed_row_count,\n };\n },\n };\n}\n\nexport function ragAgentCheck(): LiveCheck {\n const names = [\n 'DBX_TEST_VECTOR_INDEX',\n 'DBX_TEST_VECTOR_QUERY_JSON',\n 'DBX_TEST_AGENT_ENDPOINT',\n 'DBX_TEST_AGENT_REQUEST_JSON',\n ] as const;\n return {\n id: 'rag-agent',\n description: 'RAG retrieval and agent serving endpoint return non-empty responses',\n configured: (env) => required(env, names).length === 0,\n async run({ env, client }) {\n requireEnv(env, names);\n const api = adapter(client);\n let retrieval: JsonObject | undefined;\n if (env.DBX_TEST_VECTOR_QUERY_JSON) {\n retrieval = await api.queryVectorSearchIndex(\n env.DBX_TEST_VECTOR_INDEX as string,\n parseJson(env.DBX_TEST_VECTOR_QUERY_JSON, 'DBX_TEST_VECTOR_QUERY_JSON'),\n );\n if (!retrieval.result && !retrieval.data_array && !retrieval.manifest) {\n throw new Error('Vector query returned no result payload');\n }\n }\n let agent: JsonObject | undefined;\n if (env.DBX_TEST_AGENT_ENDPOINT) {\n const endpoint = await api.servingEndpoint(env.DBX_TEST_AGENT_ENDPOINT);\n assertReady('Agent endpoint', endpoint.state?.ready, ['READY']);\n if (env.DBX_TEST_AGENT_REQUEST_JSON) {\n agent = await api.invokeServingEndpoint(\n env.DBX_TEST_AGENT_ENDPOINT,\n parseJson(env.DBX_TEST_AGENT_REQUEST_JSON, 'DBX_TEST_AGENT_REQUEST_JSON'),\n );\n if (Object.keys(agent).length === 0)\n throw new Error('Agent invocation returned an empty response');\n }\n }\n return {\n retrieval: Boolean(retrieval),\n agentEndpoint: env.DBX_TEST_AGENT_ENDPOINT,\n agentInvoked: Boolean(agent),\n };\n },\n };\n}\n\nexport function federationSharingCleanRoomsCheck(): LiveCheck {\n const names = [\n 'DBX_TEST_CONNECTION',\n 'DBX_TEST_SHARE',\n 'DBX_TEST_CLEAN_ROOM',\n 'DBX_TEST_FEDERATION_ASSERTION_SQL',\n ] as const;\n return {\n id: 'federation-sharing-cleanrooms',\n description: 'Lakehouse Federation connection, Delta Share and Clean Room are accessible',\n configured: (env) => required(env, names).length === 0,\n async run({ env, client, warehouse }) {\n requireEnv(env, names);\n const api = adapter(client);\n const connection = await api.connection(env.DBX_TEST_CONNECTION as string);\n const share = await api.share(env.DBX_TEST_SHARE as string);\n const room = await api.cleanRoom(env.DBX_TEST_CLEAN_ROOM as string);\n await booleanSql('Federated query', env.DBX_TEST_FEDERATION_ASSERTION_SQL, warehouse.query);\n return {\n connection: connection.name ?? env.DBX_TEST_CONNECTION,\n share: share.name ?? env.DBX_TEST_SHARE,\n cleanRoom: room.name ?? env.DBX_TEST_CLEAN_ROOM,\n };\n },\n };\n}\n\nexport function securityPostureCostCheck(): LiveCheck {\n const names = [\n 'DBX_TEST_IP_ACCESS_LIST_ID',\n 'DBX_TEST_CLUSTER_POLICY_ID',\n 'DBX_TEST_COST_ASSERTION_SQL',\n ] as const;\n return {\n id: 'security-cost',\n description: 'Network access controls, compute policy and cost guardrail are enforced',\n configured: (env) => required(env, names).length === 0,\n async run({ env, client, warehouse }) {\n requireEnv(env, names);\n const api = adapter(client);\n const access = await api.ipAccessList(env.DBX_TEST_IP_ACCESS_LIST_ID as string);\n if (access.enabled === false) throw new Error('Configured IP access list is disabled');\n const policy = await api.clusterPolicy(env.DBX_TEST_CLUSTER_POLICY_ID as string);\n if (!policy.policy_id && !policy.name)\n throw new Error('Cluster policy response has no identity');\n if (\n env.DBX_TEST_EXPECT_HOST_SUFFIX &&\n !env.DATABRICKS_HOST?.endsWith(env.DBX_TEST_EXPECT_HOST_SUFFIX)\n ) {\n throw new Error(`Workspace host does not end with ${env.DBX_TEST_EXPECT_HOST_SUFFIX}`);\n }\n await booleanSql('Cost guardrail', env.DBX_TEST_COST_ASSERTION_SQL, warehouse.query);\n return {\n ipAccessList: access.list_id ?? env.DBX_TEST_IP_ACCESS_LIST_ID,\n policy: policy.policy_id ?? policy.name,\n costGuardrail: 'pass',\n };\n },\n };\n}\n\nexport interface RegionalDrCheckOptions {\n clientFactory?: (env: Record<string, string | undefined>) => WorkspaceClientLike;\n}\n\nexport function regionalDrCheck(options: RegionalDrCheckOptions = {}): LiveCheck {\n const names = [\n 'DBX_TEST_DR_HOST',\n 'DBX_TEST_DR_WAREHOUSE_ID',\n 'DBX_TEST_DR_ASSERTION_SQL',\n ] as const;\n return {\n id: 'regional-dr',\n description: 'Secondary-region workspace authentication and SQL warehouse are reachable',\n configured: (env) => required(env, names).length === 0,\n async run({ env }) {\n requireEnv(env, names);\n const drEnv: Record<string, string | undefined> = {\n ...env,\n DATABRICKS_HOST: env.DBX_TEST_DR_HOST,\n DATABRICKS_WAREHOUSE_ID: env.DBX_TEST_DR_WAREHOUSE_ID,\n DATABRICKS_HTTP_PATH: undefined,\n DATABRICKS_BEARER: env.DBX_TEST_DR_BEARER,\n DATABRICKS_TOKEN: env.DBX_TEST_DR_TOKEN,\n DATABRICKS_CLIENT_ID: env.DBX_TEST_DR_CLIENT_ID ?? env.DATABRICKS_CLIENT_ID,\n DATABRICKS_CLIENT_SECRET: env.DBX_TEST_DR_CLIENT_SECRET ?? env.DATABRICKS_CLIENT_SECRET,\n };\n const client = options.clientFactory?.(drEnv) ?? createClientFromEnv(drEnv);\n const secondary = await adapter(client).warehouse(env.DBX_TEST_DR_WAREHOUSE_ID as string);\n assertReady('DR SQL warehouse', secondary.state, ['RUNNING']);\n const drWarehouse = await createWorkspaceContext({ env: drEnv, client });\n try {\n await booleanSql('Regional DR workload', env.DBX_TEST_DR_ASSERTION_SQL, drWarehouse.query);\n } finally {\n await drWarehouse.close();\n }\n return {\n secondaryWorkspace: 'reachable',\n warehouseId: secondary.id ?? env.DBX_TEST_DR_WAREHOUSE_ID,\n state: secondary.state,\n };\n },\n };\n}\n","import {\n advancedStreamingCdcCheck,\n aiBiDashboardCheck,\n featureEngineeringServingCheck,\n federationSharingCleanRoomsCheck,\n genieCheck,\n lakeflowConnectCheck,\n mlflowLifecycleCheck,\n modelServingCheck,\n ragAgentCheck,\n regionalDrCheck,\n securityPostureCostCheck,\n vectorSearchCheck,\n} from './advanced-workload-checks.js';\nimport { restrictedPrincipalCheck } from './live-checks.js';\nimport { type TargetPack, defineTargetPack } from './target-packs.js';\n\nconst DOCS = 'https://experiments.fabric.pro/docs/testing/target-packs/';\nconst AZURE_M2M_SCOPE =\n 'Azure Databricks, dedicated service principal using OAuth M2M, public network path; named managed or disposable certification fixtures';\n\nconst workspace = {\n id: 'workspace',\n description: 'Databricks workspace host',\n anyOf: ['DATABRICKS_HOST'],\n} as const;\nconst auth = {\n id: 'authentication',\n description: 'Databricks OAuth, OIDC, bearer, or PAT authentication',\n anyOf: [\n 'DATABRICKS_BEARER',\n 'DATABRICKS_TOKEN',\n 'DATABRICKS_CLIENT_ID',\n 'DATABRICKS_OIDC_TOKEN',\n 'DATABRICKS_OIDC_TOKEN_FILEPATH',\n ],\n secret: true,\n} as const;\nconst warehouse = {\n id: 'warehouse',\n description: 'SQL warehouse for data-plane assertions',\n anyOf: ['DATABRICKS_WAREHOUSE_ID', 'DATABRICKS_HTTP_PATH'],\n} as const;\nconst requirement = (id: string, description: string, ...anyOf: string[]) => ({\n id,\n description,\n anyOf,\n});\n\nexport function createAdvancedStreamingTargetPack(): TargetPack {\n return defineTargetPack({\n id: 'streaming-cdc-connect',\n name: 'Advanced streaming, CDC and Lakeflow Connect',\n description:\n 'Streaming tables, pipeline health, CDC correctness, freshness and managed connector replication.',\n version: '1.0.0',\n maturity: 'live-gated',\n capabilities: [\n 'streaming.tables',\n 'streaming.freshness',\n 'cdc.correctness',\n 'lakeflow-connect.replication',\n ],\n checks: () => [restrictedPrincipalCheck(), advancedStreamingCdcCheck(), lakeflowConnectCheck()],\n requiredChecks: ['streaming-cdc', 'lakeflow-connect'],\n requirements: [\n workspace,\n auth,\n warehouse,\n requirement('streaming-pipeline', 'Streaming pipeline ID', 'DBX_TEST_STREAMING_PIPELINE_ID'),\n requirement('streaming-table', 'Streaming target table', 'DBX_TEST_STREAMING_TABLE'),\n requirement(\n 'connect-pipeline',\n 'Lakeflow Connect ingestion pipeline',\n 'DBX_TEST_CONNECT_PIPELINE_ID',\n ),\n requirement(\n 'streaming-assertion',\n 'Streaming freshness SQL',\n 'DBX_TEST_STREAMING_ASSERTION_SQL',\n ),\n requirement('cdc-assertion', 'CDC correctness SQL', 'DBX_TEST_CDC_ASSERTION_SQL'),\n requirement(\n 'connect-assertion',\n 'Lakeflow Connect replication SQL',\n 'DBX_TEST_CONNECT_ASSERTION_SQL',\n ),\n ],\n docsUrl: `${DOCS}#advanced-streaming-cdc-and-lakeflow-connect`,\n certificationScopes: [\n `${AZURE_M2M_SCOPE}; serverless Lakeflow pipeline AUTO CDC and query-based PostgreSQL foreign-catalog ingestion`,\n ],\n });\n}\n\nexport function createAiBiGenieTargetPack(): TargetPack {\n return defineTargetPack({\n id: 'aibi-genie',\n name: 'AI/BI dashboards and Genie',\n description: 'Dashboard accessibility and authenticated Genie space/conversation behavior.',\n version: '0.2.0',\n maturity: 'live-gated',\n capabilities: ['aibi.dashboard', 'genie.space', 'genie.conversation'],\n checks: () => [restrictedPrincipalCheck(), aiBiDashboardCheck(), genieCheck()],\n requiredChecks: ['aibi-dashboard', 'genie'],\n requirements: [\n workspace,\n auth,\n requirement('dashboard', 'AI/BI dashboard ID', 'DBX_TEST_DASHBOARD_ID'),\n requirement('genie-space', 'Genie space ID', 'DBX_TEST_GENIE_SPACE_ID'),\n requirement(\n 'genie-question',\n 'Grounded Genie certification question',\n 'DBX_TEST_GENIE_QUESTION',\n ),\n ],\n docsUrl: `${DOCS}#aibi-dashboards-and-genie`,\n certificationScopes: [\n `${AZURE_M2M_SCOPE}; published AI/BI dashboard revision and Genie conversation start`,\n ],\n });\n}\n\nexport function createMlflowLifecycleTargetPack(): TargetPack {\n return defineTargetPack({\n id: 'mlflow-lifecycle',\n name: 'MLflow and model lifecycle',\n description:\n 'MLflow experiments plus Unity Catalog registered-model and model-version lifecycle evidence.',\n version: '0.1.0',\n maturity: 'live-gated',\n capabilities: [\n 'mlflow.experiments',\n 'models.unity-catalog',\n 'models.versions',\n 'models.lifecycle',\n ],\n checks: () => [restrictedPrincipalCheck(), mlflowLifecycleCheck()],\n requiredChecks: ['mlflow-lifecycle'],\n requirements: [\n workspace,\n auth,\n requirement('experiment', 'MLflow experiment ID', 'DBX_TEST_MLFLOW_EXPERIMENT_ID'),\n requirement(\n 'registered-model',\n 'Unity Catalog registered model',\n 'DBX_TEST_REGISTERED_MODEL',\n ),\n requirement('model-version', 'Registered model version', 'DBX_TEST_MODEL_VERSION'),\n ],\n docsUrl: `${DOCS}#mlflow-and-model-lifecycle`,\n certificationScopes: [\n `${AZURE_M2M_SCOPE}; MLflow experiment and configured Unity Catalog model version`,\n ],\n });\n}\n\nexport function createFeatureEngineeringTargetPack(): TargetPack {\n return defineTargetPack({\n id: 'feature-engineering-serving',\n name: 'Feature engineering and serving',\n description:\n 'Unity Catalog feature tables, online materialization state and freshness assertions.',\n version: '0.1.0',\n maturity: 'live-gated',\n capabilities: [\n 'features.tables',\n 'features.online-tables',\n 'features.freshness',\n 'features.serving',\n ],\n checks: () => [restrictedPrincipalCheck(), featureEngineeringServingCheck()],\n requiredChecks: ['feature-engineering'],\n requirements: [\n workspace,\n auth,\n warehouse,\n requirement('feature-table', 'Unity Catalog feature table', 'DBX_TEST_FEATURE_TABLE'),\n requirement(\n 'online-materialization',\n 'Databricks Online Table or Synced Table pipeline',\n 'DBX_TEST_ONLINE_TABLE',\n 'DBX_TEST_FEATURE_SERVING_PIPELINE_ID',\n ),\n requirement(\n 'feature-assertion',\n 'Feature freshness/correctness SQL',\n 'DBX_TEST_FEATURE_ASSERTION_SQL',\n ),\n ],\n docsUrl: `${DOCS}#feature-engineering-and-serving`,\n certificationScopes: [\n `${AZURE_M2M_SCOPE}; Delta feature table, PostgreSQL-backed Synced Table, and SQL freshness`,\n ],\n });\n}\n\nexport function createModelServingTargetPack(): TargetPack {\n return defineTargetPack({\n id: 'model-serving-gateway',\n name: 'Model Serving and AI Gateway',\n description: 'Serving readiness, inference behavior and optional AI Gateway policy presence.',\n version: '0.1.0',\n maturity: 'live-gated',\n capabilities: [\n 'model-serving.readiness',\n 'model-serving.inference',\n 'ai-gateway.configuration',\n ],\n checks: () => [restrictedPrincipalCheck(), modelServingCheck()],\n requiredChecks: ['model-serving'],\n requirements: [\n workspace,\n auth,\n requirement('serving-endpoint', 'Model Serving endpoint name', 'DBX_TEST_SERVING_ENDPOINT'),\n requirement(\n 'serving-request',\n 'Safe inference request JSON',\n 'DBX_TEST_SERVING_REQUEST_JSON',\n ),\n requirement(\n 'ai-gateway',\n 'AI Gateway enforcement flag set to 1',\n 'DBX_TEST_AI_GATEWAY_REQUIRED',\n ),\n ],\n docsUrl: `${DOCS}#model-serving-and-ai-gateway`,\n certificationScopes: [\n `${AZURE_M2M_SCOPE}; custom-model inference and AI Gateway inference-table configuration`,\n ],\n });\n}\n\nexport function createVectorRagAgentsTargetPack(): TargetPack {\n return defineTargetPack({\n id: 'vector-rag-agents',\n name: 'Vector Search, RAG and agents',\n description:\n 'Vector endpoint/index readiness, retrieval behavior and agent endpoint inference.',\n version: '0.1.0',\n maturity: 'live-gated',\n capabilities: [\n 'vector-search.endpoint',\n 'vector-search.index',\n 'rag.retrieval',\n 'agents.serving',\n ],\n checks: () => [restrictedPrincipalCheck(), vectorSearchCheck(), ragAgentCheck()],\n requiredChecks: ['vector-search', 'rag-agent'],\n requirements: [\n workspace,\n auth,\n requirement('vector-endpoint', 'Vector Search endpoint', 'DBX_TEST_VECTOR_ENDPOINT'),\n requirement('vector-index', 'Vector Search index', 'DBX_TEST_VECTOR_INDEX'),\n requirement('vector-query', 'Vector retrieval request JSON', 'DBX_TEST_VECTOR_QUERY_JSON'),\n requirement('agent-endpoint', 'Agent serving endpoint', 'DBX_TEST_AGENT_ENDPOINT'),\n requirement('agent-request', 'Safe agent request JSON', 'DBX_TEST_AGENT_REQUEST_JSON'),\n ],\n docsUrl: `${DOCS}#vector-search-rag-and-agents`,\n certificationScopes: [\n `${AZURE_M2M_SCOPE}; Delta Sync vector retrieval and custom PyFunc agent invocation`,\n ],\n });\n}\n\nexport function createFederationSharingTargetPack(): TargetPack {\n return defineTargetPack({\n id: 'federation-sharing-cleanrooms',\n name: 'Federation, Delta Sharing and Clean Rooms',\n description:\n 'Federated connection, data-plane query, Delta Share and Clean Room governance access.',\n version: '1.0.0',\n maturity: 'live-gated',\n capabilities: [\n 'federation.connections',\n 'federation.query',\n 'delta-sharing.shares',\n 'clean-rooms.access',\n ],\n checks: () => [restrictedPrincipalCheck(), federationSharingCleanRoomsCheck()],\n requiredChecks: ['federation-sharing-cleanrooms'],\n requirements: [\n workspace,\n auth,\n warehouse,\n requirement('connection', 'Lakehouse Federation connection', 'DBX_TEST_CONNECTION'),\n requirement('share', 'Delta Sharing share', 'DBX_TEST_SHARE'),\n requirement('clean-room', 'Clean Room name', 'DBX_TEST_CLEAN_ROOM'),\n requirement(\n 'federation-assertion',\n 'Federated data-plane SQL',\n 'DBX_TEST_FEDERATION_ASSERTION_SQL',\n ),\n ],\n docsUrl: `${DOCS}#federation-delta-sharing-and-clean-rooms`,\n certificationScopes: [\n `${AZURE_M2M_SCOPE}; managed PostgreSQL federation, Delta Sharing table, and two-metastore Clean Room`,\n ],\n });\n}\n\nexport function createSecurityCostDrTargetPack(): TargetPack {\n return defineTargetPack({\n id: 'security-cost-dr',\n name: 'Networking, security posture, cost and regional DR',\n description:\n 'IP controls, compute policy, cost guardrail and authenticated secondary-region readiness.',\n version: '1.0.0',\n maturity: 'live-gated',\n capabilities: [\n 'network.ip-access',\n 'security.compute-policy',\n 'cost.system-tables',\n 'dr.secondary-region',\n ],\n checks: () => [restrictedPrincipalCheck(), securityPostureCostCheck(), regionalDrCheck()],\n requiredChecks: ['security-cost', 'regional-dr'],\n requirements: [\n workspace,\n auth,\n warehouse,\n requirement(\n 'ip-access-list',\n 'Enabled workspace IP access list',\n 'DBX_TEST_IP_ACCESS_LIST_ID',\n ),\n requirement('cluster-policy', 'Compute policy ID', 'DBX_TEST_CLUSTER_POLICY_ID'),\n requirement('cost-assertion', 'Boolean SQL cost guardrail', 'DBX_TEST_COST_ASSERTION_SQL'),\n requirement('dr-workspace', 'Secondary workspace host', 'DBX_TEST_DR_HOST'),\n requirement('dr-warehouse', 'Running secondary-region warehouse', 'DBX_TEST_DR_WAREHOUSE_ID'),\n requirement('dr-assertion', 'Secondary-region workload SQL', 'DBX_TEST_DR_ASSERTION_SQL'),\n ],\n docsUrl: `${DOCS}#networking-security-cost-and-regional-dr`,\n certificationScopes: [\n `${AZURE_M2M_SCOPE}; TEST-NET block list, bounded compute policy, billing system-table guardrail, and West US 3 serverless DR warehouse`,\n ],\n });\n}\n\nexport function createAdvancedTargetPacks(): readonly TargetPack[] {\n return [\n createAdvancedStreamingTargetPack(),\n createAiBiGenieTargetPack(),\n createMlflowLifecycleTargetPack(),\n createFeatureEngineeringTargetPack(),\n createModelServingTargetPack(),\n createVectorRagAgentsTargetPack(),\n createFederationSharingTargetPack(),\n createSecurityCostDrTargetPack(),\n ];\n}\n","import { createAdvancedTargetPacks } from './advanced-target-packs.js';\nimport { createFoundationTargetPacks } from './foundation-packs.js';\nimport { createLakeflowJobsTargetPack } from './jobs-target-pack.js';\nimport type { TargetPack } from './target-packs.js';\n\nexport function createBuiltinTargetPacks(): readonly TargetPack[] {\n return [\n ...createFoundationTargetPacks(),\n createLakeflowJobsTargetPack(),\n ...createAdvancedTargetPacks(),\n ];\n}\n\nexport const builtinTargetPacks = createBuiltinTargetPacks();\n"]}
1
+ {"version":3,"sources":["../src/context.ts","../src/assert.ts","../src/mock-client.ts","../src/live-suite.ts","../src/pollers.ts","../src/live-checks.ts","../src/lakebase-checks.ts","../src/lakebase-branch.ts","../src/databricks-http.ts","../src/platform-checks.ts","../src/volume-checks.ts","../src/autoloader-checks.ts","../src/resilience-checks.ts","../src/target-packs.ts","../src/foundation-packs.ts","../src/jobs-orchestration.ts","../src/jobs-certification-check.ts","../src/jobs-target-pack.ts","../src/advanced-workload-checks.ts","../src/advanced-target-packs.ts","../src/builtin-packs.ts"],"names":["createDuckDbContext","createWorkspaceContext","required","warehouse","resolve","randomUUID","waitForDatabricksRun","requirement","delay","adapter","DOCS"],"mappings":"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","file":"index.js","sourcesContent":["import type { TableFixture } from './fixtures.js';\n\nexport type TestProfile = 'local' | 'live';\n\n/**\n * One SQL surface, two engines (ADR-0006). `local` executes on DuckDB\n * in-process; `live` executes on a Databricks SQL warehouse via the SQL\n * Statement Execution API. Params are positional `?` in both profiles — the\n * workspace context transparently rewrites them to the named markers the\n * Statement Execution API requires.\n */\nexport interface ExecutionContext {\n readonly profile: TestProfile;\n /** Execute a statement, discarding any result. */\n exec(sql: string, params?: readonly unknown[]): Promise<void>;\n /** Execute a query and return normalized row objects (bigint→number, timestamps→ISO). */\n query(sql: string, params?: readonly unknown[]): Promise<Record<string, unknown>[]>;\n /** Create + seed a table from a declarative fixture. */\n loadFixture(fixture: TableFixture): Promise<void>;\n /** Qualify a bare table name for this context (schema/catalog scoping). */\n qual(table: string): string;\n close(): Promise<void>;\n}\n\nexport function resolveProfile(env: Record<string, string | undefined> = process.env): TestProfile {\n const profile = env.DBX_TEST_PROFILE ?? 'local';\n if (profile !== 'local' && profile !== 'live') {\n throw new Error(`DBX_TEST_PROFILE must be 'local' or 'live', got '${profile}'`);\n }\n if (profile === 'live' && env.DBX_TEST_LIVE !== '1') {\n throw new Error(\n 'DBX_TEST_PROFILE=live requires DBX_TEST_LIVE=1 (live suites are always gated)',\n );\n }\n return profile;\n}\n\nexport interface CreateContextOptions {\n profile?: TestProfile;\n env?: Record<string, string | undefined>;\n /** local profile: schema to create + qualify tables with. live profile: schema within the catalog. */\n schema?: string;\n /** Live profile only: observe each submitted SQL statement. */\n onStatement?: (statement: { sql: string; statementId?: string }) => void;\n}\n\n/** Profile-dispatched factory. Lazy-imports each engine so the unused one stays out of the bundle. */\nexport async function createExecutionContext(\n options: CreateContextOptions = {},\n): Promise<ExecutionContext> {\n const env = options.env ?? process.env;\n const profile = options.profile ?? resolveProfile(env);\n if (profile === 'local') {\n const { createDuckDbContext } = await import('./duckdb-context.js');\n return createDuckDbContext({ schema: options.schema });\n }\n const { createWorkspaceContext } = await import('./workspace-context.js');\n return createWorkspaceContext({\n env,\n schema: options.schema,\n ...(options.onStatement ? { onStatement: options.onStatement } : {}),\n });\n}\n","import type { ExecutionContext } from './context.js';\nimport { compareToGolden } from './golden.js';\n\n/**\n * Framework-free table assertions — they throw plain Errors so they work\n * under vitest, cucumber-js steps, or the live check runner alike.\n */\nexport function expectTable(ctx: ExecutionContext, table: string) {\n const target = ctx.qual(table);\n return {\n async toHaveRowCount(expected: number): Promise<void> {\n const rows = await ctx.query(`SELECT COUNT(*) AS n FROM ${target}`);\n const actual = Number(rows[0]?.n ?? Number.NaN);\n if (actual !== expected) {\n throw new Error(`Expected ${target} to have ${expected} rows, found ${actual}`);\n }\n },\n\n /** Every partial row must match at least one table row on its own keys. */\n async toContainRows(partials: readonly Record<string, unknown>[]): Promise<void> {\n const rows = await ctx.query(`SELECT * FROM ${target}`);\n for (const partial of partials) {\n const hit = rows.some((row) =>\n Object.entries(partial).every(([key, value]) => looselyEqual(row[key], value)),\n );\n if (!hit) {\n throw new Error(\n `Expected ${target} to contain a row matching ${JSON.stringify(partial)}; ` +\n `have ${rows.length} rows: ${JSON.stringify(rows.slice(0, 5))}${rows.length > 5 ? ' …' : ''}`,\n );\n }\n }\n },\n\n /**\n * Compare `SELECT * ORDER BY <orderBy>` against a committed golden JSON\n * file. Set DBX_TEST_UPDATE_GOLDEN=1 to (re)write the golden instead —\n * a reviewable, versioned event.\n */\n async toMatchGolden(goldenPath: string, options: { orderBy?: string } = {}): Promise<void> {\n const orderBy = options.orderBy ? ` ORDER BY ${options.orderBy}` : '';\n const rows = await ctx.query(`SELECT * FROM ${target}${orderBy}`);\n await compareToGolden(goldenPath, rows, `table ${target}`);\n },\n };\n}\n\n/** Compare query results (not a whole table) against a golden file. */\nexport async function expectQueryToMatchGolden(\n ctx: ExecutionContext,\n sql: string,\n params: readonly unknown[],\n goldenPath: string,\n): Promise<void> {\n const rows = await ctx.query(sql, params);\n await compareToGolden(goldenPath, rows, 'query');\n}\n\nfunction looselyEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (typeof a === 'number' && typeof b === 'number') return Math.abs(a - b) < 1e-9;\n // Timestamps normalize to 'YYYY-MM-DD HH:MM:SS'; allow ISO-style expectations.\n if (typeof a === 'string' && typeof b === 'string') {\n return (\n a.replace('T', ' ').replace(/(\\.\\d+)?Z?$/, '') ===\n b.replace('T', ' ').replace(/(\\.\\d+)?Z?$/, '')\n );\n }\n return false;\n}\n","/**\n * Framework-free fake of the Databricks REST client surface, for unit tests\n * of orchestration logic (submit → poll → terminal). Queue responses per\n * (method, path-prefix); every call is recorded for assertions. Works under\n * vitest without vi.fn so it is equally usable from cucumber-js worlds.\n */\nexport interface RecordedCall {\n method: 'GET' | 'POST' | 'DELETE';\n path: string;\n body?: unknown;\n query?: Record<string, string | number | boolean | undefined>;\n}\n\nexport interface MockDatabricksClient {\n get<T>(path: string, query?: Record<string, string | number | boolean | undefined>): Promise<T>;\n post<T>(\n path: string,\n body?: unknown,\n query?: Record<string, string | number | boolean | undefined>,\n options?: unknown,\n ): Promise<T>;\n request<T>(\n method: 'GET' | 'POST' | 'DELETE',\n path: string,\n body?: unknown,\n query?: Record<string, string | number | boolean | undefined>,\n options?: unknown,\n ): Promise<T>;\n /** Queue the next response for calls whose path starts with `pathPrefix`. FIFO per prefix. */\n queue(\n method: 'GET' | 'POST' | 'DELETE',\n pathPrefix: string,\n response: unknown,\n ): MockDatabricksClient;\n /** Queue an error for the next matching call. */\n queueError(\n method: 'GET' | 'POST' | 'DELETE',\n pathPrefix: string,\n error: Error,\n ): MockDatabricksClient;\n readonly calls: readonly RecordedCall[];\n callsTo(method: 'GET' | 'POST' | 'DELETE', pathPrefix: string): RecordedCall[];\n}\n\ntype Queued = { pathPrefix: string; response?: unknown; error?: Error };\n\nexport function createMockDatabricksClient(): MockDatabricksClient {\n const queues: Record<'GET' | 'POST' | 'DELETE', Queued[]> = { GET: [], POST: [], DELETE: [] };\n const calls: RecordedCall[] = [];\n\n function take(method: 'GET' | 'POST' | 'DELETE', path: string): Queued {\n const index = queues[method].findIndex((q) => path.startsWith(q.pathPrefix));\n if (index === -1) {\n throw new Error(\n `MockDatabricksClient: no queued ${method} response for ${path}. ` +\n `Queued prefixes: ${queues[method].map((q) => q.pathPrefix).join(', ') || '(none)'}`,\n );\n }\n return queues[method].splice(index, 1)[0] as Queued;\n }\n\n const client: MockDatabricksClient = {\n async get<T>(path: string, query?: Record<string, string | number | boolean | undefined>) {\n calls.push({ method: 'GET', path, query });\n const queued = take('GET', path);\n if (queued.error) throw queued.error;\n return queued.response as T;\n },\n async post<T>(\n path: string,\n body?: unknown,\n query?: Record<string, string | number | boolean | undefined>,\n ) {\n calls.push({ method: 'POST', path, body, query });\n const queued = take('POST', path);\n if (queued.error) throw queued.error;\n return queued.response as T;\n },\n async request<T>(\n method: 'GET' | 'POST' | 'DELETE',\n path: string,\n body?: unknown,\n query?: Record<string, string | number | boolean | undefined>,\n ) {\n calls.push({ method, path, body, query });\n const queued = take(method, path);\n if (queued.error) throw queued.error;\n return queued.response as T;\n },\n queue(method, pathPrefix, response) {\n queues[method].push({ pathPrefix, response });\n return client;\n },\n queueError(method, pathPrefix, error) {\n queues[method].push({ pathPrefix, error });\n return client;\n },\n calls,\n callsTo(method, pathPrefix) {\n return calls.filter((c) => c.method === method && c.path.startsWith(pathPrefix));\n },\n };\n return client;\n}\n","import { mkdir, writeFile } from 'node:fs/promises';\nimport { dirname } from 'node:path';\nimport type { ExecutionContext } from './context.js';\nimport {\n type WorkspaceClientLike,\n createClientFromEnv,\n createWorkspaceContext,\n} from './workspace-context.js';\n\nexport type LiveCheckStatus = 'pass' | 'fail' | 'not-configured';\n\nexport interface LiveCheckContext {\n env: Record<string, string | undefined>;\n warehouse: ExecutionContext;\n client: WorkspaceClientLike;\n}\n\nexport interface LiveCheck {\n id: string;\n description: string;\n configured?: (env: Record<string, string | undefined>) => boolean;\n run(context: LiveCheckContext): Promise<unknown>;\n}\n\nexport interface LiveCheckResult {\n id: string;\n description: string;\n status: LiveCheckStatus;\n durationMs: number;\n details?: unknown;\n error?: string;\n}\n\nexport type TargetPackMaturity =\n | 'proposed'\n | 'building'\n | 'shipped'\n | 'live-gated'\n | 'certifying'\n | 'certified';\n\nexport interface TargetPackEvidenceMetadata {\n id: string;\n name: string;\n version: string;\n maturity: TargetPackMaturity;\n capabilities: string[];\n docsUrl?: string;\n certificationScopes: string[];\n target: {\n cloud?: string;\n region?: string;\n workspace?: string;\n runtime?: string;\n compute?: string;\n };\n}\n\nexport interface LiveEvidence {\n schemaVersion: 1;\n kind: 'databricks-live-suite';\n startedAt: string;\n finishedAt: string;\n success: boolean;\n required: string[];\n results: LiveCheckResult[];\n targetPack?: TargetPackEvidenceMetadata;\n}\n\nexport interface LiveSuiteSpec {\n checks: readonly LiveCheck[];\n required?: readonly string[];\n evidencePath?: string;\n junitPath?: string;\n env?: Record<string, string | undefined>;\n targetPack?: TargetPackEvidenceMetadata;\n}\n\nexport interface LiveSuiteRuntime {\n warehouse?: ExecutionContext;\n client?: WorkspaceClientLike;\n}\n\nexport interface DefinedLiveSuite {\n run(runtime?: LiveSuiteRuntime): Promise<LiveEvidence | undefined>;\n}\n\n/**\n * Define an explicitly gated live suite. Without DBX_TEST_LIVE=1, run() is a\n * silent no-op so the same command is safe in ordinary CI matrices.\n */\nexport function defineLiveSuite(spec: LiveSuiteSpec): DefinedLiveSuite {\n return { run: (runtime) => runLiveSuite(spec, runtime) };\n}\n\nexport async function runLiveSuite(\n spec: LiveSuiteSpec,\n runtime: LiveSuiteRuntime = {},\n): Promise<LiveEvidence | undefined> {\n const env = spec.env ?? process.env;\n if (env.DBX_TEST_LIVE !== '1') return undefined;\n\n const required = [...(spec.required ?? [])];\n const known = new Set(spec.checks.map((check) => check.id));\n for (const id of required) {\n if (!known.has(id)) throw new Error(`Required live check '${id}' is not defined`);\n }\n\n const startedAt = new Date().toISOString();\n const ownedWarehouse = runtime.warehouse === undefined;\n const client = runtime.client ?? createClientFromEnv(env);\n const warehouse =\n runtime.warehouse ??\n (hasWarehouseConfig(env)\n ? await createWorkspaceContext({ env, client })\n : unavailableWarehouseContext());\n const results: LiveCheckResult[] = [];\n\n try {\n for (const check of spec.checks) {\n if (check.configured && !check.configured(env)) {\n results.push({\n id: check.id,\n description: check.description,\n status: 'not-configured',\n durationMs: 0,\n });\n continue;\n }\n const before = performance.now();\n try {\n const details = await check.run({ env, warehouse, client });\n results.push({\n id: check.id,\n description: check.description,\n status: 'pass',\n durationMs: Math.round(performance.now() - before),\n ...(details === undefined ? {} : { details: redactValue(details, env) }),\n });\n } catch (error) {\n results.push({\n id: check.id,\n description: check.description,\n status: 'fail',\n durationMs: Math.round(performance.now() - before),\n error: redactText(error instanceof Error ? error.message : String(error), env),\n });\n }\n }\n } finally {\n if (ownedWarehouse) await warehouse.close();\n }\n\n const success = required.every(\n (id) => results.find((result) => result.id === id)?.status === 'pass',\n );\n const evidence: LiveEvidence = {\n schemaVersion: 1,\n kind: 'databricks-live-suite',\n startedAt,\n finishedAt: new Date().toISOString(),\n success,\n required,\n results,\n ...(spec.targetPack ? { targetPack: spec.targetPack } : {}),\n };\n\n if (spec.evidencePath)\n await writeReport(spec.evidencePath, `${JSON.stringify(evidence, null, 2)}\\n`);\n if (spec.junitPath) await writeReport(spec.junitPath, renderJUnit(evidence));\n return evidence;\n}\n\nfunction hasWarehouseConfig(env: Record<string, string | undefined>): boolean {\n return Boolean(env.DATABRICKS_WAREHOUSE_ID || env.DATABRICKS_HTTP_PATH);\n}\n\nfunction unavailableWarehouseContext(): ExecutionContext {\n const unavailable = async (): Promise<never> => {\n throw new Error(\n 'This live check requires DATABRICKS_WAREHOUSE_ID or DATABRICKS_HTTP_PATH; REST-only checks can run without SQL warehouse configuration',\n );\n };\n return {\n profile: 'live',\n qual: (table) => table,\n exec: unavailable,\n query: unavailable,\n loadFixture: unavailable,\n close: async () => undefined,\n };\n}\n\nasync function writeReport(path: string, contents: string): Promise<void> {\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, contents, 'utf8');\n}\n\nfunction redactText(text: string, env: Record<string, string | undefined>): string {\n let output = text;\n for (const [name, value] of Object.entries(env)) {\n if (!value || value.length < 6 || !/(TOKEN|SECRET|PASSWORD|BEARER|KEY)/i.test(name)) continue;\n output = output.split(value).join('[REDACTED]');\n }\n return output;\n}\n\nfunction redactValue(value: unknown, env: Record<string, string | undefined>): unknown {\n return JSON.parse(redactText(JSON.stringify(value), env)) as unknown;\n}\n\nfunction xml(value: string): string {\n return value\n .replaceAll('&', '&amp;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;')\n .replaceAll('\"', '&quot;')\n .replaceAll(\"'\", '&apos;');\n}\n\nexport function renderJUnit(evidence: LiveEvidence): string {\n const failures = evidence.results.filter((result) => result.status === 'fail').length;\n const skipped = evidence.results.filter((result) => result.status === 'not-configured').length;\n const seconds = evidence.results.reduce((sum, result) => sum + result.durationMs, 0) / 1000;\n const cases = evidence.results\n .map((result) => {\n const body =\n result.status === 'fail'\n ? `<failure message=\"${xml(result.error ?? 'check failed')}\"/>`\n : result.status === 'not-configured'\n ? '<skipped message=\"not configured\"/>'\n : '';\n return ` <testcase classname=\"databricks-live\" name=\"${xml(result.id)}\" time=\"${result.durationMs / 1000}\">${body}</testcase>`;\n })\n .join('\\n');\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n<testsuite name=\"databricks-live\" tests=\"${evidence.results.length}\" failures=\"${failures}\" skipped=\"${skipped}\" time=\"${seconds}\">\\n${cases}\\n</testsuite>\\n`;\n}\n","import type { WorkspaceClientLike } from './workspace-context.js';\n\nexport interface PollOptions {\n pollIntervalMs?: number;\n timeoutMs?: number;\n signal?: AbortSignal;\n}\n\nconst TERMINAL_PIPELINE_STATES = new Set(['COMPLETED', 'FAILED', 'CANCELED']);\n\nexport async function waitForPipelineUpdate(\n client: WorkspaceClientLike,\n pipelineId: string,\n updateId: string,\n options: PollOptions = {},\n): Promise<Record<string, unknown>> {\n const deadline = Date.now() + (options.timeoutMs ?? 900_000);\n const interval = options.pollIntervalMs ?? 10_000;\n const path = `/api/2.0/pipelines/${encodeURIComponent(pipelineId)}/updates/${encodeURIComponent(updateId)}`;\n let update: { update?: { state?: string } } = await client.get(path);\n while (!TERMINAL_PIPELINE_STATES.has(update.update?.state ?? '') && Date.now() < deadline) {\n if (options.signal?.aborted) throw new Error(`Pipeline update ${updateId} was aborted`);\n await abortableDelay(interval, options.signal);\n update = await client.get(path);\n }\n const state = update.update?.state ?? 'UNKNOWN';\n if (state !== 'COMPLETED') {\n throw new Error(`Pipeline update ${updateId} ended in ${state} (wanted COMPLETED)`);\n }\n return update as Record<string, unknown>;\n}\n\nfunction abortableDelay(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(new Error('Polling aborted'));\n return;\n }\n const timer = setTimeout(resolve, ms);\n signal?.addEventListener(\n 'abort',\n () => {\n clearTimeout(timer);\n reject(new Error('Polling aborted'));\n },\n { once: true },\n );\n });\n}\n","import { waitForDatabricksRun } from '@fabric-harness/databricks';\nimport type { LiveCheck } from './live-suite.js';\nimport { waitForPipelineUpdate } from './pollers.js';\n\nexport function sqlRoundTripCheck(): LiveCheck {\n return {\n id: 'sql',\n description: 'SQL Statement Execution round-trip',\n configured: (env) => Boolean(env.DATABRICKS_WAREHOUSE_ID || env.DATABRICKS_HTTP_PATH),\n async run({ warehouse }) {\n const rows = await warehouse.query('SELECT 1 AS dbx_test_ok');\n if (Number(rows[0]?.dbx_test_ok) !== 1)\n throw new Error('SQL round-trip returned an unexpected value');\n return { rows: rows.length };\n },\n };\n}\n\n/** Fail closed if governance checks accidentally run with bootstrap or administrator credentials. */\nexport function restrictedPrincipalCheck(): LiveCheck {\n return {\n id: 'restricted-principal',\n description: 'Live checks use the designated least-privilege service principal',\n configured: (env) => Boolean(env.DBX_TEST_RESTRICTED_PRINCIPAL_ID),\n async run({ env }) {\n const expected = env.DBX_TEST_RESTRICTED_PRINCIPAL_ID?.toLowerCase();\n const actual = env.DATABRICKS_CLIENT_ID?.toLowerCase();\n if (!expected || !actual) {\n throw new Error(\n 'Restricted-principal check requires DBX_TEST_RESTRICTED_PRINCIPAL_ID and DATABRICKS_CLIENT_ID',\n );\n }\n if (actual !== expected) {\n throw new Error(`Live suite is using principal '${actual}', expected '${expected}'`);\n }\n return { principalId: actual };\n },\n };\n}\n\nexport interface DeltaColumnContract {\n name: string;\n type?: string;\n}\n\nexport function assertDeltaContract(\n table: string,\n rows: readonly Record<string, unknown>[],\n columns: readonly DeltaColumnContract[],\n): void {\n for (const expected of columns) {\n const actual = rows.find((row) => String(row.col_name ?? row.column_name) === expected.name);\n if (!actual) throw new Error(`Delta contract missing column '${expected.name}' in ${table}`);\n const actualType = String(actual.data_type ?? actual.column_type ?? '').toLowerCase();\n if (expected.type && actualType !== expected.type.toLowerCase()) {\n throw new Error(\n `Delta column ${expected.name} has type ${actualType}, expected ${expected.type}`,\n );\n }\n }\n}\n\nexport function deltaContractCheck(\n tableEnv = 'DBX_TEST_DELTA_TABLE',\n columns: readonly DeltaColumnContract[] = [],\n): LiveCheck {\n return {\n id: 'delta-contract',\n description: 'Delta table schema contract',\n configured: (env) => Boolean(env[tableEnv]),\n async run({ env, warehouse }) {\n const table = env[tableEnv] as string;\n const rows = await warehouse.query(`DESCRIBE TABLE ${table}`);\n assertDeltaContract(table, rows, columns);\n return { table, columns: rows.length };\n },\n };\n}\n\nexport function unityCatalogAccessCheck(): LiveCheck {\n return {\n id: 'uc-grants',\n description: 'Unity Catalog allow/deny access assertions',\n configured: (env) => Boolean(env.DBX_TEST_UC_ALLOWED_TABLE && env.DBX_TEST_UC_DENIED_TABLE),\n async run({ env, warehouse }) {\n await warehouse.query(`SELECT * FROM ${env.DBX_TEST_UC_ALLOWED_TABLE} LIMIT 1`);\n try {\n await warehouse.query(`SELECT * FROM ${env.DBX_TEST_UC_DENIED_TABLE} LIMIT 1`);\n } catch (error) {\n if (/permission.?denied|insufficient.?priv|403|unauthoriz/i.test(String(error))) {\n return { allowed: env.DBX_TEST_UC_ALLOWED_TABLE, denied: env.DBX_TEST_UC_DENIED_TABLE };\n }\n throw error;\n }\n throw new Error(`Expected access to ${env.DBX_TEST_UC_DENIED_TABLE} to be denied`);\n },\n };\n}\n\nexport function jobRunCheck(): LiveCheck {\n return {\n id: 'jobs',\n description: 'Databricks Job run-now reaches SUCCESS',\n configured: (env) => Boolean(env.DBX_TEST_JOB_ID),\n async run({ env, client }) {\n const jobId = Number(env.DBX_TEST_JOB_ID);\n if (!Number.isFinite(jobId)) throw new Error('DBX_TEST_JOB_ID must be numeric');\n const submitted = await client.post<{ run_id: number }>('/api/2.1/jobs/run-now', {\n job_id: jobId,\n });\n const run = await waitForDatabricksRun(client as never, submitted.run_id, {\n timeoutMs: Number(env.DBX_TEST_TIMEOUT_MS ?? 900_000),\n pollIntervalMs: Number(env.DBX_TEST_POLL_INTERVAL_MS ?? 10_000),\n });\n const result = (run as { state?: { result_state?: string } }).state?.result_state;\n if (result !== 'SUCCESS') throw new Error(`Job ${jobId} ended in ${result ?? 'UNKNOWN'}`);\n return { jobId, runId: submitted.run_id };\n },\n };\n}\n\n/** Trigger the deployed Lakeflow pipeline and require a completed update. */\nexport function pipelineRefreshCheck(): LiveCheck {\n return {\n id: 'pipeline',\n description: 'Lakeflow telemetry pipeline refresh reaches COMPLETED',\n configured: (env) => Boolean(env.DBX_TEST_PIPELINE_ID),\n async run({ env, client }) {\n const pipelineId = env.DBX_TEST_PIPELINE_ID as string;\n const submitted = await client.post<{ update_id?: string }>(\n `/api/2.0/pipelines/${encodeURIComponent(pipelineId)}/updates`,\n { full_refresh: false },\n );\n if (!submitted.update_id) {\n throw new Error(`Pipeline ${pipelineId} did not return an update_id`);\n }\n await waitForPipelineUpdate(client, pipelineId, submitted.update_id, {\n timeoutMs: Number(env.DBX_TEST_TIMEOUT_MS ?? 900_000),\n pollIntervalMs: Number(env.DBX_TEST_POLL_INTERVAL_MS ?? 10_000),\n });\n return { pipelineId, updateId: submitted.update_id };\n },\n };\n}\n\nexport function notebookSubmitCheck(): LiveCheck {\n return {\n id: 'notebook',\n description: 'Databricks notebook submit run reaches SUCCESS',\n configured: (env) =>\n Boolean(\n env.DBX_TEST_NOTEBOOK_PATH &&\n (env.DBX_TEST_CLUSTER_ID || env.DBX_TEST_NOTEBOOK_SERVERLESS === '1'),\n ),\n async run({ env, client }) {\n if (\n !env.DBX_TEST_NOTEBOOK_PATH ||\n (!env.DBX_TEST_CLUSTER_ID && env.DBX_TEST_NOTEBOOK_SERVERLESS !== '1')\n ) {\n throw new Error(\n 'Notebook submit requires DBX_TEST_NOTEBOOK_PATH and either DBX_TEST_CLUSTER_ID or DBX_TEST_NOTEBOOK_SERVERLESS=1',\n );\n }\n const submitted = await client.post<{ run_id?: number }>('/api/2.1/jobs/runs/submit', {\n run_name: `fabric-experiments-notebook-${Date.now()}`,\n tasks: [\n {\n task_key: 'notebook',\n ...(env.DBX_TEST_CLUSTER_ID ? { existing_cluster_id: env.DBX_TEST_CLUSTER_ID } : {}),\n notebook_task: { notebook_path: env.DBX_TEST_NOTEBOOK_PATH },\n },\n ],\n });\n if (!submitted.run_id) throw new Error('Notebook submit returned no run_id');\n const run = await waitForDatabricksRun(client as never, submitted.run_id, {\n timeoutMs: Number(env.DBX_TEST_TIMEOUT_MS ?? 900_000),\n pollIntervalMs: Number(env.DBX_TEST_POLL_INTERVAL_MS ?? 10_000),\n });\n const result = (run as { state?: { result_state?: string } }).state?.result_state;\n if (result !== 'SUCCESS') throw new Error(`Notebook run ended in ${result ?? 'UNKNOWN'}`);\n return { runId: submitted.run_id, notebookPath: env.DBX_TEST_NOTEBOOK_PATH };\n },\n };\n}\n\nexport function dbtBuildCheck(): LiveCheck {\n return {\n id: 'dbt',\n description: 'Databricks dbt task reaches SUCCESS',\n configured: (env) =>\n Boolean(\n (env.DBX_TEST_DBT_GIT_URL || env.DBX_TEST_DBT_PROJECT_DIR) && env.DATABRICKS_WAREHOUSE_ID,\n ),\n async run({ env, client }) {\n if (\n (!env.DBX_TEST_DBT_GIT_URL && !env.DBX_TEST_DBT_PROJECT_DIR) ||\n !env.DATABRICKS_WAREHOUSE_ID\n ) {\n throw new Error(\n 'dbt build requires DBX_TEST_DBT_GIT_URL or DBX_TEST_DBT_PROJECT_DIR, plus DATABRICKS_WAREHOUSE_ID',\n );\n }\n const sourceVars = JSON.stringify({\n source_catalog: env.DBX_TEST_DBT_SOURCE_CATALOG ?? env.DBX_TEST_CATALOG,\n source_schema: env.DBX_TEST_DBT_SOURCE_SCHEMA,\n });\n const serverless = env.DBX_TEST_DBT_SERVERLESS === '1';\n const request = {\n run_name: `fabric-experiments-dbt-${Date.now()}`,\n ...(env.DBX_TEST_DBT_GIT_URL\n ? {\n git_source: {\n git_url: env.DBX_TEST_DBT_GIT_URL,\n git_provider: env.DBX_TEST_DBT_GIT_PROVIDER ?? 'gitHub',\n git_branch: env.DBX_TEST_DBT_GIT_BRANCH ?? 'main',\n },\n }\n : {}),\n tasks: [\n {\n task_key: 'dbt_build',\n ...(serverless ? { environment_key: 'dbt' } : {}),\n dbt_task: {\n commands: ['dbt deps', `dbt build --vars '${sourceVars}'`],\n warehouse_id: env.DATABRICKS_WAREHOUSE_ID,\n ...(env.DBX_TEST_CATALOG ? { catalog: env.DBX_TEST_CATALOG } : {}),\n ...(env.DBX_TEST_SCHEMA ? { schema: env.DBX_TEST_SCHEMA } : {}),\n ...(env.DBX_TEST_DBT_GIT_URL ? {} : { source: 'WORKSPACE' }),\n ...(env.DBX_TEST_DBT_PROJECT_DIR\n ? { project_directory: env.DBX_TEST_DBT_PROJECT_DIR }\n : {}),\n },\n },\n ],\n ...(serverless\n ? {\n environments: [\n {\n environment_key: 'dbt',\n spec: {\n environment_version: '2',\n dependencies: ['dbt-databricks>=1.8,<2'],\n },\n },\n ],\n }\n : {}),\n };\n const submitted = await client.post<{ run_id?: number }>(\n '/api/2.1/jobs/runs/submit',\n request,\n );\n if (!submitted.run_id) throw new Error('dbt submit returned no run_id');\n const run = await waitForDatabricksRun(client as never, submitted.run_id, {\n timeoutMs: Number(env.DBX_TEST_TIMEOUT_MS ?? 900_000),\n pollIntervalMs: Number(env.DBX_TEST_POLL_INTERVAL_MS ?? 10_000),\n });\n const result = (run as { state?: { result_state?: string } }).state?.result_state;\n if (result !== 'SUCCESS') throw new Error(`dbt run ended in ${result ?? 'UNKNOWN'}`);\n return {\n runId: submitted.run_id,\n source: env.DBX_TEST_DBT_GIT_URL ?? env.DBX_TEST_DBT_PROJECT_DIR,\n };\n },\n };\n}\n\n/** Wrap product-specific checks such as Auto Loader, Lakebase, notebooks, or dbt. */\nexport function customLiveCheck(\n id: string,\n description: string,\n run: LiveCheck['run'],\n configured?: LiveCheck['configured'],\n): LiveCheck {\n return { id, description, run, ...(configured ? { configured } : {}) };\n}\n","import {\n LakebaseDatabaseProvider,\n type LakebasePoolFactory,\n exchangeLakebaseCredential,\n} from '@fabricorg/experiments-db-pool';\nimport type { LiveCheck } from './live-suite.js';\nimport { resolveTokenProvider } from './workspace-context.js';\n\nexport interface LakebaseCheckOptions {\n fetchImpl?: typeof fetch;\n poolFactory?: LakebasePoolFactory;\n}\n\nfunction required(env: Record<string, string | undefined>, name: string): string {\n const value = env[name]?.trim();\n if (!value) throw new Error(`${name} is required`);\n return value;\n}\n\nexport function createLakebaseTestProvider(\n env: Record<string, string | undefined>,\n options: LakebaseCheckOptions = {},\n): LakebaseDatabaseProvider {\n return new LakebaseDatabaseProvider({\n host: required(env, 'DBX_TEST_LAKEBASE_HOST'),\n database: required(env, 'DBX_TEST_LAKEBASE_DATABASE'),\n user: required(env, 'DBX_TEST_LAKEBASE_USER'),\n workspaceHost: required(env, 'DATABRICKS_HOST'),\n endpoint: required(env, 'DBX_TEST_LAKEBASE_ENDPOINT'),\n token: resolveTokenProvider(required(env, 'DATABRICKS_HOST'), env, options.fetchImpl),\n fetchImpl: options.fetchImpl,\n poolFactory: options.poolFactory,\n max: 1,\n });\n}\n\nasync function workspaceToken(\n env: Record<string, string | undefined>,\n fetchImpl?: typeof fetch,\n): Promise<string> {\n const host = required(env, 'DATABRICKS_HOST');\n const provider = resolveTokenProvider(host, env, fetchImpl);\n return typeof provider === 'string' ? provider : provider();\n}\n\n/** Verify the workspace identity can exchange a short-lived Lakebase credential. */\nexport function lakebaseCredentialCheck(options: LakebaseCheckOptions = {}): LiveCheck {\n return {\n id: 'lakebase-credential',\n description: 'Lakebase OAuth credential exchange',\n configured: (env) => Boolean(env.DBX_TEST_LAKEBASE_ENDPOINT),\n async run({ env }) {\n const credential = await exchangeLakebaseCredential({\n workspaceHost: required(env, 'DATABRICKS_HOST'),\n endpoint: required(env, 'DBX_TEST_LAKEBASE_ENDPOINT'),\n workspaceToken: await workspaceToken(env, options.fetchImpl),\n fetchImpl: options.fetchImpl,\n });\n if (credential.expiresAt <= Date.now()) {\n throw new Error('Lakebase credential is already expired');\n }\n return { expiresAt: new Date(credential.expiresAt).toISOString() };\n },\n };\n}\n\n/** Exercise the production provider before and after an explicit credential/pool refresh. */\nexport function lakebaseRoundTripCheck(options: LakebaseCheckOptions = {}): LiveCheck {\n return {\n id: 'lakebase',\n description: 'Lakebase provider query and credential refresh round-trip',\n configured: (env) =>\n Boolean(\n env.DBX_TEST_LAKEBASE_ENDPOINT &&\n env.DBX_TEST_LAKEBASE_HOST &&\n env.DBX_TEST_LAKEBASE_DATABASE &&\n env.DBX_TEST_LAKEBASE_USER,\n ),\n async run({ env }) {\n const provider = createLakebaseTestProvider(env, options);\n try {\n const first = await provider\n .getPool()\n .query<{ dbx_test_ok: number }>('SELECT 1 AS dbx_test_ok');\n if (Number(first.rows[0]?.dbx_test_ok) !== 1) {\n throw new Error('Lakebase round-trip returned an unexpected value');\n }\n await provider.refreshCredentials();\n const second = await provider\n .getPool()\n .query<{ dbx_test_ok: number }>('SELECT 1 AS dbx_test_ok');\n if (Number(second.rows[0]?.dbx_test_ok) !== 1) {\n throw new Error('Lakebase post-refresh round-trip returned an unexpected value');\n }\n return { queries: 2, refreshed: true };\n } finally {\n await provider.close();\n }\n },\n };\n}\n","import { createClientFromEnv } from './workspace-context.js';\n\nexport interface LakebaseControlClient {\n get<T>(path: string, query?: Record<string, string | number | boolean | undefined>): Promise<T>;\n post<T>(\n path: string,\n body?: unknown,\n query?: Record<string, string | number | boolean | undefined>,\n ): Promise<T>;\n request<T>(\n method: 'DELETE',\n path: string,\n body?: unknown,\n query?: Record<string, string | number | boolean | undefined>,\n ): Promise<T>;\n}\n\nexport interface EphemeralLakebaseBranch {\n project: string;\n branch: string;\n branchId: string;\n endpoint: string;\n host: string;\n databaseResource: string;\n database: string;\n createdAt: string;\n expiresAt: string;\n}\n\nexport interface LakebaseBranchOptions {\n env?: Record<string, string | undefined>;\n client?: LakebaseControlClient;\n project?: string;\n branchId: string;\n ttlMs: number;\n pollIntervalMs?: number;\n timeoutMs?: number;\n now?: () => Date;\n}\n\ninterface Operation<T = unknown> {\n name?: string;\n done?: boolean;\n error?: { code?: number; message?: string };\n response?: T;\n}\n\ninterface Branch {\n name: string;\n branch_id?: string;\n create_time?: string;\n status?: { current_state?: string };\n}\n\ninterface Endpoint {\n name: string;\n endpoint_id?: string;\n status?: { hosts?: { host?: string }; current_state?: string };\n}\n\ninterface Database {\n name: string;\n status?: { postgres_database?: string };\n}\n\nconst DEFAULT_POLL_INTERVAL_MS = 2_000;\nconst DEFAULT_TIMEOUT_MS = 5 * 60_000;\n\nexport function resolveLakebaseProject(\n env: Record<string, string | undefined>,\n explicit?: string,\n): string {\n const project = explicit ?? env.DBX_TEST_LAKEBASE_PROJECT;\n if (!project || !/^projects\\/[a-z0-9][a-z0-9-]{0,62}$/.test(project)) {\n throw new Error(\n `Lakebase project must look like projects/fabric-experiments; got '${project ?? ''}'`,\n );\n }\n return project;\n}\n\nexport function toLakebaseBranchId(environmentName: string): string {\n const normalized = environmentName\n .toLowerCase()\n .replace(/[^a-z0-9-]+/g, '-')\n .replace(/^-+|-+$/g, '');\n const prefixed = normalized.startsWith('fx-') ? normalized : `fx-${normalized}`;\n const trimmed = prefixed.slice(0, 63).replace(/-+$/g, '');\n if (!/^fx-[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/.test(trimmed)) {\n throw new Error(`Cannot derive a safe Lakebase branch ID from '${environmentName}'`);\n }\n return trimmed;\n}\n\nexport async function createEphemeralLakebaseBranch(\n options: LakebaseBranchOptions,\n): Promise<EphemeralLakebaseBranch> {\n const env = options.env ?? process.env;\n const client = options.client ?? (createClientFromEnv(env) as LakebaseControlClient);\n const project = resolveLakebaseProject(env, options.project);\n const branchId = toLakebaseBranchId(options.branchId);\n const ttlSeconds = Math.max(60, Math.ceil(options.ttlMs / 1_000));\n const operation = await client.post<Operation<Branch>>(\n `/api/2.0/postgres/${project}/branches`,\n { spec: { ttl: `${ttlSeconds}s` } },\n { branch_id: branchId, replace_existing: false },\n );\n const branch = await waitForOperation(client, operation, options);\n const branchName = branch?.name ?? `${project}/branches/${branchId}`;\n const [endpointResult, databaseResult] = await Promise.all([\n client.get<{ endpoints?: Endpoint[] }>(`/api/2.0/postgres/${branchName}/endpoints`),\n client.get<{ databases?: Database[] }>(`/api/2.0/postgres/${branchName}/databases`),\n ]);\n const endpoint =\n endpointResult.endpoints?.find((item) => item.endpoint_id === 'primary') ??\n endpointResult.endpoints?.[0];\n const database = databaseResult.databases?.[0];\n const host = endpoint?.status?.hosts?.host;\n const postgresDatabase = database?.status?.postgres_database;\n if (!endpoint?.name || !host || !database?.name || !postgresDatabase) {\n throw new Error(`Lakebase branch '${branchName}' did not expose an endpoint and database`);\n }\n const createdAt = branch?.create_time ?? (options.now?.() ?? new Date()).toISOString();\n return {\n project,\n branch: branchName,\n branchId,\n endpoint: endpoint.name,\n host,\n databaseResource: database.name,\n database: postgresDatabase,\n createdAt,\n expiresAt: new Date(Date.parse(createdAt) + ttlSeconds * 1_000).toISOString(),\n };\n}\n\nexport async function deleteEphemeralLakebaseBranch(\n branch: Pick<EphemeralLakebaseBranch, 'branch'>,\n options: Omit<LakebaseBranchOptions, 'branchId' | 'ttlMs' | 'project'> = {},\n): Promise<void> {\n if (!/^projects\\/[a-z0-9-]+\\/branches\\/fx-[a-z0-9-]+$/.test(branch.branch)) {\n throw new Error(`Refusing to delete non-ephemeral Lakebase branch '${branch.branch}'`);\n }\n const env = options.env ?? process.env;\n const client = options.client ?? (createClientFromEnv(env) as LakebaseControlClient);\n const operation = await client.request<Operation>(\n 'DELETE',\n `/api/2.0/postgres/${branch.branch}`,\n undefined,\n { purge: true },\n );\n await waitForOperation(client, operation, options);\n}\n\nasync function waitForOperation<T>(\n client: LakebaseControlClient,\n initial: Operation<T>,\n options: Pick<LakebaseBranchOptions, 'pollIntervalMs' | 'timeoutMs'>,\n): Promise<T | undefined> {\n let operation = initial;\n const deadline = Date.now() + (options.timeoutMs ?? DEFAULT_TIMEOUT_MS);\n while (!operation.done) {\n if (!operation.name) throw new Error('Lakebase operation did not return an operation name');\n if (Date.now() >= deadline) throw new Error(`Lakebase operation '${operation.name}' timed out`);\n await delay(options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS);\n operation = await client.get<Operation<T>>(`/api/2.0/postgres/${operation.name}`);\n }\n if (operation.error) {\n throw new Error(\n `Lakebase operation failed${operation.error.code ? ` (${operation.error.code})` : ''}: ${\n operation.error.message ?? 'unknown error'\n }`,\n );\n }\n return operation.response;\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import { resolveTokenProvider } from './workspace-context.js';\n\nexport async function databricksFetch(\n env: Record<string, string | undefined>,\n pathOrUrl: string,\n init: RequestInit = {},\n fetchImpl: typeof fetch = fetch,\n): Promise<Response> {\n const host = env.DATABRICKS_HOST?.replace(/\\/$/, '');\n if (!host) throw new Error('DATABRICKS_HOST is required');\n const provider = resolveTokenProvider(host, env, fetchImpl);\n const token = typeof provider === 'string' ? provider : await provider();\n const headers = new Headers(init.headers);\n headers.set('authorization', `Bearer ${token}`);\n const response = await fetchImpl(\n /^https?:\\/\\//.test(pathOrUrl) ? pathOrUrl : `${host}${pathOrUrl}`,\n {\n ...init,\n headers,\n },\n );\n if (!response.ok) {\n const body = await response.text();\n throw new Error(\n `Databricks request failed: ${response.status} ${response.statusText}: ${body.slice(0, 500)}`,\n );\n }\n return response;\n}\n","import { databricksFetch } from './databricks-http.js';\nimport type { LiveCheck } from './live-suite.js';\n\nfunction csv(value: string | undefined): string[] {\n return (value ?? '')\n .split(',')\n .map((item) => item.trim())\n .filter(Boolean);\n}\n\n/** Assert secret key metadata only; values are never requested. */\nexport function secretScopeCheck(): LiveCheck {\n return {\n id: 'secrets',\n description: 'Databricks secret scope contains expected keys',\n configured: (env) => Boolean(env.DBX_TEST_SECRET_SCOPE && env.DBX_TEST_SECRET_KEYS),\n async run({ env, client }) {\n const scope = env.DBX_TEST_SECRET_SCOPE as string;\n const expected = csv(env.DBX_TEST_SECRET_KEYS);\n const response = await client.get<{ secrets?: { key?: string }[] }>('/api/2.0/secrets/list', {\n scope,\n });\n const actual = new Set((response.secrets ?? []).map((secret) => secret.key).filter(Boolean));\n const missing = expected.filter((key) => !actual.has(key));\n if (missing.length > 0) {\n throw new Error(`Secret scope ${scope} is missing keys: ${missing.join(', ')}`);\n }\n return { scope, expectedKeys: expected.length };\n },\n };\n}\n\nexport interface AppHealthCheckOptions {\n fetchImpl?: typeof fetch;\n}\n\n/** Verify app state, resource bindings, and the gateway-authenticated application health route. */\nexport function appHealthCheck(options: AppHealthCheckOptions = {}): LiveCheck {\n return {\n id: 'app',\n description: 'Databricks App is running, bound, and healthy',\n configured: (env) => Boolean(env.DBX_TEST_APP_NAME),\n async run({ env, client }) {\n const name = env.DBX_TEST_APP_NAME as string;\n const app = await client.get<{\n app_status?: { state?: string };\n resources?: { name?: string }[];\n url?: string;\n app_url?: string;\n }>(`/api/2.0/apps/${encodeURIComponent(name)}`);\n if (app.app_status?.state !== 'RUNNING') {\n throw new Error(`Databricks App ${name} is ${app.app_status?.state ?? 'UNKNOWN'}`);\n }\n const expected = csv(env.DBX_TEST_APP_RESOURCES);\n const actual = new Set(\n (app.resources ?? []).map((resource) => resource.name).filter(Boolean),\n );\n const missing = expected.filter((resource) => !actual.has(resource));\n if (missing.length > 0) {\n throw new Error(\n `Databricks App ${name} is missing resource bindings: ${missing.join(', ')}`,\n );\n }\n const appUrl = env.DBX_TEST_APP_URL ?? app.url ?? app.app_url;\n if (!appUrl) throw new Error(`Databricks App ${name} returned no URL`);\n const healthUrl = new URL('/api/healthz', appUrl).toString();\n const response = await databricksFetch(env, healthUrl, {}, options.fetchImpl);\n const health = (await response.json()) as { ok?: boolean; status?: string };\n if (health.ok !== true && health.status !== 'ok') {\n throw new Error(`Databricks App ${name} health probe did not report ok`);\n }\n return { name, bindings: actual.size, health: 'ok' };\n },\n };\n}\n","import { randomUUID } from 'node:crypto';\nimport { databricksFetch } from './databricks-http.js';\nimport type { LiveCheck } from './live-suite.js';\n\nexport interface VolumeIOCheckOptions {\n fetchImpl?: typeof fetch;\n randomId?: () => string;\n}\n\nexport function normalizeVolumeRoot(value: string): string {\n const normalized = value.replace(/\\/$/, '');\n if (!/^\\/Volumes\\/[^/]+\\/[^/]+\\/[^/]+$/.test(normalized)) {\n throw new Error('DBX_TEST_VOLUME must be /Volumes/<catalog>/<schema>/<volume>');\n }\n return normalized;\n}\n\nexport async function ensureVolumeDirectory(\n env: Record<string, string | undefined>,\n directory: string,\n fetchImpl?: typeof fetch,\n): Promise<void> {\n await databricksFetch(env, `/api/2.0/fs/directories${directory}`, { method: 'PUT' }, fetchImpl);\n}\n\nexport async function uploadVolumeFile(\n env: Record<string, string | undefined>,\n path: string,\n body: BodyInit | Uint8Array,\n fetchImpl?: typeof fetch,\n): Promise<void> {\n await databricksFetch(\n env,\n `/api/2.0/fs/files${path}`,\n { method: 'PUT', body: body as BodyInit },\n fetchImpl,\n );\n}\n\nexport async function deleteVolumeFile(\n env: Record<string, string | undefined>,\n path: string,\n fetchImpl?: typeof fetch,\n): Promise<void> {\n await databricksFetch(env, `/api/2.0/fs/files${path}`, { method: 'DELETE' }, fetchImpl);\n}\n\n/** Upload, download, and delete a small probe through the Databricks Files API. */\nexport function volumeIOCheck(options: VolumeIOCheckOptions = {}): LiveCheck {\n return {\n id: 'volume-io',\n description: 'Unity Catalog volume Files API round-trip',\n configured: (env) => Boolean(env.DBX_TEST_VOLUME),\n async run({ env }) {\n const root = normalizeVolumeRoot(env.DBX_TEST_VOLUME as string);\n const prefix = (env.DBX_TEST_ENV_NAME ?? 'fx-live').replace(/[^A-Za-z0-9_.-]/g, '_');\n const id = (options.randomId ?? randomUUID)();\n const directory = `${root}/${prefix}`;\n const file = `${directory}/probe-${id}.txt`;\n const filePath = `/api/2.0/fs/files${file}`;\n const body = new TextEncoder().encode(`fabric-experiments-volume-probe:${id}`);\n await ensureVolumeDirectory(env, directory, options.fetchImpl);\n try {\n await uploadVolumeFile(env, file, body, options.fetchImpl);\n const downloaded = await databricksFetch(env, filePath, {}, options.fetchImpl);\n const actual = new Uint8Array(await downloaded.arrayBuffer());\n if (actual.length !== body.length || actual.some((value, index) => value !== body[index])) {\n throw new Error('Volume round-trip returned different bytes');\n }\n return { volume: root, bytes: body.length };\n } finally {\n await deleteVolumeFile(env, file, options.fetchImpl).catch(() => undefined);\n }\n },\n };\n}\n","import { randomUUID } from 'node:crypto';\nimport { readFile } from 'node:fs/promises';\nimport { basename, resolve } from 'node:path';\nimport type { LiveCheck } from './live-suite.js';\nimport { waitForPipelineUpdate } from './pollers.js';\nimport {\n deleteVolumeFile,\n ensureVolumeDirectory,\n normalizeVolumeRoot,\n uploadVolumeFile,\n} from './volume-checks.js';\n\nexport interface AutoLoaderCheckOptions {\n fetchImpl?: typeof fetch;\n fixtureBody?: Uint8Array;\n randomId?: () => string;\n}\n\n/** Exercise Files API -> isolated Lakeflow pipeline -> Delta output. */\nexport function autoLoaderIngestionCheck(options: AutoLoaderCheckOptions = {}): LiveCheck {\n return {\n id: 'autoloader',\n description: 'Isolated Auto Loader fixture ingestion reaches Delta without rescued rows',\n configured: (env) =>\n Boolean(\n env.DBX_TEST_AUTOLOADER_PIPELINE_ID &&\n env.DBX_TEST_AUTOLOADER_TABLE &&\n env.DBX_TEST_AUTOLOADER_FIXTURE &&\n env.DBX_TEST_VOLUME,\n ),\n async run({ env, client, warehouse }) {\n const pipelineId = env.DBX_TEST_AUTOLOADER_PIPELINE_ID as string;\n if (pipelineId === env.DBX_TEST_PIPELINE_ID) {\n throw new Error('DBX_TEST_AUTOLOADER_PIPELINE_ID must not be the production pipeline');\n }\n const root = normalizeVolumeRoot(env.DBX_TEST_VOLUME as string);\n const fixturePath = env.DBX_TEST_AUTOLOADER_FIXTURE as string;\n const body = options.fixtureBody ?? new Uint8Array(await readFile(resolve(fixturePath)));\n const id = (options.randomId ?? randomUUID)();\n const runName = (env.DBX_TEST_ENV_NAME ?? 'autoloader').replace(/[^A-Za-z0-9_.-]/g, '_');\n const directory = `${root}/exposures/${runName}/${id}`;\n const destination = `${directory}/${basename(fixturePath)}`;\n await ensureVolumeDirectory(env, directory, options.fetchImpl);\n try {\n await uploadVolumeFile(env, destination, body, options.fetchImpl);\n const submitted = await client.post<{ update_id?: string }>(\n `/api/2.0/pipelines/${encodeURIComponent(pipelineId)}/updates`,\n { full_refresh: true },\n );\n if (!submitted.update_id) throw new Error('Auto Loader pipeline returned no update_id');\n await waitForPipelineUpdate(client, pipelineId, submitted.update_id, {\n timeoutMs: Number(env.DBX_TEST_TIMEOUT_MS ?? 900_000),\n pollIntervalMs: Number(env.DBX_TEST_POLL_INTERVAL_MS ?? 10_000),\n });\n const table = env.DBX_TEST_AUTOLOADER_TABLE as string;\n const rows = await warehouse.query(\n `SELECT COUNT(*) AS n, SUM(CASE WHEN _rescued_data IS NOT NULL THEN 1 ELSE 0 END) AS rescued FROM ${table}`,\n );\n const count = Number(rows[0]?.n ?? 0);\n const rescued = Number(rows[0]?.rescued ?? 0);\n if (count < 1) throw new Error(`Auto Loader produced no rows in ${table}`);\n if (rescued !== 0)\n throw new Error(`Auto Loader produced ${rescued} rescued rows in ${table}`);\n return { pipelineId, table, rows: count, rescued };\n } finally {\n await deleteVolumeFile(env, destination, options.fetchImpl).catch(() => undefined);\n }\n },\n };\n}\n","import { randomBytes, randomUUID } from 'node:crypto';\nimport { waitForDatabricksRun } from '@fabric-harness/databricks';\nimport type { LiveCheck } from './live-suite.js';\n\nfunction safeName(prefix: string): string {\n return `${prefix}_${randomUUID().replaceAll('-', '_')}`;\n}\n\n/** Measure the real Statement Execution path and fail when its p95 exceeds the declared budget. */\nexport function performanceBudgetCheck(): LiveCheck {\n return {\n id: 'performance',\n description: 'SQL Statement Execution p95 stays within the configured latency budget',\n configured: (env) => Boolean(env.DBX_TEST_PERFORMANCE_P95_MS),\n async run({ env, warehouse }) {\n const budgetMs = Number(env.DBX_TEST_PERFORMANCE_P95_MS);\n const runs = Number(env.DBX_TEST_PERFORMANCE_RUNS ?? 7);\n if (!Number.isFinite(budgetMs) || budgetMs <= 0) {\n throw new Error('DBX_TEST_PERFORMANCE_P95_MS must be a positive number');\n }\n if (!Number.isInteger(runs) || runs < 3 || runs > 100) {\n throw new Error('DBX_TEST_PERFORMANCE_RUNS must be an integer from 3 to 100');\n }\n await warehouse.query('SELECT 1 AS warmup');\n const durations: number[] = [];\n for (let index = 0; index < runs; index += 1) {\n const started = performance.now();\n await warehouse.query('SELECT 1 AS performance_probe');\n durations.push(performance.now() - started);\n }\n durations.sort((left, right) => left - right);\n const p95 = durations[Math.ceil(durations.length * 0.95) - 1] ?? 0;\n if (p95 > budgetMs) {\n throw new Error(`SQL p95 ${Math.round(p95)}ms exceeded ${budgetMs}ms budget`);\n }\n return {\n runs,\n p50Ms: Math.round(durations[Math.floor(durations.length * 0.5)] ?? 0),\n p95Ms: Math.round(p95),\n budgetMs,\n };\n },\n };\n}\n\n/** Prove a failed statement does not poison the session or the next workload. */\nexport function failureRecoveryCheck(): LiveCheck {\n return {\n id: 'failure-recovery',\n description: 'A failed statement is isolated and a subsequent statement recovers',\n configured: (env) => Boolean(env.DATABRICKS_WAREHOUSE_ID || env.DATABRICKS_HTTP_PATH),\n async run({ warehouse }) {\n let failedAsExpected = false;\n try {\n await warehouse.query('SELECT * FROM __fabric_experiments_expected_missing_table__');\n } catch {\n failedAsExpected = true;\n }\n if (!failedAsExpected) throw new Error('Injected failure unexpectedly succeeded');\n const rows = await warehouse.query('SELECT 1 AS recovered');\n if (Number(rows[0]?.recovered) !== 1) {\n throw new Error('Statement execution did not recover after the injected failure');\n }\n return { injectedFailure: true, recovered: true };\n },\n };\n}\n\n/** Rotate a disposable secret key and remove it. Values are never returned or written to evidence. */\nexport interface SecretRotationCheckOptions {\n randomId?: () => string;\n}\n\nexport function secretRotationCheck(options: SecretRotationCheckOptions = {}): LiveCheck {\n return {\n id: 'secret-rotation',\n description: 'Databricks secret put, overwrite, metadata verification, and cleanup',\n configured: (env) => Boolean(env.DBX_TEST_ROTATION_SECRET_SCOPE),\n async run({ env, client }) {\n const scope = env.DBX_TEST_ROTATION_SECRET_SCOPE as string;\n const key = options.randomId?.() ?? safeName('fx_rotation_probe');\n const put = async (value: string) =>\n client.post('/api/2.0/secrets/put', { scope, key, string_value: value });\n try {\n await put(randomBytes(32).toString('base64url'));\n await put(randomBytes(32).toString('base64url'));\n const listed = await client.get<{ secrets?: { key?: string }[] }>('/api/2.0/secrets/list', {\n scope,\n });\n if (!(listed.secrets ?? []).some((secret) => secret.key === key)) {\n throw new Error(`Rotated secret metadata was not visible in scope ${scope}`);\n }\n return { scope, rotated: true, cleanedUp: true };\n } finally {\n await client.post('/api/2.0/secrets/delete', { scope, key }).catch(() => undefined);\n }\n },\n };\n}\n\n/** Exercise a complete Delta backup, destructive loss, and restore cycle in the scratch schema. */\nexport function backupRestoreCheck(): LiveCheck {\n return {\n id: 'backup-restore',\n description: 'Delta DEEP CLONE backup restores a dropped scratch table',\n configured: (env) => Boolean(env.DATABRICKS_WAREHOUSE_ID || env.DATABRICKS_HTTP_PATH),\n async run({ warehouse }) {\n const source = warehouse.qual(safeName('backup_source'));\n const backup = warehouse.qual(safeName('backup_clone'));\n try {\n await warehouse.exec(`CREATE TABLE ${source} USING DELTA AS SELECT 7 AS value`);\n await warehouse.exec(`CREATE TABLE ${backup} DEEP CLONE ${source}`);\n await warehouse.exec(`DROP TABLE ${source}`);\n await warehouse.exec(`CREATE TABLE ${source} DEEP CLONE ${backup}`);\n const rows = await warehouse.query(`SELECT value FROM ${source}`);\n if (Number(rows[0]?.value) !== 7) throw new Error('Restored Delta table lost its data');\n return { restoredRows: rows.length, deepClone: true };\n } finally {\n await warehouse.exec(`DROP TABLE IF EXISTS ${source}`).catch(() => undefined);\n await warehouse.exec(`DROP TABLE IF EXISTS ${backup}`).catch(() => undefined);\n }\n },\n };\n}\n\n/** Prove Delta time-travel rollback returns a corrupted scratch table to its known-good version. */\nexport function rollbackCheck(): LiveCheck {\n return {\n id: 'rollback',\n description: 'Delta time-travel rollback restores a known-good table version',\n configured: (env) => Boolean(env.DATABRICKS_WAREHOUSE_ID || env.DATABRICKS_HTTP_PATH),\n async run({ warehouse }) {\n const table = warehouse.qual(safeName('rollback_probe'));\n try {\n await warehouse.exec(`CREATE TABLE ${table} (value INT) USING DELTA`);\n await warehouse.exec(`INSERT INTO ${table} VALUES (1)`);\n const history = await warehouse.query(`DESCRIBE HISTORY ${table} LIMIT 1`);\n const knownGoodVersion = Number(history[0]?.version);\n if (!Number.isInteger(knownGoodVersion)) {\n throw new Error('Delta history did not return a known-good version');\n }\n await warehouse.exec(`INSERT INTO ${table} VALUES (999)`);\n await warehouse.exec(`RESTORE TABLE ${table} TO VERSION AS OF ${knownGoodVersion}`);\n const rows = await warehouse.query(`SELECT value FROM ${table} ORDER BY value`);\n if (rows.length !== 1 || Number(rows[0]?.value) !== 1) {\n throw new Error('Delta rollback did not restore the known-good contents');\n }\n return { knownGoodVersion, restoredRows: rows.length };\n } finally {\n await warehouse.exec(`DROP TABLE IF EXISTS ${table}`).catch(() => undefined);\n }\n },\n };\n}\n\n/** Certify that the configured SQL warehouse is serverless and usable by the test identity. */\nexport function serverlessComputeCheck(): LiveCheck {\n return {\n id: 'azure-serverless',\n description: 'Azure Databricks serverless SQL warehouse is enabled and executes SQL',\n configured: (env) => Boolean(env.DATABRICKS_WAREHOUSE_ID),\n async run({ env, client, warehouse }) {\n const id = env.DATABRICKS_WAREHOUSE_ID as string;\n const details = await client.get<{\n enable_serverless_compute?: boolean;\n state?: string;\n name?: string;\n }>(`/api/2.0/sql/warehouses/${encodeURIComponent(id)}`);\n if (details.enable_serverless_compute !== true) {\n throw new Error(`SQL warehouse ${id} is not configured for serverless compute`);\n }\n const rows = await warehouse.query('SELECT current_catalog() AS catalog');\n return { warehouseId: id, name: details.name, state: details.state, rows: rows.length };\n },\n };\n}\n\n/** Launch a disposable classic job cluster and require the shared notebook probe to succeed. */\nexport function classicComputeCheck(): LiveCheck {\n return {\n id: 'azure-classic',\n description: 'Azure Databricks classic job cluster starts and completes a notebook workload',\n configured: (env) =>\n Boolean(\n env.DBX_TEST_CLASSIC_SPARK_VERSION &&\n env.DBX_TEST_CLASSIC_NODE_TYPE &&\n env.DBX_TEST_NOTEBOOK_PATH,\n ),\n async run({ env, client }) {\n const numWorkers = Number(env.DBX_TEST_CLASSIC_WORKERS ?? 1);\n const alternateNodeTypes = (env.DBX_TEST_CLASSIC_ALTERNATE_NODE_TYPES ?? '')\n .split(',')\n .map((value) => value.trim())\n .filter(Boolean);\n const singleNode = numWorkers === 0;\n const submitted = await client.post<{ run_id?: number }>('/api/2.1/jobs/runs/submit', {\n run_name: `fabric-experiments-classic-certification-${Date.now()}`,\n tasks: [\n {\n task_key: 'classic_notebook',\n new_cluster: {\n spark_version: env.DBX_TEST_CLASSIC_SPARK_VERSION,\n node_type_id: env.DBX_TEST_CLASSIC_NODE_TYPE,\n num_workers: numWorkers,\n data_security_mode: env.DBX_TEST_CLASSIC_SECURITY_MODE ?? 'SINGLE_USER',\n ...(env.DBX_TEST_CLASSIC_SINGLE_USER_NAME\n ? { single_user_name: env.DBX_TEST_CLASSIC_SINGLE_USER_NAME }\n : {}),\n ...(singleNode\n ? {\n spark_conf: {\n 'spark.databricks.cluster.profile': 'singleNode',\n 'spark.master': 'local[*]',\n },\n custom_tags: { ResourceClass: 'SingleNode' },\n }\n : {}),\n ...(alternateNodeTypes.length\n ? {\n worker_node_type_flexibility: {\n alternate_node_type_ids: alternateNodeTypes,\n },\n driver_node_type_flexibility: {\n alternate_node_type_ids: alternateNodeTypes,\n },\n }\n : {}),\n },\n notebook_task: { notebook_path: env.DBX_TEST_NOTEBOOK_PATH },\n },\n ],\n });\n if (!submitted.run_id) throw new Error('Classic compute submit returned no run_id');\n const run = await waitForDatabricksRun(client as never, submitted.run_id, {\n timeoutMs: Number(env.DBX_TEST_CLASSIC_TIMEOUT_MS ?? 1_800_000),\n pollIntervalMs: Number(env.DBX_TEST_POLL_INTERVAL_MS ?? 15_000),\n });\n const result = (run as { state?: { result_state?: string } }).state?.result_state;\n if (result !== 'SUCCESS') {\n const message = (run as { state?: { state_message?: string } }).state?.state_message;\n throw new Error(\n `Classic compute run ${submitted.run_id} ended in ${result ?? 'UNKNOWN'}${message ? `: ${message}` : ''}`,\n );\n }\n return {\n runId: submitted.run_id,\n sparkVersion: env.DBX_TEST_CLASSIC_SPARK_VERSION,\n nodeType: env.DBX_TEST_CLASSIC_NODE_TYPE,\n };\n },\n };\n}\n","import type {\n DefinedLiveSuite,\n LiveCheck,\n LiveEvidence,\n LiveSuiteRuntime,\n TargetPackEvidenceMetadata,\n TargetPackMaturity,\n} from './live-suite.js';\nimport { defineLiveSuite } from './live-suite.js';\n\nexport interface TargetPackRequirement {\n id: string;\n description: string;\n /** At least one named environment variable must be present. */\n anyOf: readonly string[];\n required?: boolean;\n secret?: boolean;\n}\n\nexport interface TargetPackSpec {\n id: string;\n name: string;\n description: string;\n version: string;\n maturity: TargetPackMaturity;\n capabilities: readonly string[];\n checks: readonly LiveCheck[] | (() => readonly LiveCheck[]);\n requiredChecks?: readonly string[];\n requirements?: readonly TargetPackRequirement[];\n docsUrl?: string;\n certificationScopes?: readonly string[];\n}\n\nexport interface TargetPack extends Omit<TargetPackSpec, 'checks'> {\n checks(): readonly LiveCheck[];\n}\n\nexport interface TargetPackDoctorRequirement {\n id: string;\n description: string;\n satisfied: boolean;\n required: boolean;\n variables: string[];\n}\n\nexport interface TargetPackDoctorCheck {\n id: string;\n description: string;\n configured: boolean;\n required: boolean;\n}\n\nexport interface TargetPackDoctorResult {\n pack: Pick<TargetPack, 'id' | 'name' | 'version' | 'maturity'>;\n ready: boolean;\n requirements: TargetPackDoctorRequirement[];\n checks: TargetPackDoctorCheck[];\n missingRequirements: string[];\n missingRequiredChecks: string[];\n}\n\nexport interface RunTargetPackOptions {\n env?: Record<string, string | undefined>;\n requiredChecks?: readonly string[];\n evidencePath?: string;\n junitPath?: string;\n}\n\nexport interface DefinedTargetPackRun {\n pack: TargetPack;\n run(runtime?: LiveSuiteRuntime): Promise<LiveEvidence | undefined>;\n}\n\nconst TARGET_PACK_ID = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\n\nexport function defineTargetPack(spec: TargetPackSpec): TargetPack {\n if (!TARGET_PACK_ID.test(spec.id)) {\n throw new Error(`Target pack id '${spec.id}' must be lowercase kebab-case`);\n }\n if (!spec.name.trim()) throw new Error(`Target pack '${spec.id}' requires a name`);\n if (!/^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?$/.test(spec.version)) {\n throw new Error(\n `Target pack '${spec.id}' version '${spec.version}' is not semantic versioning`,\n );\n }\n if (spec.capabilities.length === 0) {\n throw new Error(`Target pack '${spec.id}' must declare at least one capability`);\n }\n\n const createChecks: () => readonly LiveCheck[] =\n typeof spec.checks === 'function' ? spec.checks : () => spec.checks as readonly LiveCheck[];\n const validateChecks = (): readonly LiveCheck[] => {\n const checks = [...createChecks()];\n const ids = new Set<string>();\n for (const check of checks) {\n if (!check.id.trim())\n throw new Error(`Target pack '${spec.id}' contains a check without an id`);\n if (ids.has(check.id)) {\n throw new Error(`Target pack '${spec.id}' contains duplicate check '${check.id}'`);\n }\n ids.add(check.id);\n }\n for (const required of spec.requiredChecks ?? []) {\n if (!ids.has(required)) {\n throw new Error(`Target pack '${spec.id}' requires unknown check '${required}'`);\n }\n }\n return checks;\n };\n validateChecks();\n\n return Object.freeze({\n ...spec,\n capabilities: Object.freeze([...spec.capabilities]),\n requiredChecks: Object.freeze([...(spec.requiredChecks ?? [])]),\n requirements: Object.freeze([...(spec.requirements ?? [])]),\n certificationScopes: Object.freeze([...(spec.certificationScopes ?? [])]),\n checks: validateChecks,\n });\n}\n\nexport function createTargetPackRegistry(\n packs: readonly TargetPack[],\n): ReadonlyMap<string, TargetPack> {\n const registry = new Map<string, TargetPack>();\n for (const pack of packs) {\n if (registry.has(pack.id)) throw new Error(`Duplicate target pack '${pack.id}'`);\n registry.set(pack.id, pack);\n }\n return registry;\n}\n\nexport function doctorTargetPack(\n pack: TargetPack,\n env: Record<string, string | undefined> = process.env,\n requiredChecks: readonly string[] = pack.requiredChecks ?? [],\n): TargetPackDoctorResult {\n const requirements = (pack.requirements ?? []).map((requirement) => ({\n id: requirement.id,\n description: requirement.description,\n satisfied: requirement.anyOf.some((name) => Boolean(env[name]?.trim())),\n required: requirement.required !== false,\n variables: [...requirement.anyOf],\n }));\n const required = new Set(requiredChecks);\n const checks = pack.checks().map((check) => ({\n id: check.id,\n description: check.description,\n configured: check.configured ? check.configured(env) : true,\n required: required.has(check.id),\n }));\n const known = new Set(checks.map((check) => check.id));\n const missingRequirements = requirements\n .filter((requirement) => requirement.required && !requirement.satisfied)\n .map((requirement) => requirement.id);\n const missingRequiredChecks = [\n ...checks.filter((check) => check.required && !check.configured).map((check) => check.id),\n ...[...required].filter((id) => !known.has(id)),\n ];\n return {\n pack: {\n id: pack.id,\n name: pack.name,\n version: pack.version,\n maturity: pack.maturity,\n },\n ready: missingRequirements.length === 0 && missingRequiredChecks.length === 0,\n requirements,\n checks,\n missingRequirements,\n missingRequiredChecks,\n };\n}\n\nexport function defineTargetPackRun(\n pack: TargetPack,\n options: RunTargetPackOptions = {},\n): DefinedTargetPackRun {\n const env = options.env ?? process.env;\n const requiredChecks = [...(options.requiredChecks ?? pack.requiredChecks ?? [])];\n const doctor = doctorTargetPack(pack, env, requiredChecks);\n if (!doctor.ready) {\n const missing = [...doctor.missingRequirements, ...doctor.missingRequiredChecks].join(', ');\n throw new Error(`Target pack '${pack.id}' is not configured: ${missing}`);\n }\n const targetPack = evidenceMetadata(pack, env);\n const suite: DefinedLiveSuite = defineLiveSuite({\n checks: pack.checks(),\n required: requiredChecks,\n env,\n evidencePath: options.evidencePath,\n junitPath: options.junitPath,\n targetPack,\n });\n return { pack, run: (runtime) => suite.run(runtime) };\n}\n\nexport async function runTargetPack(\n pack: TargetPack,\n options: RunTargetPackOptions = {},\n runtime?: LiveSuiteRuntime,\n): Promise<LiveEvidence | undefined> {\n return defineTargetPackRun(pack, options).run(runtime);\n}\n\nfunction evidenceMetadata(\n pack: TargetPack,\n env: Record<string, string | undefined>,\n): TargetPackEvidenceMetadata {\n return {\n id: pack.id,\n name: pack.name,\n version: pack.version,\n maturity: pack.maturity,\n capabilities: [...pack.capabilities],\n ...(pack.docsUrl ? { docsUrl: pack.docsUrl } : {}),\n certificationScopes: [...(pack.certificationScopes ?? [])],\n target: compact({\n cloud: env.DBX_TEST_CLOUD,\n region: env.DBX_TEST_REGION,\n workspace: env.DATABRICKS_HOST,\n runtime: env.DBX_TEST_RUNTIME_VERSION,\n compute: env.DBX_TEST_COMPUTE,\n }),\n };\n}\n\nfunction compact<T extends Record<string, string | undefined>>(\n value: T,\n): {\n [K in keyof T]?: string;\n} {\n return Object.fromEntries(\n Object.entries(value).filter((entry): entry is [string, string] => Boolean(entry[1])),\n ) as { [K in keyof T]?: string };\n}\n","import { autoLoaderIngestionCheck } from './autoloader-checks.js';\nimport { lakebaseCredentialCheck, lakebaseRoundTripCheck } from './lakebase-checks.js';\nimport {\n dbtBuildCheck,\n deltaContractCheck,\n jobRunCheck,\n notebookSubmitCheck,\n pipelineRefreshCheck,\n restrictedPrincipalCheck,\n sqlRoundTripCheck,\n unityCatalogAccessCheck,\n} from './live-checks.js';\nimport { appHealthCheck, secretScopeCheck } from './platform-checks.js';\nimport {\n backupRestoreCheck,\n classicComputeCheck,\n failureRecoveryCheck,\n performanceBudgetCheck,\n rollbackCheck,\n secretRotationCheck,\n serverlessComputeCheck,\n} from './resilience-checks.js';\nimport { type TargetPack, defineTargetPack } from './target-packs.js';\nimport { volumeIOCheck } from './volume-checks.js';\n\nconst DOCS = 'https://experiments.fabric.pro/docs/testing/target-packs/';\nconst AZURE_SCOPE = 'Azure Databricks live-gated; see certification evidence for exact runtime';\n\nconst workspaceRequirement = {\n id: 'workspace',\n description: 'Databricks workspace host',\n anyOf: ['DATABRICKS_HOST'],\n} as const;\n\nconst authRequirement = {\n id: 'authentication',\n description: 'Databricks OAuth, OIDC, bearer, or PAT authentication',\n anyOf: [\n 'DATABRICKS_BEARER',\n 'DATABRICKS_TOKEN',\n 'DATABRICKS_CLIENT_ID',\n 'DATABRICKS_OIDC_TOKEN',\n 'DATABRICKS_OIDC_TOKEN_FILEPATH',\n ],\n secret: true,\n} as const;\n\nconst warehouseRequirement = {\n id: 'warehouse',\n description: 'SQL warehouse ID or HTTP path',\n anyOf: ['DATABRICKS_WAREHOUSE_ID', 'DATABRICKS_HTTP_PATH'],\n} as const;\n\nexport function createSqlDeltaFoundationPack(): TargetPack {\n return defineTargetPack({\n id: 'sql-delta',\n name: 'SQL and Delta foundation',\n description:\n 'SQL Statement Execution, Delta contracts, performance, recovery, backup and rollback.',\n version: '1.0.0',\n maturity: 'live-gated',\n capabilities: [\n 'sql.statement-execution',\n 'delta.contract',\n 'delta.time-travel',\n 'performance.sql',\n 'recovery.sql',\n 'backup-restore.delta',\n 'rollback.delta',\n ],\n checks: () => [\n restrictedPrincipalCheck(),\n sqlRoundTripCheck(),\n deltaContractCheck(),\n serverlessComputeCheck(),\n performanceBudgetCheck(),\n failureRecoveryCheck(),\n backupRestoreCheck(),\n rollbackCheck(),\n ],\n requiredChecks: ['sql'],\n requirements: [workspaceRequirement, authRequirement, warehouseRequirement],\n docsUrl: `${DOCS}#sql-and-delta-foundation`,\n certificationScopes: [AZURE_SCOPE],\n });\n}\n\nexport function createLakeflowFoundationPack(): TargetPack {\n return defineTargetPack({\n id: 'lakeflow-ingestion',\n name: 'Lakeflow ingestion foundation',\n description: 'Lakeflow refresh, Volumes, Auto Loader ingestion and rescued-row evidence.',\n version: '1.0.0',\n maturity: 'live-gated',\n capabilities: [\n 'lakeflow.refresh',\n 'autoloader.ingestion',\n 'volumes.files',\n 'delta.rescued-data',\n ],\n checks: () => [\n restrictedPrincipalCheck(),\n pipelineRefreshCheck(),\n volumeIOCheck(),\n autoLoaderIngestionCheck(),\n ],\n requiredChecks: ['pipeline'],\n requirements: [workspaceRequirement, authRequirement],\n docsUrl: `${DOCS}#lakeflow-ingestion-foundation`,\n certificationScopes: [AZURE_SCOPE],\n });\n}\n\nexport function createJobsCodeFoundationPack(): TargetPack {\n return defineTargetPack({\n id: 'jobs-code',\n name: 'Jobs and code foundation',\n description: 'Jobs, notebooks, dbt, serverless compute and classic compute probes.',\n version: '1.0.0',\n maturity: 'live-gated',\n capabilities: [\n 'jobs.run-now',\n 'jobs.submit.notebook',\n 'jobs.submit.dbt',\n 'compute.serverless',\n 'compute.classic',\n ],\n checks: () => [\n restrictedPrincipalCheck(),\n jobRunCheck(),\n notebookSubmitCheck(),\n dbtBuildCheck(),\n serverlessComputeCheck(),\n classicComputeCheck(),\n ],\n requiredChecks: ['jobs'],\n requirements: [workspaceRequirement, authRequirement],\n docsUrl: `${DOCS}#jobs-and-code-foundation`,\n certificationScopes: [AZURE_SCOPE],\n });\n}\n\nexport function createUnityStorageFoundationPack(): TargetPack {\n return defineTargetPack({\n id: 'unity-storage',\n name: 'Unity Catalog and storage foundation',\n description: 'Unity Catalog allow/deny, Volumes, secret metadata and secret rotation.',\n version: '1.0.0',\n maturity: 'live-gated',\n capabilities: [\n 'unity-catalog.permissions',\n 'volumes.files',\n 'secrets.metadata',\n 'secrets.rotation',\n ],\n checks: () => [\n restrictedPrincipalCheck(),\n unityCatalogAccessCheck(),\n volumeIOCheck(),\n secretScopeCheck(),\n secretRotationCheck(),\n ],\n requiredChecks: ['uc-grants'],\n requirements: [workspaceRequirement, authRequirement, warehouseRequirement],\n docsUrl: `${DOCS}#unity-catalog-and-storage-foundation`,\n certificationScopes: [AZURE_SCOPE],\n });\n}\n\nexport function createAppsOperationalFoundationPack(): TargetPack {\n return defineTargetPack({\n id: 'apps-operational',\n name: 'Apps and operational data foundation',\n description: 'Databricks Apps resources and health plus Lakebase OAuth and pool refresh.',\n version: '1.0.0',\n maturity: 'live-gated',\n capabilities: [\n 'apps.health',\n 'apps.resources',\n 'lakebase.credentials',\n 'lakebase.round-trip',\n 'lakebase.pool-refresh',\n ],\n checks: () => [\n restrictedPrincipalCheck(),\n appHealthCheck(),\n lakebaseCredentialCheck(),\n lakebaseRoundTripCheck(),\n ],\n requiredChecks: ['app'],\n requirements: [workspaceRequirement, authRequirement],\n docsUrl: `${DOCS}#apps-and-operational-data-foundation`,\n certificationScopes: [AZURE_SCOPE],\n });\n}\n\nexport function createFoundationTargetPacks(): readonly TargetPack[] {\n return [\n createSqlDeltaFoundationPack(),\n createLakeflowFoundationPack(),\n createJobsCodeFoundationPack(),\n createUnityStorageFoundationPack(),\n createAppsOperationalFoundationPack(),\n ];\n}\n\nexport const foundationTargetPacks = createFoundationTargetPacks();\n","import { waitForDatabricksRun } from '@fabric-harness/databricks';\nimport type { LiveCheck } from './live-suite.js';\nimport type { WorkspaceClientLike } from './workspace-context.js';\n\nexport interface JobTaskDependency {\n task_key: string;\n outcome?: string;\n}\n\nexport interface JobTaskBase {\n task_key: string;\n depends_on?: JobTaskDependency[];\n run_if?:\n | 'ALL_SUCCESS'\n | 'AT_LEAST_ONE_SUCCESS'\n | 'NONE_FAILED'\n | 'ALL_DONE'\n | 'AT_LEAST_ONE_FAILED'\n | 'ALL_FAILED';\n timeout_seconds?: number;\n max_retries?: number;\n min_retry_interval_millis?: number;\n retry_on_timeout?: boolean;\n existing_cluster_id?: string;\n job_cluster_key?: string;\n environment_key?: string;\n}\n\nexport interface NotebookJobTask extends JobTaskBase {\n notebook_task: {\n notebook_path: string;\n base_parameters?: Record<string, string>;\n source?: 'WORKSPACE' | 'GIT';\n };\n}\n\nexport interface PythonWheelJobTask extends JobTaskBase {\n python_wheel_task: {\n package_name: string;\n entry_point: string;\n parameters?: string[];\n named_parameters?: Record<string, string>;\n };\n}\n\nexport interface SparkJarJobTask extends JobTaskBase {\n spark_jar_task: { main_class_name: string; parameters?: string[] };\n}\n\nexport interface SparkPythonJobTask extends JobTaskBase {\n spark_python_task: { python_file: string; parameters?: string[]; source?: 'WORKSPACE' | 'GIT' };\n}\n\nexport interface SparkSubmitJobTask extends JobTaskBase {\n spark_submit_task: { parameters: string[] };\n}\n\nexport interface PipelineJobTask extends JobTaskBase {\n pipeline_task: { pipeline_id: string; full_refresh?: boolean };\n}\n\nexport interface SqlJobTask extends JobTaskBase {\n sql_task: Record<string, unknown> & { warehouse_id: string };\n}\n\nexport interface DbtJobTask extends JobTaskBase {\n dbt_task: Record<string, unknown> & { commands: string[] };\n}\n\nexport interface RunJobTask extends JobTaskBase {\n run_job_task: { job_id: number; job_parameters?: Record<string, string> };\n}\n\nexport interface ConditionJobTask extends JobTaskBase {\n condition_task: {\n left: string;\n op:\n | 'EQUAL_TO'\n | 'NOT_EQUAL'\n | 'GREATER_THAN'\n | 'GREATER_THAN_OR_EQUAL'\n | 'LESS_THAN'\n | 'LESS_THAN_OR_EQUAL';\n right: string;\n };\n}\n\nexport interface ForEachJobTask extends JobTaskBase {\n for_each_task: {\n inputs: string;\n concurrency?: number;\n task: Exclude<DatabricksJobTask, ForEachJobTask>;\n };\n}\n\nexport type DatabricksJobTask =\n | NotebookJobTask\n | PythonWheelJobTask\n | SparkJarJobTask\n | SparkPythonJobTask\n | SparkSubmitJobTask\n | PipelineJobTask\n | SqlJobTask\n | DbtJobTask\n | RunJobTask\n | ConditionJobTask\n | ForEachJobTask;\n\nexport interface JobsSubmitRequest {\n run_name: string;\n tasks: DatabricksJobTask[];\n parameters?: Array<{ name: string; default: string }>;\n job_clusters?: Array<Record<string, unknown> & { job_cluster_key: string }>;\n environments?: Array<Record<string, unknown> & { environment_key: string }>;\n git_source?: Record<string, unknown>;\n timeout_seconds?: number;\n idempotency_token?: string;\n}\n\nexport interface JobTaskRunState {\n taskKey: string;\n runId?: number;\n lifeCycleState: string;\n resultState: string;\n stateMessage?: string;\n attemptNumber?: number;\n}\n\nexport interface JobOrchestrationRun {\n runId: number;\n lifeCycleState: string;\n resultState: string;\n tasks: JobTaskRunState[];\n repairs: JobRepairRunState[];\n raw: Record<string, unknown>;\n}\n\nexport interface JobRepairRunState {\n repairId: number;\n type: string;\n lifeCycleState: string;\n resultState: string;\n taskRunIds: number[];\n}\n\nexport interface JobWaitOptions {\n timeoutMs?: number;\n pollIntervalMs?: number;\n}\n\nexport interface JobRepairOptions {\n rerunTasks?: string[];\n latestRepairId?: number;\n rerunDependentTasks?: boolean;\n}\n\nexport interface JobOrchestrationLiveSpec {\n request: JobsSubmitRequest;\n expectedResult?: string;\n expectedTasks?: Record<string, string>;\n repairFailedTasks?: boolean;\n cancellation?: {\n request: JobsSubmitRequest;\n expectedResult?: string;\n };\n}\n\nexport class DatabricksJobsAdapter {\n constructor(private readonly client: WorkspaceClientLike) {}\n\n async submit(request: JobsSubmitRequest): Promise<number> {\n validateJobGraph(request.tasks);\n const response = await this.client.post<{ run_id?: number }>(\n '/api/2.1/jobs/runs/submit',\n request,\n );\n if (!response.run_id) throw new Error('Databricks Jobs submit returned no run_id');\n return response.run_id;\n }\n\n async get(runId: number): Promise<JobOrchestrationRun> {\n const raw = await this.client.get<Record<string, unknown>>('/api/2.1/jobs/runs/get', {\n run_id: runId,\n include_history: true,\n include_resolved_values: true,\n });\n return normalizeJobRun(runId, raw);\n }\n\n async wait(runId: number, options: JobWaitOptions = {}): Promise<JobOrchestrationRun> {\n const raw = (await waitForDatabricksRun(this.client as never, runId, {\n timeoutMs: options.timeoutMs,\n pollIntervalMs: options.pollIntervalMs,\n })) as Record<string, unknown>;\n return normalizeJobRun(runId, raw);\n }\n\n async cancel(runId: number): Promise<void> {\n await this.client.post('/api/2.1/jobs/runs/cancel', { run_id: runId });\n }\n\n async waitUntilActive(runId: number, options: JobWaitOptions = {}): Promise<JobOrchestrationRun> {\n const timeoutMs = options.timeoutMs ?? 300_000;\n const pollIntervalMs = options.pollIntervalMs ?? 2_000;\n const deadline = Date.now() + timeoutMs;\n while (Date.now() < deadline) {\n const run = await this.get(runId);\n if (run.lifeCycleState === 'RUNNING') return run;\n if (isTerminal(run.lifeCycleState)) {\n throw new Error(\n `Databricks run ${runId} reached ${run.lifeCycleState}/${run.resultState} before it could be canceled`,\n );\n }\n await delay(pollIntervalMs);\n }\n throw new Error(`Databricks run ${runId} did not become active within ${timeoutMs}ms`);\n }\n\n async repair(runId: number, options: JobRepairOptions = {}): Promise<number> {\n const response = await this.client.post<{ repair_id?: number }>('/api/2.1/jobs/runs/repair', {\n run_id: runId,\n ...(options.latestRepairId ? { latest_repair_id: options.latestRepairId } : {}),\n ...(options.rerunDependentTasks ? { rerun_dependent_tasks: true } : {}),\n ...(options.rerunTasks?.length\n ? { rerun_tasks: options.rerunTasks }\n : { rerun_all_failed_tasks: true }),\n });\n if (!response.repair_id) throw new Error('Databricks Jobs repair returned no repair_id');\n return response.repair_id;\n }\n\n async waitForRepair(\n runId: number,\n repairId: number,\n options: JobWaitOptions = {},\n ): Promise<JobOrchestrationRun> {\n const timeoutMs = options.timeoutMs ?? 900_000;\n const pollIntervalMs = options.pollIntervalMs ?? 5_000;\n const deadline = Date.now() + timeoutMs;\n while (Date.now() < deadline) {\n const run = await this.get(runId);\n const repair = run.repairs.find((candidate) => candidate.repairId === repairId);\n if (repair && isTerminal(repair.lifeCycleState)) return run;\n await delay(pollIntervalMs);\n }\n throw new Error(\n `Databricks repair ${repairId} for run ${runId} timed out after ${timeoutMs}ms`,\n );\n }\n}\n\nexport function validateJobGraph(tasks: readonly DatabricksJobTask[]): void {\n if (tasks.length === 0) throw new Error('Jobs orchestration requires at least one task');\n const keys = new Set<string>();\n for (const task of tasks) {\n if (!/^[A-Za-z0-9_-]{1,100}$/.test(task.task_key)) {\n throw new Error(`Invalid task key '${task.task_key}'`);\n }\n if (keys.has(task.task_key)) throw new Error(`Duplicate task key '${task.task_key}'`);\n keys.add(task.task_key);\n }\n const edges = new Map<string, string[]>();\n for (const task of tasks) {\n const dependencies = (task.depends_on ?? []).map((dependency) => dependency.task_key);\n for (const dependency of dependencies) {\n if (!keys.has(dependency)) {\n throw new Error(`Task '${task.task_key}' depends on unknown task '${dependency}'`);\n }\n if (dependency === task.task_key) {\n throw new Error(`Task '${task.task_key}' cannot depend on itself`);\n }\n }\n edges.set(task.task_key, dependencies);\n }\n const visiting = new Set<string>();\n const visited = new Set<string>();\n const visit = (key: string): void => {\n if (visiting.has(key)) throw new Error(`Jobs task graph contains a cycle at '${key}'`);\n if (visited.has(key)) return;\n visiting.add(key);\n for (const dependency of edges.get(key) ?? []) visit(dependency);\n visiting.delete(key);\n visited.add(key);\n };\n for (const key of keys) visit(key);\n}\n\nexport function jobsOrchestrationCheck(): LiveCheck {\n return {\n id: 'jobs-orchestration',\n description: 'Lakeflow Jobs multi-task orchestration reaches expected task outcomes',\n configured: (env) => Boolean(env.DBX_TEST_JOBS_ORCHESTRATION_JSON),\n async run({ env, client }) {\n const configured = env.DBX_TEST_JOBS_ORCHESTRATION_JSON;\n if (!configured) throw new Error('DBX_TEST_JOBS_ORCHESTRATION_JSON is required');\n const spec = parseJobOrchestrationLiveSpec(configured);\n const adapter = new DatabricksJobsAdapter(client);\n const runId = await adapter.submit(spec.request);\n let run = await adapter.wait(runId, {\n timeoutMs: Number(env.DBX_TEST_TIMEOUT_MS ?? 900_000),\n pollIntervalMs: Number(env.DBX_TEST_POLL_INTERVAL_MS ?? 10_000),\n });\n let repairId: number | undefined;\n if (spec.repairFailedTasks && run.resultState !== 'SUCCESS') {\n const failed = run.tasks\n .filter((task) => task.resultState === 'FAILED')\n .map((task) => task.taskKey);\n repairId = await adapter.repair(runId, {\n rerunTasks: failed.length > 0 ? failed : undefined,\n rerunDependentTasks: true,\n });\n run = await adapter.waitForRepair(runId, repairId, {\n timeoutMs: Number(env.DBX_TEST_TIMEOUT_MS ?? 900_000),\n pollIntervalMs: Number(env.DBX_TEST_POLL_INTERVAL_MS ?? 10_000),\n });\n }\n const expectedResult = spec.expectedResult ?? 'SUCCESS';\n if (run.resultState !== expectedResult) {\n throw new Error(\n `Job orchestration run ${runId} ended in ${run.resultState}, expected ${expectedResult}`,\n );\n }\n for (const [taskKey, expected] of Object.entries(spec.expectedTasks ?? {})) {\n const task = run.tasks.find((candidate) => candidate.taskKey === taskKey);\n if (!task) throw new Error(`Job orchestration result did not include task '${taskKey}'`);\n if (task.resultState !== expected) {\n throw new Error(`Task '${taskKey}' ended in ${task.resultState}, expected ${expected}`);\n }\n }\n let cancellation: { runId: number; resultState: string } | undefined;\n if (spec.cancellation) {\n const cancellationRunId = await adapter.submit(spec.cancellation.request);\n await adapter.waitUntilActive(cancellationRunId, {\n timeoutMs: Number(env.DBX_TEST_TIMEOUT_MS ?? 900_000),\n pollIntervalMs: Number(env.DBX_TEST_POLL_INTERVAL_MS ?? 10_000),\n });\n await adapter.cancel(cancellationRunId);\n const canceled = await adapter.wait(cancellationRunId, {\n timeoutMs: Number(env.DBX_TEST_TIMEOUT_MS ?? 900_000),\n pollIntervalMs: Number(env.DBX_TEST_POLL_INTERVAL_MS ?? 10_000),\n });\n const expectedCancellation = spec.cancellation.expectedResult ?? 'CANCELED';\n if (canceled.resultState !== expectedCancellation) {\n throw new Error(\n `Cancellation run ${cancellationRunId} ended in ${canceled.resultState}, expected ${expectedCancellation}`,\n );\n }\n cancellation = { runId: cancellationRunId, resultState: canceled.resultState };\n }\n return {\n runId,\n ...(repairId ? { repairId } : {}),\n resultState: run.resultState,\n tasks: run.tasks,\n ...(cancellation ? { cancellation } : {}),\n };\n },\n };\n}\n\nexport function parseJobOrchestrationLiveSpec(value: string): JobOrchestrationLiveSpec {\n let parsed: unknown;\n try {\n parsed = JSON.parse(value);\n } catch (error) {\n throw new Error(`DBX_TEST_JOBS_ORCHESTRATION_JSON is invalid JSON: ${String(error)}`);\n }\n if (!parsed || typeof parsed !== 'object') {\n throw new Error('Jobs orchestration spec must be an object');\n }\n const spec = parsed as Partial<JobOrchestrationLiveSpec>;\n if (!spec.request || typeof spec.request !== 'object' || !Array.isArray(spec.request.tasks)) {\n throw new Error('Jobs orchestration spec requires request.tasks');\n }\n validateJobGraph(spec.request.tasks);\n if (spec.cancellation) {\n if (\n typeof spec.cancellation !== 'object' ||\n !spec.cancellation.request ||\n !Array.isArray(spec.cancellation.request.tasks)\n ) {\n throw new Error('Jobs orchestration cancellation requires request.tasks');\n }\n validateJobGraph(spec.cancellation.request.tasks);\n }\n return spec as JobOrchestrationLiveSpec;\n}\n\nexport function normalizeJobRun(\n fallbackRunId: number,\n raw: Record<string, unknown>,\n): JobOrchestrationRun {\n const state = objectOf(raw.state);\n const repairEntries = Array.isArray(raw.repair_history)\n ? raw.repair_history.filter((repair): repair is Record<string, unknown> =>\n Boolean(repair && typeof repair === 'object'),\n )\n : [];\n const taskRunRanks = new Map<number, number>();\n for (const [rank, repair] of repairEntries.entries()) {\n for (const runId of numberArray(repair.task_run_ids)) taskRunRanks.set(runId, rank);\n }\n const taskAttempts = Array.isArray(raw.tasks)\n ? raw.tasks\n .filter((task): task is Record<string, unknown> =>\n Boolean(task && typeof task === 'object'),\n )\n .map((task) => {\n const taskState = objectOf(task.state);\n return {\n taskKey: String(task.task_key ?? 'unknown'),\n ...(Number.isFinite(Number(task.run_id)) ? { runId: Number(task.run_id) } : {}),\n lifeCycleState: String(taskState.life_cycle_state ?? 'UNKNOWN'),\n resultState: String(taskState.result_state ?? 'UNKNOWN'),\n ...(typeof taskState.state_message === 'string'\n ? { stateMessage: taskState.state_message }\n : {}),\n ...(Number.isFinite(Number(task.attempt_number))\n ? { attemptNumber: Number(task.attempt_number) }\n : {}),\n };\n })\n : [];\n const latestTasks = new Map<string, JobTaskRunState>();\n for (const task of taskAttempts) {\n const current = latestTasks.get(task.taskKey);\n const currentAttempt = current?.attemptNumber ?? -1;\n const candidateAttempt = task.attemptNumber ?? -1;\n const currentRank = current?.runId ? (taskRunRanks.get(current.runId) ?? -1) : -1;\n const candidateRank = task.runId ? (taskRunRanks.get(task.runId) ?? -1) : -1;\n if (\n !current ||\n candidateAttempt > currentAttempt ||\n (candidateAttempt === currentAttempt && candidateRank >= currentRank)\n ) {\n latestTasks.set(task.taskKey, task);\n }\n }\n const tasks = [...latestTasks.values()];\n const repairs = repairEntries.map((repair) => {\n const repairState = objectOf(repair.state);\n return {\n repairId: Number(repair.id ?? repair.repair_id ?? 0),\n type: String(repair.type ?? 'UNKNOWN'),\n lifeCycleState: String(repairState.life_cycle_state ?? 'UNKNOWN'),\n resultState: String(repairState.result_state ?? 'UNKNOWN'),\n taskRunIds: numberArray(repair.task_run_ids),\n };\n });\n return {\n runId: Number(raw.run_id ?? fallbackRunId),\n lifeCycleState: String(state.life_cycle_state ?? 'UNKNOWN'),\n resultState: String(state.result_state ?? 'UNKNOWN'),\n tasks,\n repairs,\n raw,\n };\n}\n\nfunction isTerminal(state: string): boolean {\n return ['TERMINATED', 'SKIPPED', 'INTERNAL_ERROR', 'BLOCKED'].includes(state);\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction objectOf(value: unknown): Record<string, unknown> {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction numberArray(value: unknown): number[] {\n return Array.isArray(value)\n ? value.map(Number).filter((candidate) => Number.isFinite(candidate))\n : [];\n}\n","import { randomUUID } from 'node:crypto';\nimport { DatabricksJobsAdapter, type JobsSubmitRequest } from './jobs-orchestration.js';\nimport type { LiveCheck } from './live-suite.js';\nimport type { WorkspaceClientLike } from './workspace-context.js';\n\nconst NOTEBOOKS = {\n seed: `# Databricks notebook source\ndbutils.jobs.taskValues.set(key=\"branch\", value=\"run\")\ndbutils.jobs.taskValues.set(key=\"items\", value=[\"alpha\", \"beta\"])\ndbutils.notebook.exit(\"seeded\")\n`,\n process: `# Databricks notebook source\ndbutils.widgets.text(\"item\", \"\")\nitem = dbutils.widgets.get(\"item\")\nassert item, \"item parameter is required\"\ndbutils.notebook.exit(item)\n`,\n retry: `# Databricks notebook source\ndbutils.widgets.text(\"execution_count\", \"0\")\nexecution_count = int(dbutils.widgets.get(\"execution_count\"))\nif execution_count <= 1:\n raise RuntimeError(\"intentional retryable failure\")\ndbutils.notebook.exit(\"retried\")\n`,\n repair: `# Databricks notebook source\ndbutils.widgets.text(\"repair_count\", \"0\")\nrepair_count = int(dbutils.widgets.get(\"repair_count\"))\nif repair_count == 0:\n raise RuntimeError(\"intentional first-run failure\")\ndbutils.notebook.exit(\"repaired\")\n`,\n sleep: `# Databricks notebook source\nimport time\ntime.sleep(300)\n`,\n} as const;\n\nexport function jobsCertificationCheck(): LiveCheck {\n return {\n id: 'jobs-certification',\n description:\n 'Disposable Lakeflow Jobs branch, loop, failure, repair, cancellation, and cleanup certification',\n configured: (env) => env.DBX_TEST_JOBS_CERTIFY === '1',\n async run({ env, client }) {\n const root = `${env.DBX_TEST_JOBS_FIXTURE_ROOT ?? '/Workspace/Shared/fabric-experiments-target-pack'}/${randomUUID()}`;\n const paths = Object.fromEntries(\n Object.keys(NOTEBOOKS).map((name) => [name, `${root}/${name}`]),\n ) as Record<keyof typeof NOTEBOOKS, string>;\n try {\n await importNotebooks(client, paths);\n const adapter = new DatabricksJobsAdapter(client);\n const runId = await adapter.submit(certificationRequest(paths));\n const initial = await adapter.wait(runId, waitOptions(env));\n if (initial.resultState !== 'FAILED') {\n throw new Error(\n `Certification run ${runId} expected FAILED before repair, got ${initial.resultState}`,\n );\n }\n const retried = assertTask(initial.tasks, 'retry', 'SUCCESS');\n if ((retried.attemptNumber ?? 0) < 1) {\n throw new Error('Certification retry task did not record a second attempt');\n }\n assertTask(initial.tasks, 'seed', 'SUCCESS');\n assertTask(initial.tasks, 'branch', 'SUCCESS');\n assertTask(initial.tasks, 'foreach', 'SUCCESS');\n assertTask(initial.tasks, 'repair', 'FAILED');\n\n const repairId = await adapter.repair(runId, {\n rerunTasks: ['repair'],\n rerunDependentTasks: true,\n });\n const repaired = await adapter.waitForRepair(runId, repairId, waitOptions(env));\n if (repaired.resultState !== 'SUCCESS') {\n throw new Error(`Certification repair ${repairId} ended in ${repaired.resultState}`);\n }\n assertTask(repaired.tasks, 'repair', 'SUCCESS');\n\n const cancellationRunId = await adapter.submit(cancellationRequest(paths));\n await adapter.waitUntilActive(cancellationRunId, waitOptions(env));\n await adapter.cancel(cancellationRunId);\n const canceled = await adapter.wait(cancellationRunId, waitOptions(env));\n if (canceled.resultState !== 'CANCELED') {\n throw new Error(`Certification cancellation ended in ${canceled.resultState}`);\n }\n\n return {\n runId,\n repairId,\n cancellationRunId,\n taskValues: true,\n retry: true,\n condition: true,\n forEach: true,\n repair: true,\n cancellation: true,\n fixtureRoot: root,\n };\n } finally {\n await client.post('/api/2.0/workspace/delete', { path: root, recursive: true });\n }\n },\n };\n}\n\nasync function importNotebooks(\n client: WorkspaceClientLike,\n paths: Record<keyof typeof NOTEBOOKS, string>,\n): Promise<void> {\n await client.post('/api/2.0/workspace/mkdirs', {\n path: paths.seed.slice(0, paths.seed.lastIndexOf('/')),\n });\n for (const [name, source] of Object.entries(NOTEBOOKS) as Array<\n [keyof typeof NOTEBOOKS, string]\n >) {\n await client.post('/api/2.0/workspace/import', {\n path: paths[name],\n format: 'SOURCE',\n language: 'PYTHON',\n overwrite: true,\n content: Buffer.from(source).toString('base64'),\n });\n }\n}\n\nfunction certificationRequest(paths: Record<keyof typeof NOTEBOOKS, string>): JobsSubmitRequest {\n return {\n run_name: 'fabric-experiments-jobs-certification',\n tasks: [\n {\n task_key: 'retry',\n notebook_task: {\n notebook_path: paths.retry,\n base_parameters: { execution_count: '{{task.execution_count}}' },\n },\n max_retries: 1,\n },\n {\n task_key: 'seed',\n depends_on: [{ task_key: 'retry' }],\n notebook_task: { notebook_path: paths.seed },\n },\n {\n task_key: 'branch',\n depends_on: [{ task_key: 'seed' }],\n condition_task: {\n left: '{{tasks.seed.values.branch}}',\n op: 'EQUAL_TO',\n right: 'run',\n },\n },\n {\n task_key: 'foreach',\n depends_on: [{ task_key: 'branch', outcome: 'true' }],\n for_each_task: {\n inputs: '{{tasks.seed.values.items}}',\n concurrency: 2,\n task: {\n task_key: 'process_item',\n notebook_task: {\n notebook_path: paths.process,\n base_parameters: { item: '{{input}}' },\n },\n },\n },\n },\n {\n task_key: 'repair',\n depends_on: [{ task_key: 'foreach' }],\n notebook_task: {\n notebook_path: paths.repair,\n base_parameters: { repair_count: '{{job.repair_count}}' },\n },\n },\n ],\n };\n}\n\nfunction cancellationRequest(paths: Record<keyof typeof NOTEBOOKS, string>): JobsSubmitRequest {\n return {\n run_name: 'fabric-experiments-jobs-cancellation-certification',\n tasks: [{ task_key: 'sleep', notebook_task: { notebook_path: paths.sleep } }],\n };\n}\n\nfunction waitOptions(env: Record<string, string | undefined>) {\n return {\n timeoutMs: Number(env.DBX_TEST_TIMEOUT_MS ?? 900_000),\n pollIntervalMs: Number(env.DBX_TEST_POLL_INTERVAL_MS ?? 5_000),\n };\n}\n\nfunction assertTask(\n tasks: Array<{ taskKey: string; resultState: string; attemptNumber?: number }>,\n taskKey: string,\n resultState: string,\n): { taskKey: string; resultState: string; attemptNumber?: number } {\n const task = tasks.find((candidate) => candidate.taskKey === taskKey);\n if (!task) throw new Error(`Certification result did not contain task '${taskKey}'`);\n if (task.resultState !== resultState) {\n throw new Error(\n `Certification task '${taskKey}' ended in ${task.resultState}, expected ${resultState}`,\n );\n }\n return task;\n}\n","import { jobsCertificationCheck } from './jobs-certification-check.js';\nimport { jobsOrchestrationCheck } from './jobs-orchestration.js';\nimport { jobRunCheck, restrictedPrincipalCheck } from './live-checks.js';\nimport { type TargetPack, defineTargetPack } from './target-packs.js';\n\nexport function createLakeflowJobsTargetPack(): TargetPack {\n return defineTargetPack({\n id: 'lakeflow-jobs',\n name: 'Lakeflow Jobs orchestration',\n description:\n 'Typed multi-task DAG, branch/loop, retry, cancellation, repair and task-outcome validation.',\n version: '0.2.0',\n maturity: 'live-gated',\n capabilities: [\n 'jobs.multi-task-dag',\n 'jobs.dependencies',\n 'jobs.condition-task',\n 'jobs.for-each-task',\n 'jobs.retry',\n 'jobs.cancel',\n 'jobs.repair',\n 'jobs.task-outcomes',\n ],\n checks: () => [\n restrictedPrincipalCheck(),\n jobRunCheck(),\n jobsOrchestrationCheck(),\n jobsCertificationCheck(),\n ],\n requiredChecks: ['jobs-orchestration'],\n requirements: [\n {\n id: 'workspace',\n description: 'Databricks workspace host',\n anyOf: ['DATABRICKS_HOST'],\n },\n {\n id: 'authentication',\n description: 'Databricks OAuth, OIDC, bearer, or PAT authentication',\n anyOf: [\n 'DATABRICKS_BEARER',\n 'DATABRICKS_TOKEN',\n 'DATABRICKS_CLIENT_ID',\n 'DATABRICKS_OIDC_TOKEN',\n 'DATABRICKS_OIDC_TOKEN_FILEPATH',\n ],\n secret: true,\n },\n {\n id: 'orchestration-spec',\n description: 'JSON multi-task orchestration scenario',\n anyOf: ['DBX_TEST_JOBS_ORCHESTRATION_JSON'],\n required: false,\n },\n ],\n docsUrl:\n 'https://experiments.fabric.pro/docs/testing/target-packs/#lakeflow-jobs-orchestration',\n certificationScopes: [\n 'Azure Databricks serverless Jobs, West US, workspace OAuth, public network path',\n ],\n });\n}\n","import type { LiveCheck } from './live-suite.js';\nimport {\n type WorkspaceClientLike,\n createClientFromEnv,\n createWorkspaceContext,\n} from './workspace-context.js';\n\ntype JsonObject = Record<string, unknown>;\n\nexport interface PipelineResource extends JsonObject {\n pipeline_id?: string;\n name?: string;\n state?: string;\n spec?: JsonObject;\n}\n\nexport interface DashboardResource extends JsonObject {\n dashboard_id?: string;\n display_name?: string;\n lifecycle_state?: string;\n}\n\nexport interface PublishedDashboardResource extends JsonObject {\n display_name?: string;\n revision_create_time?: string;\n warehouse_id?: string;\n}\n\nexport interface GenieSpaceResource extends JsonObject {\n space_id?: string;\n title?: string;\n}\n\nexport interface RegisteredModelResource extends JsonObject {\n full_name?: string;\n name?: string;\n}\n\nexport interface ServingEndpointResource extends JsonObject {\n name?: string;\n state?: { ready?: string; config_update?: string };\n config?: JsonObject;\n ai_gateway?: JsonObject;\n}\n\nexport interface VectorSearchEndpointResource extends JsonObject {\n name?: string;\n endpoint_status?: { state?: string; message?: string };\n}\n\nexport interface VectorSearchIndexResource extends JsonObject {\n name?: string;\n status?: { ready?: boolean; message?: string; indexed_row_count?: number };\n}\n\n/**\n * Typed, injectable adapter for Databricks workload surfaces that are not part\n * of SQL Statement Execution. It deliberately mirrors the public REST APIs so\n * target packs can be unit tested without a workspace.\n */\nexport class DatabricksAdvancedWorkloadsAdapter {\n constructor(private readonly client: WorkspaceClientLike) {}\n\n pipeline(id: string): Promise<PipelineResource> {\n return this.client.get(`/api/2.0/pipelines/${segment(id)}`);\n }\n\n table(fullName: string): Promise<JsonObject> {\n return this.client.get(`/api/2.1/unity-catalog/tables/${segment(fullName)}`);\n }\n\n dashboard(id: string): Promise<DashboardResource> {\n return this.client.get(`/api/2.0/lakeview/dashboards/${segment(id)}`);\n }\n\n publishedDashboard(id: string): Promise<PublishedDashboardResource> {\n return this.client.get(`/api/2.0/lakeview/dashboards/${segment(id)}/published`);\n }\n\n genieSpace(id: string): Promise<GenieSpaceResource> {\n return this.client.get(`/api/2.0/genie/spaces/${segment(id)}`);\n }\n\n startGenieConversation(spaceId: string, question: string): Promise<JsonObject> {\n return this.client.post(`/api/2.0/genie/spaces/${segment(spaceId)}/start-conversation`, {\n content: question,\n });\n }\n\n experiment(id: string): Promise<JsonObject> {\n return this.client.get('/api/2.0/mlflow/experiments/get', { experiment_id: id });\n }\n\n registeredModel(fullName: string): Promise<RegisteredModelResource> {\n return this.client.get(`/api/2.1/unity-catalog/models/${segment(fullName)}`);\n }\n\n modelVersion(fullName: string, version: string): Promise<JsonObject> {\n return this.client.get(\n `/api/2.1/unity-catalog/models/${segment(fullName)}/versions/${segment(version)}`,\n );\n }\n\n onlineTable(fullName: string): Promise<JsonObject> {\n return this.client.get(`/api/2.0/online-tables/${segment(fullName)}`);\n }\n\n servingEndpoint(name: string): Promise<ServingEndpointResource> {\n return this.client.get(`/api/2.0/serving-endpoints/${segment(name)}`);\n }\n\n invokeServingEndpoint(name: string, request: unknown): Promise<JsonObject> {\n return this.client.post(`/serving-endpoints/${segment(name)}/invocations`, request);\n }\n\n vectorSearchEndpoint(name: string): Promise<VectorSearchEndpointResource> {\n return this.client.get(`/api/2.0/vector-search/endpoints/${segment(name)}`);\n }\n\n vectorSearchIndex(name: string): Promise<VectorSearchIndexResource> {\n return this.client.get(`/api/2.0/vector-search/indexes/${segment(name)}`);\n }\n\n queryVectorSearchIndex(name: string, request: unknown): Promise<JsonObject> {\n return this.client.post(`/api/2.0/vector-search/indexes/${segment(name)}/query`, request);\n }\n\n connection(name: string): Promise<JsonObject> {\n return this.client.get(`/api/2.1/unity-catalog/connections/${segment(name)}`);\n }\n\n share(name: string): Promise<JsonObject> {\n return this.client.get(`/api/2.1/unity-catalog/shares/${segment(name)}`);\n }\n\n cleanRoom(name: string): Promise<JsonObject> {\n return this.client.get(`/api/2.0/clean-rooms/${segment(name)}`);\n }\n\n ipAccessList(id: string): Promise<JsonObject> {\n return this.client.get(`/api/2.0/ip-access-lists/${segment(id)}`);\n }\n\n clusterPolicy(id: string): Promise<JsonObject> {\n return this.client.get('/api/2.0/policies/clusters/get', { policy_id: id });\n }\n\n warehouse(id: string): Promise<JsonObject> {\n return this.client.get(`/api/2.0/sql/warehouses/${segment(id)}`);\n }\n}\n\nfunction segment(value: string): string {\n return encodeURIComponent(value);\n}\n\nfunction adapter(client: WorkspaceClientLike): DatabricksAdvancedWorkloadsAdapter {\n return new DatabricksAdvancedWorkloadsAdapter(client);\n}\n\nfunction required(env: Record<string, string | undefined>, names: readonly string[]): string[] {\n return names.filter((name) => !env[name]?.trim());\n}\n\nfunction requireEnv(env: Record<string, string | undefined>, names: readonly string[]): void {\n const missing = required(env, names);\n if (missing.length > 0) throw new Error(`Missing required configuration: ${missing.join(', ')}`);\n}\n\nfunction parseJson(value: string | undefined, name: string): unknown {\n if (!value) return undefined;\n try {\n return JSON.parse(value) as unknown;\n } catch {\n throw new Error(`${name} must contain valid JSON`);\n }\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction isNonNegativeInteger(value: unknown): value is number {\n return typeof value === 'number' && Number.isInteger(value) && value >= 0;\n}\n\nfunction assertNotFailed(label: string, state: unknown): void {\n if (typeof state === 'string' && /FAIL|ERROR|DELET/i.test(state)) {\n throw new Error(`${label} is ${state}`);\n }\n}\n\nfunction assertReady(label: string, state: unknown, accepted: readonly string[]): void {\n if (typeof state !== 'string' || !accepted.includes(state.toUpperCase())) {\n throw new Error(`${label} is ${String(state ?? 'UNKNOWN')}; expected ${accepted.join(' or ')}`);\n }\n}\n\nasync function booleanSql(\n label: string,\n sql: string | undefined,\n query: (statement: string) => Promise<Record<string, unknown>[]>,\n): Promise<void> {\n if (!sql) return;\n const rows = await query(sql);\n const first = rows[0] ? Object.values(rows[0])[0] : undefined;\n if (!(first === true || first === 1 || first === '1' || first === 'true')) {\n throw new Error(`${label} assertion did not return a truthy first column`);\n }\n}\n\nexport function advancedStreamingCdcCheck(): LiveCheck {\n const names = [\n 'DBX_TEST_STREAMING_PIPELINE_ID',\n 'DBX_TEST_STREAMING_TABLE',\n 'DBX_TEST_CDC_ASSERTION_SQL',\n 'DBX_TEST_STREAMING_ASSERTION_SQL',\n ] as const;\n return {\n id: 'streaming-cdc',\n description: 'Streaming pipeline, streaming table and CDC assertions are healthy',\n configured: (env) => required(env, names).length === 0,\n async run({ env, client, warehouse }) {\n requireEnv(env, names);\n const api = adapter(client);\n const pipeline = await api.pipeline(env.DBX_TEST_STREAMING_PIPELINE_ID as string);\n assertNotFailed('Streaming pipeline', pipeline.state);\n const table = await api.table(env.DBX_TEST_STREAMING_TABLE as string);\n const tableType = String(table.table_type ?? table.data_source_format ?? '').toUpperCase();\n if (!['STREAMING_TABLE', 'MATERIALIZED_VIEW', 'DELTA'].includes(tableType)) {\n throw new Error(`Streaming target has unsupported table type ${tableType || 'UNKNOWN'}`);\n }\n await booleanSql('CDC', env.DBX_TEST_CDC_ASSERTION_SQL, warehouse.query);\n await booleanSql(\n 'Streaming freshness',\n env.DBX_TEST_STREAMING_ASSERTION_SQL,\n warehouse.query,\n );\n return { pipelineId: pipeline.pipeline_id, table: env.DBX_TEST_STREAMING_TABLE, tableType };\n },\n };\n}\n\nexport function lakeflowConnectCheck(): LiveCheck {\n const names = ['DBX_TEST_CONNECT_PIPELINE_ID', 'DBX_TEST_CONNECT_ASSERTION_SQL'] as const;\n return {\n id: 'lakeflow-connect',\n description: 'Lakeflow Connect ingestion pipeline exists and is not failed',\n configured: (env) => required(env, names).length === 0,\n async run({ env, client, warehouse }) {\n requireEnv(env, names);\n const id = env.DBX_TEST_CONNECT_PIPELINE_ID as string;\n const pipeline = await adapter(client).pipeline(id);\n assertNotFailed('Lakeflow Connect pipeline', pipeline.state);\n const ingestion = pipeline.spec?.ingestion_definition as JsonObject | undefined;\n if (!ingestion || !Array.isArray(ingestion.objects) || ingestion.objects.length === 0) {\n throw new Error('Lakeflow Connect pipeline has no managed ingestion definition');\n }\n await booleanSql(\n 'Lakeflow Connect replication',\n env.DBX_TEST_CONNECT_ASSERTION_SQL,\n warehouse.query,\n );\n return {\n pipelineId: pipeline.pipeline_id ?? id,\n state: pipeline.state ?? 'IDLE',\n sourceType: ingestion.source_type ?? 'MANAGED_INGESTION',\n objects: ingestion.objects.length,\n };\n },\n };\n}\n\nexport function aiBiDashboardCheck(): LiveCheck {\n return {\n id: 'aibi-dashboard',\n description: 'Published AI/BI dashboard is accessible',\n configured: (env) => Boolean(env.DBX_TEST_DASHBOARD_ID),\n async run({ env, client }) {\n const api = adapter(client);\n const id = env.DBX_TEST_DASHBOARD_ID as string;\n const dashboard = await api.dashboard(id);\n assertNotFailed('AI/BI dashboard', dashboard.lifecycle_state);\n const published = await api.publishedDashboard(id);\n if (!published.revision_create_time) {\n throw new Error(`AI/BI dashboard ${id} has no published revision`);\n }\n return {\n dashboardId: dashboard.dashboard_id ?? id,\n name: published.display_name ?? dashboard.display_name,\n publishedAt: published.revision_create_time,\n };\n },\n };\n}\n\nexport function genieCheck(): LiveCheck {\n const names = ['DBX_TEST_GENIE_SPACE_ID', 'DBX_TEST_GENIE_QUESTION'] as const;\n return {\n id: 'genie',\n description: 'Genie space is accessible and can optionally start a grounded conversation',\n configured: (env) => required(env, names).length === 0,\n async run({ env, client }) {\n requireEnv(env, names);\n const api = adapter(client);\n const id = env.DBX_TEST_GENIE_SPACE_ID as string;\n const space = await api.genieSpace(id);\n let conversation: JsonObject | undefined;\n if (env.DBX_TEST_GENIE_QUESTION) {\n conversation = await api.startGenieConversation(id, env.DBX_TEST_GENIE_QUESTION);\n if (!conversation.conversation_id && !conversation.message_id) {\n throw new Error('Genie did not return a conversation or message identifier');\n }\n }\n return {\n spaceId: space.space_id ?? id,\n title: space.title,\n conversationStarted: Boolean(conversation),\n };\n },\n };\n}\n\nexport function mlflowLifecycleCheck(): LiveCheck {\n const names = [\n 'DBX_TEST_MLFLOW_EXPERIMENT_ID',\n 'DBX_TEST_REGISTERED_MODEL',\n 'DBX_TEST_MODEL_VERSION',\n ] as const;\n return {\n id: 'mlflow-lifecycle',\n description: 'MLflow experiment and Unity Catalog model version are accessible',\n configured: (env) => required(env, names).length === 0,\n async run({ env, client }) {\n requireEnv(env, names);\n const api = adapter(client);\n const experiment = await api.experiment(env.DBX_TEST_MLFLOW_EXPERIMENT_ID as string);\n const model = await api.registeredModel(env.DBX_TEST_REGISTERED_MODEL as string);\n const version = await api.modelVersion(\n env.DBX_TEST_REGISTERED_MODEL as string,\n env.DBX_TEST_MODEL_VERSION as string,\n );\n assertNotFailed('Model version', version.status);\n return {\n experimentId:\n (experiment.experiment as JsonObject | undefined)?.experiment_id ??\n env.DBX_TEST_MLFLOW_EXPERIMENT_ID,\n model: model.full_name ?? model.name ?? env.DBX_TEST_REGISTERED_MODEL,\n version: version.version ?? env.DBX_TEST_MODEL_VERSION,\n };\n },\n };\n}\n\nexport function featureEngineeringServingCheck(): LiveCheck {\n return {\n id: 'feature-engineering',\n description: 'Feature table and online materialization are healthy',\n configured: (env) =>\n Boolean(\n env.DBX_TEST_FEATURE_TABLE &&\n env.DBX_TEST_FEATURE_ASSERTION_SQL &&\n (env.DBX_TEST_ONLINE_TABLE || env.DBX_TEST_FEATURE_SERVING_PIPELINE_ID),\n ),\n async run({ env, client, warehouse }) {\n requireEnv(env, ['DBX_TEST_FEATURE_TABLE']);\n if (!env.DBX_TEST_ONLINE_TABLE && !env.DBX_TEST_FEATURE_SERVING_PIPELINE_ID) {\n throw new Error(\n 'Feature serving requires DBX_TEST_ONLINE_TABLE or DBX_TEST_FEATURE_SERVING_PIPELINE_ID',\n );\n }\n const api = adapter(client);\n const source = await api.table(env.DBX_TEST_FEATURE_TABLE as string);\n let state: unknown;\n let servingResource: string;\n if (env.DBX_TEST_ONLINE_TABLE) {\n const online = await api.onlineTable(env.DBX_TEST_ONLINE_TABLE);\n const status = online.status as JsonObject | undefined;\n state = status?.state ?? status?.detailed_state ?? online.state;\n assertReady('Online table', state, ['ONLINE', 'ACTIVE', 'READY', 'PROVISIONED']);\n servingResource = env.DBX_TEST_ONLINE_TABLE;\n } else {\n const pipelineId = env.DBX_TEST_FEATURE_SERVING_PIPELINE_ID as string;\n const pipeline = await api.pipeline(pipelineId);\n state = pipeline.state ?? 'IDLE';\n assertNotFailed('Synced Table pipeline', state);\n servingResource = pipeline.pipeline_id ?? pipelineId;\n }\n await booleanSql('Feature freshness', env.DBX_TEST_FEATURE_ASSERTION_SQL, warehouse.query);\n return {\n featureTable: source.full_name ?? env.DBX_TEST_FEATURE_TABLE,\n servingResource,\n state,\n };\n },\n };\n}\n\nexport function modelServingCheck(): LiveCheck {\n const names = [\n 'DBX_TEST_SERVING_ENDPOINT',\n 'DBX_TEST_SERVING_REQUEST_JSON',\n 'DBX_TEST_AI_GATEWAY_REQUIRED',\n ] as const;\n return {\n id: 'model-serving',\n description: 'Model Serving endpoint is ready and can optionally serve an inference request',\n configured: (env) => required(env, names).length === 0,\n async run({ env, client }) {\n requireEnv(env, names);\n if (env.DBX_TEST_AI_GATEWAY_REQUIRED !== '1') {\n throw new Error('DBX_TEST_AI_GATEWAY_REQUIRED must be 1 for the Model Serving target pack');\n }\n const api = adapter(client);\n const name = env.DBX_TEST_SERVING_ENDPOINT as string;\n const endpoint = await api.servingEndpoint(name);\n assertReady('Serving endpoint', endpoint.state?.ready, ['READY']);\n if (env.DBX_TEST_AI_GATEWAY_REQUIRED === '1' && !endpoint.ai_gateway) {\n throw new Error(`Serving endpoint ${name} has no AI Gateway configuration`);\n }\n let response: JsonObject | undefined;\n if (env.DBX_TEST_SERVING_REQUEST_JSON) {\n response = await api.invokeServingEndpoint(\n name,\n parseJson(env.DBX_TEST_SERVING_REQUEST_JSON, 'DBX_TEST_SERVING_REQUEST_JSON'),\n );\n if (Object.keys(response).length === 0)\n throw new Error('Serving invocation returned an empty response');\n }\n return {\n endpoint: endpoint.name ?? name,\n ready: endpoint.state?.ready,\n aiGateway: Boolean(endpoint.ai_gateway),\n invoked: Boolean(response),\n };\n },\n };\n}\n\n/**\n * Live contract for the deterministic chat payload used by\n * `@fabricorg/experiments-evals/databricks`. It is separate from the generic\n * serving check because custom model endpoints may use dataframe payloads and\n * are not valid LLM judges.\n */\nexport function evalJudgeModelServingCheck(): LiveCheck {\n const names = ['DBX_TEST_EVAL_SERVING_ENDPOINT'] as const;\n return {\n id: 'model-eval-judge',\n description: 'Databricks Model Serving satisfies the deterministic evaluator chat contract',\n configured: (env) => required(env, names).length === 0,\n async run({ env, client }) {\n requireEnv(env, names);\n const api = adapter(client);\n const name = env.DBX_TEST_EVAL_SERVING_ENDPOINT as string;\n const endpoint = await api.servingEndpoint(name);\n assertReady('Evaluator serving endpoint', endpoint.state?.ready, ['READY']);\n const response = await api.invokeServingEndpoint(name, {\n messages: [\n {\n role: 'system',\n content: 'Answer on the first line with exactly \"LABEL: relevant\".',\n },\n { role: 'user', content: 'Is this response relevant to this question?' },\n ],\n temperature: 0,\n max_tokens: 32,\n });\n const choices = Array.isArray(response.choices) ? response.choices : [];\n const first = choices[0];\n const message = isObject(first) && isObject(first.message) ? first.message : undefined;\n const content = typeof message?.content === 'string' ? message.content : '';\n const usage = isObject(response.usage) ? response.usage : undefined;\n const inputTokens = usage?.prompt_tokens;\n const outputTokens = usage?.completion_tokens;\n if (!/^\\s*LABEL:\\s*relevant\\s*$/im.test(content)) {\n throw new Error('Evaluator serving endpoint did not return the requested label contract');\n }\n if (!isNonNegativeInteger(inputTokens) || !isNonNegativeInteger(outputTokens)) {\n throw new Error('Evaluator serving endpoint did not return integer token usage');\n }\n return { endpoint: endpoint.name ?? name, inputTokens, outputTokens };\n },\n };\n}\n\nexport function vectorSearchCheck(): LiveCheck {\n const names = ['DBX_TEST_VECTOR_ENDPOINT', 'DBX_TEST_VECTOR_INDEX'] as const;\n return {\n id: 'vector-search',\n description: 'Vector Search endpoint and index are online',\n configured: (env) => required(env, names).length === 0,\n async run({ env, client }) {\n requireEnv(env, names);\n const api = adapter(client);\n const endpoint = await api.vectorSearchEndpoint(env.DBX_TEST_VECTOR_ENDPOINT as string);\n assertReady('Vector Search endpoint', endpoint.endpoint_status?.state, ['ONLINE', 'READY']);\n const index = await api.vectorSearchIndex(env.DBX_TEST_VECTOR_INDEX as string);\n if (index.status?.ready !== true)\n throw new Error(`Vector Search index is not ready: ${index.status?.message ?? 'UNKNOWN'}`);\n return {\n endpoint: endpoint.name ?? env.DBX_TEST_VECTOR_ENDPOINT,\n index: index.name ?? env.DBX_TEST_VECTOR_INDEX,\n indexedRows: index.status.indexed_row_count,\n };\n },\n };\n}\n\nexport function ragAgentCheck(): LiveCheck {\n const names = [\n 'DBX_TEST_VECTOR_INDEX',\n 'DBX_TEST_VECTOR_QUERY_JSON',\n 'DBX_TEST_AGENT_ENDPOINT',\n 'DBX_TEST_AGENT_REQUEST_JSON',\n ] as const;\n return {\n id: 'rag-agent',\n description: 'RAG retrieval and agent serving endpoint return non-empty responses',\n configured: (env) => required(env, names).length === 0,\n async run({ env, client }) {\n requireEnv(env, names);\n const api = adapter(client);\n let retrieval: JsonObject | undefined;\n if (env.DBX_TEST_VECTOR_QUERY_JSON) {\n retrieval = await api.queryVectorSearchIndex(\n env.DBX_TEST_VECTOR_INDEX as string,\n parseJson(env.DBX_TEST_VECTOR_QUERY_JSON, 'DBX_TEST_VECTOR_QUERY_JSON'),\n );\n if (!retrieval.result && !retrieval.data_array && !retrieval.manifest) {\n throw new Error('Vector query returned no result payload');\n }\n }\n let agent: JsonObject | undefined;\n if (env.DBX_TEST_AGENT_ENDPOINT) {\n const endpoint = await api.servingEndpoint(env.DBX_TEST_AGENT_ENDPOINT);\n assertReady('Agent endpoint', endpoint.state?.ready, ['READY']);\n if (env.DBX_TEST_AGENT_REQUEST_JSON) {\n agent = await api.invokeServingEndpoint(\n env.DBX_TEST_AGENT_ENDPOINT,\n parseJson(env.DBX_TEST_AGENT_REQUEST_JSON, 'DBX_TEST_AGENT_REQUEST_JSON'),\n );\n if (Object.keys(agent).length === 0)\n throw new Error('Agent invocation returned an empty response');\n }\n }\n return {\n retrieval: Boolean(retrieval),\n agentEndpoint: env.DBX_TEST_AGENT_ENDPOINT,\n agentInvoked: Boolean(agent),\n };\n },\n };\n}\n\nexport function federationSharingCleanRoomsCheck(): LiveCheck {\n const names = [\n 'DBX_TEST_CONNECTION',\n 'DBX_TEST_SHARE',\n 'DBX_TEST_CLEAN_ROOM',\n 'DBX_TEST_FEDERATION_ASSERTION_SQL',\n ] as const;\n return {\n id: 'federation-sharing-cleanrooms',\n description: 'Lakehouse Federation connection, Delta Share and Clean Room are accessible',\n configured: (env) => required(env, names).length === 0,\n async run({ env, client, warehouse }) {\n requireEnv(env, names);\n const api = adapter(client);\n const connection = await api.connection(env.DBX_TEST_CONNECTION as string);\n const share = await api.share(env.DBX_TEST_SHARE as string);\n const room = await api.cleanRoom(env.DBX_TEST_CLEAN_ROOM as string);\n await booleanSql('Federated query', env.DBX_TEST_FEDERATION_ASSERTION_SQL, warehouse.query);\n return {\n connection: connection.name ?? env.DBX_TEST_CONNECTION,\n share: share.name ?? env.DBX_TEST_SHARE,\n cleanRoom: room.name ?? env.DBX_TEST_CLEAN_ROOM,\n };\n },\n };\n}\n\nexport function securityPostureCostCheck(): LiveCheck {\n const names = [\n 'DBX_TEST_IP_ACCESS_LIST_ID',\n 'DBX_TEST_CLUSTER_POLICY_ID',\n 'DBX_TEST_COST_ASSERTION_SQL',\n ] as const;\n return {\n id: 'security-cost',\n description: 'Network access controls, compute policy and cost guardrail are enforced',\n configured: (env) => required(env, names).length === 0,\n async run({ env, client, warehouse }) {\n requireEnv(env, names);\n const api = adapter(client);\n const access = await api.ipAccessList(env.DBX_TEST_IP_ACCESS_LIST_ID as string);\n if (access.enabled === false) throw new Error('Configured IP access list is disabled');\n const policy = await api.clusterPolicy(env.DBX_TEST_CLUSTER_POLICY_ID as string);\n if (!policy.policy_id && !policy.name)\n throw new Error('Cluster policy response has no identity');\n if (\n env.DBX_TEST_EXPECT_HOST_SUFFIX &&\n !env.DATABRICKS_HOST?.endsWith(env.DBX_TEST_EXPECT_HOST_SUFFIX)\n ) {\n throw new Error(`Workspace host does not end with ${env.DBX_TEST_EXPECT_HOST_SUFFIX}`);\n }\n await booleanSql('Cost guardrail', env.DBX_TEST_COST_ASSERTION_SQL, warehouse.query);\n return {\n ipAccessList: access.list_id ?? env.DBX_TEST_IP_ACCESS_LIST_ID,\n policy: policy.policy_id ?? policy.name,\n costGuardrail: 'pass',\n };\n },\n };\n}\n\nexport interface RegionalDrCheckOptions {\n clientFactory?: (env: Record<string, string | undefined>) => WorkspaceClientLike;\n}\n\nexport function regionalDrCheck(options: RegionalDrCheckOptions = {}): LiveCheck {\n const names = [\n 'DBX_TEST_DR_HOST',\n 'DBX_TEST_DR_WAREHOUSE_ID',\n 'DBX_TEST_DR_ASSERTION_SQL',\n ] as const;\n return {\n id: 'regional-dr',\n description: 'Secondary-region workspace authentication and SQL warehouse are reachable',\n configured: (env) => required(env, names).length === 0,\n async run({ env }) {\n requireEnv(env, names);\n const drEnv: Record<string, string | undefined> = {\n ...env,\n DATABRICKS_HOST: env.DBX_TEST_DR_HOST,\n DATABRICKS_WAREHOUSE_ID: env.DBX_TEST_DR_WAREHOUSE_ID,\n DATABRICKS_HTTP_PATH: undefined,\n DATABRICKS_BEARER: env.DBX_TEST_DR_BEARER,\n DATABRICKS_TOKEN: env.DBX_TEST_DR_TOKEN,\n DATABRICKS_CLIENT_ID: env.DBX_TEST_DR_CLIENT_ID ?? env.DATABRICKS_CLIENT_ID,\n DATABRICKS_CLIENT_SECRET: env.DBX_TEST_DR_CLIENT_SECRET ?? env.DATABRICKS_CLIENT_SECRET,\n };\n const client = options.clientFactory?.(drEnv) ?? createClientFromEnv(drEnv);\n const secondary = await adapter(client).warehouse(env.DBX_TEST_DR_WAREHOUSE_ID as string);\n assertReady('DR SQL warehouse', secondary.state, ['RUNNING']);\n const drWarehouse = await createWorkspaceContext({ env: drEnv, client });\n try {\n await booleanSql('Regional DR workload', env.DBX_TEST_DR_ASSERTION_SQL, drWarehouse.query);\n } finally {\n await drWarehouse.close();\n }\n return {\n secondaryWorkspace: 'reachable',\n warehouseId: secondary.id ?? env.DBX_TEST_DR_WAREHOUSE_ID,\n state: secondary.state,\n };\n },\n };\n}\n","import {\n advancedStreamingCdcCheck,\n aiBiDashboardCheck,\n featureEngineeringServingCheck,\n federationSharingCleanRoomsCheck,\n genieCheck,\n lakeflowConnectCheck,\n mlflowLifecycleCheck,\n modelServingCheck,\n ragAgentCheck,\n regionalDrCheck,\n securityPostureCostCheck,\n vectorSearchCheck,\n} from './advanced-workload-checks.js';\nimport { restrictedPrincipalCheck } from './live-checks.js';\nimport { type TargetPack, defineTargetPack } from './target-packs.js';\n\nconst DOCS = 'https://experiments.fabric.pro/docs/testing/target-packs/';\nconst AZURE_M2M_SCOPE =\n 'Azure Databricks, dedicated service principal using OAuth M2M, public network path; named managed or disposable certification fixtures';\n\nconst workspace = {\n id: 'workspace',\n description: 'Databricks workspace host',\n anyOf: ['DATABRICKS_HOST'],\n} as const;\nconst auth = {\n id: 'authentication',\n description: 'Databricks OAuth, OIDC, bearer, or PAT authentication',\n anyOf: [\n 'DATABRICKS_BEARER',\n 'DATABRICKS_TOKEN',\n 'DATABRICKS_CLIENT_ID',\n 'DATABRICKS_OIDC_TOKEN',\n 'DATABRICKS_OIDC_TOKEN_FILEPATH',\n ],\n secret: true,\n} as const;\nconst warehouse = {\n id: 'warehouse',\n description: 'SQL warehouse for data-plane assertions',\n anyOf: ['DATABRICKS_WAREHOUSE_ID', 'DATABRICKS_HTTP_PATH'],\n} as const;\nconst requirement = (id: string, description: string, ...anyOf: string[]) => ({\n id,\n description,\n anyOf,\n});\n\nexport function createAdvancedStreamingTargetPack(): TargetPack {\n return defineTargetPack({\n id: 'streaming-cdc-connect',\n name: 'Advanced streaming, CDC and Lakeflow Connect',\n description:\n 'Streaming tables, pipeline health, CDC correctness, freshness and managed connector replication.',\n version: '1.0.0',\n maturity: 'live-gated',\n capabilities: [\n 'streaming.tables',\n 'streaming.freshness',\n 'cdc.correctness',\n 'lakeflow-connect.replication',\n ],\n checks: () => [restrictedPrincipalCheck(), advancedStreamingCdcCheck(), lakeflowConnectCheck()],\n requiredChecks: ['streaming-cdc', 'lakeflow-connect'],\n requirements: [\n workspace,\n auth,\n warehouse,\n requirement('streaming-pipeline', 'Streaming pipeline ID', 'DBX_TEST_STREAMING_PIPELINE_ID'),\n requirement('streaming-table', 'Streaming target table', 'DBX_TEST_STREAMING_TABLE'),\n requirement(\n 'connect-pipeline',\n 'Lakeflow Connect ingestion pipeline',\n 'DBX_TEST_CONNECT_PIPELINE_ID',\n ),\n requirement(\n 'streaming-assertion',\n 'Streaming freshness SQL',\n 'DBX_TEST_STREAMING_ASSERTION_SQL',\n ),\n requirement('cdc-assertion', 'CDC correctness SQL', 'DBX_TEST_CDC_ASSERTION_SQL'),\n requirement(\n 'connect-assertion',\n 'Lakeflow Connect replication SQL',\n 'DBX_TEST_CONNECT_ASSERTION_SQL',\n ),\n ],\n docsUrl: `${DOCS}#advanced-streaming-cdc-and-lakeflow-connect`,\n certificationScopes: [\n `${AZURE_M2M_SCOPE}; serverless Lakeflow pipeline AUTO CDC and query-based PostgreSQL foreign-catalog ingestion`,\n ],\n });\n}\n\nexport function createAiBiGenieTargetPack(): TargetPack {\n return defineTargetPack({\n id: 'aibi-genie',\n name: 'AI/BI dashboards and Genie',\n description: 'Dashboard accessibility and authenticated Genie space/conversation behavior.',\n version: '0.2.0',\n maturity: 'live-gated',\n capabilities: ['aibi.dashboard', 'genie.space', 'genie.conversation'],\n checks: () => [restrictedPrincipalCheck(), aiBiDashboardCheck(), genieCheck()],\n requiredChecks: ['aibi-dashboard', 'genie'],\n requirements: [\n workspace,\n auth,\n requirement('dashboard', 'AI/BI dashboard ID', 'DBX_TEST_DASHBOARD_ID'),\n requirement('genie-space', 'Genie space ID', 'DBX_TEST_GENIE_SPACE_ID'),\n requirement(\n 'genie-question',\n 'Grounded Genie certification question',\n 'DBX_TEST_GENIE_QUESTION',\n ),\n ],\n docsUrl: `${DOCS}#aibi-dashboards-and-genie`,\n certificationScopes: [\n `${AZURE_M2M_SCOPE}; published AI/BI dashboard revision and Genie conversation start`,\n ],\n });\n}\n\nexport function createMlflowLifecycleTargetPack(): TargetPack {\n return defineTargetPack({\n id: 'mlflow-lifecycle',\n name: 'MLflow and model lifecycle',\n description:\n 'MLflow experiments plus Unity Catalog registered-model and model-version lifecycle evidence.',\n version: '0.1.0',\n maturity: 'live-gated',\n capabilities: [\n 'mlflow.experiments',\n 'models.unity-catalog',\n 'models.versions',\n 'models.lifecycle',\n ],\n checks: () => [restrictedPrincipalCheck(), mlflowLifecycleCheck()],\n requiredChecks: ['mlflow-lifecycle'],\n requirements: [\n workspace,\n auth,\n requirement('experiment', 'MLflow experiment ID', 'DBX_TEST_MLFLOW_EXPERIMENT_ID'),\n requirement(\n 'registered-model',\n 'Unity Catalog registered model',\n 'DBX_TEST_REGISTERED_MODEL',\n ),\n requirement('model-version', 'Registered model version', 'DBX_TEST_MODEL_VERSION'),\n ],\n docsUrl: `${DOCS}#mlflow-and-model-lifecycle`,\n certificationScopes: [\n `${AZURE_M2M_SCOPE}; MLflow experiment and configured Unity Catalog model version`,\n ],\n });\n}\n\nexport function createFeatureEngineeringTargetPack(): TargetPack {\n return defineTargetPack({\n id: 'feature-engineering-serving',\n name: 'Feature engineering and serving',\n description:\n 'Unity Catalog feature tables, online materialization state and freshness assertions.',\n version: '0.1.0',\n maturity: 'live-gated',\n capabilities: [\n 'features.tables',\n 'features.online-tables',\n 'features.freshness',\n 'features.serving',\n ],\n checks: () => [restrictedPrincipalCheck(), featureEngineeringServingCheck()],\n requiredChecks: ['feature-engineering'],\n requirements: [\n workspace,\n auth,\n warehouse,\n requirement('feature-table', 'Unity Catalog feature table', 'DBX_TEST_FEATURE_TABLE'),\n requirement(\n 'online-materialization',\n 'Databricks Online Table or Synced Table pipeline',\n 'DBX_TEST_ONLINE_TABLE',\n 'DBX_TEST_FEATURE_SERVING_PIPELINE_ID',\n ),\n requirement(\n 'feature-assertion',\n 'Feature freshness/correctness SQL',\n 'DBX_TEST_FEATURE_ASSERTION_SQL',\n ),\n ],\n docsUrl: `${DOCS}#feature-engineering-and-serving`,\n certificationScopes: [\n `${AZURE_M2M_SCOPE}; Delta feature table, PostgreSQL-backed Synced Table, and SQL freshness`,\n ],\n });\n}\n\nexport function createModelServingTargetPack(): TargetPack {\n return defineTargetPack({\n id: 'model-serving-gateway',\n name: 'Model Serving and AI Gateway',\n description: 'Serving readiness, inference behavior and optional AI Gateway policy presence.',\n version: '0.1.0',\n maturity: 'live-gated',\n capabilities: [\n 'model-serving.readiness',\n 'model-serving.inference',\n 'ai-gateway.configuration',\n ],\n checks: () => [restrictedPrincipalCheck(), modelServingCheck()],\n requiredChecks: ['model-serving'],\n requirements: [\n workspace,\n auth,\n requirement('serving-endpoint', 'Model Serving endpoint name', 'DBX_TEST_SERVING_ENDPOINT'),\n requirement(\n 'serving-request',\n 'Safe inference request JSON',\n 'DBX_TEST_SERVING_REQUEST_JSON',\n ),\n requirement(\n 'ai-gateway',\n 'AI Gateway enforcement flag set to 1',\n 'DBX_TEST_AI_GATEWAY_REQUIRED',\n ),\n ],\n docsUrl: `${DOCS}#model-serving-and-ai-gateway`,\n certificationScopes: [\n `${AZURE_M2M_SCOPE}; custom-model inference and AI Gateway inference-table configuration`,\n ],\n });\n}\n\nexport function createVectorRagAgentsTargetPack(): TargetPack {\n return defineTargetPack({\n id: 'vector-rag-agents',\n name: 'Vector Search, RAG and agents',\n description:\n 'Vector endpoint/index readiness, retrieval behavior and agent endpoint inference.',\n version: '0.1.0',\n maturity: 'live-gated',\n capabilities: [\n 'vector-search.endpoint',\n 'vector-search.index',\n 'rag.retrieval',\n 'agents.serving',\n ],\n checks: () => [restrictedPrincipalCheck(), vectorSearchCheck(), ragAgentCheck()],\n requiredChecks: ['vector-search', 'rag-agent'],\n requirements: [\n workspace,\n auth,\n requirement('vector-endpoint', 'Vector Search endpoint', 'DBX_TEST_VECTOR_ENDPOINT'),\n requirement('vector-index', 'Vector Search index', 'DBX_TEST_VECTOR_INDEX'),\n requirement('vector-query', 'Vector retrieval request JSON', 'DBX_TEST_VECTOR_QUERY_JSON'),\n requirement('agent-endpoint', 'Agent serving endpoint', 'DBX_TEST_AGENT_ENDPOINT'),\n requirement('agent-request', 'Safe agent request JSON', 'DBX_TEST_AGENT_REQUEST_JSON'),\n ],\n docsUrl: `${DOCS}#vector-search-rag-and-agents`,\n certificationScopes: [\n `${AZURE_M2M_SCOPE}; Delta Sync vector retrieval and custom PyFunc agent invocation`,\n ],\n });\n}\n\nexport function createFederationSharingTargetPack(): TargetPack {\n return defineTargetPack({\n id: 'federation-sharing-cleanrooms',\n name: 'Federation, Delta Sharing and Clean Rooms',\n description:\n 'Federated connection, data-plane query, Delta Share and Clean Room governance access.',\n version: '1.0.0',\n maturity: 'live-gated',\n capabilities: [\n 'federation.connections',\n 'federation.query',\n 'delta-sharing.shares',\n 'clean-rooms.access',\n ],\n checks: () => [restrictedPrincipalCheck(), federationSharingCleanRoomsCheck()],\n requiredChecks: ['federation-sharing-cleanrooms'],\n requirements: [\n workspace,\n auth,\n warehouse,\n requirement('connection', 'Lakehouse Federation connection', 'DBX_TEST_CONNECTION'),\n requirement('share', 'Delta Sharing share', 'DBX_TEST_SHARE'),\n requirement('clean-room', 'Clean Room name', 'DBX_TEST_CLEAN_ROOM'),\n requirement(\n 'federation-assertion',\n 'Federated data-plane SQL',\n 'DBX_TEST_FEDERATION_ASSERTION_SQL',\n ),\n ],\n docsUrl: `${DOCS}#federation-delta-sharing-and-clean-rooms`,\n certificationScopes: [\n `${AZURE_M2M_SCOPE}; managed PostgreSQL federation, Delta Sharing table, and two-metastore Clean Room`,\n ],\n });\n}\n\nexport function createSecurityCostDrTargetPack(): TargetPack {\n return defineTargetPack({\n id: 'security-cost-dr',\n name: 'Networking, security posture, cost and regional DR',\n description:\n 'IP controls, compute policy, cost guardrail and authenticated secondary-region readiness.',\n version: '1.0.0',\n maturity: 'live-gated',\n capabilities: [\n 'network.ip-access',\n 'security.compute-policy',\n 'cost.system-tables',\n 'dr.secondary-region',\n ],\n checks: () => [restrictedPrincipalCheck(), securityPostureCostCheck(), regionalDrCheck()],\n requiredChecks: ['security-cost', 'regional-dr'],\n requirements: [\n workspace,\n auth,\n warehouse,\n requirement(\n 'ip-access-list',\n 'Enabled workspace IP access list',\n 'DBX_TEST_IP_ACCESS_LIST_ID',\n ),\n requirement('cluster-policy', 'Compute policy ID', 'DBX_TEST_CLUSTER_POLICY_ID'),\n requirement('cost-assertion', 'Boolean SQL cost guardrail', 'DBX_TEST_COST_ASSERTION_SQL'),\n requirement('dr-workspace', 'Secondary workspace host', 'DBX_TEST_DR_HOST'),\n requirement('dr-warehouse', 'Running secondary-region warehouse', 'DBX_TEST_DR_WAREHOUSE_ID'),\n requirement('dr-assertion', 'Secondary-region workload SQL', 'DBX_TEST_DR_ASSERTION_SQL'),\n ],\n docsUrl: `${DOCS}#networking-security-cost-and-regional-dr`,\n certificationScopes: [\n `${AZURE_M2M_SCOPE}; TEST-NET block list, bounded compute policy, billing system-table guardrail, and West US 3 serverless DR warehouse`,\n ],\n });\n}\n\nexport function createAdvancedTargetPacks(): readonly TargetPack[] {\n return [\n createAdvancedStreamingTargetPack(),\n createAiBiGenieTargetPack(),\n createMlflowLifecycleTargetPack(),\n createFeatureEngineeringTargetPack(),\n createModelServingTargetPack(),\n createVectorRagAgentsTargetPack(),\n createFederationSharingTargetPack(),\n createSecurityCostDrTargetPack(),\n ];\n}\n","import { createAdvancedTargetPacks } from './advanced-target-packs.js';\nimport { createFoundationTargetPacks } from './foundation-packs.js';\nimport { createLakeflowJobsTargetPack } from './jobs-target-pack.js';\nimport type { TargetPack } from './target-packs.js';\n\nexport function createBuiltinTargetPacks(): readonly TargetPack[] {\n return [\n ...createFoundationTargetPacks(),\n createLakeflowJobsTargetPack(),\n ...createAdvancedTargetPacks(),\n ];\n}\n\nexport const builtinTargetPacks = createBuiltinTargetPacks();\n"]}