Skip to content

improvement(datamodel): server-side column tag & glossary filter for Dashboard Data Models - #29852

Draft
sonika-shah wants to merge 3 commits into
mainfrom
improvement/datamodel-column-tag-filter
Draft

improvement(datamodel): server-side column tag & glossary filter for Dashboard Data Models#29852
sonika-shah wants to merge 3 commits into
mainfrom
improvement/datamodel-column-tag-filter

Conversation

@sonika-shah

@sonika-shah sonika-shah commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

Related to #25063

#25063 added a server-side column tag/glossary filter to the Table schema view (implemented in #29324), fixing a cross-page bug where a tag applied to a column on a later page could not be found because filtering ran client-side over the loaded page only.

Dashboard Data Models have the identical setup — columns paginate server-side (PAGE_SIZE_LARGE), the schema table exposes Tags/Glossary column filters — but their /columns/search endpoint never got the filter, so data models still exhibit the original bug. This PR brings them to parity and extracts the logic into a shared util so the two entities stay consistent.

Why data models specifically

Table and Dashboard Data Model are the only two entities whose children are the Column type and fetched page-by-page from a /columns/search endpoint. Every other entity with a column/field tag filter (Container, Topic, SearchIndex, API Endpoint, File, Worksheet, Dashboard, Pipeline) loads all children inline, so its client-side filter already spans everything — no server-side change needed.

Backend

  • New ColumnSearchUtil — the column search + tag/glossary filtering (pruneColumnsToMatches, columnComparator, resolveColumnTagsForFilter, ColumnTagFilter) is extracted from TableRepository into a shared util. TableRepository now delegates to it (no behavior change for Tables).
  • DashboardDataModelResource — both /columns/search endpoints gain tags, glossaryTerms, sortBy, sortOrder params.
  • DashboardDataModelRepository — replaces the old flat search with server-side tree pruning + direct-and-derived tag resolution across all pages, on a deep copy of the column tree.

Frontend (ModelTab)

  • Replaces the client-side useTreeTagFilter with a server-side filter that calls searchDataModelColumnsByFQN with tags/glossaryTerms, resets to page 1 on change, sources filter options from the full entity columns, and auto-expands ancestors of matches — mirroring SchemaTable.

Behavior notes

  • Data-model text search now returns the nested tree (a matched nested column under its ancestor path) instead of a flat list — consistent with the Table endpoint and required to show hierarchy.
  • Search matches name/displayName only (the old data-model search also matched description); this aligns it with the Table endpoint.

Tests

  • Integration test asserting the tag filter finds a column tagged on a later page, via both by-FQN and by-ID endpoints.
  • Backend mvn install (service + integration-tests) passes; frontend tsc --noEmit clean.

Greptile Summary

This PR adds server-side column tag and glossary filtering for Dashboard Data Models. The main changes are:

  • Shared column search and tag filtering in ColumnSearchUtil.
  • Dashboard Data Model /columns/search support for tag, glossary, and sort parameters.
  • Model tab filtering moved from client-side tree filtering to server-backed search.
  • Integration coverage for finding a tagged data model column beyond the first page.

Confidence Score: 5/5

This looks safe to merge.

  • No blocking issues found in the changed code.

Important Files Changed

Filename Overview
openmetadata-service/src/main/java/org/openmetadata/service/util/ColumnSearchUtil.java Adds shared column tree search, tag filtering, sorting, flattening, and tag resolution.
openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DashboardDataModelRepository.java Uses the shared utility to search, filter, sort, paginate, and populate data model columns.
openmetadata-service/src/main/java/org/openmetadata/service/resources/datamodels/DashboardDataModelResource.java Adds tag, glossary, and sort query parameters to both data model column search routes.
openmetadata-ui/src/main/resources/ui/src/components/Dashboard/DataModel/DataModels/ModelTab/ModelTab.component.tsx Switches data model column tag filtering to server-backed search and keeps matching paths expanded.
openmetadata-integration-tests/src/test/java/org/openmetadata/it/tests/DashboardDataModelResourceIT.java Adds integration coverage for tag filtering across paginated data model columns.

Reviews (4): Last reviewed commit: "review: expose sortBy/sortOrder on Searc..." | Re-trigger Greptile

Context used (3)

  • Context used - CLAUDE.md (source)
  • Context used - openmetadata-ui-core-components/CLAUDE.md (source)
  • Context used - AGENTS.md (source)

@sonika-shah
sonika-shah requested a review from a team as a code owner July 8, 2026 17:21
Copilot AI review requested due to automatic review settings July 8, 2026 17:21
@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

❌ PR checklist incomplete

This PR cannot be merged until the following are addressed on its linked issue:

  • No GitHub issue is linked. Link an issue in the Development section of the PR (or add Fixes #12345 to the description). For a same-org cross-repo issue, add Fixes open-metadata/<repo>#123 to the description.

The fields live on the linked issue in the Shipping project (open the issue → right sidebar → Projects). After you set them, re-run this check (or push a commit) — issue/project changes do not re-trigger it automatically.

Maintainers can bypass this check by adding the skip-pr-checks label.

@github-actions github-actions Bot added backend safe to test Add this label to run secure Github workflows on PRs labels Jul 8, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR brings Dashboard Data Model column search/tag/glossary filtering to parity with Tables by moving the tree-pruning + tag-resolution logic into a shared backend utility and wiring new query params through the Dashboard Data Model /columns/search endpoints, with the UI updated to use server-side filtering instead of client-side per-page filtering.

Changes:

  • Backend: Extract column search + tag/glossary filtering into ColumnSearchUtil and apply it to both Table and Dashboard Data Model column search paths.
  • Backend API: Add tags, glossaryTerms, sortBy, and sortOrder query params to Dashboard Data Model /columns/search endpoints (by-id and by-fqn).
  • Frontend: Update Data Model “Model” tab to use server-side tag/glossary filtering and auto-expand ancestors of matches; add integration coverage for cross-page tag filtering.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
openmetadata-ui/src/main/resources/ui/src/rest/dataModelsAPI.ts Adds tags/glossaryTerms params to Data Model column search request typing.
openmetadata-ui/src/main/resources/ui/src/components/Dashboard/DataModel/DataModels/ModelTab/ModelTab.component.tsx Switches column tag/glossary filtering to server-side search and auto-expands match ancestors.
openmetadata-service/src/main/java/org/openmetadata/service/util/ColumnSearchUtil.java New shared util for column-tree pruning, sorting, flattening, and tag resolution for filtering.
openmetadata-service/src/main/java/org/openmetadata/service/resources/datamodels/DashboardDataModelResource.java Adds tag/glossary + sort query params to both Data Model column search endpoints and parses them.
openmetadata-service/src/main/java/org/openmetadata/service/resources/databases/TableResource.java Updates ColumnTagFilter import to the shared util type.
openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TableRepository.java Delegates column pruning/tag filtering logic to ColumnSearchUtil (no intended behavior change).
openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DashboardDataModelRepository.java Replaces flat search with server-side tree pruning + tag-resolution across all pages (on deep-copied tree).
openmetadata-integration-tests/src/test/java/org/openmetadata/it/tests/DashboardDataModelResourceIT.java Adds integration test asserting tag filtering finds matches beyond the first page (by-fqn and by-id).

@sonika-shah
sonika-shah force-pushed the improvement/datamodel-column-tag-filter branch from d406834 to 134b4fc Compare July 8, 2026 17:34
Copilot AI review requested due to automatic review settings July 8, 2026 17:34
@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Jest test Coverage

UI tests summary

Lines Statements Branches Functions
Coverage: 63%
63.59% (72576/114117) 46.68% (42194/90372) 48.05% (12998/27047)

…Dashboard Data Models

Dashboard Data Models paginate their columns server-side (PAGE_SIZE_LARGE)
but the Tags/Glossary column filter ran client-side over the loaded page
only, so a tag applied to a column on a later page could not be found —
the same cross-page bug that #25063 fixed for Tables (#29324), which never
covered data models.

Backend:
- Extract the shared column search + tag/glossary filtering from
  TableRepository into ColumnSearchUtil (pruneColumnsToMatches,
  columnComparator, resolveColumnTagsForFilter, ColumnTagFilter). Both
  Table and DashboardDataModel operate on the same Column tree.
- Add tags/glossaryTerms (plus sortBy/sortOrder) to both DashboardDataModel
  /columns/search endpoints and resolve direct + glossary-derived tags
  server-side, pruning the tree to matched ancestor paths across all pages.
- Data model text search now returns the nested tree (matched column under
  its ancestors) instead of a flat list, consistent with Tables. Search
  matches name/displayName only, matching the Table endpoint.

Frontend (ModelTab):
- Replace the client-side useTreeTagFilter with a server-side filter that
  calls searchDataModelColumnsByFQN with tags/glossaryTerms, resets to
  page 1 on change, sources filter options from the full entity columns,
  and auto-expands ancestors of matches.

Tests:
- Integration test asserting the tag filter finds a column tagged on a
  later page (by-fqn and by-id).
@sonika-shah
sonika-shah force-pushed the improvement/datamodel-column-tag-filter branch from 134b4fc to 721f7ec Compare July 8, 2026 17:35

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Copilot AI review requested due to automatic review settings July 8, 2026 17:37
@gitar-bot

gitar-bot Bot commented Jul 8, 2026

Copy link
Copy Markdown

Reviewing your code

Code Review 🚫 Blocked 1 resolved / 3 findings

Implements server-side column filtering for Dashboard Data Models using a new shared utility, ensuring consistency with existing Table schemas. Findings include redundant CSV parsing logic in resources and an accidental commit of local configuration settings that must be resolved.

🚨 Bug: Accidental local-dev DB/search config committed to openmetadata.yaml

📄 conf/openmetadata.yaml:329 📄 conf/openmetadata.yaml:334 📄 conf/openmetadata.yaml:557

The delta commit changes conf/openmetadata.yaml defaults in ways unrelated to this PR (server-side datamodel column filtering) and that appear to be leaked local developer configuration:

  1. driverClass default flipped from com.mysql.cj.jdbc.Driver to org.postgresql.Driver.
  2. The JDBC url default scheme flipped from mysql to postgresql, the port from 3306 to 5432, AND — most importantly — the DB_HOST default changed from localhost to a hardcoded private IP 192.168.29.109 (a developer's LAN machine). Shipping this means any deployment relying on the DB_HOST default will try to connect to 192.168.29.109.
  3. elasticsearch.searchType default flipped from "elasticsearch" to "opensearch".

These change the out-of-the-box behavior for every consumer of the default config and are almost certainly an accidental commit of a local environment. Revert conf/openmetadata.yaml entirely so this PR only contains the datamodel column-filter changes.

Revert the unrelated openmetadata.yaml default changes (driverClass, JDBC url/host, searchType) back to their original values; drop the hardcoded 192.168.29.109 host.
driverClass: ${DB_DRIVER_CLASS:-com.mysql.cj.jdbc.Driver}
...
url: jdbc:${DB_SCHEME:-mysql}://${DB_HOST:-localhost}:${DB_PORT:-3306}/${OM_DATABASE:-openmetadata_db}?${DB_PARAMS:-allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC}
...
searchType: ${SEARCH_TYPE:- "elasticsearch"}
💡 Quality: Duplicated tag-filter CSV parsing in two resources

📄 openmetadata-service/src/main/java/org/openmetadata/service/resources/datamodels/DashboardDataModelResource.java:1018-1032 📄 openmetadata-service/src/main/java/org/openmetadata/service/resources/databases/TableResource.java:2203-2217

parseColumnTagFilters and parseFqnCsv are now duplicated verbatim (with a slightly different null-handling style) in both DashboardDataModelResource and TableResource. Since the PR already introduces the shared ColumnSearchUtil/ColumnTagFilter, consider adding a static factory such as ColumnTagFilter.fromCsv(String tags, String glossaryTerms) in ColumnSearchUtil and having both resources delegate to it. This keeps the two entities consistent (the stated goal of the PR) and avoids future divergence in parsing semantics.

Centralize CSV parsing so both resources delegate to ColumnSearchUtil.
// In ColumnSearchUtil / ColumnTagFilter:
public static ColumnTagFilter fromCsv(String tags, String glossaryTerms) {
  return new ColumnTagFilter(parseFqnCsv(tags), parseFqnCsv(glossaryTerms));
}
private static Set<String> parseFqnCsv(String csv) {
  if (csv == null || csv.isBlank()) return Set.of();
  return Arrays.stream(csv.split(","))
      .map(String::trim).filter(s -> !s.isEmpty())
      .collect(Collectors.toSet());
}
✅ 1 resolved
Bug: getExpandAllKeysToDepth imported from wrong module

📄 openmetadata-ui/src/main/resources/ui/src/components/Dashboard/DataModel/DataModels/ModelTab/ModelTab.component.tsx:48-51
ModelTab imports getExpandAllKeysToDepth from ../../../../../utils/TableUtils, but that function is defined and exported in TablePureUtils.ts (line 501), not in TableUtils.tsx. A grep of TableUtils.tsx shows it exports getTableExpandableConfig but neither exports getExpandAllKeysToDepth nor re-exports it from TablePureUtils. The analogous SchemaTable.component.tsx correctly imports getExpandAllKeysToDepth from TablePureUtils. As written, this import resolves to undefined, causing a TS no exported member error / runtime getExpandAllKeysToDepth is not a function when the auto-expand effect runs (line 247). Move the import to the existing TablePureUtils import block.

🤖 Prompt for agents
Code Review: Implements server-side column filtering for Dashboard Data Models using a new shared utility, ensuring consistency with existing Table schemas. Findings include redundant CSV parsing logic in resources and an accidental commit of local configuration settings that must be resolved.

1. 💡 Quality: Duplicated tag-filter CSV parsing in two resources
   Files: openmetadata-service/src/main/java/org/openmetadata/service/resources/datamodels/DashboardDataModelResource.java:1018-1032, openmetadata-service/src/main/java/org/openmetadata/service/resources/databases/TableResource.java:2203-2217

   `parseColumnTagFilters` and `parseFqnCsv` are now duplicated verbatim (with a slightly different null-handling style) in both `DashboardDataModelResource` and `TableResource`. Since the PR already introduces the shared `ColumnSearchUtil`/`ColumnTagFilter`, consider adding a static factory such as `ColumnTagFilter.fromCsv(String tags, String glossaryTerms)` in `ColumnSearchUtil` and having both resources delegate to it. This keeps the two entities consistent (the stated goal of the PR) and avoids future divergence in parsing semantics.

   Fix (Centralize CSV parsing so both resources delegate to ColumnSearchUtil.):
   // In ColumnSearchUtil / ColumnTagFilter:
   public static ColumnTagFilter fromCsv(String tags, String glossaryTerms) {
     return new ColumnTagFilter(parseFqnCsv(tags), parseFqnCsv(glossaryTerms));
   }
   private static Set<String> parseFqnCsv(String csv) {
     if (csv == null || csv.isBlank()) return Set.of();
     return Arrays.stream(csv.split(","))
         .map(String::trim).filter(s -> !s.isEmpty())
         .collect(Collectors.toSet());
   }

2. 🚨 Bug: Accidental local-dev DB/search config committed to openmetadata.yaml
   Files: conf/openmetadata.yaml:329, conf/openmetadata.yaml:334, conf/openmetadata.yaml:557

   The delta commit changes `conf/openmetadata.yaml` defaults in ways unrelated to this PR (server-side datamodel column filtering) and that appear to be leaked local developer configuration:
   
   1. `driverClass` default flipped from `com.mysql.cj.jdbc.Driver` to `org.postgresql.Driver`.
   2. The JDBC `url` default scheme flipped from `mysql` to `postgresql`, the port from `3306` to `5432`, AND — most importantly — the `DB_HOST` default changed from `localhost` to a hardcoded private IP `192.168.29.109` (a developer's LAN machine). Shipping this means any deployment relying on the `DB_HOST` default will try to connect to `192.168.29.109`.
   3. `elasticsearch.searchType` default flipped from `"elasticsearch"` to `"opensearch"`.
   
   These change the out-of-the-box behavior for every consumer of the default config and are almost certainly an accidental commit of a local environment. Revert `conf/openmetadata.yaml` entirely so this PR only contains the datamodel column-filter changes.

   Fix (Revert the unrelated openmetadata.yaml default changes (driverClass, JDBC url/host, searchType) back to their original values; drop the hardcoded 192.168.29.109 host.):
   driverClass: ${DB_DRIVER_CLASS:-com.mysql.cj.jdbc.Driver}
   ...
   url: jdbc:${DB_SCHEME:-mysql}://${DB_HOST:-localhost}:${DB_PORT:-3306}/${OM_DATABASE:-openmetadata_db}?${DB_PARAMS:-allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC}
   ...
   searchType: ${SEARCH_TYPE:- "elasticsearch"}

Options

Display: compact → Showing less information.

Comment with these commands to change the behavior for this request:

Compact
gitar display:verbose         

Was this helpful? React with 👍 / 👎 | Gitar

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Comments suppressed due to low confidence (1)

openmetadata-ui/src/main/resources/ui/src/components/Dashboard/DataModel/DataModels/ModelTab/ModelTab.component.tsx:517

  • _expandedRowKeys is updated (deep-link + auto-expand effect), but the table isn't controlled with expandedRowKeys/onExpand. As a result, deep links and the new auto-expansion for search/tag filters won't actually expand ancestors, which can hide nested matches.
        expandable={{
          ...getTableExpandableConfig<Column>(false, 'text-link-color'),
          rowExpandable: (record) => !isEmpty(record.children),
        }}

Comment thread openmetadata-ui/src/main/resources/ui/src/rest/dataModelsAPI.ts
- ColumnSearchUtil: match description in column text search (restores the
  data-model behavior and aligns Table with its documented search) and add
  ColumnTagFilter.fromCsv so both resources share one CSV parser
- TableResource/DashboardDataModelResource: delegate to ColumnTagFilter.fromCsv,
  drop the duplicated parseColumnTagFilters/parseFqnCsv helpers
- ModelTab: guard the table onChange to filter actions only so client-side
  sort no longer resets pagination
Copilot AI review requested due to automatic review settings July 8, 2026 17:45

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 2 comments.

Comment on lines +116 to +126
private static boolean columnTextMatches(Column column, String searchTerm) {
boolean nameMatches =
column.getName() != null && column.getName().toLowerCase().contains(searchTerm);
boolean displayNameMatches =
column.getDisplayName() != null
&& column.getDisplayName().toLowerCase().contains(searchTerm);
boolean descriptionMatches =
column.getDescription() != null
&& column.getDescription().toLowerCase().contains(searchTerm);
return nameMatches || displayNameMatches || descriptionMatches;
}
Comment on lines 232 to 235
const tagFilter = useMemo(() => {
const tags = getAllTags(data ?? []);
const tags = getAllTags([...(dataModel?.columns ?? []), ...(data ?? [])]);

return groupBy(uniqBy(tags, 'value'), (tag) => tag.source) as Record<
Copilot AI review requested due to automatic review settings July 8, 2026 17:48

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Comment on lines +122 to +125
boolean descriptionMatches =
column.getDescription() != null
&& column.getDescription().toLowerCase().contains(searchTerm);
return nameMatches || displayNameMatches || descriptionMatches;
@gitar-bot

gitar-bot Bot commented Jul 8, 2026

Copy link
Copy Markdown
Code Review ✅ Approved 3 resolved / 3 findings

Implements server-side column tag and glossary filtering for Dashboard Data Models, addressing the cross-page search bug and consolidating logic into a shared utility. No issues were found.

✅ 3 resolved
Bug: getExpandAllKeysToDepth imported from wrong module

📄 openmetadata-ui/src/main/resources/ui/src/components/Dashboard/DataModel/DataModels/ModelTab/ModelTab.component.tsx:48-51
ModelTab imports getExpandAllKeysToDepth from ../../../../../utils/TableUtils, but that function is defined and exported in TablePureUtils.ts (line 501), not in TableUtils.tsx. A grep of TableUtils.tsx shows it exports getTableExpandableConfig but neither exports getExpandAllKeysToDepth nor re-exports it from TablePureUtils. The analogous SchemaTable.component.tsx correctly imports getExpandAllKeysToDepth from TablePureUtils. As written, this import resolves to undefined, causing a TS no exported member error / runtime getExpandAllKeysToDepth is not a function when the auto-expand effect runs (line 247). Move the import to the existing TablePureUtils import block.

Bug: Accidental local-dev DB/search config committed to openmetadata.yaml

📄 conf/openmetadata.yaml:329 📄 conf/openmetadata.yaml:334 📄 conf/openmetadata.yaml:557
The delta commit changes conf/openmetadata.yaml defaults in ways unrelated to this PR (server-side datamodel column filtering) and that appear to be leaked local developer configuration:

  1. driverClass default flipped from com.mysql.cj.jdbc.Driver to org.postgresql.Driver.
  2. The JDBC url default scheme flipped from mysql to postgresql, the port from 3306 to 5432, AND — most importantly — the DB_HOST default changed from localhost to a hardcoded private IP 192.168.29.109 (a developer's LAN machine). Shipping this means any deployment relying on the DB_HOST default will try to connect to 192.168.29.109.
  3. elasticsearch.searchType default flipped from "elasticsearch" to "opensearch".

These change the out-of-the-box behavior for every consumer of the default config and are almost certainly an accidental commit of a local environment. Revert conf/openmetadata.yaml entirely so this PR only contains the datamodel column-filter changes.

Quality: Duplicated tag-filter CSV parsing in two resources

📄 openmetadata-service/src/main/java/org/openmetadata/service/resources/datamodels/DashboardDataModelResource.java:1018-1032 📄 openmetadata-service/src/main/java/org/openmetadata/service/resources/databases/TableResource.java:2203-2217
parseColumnTagFilters and parseFqnCsv are now duplicated verbatim (with a slightly different null-handling style) in both DashboardDataModelResource and TableResource. Since the PR already introduces the shared ColumnSearchUtil/ColumnTagFilter, consider adding a static factory such as ColumnTagFilter.fromCsv(String tags, String glossaryTerms) in ColumnSearchUtil and having both resources delegate to it. This keeps the two entities consistent (the stated goal of the PR) and avoids future divergence in parsing semantics.

Options

Display: compact → Showing less information.

Comment with these commands to change the behavior for this request:

Compact
gitar display:verbose         

Was this helpful? React with 👍 / 👎 | Gitar

@sonarqubecloud

sonarqubecloud Bot commented Jul 8, 2026

Copy link
Copy Markdown

@sonarqubecloud

sonarqubecloud Bot commented Jul 8, 2026

Copy link
Copy Markdown

@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

🔴 Playwright Results — 1 failure(s), 27 flaky

✅ 4527 passed · ❌ 1 failed · 🟡 27 flaky · ⏭️ 38 skipped

Shard Passed Failed Flaky Skipped
🟡 Shard 1 423 0 4 16
🔴 Shard 2 816 1 9 4
🟡 Shard 3 820 0 1 12
🟡 Shard 4 819 0 3 5
🟡 Shard 5 867 0 2 0
🟡 Shard 6 782 0 8 1

Genuine Failures (failed on all attempts)

Features/ContextCenterArticles.spec.ts › Article listing search filters, clears, and shows empty state (shard 2)
Error: �[2mexpect(�[22m�[31mlocator�[39m�[2m).�[22mtoBeVisible�[2m(�[22m�[2m)�[22m failed

Locator: getByTestId('knowledge-page-listing').getByTestId('knowledge-card-CC Article 42ec12a1')
Expected: visible
Timeout: 15000ms
Error: element(s) not found

Call log:
�[2m  - Expect "toBeVisible" with timeout 15000ms�[22m
�[2m  - waiting for getByTestId('knowledge-page-listing').getByTestId('knowledge-card-CC Article 42ec12a1')�[22m

🟡 27 flaky test(s) (passed on retry)
  • Flow/TestConnectionModal.spec.ts › success state shows Done button and hides Edit Connection and Retry Test (shard 1, 2 retries)
  • Flow/Tour.spec.ts › Tour should work from help section (shard 1, 2 retries)
  • Pages/Lineage/LineageRightPanel.spec.ts › Verify custom properties tab IS visible for supported type: metric (shard 1, 1 retry)
  • Flow/SearchRBAC.spec.ts › the browse tree only shows the asset-type categories a user can access (shard 1, 1 retry)
  • Features/BulkImport.spec.ts › Database (shard 2, 1 retry)
  • Features/BulkImport.spec.ts › Database Schema (shard 2, 1 retry)
  • Features/ContextCenterArticles.spec.ts › Article list cards, recently viewed widget, and pagination work (shard 2, 1 retry)
  • Features/ContextCenterMemories.spec.ts › clearing search restores the unfiltered list (shard 2, 1 retry)
  • Features/ContextCenterMemories.spec.ts › closing the modal removes ?memory= param from the URL (shard 2, 1 retry)
  • Features/ContextCenterMemories.spec.ts › adding a linked asset in edit mode shows entity badge on the row (shard 2, 1 retry)
  • Features/ContextCenterMemories.spec.ts › ArrowDown + Enter keyboard navigation selects the linked table result (shard 2, 1 retry)
  • Features/ContextCenterPermission.spec.ts › user with deleteAll permission can see delete action but not restore action on an archived document, and can delete it (shard 2, 1 retry)
  • Features/DataQuality/ProfilerIngestionForm.spec.ts › switching STATIC → DYNAMIC does not leak static-only fields (shard 2, 1 retry)
  • Features/SearchExport.spec.ts › Export queues a background job and downloads from the jobs tray (shard 3, 1 retry)
  • Features/TestSuitePipelineRedeploy.spec.ts › Re-deploy all test-suite ingestion pipelines (shard 4, 1 retry)
  • Features/UserProfileOnlineStatus.spec.ts › Should not show online status for inactive users (shard 4, 1 retry)
  • Pages/CustomProperties.spec.ts › Time (shard 4, 1 retry)
  • Pages/Domains.spec.ts › Domain Rbac (shard 5, 1 retry)
  • Pages/ExplorePageRightPanel_KnowledgeCenter.spec.ts › Should remove user owner for knowledgeCenter (shard 5, 1 retry)
  • Pages/ExplorePageRightPanel.spec.ts › Should NOT show restricted edit buttons for Data Steward for searchIndex (shard 6, 1 retry)
  • Pages/GlossaryImportExport.spec.ts › Import partial success - some terms pass, some fail (shard 6, 1 retry)
  • Pages/GlossaryImportExport.spec.ts › Glossary CSV import rejects unknown relation type (shard 6, 1 retry)
  • Pages/Lineage/LineageFilters.spec.ts › Verify Impact Analysis service filter selection (shard 6, 1 retry)
  • Pages/Lineage/LineageRightPanel.spec.ts › Verify custom properties tab is NOT visible for pipelineService in platform lineage (shard 6, 1 retry)
  • Pages/Lineage/LineageRightPanel.spec.ts › Verify custom properties tab is NOT visible for apiService in platform lineage (shard 6, 1 retry)
  • Pages/TagPageRightPanel.spec.ts › Should open right panel when clicking asset in tag assets page (shard 6, 1 retry)
  • Pages/TestSuite.spec.ts › Logical TestSuite (shard 6, 1 retry)

📦 Download artifacts

How to debug locally
# Download playwright-test-results-<shard> artifact and unzip
npx playwright show-trace path/to/trace.zip    # view trace

@sonika-shah
sonika-shah marked this pull request as draft July 28, 2026 12:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backend safe to test Add this label to run secure Github workflows on PRs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants