Skip to content

refactor(ui): migrate TagsForm from antd Form to React Hook Form + Autocomplete#29776

Open
Rohit0301 wants to merge 1 commit into
mainfrom
migrate-tagsform-to-hookform
Open

refactor(ui): migrate TagsForm from antd Form to React Hook Form + Autocomplete#29776
Rohit0301 wants to merge 1 commit into
mainfrom
migrate-tagsform-to-hookform

Conversation

@Rohit0301

@Rohit0301 Rohit0301 commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Describe your changes:

I worked on migrating the TagsForm component (used for creating/editing Tags and Classifications) from the legacy antd Form/FormInstance pattern to React Hook Form, following the AddDomainForm reference pattern exactly. The owner and domain pickers were switched from MUIUserTeamSelect / DOMAIN_SELECT_MUI to Autocomplete-based USER_TEAM_SELECT_INPUT / DOMAIN_SELECT fields with async search.

Type of change:

  • Improvement

High-level design:

TagsForm.tsx — Replaced antd Form with HookForm from @openmetadata/ui-core-components. Added async user/team and domain fetch logic (debounced, mirrors AddDomainForm). Description now uses FormField + RichTextEditor instead of generateFormFields. A submitRef prop allows the external Save buttons in SlideoutMenu.Footer to programmatically trigger validated form submission (submitRef.current = () => form.handleSubmit(handleSave)()).

tagFormFields.tsx — All _MUI field type variants replaced with RHF core-components equivalents (TEXT, ICON_PICKER, COLOR_PICKER, SWITCH). Owner/domain fields now accept options/onFocus/onSearchChange props. FieldProp and FieldTypes imported from @openmetadata/ui-core-components instead of the legacy local interface. name paths changed from antd NamePath arrays to RHF dot-notation strings.

TagsPage.interface.ts — Added TagFormValues, TagFormSelectItem, TAG_FORM_DEFAULTS. formRef: FormInstance replaced with form: UseFormReturn<TagFormValues> + optional submitRef across all three prop interfaces.

ClassificationFormDrawer / TagFormDrawer — Each creates a submitRef ref, passes it to TagsForm, and wires the Save button to submitRef.current().

TagsPage.tsxuseForm() from antd/lib/form/Form replaced with useForm<TagFormValues>() from react-hook-form; resetFields()reset().

Tests:

Use cases covered

  • Add Classification drawer: name, display name, description, owners, domains, mutually exclusive toggle
  • Add/Edit Tag drawer: all fields including icon, color, disabled toggle, owner, domain pre-population

Unit tests

  • Updated TagsForm.test.tsx, ClassificationFormDrawer.test.tsx, TagFormDrawer.test.tsx to use RHF useForm harness instead of antd Form.useForm
  • Rewrote tagFormFields.test.tsx to assert against the new RHF field configs

Backend integration tests

  • Not applicable (no backend API changes).

Ingestion integration tests

  • Not applicable (no ingestion changes).

Playwright (UI) tests

  • Not applicable (no new UI interactions; existing Playwright tests cover the Tags page flow).

Manual testing performed

TypeScript compilation passes with zero errors (npx tsc --noEmit).

UI screen recording / screenshots:

Not applicable.

Checklist:

  • I have read the CONTRIBUTING document.
  • My PR title is Fixes <issue-number>: <short explanation>
  • My PR is linked to a GitHub issue via Fixes #<issue-number> above.
  • I have commented on my code, particularly in hard-to-understand areas.
  • For JSON Schema changes: I updated the migration scripts or explained why it is not needed.
  • For UI changes: I attached a screen recording and/or screenshots above.
  • I have added tests (unit / integration / Playwright as applicable) and listed them above.

Greptile Summary

This PR migrates TagsForm and its related drawers from the legacy Ant Design Form/FormInstance pattern to React Hook Form, following the AddDomainForm reference pattern. Owner and domain selectors are switched from MUI variants to autocomplete-based USER_TEAM_SELECT_INPUT / DOMAIN_SELECT fields with async search and debounce.

  • TagsForm.tsx: Replaces antd Form with HookForm; adds async user/team and domain fetch logic with debounce; introduces an external submitRef pattern so the Save button outside the form can trigger validated submission; description field is now wired directly via FormField + RichTextEditor.
  • tagFormFields.tsx: All _MUI field type variants replaced with RHF core-components equivalents; getDescriptionField removed; owner and domain fields now accept options/onFocus/onSearchChange props; field name paths changed from antd NamePath arrays to RHF dot-notation strings.
  • TagsPage.interface.ts / TagsPage.tsx: FormInstance replaced with UseFormReturn<TagFormValues>; resetFields() calls updated to reset(); new TagFormValues, TagFormSelectItem, and TAG_FORM_DEFAULTS types added.

Confidence Score: 3/5

The migration is generally sound but has a behaviour change in owner multi-select that could silently allow more owners than entity rules permit, and an import ordering issue that will break CI.

The owner field collapses two independent entity-rule flags into a single OR condition, which over-permits multi-select when only one flag is true. A redundant form.reset() inside handleSave also risks interfering with the isSubmitSuccessful flag that drives the description-editor remount. The import order in TagsForm.tsx will fail the CI organize-imports lint check. The external submitRef pattern and RHF wiring are otherwise well-structured.

openmetadata-ui/src/main/resources/ui/src/pages/TagsPage/TagsForm.tsx — owner multi-select logic, redundant reset, and import order; openmetadata-ui/src/main/resources/ui/src/pages/TagsPage/tagFormFields.tsx — dead initialValue parameter in getDisabledField.

Important Files Changed

Filename Overview
openmetadata-ui/src/main/resources/ui/src/pages/TagsPage/TagsForm.tsx Core form component migrated from antd to RHF + HookForm; introduces async owner/domain fetching with debounce, an external submitRef pattern, and a descriptionEditorKey mechanism — but has an import order violation (CI breakage risk), a redundant form.reset() inside handleSave that can confuse isSubmitSuccessful, and conflates canAddMultipleUserOwners/canAddMultipleTeamOwner into a single multiple flag that can over-permit owner selection.
openmetadata-ui/src/main/resources/ui/src/pages/TagsPage/tagFormFields.tsx Field config functions migrated to RHF FieldTypes; getDescriptionField removed; getDisabledField accepts a required initialValue parameter that it never uses (_initialValue).
openmetadata-ui/src/main/resources/ui/src/pages/TagsPage/TagsPage.interface.ts Adds TagFormValues, TagFormSelectItem, TAG_FORM_DEFAULTS; replaces FormInstance with UseFormReturn; adds optional submitRef — clean, well-typed additions.
openmetadata-ui/src/main/resources/ui/src/pages/TagsPage/TagsPage.tsx Switches from antd useForm to react-hook-form useForm with TAG_FORM_DEFAULTS; replaces resetFields() with reset() in all close/open handlers — straightforward and correct.
openmetadata-ui/src/main/resources/ui/src/pages/TagsPage/ClassificationFormDrawer.tsx Adds submitRef and wires Save button to submitRef.current() instead of formRef.submit(); clean implementation of the external submit pattern.
openmetadata-ui/src/main/resources/ui/src/pages/TagsPage/TagFormDrawer.tsx Same submitRef pattern as ClassificationFormDrawer; correctly wired, no issues.
openmetadata-ui/src/main/resources/ui/src/pages/TagsPage/tagFormFields.test.tsx Rewrites test assertions to match new RHF FieldTypes; removes obsolete full-shape snapshot tests in favour of targeted property checks — appropriately trimmed and aligned with the new API.

Sequence Diagram

%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
    participant User
    participant Drawer as ClassificationFormDrawer / TagFormDrawer
    participant TagsForm
    participant RHF as React Hook Form
    participant API

    User->>Drawer: clicks Save button
    Drawer->>TagsForm: submitRef.current()
    TagsForm->>RHF: form.handleSubmit(handleSave)()
    RHF->>RHF: run validation
    alt validation fails
        RHF-->>TagsForm: show field errors
    else validation passes
        RHF->>TagsForm: handleSave(formData)
        TagsForm->>TagsForm: map owners/domains to EntityReference
        TagsForm->>API: onSubmit(submitData)
        API-->>TagsForm: success
        TagsForm->>RHF: form.reset(TAG_FORM_DEFAULTS) [redundant]
        TagsForm-->>RHF: handleSave resolves
        RHF->>RHF: "isSubmitSuccessful = true"
        RHF-->>TagsForm: effect increments descriptionEditorKey
        API-->>Drawer: onSubmit resolves
        Drawer->>RHF: tagForm.reset() via handleDrawerClose
        Drawer->>User: drawer closes
    end
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
    participant User
    participant Drawer as ClassificationFormDrawer / TagFormDrawer
    participant TagsForm
    participant RHF as React Hook Form
    participant API

    User->>Drawer: clicks Save button
    Drawer->>TagsForm: submitRef.current()
    TagsForm->>RHF: form.handleSubmit(handleSave)()
    RHF->>RHF: run validation
    alt validation fails
        RHF-->>TagsForm: show field errors
    else validation passes
        RHF->>TagsForm: handleSave(formData)
        TagsForm->>TagsForm: map owners/domains to EntityReference
        TagsForm->>API: onSubmit(submitData)
        API-->>TagsForm: success
        TagsForm->>RHF: form.reset(TAG_FORM_DEFAULTS) [redundant]
        TagsForm-->>RHF: handleSave resolves
        RHF->>RHF: "isSubmitSuccessful = true"
        RHF-->>TagsForm: effect increments descriptionEditorKey
        API-->>Drawer: onSubmit resolves
        Drawer->>RHF: tagForm.reset() via handleDrawerClose
        Drawer->>User: drawer closes
    end
Loading

Comments Outside Diff (1)

  1. openmetadata-ui/src/main/resources/ui/src/pages/TagsPage/tagFormFields.tsx, line 133-139 (link)

    P2 initialValue parameter accepted but silently dropped

    getDisabledField renames the initialValue parameter to _initialValue and never uses it, yet callers are still forced to pass a value. The disabled switch now reads its initial state purely from form.reset(), so the parameter can be removed from the signature. Keeping the parameter in the public API is misleading and will confuse future callers.

Reviews (1): Last reviewed commit: "refactor(ui): migrate TagsForm from antd..." | Re-trigger Greptile

Greptile also left 3 inline comments on this PR.

…tocomplete

Replace the antd Form/FormInstance pattern with react-hook-form (UseFormReturn)
and swap MUI owner/domain pickers for Autocomplete-based USER_TEAM_SELECT_INPUT
and DOMAIN_SELECT fields, following the AddDomainForm pattern exactly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Rohit0301 Rohit0301 requested a review from a team as a code owner July 6, 2026 12:09
@github-actions

github-actions Bot commented Jul 6, 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 commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

@Rohit0301 Rohit0301 self-assigned this Jul 6, 2026
@Rohit0301 Rohit0301 added the safe to test Add this label to run secure Github workflows on PRs label Jul 6, 2026
Comment on lines +327 to +331
const submitData = {
...formData,
owners: owners.length ? owners : undefined,
domains: domainsData,
} as CreateClassification | CreateTag;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Bug: Create payload includes extraneous id:'' from form defaults

handleSave builds the submit payload with const submitData = { ...formData, owners, domains }. Because both forms are initialized with TAG_FORM_DEFAULTS, which sets id: '', formData.id is '' in create mode and is spread into submitData. This object is passed unchanged to createTag(...) / createClassification(...).

The generated CreateTag and CreateClassification interfaces have no id field, so id: '' is an extraneous property. The previous antd implementation only submitted registered Form.Item values, so no id was ever sent — this is a behavior regression. Sending id: '' risks a server-side validation error (empty string parsed as a UUID) or a silently created entity with an unexpected id, depending on backend leniency. Edit/patch flows are unaffected because convertToTagFormValues populates the real id and compare() produces no diff.

Strip id (and any other non-payload fields) before submitting in create mode.

Destructure id out of the form data so it is not included in the create payload.:

const handleSave = useCallback(
  async (formData: TagFormValues) => {
    const { id: _id, ...rest } = formData;
    const owners = (rest.owners ?? []).map(
      (item) => item.value as EntityReference
    );
    const domainItems = rest.domains ?? [];
    // ...compute domainsData from domainItems as before...
    const submitData = {
      ...rest,
      owners: owners.length ? owners : undefined,
      domains: domainsData,
    } as CreateClassification | CreateTag;
    // ...
  • Apply fix

Check the box to apply the fix or reply for a change | Was this helpful? React with 👍 / 👎

@gitar-bot

gitar-bot Bot commented Jul 6, 2026

Copy link
Copy Markdown
Code Review ⚠️ Changes requested 0 resolved / 1 findings

Migrates TagsForm to React Hook Form and modern Autocomplete components, but the create payload incorrectly includes an extraneous empty ID field from the form defaults.

⚠️ Bug: Create payload includes extraneous id:'' from form defaults

📄 openmetadata-ui/src/main/resources/ui/src/pages/TagsPage/TagsForm.tsx:327-331 📄 openmetadata-ui/src/main/resources/ui/src/pages/TagsPage/TagsForm.tsx:303-317 📄 openmetadata-ui/src/main/resources/ui/src/pages/TagsPage/TagsPage.interface.ts:56-63 📄 openmetadata-ui/src/main/resources/ui/src/pages/TagsPage/TagsPage.tsx:82-85 📄 openmetadata-ui/src/main/resources/ui/src/pages/TagsPage/TagsPage.tsx:374-379 📄 openmetadata-ui/src/main/resources/ui/src/pages/TagsPage/TagsPage.tsx:216-218

handleSave builds the submit payload with const submitData = { ...formData, owners, domains }. Because both forms are initialized with TAG_FORM_DEFAULTS, which sets id: '', formData.id is '' in create mode and is spread into submitData. This object is passed unchanged to createTag(...) / createClassification(...).

The generated CreateTag and CreateClassification interfaces have no id field, so id: '' is an extraneous property. The previous antd implementation only submitted registered Form.Item values, so no id was ever sent — this is a behavior regression. Sending id: '' risks a server-side validation error (empty string parsed as a UUID) or a silently created entity with an unexpected id, depending on backend leniency. Edit/patch flows are unaffected because convertToTagFormValues populates the real id and compare() produces no diff.

Strip id (and any other non-payload fields) before submitting in create mode.

Destructure `id` out of the form data so it is not included in the create payload.
const handleSave = useCallback(
  async (formData: TagFormValues) => {
    const { id: _id, ...rest } = formData;
    const owners = (rest.owners ?? []).map(
      (item) => item.value as EntityReference
    );
    const domainItems = rest.domains ?? [];
    // ...compute domainsData from domainItems as before...
    const submitData = {
      ...rest,
      owners: owners.length ? owners : undefined,
      domains: domainsData,
    } as CreateClassification | CreateTag;
    // ...
🤖 Prompt for agents
Code Review: Migrates TagsForm to React Hook Form and modern Autocomplete components, but the create payload incorrectly includes an extraneous empty ID field from the form defaults.

1. ⚠️ Bug: Create payload includes extraneous id:'' from form defaults
   Files: openmetadata-ui/src/main/resources/ui/src/pages/TagsPage/TagsForm.tsx:327-331, openmetadata-ui/src/main/resources/ui/src/pages/TagsPage/TagsForm.tsx:303-317, openmetadata-ui/src/main/resources/ui/src/pages/TagsPage/TagsPage.interface.ts:56-63, openmetadata-ui/src/main/resources/ui/src/pages/TagsPage/TagsPage.tsx:82-85, openmetadata-ui/src/main/resources/ui/src/pages/TagsPage/TagsPage.tsx:374-379, openmetadata-ui/src/main/resources/ui/src/pages/TagsPage/TagsPage.tsx:216-218

   `handleSave` builds the submit payload with `const submitData = { ...formData, owners, domains }`. Because both forms are initialized with `TAG_FORM_DEFAULTS`, which sets `id: ''`, `formData.id` is `''` in create mode and is spread into `submitData`. This object is passed unchanged to `createTag(...)` / `createClassification(...)`.
   
   The generated `CreateTag` and `CreateClassification` interfaces have no `id` field, so `id: ''` is an extraneous property. The previous antd implementation only submitted registered `Form.Item` values, so no `id` was ever sent — this is a behavior regression. Sending `id: ''` risks a server-side validation error (empty string parsed as a UUID) or a silently created entity with an unexpected id, depending on backend leniency. Edit/patch flows are unaffected because `convertToTagFormValues` populates the real id and `compare()` produces no diff.
   
   Strip `id` (and any other non-payload fields) before submitting in create mode.

   Fix (Destructure `id` out of the form data so it is not included in the create payload.):
   const handleSave = useCallback(
     async (formData: TagFormValues) => {
       const { id: _id, ...rest } = formData;
       const owners = (rest.owners ?? []).map(
         (item) => item.value as EntityReference
       );
       const domainItems = rest.domains ?? [];
       // ...compute domainsData from domainItems as before...
       const submitData = {
         ...rest,
         owners: owners.length ? owners : undefined,
         domains: domainsData,
       } as CreateClassification | CreateTag;
       // ...

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

Comment on lines +388 to +392
multiple:
entityRules.canAddMultipleUserOwners ||
entityRules.canAddMultipleTeamOwner,
options: userTeamOptions,
onFocus: handleUserTeamFocus,

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.

P1 Owner multi-select behavior regressed for asymmetric entity rules

The old owner field accepted separate multipleUser and multipleTeam flags, letting entity rules control them independently. The new implementation collapses those into a single multiple: canAddMultipleUserOwners || canAddMultipleTeamOwner. When canAddMultipleUserOwners is false but canAddMultipleTeamOwner is true, the OR produces true, so users can now pick multiple user-owners even though the entity rule forbids it. The inverse case (multiple users allowed, single team) is similarly broken. This silently over-permits owner selection for any entity whose rules have asymmetric user/team multiplicity.

Comment on lines +27 to +29
import { Suspense, useCallback, useEffect, useMemo, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { useWatch } from 'react-hook-form';

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.

P2 Import order violation — CI organize-imports will fail

react-hook-form is an external library import and should be grouped with the other external imports before react-i18next. The yarn organize-imports:cli check enforced by CI will reject this ordering.

Suggested change
import { Suspense, useCallback, useEffect, useMemo, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { useWatch } from 'react-hook-form';
import { Suspense, useCallback, useEffect, useMemo, useState } from 'react';
import { useWatch } from 'react-hook-form';
import { useTranslation } from 'react-i18next';

Comment on lines +333 to +338
try {
await onSubmit(submitData);
form.reset(TAG_FORM_DEFAULTS);
} catch {
// Parent will handle the error
}

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.

P2 Redundant form.reset() inside handleSave

onSubmit resolves only after the parent's handleTagFormSubmit (or handleClassificationFormSubmit) has already called handleTagDrawerClose()tagForm.reset(). The form.reset(TAG_FORM_DEFAULTS) below is therefore a second reset of the same form object. This also risks interfering with the isSubmitSuccessful flag that the descriptionEditorKey effect depends on — handleSubmit sets isSubmitSuccessful = true after handleSave resolves, but a prior form.reset() inside handleSave clears that flag. Removing the explicit reset here leaves the parent as the single, clear owner of post-submit cleanup.

Suggested change
try {
await onSubmit(submitData);
form.reset(TAG_FORM_DEFAULTS);
} catch {
// Parent will handle the error
}
try {
await onSubmit(submitData);
} catch {
// Parent will handle the error
}

@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

❌ UI Checkstyle Failed

❌ ESLint + Prettier + Organise Imports (src)

One or more source files have linting or formatting issues.

Affected files
  • openmetadata-ui/src/main/resources/ui/src/pages/TagsPage/TagsForm.tsx
    • openmetadata-ui/src/main/resources/ui/src/pages/TagsPage/TagsPage.tsx
    • openmetadata-ui/src/main/resources/ui/src/pages/TagsPage/tagFormFields.test.tsx

Fix locally (fast - only checks files changed in this branch):

make ui-checkstyle-changed

@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

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

✅ 4477 passed · ❌ 3 failed · 🟡 27 flaky · ⏭️ 50 skipped

Shard Passed Failed Flaky Skipped
🟡 Shard 1 437 0 5 16
🟡 Shard 2 819 0 5 8
🟡 Shard 3 799 0 2 7
🟡 Shard 4 809 0 7 5
🔴 Shard 5 861 1 1 0
🔴 Shard 6 752 2 7 14

Genuine Failures (failed on all attempts)

Pages/ExploreBrowse.spec.ts › service type drill-down disables unrelated roots and query-panel Clear resets it (shard 5)
�[31mTest timeout of 180000ms exceeded.�[39m
Pages/Tag.spec.ts › Create tag with domain (shard 6)
Error: �[2mexpect(�[22m�[31mlocator�[39m�[2m).�[22mtoBeVisible�[2m(�[22m�[2m)�[22m failed

Locator: locator('#tags_name_help')
Expected: visible
Timeout: 15000ms
Error: element(s) not found

Call log:
�[2m  - Expect "toBeVisible" with timeout 15000ms�[22m
�[2m  - waiting for locator('#tags_name_help')�[22m

Pages/Tags.spec.ts › Classification Page (shard 6)
Error: �[2mexpect(�[22m�[31mlocator�[39m�[2m).�[22mtoBeVisible�[2m(�[22m�[2m)�[22m failed

Locator: locator('#tags_name_help')
Expected: visible
Timeout: 15000ms
Error: element(s) not found

Call log:
�[2m  - Expect "toBeVisible" with timeout 15000ms�[22m
�[2m  - waiting for locator('#tags_name_help')�[22m

🟡 27 flaky test(s) (passed on retry)
  • Features/Glossary/GlossaryPagination.spec.ts › should check for nested glossary term search (shard 1, 1 retry)
  • Flow/TestConnectionModal.spec.ts › modal opens with gate card and capability checks sections (shard 1, 1 retry)
  • Pages/Lineage/LineageRightPanel.spec.ts › Verify custom properties tab IS visible for supported type: metric (shard 1, 1 retry)
  • Flow/SearchRBAC.spec.ts › User without permission (shard 1, 1 retry)
  • Flow/SearchRBAC.spec.ts › a dashboard-scoped user sees dashboards but never tables (shard 1, 2 retries)
  • Features/BulkEditEntity.spec.ts › Glossary Term (Nested) (shard 2, 1 retry)
  • Features/BulkImport.spec.ts › Database service (shard 2, 2 retries)
  • Features/BulkImport.spec.ts › Database Schema (shard 2, 1 retry)
  • Features/ContextCenterPermission.spec.ts › user with view-only permission cannot see restore or delete actions on an archived document (shard 2, 1 retry)
  • Features/Glossary/GlossaryHierarchy.spec.ts › should cancel move operation (shard 2, 1 retry)
  • Features/KnowledgeCenter.spec.ts › Knowledge Center page (shard 3, 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)
  • Flow/ApiServiceRest.spec.ts › add update and delete api service type REST (shard 4, 1 retry)
  • Pages/CustomProperties.spec.ts › Entity Reference (shard 4, 1 retry)
  • Pages/CustomProperties.spec.ts › Date (shard 4, 1 retry)
  • Pages/CustomProperties.spec.ts › Number (shard 4, 1 retry)
  • Pages/DataContracts.spec.ts › Contract Status badge should be visible on condition if Contract Tab is present/hidden by Persona (shard 4, 1 retry)
  • Pages/DataContractsSemanticRules.spec.ts › Validate Description Rule Is_Set (shard 4, 1 retry)
  • Pages/ExplorePageRightPanel_KnowledgeCenter.spec.ts › Should remove user owner for knowledgeCenter (shard 5, 1 retry)
  • Pages/ExplorePageRightPanel.spec.ts › Should allow Data Steward to edit tags for searchIndex (shard 6, 1 retry)
  • Pages/GlossaryImportExport.spec.ts › Import partial success - some terms pass, some fail (shard 6, 2 retries)
  • 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/Users.spec.ts › Reset Password for Data Consumer (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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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.

1 participant