Skip to content

Address the FeatureSpec resource review follow-ups - #7519

Merged
Daniel114510 merged 3 commits into
mainfrom
fs2524-feature-spec-review-followups
Nov 13, 2026
Merged

Daniel114510 merged 3 commits into
mainfrom
fs2524-feature-spec-review-followups

Conversation

@Daniel114510

@Daniel114510 Daniel114510 commented Nov 11, 2026 •

Copy link
Copy Markdown
Member

Changes

Addresses the review feedback on #7364 that was still open at merge. Each item links the comments it answers.

  • Approval prompts (Jan, Jan's review): the deploy prompt also names what a deleted FeatureSpec breaks, and both prompts say "FeatureSpecs", like the Feature View prompts.
  • SQL stubs (Jan, Andrew): the test server accepts POST /api/2.0/sql/statements/ with the trailing slash the scripts send, and answers CREATE TABLE, CREATE FUNCTION and INSERT INTO with an empty SUCCEEDED result, as a fallback that a test's own matcher overrides. The [[Server]] stubs are gone from the feature spec, grants, bind, invariant and features/lifecycle tests.
  • Shared fixture helpers (Andrew): the feature spec schema setup and cleanup move to acceptance/bundle/script.prepare, which the feature spec, grants, bind and invariant tests use.
  • Shared statement runner (Andrew): create_table.py and create_feature_spec_fixtures.py share run_statements in acceptance/bin/util.py, so create_table.py now also waits for each statement and fails if one does not succeed.
  • resolveThreePartName (Andrew): the vector search index, feature and feature spec blocks of capture_uc_dependencies share one helper.
  • ?w= in summary URLs (Jan, Andrew): resources/feature_specs/test.toml strips the suffix, as bind does.
  • Generated commands (Jan): the bind and remote-delete scripts use feature-engineering create-feature-spec and delete-feature-spec instead of databricks api.
  • nostamp (Andrew, Jan's review): the grants test pipes plan JSON through nostamp.
  • TestAll fixture (Jan): sets every feature spec field.
  • Fake validation (Jan): the test server's feature spec create no longer checks for a three-part name.
  • PyDABs test (Jan's review): python/feature_specs-support runs locally only and has no grants, per acceptance/bundle/python/README.md.

Why

Review feedback on #7364 that was left for after the merge.

Tests

  • Acceptance tests:
    • bundle/resources/feature_specs, bundle/resources/grants/feature_specs, bundle/deployment/bind/feature_spec: re-recorded for the prompts, commands and URL
    • bundle/invariant, bundle/resources/features/lifecycle: pass without the SQL stub
    • bundle/python/feature_specs-support: local only, without grants
  • Unit tests:
    • libs/testserver/testsql: a fallback yields to a test's matcher
    • libs/testserver: default handlers accept fixture statements on both paths
    • bundle/direct/dresources: TestAll/feature_specs with every field set

Review feedback on #7364 left for after the merge: the test server models
the fixture SQL statements instead of per-test stubs, the fixture helpers
are shared, the FeatureSpec approval prompts name every consequence, and
capture_uc_dependencies shares one three-part-name helper.

Co-authored-by: Isaac <no-reply@databricks.com>
@github-actions github-actions Bot added DABs DABs related issues PyDABs labels Nov 11, 2026
@github-actions

github-actions Bot commented Nov 11, 2026 •

Copy link
Copy Markdown
Contributor

Commit: 41cc8428e | Workflow run

Regression test report

Selected 18 changed tests (limit=20, 0 not selected)

30 tests: regression=4 unreleased=0 coverage=26 failing=0
test branch main (daad5b4) latest (v1.26.0)
TestAccept/bundle/deployment/bind/feature_spec/DMS= ✅ ✅ ✅
TestAccept/bundle/deployment/bind/feature_spec/DMS=true ✅ ✅ ✅
TestAccept/bundle/invariant/continue_293/DMS=/INPUT_CONFIG=feature_spec.yml.tmpl ✅ ✅ ✅
TestAccept/bundle/invariant/delete_idempotent/DMS=/INPUT_CONFIG=feature_spec.yml.tmpl/READPLAN= ✅ ✅ ✅
TestAccept/bundle/invariant/delete_idempotent/DMS=/INPUT_CONFIG=feature_spec.yml.tmpl/READPLAN=1 ✅ ✅ ✅
TestAccept/bundle/invariant/destroy_idempotent/DMS=/INPUT_CONFIG=feature_spec.yml.tmpl/READPLAN= ✅ ✅ ✅
TestAccept/bundle/invariant/destroy_idempotent/DMS=/INPUT_CONFIG=feature_spec.yml.tmpl/READPLAN=1 ✅ ✅ ✅
TestAccept/bundle/invariant/no_drift/DMS=/INPUT_CONFIG=feature_spec.yml.tmpl/READPLAN= ✅ ✅ ✅
TestAccept/bundle/invariant/no_drift/DMS=/INPUT_CONFIG=feature_spec.yml.tmpl/READPLAN=1 ✅ ✅ ✅
TestAccept/bundle/python/feature_specs-support/DMS=/PYDAB_VERSION=current ✅ ✅ ✅
TestAccept/bundle/python/feature_specs-support/DMS=true/PYDAB_VERSION=current ✅ ✅ ✅
TestAccept/bundle/resources/feature_specs/basic/DMS= ✅ ❌ ❌
TestAccept/bundle/resources/feature_specs/order/DMS= ✅ ❌ ❌
TestAccept/bundle/resources/feature_specs/remote-delete/DMS= ✅ ✅ ✅
TestAccept/bundle/resources/feature_specs/uppercase-name/DMS= ✅ ❌ ❌
TestAccept/bundle/resources/features/lifecycle/DMS= ✅ ✅ ✅
TestAccept/bundle/resources/features/lifecycle/DMS=true ✅ ✅ ✅
TestAccept/bundle/resources/grants/feature_specs/DMS= ✅ ❌ ❌
TestAccept/bundle/resources/materialization_sets/batch/DMS= ✅ ✅ ✅
TestAccept/bundle/resources/materialization_sets/batch/DMS=true ✅ ✅ ✅
TestAccept/bundle/resources/materialization_sets/immutable/DMS= ✅ ✅ ✅
TestAccept/bundle/resources/materialization_sets/immutable/DMS=true ✅ ✅ ✅
TestAccept/bundle/resources/materialization_sets/membership/DMS= ✅ ✅ ✅
TestAccept/bundle/resources/materialization_sets/membership/DMS=true ✅ ✅ ✅
TestAccept/bundle/resources/materialization_sets/mixed_triggers/DMS= ✅ ✅ ✅
TestAccept/bundle/resources/materialization_sets/mixed_triggers/DMS=true ✅ ✅ ✅
TestAccept/bundle/resources/materialization_sets/removal_scope/DMS= ✅ ✅ ✅
TestAccept/bundle/resources/materialization_sets/removal_scope/DMS=true ✅ ✅ ✅
TestAccept/bundle/resources/synced_database_tables/basic/DMS= ✅ ✅ ✅
TestAccept/bundle/resources/synced_database_tables/basic/DMS=true ✅ ✅ ✅
TestAccept/bundle/resources/feature_specs/basic/DMS=: branch ✅ | main (daad5b4) ❌ | latest (v1.26.0) ❌

main (daad5b4):

acceptance_test.go:1374: Diff:
        --- bundle/resources/feature_specs/basic/output.txt
        +++ /tmp/TestAcceptbundleresourcesfeature_specsbasicDMS=21019352/002/output.txt
        @@ -116,9 +116,8 @@
         >>> [CLI] bundle deploy --auto-approve
         Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-feature-specs-basic-[UNIQUE_NAME]/default/files...
         
        -This action will result in the deletion or recreation of the following FeatureSpecs.
        -Feature Serving endpoints and training code that use a deleted FeatureSpec can no longer
        -load it, and a recreated one loses the grants the bundle does not declare:
        +This action will result in the deletion or recreation of the following feature specs.
        +Grants on them that are not declared in the bundle are lost:
           recreate resources.feature_specs.spec1
         Recreated feature_specs.spec1
         Files: 1 uploaded, 0 deleted
        @@ -171,7 +170,7 @@
         The following resources will be deleted:
           delete resources.feature_specs.spec1
         
        -This action will result in the deletion of the following FeatureSpecs.
        +This action will result in the deletion of the following feature specs.
         Feature Serving endpoints and training code that use them can no longer load them:
           delete resources.feature_specs.spec1
         
        
    acceptance_test.go:1152: LOG.cleanup: No active deployment found to destroy!

latest (v1.26.0): same output as main (daad5b4)

TestAccept/bundle/resources/feature_specs/order/DMS=: branch ✅ | main (daad5b4) ❌ | latest (v1.26.0) ❌

main (daad5b4):

acceptance_test.go:1374: Diff:
        --- bundle/resources/feature_specs/order/output.txt
        +++ /tmp/TestAcceptbundleresourcesfeature_specsorderDMS=373001448/002/output.txt
        @@ -28,7 +28,7 @@
         The following resources will be deleted:
           delete resources.feature_specs.spec1
         
        -This action will result in the deletion of the following FeatureSpecs.
        +This action will result in the deletion of the following feature specs.
         Feature Serving endpoints and training code that use them can no longer load them:
           delete resources.feature_specs.spec1
         
        
    acceptance_test.go:1152: LOG.cleanup: No active deployment found to destroy!

latest (v1.26.0): same output as main (daad5b4)

TestAccept/bundle/resources/feature_specs/uppercase-name/DMS=: branch ✅ | main (daad5b4) ❌ | latest (v1.26.0) ❌

main (daad5b4):

acceptance_test.go:1374: Diff:
        --- bundle/resources/feature_specs/uppercase-name/output.txt
        +++ /tmp/TestAcceptbundleresourcesfeature_specsuppercase-nameDMS=3793655313/002/output.txt
        @@ -69,9 +69,8 @@
         >>> [CLI] bundle deploy --auto-approve
         Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-feature-specs-uppercase-name-[UNIQUE_NAME]/default/files...
         
        -This action will result in the deletion or recreation of the following FeatureSpecs.
        -Feature Serving endpoints and training code that use a deleted FeatureSpec can no longer
        -load it, and a recreated one loses the grants the bundle does not declare:
        +This action will result in the deletion or recreation of the following feature specs.
        +Grants on them that are not declared in the bundle are lost:
           recreate resources.feature_specs.spec1
         Recreated feature_specs.spec1
         Files: 1 uploaded, 0 deleted
        @@ -107,7 +106,7 @@
         The following resources will be deleted:
           delete resources.feature_specs.spec1
         
        -This action will result in the deletion of the following FeatureSpecs.
        +This action will result in the deletion of the following feature specs.
         Feature Serving endpoints and training code that use them can no longer load them:
           delete resources.feature_specs.spec1
         
        
    acceptance_test.go:1152: LOG.cleanup: No active deployment found to destroy!

latest (v1.26.0): same output as main (daad5b4)

TestAccept/bundle/resources/grants/feature_specs/DMS=: branch ✅ | main (daad5b4) ❌ | latest (v1.26.0) ❌

main (daad5b4):

acceptance_test.go:1374: Diff:
        --- bundle/resources/grants/feature_specs/output.txt
        +++ /tmp/TestAcceptbundleresourcesgrantsfeature_specsDMS=1307056819/002/output.txt
        @@ -40,9 +40,8 @@
         >>> [CLI] bundle deploy --auto-approve
         Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/deploy-feature-spec-grants-[UNIQUE_NAME]/default/files...
         
        -This action will result in the deletion or recreation of the following FeatureSpecs.
        -Feature Serving endpoints and training code that use a deleted FeatureSpec can no longer
        -load it, and a recreated one loses the grants the bundle does not declare:
        +This action will result in the deletion or recreation of the following feature specs.
        +Grants on them that are not declared in the bundle are lost:
           recreate resources.feature_specs.my_feature_spec
         Recreated feature_specs.my_feature_spec
         Updated feature_specs.my_feature_spec.grants
        @@ -67,7 +66,7 @@
         The following resources will be deleted:
           delete resources.feature_specs.my_feature_spec
         
        -This action will result in the deletion of the following FeatureSpecs.
        +This action will result in the deletion of the following feature specs.
         Feature Serving endpoints and training code that use them can no longer load them:
           delete resources.feature_specs.my_feature_spec
         
        
    acceptance_test.go:1152: LOG.cleanup: No active deployment found to destroy!

latest (v1.26.0): same output as main (daad5b4)

@eng-dev-ecosystem-bot

eng-dev-ecosystem-bot commented Nov 11, 2026 •

Copy link
Copy Markdown
Collaborator

✅ Integration test report

Commit: 41cc842

Run: 43484268684

Env 🔄​flaky 💚​RECOVERED ✅​pass 🙈​skip Time
🔄​ aws linux-2core-8gb 7 303 18 16:14
🔄​ aws-windows-latest-4core-16gb 5 1 306 16 15:13
💚​ azure linux-2core-8gb 1 308 18 18:23
💚​ azure-windows-latest-4core-16gb 1 310 16 12:41
💚​ gcp linux-2core-8gb 1 306 19 8:53
🔄​ gcp-windows-latest-4core-16gb 1 1 307 17 10:16
12 interesting tests: 12 flaky
Test Name aws linux-2core-8gb aws-windows-latest-4core-16gb azure linux-2core-8gb azure-windows-latest-4core-16gb gcp linux-2core-8gb gcp-windows-latest-4core-16gb
🔄​ TestAccept 🔄​f 💚​R 💚​R 💚​R 💚​R 💚​R
🔄​ TestAccept/bundle/resources/feature_specs/remote-delete 🔄​f ✅​p ✅​p ✅​p ✅​p ✅​p
🔄​ TestAccept/bundle/resources/feature_specs/remote-delete/DMS= 🔄​f ✅​p ✅​p ✅​p ✅​p ✅​p
🔄​ TestSyncEnsureRemotePathIsUsableIfRepoExists 🔄​f ✅​p ✅​p ✅​p ✅​p ✅​p
🔄​ TestSyncIncrementalSyncPythonNotebookDelete ✅​p ✅​p ✅​p ✅​p ✅​p 🔄​f
🔄​ TestExportDir 🔄​f ✅​p ✅​p ✅​p ✅​p ✅​p
🔄​ TestExportDirDoesNotOverwrite ✅​p 🔄​f ✅​p ✅​p ✅​p ✅​p
🔄​ TestFilerReadWrite ✅​p 🔄​f ✅​p ✅​p ✅​p ✅​p
🔄​ TestFilerReadWrite/workspace_files ✅​p 🔄​f ✅​p ✅​p ✅​p ✅​p
🔄​ TestFilerRecursiveDelete 🔄​f 🔄​f ✅​p ✅​p ✅​p ✅​p
🔄​ TestFilerRecursiveDelete/workspace_files 🔄​f ✅​p ✅​p ✅​p ✅​p ✅​p
🔄​ TestFilerRecursiveDelete/workspace_files_extensions ✅​p 🔄​f ✅​p ✅​p ✅​p ✅​p
Top 26 slowest tests (at least 2 minutes):
duration env testname
16:44 azure linux-2core-8gb TestAccept/bundle/resources/synced_database_tables/basic/DMS=
8:36 azure-windows-latest-4core-16gb TestAccept/bundle/resources/synced_database_tables/basic/DMS=
5:50 aws-windows-latest-4core-16gb TestAccept/bundle/resources/materialization_sets/batch/DMS=
5:18 aws linux-2core-8gb TestAccept/bundle/resources/materialization_sets/immutable/DMS=true
4:20 aws linux-2core-8gb TestAccept/bundle/resources/materialization_sets/batch/DMS=true
4:08 aws-windows-latest-4core-16gb TestAccept/bundle/resources/materialization_sets/immutable/DMS=
3:37 aws linux-2core-8gb TestAccept/bundle/resources/materialization_sets/immutable/DMS=
3:36 aws-windows-latest-4core-16gb TestAccept/bundle/resources/materialization_sets/batch/DMS=true
3:33 aws linux-2core-8gb TestAccept/bundle/invariant/delete_idempotent/DMS=/INPUT_CONFIG=feature_spec.yml.tmpl/READPLAN=
3:27 azure-windows-latest-4core-16gb TestAccept
3:17 aws-windows-latest-4core-16gb TestAccept
3:13 gcp-windows-latest-4core-16gb TestAccept
3:04 gcp linux-2core-8gb TestAccept/bundle/resources/materialization_sets/immutable/DMS=
2:55 aws linux-2core-8gb TestAccept/bundle/invariant/delete_idempotent/DMS=/INPUT_CONFIG=feature_spec.yml.tmpl/READPLAN=1
2:42 aws linux-2core-8gb TestAccept/bundle/resources/features/lifecycle/DMS=true
2:40 gcp-windows-latest-4core-16gb TestAccept/bundle/resources/materialization_sets/batch/DMS=true
2:31 gcp-windows-latest-4core-16gb TestAccept/bundle/resources/materialization_sets/immutable/DMS=true
2:31 aws-windows-latest-4core-16gb TestFilerWorkspaceFilesExtensionsReadDir
2:29 aws-windows-latest-4core-16gb TestAccept/bundle/resources/materialization_sets/immutable/DMS=true
2:26 aws-windows-latest-4core-16gb TestSyncIncrementalFileSync
2:23 gcp linux-2core-8gb TestAccept/bundle/resources/materialization_sets/immutable/DMS=true
2:11 azure linux-2core-8gb TestAccept/bundle/resources/materialization_sets/immutable/DMS=
2:08 azure linux-2core-8gb TestAccept/bundle/resources/materialization_sets/immutable/DMS=true
2:07 gcp linux-2core-8gb TestAccept/bundle/resources/materialization_sets/batch/DMS=
2:01 gcp-windows-latest-4core-16gb TestAccept/bundle/invariant/delete_idempotent/DMS=/INPUT_CONFIG=feature_spec.yml.tmpl/READPLAN=1
2:00 aws-windows-latest-4core-16gb TestAccept/bundle/resources/feature_specs/uppercase-name/DMS=

@Daniel114510
Daniel114510 marked this pull request as ready for review November 12, 2026 00:34
@Daniel114510
Daniel114510 requested review from a team as code owners November 12, 2026 00:34
@rugpanov
rugpanov removed their request for review November 12, 2026 09:39
@andrewnester
andrewnester self-requested a review November 12, 2026 09:51
Comment thread libs/testserver/handlers.go Resolved
Daniel114510 and others added 2 commits November 13, 2026 18:27
The materialization set, quality monitor, Postgres synced table and synced database table tests
only send CREATE TABLE and INSERT INTO statements, which the fallback answers.

Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
@Daniel114510
Daniel114510 added this pull request to the merge queue Nov 13, 2026
Merged via the queue into main with commit dc17d70 Nov 13, 2026
30 checks passed
@Daniel114510
Daniel114510 deleted the fs2524-feature-spec-review-followups branch November 13, 2026 19:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

DABs DABs related issues PyDABs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants