Skip to content

Add curated TUI table overrides for list commands#4731

Open
simonfaltum wants to merge 5 commits intosimonfaltum/list-tui-paginatedfrom
simonfaltum/list-tui-overrides
Open

Add curated TUI table overrides for list commands#4731
simonfaltum wants to merge 5 commits intosimonfaltum/list-tui-paginatedfrom
simonfaltum/list-tui-overrides

Conversation

@simonfaltum
Copy link
Member

@simonfaltum simonfaltum commented Mar 12, 2026

Why

PR #4729 adds an interactive table for list commands, but its default behavior is to fall through to template rendering when no table configuration is registered. For the commands people use most, the table should start with the fields they actually care about, and it should enable search where the backend supports it.

These 15 commands were selected based on CLI usage as some of the most frequently used list commands by customer count.

Changes

Before: interactive list commands used template rendering with no curated table configuration.

Now: 15 common list commands register curated columns, and jobs list plus pipelines list-pipelines also enable / search in the TUI.

This PR builds on #4729. It does not change the table engine itself. It adds per-command overrides that:

  • Choose the columns and column order for each command
  • Preserve the existing non-interactive template output
  • Enable server-side search where the API supports filtering

Commands covered: jobs list, clusters list, pipelines list-pipelines, warehouses list, catalogs list, schemas list, tables list, apps list, repos list, instance-pools list, serving-endpoints list, volumes list, external-locations list, alerts list, workspace list

Test plan

  • go build ./...
  • Manual smoke test: verify curated columns for jobs list, clusters list, catalogs list, warehouses list, serving-endpoints list
  • Manual smoke test: verify / search for jobs list and pipelines list-pipelines
  • make checks passes
  • make lintfull passes (0 issues)

@simonfaltum simonfaltum force-pushed the simonfaltum/list-tui-paginated branch from 53b85d2 to 64f2b98 Compare March 12, 2026 23:55
@simonfaltum simonfaltum force-pushed the simonfaltum/list-tui-overrides branch from af5ef00 to 19c9b53 Compare March 12, 2026 23:57
@eng-dev-ecosystem-bot
Copy link
Collaborator

eng-dev-ecosystem-bot commented Mar 13, 2026

Commit: e76dee4

Run: 23070501971

Env 🔄​flaky 💚​RECOVERED 🙈​SKIP ✅​pass 🙈​skip Time
💚​ aws linux 8 7 268 787 5:40
💚​ aws windows 8 7 270 785 5:00
🔄​ aws-ucws linux 2 7 7 364 702 6:42
🔄​ aws-ucws windows 2 7 7 366 700 5:50
💚​ azure linux 2 9 271 785 6:01
💚​ azure windows 2 9 273 783 4:56
🔄​ azure-ucws linux 2 1 9 369 698 7:34
🔄​ azure-ucws windows 2 1 9 371 696 5:30
💚​ gcp linux 2 9 267 788 6:06
💚​ gcp windows 2 9 269 786 5:27
16 interesting tests: 7 SKIP, 6 RECOVERED, 3 flaky
Test Name aws linux aws windows aws-ucws linux aws-ucws windows azure linux azure windows azure-ucws linux azure-ucws windows gcp linux gcp windows
🔄​ TestAccept 💚​R 💚​R 🔄​f 💚​R 💚​R 💚​R 💚​R 🔄​f 💚​R 💚​R
🙈​ TestAccept/bundle/resources/permissions 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
💚​ TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/with_permissions 💚​R 💚​R 💚​R 💚​R 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
💚​ TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/with_permissions/DATABRICKS_BUNDLE_ENGINE=direct 💚​R 💚​R 💚​R 💚​R
💚​ TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/with_permissions/DATABRICKS_BUNDLE_ENGINE=terraform 💚​R 💚​R 💚​R 💚​R
💚​ TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/without_permissions 💚​R 💚​R 💚​R 💚​R 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
💚​ TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/without_permissions/DATABRICKS_BUNDLE_ENGINE=direct 💚​R 💚​R 💚​R 💚​R
💚​ TestAccept/bundle/resources/permissions/jobs/destroy_without_mgmtperms/without_permissions/DATABRICKS_BUNDLE_ENGINE=terraform 💚​R 💚​R 💚​R 💚​R
🙈​ TestAccept/bundle/resources/postgres_branches/basic 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🙈​ TestAccept/bundle/resources/postgres_branches/recreate 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🙈​ TestAccept/bundle/resources/postgres_branches/update_protected 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🙈​ TestAccept/bundle/resources/postgres_branches/without_branch_id 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🙈​ TestAccept/bundle/resources/postgres_endpoints/recreate 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🙈​ TestAccept/bundle/resources/synced_database_tables/basic 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🔄​ TestAccept/ssh/connect-serverless-gpu 🙈​s 🙈​s 🔄​f 🔄​f 🙈​s 🙈​s 🔄​f 🔄​f 🙈​s 🙈​s
🔄​ TestAccept/ssh/connection 💚​R 💚​R 💚​R 🔄​f 💚​R 💚​R 🔄​f 💚​R 💚​R 💚​R
Top 20 slowest tests (at least 2 minutes):
duration env testname
3:33 gcp windows TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
3:21 aws-ucws linux TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
3:16 azure-ucws windows TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
3:14 gcp linux TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
3:11 azure-ucws linux TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
3:10 gcp windows TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
3:06 gcp linux TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
2:52 aws linux TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
2:50 aws windows TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
2:47 aws-ucws windows TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
2:43 aws-ucws linux TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
2:43 azure-ucws linux TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
2:39 aws windows TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
2:33 aws-ucws windows TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
2:15 azure linux TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
2:15 azure linux TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
2:12 azure windows TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=terraform
2:10 azure-ucws windows TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
2:08 aws linux TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct
2:06 azure windows TestAccept/bundle/resources/apps/inline_config/DATABRICKS_BUNDLE_ENGINE=direct

@simonfaltum simonfaltum force-pushed the simonfaltum/list-tui-paginated branch from 64f2b98 to ef8c413 Compare March 13, 2026 05:53
@simonfaltum simonfaltum force-pushed the simonfaltum/list-tui-overrides branch from 19c9b53 to 2495267 Compare March 13, 2026 05:56
@simonfaltum simonfaltum force-pushed the simonfaltum/list-tui-paginated branch from 1bf0772 to e672906 Compare March 13, 2026 06:23
Copy link
Contributor

@shreyas-goenka shreyas-goenka left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: This review was posted by Claude (AI assistant). Shreyas will do a separate, more thorough review pass.

Priority: HIGH — Potential data correctness bug in pipelines search

MAJOR: Pipelines search overwrites user's --filter flag

In cmd/workspace/pipelines/overrides.go, the override sets listReq.Filter = "name LIKE '%" + listReq.Filter + "%'" which overwrites whatever the user passed via --filter. If the user intended to pass a raw DLT filter expression (e.g., "state = 'RUNNING'"), it gets wrapped in a name LIKE expression, silently changing the query semantics. Consider preserving the original filter if it doesn't look like a plain name search, or using a separate flag for the name-search behavior.

Other Observations

  • The pattern across the other 14 files is clean and consistent
  • Good column selection choices for each resource type
  • RegisterConfig calls correctly match the command paths

The pipelines search filter issue is the main thing to look at closely.

Treat pipeline search input literally when users type SQL LIKE wildcards, and add package-level override tests so nested SDK field access is exercised before runtime.
Previously, the TUI search callback overwrote req.Filter entirely with a
name LIKE expression, discarding any filter the user passed via --filter.
Now the name LIKE clause is combined with the existing filter using AND,
so both constraints apply together.
Wrap the user-provided filter in parentheses before appending the AND
clause. Without this, a filter like 'a OR b' combined with a name search
would parse as 'a OR (b AND name LIKE ...)' instead of the intended
'(a OR b) AND name LIKE ...'.

Add a test case with an OR filter to verify correct parenthesization.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants