@databricks-solutions/lakebase-scm-utils 0.2.41 → 0.2.43

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.
Files changed (76) hide show
  1. package/dist/scripts/github/index.cjs +3 -1
  2. package/dist/scripts/github/index.js +3 -1
  3. package/dist/scripts/github/pr.cli.cjs +3 -1
  4. package/dist/scripts/github/pr.cli.js +3 -1
  5. package/dist/scripts/index.cjs +84 -21
  6. package/dist/scripts/index.d.cts +1 -1
  7. package/dist/scripts/index.d.ts +1 -1
  8. package/dist/scripts/index.js +76 -15
  9. package/dist/scripts/lakebase/branch.cli.cjs +3 -1
  10. package/dist/scripts/lakebase/branch.cli.js +3 -1
  11. package/dist/scripts/lakebase/ci-app-endpoint.cli.cjs +3 -1
  12. package/dist/scripts/lakebase/ci-app-endpoint.cli.js +3 -1
  13. package/dist/scripts/lakebase/ci-resolve-branch.cli.cjs +5 -3
  14. package/dist/scripts/lakebase/ci-resolve-branch.cli.js +5 -3
  15. package/dist/scripts/lakebase/collapse-heads.cli.cjs +5 -3
  16. package/dist/scripts/lakebase/collapse-heads.cli.js +5 -3
  17. package/dist/scripts/lakebase/cut-backup.cli.cjs +3 -1
  18. package/dist/scripts/lakebase/cut-backup.cli.js +3 -1
  19. package/dist/scripts/lakebase/cut-tier.cli.cjs +3 -1
  20. package/dist/scripts/lakebase/cut-tier.cli.js +3 -1
  21. package/dist/scripts/lakebase/detect-language.cli.cjs +5 -3
  22. package/dist/scripts/lakebase/detect-language.cli.js +5 -3
  23. package/dist/scripts/lakebase/doctor.cli.cjs +5 -3
  24. package/dist/scripts/lakebase/doctor.cli.js +5 -3
  25. package/dist/scripts/lakebase/get-connection.cli.cjs +5 -3
  26. package/dist/scripts/lakebase/get-connection.cli.js +5 -3
  27. package/dist/scripts/lakebase/index.cjs +84 -21
  28. package/dist/scripts/lakebase/index.d.cts +21 -1
  29. package/dist/scripts/lakebase/index.d.ts +21 -1
  30. package/dist/scripts/lakebase/index.js +76 -15
  31. package/dist/scripts/lakebase/infra-runner.cli.cjs +5 -3
  32. package/dist/scripts/lakebase/infra-runner.cli.js +5 -3
  33. package/dist/scripts/lakebase/new-migration.cli.cjs +5 -3
  34. package/dist/scripts/lakebase/new-migration.cli.js +5 -3
  35. package/dist/scripts/lakebase/schema-diff.cli.cjs +5 -3
  36. package/dist/scripts/lakebase/schema-diff.cli.js +5 -3
  37. package/dist/scripts/lakebase/schema-migrate.cli.cjs +5 -3
  38. package/dist/scripts/lakebase/schema-migrate.cli.js +5 -3
  39. package/dist/scripts/lakebase/scm-abandon-feature.cli.cjs +37 -1
  40. package/dist/scripts/lakebase/scm-abandon-feature.cli.js +37 -1
  41. package/dist/scripts/lakebase/scm-adopt-state.cli.cjs +37 -1
  42. package/dist/scripts/lakebase/scm-adopt-state.cli.js +37 -1
  43. package/dist/scripts/lakebase/scm-claim-feature.cli.cjs +45 -9
  44. package/dist/scripts/lakebase/scm-claim-feature.cli.js +39 -3
  45. package/dist/scripts/lakebase/scm-cleanup.cli.cjs +3 -1
  46. package/dist/scripts/lakebase/scm-cleanup.cli.js +3 -1
  47. package/dist/scripts/lakebase/scm-doctor.cli.cjs +56 -29
  48. package/dist/scripts/lakebase/scm-doctor.cli.js +50 -23
  49. package/dist/scripts/lakebase/scm-feature-branch.cli.cjs +1 -0
  50. package/dist/scripts/lakebase/scm-feature-branch.cli.js +1 -0
  51. package/dist/scripts/lakebase/scm-merge.cli.cjs +61 -9
  52. package/dist/scripts/lakebase/scm-merge.cli.js +55 -3
  53. package/dist/scripts/lakebase/scm-prepare-pr.cli.cjs +34 -0
  54. package/dist/scripts/lakebase/scm-prepare-pr.cli.js +34 -0
  55. package/dist/scripts/lakebase/scm-reconcile-tier.cli.cjs +6 -3
  56. package/dist/scripts/lakebase/scm-reconcile-tier.cli.js +6 -3
  57. package/dist/scripts/lakebase/scm-recover-orphans.cli.cjs +37 -1
  58. package/dist/scripts/lakebase/scm-recover-orphans.cli.js +37 -1
  59. package/dist/scripts/lakebase/scm-state.cli.cjs +5 -4
  60. package/dist/scripts/lakebase/scm-state.cli.js +4 -3
  61. package/dist/scripts/lakebase/scm-wait-ci.cli.cjs +34 -0
  62. package/dist/scripts/lakebase/scm-wait-ci.cli.js +34 -0
  63. package/dist/scripts/util/index.cjs +5 -3
  64. package/dist/scripts/util/index.js +5 -3
  65. package/package.json +1 -1
  66. package/scripts/lakebase/databricks-cli.ts +7 -1
  67. package/scripts/lakebase/enable-e2e.ts +19 -3
  68. package/scripts/lakebase/scm-doctor.ts +1 -12
  69. package/scripts/lakebase/scm-merge.ts +36 -0
  70. package/scripts/lakebase/scm-workflow-state.ts +49 -0
  71. package/templates/project/common/.github/workflows/merge.yml +17 -6
  72. package/templates/project/common/.github/workflows/pr.yml +17 -6
  73. package/templates/project/common/.gitignore.base +8 -0
  74. package/templates/project/common/scripts/run-tests.sh +18 -1
  75. package/templates/project/python/tests/__pycache__/conftest.cpython-314.pyc +0 -0
  76. package/templates/project/python/tests/conftest.py +10 -3
@@ -77699,7 +77699,9 @@ function resolveProfile(opts) {
77699
77699
  function buildInvocation(args, opts) {
77700
77700
  const base = opts.env ?? process.env;
77701
77701
  const trimmedHost = effectiveHost(opts)?.replace(/\/+$/, "");
77702
- const env = trimmedHost ? { ...base, DATABRICKS_HOST: trimmedHost } : base;
77702
+ const env = { ...base };
77703
+ if (trimmedHost) env.DATABRICKS_HOST = trimmedHost;
77704
+ delete env.DATABRICKS_WORKSPACE_ID;
77703
77705
  const profile = resolveProfile(opts);
77704
77706
  const argv = profile && !opts.noProfile && !args.includes("--profile") ? [...args, "--profile", profile] : args;
77705
77707
  return { argv, env, profile };
@@ -79609,8 +79611,8 @@ var PKG_NAME = "@databricks-solutions/lakebase-scm-utils";
79609
79611
  var cached;
79610
79612
  function substrateSelfVersion() {
79611
79613
  if (cached !== void 0) return cached;
79612
- if ("0.2.41".length > 0) {
79613
- cached = "0.2.41";
79614
+ if ("0.2.43".length > 0) {
79615
+ cached = "0.2.43";
79614
79616
  return cached;
79615
79617
  }
79616
79618
  cached = "unknown";
@@ -178,7 +178,9 @@ function resolveProfile(opts) {
178
178
  function buildInvocation(args, opts) {
179
179
  const base = opts.env ?? process.env;
180
180
  const trimmedHost = effectiveHost(opts)?.replace(/\/+$/, "");
181
- const env = trimmedHost ? { ...base, DATABRICKS_HOST: trimmedHost } : base;
181
+ const env = { ...base };
182
+ if (trimmedHost) env.DATABRICKS_HOST = trimmedHost;
183
+ delete env.DATABRICKS_WORKSPACE_ID;
182
184
  const profile = resolveProfile(opts);
183
185
  const argv = profile && !opts.noProfile && !args.includes("--profile") ? [...args, "--profile", profile] : args;
184
186
  return { argv, env, profile };
@@ -701,8 +703,8 @@ var PKG_NAME = "@databricks-solutions/lakebase-scm-utils";
701
703
  var cached;
702
704
  function substrateSelfVersion() {
703
705
  if (cached !== void 0) return cached;
704
- if ("0.2.41".length > 0) {
705
- cached = "0.2.41";
706
+ if ("0.2.43".length > 0) {
707
+ cached = "0.2.43";
706
708
  return cached;
707
709
  }
708
710
  cached = "unknown";
@@ -77700,7 +77700,9 @@ function resolveProfile(opts) {
77700
77700
  function buildInvocation(args, opts) {
77701
77701
  const base = opts.env ?? process.env;
77702
77702
  const trimmedHost = effectiveHost(opts)?.replace(/\/+$/, "");
77703
- const env = trimmedHost ? { ...base, DATABRICKS_HOST: trimmedHost } : base;
77703
+ const env = { ...base };
77704
+ if (trimmedHost) env.DATABRICKS_HOST = trimmedHost;
77705
+ delete env.DATABRICKS_WORKSPACE_ID;
77704
77706
  const profile = resolveProfile(opts);
77705
77707
  const argv = profile && !opts.noProfile && !args.includes("--profile") ? [...args, "--profile", profile] : args;
77706
77708
  return { argv, env, profile };
@@ -79270,8 +79272,8 @@ var PKG_NAME = "@databricks-solutions/lakebase-scm-utils";
79270
79272
  var cached;
79271
79273
  function substrateSelfVersion() {
79272
79274
  if (cached !== void 0) return cached;
79273
- if ("0.2.41".length > 0) {
79274
- cached = "0.2.41";
79275
+ if ("0.2.43".length > 0) {
79276
+ cached = "0.2.43";
79275
79277
  return cached;
79276
79278
  }
79277
79279
  cached = "unknown";
@@ -179,7 +179,9 @@ function resolveProfile(opts) {
179
179
  function buildInvocation(args, opts) {
180
180
  const base = opts.env ?? process.env;
181
181
  const trimmedHost = effectiveHost(opts)?.replace(/\/+$/, "");
182
- const env = trimmedHost ? { ...base, DATABRICKS_HOST: trimmedHost } : base;
182
+ const env = { ...base };
183
+ if (trimmedHost) env.DATABRICKS_HOST = trimmedHost;
184
+ delete env.DATABRICKS_WORKSPACE_ID;
183
185
  const profile = resolveProfile(opts);
184
186
  const argv = profile && !opts.noProfile && !args.includes("--profile") ? [...args, "--profile", profile] : args;
185
187
  return { argv, env, profile };
@@ -373,8 +375,8 @@ var PKG_NAME = "@databricks-solutions/lakebase-scm-utils";
373
375
  var cached;
374
376
  function substrateSelfVersion() {
375
377
  if (cached !== void 0) return cached;
376
- if ("0.2.41".length > 0) {
377
- cached = "0.2.41";
378
+ if ("0.2.43".length > 0) {
379
+ cached = "0.2.43";
378
380
  return cached;
379
381
  }
380
382
  cached = "unknown";
@@ -198,7 +198,9 @@ function resolveProfile(opts) {
198
198
  function buildInvocation(args, opts) {
199
199
  const base = opts.env ?? process.env;
200
200
  const trimmedHost = effectiveHost(opts)?.replace(/\/+$/, "");
201
- const env = trimmedHost ? { ...base, DATABRICKS_HOST: trimmedHost } : base;
201
+ const env = { ...base };
202
+ if (trimmedHost) env.DATABRICKS_HOST = trimmedHost;
203
+ delete env.DATABRICKS_WORKSPACE_ID;
202
204
  const profile = resolveProfile(opts);
203
205
  const argv = profile && !opts.noProfile && !args.includes("--profile") ? [...args, "--profile", profile] : args;
204
206
  return { argv, env, profile };
@@ -175,7 +175,9 @@ function resolveProfile(opts) {
175
175
  function buildInvocation(args, opts) {
176
176
  const base = opts.env ?? process.env;
177
177
  const trimmedHost = effectiveHost(opts)?.replace(/\/+$/, "");
178
- const env = trimmedHost ? { ...base, DATABRICKS_HOST: trimmedHost } : base;
178
+ const env = { ...base };
179
+ if (trimmedHost) env.DATABRICKS_HOST = trimmedHost;
180
+ delete env.DATABRICKS_WORKSPACE_ID;
179
181
  const profile = resolveProfile(opts);
180
182
  const argv = profile && !opts.noProfile && !args.includes("--profile") ? [...args, "--profile", profile] : args;
181
183
  return { argv, env, profile };
@@ -242,7 +242,9 @@ function resolveProfile(opts) {
242
242
  function buildInvocation(args, opts) {
243
243
  const base = opts.env ?? process.env;
244
244
  const trimmedHost = effectiveHost(opts)?.replace(/\/+$/, "");
245
- const env = trimmedHost ? { ...base, DATABRICKS_HOST: trimmedHost } : base;
245
+ const env = { ...base };
246
+ if (trimmedHost) env.DATABRICKS_HOST = trimmedHost;
247
+ delete env.DATABRICKS_WORKSPACE_ID;
246
248
  const profile = resolveProfile(opts);
247
249
  const argv = profile && !opts.noProfile && !args.includes("--profile") ? [...args, "--profile", profile] : args;
248
250
  return { argv, env, profile };
@@ -202,7 +202,9 @@ function resolveProfile(opts) {
202
202
  function buildInvocation(args, opts) {
203
203
  const base = opts.env ?? process.env;
204
204
  const trimmedHost = effectiveHost(opts)?.replace(/\/+$/, "");
205
- const env = trimmedHost ? { ...base, DATABRICKS_HOST: trimmedHost } : base;
205
+ const env = { ...base };
206
+ if (trimmedHost) env.DATABRICKS_HOST = trimmedHost;
207
+ delete env.DATABRICKS_WORKSPACE_ID;
206
208
  const profile = resolveProfile(opts);
207
209
  const argv = profile && !opts.noProfile && !args.includes("--profile") ? [...args, "--profile", profile] : args;
208
210
  return { argv, env, profile };
@@ -77700,7 +77700,9 @@ function resolveProfile(opts) {
77700
77700
  function buildInvocation(args, opts) {
77701
77701
  const base = opts.env ?? process.env;
77702
77702
  const trimmedHost = effectiveHost(opts)?.replace(/\/+$/, "");
77703
- const env = trimmedHost ? { ...base, DATABRICKS_HOST: trimmedHost } : base;
77703
+ const env = { ...base };
77704
+ if (trimmedHost) env.DATABRICKS_HOST = trimmedHost;
77705
+ delete env.DATABRICKS_WORKSPACE_ID;
77704
77706
  const profile = resolveProfile(opts);
77705
77707
  const argv = profile && !opts.noProfile && !args.includes("--profile") ? [...args, "--profile", profile] : args;
77706
77708
  return { argv, env, profile };
@@ -79270,8 +79272,8 @@ var PKG_NAME = "@databricks-solutions/lakebase-scm-utils";
79270
79272
  var cached;
79271
79273
  function substrateSelfVersion() {
79272
79274
  if (cached !== void 0) return cached;
79273
- if ("0.2.41".length > 0) {
79274
- cached = "0.2.41";
79275
+ if ("0.2.43".length > 0) {
79276
+ cached = "0.2.43";
79275
79277
  return cached;
79276
79278
  }
79277
79279
  cached = "unknown";
@@ -179,7 +179,9 @@ function resolveProfile(opts) {
179
179
  function buildInvocation(args, opts) {
180
180
  const base = opts.env ?? process.env;
181
181
  const trimmedHost = effectiveHost(opts)?.replace(/\/+$/, "");
182
- const env = trimmedHost ? { ...base, DATABRICKS_HOST: trimmedHost } : base;
182
+ const env = { ...base };
183
+ if (trimmedHost) env.DATABRICKS_HOST = trimmedHost;
184
+ delete env.DATABRICKS_WORKSPACE_ID;
183
185
  const profile = resolveProfile(opts);
184
186
  const argv = profile && !opts.noProfile && !args.includes("--profile") ? [...args, "--profile", profile] : args;
185
187
  return { argv, env, profile };
@@ -373,8 +375,8 @@ var PKG_NAME = "@databricks-solutions/lakebase-scm-utils";
373
375
  var cached;
374
376
  function substrateSelfVersion() {
375
377
  if (cached !== void 0) return cached;
376
- if ("0.2.41".length > 0) {
377
- cached = "0.2.41";
378
+ if ("0.2.43".length > 0) {
379
+ cached = "0.2.43";
378
380
  return cached;
379
381
  }
380
382
  cached = "unknown";
@@ -77746,7 +77746,9 @@ function resolveProfile(opts) {
77746
77746
  function buildInvocation(args, opts) {
77747
77747
  const base = opts.env ?? process.env;
77748
77748
  const trimmedHost = effectiveHost(opts)?.replace(/\/+$/, "");
77749
- const env = trimmedHost ? { ...base, DATABRICKS_HOST: trimmedHost } : base;
77749
+ const env = { ...base };
77750
+ if (trimmedHost) env.DATABRICKS_HOST = trimmedHost;
77751
+ delete env.DATABRICKS_WORKSPACE_ID;
77750
77752
  const profile = resolveProfile(opts);
77751
77753
  const argv = profile && !opts.noProfile && !args.includes("--profile") ? [...args, "--profile", profile] : args;
77752
77754
  return { argv, env, profile };
@@ -79362,8 +79364,8 @@ var PKG_NAME = "@databricks-solutions/lakebase-scm-utils";
79362
79364
  var cached;
79363
79365
  function substrateSelfVersion() {
79364
79366
  if (cached !== void 0) return cached;
79365
- if ("0.2.41".length > 0) {
79366
- cached = "0.2.41";
79367
+ if ("0.2.43".length > 0) {
79368
+ cached = "0.2.43";
79367
79369
  return cached;
79368
79370
  }
79369
79371
  cached = "unknown";
@@ -230,7 +230,9 @@ function resolveProfile(opts) {
230
230
  function buildInvocation(args, opts) {
231
231
  const base = opts.env ?? process.env;
232
232
  const trimmedHost = effectiveHost(opts)?.replace(/\/+$/, "");
233
- const env = trimmedHost ? { ...base, DATABRICKS_HOST: trimmedHost } : base;
233
+ const env = { ...base };
234
+ if (trimmedHost) env.DATABRICKS_HOST = trimmedHost;
235
+ delete env.DATABRICKS_WORKSPACE_ID;
234
236
  const profile = resolveProfile(opts);
235
237
  const argv = profile && !opts.noProfile && !args.includes("--profile") ? [...args, "--profile", profile] : args;
236
238
  return { argv, env, profile };
@@ -464,8 +466,8 @@ var PKG_NAME = "@databricks-solutions/lakebase-scm-utils";
464
466
  var cached;
465
467
  function substrateSelfVersion() {
466
468
  if (cached !== void 0) return cached;
467
- if ("0.2.41".length > 0) {
468
- cached = "0.2.41";
469
+ if ("0.2.43".length > 0) {
470
+ cached = "0.2.43";
469
471
  return cached;
470
472
  }
471
473
  cached = "unknown";
@@ -77695,7 +77695,9 @@ function resolveProfile(opts) {
77695
77695
  function buildInvocation(args, opts) {
77696
77696
  const base = opts.env ?? process.env;
77697
77697
  const trimmedHost = effectiveHost(opts)?.replace(/\/+$/, "");
77698
- const env = trimmedHost ? { ...base, DATABRICKS_HOST: trimmedHost } : base;
77698
+ const env = { ...base };
77699
+ if (trimmedHost) env.DATABRICKS_HOST = trimmedHost;
77700
+ delete env.DATABRICKS_WORKSPACE_ID;
77699
77701
  const profile = resolveProfile(opts);
77700
77702
  const argv = profile && !opts.noProfile && !args.includes("--profile") ? [...args, "--profile", profile] : args;
77701
77703
  return { argv, env, profile };
@@ -79265,8 +79267,8 @@ var PKG_NAME = "@databricks-solutions/lakebase-scm-utils";
79265
79267
  var cached;
79266
79268
  function substrateSelfVersion() {
79267
79269
  if (cached !== void 0) return cached;
79268
- if ("0.2.41".length > 0) {
79269
- cached = "0.2.41";
79270
+ if ("0.2.43".length > 0) {
79271
+ cached = "0.2.43";
79270
79272
  return cached;
79271
79273
  }
79272
79274
  cached = "unknown";
@@ -175,7 +175,9 @@ function resolveProfile(opts) {
175
175
  function buildInvocation(args, opts) {
176
176
  const base = opts.env ?? process.env;
177
177
  const trimmedHost = effectiveHost(opts)?.replace(/\/+$/, "");
178
- const env = trimmedHost ? { ...base, DATABRICKS_HOST: trimmedHost } : base;
178
+ const env = { ...base };
179
+ if (trimmedHost) env.DATABRICKS_HOST = trimmedHost;
180
+ delete env.DATABRICKS_WORKSPACE_ID;
179
181
  const profile = resolveProfile(opts);
180
182
  const argv = profile && !opts.noProfile && !args.includes("--profile") ? [...args, "--profile", profile] : args;
181
183
  return { argv, env, profile };
@@ -369,8 +371,8 @@ var PKG_NAME = "@databricks-solutions/lakebase-scm-utils";
369
371
  var cached;
370
372
  function substrateSelfVersion() {
371
373
  if (cached !== void 0) return cached;
372
- if ("0.2.41".length > 0) {
373
- cached = "0.2.41";
374
+ if ("0.2.43".length > 0) {
375
+ cached = "0.2.43";
374
376
  return cached;
375
377
  }
376
378
  cached = "unknown";
@@ -79062,6 +79062,7 @@ __export(lakebase_exports, {
79062
79062
  installPlaywright: () => installPlaywright,
79063
79063
  isAllSchemas: () => isAllSchemas,
79064
79064
  isForeignFeatureClaim: () => isForeignFeatureClaim,
79065
+ isGitTracked: () => isGitTracked,
79065
79066
  isLongRunningTierBranch: () => isLongRunningTierBranch,
79066
79067
  isLtsJavaVersion: () => isLtsJavaVersion,
79067
79068
  isPrereleaseBootVersion: () => isPrereleaseBootVersion,
@@ -79092,6 +79093,7 @@ __export(lakebase_exports, {
79092
79093
  readEnvVar: () => readEnvVar,
79093
79094
  readTargets: () => readTargets,
79094
79095
  readWorkflowState: () => readWorkflowState,
79096
+ reconcileTierToOrigin: () => reconcileTierToOrigin,
79095
79097
  recoverOrphans: () => recoverOrphans,
79096
79098
  release: () => release,
79097
79099
  removeRunner: () => removeRunner,
@@ -79450,7 +79452,9 @@ function resolveProfile(opts) {
79450
79452
  function buildInvocation(args, opts) {
79451
79453
  const base = opts.env ?? process.env;
79452
79454
  const trimmedHost = effectiveHost(opts)?.replace(/\/+$/, "");
79453
- const env = trimmedHost ? { ...base, DATABRICKS_HOST: trimmedHost } : base;
79455
+ const env = { ...base };
79456
+ if (trimmedHost) env.DATABRICKS_HOST = trimmedHost;
79457
+ delete env.DATABRICKS_WORKSPACE_ID;
79454
79458
  const profile = resolveProfile(opts);
79455
79459
  const argv = profile && !opts.noProfile && !args.includes("--profile") ? [...args, "--profile", profile] : args;
79456
79460
  return { argv, env, profile };
@@ -81566,8 +81570,8 @@ var PKG_NAME = "@databricks-solutions/lakebase-scm-utils";
81566
81570
  var cached;
81567
81571
  function substrateSelfVersion() {
81568
81572
  if (cached !== void 0) return cached;
81569
- if ("0.2.41".length > 0) {
81570
- cached = "0.2.41";
81573
+ if ("0.2.43".length > 0) {
81574
+ cached = "0.2.43";
81571
81575
  return cached;
81572
81576
  }
81573
81577
  cached = "unknown";
@@ -91350,12 +91354,27 @@ function runTestsE2eBlock() {
91350
91354
  ' export VITE_PROXY_TARGET="http://127.0.0.1:${E2E_BACKEND_PORT}"',
91351
91355
  ' echo "Local E2E free-port: backend :$E2E_BACKEND_PORT / client :$E2E_CLIENT_PORT"',
91352
91356
  "fi",
91357
+ // Stale-server hygiene (issue #197): CI=1 on the Playwright invocations below
91358
+ // forces EVERY config vintage's reuseExistingServer guard OFF (old `!CI` and
91359
+ // new `!!BASE_URL` alike), so the verify never reuses a stale server bound to
91360
+ // an unmigrated branch (the false-500 misdiagnosis). A lingering uvicorn/vite
91361
+ // on the conventional default ports still serves STALE schema to anything
91362
+ // that reaches it, so clear it (TERM, not KILL) before the boot - never when
91363
+ // the caller pre-set the ports (the deploy gate owns that server; BASE_URL).
91364
+ 'if [ -z "${BASE_URL:-}" ] && command -v lsof >/dev/null 2>&1; then',
91365
+ ' for p in "${E2E_BACKEND_PORT:-8000}" "${E2E_CLIENT_PORT:-5173}"; do',
91366
+ ' if lsof -iTCP:"$p" -sTCP:LISTEN -n -P >/dev/null 2>&1; then',
91367
+ ' echo "Local E2E: clearing a stale listener on :$p before the webServer boot"',
91368
+ ' lsof -ti tcp:"$p" 2>/dev/null | xargs kill 2>/dev/null || true',
91369
+ " fi",
91370
+ " done",
91371
+ "fi",
91353
91372
  'if [ -f "$REPO_ROOT/playwright.config.ts" ] || [ -f "$REPO_ROOT/playwright.config.js" ]; then',
91354
91373
  ' echo "Running Playwright E2E tests..."',
91355
91374
  ' if [ -f "$REPO_ROOT/package.json" ] && command -v npm >/dev/null 2>&1; then',
91356
- ' (cd "$REPO_ROOT" && npm run test:e2e)',
91375
+ ' (cd "$REPO_ROOT" && CI=1 npm run test:e2e)',
91357
91376
  " else",
91358
- ' (cd "$REPO_ROOT" && npx --yes playwright test)',
91377
+ ' (cd "$REPO_ROOT" && CI=1 npx --yes playwright test)',
91359
91378
  " fi",
91360
91379
  // Python E2E: pytest-playwright + the shipped tests/e2e/conftest.py
91361
91380
  // (live_server). Gated on the conftest + pyproject so it only fires for a
@@ -91394,7 +91413,8 @@ function runTestsE2eBlock() {
91394
91413
  'if [ -f "$REPO_ROOT/client/playwright.config.ts" ] || [ -f "$REPO_ROOT/client/playwright.config.js" ] || [ -f "$REPO_ROOT/client/playwright.config.mjs" ]; then',
91395
91414
  ' echo "Running client Playwright E2E tests..."',
91396
91415
  ' (cd "$REPO_ROOT/client" && npx --yes playwright install chromium)',
91397
- ' (cd "$REPO_ROOT/client" && npx --yes playwright test --pass-with-no-tests)',
91416
+ // CI=1: no server reuse on any config vintage (see the stale-server note above).
91417
+ ' (cd "$REPO_ROOT/client" && CI=1 npx --yes playwright test --pass-with-no-tests)',
91398
91418
  "fi",
91399
91419
  ""
91400
91420
  ].join("\n");
@@ -91999,6 +92019,39 @@ async function syncCiSecrets(args) {
91999
92019
  init_cjs_shims();
92000
92020
  var fs18 = __toESM(require("fs"), 1);
92001
92021
  var path15 = __toESM(require("path"), 1);
92022
+ var import_node_child_process9 = require("child_process");
92023
+ function isGitTracked(projectDir, rel) {
92024
+ try {
92025
+ (0, import_node_child_process9.execFileSync)("git", ["ls-files", "--error-unmatch", "--", rel], { cwd: projectDir, stdio: "ignore" });
92026
+ return true;
92027
+ } catch {
92028
+ return false;
92029
+ }
92030
+ }
92031
+ function ensureWorkflowStateUntracked(projectDir) {
92032
+ const rel = ".lakebase/workflow-state.json";
92033
+ try {
92034
+ if (isGitTracked(projectDir, rel)) {
92035
+ (0, import_node_child_process9.execFileSync)("git", ["rm", "--cached", "--quiet", "--ignore-unmatch", "--", rel], { cwd: projectDir, stdio: "ignore" });
92036
+ }
92037
+ } catch {
92038
+ }
92039
+ try {
92040
+ const gitignore = path15.join(projectDir, ".gitignore");
92041
+ const existing = fs18.existsSync(gitignore) ? fs18.readFileSync(gitignore, "utf8") : "";
92042
+ if (!existing.split("\n").some((l) => l.trim() === rel)) {
92043
+ const sep4 = existing === "" || existing.endsWith("\n") ? "" : "\n";
92044
+ fs18.appendFileSync(
92045
+ gitignore,
92046
+ `${sep4}# Runtime SCM claim state (per working tree): a branch checkout must never restore
92047
+ # a stale committed claim over the live one (issue #203 / Finding 28).
92048
+ ${rel}
92049
+ `
92050
+ );
92051
+ }
92052
+ } catch {
92053
+ }
92054
+ }
92002
92055
  var SCM_STATES = [
92003
92056
  "scaffold-complete",
92004
92057
  "feature-claimed",
@@ -92051,6 +92104,7 @@ function writeWorkflowState(projectDir, state) {
92051
92104
  throw new Error(`Refusing to write invalid SCM state:
92052
92105
  ${summary}`);
92053
92106
  }
92107
+ ensureWorkflowStateUntracked(projectDir);
92054
92108
  const dir = path15.join(projectDir, ".lakebase");
92055
92109
  fs18.mkdirSync(dir, { recursive: true });
92056
92110
  const target = stateFilePath(projectDir);
@@ -93016,7 +93070,7 @@ var path20 = __toESM(require("path"), 1);
93016
93070
 
93017
93071
  // scripts/lakebase/schema-migrate-runners/alembic.ts
93018
93072
  init_cjs_shims();
93019
- var import_node_child_process9 = require("child_process");
93073
+ var import_node_child_process10 = require("child_process");
93020
93074
  var fs22 = __toESM(require("fs"), 1);
93021
93075
  var path19 = __toESM(require("path"), 1);
93022
93076
  function resolveAlembicBin(projectDir) {
@@ -93038,7 +93092,7 @@ function spawnAlembic(projectDir, args, dsn) {
93038
93092
  const env = { ...process.env };
93039
93093
  env.PYTHONPATH = [projectDir, process.env.PYTHONPATH].filter(Boolean).join(path19.delimiter);
93040
93094
  if (dsn) env.DATABASE_URL = dsn;
93041
- const child = (0, import_node_child_process9.spawn)(bin, args, {
93095
+ const child = (0, import_node_child_process10.spawn)(bin, args, {
93042
93096
  cwd: projectDir,
93043
93097
  env,
93044
93098
  stdio: ["ignore", "pipe", "pipe"]
@@ -93400,7 +93454,7 @@ var path22 = __toESM(require("path"), 1);
93400
93454
 
93401
93455
  // scripts/lakebase/schema-migrate-runners/flyway.ts
93402
93456
  init_cjs_shims();
93403
- var import_node_child_process10 = require("child_process");
93457
+ var import_node_child_process11 = require("child_process");
93404
93458
  var path21 = __toESM(require("path"), 1);
93405
93459
  function dsnToFlywayEnv(dsn) {
93406
93460
  const u = new URL(dsn);
@@ -93416,7 +93470,7 @@ function migrationsLocation(projectDir) {
93416
93470
  function runFlyway(ctx, args) {
93417
93471
  const { url, user, password } = dsnToFlywayEnv(ctx.dsn);
93418
93472
  return new Promise((resolve2, reject) => {
93419
- const child = (0, import_node_child_process10.spawn)(
93473
+ const child = (0, import_node_child_process11.spawn)(
93420
93474
  "flyway",
93421
93475
  ["-outputType=json", `-locations=${migrationsLocation(ctx.projectDir)}`, ...args],
93422
93476
  {
@@ -93653,7 +93707,7 @@ var path24 = __toESM(require("path"), 1);
93653
93707
 
93654
93708
  // scripts/lakebase/schema-migrate-runners/knex.ts
93655
93709
  init_cjs_shims();
93656
- var import_node_child_process11 = require("child_process");
93710
+ var import_node_child_process12 = require("child_process");
93657
93711
  var fs25 = __toESM(require("fs"), 1);
93658
93712
  var path23 = __toESM(require("path"), 1);
93659
93713
  var KNEXFILE_VARIANTS = ["knexfile.js", "knexfile.ts", "knexfile.mjs", "knexfile.cjs"];
@@ -93675,7 +93729,7 @@ function spawnKnex(projectDir, args, dsn) {
93675
93729
  );
93676
93730
  return;
93677
93731
  }
93678
- const child = (0, import_node_child_process11.spawn)("npx", ["--no-install", "knex", "--knexfile", knexfile, ...args], {
93732
+ const child = (0, import_node_child_process12.spawn)("npx", ["--no-install", "knex", "--knexfile", knexfile, ...args], {
93679
93733
  cwd: projectDir,
93680
93734
  env: dsn ? { ...process.env, DATABASE_URL: dsn } : { ...process.env },
93681
93735
  stdio: ["ignore", "pipe", "pipe"]
@@ -94836,6 +94890,20 @@ function pickRunUrl(pr) {
94836
94890
 
94837
94891
  // scripts/lakebase/scm-merge.ts
94838
94892
  init_cjs_shims();
94893
+ async function reconcileTierToOrigin(args) {
94894
+ const { cwd, tier } = args;
94895
+ try {
94896
+ const head = await getCurrentBranch({ cwd });
94897
+ if (head === tier) {
94898
+ await exec2(`git pull --ff-only`, { cwd, timeout: 3e4 });
94899
+ } else {
94900
+ await exec2(`git fetch origin ${shellEscape2(`${tier}:${tier}`)}`, { cwd, timeout: 3e4 });
94901
+ }
94902
+ return null;
94903
+ } catch (err) {
94904
+ return `local reconcile of ${tier} to origin/${tier} failed: ${err instanceof Error ? err.message : String(err)}. Reconcile it by hand (git checkout ${tier} && git pull --ff-only).`;
94905
+ }
94906
+ }
94839
94907
  var ScmMergeError = class extends Error {
94840
94908
  constructor(message, code) {
94841
94909
  super(message);
@@ -94961,6 +95029,8 @@ async function mergeFeature(args) {
94961
95029
  }
94962
95030
  } else {
94963
95031
  headAfter = head || current.branch;
95032
+ const reconcileWarning = await reconcileTierToOrigin({ cwd: args.projectDir, tier: switchTo });
95033
+ if (reconcileWarning) warnings.push(reconcileWarning);
94964
95034
  }
94965
95035
  if (headAfter !== current.branch) {
94966
95036
  try {
@@ -95307,7 +95377,6 @@ function parentForTopology(t2, defaultLeaf) {
95307
95377
  // scripts/lakebase/scm-doctor.ts
95308
95378
  init_cjs_shims();
95309
95379
  var fs30 = __toESM(require("fs"), 1);
95310
- var import_node_child_process12 = require("child_process");
95311
95380
  var path28 = __toESM(require("path"), 1);
95312
95381
  var FEATURE_PREFIX = "feature/";
95313
95382
  var TIER_LEAFS2 = DEFAULT_PROTECTED_TIER_NAMES;
@@ -95325,14 +95394,6 @@ function readEnv(projectDir) {
95325
95394
  function leafOf2(b) {
95326
95395
  return b.name.split("/").pop() ?? b.name;
95327
95396
  }
95328
- function isGitTracked(projectDir, rel) {
95329
- try {
95330
- (0, import_node_child_process12.execFileSync)("git", ["ls-files", "--error-unmatch", "--", rel], { cwd: projectDir, stdio: "ignore" });
95331
- return true;
95332
- } catch {
95333
- return false;
95334
- }
95335
- }
95336
95397
  function worstOf(a, b) {
95337
95398
  const order = ["ok", "warn", "fail"];
95338
95399
  return order[Math.max(order.indexOf(a), order.indexOf(b))];
@@ -96794,6 +96855,7 @@ function isUcMissingError(msg) {
96794
96855
  installPlaywright,
96795
96856
  isAllSchemas,
96796
96857
  isForeignFeatureClaim,
96858
+ isGitTracked,
96797
96859
  isLongRunningTierBranch,
96798
96860
  isLtsJavaVersion,
96799
96861
  isPrereleaseBootVersion,
@@ -96824,6 +96886,7 @@ function isUcMissingError(msg) {
96824
96886
  readEnvVar,
96825
96887
  readTargets,
96826
96888
  readWorkflowState,
96889
+ reconcileTierToOrigin,
96827
96890
  recoverOrphans,
96828
96891
  release,
96829
96892
  removeRunner,
@@ -2806,6 +2806,10 @@ declare function findHistoryRetentionDuration(parsed: Record<string, unknown>):
2806
2806
  */
2807
2807
  declare function getProjectRetentionDuration(args: LakebaseProjectArgs): Promise<string | undefined>;
2808
2808
 
2809
+ /** True iff `rel` (repo-relative) is git-tracked in projectDir. Best-effort: no
2810
+ * git / not a repo -> false. Shared home (scm-doctor's Finding-28 check reads
2811
+ * the same predicate). */
2812
+ declare function isGitTracked(projectDir: string, rel: string): boolean;
2809
2813
  /** All SCM states, in canonical progression order. */
2810
2814
  declare const SCM_STATES: readonly ["scaffold-complete", "feature-claimed", "pr-ready", "ci-green", "merged"];
2811
2815
  type ScmState = (typeof SCM_STATES)[number];
@@ -3161,6 +3165,22 @@ interface WaitCiResult {
3161
3165
  }
3162
3166
  declare function waitForCi(args: WaitCiArgs): Promise<WaitCiResult>;
3163
3167
 
3168
+ /**
3169
+ * Fast-forward the local tier ref to origin/<tier> after a remote merge, WITHOUT
3170
+ * needing a checkout. A promote interrupted after the remote merge (e.g. a
3171
+ * downstream migrate failure) otherwise leaves the local tier BEHIND, so the
3172
+ * next sprint plans on stale code and the next push rejects non-fast-forward.
3173
+ * Mechanism by head position: when HEAD IS the tier, `git pull --ff-only` syncs
3174
+ * ref + working tree; otherwise `git fetch origin <tier>:<tier>` fast-forwards
3175
+ * the local ref in place (git refuses fetch-into-current-branch, hence the
3176
+ * split). Returns null on success; a warning string when the sync fails (e.g.
3177
+ * not a fast-forward because the local tier has its own commits), never throws.
3178
+ */
3179
+ declare function reconcileTierToOrigin(args: {
3180
+ cwd: string;
3181
+ tier: string;
3182
+ }): Promise<string | null>;
3183
+
3164
3184
  declare class ScmMergeError extends Error {
3165
3185
  readonly code: "no-state-file" | "bad-precondition" | "no-github-remote" | "no-pr-url" | "bad-pr-url" | "merge-failed" | "migrate-failed" | "migrate-timeout" | "migrate-auth";
3166
3186
  constructor(message: string, code: "no-state-file" | "bad-precondition" | "no-github-remote" | "no-pr-url" | "bad-pr-url" | "merge-failed" | "migrate-failed" | "migrate-timeout" | "migrate-auth");
@@ -4058,4 +4078,4 @@ declare function applySchemaMigrations(args: ApplySchemaMigrationsArgs): Promise
4058
4078
  declare function rollbackSchemaMigration(args: RollbackSchemaMigrationArgs): Promise<RollbackSchemaMigrationResult>;
4059
4079
  declare function schemaMigrationStatus(args: SchemaMigrationStatusArgs): Promise<SchemaMigrationStatusResult>;
4060
4080
 
4061
- export { type AbandonFeatureArgs, type AbandonFeatureResult, type AddE2eToRunTestsScriptArgs, type AddE2eToRunTestsScriptResult, type AddInfraToPackageJsonArgs, type AddInfraToPackageJsonResult, type AddInfraToRunTestsScriptArgs, type AddInfraToRunTestsScriptResult, type AddPlaywrightToPackageJsonArgs, type AddPlaywrightToPackageJsonResult, type AddPythonE2eDepsArgs, type AddPythonE2eDepsResult, type AdoptLakebaseProjectArgs, type AdoptLakebaseProjectResult, type AdoptStateArgs, type AdoptStateResult, type AppServicePrincipal, type AppliedSchemaMigration, type ApplySchemaMigrationsArgs, type ApplySchemaMigrationsResult, type BranchLookupOpts, type BranchMetadata, CONVENTION_TIER_DEFAULTS, type CatalogExistsArgs, type CheckoutMode, type CheckoutPairedArgs, type CheckoutPairedResult, type ClaimFeatureBranchArgs, type ClaimFeatureBranchResult, type ClaimedOrphan, type ClientFramework, type CommandDriftReport, type CommandFileEntry, type CommandFileStatus, type ConnectionArgs, type ConsortSetupHooks, type CreateBranchArgs, type CreateConventionBranchArgs, type CreateConventionPairedBranchArgs, type CreateLongRunningBranchArgs, type CreateLongRunningBranchResult, type CreatePairedBranchArgs, type CreatePairedBranchResult, type CreateProjectArgs, type CreateProjectResult, type CutBackupArgs, type CutBackupResult, DEFAULT_PROTECTED_TIER_NAMES, type DatabricksProfile, type DeleteAppEndpointArgs, type DeleteAppEndpointResult, type DeleteBranchArgs, type DeletePairedBranchArgs, type DeletePairedBranchResult, type DeployClaudeCommandsOptions, type DeployClaudeCommandsResult, type DeployEnvExampleArgs, type DeployLanguageProjectArgs, type DeploySpringStarterArgs, type DeployTarget, type DeployTargetsConfig, type DetectCommandDriftArgs, type DetectScaffoldedDriftArgs, type DetectWorkflowDriftArgs, type DoctorArgs$1 as DoctorArgs, type DoctorFinding, type DoctorReport$1 as DoctorReport, type DoctorSeverity, type DsnArgs, type DsnResult, type EnableE2eForProjectArgs, type EnableE2eForProjectResult, type EnableInfraForProjectArgs, type EnableInfraForProjectResult, type EndpointInfo, type EnsureAppEndpointArgs, type EnsureAppEndpointResult, type EnsureEndpointArgs, type EnsureLakebaseSecretAuthArgs, type EnsureLakebaseSecretAuthResult, type EnsureProfilePinnedArgs, type EnsureProfilePinnedResult, type EnsureSchemaAndVolumeArgs, type EnsureSchemaAndVolumeResult, FIXABLE_FINDING_IDS, type FixFindingArgs, type FixFindingResult, type FixableFindingId, type GateInvariant, type GateStatus, type GenerateAppYamlOptions, type GenerateMavenProjectOptions, type GetAppEndpointArgs, type GetAppEndpointResult, type GetAppServicePrincipalArgs, type GetCiAppEndpointArgs, type GetCiAppEndpointResult, type GetConnectionArgs, type GetCredentialArgs, type GetEndpointArgs, type GetSchemaDiffArgs, type GrantLakebasePermissionArgs, type GrantLakebasePermissionResult, type GrantUcCatalogPermissionArgs, type GrantUcCatalogPermissionResult, type DoctorReport as HealthDoctorReport, type HookVerification, type InfraCheckResult, type InfraSuiteResult, type InitWorkflowStateArgs, type InitializrMetadata, InitializrNetworkError, InitializrParseError, type InstallPlaywrightArgs, type InstallPlaywrightOptions, type InstallPlaywrightResult, LakebaseBranchError, type LakebaseBranchInfo, LakebaseBranchTtlTooLongError, type LakebasePermissionLevel, type LakebaseProjectArgs, LakebaseProjectError, type LakebaseProjectInfo, type LakebaseProjectMetadata, type ListSchemaMigrationsArgs, MIGRATION_DEFAULTS, type MergeArgs, type MergePairedArgs, type MergePairedResult, type MergeResult, type MigrationDefaults, type MigrationLanguage, type MigrationLayout, type ModifiedSchemaObject, NODE_E2E_TEMPLATE_FILES, type OrphanCandidate, PLAYWRIGHT_TEMPLATE_FILES, PLAYWRIGHT_TEST_VERSION_RANGE, PYTEST_BDD_VERSION_RANGE, PYTEST_PLAYWRIGHT_VERSION_RANGE, PYTHON_E2E_TEMPLATE_FILES, type PendingSchemaMigration, type PoolArgs, type PreflightResult, type PreparePrArgs, type PreparePrResult, type ProgressCallback, type ProjectLanguage, type PropagateCredentialsArgs, type PropagateCredentialsResult, ProtectedBranchCommitError, type QueryBranchSchemaArgs, type RecoverOrphansArgs, type RecoverOrphansResult, type ReleaseArgs, type ReleaseResult, type RemoveRunnerArgs, type ResolveDatabricksHostArgs, type ResolveMigrationLayoutArgs, type RollbackDeployArgs, type RollbackDeployResult, type RollbackOptions, type RollbackSchemaMigrationArgs, type RollbackSchemaMigrationResult, type RunDoctorDeps, type RunInfraSuiteArgs, type RunPlaywrightInstallArgs, type RunPlaywrightInstallResult, type RunnerInfo, type RunnerReportFn, type RunnerType, SCM_STATES, STATE_FILE_REL, type ScaffoldAllArgs, type ScaffoldOptions, type ScaffoldReportFn, type ScaffoldStaticAllArgs, type ScaffoldStaticAllResult, type ScaffoldedDriftReport, type SchemaColumn, type SchemaDiffResult, SchemaMigrationError, type SchemaMigrationFile, type SchemaMigrationLanguage, type SchemaMigrationStatusArgs, type SchemaMigrationStatusResult, type SchemaMigrationToolName, type SchemaObject, type SchemaQueryRow, ScmAbandonError, ScmAdoptError, ScmClaimError, ScmDoctorFixError, ScmMergeError, ScmPreparePrError, ScmRecoverError, type ScmState, ScmWaitCiError, type ScmWorkflowState, type SetupRunnerArgs, type SftddSetupHooks, SpringInitializrClient, type SpringJvmLanguage, type StaleBranchFinding, type SyncEnvArgs, type SyncEnvResult, type TableSchema, type TierTopology, type TryCreateCatalogArgs, type TryCreateCatalogResult, type UcCatalogPermission, type UpdateEnvConnectionArgs, type UpdateWorkflowsArgs, type UpdateWorkflowsResult, type UploadDirectoryArgs, type UploadDirectoryResult, type ValidateAppOptions, type ValidateAppResult, type ValidationError, type ValidationResult, type WaitCiArgs, type WaitCiResult, type WaitForBranchAuthReadyArgs, type WaitForBranchReadyArgs, type WorkflowDriftReport, type WorkflowFileStatus, type WorkflowFileUpdate, type WorkflowStatus, type WorkflowUpdateOutcome, type WorkflowVerification, type WriteEnvFileArgs, type WritePlaywrightTemplatesArgs, type WritePlaywrightTemplatesResult, _testMakeBrownfieldFixture, abandonFeatureBranch, addE2eToRunTestsScript, addInfraToPackageJson, addInfraToRunTestsScript, addPlaywrightToPackageJson, adoptLakebaseProject, adoptScmState, applySchemaMigrations, assertAdoptionPreflight, assertCleanForFork, assertCommitTargetNotProtected, assertCreatedProjectReady, buildPostgresUrl, buildSchemaQuery, cacheProjectRetention, catalogExists, catalogExplorerUrl, checkDatabricksAuth, checkoutPaired, claimFeatureBranch, clearRetentionCache, compileMigrationPattern, connectionApplicationName, createBranch, createFeaturePairedBranch, createLakebaseProject, createLongRunningBranch, createPairedBranch, createPerfPairedBranch, createProject, createTestPairedBranch, createUatPairedBranch, cutBackup, databricksAuthPrereqMessage, deleteAppEndpoint, deleteBranch, deleteLakebaseProject, deletePairedBranch, deployClaudeAgents, deployClaudeCommands, deployClaudeSettings, deployClaudeSkills, deployClientProject, deployDeployTargets, deployEnv, deployEnvExample, deployGitignore, deployLanguageProject, deployScripts, deploySpringStarter, deployVscodeSettings, deployWorkflows, deriveCiAppName, describeGates, detectCommandDrift, detectLanguage, detectLanguageAt, detectScaffoldedDrift, detectWorkflowDrift, dirIsEmpty, enableE2eForProject, enableInfraForProject, endpointPath, ensureAppEndpoint, ensureCachedArchive, ensureEndpoint, ensureLakebaseSecretAuth, ensureProfilePinned, ensurePythonBddDeps, ensurePythonE2eDeps, ensureSchemaAndVolume, extractPullNumber, featureBranchName, findDefaultBranchName, findHistoryRetentionDuration, fixFinding, formatJUnit, formatSchemaDiffAsMarkdown, generateAppYaml, getAppEndpoint, getAppServicePrincipal, getBranchByName, getCachedProjectRetention, getCiAppEndpoint, getConnection, getCredential, getDefaultBranch, getDefaultBranchId, getDefaultBranchName, getEndpoint, getProjectInfo, getProjectRetentionDuration, getRunnerInfo, getSchemaDiff, getTargetNames, grantLakebasePermission, grantUcCatalogPermission, inferTierTopology, initWorkflowState, installHooks, installPlaywright, isAllSchemas, isForeignFeatureClaim, isLongRunningTierBranch, isLtsJavaVersion, isPrereleaseBootVersion, isRunning, isTier, isTtlTooLongError, kitWarmWarning, listAppDeployments, listBranches, listSchemaMigrations, mergeFeature, mergePaired, minLakebaseTtl, mintCredential, normalizeHost, normalizeTierName, parseHostFromAuthDescribe, parseLakebaseTtl, parseTargetsYaml, patchWorkflowsForRunnerType, preparePr, projectPath, propagateCredentials, protectedTierNamesFromEnv, pushFailureHint, queryBranchSchema, queryBranchTables, readEnvVar, readTargets, readWorkflowState, recoverOrphans, release, removeRunner, resolveBranchId, resolveBranchPath, resolveCurrentUser, resolveDatabricksHost, resolveEndpointHost, resolveFeatureStartPoint, resolveJavaHome, resolveLatestBootVersion, resolveLatestLtsJavaVersion, resolveMigrationLanguage, resolveMigrationLayout, resolveParentBranch, resolveProfileForHost, resolveProfileForHostSync, resolveProtectedTierNames, rollbackDeploy, rollbackSchemaMigration, runDoctor$1 as runDoctor, runDoctor as runHealthDoctor, runInfraSuite, runPlaywrightInstall, runnerDir, runnerName, sanitizeFeatureSlug, scaffoldAll, scaffoldStaticAll, schemaMigrationStatus, schemaObjectName, selectProfileForHost, setupRunner, stateFilePath, stopRunner, substituteScmUtilsVersion, substrateVersion, syncEnvToCurrentBranch, tierBranchNames, toolForLanguage, tryCreateCatalog, updateEnvConnection, updateWorkflows, uploadDirectory, validateApp, validateCreateInputs, validateWorkflowState, verifyHooks, verifyProject, verifyWorkflows, waitForBranchAuthReady, waitForBranchReady, waitForCi, warmAndVerifyKit, withLakebaseRollback, workflowStateFileExists, writeEnvFile, writePlaywrightTemplates, writeTargets, writeWorkflowState };
4081
+ export { type AbandonFeatureArgs, type AbandonFeatureResult, type AddE2eToRunTestsScriptArgs, type AddE2eToRunTestsScriptResult, type AddInfraToPackageJsonArgs, type AddInfraToPackageJsonResult, type AddInfraToRunTestsScriptArgs, type AddInfraToRunTestsScriptResult, type AddPlaywrightToPackageJsonArgs, type AddPlaywrightToPackageJsonResult, type AddPythonE2eDepsArgs, type AddPythonE2eDepsResult, type AdoptLakebaseProjectArgs, type AdoptLakebaseProjectResult, type AdoptStateArgs, type AdoptStateResult, type AppServicePrincipal, type AppliedSchemaMigration, type ApplySchemaMigrationsArgs, type ApplySchemaMigrationsResult, type BranchLookupOpts, type BranchMetadata, CONVENTION_TIER_DEFAULTS, type CatalogExistsArgs, type CheckoutMode, type CheckoutPairedArgs, type CheckoutPairedResult, type ClaimFeatureBranchArgs, type ClaimFeatureBranchResult, type ClaimedOrphan, type ClientFramework, type CommandDriftReport, type CommandFileEntry, type CommandFileStatus, type ConnectionArgs, type ConsortSetupHooks, type CreateBranchArgs, type CreateConventionBranchArgs, type CreateConventionPairedBranchArgs, type CreateLongRunningBranchArgs, type CreateLongRunningBranchResult, type CreatePairedBranchArgs, type CreatePairedBranchResult, type CreateProjectArgs, type CreateProjectResult, type CutBackupArgs, type CutBackupResult, DEFAULT_PROTECTED_TIER_NAMES, type DatabricksProfile, type DeleteAppEndpointArgs, type DeleteAppEndpointResult, type DeleteBranchArgs, type DeletePairedBranchArgs, type DeletePairedBranchResult, type DeployClaudeCommandsOptions, type DeployClaudeCommandsResult, type DeployEnvExampleArgs, type DeployLanguageProjectArgs, type DeploySpringStarterArgs, type DeployTarget, type DeployTargetsConfig, type DetectCommandDriftArgs, type DetectScaffoldedDriftArgs, type DetectWorkflowDriftArgs, type DoctorArgs$1 as DoctorArgs, type DoctorFinding, type DoctorReport$1 as DoctorReport, type DoctorSeverity, type DsnArgs, type DsnResult, type EnableE2eForProjectArgs, type EnableE2eForProjectResult, type EnableInfraForProjectArgs, type EnableInfraForProjectResult, type EndpointInfo, type EnsureAppEndpointArgs, type EnsureAppEndpointResult, type EnsureEndpointArgs, type EnsureLakebaseSecretAuthArgs, type EnsureLakebaseSecretAuthResult, type EnsureProfilePinnedArgs, type EnsureProfilePinnedResult, type EnsureSchemaAndVolumeArgs, type EnsureSchemaAndVolumeResult, FIXABLE_FINDING_IDS, type FixFindingArgs, type FixFindingResult, type FixableFindingId, type GateInvariant, type GateStatus, type GenerateAppYamlOptions, type GenerateMavenProjectOptions, type GetAppEndpointArgs, type GetAppEndpointResult, type GetAppServicePrincipalArgs, type GetCiAppEndpointArgs, type GetCiAppEndpointResult, type GetConnectionArgs, type GetCredentialArgs, type GetEndpointArgs, type GetSchemaDiffArgs, type GrantLakebasePermissionArgs, type GrantLakebasePermissionResult, type GrantUcCatalogPermissionArgs, type GrantUcCatalogPermissionResult, type DoctorReport as HealthDoctorReport, type HookVerification, type InfraCheckResult, type InfraSuiteResult, type InitWorkflowStateArgs, type InitializrMetadata, InitializrNetworkError, InitializrParseError, type InstallPlaywrightArgs, type InstallPlaywrightOptions, type InstallPlaywrightResult, LakebaseBranchError, type LakebaseBranchInfo, LakebaseBranchTtlTooLongError, type LakebasePermissionLevel, type LakebaseProjectArgs, LakebaseProjectError, type LakebaseProjectInfo, type LakebaseProjectMetadata, type ListSchemaMigrationsArgs, MIGRATION_DEFAULTS, type MergeArgs, type MergePairedArgs, type MergePairedResult, type MergeResult, type MigrationDefaults, type MigrationLanguage, type MigrationLayout, type ModifiedSchemaObject, NODE_E2E_TEMPLATE_FILES, type OrphanCandidate, PLAYWRIGHT_TEMPLATE_FILES, PLAYWRIGHT_TEST_VERSION_RANGE, PYTEST_BDD_VERSION_RANGE, PYTEST_PLAYWRIGHT_VERSION_RANGE, PYTHON_E2E_TEMPLATE_FILES, type PendingSchemaMigration, type PoolArgs, type PreflightResult, type PreparePrArgs, type PreparePrResult, type ProgressCallback, type ProjectLanguage, type PropagateCredentialsArgs, type PropagateCredentialsResult, ProtectedBranchCommitError, type QueryBranchSchemaArgs, type RecoverOrphansArgs, type RecoverOrphansResult, type ReleaseArgs, type ReleaseResult, type RemoveRunnerArgs, type ResolveDatabricksHostArgs, type ResolveMigrationLayoutArgs, type RollbackDeployArgs, type RollbackDeployResult, type RollbackOptions, type RollbackSchemaMigrationArgs, type RollbackSchemaMigrationResult, type RunDoctorDeps, type RunInfraSuiteArgs, type RunPlaywrightInstallArgs, type RunPlaywrightInstallResult, type RunnerInfo, type RunnerReportFn, type RunnerType, SCM_STATES, STATE_FILE_REL, type ScaffoldAllArgs, type ScaffoldOptions, type ScaffoldReportFn, type ScaffoldStaticAllArgs, type ScaffoldStaticAllResult, type ScaffoldedDriftReport, type SchemaColumn, type SchemaDiffResult, SchemaMigrationError, type SchemaMigrationFile, type SchemaMigrationLanguage, type SchemaMigrationStatusArgs, type SchemaMigrationStatusResult, type SchemaMigrationToolName, type SchemaObject, type SchemaQueryRow, ScmAbandonError, ScmAdoptError, ScmClaimError, ScmDoctorFixError, ScmMergeError, ScmPreparePrError, ScmRecoverError, type ScmState, ScmWaitCiError, type ScmWorkflowState, type SetupRunnerArgs, type SftddSetupHooks, SpringInitializrClient, type SpringJvmLanguage, type StaleBranchFinding, type SyncEnvArgs, type SyncEnvResult, type TableSchema, type TierTopology, type TryCreateCatalogArgs, type TryCreateCatalogResult, type UcCatalogPermission, type UpdateEnvConnectionArgs, type UpdateWorkflowsArgs, type UpdateWorkflowsResult, type UploadDirectoryArgs, type UploadDirectoryResult, type ValidateAppOptions, type ValidateAppResult, type ValidationError, type ValidationResult, type WaitCiArgs, type WaitCiResult, type WaitForBranchAuthReadyArgs, type WaitForBranchReadyArgs, type WorkflowDriftReport, type WorkflowFileStatus, type WorkflowFileUpdate, type WorkflowStatus, type WorkflowUpdateOutcome, type WorkflowVerification, type WriteEnvFileArgs, type WritePlaywrightTemplatesArgs, type WritePlaywrightTemplatesResult, _testMakeBrownfieldFixture, abandonFeatureBranch, addE2eToRunTestsScript, addInfraToPackageJson, addInfraToRunTestsScript, addPlaywrightToPackageJson, adoptLakebaseProject, adoptScmState, applySchemaMigrations, assertAdoptionPreflight, assertCleanForFork, assertCommitTargetNotProtected, assertCreatedProjectReady, buildPostgresUrl, buildSchemaQuery, cacheProjectRetention, catalogExists, catalogExplorerUrl, checkDatabricksAuth, checkoutPaired, claimFeatureBranch, clearRetentionCache, compileMigrationPattern, connectionApplicationName, createBranch, createFeaturePairedBranch, createLakebaseProject, createLongRunningBranch, createPairedBranch, createPerfPairedBranch, createProject, createTestPairedBranch, createUatPairedBranch, cutBackup, databricksAuthPrereqMessage, deleteAppEndpoint, deleteBranch, deleteLakebaseProject, deletePairedBranch, deployClaudeAgents, deployClaudeCommands, deployClaudeSettings, deployClaudeSkills, deployClientProject, deployDeployTargets, deployEnv, deployEnvExample, deployGitignore, deployLanguageProject, deployScripts, deploySpringStarter, deployVscodeSettings, deployWorkflows, deriveCiAppName, describeGates, detectCommandDrift, detectLanguage, detectLanguageAt, detectScaffoldedDrift, detectWorkflowDrift, dirIsEmpty, enableE2eForProject, enableInfraForProject, endpointPath, ensureAppEndpoint, ensureCachedArchive, ensureEndpoint, ensureLakebaseSecretAuth, ensureProfilePinned, ensurePythonBddDeps, ensurePythonE2eDeps, ensureSchemaAndVolume, extractPullNumber, featureBranchName, findDefaultBranchName, findHistoryRetentionDuration, fixFinding, formatJUnit, formatSchemaDiffAsMarkdown, generateAppYaml, getAppEndpoint, getAppServicePrincipal, getBranchByName, getCachedProjectRetention, getCiAppEndpoint, getConnection, getCredential, getDefaultBranch, getDefaultBranchId, getDefaultBranchName, getEndpoint, getProjectInfo, getProjectRetentionDuration, getRunnerInfo, getSchemaDiff, getTargetNames, grantLakebasePermission, grantUcCatalogPermission, inferTierTopology, initWorkflowState, installHooks, installPlaywright, isAllSchemas, isForeignFeatureClaim, isGitTracked, isLongRunningTierBranch, isLtsJavaVersion, isPrereleaseBootVersion, isRunning, isTier, isTtlTooLongError, kitWarmWarning, listAppDeployments, listBranches, listSchemaMigrations, mergeFeature, mergePaired, minLakebaseTtl, mintCredential, normalizeHost, normalizeTierName, parseHostFromAuthDescribe, parseLakebaseTtl, parseTargetsYaml, patchWorkflowsForRunnerType, preparePr, projectPath, propagateCredentials, protectedTierNamesFromEnv, pushFailureHint, queryBranchSchema, queryBranchTables, readEnvVar, readTargets, readWorkflowState, reconcileTierToOrigin, recoverOrphans, release, removeRunner, resolveBranchId, resolveBranchPath, resolveCurrentUser, resolveDatabricksHost, resolveEndpointHost, resolveFeatureStartPoint, resolveJavaHome, resolveLatestBootVersion, resolveLatestLtsJavaVersion, resolveMigrationLanguage, resolveMigrationLayout, resolveParentBranch, resolveProfileForHost, resolveProfileForHostSync, resolveProtectedTierNames, rollbackDeploy, rollbackSchemaMigration, runDoctor$1 as runDoctor, runDoctor as runHealthDoctor, runInfraSuite, runPlaywrightInstall, runnerDir, runnerName, sanitizeFeatureSlug, scaffoldAll, scaffoldStaticAll, schemaMigrationStatus, schemaObjectName, selectProfileForHost, setupRunner, stateFilePath, stopRunner, substituteScmUtilsVersion, substrateVersion, syncEnvToCurrentBranch, tierBranchNames, toolForLanguage, tryCreateCatalog, updateEnvConnection, updateWorkflows, uploadDirectory, validateApp, validateCreateInputs, validateWorkflowState, verifyHooks, verifyProject, verifyWorkflows, waitForBranchAuthReady, waitForBranchReady, waitForCi, warmAndVerifyKit, withLakebaseRollback, workflowStateFileExists, writeEnvFile, writePlaywrightTemplates, writeTargets, writeWorkflowState };