Repository navigation
Fixes 34853: correct Governance forms and graph theme - #34854
Conversation
Remove unused task-page.style.less and Assignee.less, replace legacy spacing/typography classes with tw: utilities and Typography props, and make the schema field fade follow the active surface in dark mode.
Task title and assignee fields moved from antd to core Input/Autocomplete; update selectors to the new DOM (title input, combobox input, selected-item remove button, field hint error).
🔄 Playwright impact map auto-refreshedThis PR touched specs or UI source that changed the source→spec routing map. I regenerated What is this file? It is the auto-generated half of Playwright's PR planner. It routes "if source X changes, run specs Y" by walking spec imports and cross-referencing What if I want to regenerate locally instead? Run this before pushing your next change to skip the bot commit: python3 .github/scripts/generate_playwright_impact_map.py
git add .github/playwright/impact-map.generated.json
git commit --amend --no-edit # or a separate commit |
Prune the TasksUIFlow no-wait-for-selector baseline the Playwright selector update fixed, switch the schema enum Select to the non-deprecated value/onChange API, and use RegExp.exec for the palette token match.
The TasksUIFlow selector update removed four baselined waitForSelector calls; record the pruned count so the guardrail corpus test passes.
🚦 Removed from the merge queue —
|
… specs Incident reassignment, the incident assignee filter, the Tags task flow and the custom task form still drove antd selectors (.ant-select-selector, close-circle, .ant-form-item). Use the Autocomplete input, its selected-item remove button and label-based textbox locators, and prune the baselines these changes fixed.
🔄 Playwright impact map auto-refreshedThis PR touched specs or UI source that changed the source→spec routing map. I regenerated What is this file? It is the auto-generated half of Playwright's PR planner. It routes "if source X changes, run specs Y" by walking spec imports and cross-referencing What if I want to regenerate locally instead? Run this before pushing your next change to skip the bot commit: python3 .github/scripts/generate_playwright_impact_map.py
git add .github/playwright/impact-map.generated.json
git commit --amend --no-edit # or a separate commit |
|
| Count | Rule |
|---|---|
| 14 | react-hooks/exhaustive-deps |
| 7 | openmetadata-ui-patterns/no-non-adaptive-palette |
| 3 | openmetadata-imports/no-lower-layer-page-imports |
| 1 | openmetadata-imports/review-sequential-api-calls |
| 1 | openmetadata-imports/no-api-calls-in-iteration |
All findings
| Location | Rule | Message | |
|---|---|---|---|
| 🟡 | src/components/DataQuality/TestCaseStatusModal/TestCaseStatusModal.component.tsx:22:1 |
openmetadata-imports/no-lower-layer-page-imports |
Pages are route-level composition modules. Move the shared implementation/type to a lower layer instead of importing a page from here. |
| 🟡 | src/components/DataQuality/TestCaseStatusModal/TestCaseStatusModal.component.tsx:23:1 |
openmetadata-imports/no-lower-layer-page-imports |
Pages are route-level composition modules. Move the shared implementation/type to a lower layer instead of importing a page from here. |
| 🟡 | src/components/DataQuality/TestCaseStatusModal/TestCaseStatusModal.component.tsx:220:25 |
openmetadata-imports/review-sequential-api-calls |
Review these sequential API requests. If they are independent, start them together with Promise.all/Promise.allSettled; keep sequencing only when data-dependent |
| 🟡 | src/components/DataQuality/TestCaseStatusModal/TestCaseStatusModal.component.tsx:260:5 |
react-hooks/exhaustive-deps |
React Hook useMemo has missing dependencies: 'form' and 't'. Either include them or remove the dependency array. |
| 🟡 | src/components/DataQuality/TestCaseStatusModal/TestCaseStatusModal.component.tsx:282:6 |
react-hooks/exhaustive-deps |
React Hook useEffect has a missing dependency: 'fetchInitialAssign'. Either include it or remove the dependency array. |
| 🟡 | src/components/DataQuality/TestCaseStatusModal/TestCaseStatusModal.component.tsx:297:6 |
react-hooks/exhaustive-deps |
React Hook useEffect has a missing dependency: 'form'. Either include it or remove the dependency array. |
| 🟡 | src/components/IncidentManager/IncidentManager.component.tsx:22:1 |
openmetadata-imports/no-lower-layer-page-imports |
Pages are route-level composition modules. Move the shared implementation/type to a lower layer instead of importing a page from here. |
| 🟡 | src/components/OntologyExplorer/OntologyAuthoringInspector.tsx:190:9 |
react-hooks/exhaustive-deps |
The 'conceptMappings' logical expression could make the dependencies of useCallback Hook (at line 263) change on every render. To fix this, wrap the initializat |
| 🟡 | src/components/OntologyExplorer/OntologyImportExportModal.tsx:331:9 |
openmetadata-imports/no-api-calls-in-iteration |
Avoid issuing one API request per item. Fetch at the data owner, use a bulk endpoint, or use useQueries with an intentional concurrency policy. |
| 🟡 | src/components/OntologyExplorer/OntologyImportExportModal.tsx:721:27 |
openmetadata-ui-patterns/no-non-adaptive-palette |
Raw palette class "tw:bg-brand-50, tw:text-brand-700" is static — it does not flip in dark mode. Use the theme-adapting "utility-" variant (tw:bg-utility-brand- |
| 🟡 | src/components/OntologyExplorer/OntologyImportExportModal.tsx:734:23 |
openmetadata-ui-patterns/no-non-adaptive-palette |
Raw palette class "tw:border-warning-300, tw:bg-warning-50" is static — it does not flip in dark mode. Use the theme-adapting "utility-" variant (tw:border-util |
| 🟡 | src/components/OntologyExplorer/OntologyImportExportModal.tsx:756:23 |
openmetadata-ui-patterns/no-non-adaptive-palette |
Raw palette class "tw:bg-brand-50" is static — it does not flip in dark mode. Use the theme-adapting "utility-" variant (tw:bg-utility-brand-50) or a semantic t |
| 🟡 | src/components/OntologyExplorer/OntologyImportExportModal.tsx:758:35 |
openmetadata-ui-patterns/no-non-adaptive-palette |
Raw palette class "tw:text-brand-600" is static — it does not flip in dark mode. Use the theme-adapting "utility-" variant (tw:text-utility-brand-600) or a sema |
| 🟡 | src/components/OntologyExplorer/OntologyImportExportModal.tsx:759:28 |
openmetadata-ui-patterns/no-non-adaptive-palette |
Raw palette class "tw:text-brand-700" is static — it does not flip in dark mode. Use the theme-adapting "utility-" variant (tw:text-utility-brand-700) or a sema |
| 🟡 | src/components/OntologyExplorer/OntologyImportExportModal.tsx:782:25 |
openmetadata-ui-patterns/no-non-adaptive-palette |
Raw palette class "tw:bg-brand-50" is static — it does not flip in dark mode. Use the theme-adapting "utility-" variant (tw:bg-utility-brand-50) or a semantic t |
| 🟡 | src/components/OntologyExplorer/OntologyImportExportModal.tsx:783:29 |
openmetadata-ui-patterns/no-non-adaptive-palette |
Raw palette class "tw:text-brand-600" is static — it does not flip in dark mode. Use the theme-adapting "utility-" variant (tw:text-utility-brand-600) or a sema |
| 🟡 | src/components/OntologyExplorer/OntologyLibrary.tsx:153:5 |
react-hooks/exhaustive-deps |
React Hook useCallback has a missing dependency: 'canInstall'. Either include it or remove the dependency array. |
| 🟡 | src/components/OntologyExplorer/OntologyNodeRelationsContent.tsx:212:6 |
react-hooks/exhaustive-deps |
React Hook useCallback has a missing dependency: 'setTermDetails'. Either include it or remove the dependency array. |
| 🟡 | src/components/OntologyExplorer/hooks/useOntologyGraph.ts:1616:5 |
react-hooks/exhaustive-deps |
React Hook useMemo has a missing dependency: 'DATA_MODE_ASSET_TYPES'. Either include it or remove the dependency array. |
| 🟡 | src/components/OntologyExplorer/hooks/useOntologyGraph.ts:2057:6 |
react-hooks/exhaustive-deps |
React Hook useEffect has missing dependencies: 'containerRef', 'glossaryColorMap', 'graphData', 'inputNodes.length', 'onNodeClick', 'onNodeDoubleClick', 'onPane |
| 🟡 | src/components/OntologyExplorer/hooks/useOntologyGraph.ts:2318:6 |
react-hooks/exhaustive-deps |
React Hook useEffect has a missing dependency: 'suppressEdgeCheck'. Either include it or remove the dependency array. |
| 🟡 | src/pages/Glossary/GlossaryLeftPanel/GlossaryLeftPanel.component.tsx:89:6 |
react-hooks/exhaustive-deps |
React Hook useEffect has missing dependencies: 'glossaries' and 'selectedKey'. Either include them or remove the dependency array. |
| 🟡 | src/pages/TasksPage/RequestDescriptionPage/RequestDescriptionPage.tsx:201:6 |
react-hooks/exhaustive-deps |
React Hook useEffect has a missing dependency: 'getTaskAbout'. Either include it or remove the dependency array. |
| 🟡 | src/pages/TasksPage/RequestTagPage/RequestTagPage.tsx:195:6 |
react-hooks/exhaustive-deps |
React Hook useEffect has a missing dependency: 'getFieldPath'. Either include it or remove the dependency array. |
| 🟡 | src/pages/TasksPage/UpdateDescriptionPage/UpdateDescriptionPage.tsx:226:6 |
react-hooks/exhaustive-deps |
React Hook useEffect has missing dependencies: 'getDescription' and 'getTaskAbout'. Either include them or remove the dependency array. |
| 🟡 | src/pages/TasksPage/UpdateTagPage/UpdateTagPage.tsx:235:6 |
react-hooks/exhaustive-deps |
React Hook useEffect has missing dependencies: 'getFieldPath' and 'getTags'. Either include them or remove the dependency array. |
Fix locally (fast - only checks files changed in this branch):
make ui-checkstyle-changed
🚦 Removed from the merge queue —
|
🚦 Removed from the merge queue —
|
The reassign modal uses single-select Assignees; core Autocomplete hides its input while an item is selected, so remove the current assignee before searching for the new one.
The resolve transition requires testCaseFailureReason, rendered by the schema fields as a core Select. The spec still looked for .ant-select-selector, skipped the reason, and Save stopped at the required-field check. Pick the option by the Root Cause label and lower the positional-locator ratchet.
🚦 Removed from the merge queue —
|
🚦 Removed from the merge queue —
|
…heme-feedback # Conflicts: # .github/playwright/impact-map.generated.json
Code Review ✅ Approved 1 closed / 1 findings🟡 Medium risk · Migrating governance task forms and assignee controls to core components changes validation and selection behavior, which could block submissions or misassign tasks. Governance graph colors now resolve through semantic theme tokens while preserving stored palette keys and graph camera state; task forms migrated to core controls with payloads and assignee metadata retained. Relation colors, badges, canvas, and node borders follow the active theme in light and dark mode, and request/update description and tag forms maintain their behavior with core controls. No issues found. ✅ 1 closed✅ Bug: Built-in relation colors no longer match hex-keyed lookup maps
OptionsDisplay: compact → Counting what did not apply, without listing it. Comment with these commands to change the behavior for this request:
Was this helpful? React with 👍 / 👎 | Powered by Gitar — free for open source |
|



Describe your changes:
Fixes #34853
Correct Governance graph colors and migrate task forms to core controls. Collate's classification/editor companion is tracked in https://github.com/open-metadata/openmetadata-collate/pull/7182.
Type of change:
High-level design:
Resolve graph colors through semantic theme tokens while preserving stored palette keys and graph camera state. Use core form controls and cards while preserving task payloads and selected assignee metadata. Shared import, disabled-button, and editor-toolbar fixes remain covered by #34796.
Tests:
Use cases covered
Unit tests
Latest affected run: 94 suites / 592 tests passed at 092e981, including the selected-assignee native validation regression. Suites: TasksPage, OntologyExplorer, GlossaryLeftPanel, IncidentManager, and TestCaseStatusModal. Updated regression files: graphStyles.test.ts, OntologyExplorer.test.tsx, Assignees.test.tsx, TaskPayloadSchemaFields.test.tsx.
Measured affected-file coverage: 64.10% lines, 51.23% branches across the changed source files at 092e981. Coverage run includes TasksPage, OntologyExplorer, GlossaryLeftPanel, IncidentManager, and TestCaseStatusModal.
UI checkstyle (imports, ESLint, Prettier, license headers, translations, generated application docs, design-system guard) and git diff --check passed.
Cleanup commit b0c1c8c (dead Task styles, legacy classes →
tw:/Typography props, dark-safe clamp fade): 83 suites / 494 tests passed across TasksPage and OntologyExplorer; UI checkstyle clean.Backend integration tests
Not applicable — no backend/API changes.
Ingestion integration tests
Not applicable — no ingestion changes.
Playwright (UI) tests
Ran locally (chromium, 3 workers) at b0c1c8c + spec fixes in f10cb2b. Frontend: branch Vite dev server on localhost:3103; backend: local Collate server on localhost:8585 (MySQL + Elasticsearch).
Updated specs/utils for the core task form DOM (antd
#title,.ant-select-*assignee and.ant-form-item-explain-errorselectors no longer exist):TaskCreation.spec.ts,TaskAssigneeManagement.spec.ts,TasksUIFlow.spec.ts,utils/task.ts,utils/taskWorkflow.ts,utils/glossary.ts.Tasks.spec.ts,Tasks/TaskCreation.spec.ts,Tasks/TaskAssigneeManagement.spec.ts,TasksUIFlow.spec.ts,DescriptionSuggestion.spec.ts,TagsSuggestion.spec.tsOntology Studio and Incident Manager specs could not be validated locally: this backend boots the AI-mode shell, so the shared
sidebarClickhelper (unchanged here) never findsleft-sidebar, and the Incident Manager lifecycle needs an Argo server that is not running locally. CI covers these.Manual testing performed
UI screen recording / screenshots:
Before/after comparisons against main 87425d6 and branch 3ace220. Graph and task screenshots refreshed for the current UI.
Visually verified at b0c1c8c (Task form legacy-class cleanup). Task form layout is unchanged; the Diff tab now uses the same bordered panel as the Current tab, and the clamp fade resolves to the active surface (
rgb(12, 14, 18)in dark) instead of white.Recording: not attached. Marked ready for review at the requested review stage.
Checklist: